<?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>238827</bug_id>
          
          <creation_ts>2022-04-05 12:40:37 -0700</creation_ts>
          <short_desc>[JSC] Strictly annotate pointers with TrustedImmPtr in CCallHelpers</short_desc>
          <delta_ts>2022-04-05 17:55:20 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1858506</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 12:40:37 -0700</bug_when>
    <thetext>[JSC] Strictly annotate pointers with TrustedImmPtr in CCallHelpers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858507</commentid>
    <comment_count>1</comment_count>
      <attachid>456731</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 12:41:49 -0700</bug_when>
    <thetext>Created attachment 456731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858522</commentid>
    <comment_count>2</comment_count>
      <attachid>456734</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 12:57:42 -0700</bug_when>
    <thetext>Created attachment 456734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858540</commentid>
    <comment_count>3</comment_count>
      <attachid>456738</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 13:30:13 -0700</bug_when>
    <thetext>Created attachment 456738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858561</commentid>
    <comment_count>4</comment_count>
      <attachid>456738</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-04-05 14:04:09 -0700</bug_when>
    <thetext>Comment on attachment 456738
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h:97
&gt; +            jit-&gt;callOperation(operationEnsureInt32, m_tempGPR, SpeculativeJIT::TrustedImmPtr(&amp;vm), m_baseGPR);

Why &quot;SpeculativeJIT::&quot; instead of &quot;MacroAssembler::&quot;?  We use &quot;MacroAssembler::&quot; above.  Would be good to be consistent everywhere.  Ditto below.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3528
&gt; +    jit.loadDouble(SpeculativeJIT::TrustedImmPtr(&amp;zero), scratch);

Why not use MacroAssembler:: qualifier instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858573</commentid>
    <comment_count>5</comment_count>
      <attachid>456738</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 14:22:14 -0700</bug_when>
    <thetext>Comment on attachment 456738
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h:97
&gt;&gt; +            jit-&gt;callOperation(operationEnsureInt32, m_tempGPR, SpeculativeJIT::TrustedImmPtr(&amp;vm), m_baseGPR);
&gt; 
&gt; Why &quot;SpeculativeJIT::&quot; instead of &quot;MacroAssembler::&quot;?  We use &quot;MacroAssembler::&quot; above.  Would be good to be consistent everywhere.  Ditto below.

Because SpeculativeJIT::TrustedImmPtr is different from MacroAssembler::TrustedImmPtr. It has some more extra checks.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3528
&gt;&gt; +    jit.loadDouble(SpeculativeJIT::TrustedImmPtr(&amp;zero), scratch);
&gt; 
&gt; Why not use MacroAssembler:: qualifier instead?

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858665</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-04-05 17:54:17 -0700</bug_when>
    <thetext>Committed r292445 (?): &lt;https://commits.webkit.org/r292445&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858666</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-05 17:55:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/91327271&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456731</attachid>
            <date>2022-04-05 12:41:49 -0700</date>
            <delta_ts>2022-04-05 12:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238827-20220405124148.patch</filename>
            <type>text/plain</type>
            <size>250446</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
M2E2MDYwN2UwYzM2ZDYyZWYzYjU5ZDZkNzhlNzhkZmYxOWI0ZjE4Li5jZmMzZTA0ZDg2M2QyZWRi
YTJiNTJhZDE3ZGQ3NjRkNzI2YWVlMTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDAgQEAKKzIwMjItMDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTdHJpY3RseSBhbm5vdGF0ZSBwb2ludGVycyB3aXRoIFRydXN0
ZWRJbW1QdHIgaW4gQ0NhbGxIZWxwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzg4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBkZXRlY3QgcG9pbnRlciB1c2UgaW4g
REZHIGVhc3kuIFRoaXMgaXMgaW1wb3J0YW50IGluIHVubGlua2VkIERGRyBkZXZlbG9wbWVudC4K
KworICAgICAgICAqIGRmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAg
ICogZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAg
ICogZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0
OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6b3NyV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRDYWxsZWUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T1NSRXhpdEZ1enpDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5SWRGbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxldGVCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbkJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaW5nU2xpY2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9vcEhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9T
UkVudHJpZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50
cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1Ry
YXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3Vv
dXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVE
b3VibGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlQ2xhbXBEb3VibGVU
b0J5dGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpqdW1wRm9yVHlwZWRB
cnJheU91dE9mQm91bmRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6aWRlbnRpZmllclVJRCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhU
aGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhl
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW4p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUmFuZG9tKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdl
dEJ5SWRXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGxP
clVuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMy
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50MzJTdHJpY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlSW50NTIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCaWdJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDb21wYXJlRXFQdHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aEludDUyU2l6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlRGF0ZUdldCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1h
dGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5h
cnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpnZXRQcml2
YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQ
cml2YXRlQnJhbmRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVEZWxCeSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVPYmplY3RLZXlzT3JPYmplY3RH
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZU5ld1N0cmluZ09iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmVtaXROZXdUeXBlZEFycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm90aWZ5V3JpdGUpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
U3R1Yik6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgICogaml0L0ND
YWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnN0ZDo6aXNfcG9pbnRl
cjxDVVJSRU5UX0FSR1VNRU5UX1RZUEU+Ojp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2sp
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0TWF0aElDRmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6Om9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVi
dWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9u
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6CisgICAgICAgICogd2Fz
bS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKwogMjAy
Mi0wNC0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIFJlZHVjZSBzaXplb2YoQmFzZWxpbmVDYWxsTGlua0luZm8pIHRvIG1ha2UgYnVnIDIzODUz
NSBnb29kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvci5oCmluZGV4IGU5NzhiNmY4MDgwNzMyODJlZmFiNGMyYWQ5OGYx
MTUxODQ0YmI2ZDcuLjYwZjM5MGIxNDA0OWIwZmYwNGFkYzhmNWY1ODFlZTJkYWNkNDliM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93
UGF0aEdlbmVyYXRvci5oCkBAIC05NCwxNyArOTQsMTcgQEAgY2xhc3MgQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9B
c3MKICAgICAgICAgVk0mIHZtID0gaml0LT52bSgpOwogICAgICAgICBzd2l0Y2ggKG1fYXJyYXlN
b2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGpp
dC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVJbnQzMiwgbV90ZW1wR1BSLCAmdm0sIG1f
YmFzZUdQUik7CisgICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJl
SW50MzIsIG1fdGVtcEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHIoJnZtKSwgbV9i
YXNlR1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
Ci0gICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlRG91YmxlLCBt
X3RlbXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKKyAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVEb3VibGUsIG1fdGVtcEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0
ZWRJbW1QdHIoJnZtKSwgbV9iYXNlR1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIG1fdGVtcEdQUiwgJnZtLCBtX2Jhc2VHUFIpOworICAg
ICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIG1f
dGVtcEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHIoJnZtKSwgbV9iYXNlR1BSKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBqaXQt
PmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCBtX3RlbXBHUFIsICZ2
bSwgbV9iYXNlR1BSKTsKKyAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIG1fdGVtcEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgbV9iYXNlR1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQ1JBU0goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aAppbmRleCAyM2ZkNDU0N2M1OWI5MmE5MzQzNzQyYTU4NGY3ZGRjZGYyOTFmOWViLi5jZjBiODk4
NTQ1ZDFjYTVkZWE5NjM0ZjVmMjI1NzhmNWNiOWU3OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIENhbGxBcnJheUFsbG9jYXRv
clNsb3dQYXRoR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRv
CiAgICAgICAgIGxpbmtGcm9tKGppdCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3BsYW5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3Bs
YW5zW2ldKTsKLSAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG1fZnVuY3Rpb24sIG1fcmVzdWx0
R1BSLCAmaml0LT52bSgpLCBtX3N0cnVjdHVyZSwgbV9zaXplLCBtX3N0b3JhZ2VHUFIpOworICAg
ICAgICBqaXQtPmNhbGxPcGVyYXRpb24obV9mdW5jdGlvbiwgbV9yZXN1bHRHUFIsIFNwZWN1bGF0
aXZlSklUOjpUcnVzdGVkSW1tUHRyKCZqaXQtPnZtKCkpLCBtX3N0cnVjdHVyZSwgbV9zaXplLCBt
X3N0b3JhZ2VHUFIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5zLnNpemUoKTsg
aS0tOykKICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldKTsKICAgICAgICAg
aml0LT5tX2ppdC5leGNlcHRpb25DaGVjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50
c1Nsb3dQYXRoR2VuZXJhdG9yLmgKaW5kZXggMzAyMDUwMzhkMmEzZDQ2MTg0YmM3NjZhMDA3YWRl
NzdiMzM4ZDYyNi4uZjBhYjA3NDQxNTUwMTU3MzlhNDM4MGNmMzk4YjY4NDBlOTBiMjRiMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oCkBAIC01Niw3
ICs1Niw3IEBAIGNsYXNzIENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgaml0LT5zaWxlbnRT
cGlsbChtX3BsYW5zW2ldKTsKICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKAotICAgICAgICAg
ICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBtX3Jlc3VsdEdQUiwgJmppdC0+dm0o
KSwgbV9zdHJ1Y3R1cmUsIG1fbGVuZ3RoR1BSLCBtX21pbkNhcGFjaXR5KTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbV9yZXN1bHRHUFIsIFNwZWN1bGF0aXZl
SklUOjpUcnVzdGVkSW1tUHRyKCZqaXQtPnZtKCkpLCBtX3N0cnVjdHVyZSwgbV9sZW5ndGhHUFIs
IG1fbWluQ2FwYWNpdHkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5zLnNpemUo
KTsgaS0tOykKICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldKTsKICAgICAg
ICAgaml0LT5tX2ppdC5leGNlcHRpb25DaGVjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAKaW5kZXggOGIxMGRiMmFmNTJjNzY3ZWMxMmZhNGQyMTRlNzRmZGViM2Y3
YTI0Ni4uMjQzMjZhNjgwYjI4ZTk1NmQyNjU2ZDQyMjMxNWJhZjM2MDc0MzA2NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgT1NS
RXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IE1ldGhvZE9mR2V0dGluZ0FWYWwKIHsKICAgICBib29sIGNhbkV4aXQgPSBqaXQtPm1fb3JpZ2lu
LmV4aXRPSzsKICAgICBpZiAoIWNhbkV4aXQgJiYgaml0LT5tX2N1cnJlbnROb2RlKSB7Ci0gICAg
ICAgIEV4aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdChqaXQtPm1faml0LmdyYXBoKCksIGppdC0+
bV9jdXJyZW50Tm9kZSk7CisgICAgICAgIEV4aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdChqaXQt
Pm1fZ3JhcGgsIGppdC0+bV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIGNhbkV4aXQgPSBleGl0TW9k
ZSA9PSBFeGl0TW9kZTo6RXhpdHMgfHwgZXhpdE1vZGUgPT0gRXhpdE1vZGU6OkV4aXRzRm9yRXhj
ZXB0aW9uczsKICAgICB9Ci0gICAgREZHX0FTU0VSVChqaXQtPm1faml0LmdyYXBoKCksIGppdC0+
bV9jdXJyZW50Tm9kZSwgY2FuRXhpdCk7CisgICAgREZHX0FTU0VSVChqaXQtPm1fZ3JhcGgsIGpp
dC0+bV9jdXJyZW50Tm9kZSwgY2FuRXhpdCk7CiB9CiAKIENvZGVMb2NhdGlvbkp1bXA8SlNJbnRl
cm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCgpIGNvbnN0CkBAIC03
NDcsNyArNzQ3LDcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGpp
dCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogCiAgICAgaWYgKGlubGluZVN0
YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KSB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiB0
bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDApOwotICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJpYWxpemVPU1JFeGl0U2lkZVN0
YXRlKT4oJnZtLCAmZXhpdCwgdG1wU2NyYXRjaCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZl
eGl0KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRtcFNjcmF0Y2gpKTsKICAgICAgICAg
aml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKICAgICAgICAgaml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
ICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAppbmRleCA1ODRmZmQ4ODU2YjE4Yzc3NjhiY2EyZDM3OTVlOTBlODMzMWUyMTA5
Li4zZDdjYjhjMDExOWJjYzgyMTg4YzgwN2M5MzVhMWY1NjU1NzczMDYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CkBAIC0zNDMsNyArMzQzLDcgQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKFZNJiB2bSwg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmEKIHsKICAgICBBc3Nl
bWJseUhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5iYXJyaWVy
QnJhbmNoV2l0aG91dEZlbmNlKG93bmVyKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpPigmdm0sIG93bmVyKTsKKyAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIG93bmVyKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOwogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9TUldyaXRlQmFycmllcikpLCBz
Y3JhdGNoKTsKICAgICBqaXQuY2FsbChzY3JhdGNoLCBPcGVyYXRpb25QdHJUYWcpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAxNDc2
YjRlODM4NGIzN2ZmOWJkYTQ3MzNmNTExOGZlYWYxYjdjNTA4Li5mNTdiOTUwOWMxYWMxZjNiYzZi
Y2RjZGNmZWU0ZjRlZWUyZTdlODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNzksMTAgKzc5LDEwIEBAIFNwZWN1bGF0aXZlSklU
OjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQogICAgICwgbV9jdXJyZW50Tm9kZShu
dWxscHRyKQogICAgICwgbV9sYXN0R2VuZXJhdGVkTm9kZShMYXN0Tm9kZVR5cGUpCiAgICAgLCBt
X2luZGV4SW5CbG9jaygwKQotICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5ncmFwaCgpLmZy
YW1lUmVnaXN0ZXJDb3VudCgpKQorICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2dyYXBoLmZyYW1l
UmVnaXN0ZXJDb3VudCgpKQogICAgICwgbV9jb21waWxlT2theSh0cnVlKQotICAgICwgbV9zdGF0
ZShtX2ppdC5ncmFwaCgpKQotICAgICwgbV9pbnRlcnByZXRlcihtX2ppdC5ncmFwaCgpLCBtX3N0
YXRlKQorICAgICwgbV9zdGF0ZShtX2dyYXBoKQorICAgICwgbV9pbnRlcnByZXRlcihtX2dyYXBo
LCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlhYmxlRXZlbnRT
dHJlYW0pCiAgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5qaXRDb2RlKCktPm1pbmlmaWVkREZH
KQogewpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRDYWxs
ZWUoQ29kZU9yaWdpbiBvcmlnaW4sIEdQUlJlZyBjYWxsZWVHUFIpCiAgICAgICAgICAgICAgICAg
Y2FsbGVlR1BSKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0g
ICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwg
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKSwKKyAg
ICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAogICAgICAgICAg
ICAgICAgIGNhbGxlZUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTIyNSw3ICsyMjUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0QXJndW1lbnRTdGFydChDb2RlT3JpZ2lu
IG9yaWdpbiwgR1BSUmVnIHN0YXJ0R1BSKQogTWFjcm9Bc3NlbWJsZXI6Okp1bXAgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRPU1JFeGl0RnV6ekNoZWNrKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9T
UkV4aXRGdXp6KCkKLSAgICAgICAgfHwgIWNhblVzZU9TUkV4aXRGdXp6aW5nKG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICB8fCAh
Y2FuVXNlT1NSRXhpdEZ1enppbmcobV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX29yaWdp
bi5zZW1hbnRpYykpCiAgICAgICAgIHx8ICFkb09TUkV4aXRGdXp6aW5nKCkpCiAgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCgpOwogICAgIApAQCAtMjcwLDcgKzI3MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlCiAgICAgICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBz
VG9GYWlsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRv
RmFpbCk7Ci0gICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJl
bnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmFwcGVu
ZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2dyYXBoLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFt
LT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCkBAIC0yODUsNyArMjg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdElu
Zm8obXlKdW1wc1RvRmFpbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1faml0LmFwcGVuZEV4aXRJ
bmZvKGp1bXBzVG9GYWlsKTsKLSAgICBtX2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAg
bV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1fZ3JhcGgu
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhp
cywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKQEAgLTI5NCw3ICsyOTQsNyBAQCBPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTbwogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQubV9vc3JFeGl0LnNpemUoKTsKICAgICBtX2ppdC5h
cHBlbmRFeGl0SW5mbygpOwotICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBq
c1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVG
b3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBt
X2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9ncmFwaC5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlz
LCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIo
aW5kZXgpOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UK
ICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBtX2ppdC5hcHBl
bmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5m
byhqdW1wVG9GYWlsKTsKLSAgICBtX2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNW
YWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUlu
ZGV4KSk7CisgICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2Rl
LCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgcmVjb3ZlcnlJbmRleCkpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKQEAgLTUx
Miw3ICs1MTIsNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzaWxl
bnRTYXZlUGxhbkZvckdQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbAogICAgIH0gZWxzZSBpZiAocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKICAgICAgICAgQVNTRVJUKGluZm8uZ3By
KCkgPT0gc291cmNlKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgbm9kZS0+aXND
ZWxsQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVu
dE5vZGUsIG5vZGUtPmlzQ2VsbENvbnN0YW50KCkpOwogICAgICAgICAgICAgbm9kZS0+YXNDZWxs
KCk7IC8vIFRvIGdldCB0aGUgYXNzZXJ0aW9uLgogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNl
dENlbGxDb25zdGFudDsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg1Niw3ICs4NTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vZGUpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwogICAgIAotICAgIGlmIChhcnJheU1vZGUuYWxyZWFkeUNoZWNrZWQobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKKyAg
ICBpZiAoYXJyYXlNb2RlLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBwdXJnZSBFbXB0eSBj
aGVjayBjb21wbGV0ZWx5IGluIHRoaXMgY2FzZSBvZiBDaGVja0FycmF5T3JFbXB0eSBzaW5jZSBD
ZWxsVXNlIG9ubHkgYWNjZXB0cyBTcGVjQ2VsbCB8IFNwZWNFbXB0eS4KICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBBU1NFUlQodHlwZUZpbHRlckZvcihub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpICYgU3BlY0VtcHR5KTsKQEAgLTEwMTcsOCArMTAxNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnVzZUNoaWxkcmVuKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAgICAgIGlmICghIW1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgdXNlKG1faml0Lmdy
YXBoKCkubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgaWYgKCEhbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKKyAgICAgICAgICAgICAgICB1c2UobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwpAQCAtMTEwMCw3ICsxMTAw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5SWQoTm9kZSogbm9kZSwgQWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19D
UkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KQEAgLTExNjUsNyArMTE2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeUlkRmx1c2goTm9kZSogbm9kZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIH0KIAog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBr
aW5kIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTEyMTEsNyArMTIxMSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxldGVCeUlkKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwKLSAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkucmF3Qml0
cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOwogICAg
ICAgICB9CiAjZWxzZQogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+
IHNsb3dQYXRoOwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURlbGV0ZUJ5SWQoTm9kZSogbm9kZSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLAotICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFs
dWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEND
YWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVy
KCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAg
ICAgICAgIH0KICNlbmRpZgogCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRGVsZXRlQnlWYWwoTm9kZSogbm9kZSkKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgp
KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwga2V5UmVncywgVHJ1
c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOwogICAgICAgICB9CiAjZWxzZQog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwpAQCAt
MTMwOCw3ICsxMzA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5VmFs
KE5vZGUqIG5vZGUpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3Jp
Z2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwg
a2V5UmVncywgVHJ1c3RlZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOworICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIGtleVJlZ3MsIFRy
dXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAgICAgfQogI2VuZGlm
CiAKQEAgLTEzNzgsNyArMTM3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbkJ5
SWQoTm9kZSogbm9kZSkKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkluQnlJZE9wdGltaXplLAogICAgICAgICAg
ICAgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAot
ICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwg
Q0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZp
ZXIoKS5yYXdCaXRzKCkpOworICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikp
LCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
YmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCkpOwogICAgIH0K
IAogICAgIG1faml0LmFkZEluQnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTE0MjgsNyAr
MTQyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbkJ5VmFsKE5vZGUqIG5vZGUp
CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsCiAgICAgICAgICAgICBOZWVkVG9TcGls
bCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2Fs
bEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwga2V5UmVncyk7CisgICAgICAgICAgICByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBu
dWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwga2V5UmVncyk7CiAgICAg
fQogCiAgICAgbV9qaXQuYWRkSW5CeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTE0ODIs
NyArMTQ4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNQcml2YXRlKE5vZGUq
IG5vZGUsIEFjY2Vzc1R5cGUgdHlwZSkKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFz
UHJpdmF0ZUJyYW5kT3B0aW1pemUsCiAgICAgICAgICAgICBOZWVkVG9TcGlsbCwgRXhjZXB0aW9u
Q2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
YXNlR1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlPckJyYW5kR1BSKSk7Cisg
ICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgQ0NhbGxIZWxw
ZXJzOjpDZWxsVmFsdWUocHJvcGVydHlPckJyYW5kR1BSKSk7CiAgICAgfQogCiAgICAgbV9qaXQu
YWRkSW5CeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTE5MTEsNyArMTkxMSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdTbGljZShOb2RlKiBub2RlKQogCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBhdXRvIG5vbkVtcHR5Q2FzZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgc3RhcnRJbmRleEdQUiwgdGVtcEdQUik7Ci0gICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0Vt
cHR5U3RyaW5nKHZtKSksIHRlbXBHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyh2bSkpLCB0ZW1wR1BSKTsKICAgICBk
b25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKICAgICBub25FbXB0eUNhc2UubGluaygm
bV9qaXQpOwpAQCAtMTk0MSw3ICsxOTQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmluZ1NsaWNlKE5vZGUqIG5vZGUpCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW1QdHIo
dm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHRlbXBHUFIpOwogICAg
IG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHRlbXBHUFIpLCB0ZW1wR1BSKTsK
IAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiaWdDaGFyYWN0ZXIsIHRo
aXMsIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZywgdGVtcEdQUiwgJnZtLCB0ZW1wR1BS
KSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJpZ0NoYXJhY3Rlciwg
dGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCB0ZW1wR1BSLCBUcnVzdGVkSW1t
UHRyKCZ2bSksIHRlbXBHUFIpKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblN0cmluZ1N1YnN0ciwgdGVtcEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQUiwgc3RhcnRJbmRleEdQUiwgdGVtcEdQ
UikpOwogCkBAIC0yMTE0LDE5ICsyMTE0LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb29wSGludChOb2RlKiBub2RlKQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpKSkgewogICAgICAgICBib29sIGVtaXRF
YXJseVJldHVybiA9IHRydWU7CiAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy53YWxrVXBJ
bmxpbmVTdGFjayhbJl0oQ29kZU9yaWdpbiBvcmlnaW4pIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9y
KG9yaWdpbik7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihvcmlnaW4pOwogICAgICAgICAgICAgaWYgKCFiYXNl
bGluZUNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KSkKICAgICAgICAgICAgICAgICBlbWl0RWFybHlSZXR1cm4gPSBmYWxzZTsKICAgICAgICAgfSk7
CiAgICAgICAgIGlmIChlbWl0RWFybHlSZXR1cm4pIHsKLSAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8qIGlu
c3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpLnB0cigpOwogCiAgICAgICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgICAg
IG1faml0LnB1c2hUb1NhdmUoR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihwdHIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0
dXJuID0gbV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIEdQUkluZm86OnJlZ1Qw
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5m
aW5pdGVMb29wc0xpbWl0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0g
bV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIEdQUkluZm86OnJlZ1QwLCBUcnVz
dGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CiAKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAodmFsaWRhdGVERkdEb2VzR0MpIHsKICAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVEb2VzR0MoKSkgewpAQCAtMjIxNCw3ICsy
MjE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAg
fQogCiAgICAgaWYgKG1fYmxvY2stPmlzQ2F0Y2hFbnRyeXBvaW50KSB7Ci0gICAgICAgIG1faml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtKG1faml0LmdyYXBoKCkuZnJhbWVS
ZWdpc3RlckNvdW50KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIG1f
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtKG1fZ3JhcGguZnJhbWVSZWdp
c3RlckNvdW50KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1faml0
LmVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgbV9qaXQuZW1pdE1hdGVyaWFsaXplVGFn
Q2hlY2tSZWdpc3RlcnMoKTsKICAgICAgICAgLy8gQ29kZUJsb2NrIGluIHRoZSBzdGFjayBpcyBh
bHJlYWR5IHJlcGxhY2VkIGluIE9TUiBlbnRyeS4KQEAgLTIyNDAsNyArMjI0MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAgICAgICBpZiAoIW5vZGUt
PnJlZkNvdW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTm8gbmVlZCB0byByZWNvcmQg
ZGVhZCBTZXRMb2NhbCdzLgogICAgICAgICBmb3JtYXQgPSBkYXRhRm9ybWF0Rm9yKHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpKTsKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2Rl
LCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50b0Fy
Z3VtZW50KCkgPj0gMCk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIW9wZXJh
bmQuaXNBcmd1bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgp
ID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNl
dExvY2FsKG9wZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KSk7CiAgICAg
fQogCkBAIC0yMjg5LDggKzIyODksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrKCkKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAg
ICAgICAgICAgIGRhdGFMb2dMbigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAiLCAo
aW50KW1fY3VycmVudE5vZGUtPmluZGV4KCksICIgKCIsIG1fY3VycmVudE5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCksICIpIGF0IEpJVCBvZmZzZXQgMHgiLCBt
X2ppdC5kZWJ1Z09mZnNldCgpKTsKIAotICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVERkdF
eGNlcHRpb25IYW5kbGluZygpICYmIChtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5v
ZGUpICE9IERvZXNOb3RFeGl0IHx8IG1fY3VycmVudE5vZGUtPmlzVGVybWluYWwoKSkpCi0gICAg
ICAgICAgICBtX2ppdC5qaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24obV9qaXQudm0oKSk7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgJiYgKG1h
eUV4aXQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4aXQgfHwgbV9jdXJyZW50
Tm9kZS0+aXNUZXJtaW5hbCgpKSkKKyAgICAgICAgICAgIG1faml0LmppdFJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbih2bSgpKTsKIAogICAgICAgICBtX2ppdC5wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIoKS5hcHBlbmRJdGVtKG1faml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBtX29yaWdp
bi5zZW1hbnRpYyk7CiAKQEAgLTIzNTAsNyArMjM1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBt
X29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSwgdHJ1ZSk7CiAKLSAgICBhdXRvJiBhcmd1bWVudHMgPSBt
X2ppdC5ncmFwaCgpLm1fcm9vdFRvQXJndW1lbnRzLmZpbmQobV9qaXQuZ3JhcGgoKS5ibG9jaygw
KSktPnZhbHVlOworICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVu
dHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAg
ICBOb2RlKiBub2RlID0gYXJndW1lbnRzW2ldOwogICAgICAgICBpZiAoIW5vZGUpIHsKQEAgLTI0
MjIsOSArMjQyMiw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIGNoZWNr
QXJndW1lbnRUeXBlcygpOwogICAgIAogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7Ci0gICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgo
KS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KSB7CiAgICAgICAgIG1faml0LnNldEZvckJsb2NrSW5kZXgoYmxvY2tJbmRleCk7Ci0gICAgICAg
IG1fYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBtX2Js
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgY29tcGlsZUN1cnJlbnRC
bG9jaygpOwogICAgIH0KICAgICBsaW5rQnJhbmNoZXMoKTsKQEAgLTI0MzMsOCArMjQzMyw4IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
cmVhdGVPU1JFbnRyaWVzKCkKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGJsb2NrLT5pc09TUlRhcmdldCB8fCBi
bG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKQEAgLTI0NDgsMTQgKzI0NDgsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjps
aW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIHVuc2lnbmVkIG9z
ckVudHJ5SW5kZXggPSAwOwotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7
CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCAmJiAhYmxv
Y2stPmlzQ2F0Y2hFbnRyeXBvaW50KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKLSAgICAgICAgICAgIGF1dG8mIGFyZ3VtZW50
c1ZlY3RvciA9IG1faml0LmdyYXBoKCkubV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jayktPnZh
bHVlOworICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzVmVjdG9yID0gbV9ncmFwaC5tX3Jvb3RU
b0FyZ3VtZW50cy5maW5kKGJsb2NrKS0+dmFsdWU7CiAgICAgICAgICAgICBWZWN0b3I8Rmx1c2hG
b3JtYXQ+IGFyZ3VtZW50Rm9ybWF0czsKICAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50c1ZlY3Rvci5zaXplKCkpOwogICAgICAgICAgICAg
Zm9yIChOb2RlKiBzZXRBcmd1bWVudCA6IGFyZ3VtZW50c1ZlY3RvcikgewpAQCAtMjQ3NCw3ICsy
NDc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKICAgICB9CiAKICAgICBtX2ppdC5qaXRDb2RlKCktPmZpbmFsaXplT1NSRW50
cnlwb2ludHMoV1RGTW92ZShtX2ppdC5tX29zckVudHJ5KSk7Ci0gICAgbV9qaXQuaml0Q29kZSgp
LT5jb21tb24uZmluYWxpemVDYXRjaEVudHJ5cG9pbnRzKFdURk1vdmUobV9qaXQuZ3JhcGgoKS5t
X2NhdGNoRW50cnlwb2ludHMpKTsKKyAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5maW5hbGl6
ZUNhdGNoRW50cnlwb2ludHMoV1RGTW92ZShtX2dyYXBoLm1fY2F0Y2hFbnRyeXBvaW50cykpOwog
CiAgICAgQVNTRVJUKG9zckVudHJ5SW5kZXggPT0gbV9vc3JFbnRyeUhlYWRzLnNpemUoKSk7CiAg
ICAgCkBAIC0yNDk1LDcgKzI0OTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hl
Y2tUcmFwcyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyB1bnVzZWRHUFIgPSB1bnVzZWQuZ3ByKCk7
CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVHJhcEhhbmRsaW5nID0gbV9qaXQuYnJhbmNo
VGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1
dGVBZGRyZXNzKG1faml0LnZtKCkudHJhcHMoKS50cmFwQml0c0FkZHJlc3MoKSksCisgICAgICAg
IEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Modm0oKS50cmFwcygpLnRyYXBCaXRzQWRkcmVz
cygpKSwKICAgICAgICAgVHJ1c3RlZEltbTMyKFZNVHJhcHM6OkFzeW5jRXZlbnRzKSk7CiAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobmVlZFRyYXBIYW5kbGluZywgdGhp
cywgb3BlcmF0aW9uSGFuZGxlVHJhcHMsIHVudXNlZEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSkpKTsKQEAgLTI1MDQsOSArMjUwNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDaGVja1RyYXBzKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CiAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CkBAIC0yNTE1LDcgKzI1MTUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUqIG5vZGUpCiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOwor
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCiAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewpAQCAtMjU3MywyMiArMjU3MywyMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSogbm9kZSkKIHsK
ICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAKICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CiAgICAgRlBSUmVnIHZhbHVlUmVnID0gdmFsdWUuZnByKCk7CiAKICAgICBERkdf
VFlQRV9DSEVDSygKLSAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAyKSwgU3BlY0Z1bGxSZWFsTnVtYmVyLAorICAgICAgICBKU1ZhbHVlUmVncygp
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBTcGVjRnVsbFJlYWxOdW1iZXIsCiAgICAg
ICAgIG1faml0LmJyYW5jaElmTmFOKHZhbHVlUmVnKSk7CiAKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRC
eVZhbEFsaWFzKSB7CkBAIC0yNjQ3LDEwICsyNjQ3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsKE5vZGUqIG5vZGUpCiB7CiAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKTsKLSAgICBFZGdlIGNoaWxkMSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgRWRnZSBjaGlsZDIgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICBFZGdlIGNoaWxkNCA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CisgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApOworICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKKyAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7
CisgICAgRWRnZSBjaGlsZDQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogCiAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6QW55VHlwZWRBcnJh
eToKQEAgLTI2NjYsMTQgKzI2NjYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICBj
YXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKICNlbmRpZgotICAgICAgICBERkdfQ1JBU0gobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFr
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAg
ICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKICNlbmRpZgogICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6IHsKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5v
cCgpID09IFB1dEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QsIG5vZGUtPm9w
KCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gUHV0
QnlWYWwgfHwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCwgbm9kZS0+b3AoKSk7CiAgICAg
ICAgIGlmIChtX2dyYXBoLm1fc2xvd1B1dEJ5VmFsLmNvbnRhaW5zKG5vZGUpIHx8IChjaGlsZDEu
dXNlS2luZCgpICE9IENlbGxVc2UgJiYgY2hpbGQxLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2Up
KSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IGNoaWxk
MS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Mi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CkBAIC0yNzU1LDcgKzI3NTUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWwoTm9kZSogbm9kZSkKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0
dWJJbmZvKCksIG51bGxwdHIpOworICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3Jp
Z2luKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIG51bGxwdHIpOwogICAgICAgICB9CiAKICAgICAgICAgbV9qaXQuYWRk
UHV0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC0yOTQ5LDcgKzI5NDksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOgogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9u
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKKyAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hSZWcpKTsKIAogICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgQVNTRVJU
KGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwpAQCAtMjk2OSw4ICsyOTY5LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDoKICAgICAgICAgICAgIC8vIG9uIGEgc3RyaW5nUHJvdG90eXBlQ2hhaW5J
c1NhbmVDb25jdXJyZW50bHkoKSBndWFyYW50ZWVpbmcgdGhhdCB0aGUgcHJvdG90eXBlcyBoYXZl
IG5vIG5lZ2F0aXZlCiAgICAgICAgICAgICAvLyBpbmRleGVkIHByb3BlcnRpZXMgZWl0aGVyLgog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDY2OAotICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJl
VHJhbnNpdGlvbihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9qaXQu
Z3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihvYmplY3RQcm90b3R5
cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0
dXJlVHJhbnNpdGlvbihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9n
cmFwaC5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihvYmplY3RQcm90b3R5cGVT
dHJ1Y3R1cmUpOwogCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVl
PFNhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgICAgICAgICBv
dXRPZkJvdW5kcywgdGhpcywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKQEAgLTM1MjUs
MTIgKzM1MjUsMTIgQEAgc3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVENv
bXBpbGVyJiBqaXQsIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBzb3UKICAgICBzdGF0aWMgY29uc3Rl
eHByIGRvdWJsZSB6ZXJvID0gMDsKICAgICBzdGF0aWMgY29uc3RleHByIGRvdWJsZSBieXRlTWF4
ID0gMjU1OwogICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIGhhbGYgPSAwLjU7Ci0gICAgaml0
LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJnplcm8pLCBzY3JhdGNoKTsK
KyAgICBqaXQubG9hZERvdWJsZShTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmemVybyks
IHNjcmF0Y2gpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRvb1NtYWxsID0gaml0LmJyYW5j
aERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IHNvdXJjZSwgc2NyYXRjaCk7Ci0gICAgaml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIoJmJ5dGVNYXgpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZERvdWJsZShTcGVjdWxh
dGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmYnl0ZU1heCksIHNjcmF0Y2gpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHRvb0JpZyA9IGppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUdyZWF0ZXJUaGFuQW5kT3JkZXJlZCwgc291cmNlLCBzY3JhdGNoKTsKICAgICAKLSAgICBq
aXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigmaGFsZiksIHNjcmF0Y2gp
OworICAgIGppdC5sb2FkRG91YmxlKFNwZWN1bGF0aXZlSklUOjpUcnVzdGVkSW1tUHRyKCZoYWxm
KSwgc2NyYXRjaCk7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGp1c3QgdXNl
IGEgZmxvYXRpbmcgcG9pbnQgcm91bmQhCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyMDU0CiAgICAgaml0LmFkZERvdWJsZShzb3VyY2UsIHNjcmF0Y2gp
OwpAQCAtMzU1MywxMSArMzU1MywxMSBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6anVtcEZvclR5cGVkQXJyYXlPdXRPZkJvdW5kcyhOb2RlKiBub2RlLCBHUFJSZQogewogICAg
IGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCiAgICAgICAgIHJldHVybiBKSVRDb21w
aWxlcjo6SnVtcCgpOwotICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9qaXQuZ3JhcGgo
KS50cnlHZXRGb2xkYWJsZVZpZXcoCi0gICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX2ppdC5ncmFw
aCgpLmNoaWxkKG5vZGUsIDApKS5tX3ZhbHVlLCBub2RlLT5hcnJheU1vZGUoKSk7CisgICAgSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlldygKKyAgICAg
ICAgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGguY2hpbGQobm9kZSwgMCkpLm1fdmFsdWUsIG5vZGUt
PmFycmF5TW9kZSgpKTsKICAgICBpZiAodmlldykgewogICAgICAgICBzaXplX3QgbGVuZ3RoID0g
dmlldy0+bGVuZ3RoKCk7Ci0gICAgICAgIE5vZGUqIGluZGV4Tm9kZSA9IG1faml0LmdyYXBoKCku
Y2hpbGQobm9kZSwgMSkubm9kZSgpOworICAgICAgICBOb2RlKiBpbmRleE5vZGUgPSBtX2dyYXBo
LmNoaWxkKG5vZGUsIDEpLm5vZGUoKTsKICAgICAgICAgaWYgKGluZGV4Tm9kZS0+aXNBbnlJbnRD
b25zdGFudCgpICYmIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbmRleE5vZGUtPmFzQW55SW50KCkp
IDwgbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpKdW1wKCk7CiAjaWYg
VVNFKExBUkdFX1RZUEVEX0FSUkFZUykKQEAgLTM4ODIsOSArMzg4Miw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlw
ZWRBcnJheVR5cGUKIHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogCi0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMzkwNCw3
ICszOTA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgICAgIHByb3BlcnR5VGFnLCB2YWx1ZVRhZywKICNlbmRpZgotICAgICAgICBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzbG93UGF0aENhc2VzLCBpc0NsYW1wZWQodHlw
ZSkpOworICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzbG93UGF0aENhc2Vz
LCBpc0NsYW1wZWQodHlwZSkpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC00MDAyLDEwICs0MDAyLDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwCiB7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogCi0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB2YWx1ZU9wKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAzKSk7CiAKICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBH
UFJUZW1wb3JhcnkgZ3BTY3JhdGNoKHRoaXMpOwpAQCAtNDEwOSwxNCArNDEwOSwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJpdmF0ZU5hbWUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0UHJpdmF0ZU5hbWVCeVZhbChOb2RlKiBub2RlLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSkKIHsKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCks
IG5vZGUsIG5vZGUtPm9wKCkgPT0gR2V0UHJpdmF0ZU5hbWUpOwotICAgIERGR19BU1NFUlQobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgbV9ncmFwaC5jaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3lt
Ym9sVXNlKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gR2V0
UHJpdmF0ZU5hbWUpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbV9ncmFwaC5jaGls
ZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8
R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CkBAIC00MTU2LDcgKzQxNTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0UHJpdmF0ZU5hbWVCeVZhbChOb2RlKiBub2RlLCBKU1ZhbHVlUmVncyBiYXNlLCBKUwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsCi0gICAgICAgICAgICBy
ZXN1bHQucmVncygpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLAorICAgICAgICAg
ICAgcmVzdWx0LnJlZ3MoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwKICAgICAgICAgICAgIGJhc2UsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHByb3Bl
cnR5LnBheWxvYWRHUFIoKSkpOwogICAgIH07CiAKQEAgLTQyMjIsMjIgKzQyMjIsMjIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByaXZhdGVOYW1lQnlJZChOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAi
QmFkIHVzZSBraW5kIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSogbm9kZSkKIHsK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Myh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMyh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKIAogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBH
UFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgYXJnM1JlZ3MgPSBh
cmczLmpzVmFsdWVSZWdzKCk7CiAKLSAgICBzcGVjdWxhdGVTdHJpbmcobV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CisgICAgc3BlY3VsYXRlU3RyaW5nKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICBjYWxsT3BlcmF0aW9uKApAQCAtNDI1MiwxNSArNDI1MiwxNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiBub2RlKQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChO
b2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YXJnMih0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBhcmczKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikp
OworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwogCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcx
LmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICBKU1ZhbHVlUmVn
cyBhcmczUmVncyA9IGFyZzMuanNWYWx1ZVJlZ3MoKTsKIAotICAgIHNwZWN1bGF0ZVN5bWJvbCht
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKKyAgICBzcGVjdWxh
dGVTeW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgIGNhbGxPcGVyYXRpb24oCkBAIC00MzU5LDcgKzQzNTksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUoTm9kZSogbm9kZSkK
ICAgICB9IGVsc2UgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLAotICAgICAgICAgICAgTm9SZXN1bHQsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIENDYWxsSGVs
cGVyczo6Q2VsbFZhbHVlKHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBDQ2FsbEhl
bHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVy
dHlHUFIpLCB2YWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBudWxscHRy
KTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRQdXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsK
QEAgLTQ0MzcsNyArNDQzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1By
aXZhdGVCcmFuZChOb2RlKiBub2RlKQogICAgIH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0g
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZE9wdGltaXplLCBOb1Jlc3VsdCwKLSAgICAgICAgICAgIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
cmFuZEdQUikpOworICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgYmFzZVJlZ3MsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BS
KSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkUHJpdmF0ZUJyYW5kQWNjZXNzKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwpAQCAtNDQ4NSw3ICs0NDg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNldFByaXZhdGVCcmFuZChOb2RlKiBub2RlKQogICAgIH0gZWxzZSB7CiAgICAgICAgIHNs
b3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgTm9SZXN1bHQsCi0gICAgICAgICAgICBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihj
b2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYnJhbmRHUFIpKTsKKyAgICAgICAgICAgIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIENDYWxsSGVscGVy
czo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShicmFuZEdQUikp
OwogICAgIH0KIAogICAgIG1faml0LmFkZFByaXZhdGVCcmFuZEFjY2VzcyhnZW4sIHNsb3dQYXRo
LmdldCgpKTsKQEAgLTQ2MjQsNyArNDYyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnN0YW5jZU9mRm9yQ2VsbHMoTm9kZSogbm9kZSwgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzCiAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0dWJJbmZvR1BSLCB2YWx1ZVJlZ3Ms
IHByb3RvdHlwZVJlZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1Bh
dGhDYWxsKAotICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGdlbi5zdHVi
SW5mbygpLCB2YWx1ZVJlZ3MsIHByb3RvdHlwZVJlZ3MpOworICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCB2YWx1ZVJl
Z3MsIHByb3RvdHlwZVJlZ3MpOwogICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRJbnN0YW5jZU9m
KGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtNDY2Miw4ICs0NjYyLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSogbm9kZSkKICAgICB9CiAjZW5kaWYKICAg
ICAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKICAgICAKICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4g
c3R1YkluZm87CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwpAQCAtNDc3Niw3ICs0Nzc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRP
ckFueUJpZ0ludEJpdE9wKE5vZGUqIG5vZGUpCiAgICAgRWRnZSYgbGVmdENoaWxkID0gbm9kZS0+
Y2hpbGQxKCk7CiAgICAgRWRnZSYgcmlnaHRDaGlsZCA9IG5vZGUtPmNoaWxkMigpOwogCi0gICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEFueUJpZ0ludFVzZSkgfHwgbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKEhlYXBCaWdJbnRVc2UpIHx8IG5vZGUtPmlzQmluYXJ5VXNlS2luZChC
aWdJbnQzMlVzZSkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKFVudHlwZWRVc2UpIHx8IG5vZGUtPmlzQmluYXJ5VXNlS2luZChBbnlCaWdJbnRV
c2UpIHx8IG5vZGUtPmlzQmluYXJ5VXNlS2luZChIZWFwQmlnSW50VXNlKSB8fCBub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoQmlnSW50MzJVc2UpKTsKIAogICAgIGlmIChpc0tub3duTm90TnVtYmVyKGxl
ZnRDaGlsZC5ub2RlKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIocmlnaHRDaGlsZC5ub2RlKCkpKSB7
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGxlZnQodGhpcywgbGVmdENoaWxkLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwpAQCAtNTI2MSw3ICs1MjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlQWRkKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0Lmpp
dENvZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CkBAIC01MzQ1LDcgKzUz
NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kZSogbm9kZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAg
SklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKQEAgLTU2MDgsNyArNTYwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUb09iamVjdE9yQ2FsbE9iamVjdENvbnN0cnVjdG9yKE5vZGUqIG5vZGUpCiAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBlcnJvck1lc3NhZ2UgPSBudWxscHRyOwogICAgICAgICBpZiAo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpICE9IFVJTlQzMl9NQVgpCiAgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSk7Ci0gICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvblRvT2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2
YWx1ZVJlZ3MsIGVycm9yTWVzc2FnZSkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25Ub09iamVjdCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKGVy
cm9yTWVzc2FnZSkpKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uQ2FsbE9iamVjdENvbnN0cnVj
dG9yLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSksIHZhbHVl
UmVncykpOwogCkBAIC01NzQ5LDcgKzU3NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhBYnMoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVSZWdzIG9wMVJlZ3MgPSBv
cDEuanNWYWx1ZVJlZ3MoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTU5MjcsNyAr
NTkyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmNPckRlYyhOb2RlKiBub2Rl
KQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKE5vZGUqIG5vZGUpCiB7
CiAgICAgLy8gRklYTUU6IGFkZCBhIGZhc3QgcGF0aCwgYXQgbGVhc3QgZm9yIEJpZ0ludDMyLCBi
dXQgcHJvYmFibHkgYWxzbyBmb3IgSGVhcEJpZ0ludCBoZXJlLgotICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
Z3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNv
ZGVJbmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpOwogICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CkBAIC02MTcxLDcgKzYxNzEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTXVsSUMqIG11bElDID0gbV9q
aXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKQEAgLTY2NDQs
NyArNjY0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU1vZChOb2RlKiBu
b2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFw
aCgpLCBub2RlLCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5i
aW5hcnlVc2VLaW5kKCkgPT0gQW55QmlnSW50VXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9
PSBCaWdJbnQzMlVzZSwgbm9kZS0+YmluYXJ5VXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgp
ID09IEJpZ0ludDMyVXNlLCBub2RlLT5iaW5hcnlVc2VLaW5kKCkpOwogICAgIEpTVmFsdWVPcGVy
YW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CiAgICAgc3BlY3VsYXRlKG5vZGUsIGxlZnRDaGlsZCk7CkBAIC03MDMyLDcgKzcwMzIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSb3VuZGluZyhOb2RlKiBub2Rl
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgp
LCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
OwogCiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50UmVncyA9IGFyZ3VtZW50LmpzVmFsdWVSZWdzKCk7CkBA
IC03MTY0LDcgKzcxNjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNaW5N
YXgoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0go
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9
CkBAIC03MTc3LDcgKzcxNzcsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY29tcGls
ZUFyaXRoUG93SW50ZWdlckZhc3RQYXRoKEpJVENvbXBpbGVyJiBhc3NlbWJsZQogICAgIHNraXBG
YXN0UGF0aC5hcHBlbmQoYXNzZW1ibGVyLmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwg
eU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobWF4RXhwb25lbnRGb3JJbnRl
Z2VyTWF0aFBvdykpKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIG9uZUNvbnN0YW50
ID0gMS4wOwotICAgIGFzc2VtYmxlci5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKCZvbmVDb25zdGFudCksIHJlc3VsdCk7CisgICAgYXNzZW1ibGVyLmxvYWREb3VibGUo
U3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0YW50KSwgcmVzdWx0KTsKIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydExvb3AoYXNzZW1ibGVyLmxhYmVsKCkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4cG9uZW50SXNFdmVuID0gYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgeU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSkpOwpAQCAtNzIxOSw3ICs3MjE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlUG93KE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2Ug
fHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlLCBub2RlLT5iaW5hcnlVc2VL
aW5kKCkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+YmluYXJ5VXNlS2lu
ZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVz
ZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UsIG5vZGUtPmJpbmFyeVVz
ZUtpbmQoKSk7CiAKICAgICBKU1ZhbHVlT3BlcmFuZCBsZWZ0KHRoaXMsIGxlZnRDaGlsZCwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBKU1ZhbHVlT3BlcmFuZCByaWdodCh0aGlzLCBy
aWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtODIzNiw3ICs4MjM2LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhblN0cmluZyhOb2RlKiBub2Rl
LCBib29sIGludmVydCkKICAgICBHUFJUZW1wb3JhcnkgZXEodGhpcyk7CiAgICAgR1BSUmVnIGVx
R1BSID0gZXEuZ3ByKCk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBlcUdQUik7CisgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBqc0VtcHR5U3RyaW5n
KHZtKCkpKSwgZXFHUFIpOwogICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gQ0NhbGxIZWxw
ZXJzOjpFcXVhbCA6IENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHN0ckdQUiwgZXFHUFIsIGVxR1BS
KTsKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KGVxR1BSLCBub2RlKTsKIH0KQEAgLTgyNTMs
NyArODI1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5TdHJpbmdP
ck90aGVyKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogICAgIERGR19UWVBFX0NIRUNLKAogICAg
ICAgICB2YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCAoflNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0
cmluZywgbV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoY2VsbEdQUikpOwogCi0gICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5n
KHZtKCkpKSwgdGVtcEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgdGVtcEdQUik7CiAgICAgbV9qaXQu
Y29tcGFyZVB0cihpbnZlcnQgPyBDQ2FsbEhlbHBlcnM6OkVxdWFsIDogQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgY2VsbEdQUiwgdGVtcEdQUiwgdGVtcEdQUik7CiAgICAgYXV0byBkb25lID0gbV9q
aXQuanVtcCgpOwogCkBAIC04Mjc0LDcgKzgyNzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0U3RyaW5nQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxv
YwogCiAgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGVVc2UsIHN0ckdQUik7CiAKLSAgICBicmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc3RyR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgbm90VGFrZW4pOworICAgIGJy
YW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CiAgICAganVt
cCh0YWtlbik7CiAKICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKQEAgLTgyOTEsNyArODI5
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdPck90aGVyQnJhbmNoKEVkZ2Ug
bm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhCiAgICAgR1BSUmVnIGNlbGxHUFIgPSB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpOwogICAgIERGR19UWVBFX0NIRUNLKHZhbHVlUmVncywgbm9kZVVz
ZSwgKH5TcGVjQ2VsbENoZWNrKSB8IFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaElmTm90U3RyaW5n
KGNlbGxHUFIpKTsKIAotICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBjZWxsR1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5n
KHZtKCkpKSwgbm90VGFrZW4pOworICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBj
ZWxsR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBqc0VtcHR5U3RyaW5n
KHZtKCkpKSwgbm90VGFrZW4pOwogICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAKICAgICBu
b3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTgzMzEsNyArODMzMSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIGJvCiAgICAgaWYgKCFHaWdhY2FnZTo6ZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJ
c0ZvcmJpZGRlbigpKSB7CiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIGlm
ICh2bS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkodm0ucHJpbWl0aXZlR2ln
YWNhZ2VFbmFibGVkKCkpOworICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseSh2bS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgdW50YWdBcnJheVB0cigpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODU3NSw3
ICs4NTc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbFRoaXMoTm9k
ZSogbm9kZSkKIHsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIG1faml0LmxvYWRQdHIoZ2xvYmFsT2JqZWN0LT5hZGRyZXNzT2ZHbG9iYWxU
aGlzKCksIHJlc3VsdEdQUik7CiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpA
QCAtODczOCw3ICs4NzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0
aW9uQ29tbW9uKEdQUlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1Y3QKICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNs
b3dQYXRoLCBzaXplKTsKICAgICAKICAgICBtX2ppdC5zdG9yZVB0cihzY29wZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSkpOwotICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIGV4ZWN1dGFibGUpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSkpOworICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSkpOwogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIH0KIApA
QCAtODc1OSwyMSArODc1OSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVu
Y3Rpb24oTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBp
ZiAobm9kZVR5cGUgPT0gTmV3R2VuZXJhdG9yRnVuY3Rpb24pCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCByZXN1bHRHUFIsICZ2bSgpLCBz
Y29wZUdQUiwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkp
OwogICAgICAgICBlbHNlIGlmIChub2RlVHlwZSA9PSBOZXdBc3luY0Z1bmN0aW9uKQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCByZXN1bHRHUFIs
ICZ2bSgpLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRh
YmxlKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGVUeXBlID09IE5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24pCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCAm
dm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2Nv
cGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpKTsK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKAorICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVy
ZSgKICAgICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGVUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIE5ld0dlbmVyYXRvckZ1bmN0aW9uOgog
ICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmdlbmVyYXRvckZ1bmN0aW9uU3Ry
dWN0dXJlKCk7CkBAIC04ODAxLDI1ICs4ODAxLDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdGdW5jdGlvbihOb2RlKiBub2RlKQogICAgIGlmIChub2RlVHlwZSA9PSBOZXdGdW5j
dGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248SlNGdW5jdGlvbj4ocmVz
dWx0R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NvcGVHUFIsIHNs
b3dQYXRoLCBKU0Z1bmN0aW9uOjphbGxvY2F0aW9uU2l6ZSgwKSwgZXhlY3V0YWJsZSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlv
bldhdGNocG9pbnQsIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpKTsKICAgICB9CiAKICAgICBpZiAo
bm9kZVR5cGUgPT0gTmV3R2VuZXJhdG9yRnVuY3Rpb24pIHsKICAgICAgICAgY29tcGlsZU5ld0Z1
bmN0aW9uQ29tbW9uPEpTR2VuZXJhdG9yRnVuY3Rpb24+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBz
Y3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjb3BlR1BSLCBzbG93UGF0aCwgSlNHZW5lcmF0b3JG
dW5jdGlvbjo6YWxsb2NhdGlvblNpemUoMCksIGV4ZWN1dGFibGUpOwogCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCBy
ZXN1bHRHUFIsICZ2bSgpLCBzY29wZUdQUiwgZXhlY3V0YWJsZSkpOworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpKSk7CiAgICAgfQogCiAgICAgaWYgKG5vZGVU
eXBlID09IE5ld0FzeW5jRnVuY3Rpb24pIHsKICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uQ29t
bW9uPEpTQXN5bmNGdW5jdGlvbj4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gxR1BSLCBz
Y3JhdGNoMkdQUiwgc2NvcGVHUFIsIHNsb3dQYXRoLCBKU0FzeW5jRnVuY3Rpb246OmFsbG9jYXRp
b25TaXplKDApLCBleGVjdXRhYmxlKTsKIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb25XaXRo
SW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsICZ2bSgpLCBzY29w
ZUdQUiwgZXhlY3V0YWJsZSkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb25XaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0
YWJsZSkpKTsKICAgICB9CiAKICAgICBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248SlNBc3luY0dlbmVy
YXRvckZ1bmN0aW9uPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gy
R1BSLCBzY29wZUdQUiwgc2xvd1BhdGgsIEpTQXN5bmNHZW5lcmF0b3JGdW5jdGlvbjo6YWxsb2Nh
dGlvblNpemUoMCksIGV4ZWN1dGFibGUpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwgcmVz
dWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpKTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpKSk7CiAgICAgfQogICAgIAogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTg5NjQsNyArODk2NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKiBub2RlKQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSogbm9kZSkKIHsKICAgICBT
eW1ib2xUYWJsZSogdGFibGUgPSBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7Ci0g
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVy
U3RydWN0dXJlKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAorICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmds
b2JhbE9iamVjdEZvcigKICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlv
blN0cnVjdHVyZSgpKTsKICAgICAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODk4NiwxMCArODk4NiwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uRGlyZWN0LAotICAgICAgICAgICAgcmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLCBzY29w
ZUdQUiwgdGFibGUsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25W
YWx1ZSkpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0
cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHRh
YmxlKSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkp
OwogI2Vsc2UKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9u
RGlyZWN0LAotICAgICAgICAgICAgcmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLCBzY29wZUdQ
UiwgdGFibGUsIGluaXRpYWxpemF0aW9uUmVncyk7CisgICAgICAgICAgICByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCB0YWJsZSksIGluaXRpYWxpemF0aW9uUmVncyk7CiAjZW5kaWYK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwpAQCAtOTAzNSwxMSArOTAzNSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBy
ZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0YWJsZSwgVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpKTsKKyAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCB0YWJsZSksIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKSk7CiAjZWxzZQogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0
dXJlLCBzY29wZUdQUiwgdGFibGUsIGluaXRpYWxpemF0aW9uUmVncykpOworICAgICAgICAgICAg
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHRhYmxlKSwgaW5pdGlhbGl6YXRpb25SZWdzKSk7CiAj
ZW5kaWYKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTkwNjEsNyArOTA2
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMo
Tm9kZSogbm9kZSkKICAgICBHUFJSZWcgbGVuZ3RoR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3Mo
c2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgCi0gICAgdW5zaWduZWQgbWluQ2Fw
YWNpdHkgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgdW5zaWduZWQgbWluQ2FwYWNpdHkg
PSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPm51
bVBhcmFtZXRlcnMoKSAtIDE7CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGtub3duTGVuZ3RoOwog
ICAgIGJvb2wgbGVuZ3RoSXNLbm93bjsgLy8gaWYgZmFsc2UsIGxlbmd0aEdQUiB3aWxsIGhhdmUg
dGhlIGxlbmd0aC4KQEAgLTkwODQsNyArOTA4NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0KLSAgICAgICAgbV9qaXQuZ3JhcGgo
KS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1f
Z3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICAKICAg
ICAvLyBVc2UgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgZm9yIGFsbG9jYXRpbmcgdGhlIG9iamVjdCBk
ZXBlbmRpbmcgb24gd2hldGhlciB3ZSBrbm93IGl0cwogICAgIC8vIHNpemUgc3RhdGljYWxseS4K
QEAgLTkxMzQsNyArOTEzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVE
aXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBpZiAobGVuZ3RoSXNLbm93bikgewogICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1l
bnRzLCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgIGtub3duTGVuZ3Ro
LCBtaW5DYXBhY2l0eSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0g
bWFrZVVuaXF1ZTxDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I+KApA
QCAtOTE1MSw3ICs5MTUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURp
cmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
bV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcigK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKSwgaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgp
KSwKICAgICAgICAgICAgICAgICBzY3JhdGNoMUdQUik7CiAgICAgICAgIH0KICAgICB9IGVsc2UK
QEAgLTkyNjksNyArOTI2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVT
Y29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KAogICAg
ICAgICAxLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAot
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IGdsb2JhbE9iamVjdC0+c2NvcGVkQXJndW1lbnRzU3RydWN0dXJlKCkpLAorICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdC0+c2Nv
cGVkQXJndW1lbnRzU3RydWN0dXJlKCkpLAogICAgICAgICAgICAgICAgIGRlc3RHUFIpOwogICAg
ICAgICB9KTsKICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIp
IHsgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBkZXN0R1BSKTsgfSk7CkBAIC05Mjk5LDcgKzkyOTksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgICAg
IDEsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCiAgICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIoCi0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJl
KCkpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBnbG9iYWxPYmplY3QtPmNsb25lZEFy
Z3VtZW50c1N0cnVjdHVyZSgpKSwKICAgICAgICAgICAgICAgICBkZXN0R1BSKTsKICAgICAgICAg
fSk7CiAgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgwLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0
KSwgZGVzdEdQUik7IH0pOwpAQCAtOTMzNiw3ICs5MzM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNyZWF0ZVJlc3QoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBDcmVhdGVSZXN0KTsKIAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmlzV2F0Y2hpbmdIYXZp
bmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5n
SGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBhcnJheUxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBhcnJheVJlc3VsdCh0aGlzKTsKIApAQCAtOTM0OCw3ICs5MzQ4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVJlc3QoTm9kZSogbm9kZSkKICAgICAg
ICAgLy8gYWx3YXlzIGJlIGJvdW5kZWQgYnkgc3RhY2sgc2l6ZS4gUmVhbGlzdGljYWxseSwgd2Ug
d29uJ3QgYmUgYWJsZSB0byBwdXNoIGVub3VnaAogICAgICAgICAvLyBhcmd1bWVudHMgdG8gaGF2
ZSBhcnJheUxlbmd0aCBleGNlZWQgTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdU
SC4KICAgICAgICAgYm9vbCBzaG91bGRBbGxvd0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxh
cmdlQXJyYXlzID0gZmFsc2U7Ci0gICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNp
emUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwg
YXJyYXlSZXN1bHRHUFIsIGFycmF5TGVuZ3RoR1BSLCBBcnJheVdpdGhDb250aWd1b3VzLCBzaG91
bGRBbGxvd0ZvckFycmF5U3RvcmFnZVN0cnVjdHVyZUZvckxhcmdlQXJyYXlzKTsKKyAgICAgICAg
Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcnJheVJlc3VsdEdQUiwgYXJyYXlMZW5ndGhHUFIsIEFy
cmF5V2l0aENvbnRpZ3VvdXMsIHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9y
TGFyZ2VBcnJheXMpOwogCiAgICAgICAgIEdQUlRlbXBvcmFyeSBhcmd1bWVudHNTdGFydCh0aGlz
KTsKICAgICAgICAgR1BSUmVnIGFyZ3VtZW50c1N0YXJ0R1BSID0gYXJndW1lbnRzU3RhcnQuZ3By
KCk7CkBAIC05NDA5LDcgKzk0MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3By
ZWFkKE5vZGUqIG5vZGUpCiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBBcnJh
eVVzZSkKICAgICAgICAgc3BlY3VsYXRlQXJyYXkobm9kZS0+Y2hpbGQxKCksIGFyZ3VtZW50KTsK
IAotICAgIGlmIChtX2ppdC5ncmFwaCgpLmNhbkRvRmFzdFNwcmVhZChub2RlLCBtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAgIGlmIChtX2dyYXBoLmNhbkRvRmFzdFNwcmVh
ZChub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKQEAgLTk0NDcsNyArOTQ0Nyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubHNoaWZ0
MzIoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMihKU0ltbXV0YWJsZUJ1dHRlcmZseTo6b2Zmc2V0T2ZEYXRhKCkpLCBzY3JhdGNo
MUdQUik7CiAKLSAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNJ
bW11dGFibGVCdXR0ZXJmbHk+KHZtKCksIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5n
cmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkubV92bS5pbW11dGFibGVCdXR0
ZXJmbHlTdHJ1Y3R1cmVzW2FycmF5SW5kZXhGcm9tSW5kZXhpbmdUeXBlKENvcHlPbldyaXRlQXJy
YXlXaXRoQ29udGlndW91cykgLSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzXS5nZXQoKSkpLCBzY3Jh
dGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7CisgICAgICAgIG1f
aml0LmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsPEpTSW1tdXRhYmxlQnV0dGVyZmx5Pih2
bSgpLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSht
X2dyYXBoLm1fdm0uaW1tdXRhYmxlQnV0dGVyZmx5U3RydWN0dXJlc1thcnJheUluZGV4RnJvbUlu
ZGV4aW5nVHlwZShDb3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpIC0gTnVtYmVyT2ZJbmRl
eGluZ1NoYXBlc10uZ2V0KCkpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQ
Uiwgc2xvd1BhdGgpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKGxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKGxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6b2Zmc2V0
T2ZWZWN0b3JMZW5ndGgoKSkpOwogCkBAIC05NTE0LDggKzk1MTQsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdBcnJheShOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwotICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgo
KS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9n
cmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIGlm
ICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFn
ZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSBub2RlLT5udW1DaGlsZHJlbigpOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50
ID0gbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpOwpAQCAtOTUyNCw3ICs5NTI0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIEJl
Y2F1c2Ugd2UgZmlyc3Qgc3BlY3VsYXRlIG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4gaGVyZSwgd2Ug
Y2FuIG5ldmVyIGV4aXQgYWZ0ZXIgY3JlYXRpbmcKICAgICAgICAgLy8gdW5pbml0aWFsaXplZCBj
b250aWd1b3VzIEpTQXJyYXksIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIHByb2R1
Y2UgYSBoYWxmLWJha2VkIEpTQXJyYXkuCiAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElu
ZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5k
ZXgpCi0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBvcGVyYW5kSW5kZXgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCkpOwogCiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwpA
QCAtOTU0MCw3ICs5NTQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5
KE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVu
KCk7ICsrb3BlcmFuZEluZGV4KSB7Ci0gICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgb3BlcmFuZEluZGV4KTsKKyAgICAgICAgICAgIEVkZ2UgdXNl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBvcGVyYW5kSW5kZXgpOwogICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJ
TkdfVFlQRVM6CkBAIC05NTc5LDcgKzk1NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3QXJyYXkoTm9kZSogbm9kZSkKICAgICBpZiAoIW5vZGUtPm51bUNoaWxkcmVuKCkpIHsK
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJy
YXksIHJlc3VsdC5ncHIoKSwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgc3RydWN0dXJlKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC05
NTk0LDcgKzk1OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkoTm9k
ZSogbm9kZSkKICAgICAgICAgLy8gZW1pdHRpbmcgY29kZSBoZXJlIGFuZCB0aGUgaW5kZXhpbmcg
dHlwZSBpcyBub3QgYXJyYXkgc3RvcmFnZSB0aGVuIHRoZXJlIGlzCiAgICAgICAgIC8vIHByb2Jh
Ymx5IHNvbWV0aGluZyBoaWxhcmlvdXMgZ29pbmcgb24gYW5kIHdlJ3JlIGFscmVhZHkgZmFpbGlu
ZyBhdCBhbGwgdGhlCiAgICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3JlIGdvaW5n
IHRvIGJlIHNvdW5kLgotICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKKyAgICAgICAgRWRnZSB1
c2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFu
ZElkeF07CiAgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKQEAgLTk2NDMsOCArOTY0Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdBcnJheShOb2RlKiBub2RlKQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAKICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25OZXdB
cnJheSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9i
YWxPYmplY3QpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSksCi0gICAgICAgIHN0YXRpY19jYXN0PHZvaWQqPihidWZmZXIpLCBzaXplX3Qo
bm9kZS0+bnVtQ2hpbGRyZW4oKSkpOworICAgICAgICBvcGVyYXRpb25OZXdBcnJheSwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBt
X2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCisgICAg
ICAgIFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwgc2l6ZV90KG5vZGUtPm51bUNoaWxkcmVuKCkpKTsK
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC05NjUzLDE3ICs5NjUzLDE3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2RlKiBub2RlKQogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKiBub2RlKQog
ewogICAgIEFTU0VSVChub2RlLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCk7Ci0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGlmIChtX2ppdC5ncmFwaCgpLmlzV2F0Y2hpbmdIYXZpbmdB
QmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKKyAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2
aW5nQUJhZFRpbWVXYXRjaHBvaW50KG5vZGUpKSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKICAg
ICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBub2RlLT5iaXRWZWN0b3IoKTsKIAogICAgICAg
ICBpZiAobm9kZS0+bnVtQ2hpbGRyZW4oKSA9PSAxICYmIGJpdFZlY3Rvci0+Z2V0KDApKSB7Ci0g
ICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgICAgICAgICBFZGdlIHVzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBpbW11dGFibGVCdXR0ZXJmbHkodGhpcywg
dXNlKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgYnV0dGVyZmx5KHRoaXMpOwpAQCAtOTY3Niw3ICs5Njc2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKiBub2RlKQog
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAotICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZShDb3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoQ29weU9uV3JpdGVB
cnJheVdpdGhDb250aWd1b3VzKSk7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CiAKQEAgLTk2ODUsNyArOTY4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGJ1dHRlcmZseUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOwogCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0R1BSLCAmdm0oKSwg
c3RydWN0dXJlLCBpbW11dGFibGVCdXR0ZXJmbHlHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0Fy
cmF5QnVmZmVyLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsIGlt
bXV0YWJsZUJ1dHRlcmZseUdQUikpOwogCiAgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NzA0LDcgKzk3MDQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkpOworICAgICAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgaSk7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGltbXV0
YWJsZUJ1dHRlcmZseSh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgaW1t
dXRhYmxlQnV0dGVyZmx5R1BSID0gaW1tdXRhYmxlQnV0dGVyZmx5LmdwcigpOwogICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGltbXV0YWJsZUJ1dHRlcmZseUdQUiwgSlNJbW11dGFibGVCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpKTsKQEAgLTk3MzEsNyArOTcz
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9k
ZSogbm9kZSkKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1DaGlsZHJlbigpOyArK2kp
IHsKLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBp
KTsKICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewogICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGltbXV0YWJsZUJ1dHRlcmZseSh0aGlzLCB1c2UpOwogICAg
ICAgICAgICAgICAgIEdQUlJlZyBpbW11dGFibGVCdXR0ZXJmbHlHUFIgPSBpbW11dGFibGVCdXR0
ZXJmbHkuZ3ByKCk7CkBAIC05Nzc5LDcgKzk3NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiAKICAgICBCaXRWZWN0b3IqIGJp
dFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBub2RlLT5udW1DaGlsZHJlbigpOyArK2kpIHsKLSAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgaV07CisgICAgICAg
IEVkZ2UgdXNlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IGldOwogICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpIHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGltbXV0YWJsZUJ1dHRlcmZseSh0aGlzLCB1c2UpOwogICAgICAgICAg
ICAgR1BSUmVnIGltbXV0YWJsZUJ1dHRlcmZseUdQUiA9IGltbXV0YWJsZUJ1dHRlcmZseS5ncHIo
KTsKQEAgLTk4MDIsNyArOTgwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdB
cnJheVdpdGhTcHJlYWQoTm9kZSogbm9kZSkKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU3ByZWFkU2xvdywgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBidWZmZXIs
IG5vZGUtPm51bUNoaWxkcmVuKCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU3ByZWFkU2xvdywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBUcnVzdGVkSW1tUHRyKGJ1ZmZlciksIG5vZGUtPm51bUNo
aWxkcmVuKCkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC05ODc1LDEwICs5ODc1LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gQXJyYXlTbGljZSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJlbigpIC0gMSkpOworICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJl
bigpIC0gMSkpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwpAQCAtOTg5NCwxNyArOTg5NCwxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShOb2RlKiBub2RlKQogICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgbGVuZ3RoR1BSKTsKIAogICAgICAgICBpZiAo
bm9kZS0+bnVtQ2hpbGRyZW4oKSA9PSA0KQotICAgICAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJ
bmRleChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzdGQ6Om51bGxvcHQsIGxl
bmd0aEdQUiwgdGVtcEdQUik7CisgICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCB0ZW1w
R1BSKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubW92ZShsZW5ndGhHUFIsIHRl
bXBHUFIpOwogCi0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LT5pc0ludDMyQ29uc3RhbnQoKSAmJiBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LT5hc0ludDMyKCkgPT0gMCkgeworICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKS0+aXNJbnQzMkNvbnN0YW50KCkgJiYgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+
YXNJbnQzMigpID09IDApIHsKICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgZm9yIGFycmF5LnNs
aWNlKDAsIGVuZCkgb3IgYXJyYXkuc2xpY2UoMCkgY2FzZXMuCiAgICAgICAgICAgICAvLyBgdGVt
cEdQUmAgYWxyZWFkeSBwb2ludHMgdG8gdGhlIHNpemUgb2YgYSBuZXdseSBjcmVhdGVkIGFycmF5
LgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBTdGFydElu
ZGV4KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHN0YXJ0R1BSID0gdGVtcFN0YXJ0SW5kZXgu
Z3ByKCk7Ci0gICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMSksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCBzdGFydEdQUik7
CisgICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCBzdGFydEdQUik7CiAKICAgICAgICAg
ICAgIGF1dG8gdG9vQmlnID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBz
dGFydEdQUiwgdGVtcEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihzdGFydEdQUiwgdGVt
cEdQUik7IC8vIHRoZSBzaXplIG9mIHRoZSBhcnJheSB3ZSdsbCBtYWtlLgpAQCAtOTkyMiw3ICs5
OTIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U2xpY2UoTm9kZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0aGUgc291cmNlIGFycmF5IGFs
aXZlIGF0IGxlYXN0IHVudGlsIGFmdGVyIHdlJ3JlIGRvbmUKICAgICAgICAgLy8gd2l0aCBhbnl0
aGluZyB0aGF0IGNhbiBHQyAoZS5nLiBhbGxvY2F0aW5nIHRoZSByZXN1bHQgYXJyYXkgYmVsb3cp
LgotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxs
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogCiAgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGwuZ3ByKCksIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcFZhbHVlKTsKICAgICAgICAgLy8gV2UgY2FuIGlnbm9y
ZSB0aGUgd3JpdGFiaWxpdHkgb2YgdGhlIGNlbGwgc2luY2Ugd2Ugd29uJ3Qgd3JpdGUgdG8gdGhl
IHNvdXJjZS4KQEAgLTk5NDgsMTcgKzk5NDgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFycmF5U2xpY2UoTm9kZSogbm9kZSkKICAgICAgICAgLy8gdG8gZW5zdXJlIHRoZSBpbmNv
bWluZyBhcnJheSBpcyBvbmUgdG8gYmUgb25lIG9mIHRoZSBvcmlnaW5hbCBhcnJheSBzdHJ1Y3R1
cmVzCiAgICAgICAgIC8vIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgaW5kZXhpbmcgc2hhcGVz
OiBJbnQzMiwgQ29udGlndW91cywgRG91YmxlLiBUaGVyZWZvcmUsCiAgICAgICAgIC8vIHdlJ3Jl
IGEgZG91YmxlIGFycmF5IGhlcmUuCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aERvdWJsZSkpKSwgdGVt
cFZhbHVlKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoRG91YmxlKSkpLCB0ZW1wVmFsdWUpOwogICAgICAgICBl
bWl0TW92ZUVtcHR5VmFsdWUoanNOYU4oKSk7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CiAKICAgICAgICAgaXNDb250aWd1b3VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
QXJyYXlXaXRoQ29udGlndW91cykpKSwgdGVtcFZhbHVlKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGln
dW91cykpKSwgdGVtcFZhbHVlKTsKICAgICAgICAgZW1pdE1vdmVFbXB0eVZhbHVlKEpTVmFsdWUo
KSk7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKICAgICAgICAgaXNJbnQz
Mi5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5n
cmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEludDMyKSkpLCB0ZW1wVmFsdWUp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihBcnJheVdpdGhJbnQzMikpKSwgdGVtcFZhbHVlKTsKICAgICAgICAgZW1pdE1vdmVF
bXB0eVZhbHVlKEpTVmFsdWUoKSk7CiAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC05
OTk0LDEwICs5OTk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNl
KE5vZGUqIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSksIHRlbXBWYWx1ZSk7CiAgICAgICAgIGlmIChub2RlLT5udW1DaGlsZHJlbigpID09IDQp
Ci0gICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgdGVtcFZhbHVlLCB0ZW1wR1BSKTsKKyAgICAg
ICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KSwgc3RkOjpudWxsb3B0LCB0ZW1wVmFsdWUsIHRlbXBHUFIpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKHRlbXBWYWx1ZSwgdGVtcEdQUik7Ci0gICAgICAgIGVtaXRQb3B1
bGF0ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSwgc3RkOjpu
dWxsb3B0LCB0ZW1wVmFsdWUsIGxvYWRJbmRleCk7CisgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNl
SW5kZXgobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgc3RkOjpudWxsb3B0LCB0ZW1wVmFs
dWUsIGxvYWRJbmRleCk7CiAgICAgfQogCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXA1KHRoaXMpOwpA
QCAtMTAwNDAsNyArMTAwNDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlJ
bmRleE9mKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJyYXlJbmRl
eE9mKTsKIAotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCBub2RlLT5udW1DaGlsZHJlbigpID09IDMgPyAyIDogMykpOworICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBu
b2RlLT5udW1DaGlsZHJlbigpID09IDMgPyAyIDogMykpOwogICAgIEdQUlRlbXBvcmFyeSBpbmRl
eCh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcExlbmd0aCh0aGlzKTsKIApAQCAtMTAwNTEs
MTEgKzEwMDUxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheUluZGV4T2Yo
Tm9kZSogbm9kZSkKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgbGVuZ3RoR1BSKTsK
IAogICAgIGlmIChub2RlLT5udW1DaGlsZHJlbigpID09IDQpCi0gICAgICAgIGVtaXRQb3B1bGF0
ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSwgc3RkOjpudWxs
b3B0LCBsZW5ndGhHUFIsIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRl
eChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzdGQ6Om51bGxvcHQsIGxlbmd0aEdQUiwg
aW5kZXhHUFIpOwogICAgIGVsc2UKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCks
IGluZGV4R1BSKTsKIAotICAgIEVkZ2UmIHNlYXJjaEVsZW1lbnRFZGdlID0gbV9qaXQuZ3JhcGgo
KS52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICBFZGdlJiBzZWFyY2hFbGVtZW50RWRnZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgc3dpdGNoIChzZWFyY2hFbGVtZW50RWRn
ZS51c2VLaW5kKCkpIHsKICAgICBjYXNlIEludDMyVXNlOgogICAgIGNhc2UgT2JqZWN0VXNlOgpA
QCAtMTAyNDIsOCArMTAyNDIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQ
dXNoKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmlzSlNBcnJh
eSgpKTsKIAotICAgIEVkZ2UmIHN0b3JhZ2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAwKTsKLSAgICBFZGdlJiBhcnJheUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDEpOworICAgIEVkZ2UmIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKTsKKyAgICBFZGdlJiBhcnJheUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOwogCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBhcnJheUVkZ2Up
OwogICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwpAQCAtMTAyNzMsNyArMTAy
NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewog
ICAgICAgICBpZiAoZWxlbWVudENvdW50ID09IDEpIHsKLSAgICAgICAgICAgIEVkZ2UmIGVsZW1l
bnQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRPZmZzZXQpOworICAg
ICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVu
dE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpJbnQzMikgewogICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIoZWxlbWVudCk7CkBA
IC0xMDI5Nyw3ICsxMDI5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1
c2goTm9kZSogbm9kZSkKIAogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMikgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVudEluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgRWRnZSBlbGVtZW50ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBFZGdlIGVs
ZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1lbnRP
ZmZzZXQpOwogICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSk7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIoZWxlbWVudCk7CiAgICAgICAg
ICAgICB9CkBAIC0xMDMyNSw3ICsxMDMyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcnJheVB1c2goTm9kZSogbm9kZSkKIAogICAgICAgICBzdG9yYWdlRG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4
IDwgZWxlbWVudENvdW50OyArK2VsZW1lbnRJbmRleCkgewotICAgICAgICAgICAgRWRnZSYgZWxl
bWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxl
bWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGVsZW1lbnQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7IC8vIFdlIGRpZCB0eXBlIGNoZWNrcyBhYm92ZS4KICAgICAgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAKQEAgLTEwMzQ3LDcgKzEwMzQ3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2RlKiBub2RlKQogCiAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CiAgICAgICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSkg
ewotICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIHNwZWN1bGF0
ZShub2RlLCBlbGVtZW50KTsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFs
dWUodGhpcywgZWxlbWVudCk7CiAgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5m
cHIoKTsKQEAgLTEwMzY3LDcgKzEwMzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFycmF5UHVzaChOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVu
dEluZGV4KSB7Ci0gICAgICAgICAgICBFZGdlIGVsZW1lbnQgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOworICAgICAgICAgICAg
RWRnZSBlbGVtZW50ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBl
bGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnVzZUtpbmQoKSA9PSBE
b3VibGVSZXBSZWFsVXNlKTsKICAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBlbGVtZW50KTsK
ICAgICAgICAgfQpAQCAtMTAzOTQsNyArMTAzOTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAKICAgICAgICAgc3RvcmFnZURvbmUubGluaygm
bV9qaXQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJ
bmRleCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5kZXgpIHsKLSAgICAgICAgICAgIEVkZ2Um
IGVsZW1lbnQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCAr
IGVsZW1lbnRPZmZzZXQpOworICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIGVsZW1lbnQpOwogICAgICAgICAg
ICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKQEAgLTEwNDE4LDcgKzEwNDE4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2RlKiBub2RlKQogICAg
ICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0IG9mIEFycmF5UHVzaCBpcyBJbnQz
MiBpbiBBSS4KICAgICAgICAgaW50MzJfdCBsYXJnZXN0UG9zaXRpdmVJbnQzMkxlbmd0aCA9IDB4
N2ZmZmZmZmYgLSBlbGVtZW50Q291bnQ7CiAgICAgICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSkg
ewotICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIGVsZW1lbnQpOwogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKIApAQCAtMTA0NzAsNyArMTA0NzAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAKICAgICAg
ICAgc3RvcmFnZURvbmUubGluaygmbV9qaXQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGVsZW1l
bnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5kZXgp
IHsKLSAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOworICAgICAgICAgICAgRWRnZSYg
ZWxlbWVudCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVu
dE9mZnNldCk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBlbGVtZW50
KTsKICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdz
KCk7CiAKQEAgLTEwNTA2LDcgKzEwNTA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiAgICAgICAgIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRo
Q2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5lZWRUb1NwaWxsLCBF
eGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgTm9SZXN1bHQsICZ2bSgp
LCBzZXQpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25O
b3RpZnlXcml0ZSwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNr
Tm90TmVlZGVkLCBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIFRydXN0ZWRJbW1QdHIo
c2V0KSkpOwogICAgIAogICAgIG5vUmVzdWx0KG5vZGUpOwogfQpAQCAtMTA1MzYsNyArMTA1MzYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNPYmplY3QoTm9kZSogbm9kZSkKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqIG5vZGUpCiB7
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CiAgICAgCiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CkBAIC0x
MDU2OSw3ICsxMDU2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2ZJc09i
amVjdChOb2RlKiBub2RlKQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAg
ICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uVHlw
ZU9mSXNPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvblR5cGVPZklzT2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC0x
MDU3OSw3ICsxMDU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2ZJc09i
amVjdChOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNDYWxsYWJs
ZShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQyBzbG93UGF0aE9wZXJhdGlvbikKIHsKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKQEAgLTEwNjA2
LDcgKzEwNjA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzQ2FsbGFibGUoTm9k
ZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0Mgc2xvd1BhdGhPcGUKICAgICAKICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAg
ICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLAogICAgICAg
ICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogICAgIAogICAgIGRvbmUubGluaygmbV9q
aXQpOwpAQCAtMTA2MjgsNyArMTA2MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SXNDb25zdHJ1Y3RvcihOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VHlwZU9mKE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgCiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVl
LmpzVmFsdWVSZWdzKCk7CkBAIC0xMDY0MSw3ICsxMDY0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSogbm9kZSkKICAgICBtX2ppdC5lbWl0VHlwZU9mKAogICAg
ICAgICB2YWx1ZVJlZ3MsIHJlc3VsdEdQUiwKICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUs
IGJvb2wgZmFsbHNUaHJvdWdoKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJp
bmcodHlwZSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCB2bSgpLnNtYWxsU3RyaW5ncy50eXBlU3RyaW5nKHR5
cGUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGlmICghZmFsbHNUaHJvdWdoKQogICAgICAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0sCkBAIC0xMDY1
Miw3ICsxMDY1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSog
bm9kZSkKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwo
Ci0gICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uVHlwZU9mT2JqZWN0LCByZXN1
bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25UeXBlT2ZPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
KTsKICAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0xMDc1OCw3ICsx
MDc1OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0x
MDc4MCw3ICsxMDc4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5LCByZXN1bHQuZ3ByKCksICZ2bSgpLCBiYXNlR1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5LCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBiYXNlR1BSKTsK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgCiAgICAgICAgIHN0b3Jh
Z2VSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKQEAgLTEwODAwLDcgKzEwODAwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5v
ZGUpCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CiAKICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25B
bGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hH
UFIxLCAmdm0oKSkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2Ny
YXRjaEdQUjEsIFRydXN0ZWRJbW1QdHIoJnZtKCkpKSk7CiAKICAgICBmb3IgKHB0cmRpZmZfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemUpOyBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKQEAgLTEwODI0LDcgKzEwODI0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBHUFJGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
QWxsb2NhdGVDb21wbGV4UHJvcGVydHlTdG9yYWdlLCByZXN1bHQuZ3ByKCksICZ2bSgpLCBiYXNl
R1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOwog
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKQEAgLTEwODQ3LDcgKzEwODQ3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKICAg
ICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMSwgJnZtKCksIG5ld1NpemUgLyBz
aXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAKICAgICBmb3Ig
KHB0cmRpZmZfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KG5ld1NpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKQEAg
LTEwOTM5LDcgKzEwOTM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00o
Tm9kZSogbm9kZSkKICAgICB9OwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIG1faml0
LmdyYXBoKCkuZG9Ub0NoaWxkcmVuKG5vZGUsIFsmXShFZGdlIGVkZ2UpIHsKKyAgICBtX2dyYXBo
LmRvVG9DaGlsZHJlbihub2RlLCBbJl0oRWRnZSBlZGdlKSB7CiAgICAgICAgIGlmICghaW5kZXgp
CiAgICAgICAgICAgICBhcHBlbmRDZWxsKGVkZ2UpOwogICAgICAgICBlbHNlIHsKQEAgLTExMDAy
LDkgKzExMDAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET01HZXR0ZXIo
Tm9kZSogbm9kZSkKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUQ2FnZSgpKQotICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9K
SVRPcGVyYXRpb25fR0pJUD4oVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIENDYWxsSGVscGVy
czo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJE
YXRhKCktPmlkZW50aWZpZXJOdW1iZXIpLCBnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSklQPihUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiks
IFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5p
ZGVudGlmaWVyTnVtYmVyKSksIFRydXN0ZWRJbW1QdHIoZ2V0dGVyLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Sl9K
SVRPcGVyYXRpb25fR0pJPihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJz
OjpDZWxsVmFsdWUoYmFzZUdQUiksIGlkZW50aWZpZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRh
dGEoKS0+aWRlbnRpZmllck51bWJlcikpOworICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHM8Sl9KSVRPcGVyYXRpb25fR0pJPihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxI
ZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChu
b2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVyTnVtYmVyKSkpOwogCiAgICAgICAg
IG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0oKS50b3BDYWxs
RnJhbWUpOwogICAgICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1fY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0xMTA0OSw3ICsxMTA0OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDYWxsRE9NR2V0dGVyKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDaGVja0pTQ2FzdChOb2RlKiBub2RlKQogewotICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDaGVja0pTQ2FzdCB8fCBub2RlLT5v
cCgpID09IENoZWNrTm90SlNDYXN0KTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5v
ZGUtPm9wKCkgPT0gQ2hlY2tKU0Nhc3QgfHwgbm9kZS0+b3AoKSA9PSBDaGVja05vdEpTQ2FzdCk7
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBub2RlLT5jbGFzc0luZm8oKTsKICAg
ICBpZiAoY2xhc3NJbmZvLT5pbmhlcml0c0pTVHlwZVJhbmdlKSB7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTEwNzYsNyArMTEw
NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tKU0Nhc3QoTm9kZSogbm9k
ZSkKIAogICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhl
ckdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG90aGVy
R1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgb3RoZXJHUFIpOwotICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihub2RlLT5jbGFzc0luZm8oKSks
IHNwZWNpZmllZEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5j
bGFzc0luZm8oKSksIHNwZWNpZmllZEdQUik7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBsb29wID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgYXV0byBmb3VuZCA9IG1faml0LmJyYW5j
aFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsKQEAgLTEx
NDM4LDcgKzExNDM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09i
amVjdChOb2RlKiBub2RlKQogICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKICAgICAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIHJlc3VsdEdQUiwgJnZtKCksIG9wZXJhbmRH
UFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25OZXdTdHJpbmdPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIG9wZXJh
bmRHUFIsIG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogfQpAQCAtMTE0NDksNyArMTE0NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3U3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdTeW1ib2wsIHJlc3VsdEdQUiwgJnZtKCkpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1N5bWJvbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSk7CiAg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE0ODIsOSArMTE0ODIsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3ltYm9sKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNpemUoTm9kZSogbm9kZSkKIHsK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBhdXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKLSAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KHR5
cGVkQXJyYXlUeXBlKSk7CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dy
YXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNv
bmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVy
ZS5nZXQoKSk7CiAKICNpZiBVU0UoTEFSR0VfVFlQRURfQVJSQVlTKQpAQCAtMTE2MTksNyArMTE2
MTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UmVnZXhwKE5vZGUqIG5vZGUp
CiAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBhdXRvIHN0cnVj
dHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOwor
ICAgIGF1dG8gc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7
CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0PFJlZ0V4cE9iamVjdD4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7
CiAKQEAgLTExNjI5LDcgKzExNjI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d1JlZ2V4cChOb2RlKiBub2RlKQogICAgIG1faml0LnN0b3JlVmFsdWUobGFzdEluZGV4UmVncywg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgUmVnRXhwT2JqZWN0OjpvZmZzZXRPZkxh
c3RJbmRleCgpKSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCi0gICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdS
ZWdleHBXaXRoTGFzdEluZGV4LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCByZWdleHAsIGxhc3RJbmRleFJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgs
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIHJlZ2V4cCksIGxhc3RJbmRleFJlZ3MpKTsKIAogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEyNDkyLDggKzEyNDkyLDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2UpCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcg
dmFsdWUsIEdQUlJlZyBzY3JhdGNoKQogewotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9qaXQuZ3JhcGgoKS51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9qaXQuZ3JhcGgoKS5zd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRl
eCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwor
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2dyYXBoLnN3aXRjaEp1bXBUYWJs
ZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJs
ZSh1bmxpbmtlZFRhYmxlKTsKICAgICBtX2ppdC5zdWIzMihJbW0zMih1bmxpbmtlZFRhYmxlLm1f
bWluKSwgdmFsdWUpOwogICAgIGFkZEJyYW5jaCgKQEAgLTEyNTM0LDkgKzEyNTM0LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBk
YXRhKQogICAgICAgICBub3RJbnQzMi5saW5rKCZtX2ppdCk7CiAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MsIHNjcmF0Y2gpLCBkYXRhLT5mYWxsVGhy
b3VnaC5ibG9jayk7CiAKLSAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2ppdC5ncmFwaCgpLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEt
PnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS0+
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHNjcmF0
Y2gpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRG
b3JEb3VibGUsIHNjcmF0Y2gsICZ2bSgpLCB2YWx1ZVJlZ3MsIGRhdGEtPnN3aXRjaFRhYmxlSW5k
ZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUsIHNjcmF0Y2gsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCB2YWx1ZVJlZ3MsIGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9t
aW4pOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgbV9qaXQu
ZmFySnVtcChzY3JhdGNoLCBKU1N3aXRjaFB0clRhZyk7CkBAIC0xMjc3Niw3ICsxMjc3Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhOb2RlKiBub2Rl
LCBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSCiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1
ZTsKIAogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUlu
ZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXQuZ3JhcGgoKS5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CisgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fZ3JhcGguc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVu
bGlua2VkVGFibGUpOwogCiAgICAgYm9vbCBjYW5Eb0JpbmFyeVN3aXRjaCA9IHRydWU7CkBAIC0x
Mjc5Nyw3ICsxMjc5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdP
blN0cmluZyhOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSCiAKICAgICBpZiAoIWNh
bkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0
cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFi
bGVJbmRleCksICZ1bmxpbmtlZFRhYmxlLCBzdHJpbmcpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgVHJ1c3RlZElt
bVB0cigmdW5saW5rZWRUYWJsZSksIHN0cmluZyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAgICAgICAgIG1faml0LmZhckp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTEyODM0LDcgKzEyODM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEs
IEdQUlIKICAgICAKICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHN0cmluZyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmcsIHN0cmluZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0YXRpY19jYXN0PHNp
emVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRleCksICZ1bmxpbmtlZFRhYmxlLCBzdHJpbmcpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxl
SW5kZXgpLCBUcnVzdGVkSW1tUHRyKCZ1bmxpbmtlZFRhYmxlKSwgc3RyaW5nKTsKICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBt
X2ppdC5mYXJKdW1wKHN0cmluZywgSlNTd2l0Y2hQdHJUYWcpOwpAQCAtMTI5MjEsNyArMTI5MjEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTd2l0Y2hDZWxsOiB7Ci0gICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHN3aXRjaCBraW5kIik7CisgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHN3aXRjaCBraW5kIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI5NjQsNyAr
MTI5NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUq
IG5vZGUpCiAgICAgICAgIG9rLmFwcGVuZChtX2ppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNl
KGJhc2VHUFIpKTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCBiYXNlR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgYmFzZUdQUik7CiAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycygpOwogCiAgICAgb2subGluaygmbV9qaXQpOwpAQCAtMTI5ODEsNyArMTI5ODEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUp
CiAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNzb3IuZ3ByKCk7CiAKICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24obm9kZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeUlk
ID8gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZCA6IG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBhY2Nlc3NvckdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VHUFIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCkpKSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGFjY2Vzc29y
R1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7
CkBAIC0xMjk5OSw3ICsxMjk5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRH
ZXR0ZXJTZXR0ZXJCeUlkKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRl
ci5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BS
LCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29y
QXR0cmlidXRlcygpLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
R1BSLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigp
KSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBnZXR0ZXJHUFIsIHNldHRlckdQUik7CiAj
ZWxzZQogICAgIC8vIFRoZXNlIEpTVmFsdWVzIG1heSBiZSBKU1VuZGVmaW5lZCBPUiBKU0Z1bmN0
aW9uKi4KICAgICAvLyBBdCB0aGF0IHRpbWUsCkBAIC0xMzAxMSw3ICsxMzAxMSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRHZXR0ZXJTZXR0ZXJCeUlkKE5vZGUqIG5vZGUpCiAg
ICAgSlNWYWx1ZVJlZ3Mgc2V0dGVyUmVncyA9IHNldHRlci5qc1ZhbHVlUmVncygpOwogCiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdl
dHRlclJlZ3MucGF5bG9hZEdQUigpLCBzZXR0ZXJSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlR1BSLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBnZXR0ZXJSZWdzLnBh
eWxvYWRHUFIoKSwgc2V0dGVyUmVncy5wYXlsb2FkR1BSKCkpOwogI2VuZGlmCiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtMTMwMjUsNyArMTMwMjUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVzb2x2ZVNjb3BlKE5vZGUqIG5vZGUpCiAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJl
c29sdmVTY29wZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc2NvcGVH
UFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlU2NvcGUsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+
aWRlbnRpZmllck51bWJlcigpKSkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTMwMzcsNyArMTMwMzcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVj
bEluRXZhbChOb2RlKiBub2RlKQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJl
Z3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZl
U2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgc2NvcGVHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51
bWJlcigpKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JIb2lz
dGluZ0Z1bmNEZWNsSW5FdmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkpKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtMTMwNjUsNyArMTMwNjUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RHluYW1pY1ZhcihOb2RlKiBub2RlKQogICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXREeW5hbWljVmFyLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgc2NvcGVHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKSwgbm9kZS0+Z2V0UHV0SW5mbygpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkdldER5bmFtaWNWYXIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSkpLCBub2RlLT5nZXRQdXRJbmZvKCkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KQEAgLTEzMDc5LDcg
KzEzMDc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dER5bmFtaWNWYXIoTm9k
ZSogbm9kZSkKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygp
OwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG5vZGUtPmVjbWFN
b2RlKCkuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3QgOiBvcGVyYXRp
b25QdXREeW5hbWljVmFyTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc2Nv
cGVHUFIsIHZhbHVlUmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkp
LCBub2RlLT5nZXRQdXRJbmZvKCkpOworICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUo
KS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdCA6IG9wZXJhdGlvblB1
dER5bmFtaWNWYXJOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQ
UiwgdmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKSksIG5vZGUtPmdldFB1dEluZm8oKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KQEAgLTEzNDQ1LDcgKzEzNDQ1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxhenlKU0NvbnN0YW50KE5vZGUqIG5vZGUpCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkK
IHsKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZVNl
dCgpLmF0KDApOwotICAgIEFTU0VSVChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDAp
LT5keW5hbWljQ2FzdENvbnN0YW50PFN0cnVjdHVyZSo+KHZtKCkpID09IHN0cnVjdHVyZS5nZXQo
KSk7CisgICAgQVNTRVJUKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPmR5bmFtaWNDYXN0
Q29uc3RhbnQ8U3RydWN0dXJlKj4odm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsKIAogICAgIE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCk7CiAgICAgICAgIApAQCAtMTM0NTYsNyArMTM0NTYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkKIAogICAgIGlm
IChoYXNJbmRleGluZ0hlYWRlcikgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1f
cHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpOworICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSk7CiAgICAgICAgICAgICBzd2l0Y2gg
KGRhdGEubV9wcm9wZXJ0aWVzW2ldLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBQdWJsaWNM
ZW5ndGhQTG9jOgogICAgICAgICAgICAgICAgIHB1YmxpY0xlbmd0aCA9IGVkZ2UtPmFzSW50MzIo
KTsKQEAgLTEzNDg0LDcgKzEzNDg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
dGVyaWFsaXplTmV3T2JqZWN0KE5vZGUqIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgIEVkZ2UgZWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkp
OworICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKTsK
ICAgICAgICAgUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGRhdGEubV9w
cm9wZXJ0aWVzW2ldOwogICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgSW5kZXhlZFByb3BlcnR5UExvYzogewpAQCAtMTM0OTYsNyArMTM0OTYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9k
ZSkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTmFtZWRQcm9wZXJ0eVBMb2M6IHsKLSAgICAg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtkZXNj
cmlwdG9yLmluZm8oKV07CisgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbZGVzY3JpcHRvci5pbmZvKCldOwogICAgICAgICAgICAgZm9yIChQcm9wZXJ0
eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAodWlkICE9IGVudHJ5LmtleSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xMzUyMCwxMSArMTM1MjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KE5vZGUqIG5vZGUpCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWNvcmRSZWdFeHBDYWNoZWRSZXN1bHQoTm9kZSogbm9kZSkK
IHsKLSAgICBFZGdlIGdsb2JhbE9iamVjdEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDApOwotICAgIEVkZ2UgcmVnRXhwRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgRWRnZSBzdHJpbmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAyKTsKLSAgICBFZGdlIHN0YXJ0RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMyk7Ci0gICAgRWRnZSBlbmRFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCA0KTsKKyAgICBFZGdlIGdsb2JhbE9iamVjdEVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApOworICAgIEVkZ2UgcmVnRXhwRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSk7CisgICAgRWRnZSBzdHJpbmdFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKTsKKyAgICBFZGdlIHN0YXJ0RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
Myk7CisgICAgRWRnZSBlbmRFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KTsKIAog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGdsb2JhbE9iamVjdCh0aGlzLCBnbG9iYWxPYmplY3RF
ZGdlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCByZWdFeHAodGhpcywgcmVnRXhwRWRnZSk7
CkBAIC0xMzU3MSwxNiArMTM1NzEsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURl
ZmluZURhdGFQcm9wZXJ0eShOb2RlKiBub2RlKQogICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiwgIldlIGFyZSBhc3N1bWluZyB3ZSBoYXZlIGVub3VnaCBy
ZWdpc3RlcnMgdG8gbWFrZSB0aGlzIGNhbGwgd2l0aG91dCBpbmNyZW1lbnRhbGx5IHNldHRpbmcg
dXAgdGhlIGFyZ3VtZW50cy4iKTsKICNlbmRpZgogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKIAotICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwog
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAKLSAgICBT
cGVjdWxhdGVJbnQzMk9wZXJhbmQgYXR0cmlidXRlcyh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgYXR0cmlidXRlcyh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcgYXR0cmlidXRl
c0dQUiA9IGF0dHJpYnV0ZXMuZ3ByKCk7CiAKLSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUVkZ2Uu
dXNlS2luZCgpKSB7CiAgICAgY2FzZSBTdHJpbmdVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgcHJvcGVydHkodGhpcywgcHJvcGVydHlFZGdlKTsKQEAgLTEzNjQ5LDE5ICsxMzY0
OSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0
eShOb2RlKiBub2RlKQogICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnMgPj0gNiwgIldlIGFyZSBhc3N1bWluZyB3ZSBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gbWFr
ZSB0aGlzIGNhbGwgd2l0aG91dCBpbmNyZW1lbnRhbGx5IHNldHRpbmcgdXAgdGhlIGFyZ3VtZW50
cy4iKTsKICNlbmRpZgogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGdldHRlcih0
aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBnZXR0ZXIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAg
ICAgR1BSUmVnIGdldHRlckdQUiA9IGdldHRlci5ncHIoKTsKIAotICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHNldHRlcih0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzZXR0ZXIodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHNldHRlckdQUiA9IHNldHRlci5ncHIoKTsKIAotICAg
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCBhdHRyaWJ1dGVzKHRoaXMsIG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgNCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBhdHRyaWJ1dGVz
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwogICAgIEdQUlJlZyBhdHRyaWJ1
dGVzR1BSID0gYXR0cmlidXRlcy5ncHIoKTsKIAotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgRWRnZSYgcHJvcGVydHlFZGdl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICBzd2l0Y2ggKHByb3BlcnR5RWRn
ZS51c2VLaW5kKCkpIHsKICAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwpAQCAtMTM3ODcsNyArMTM3
ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9ybWFsaXplTWFwS2V5KE5vZGUq
IG5vZGUpCiAKICAgICBwYXNzVGhyb3VnaENhc2VzLmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5t
b3ZlVmFsdWVSZWdzKGtleVJlZ3MsIHJlc3VsdFJlZ3MpOwotICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5
SGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNr
Tm90TmVlZGVkLCByZXN1bHRSZWdzLCAmdm0oKSwga2V5UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbk5vcm1hbGl6ZU1hcEtleUhlYXBCaWdJbnQsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVj
a1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cigm
dm0oKSksIGtleVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKICAgICBkb25lQ2FzZXMubGluaygmbV9q
aXQpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CkBAIC0xMzg0Myw3ICsx
Mzg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRNYXBCdWNrZXROZXh0KE5v
ZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVChub2RlLT5idWNrZXRPd25lclR5cGUoKSA9PSBCdWNr
ZXRPd25lclR5cGU6OlNldCk7CiAgICAgICAgIHNlbnRpbmVsID0gdm0oKS5zZW50aW5lbFNldEJ1
Y2tldCgpOwogICAgIH0KLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1faml0LmdyYXBoKCksIHNlbnRpbmVsKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHNlbnRpbmVsKSwgcmVzdWx0R1BSKTsK
ICAgICBkb25lLmxpbmsoJm1faml0KTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKQEAgLTE0NDk4LDExICsxNDQ5OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3RyQ2F0KE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJh
eUJ1ZmZlcihOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIGF1dG8qIGFycmF5ID0gbm9kZS0+Y2FzdE9w
ZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpOwogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nTW9kZSA9IG5vZGUtPmluZGV4aW5nTW9kZSgpOwotICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ01v
ZGUpKTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0
ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdNb2RlKSk7CiAKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+
aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdNb2RlKSkg
ewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTQ1MTcsOSArMTQ1MTcs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlCdWZmZXIoTm9kZSogbm9k
ZSkKIAogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihhcnJheS0+dG9CdXR0ZXJmbHko
KSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKIAotICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCAmdm0oKSwgc3RydWN0dXJlLCBhcnJheSkpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgc3RydWN0dXJlLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBhcnJh
eSkpKTsKIAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGluZGV4aW5n
TW9kZSAmIElzQXJyYXksIGluZGV4aW5nTW9kZSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgaW5kZXhpbmdNb2RlICYgSXNBcnJheSwgaW5kZXhpbmdNb2RlKTsKICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTQ1MjcsNyArMTQ1MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlC
dWZmZXIoTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgJnZtKCksIHN0cnVjdHVyZSwgVHJ1c3RlZEltbVB0
cihub2RlLT5jZWxsT3BlcmFuZCgpKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJl
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKTsKICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwpAQCAtMTQ1
MzUsNyArMTQ1MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlCdWZm
ZXIoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0
aFNpemUoTm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdB
QmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE0NTU1LDEw
ICsxNDU1NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6
ZShOb2RlKiBub2RlKQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
R1BSUmVnIHN0cnVjdHVyZUdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihz
aXplR1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIo
TUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpOwotICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkp
LCBzdHJ1Y3R1cmVHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAgICAgYmlnTGVuZ3RoLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpLCBz
dHJ1Y3R1cmVHUFIpOwogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgc3RydWN0dXJlR1BSLCBzaXplR1BSLCBudWxscHRyKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwpAQCAtMTQ1ODUsMTAgKzE0NTg1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKIAotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShub2RlLT50eXBl
ZEFycmF5VHlwZSgpKSwKLSAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50
eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKSwg
YXJndW1lbnRSZWdzKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFy
cmF5U3RydWN0dXJlQ29uY3VycmVudGx5KG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKSwgYXJndW1l
bnRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0xNDY2MywxNSArMTQ2NjMsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEtleXNPck9iamVjdEdldE93blByb3BlcnR5TmFt
ZXMoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dCdXRBcnJheUJ1ZmZlckNhc2VzOwogCi0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgYXJyYXlTdHJ1Y3R1cmUg
PSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKENvcHlPbldyaXRlQXJyYXlXaXRo
Q29udGlndW91cykpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIGFycmF5U3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihDb3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpKTsKIAogICAgICAg
ICAgICAgbV9qaXQubW92ZShzY3JhdGNoR1BSLCBzY3JhdGNoM0dQUik7CiAgICAgICAgICAgICBt
X2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZkRh
dGEoKSksIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxK
U0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoYXJyYXlTdHJ1Y3R1cmUpLCBzY3JhdGNo
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNjcmF0Y2gyR1BSLCBzbG93QnV0QXJyYXlCdWZmZXJDYXNlcyk7
CiAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93QnV0
QXJyYXlCdWZmZXJDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdEdQ
UiwgJnZtKCksIGFycmF5U3RydWN0dXJlLCBzY3JhdGNoM0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dCdXRBcnJheUJ1ZmZlckNhc2VzLCB0
aGlzLCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgYXJyYXlTdHJ1Y3R1cmUsIHNjcmF0Y2gzR1BSKSk7CiAKICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG5vZGUtPm9wKCkg
PT0gT2JqZWN0S2V5cyA/IG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QgOiBvcGVyYXRpb25PYmpl
Y3RHZXRPd25Qcm9wZXJ0eU5hbWVzT2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBvYmplY3RHUFIpKTsKIApAQCAtMTQ3NTAsNyArMTQ3NTAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0QXNzaWduKE5vZGUqIG5vZGUpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBo
KCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTE0ODU5
LDggKzE0ODU5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVByb21pc2Uo
Tm9kZSogbm9kZSkKICAgICAvLyBXZSBjYW4gYXZvaWQgdXNpbmcgYW4gYWRkaXRpb25hbCBHUFIg
dGhpcyB3YXkKICAgICBHUFJSZWcgcmFyZURhdGFHUFIgPSBzdHJ1Y3R1cmVHUFI7CiAKLSAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShu
b2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gZ2xvYmFsT2JqZWN0LT5pbnRlcm5hbFByb21pc2VT
dHJ1Y3R1cmUoKSA6IGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKSksIHN0cnVjdHVy
ZUdQUik7Ci0gICAgYXV0byBmYXN0UHJvbWlzZVBhdGggPSBtX2ppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpFcXVhbCwgY2FsbGVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gZ2xvYmFsT2JqZWN0LT5pbnRl
cm5hbFByb21pc2VDb25zdHJ1Y3RvcigpIDogZ2xvYmFsT2JqZWN0LT5wcm9taXNlQ29uc3RydWN0
b3IoKSkpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmludGVybmFs
UHJvbWlzZVN0cnVjdHVyZSgpIDogZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpKSwg
c3RydWN0dXJlR1BSKTsKKyAgICBhdXRvIGZhc3RQcm9taXNlUGF0aCA9IG1faml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBjYWxsZWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmlu
dGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yKCkgOiBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1
Y3RvcigpKSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCkBA
IC0xNDg3Miw3ICsxNDg3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQ
cm9taXNlKE5vZGUqIG5vZGUpCiAgICAgbV9qaXQuZW1pdE5vbk51bGxEZWNvZGVTdHJ1Y3R1cmVJ
RChzdHJ1Y3R1cmVHUFIsIHN0cnVjdHVyZUdQUik7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygp
IDogSlNQcm9taXNlOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zm
c2V0KCkpKSk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCBnbG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CisgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBzY3JhdGNo
MUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpKSk7CiAKICAgICBmYXN0UHJvbWlz
ZVBhdGgubGluaygmbV9qaXQpOwpAQCAtMTQ4ODMsOSArMTQ4ODMsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlUHJvbWlzZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8SlNQcm9taXNlPihyZXN1bHRHUFIsIHN0cnVjdHVy
ZUdQUiwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcywgc2l6
ZW9mKEpTUHJvbWlzZSkpOwogICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzTnVtYmVyKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0YXR1czo6UGVuZGluZykpLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpGaWVs
ZDo6RmxhZ3MpKSkpOwogICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21p
c2U6OkZpZWxkOjpSZWFjdGlvbnNPclJlc3VsdCkpKSk7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNl
KG1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAotICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG5vZGUtPmlzSW50
ZXJuYWxQcm9taXNlKCkgPyBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UgOiBvcGVyYXRp
b25DcmVhdGVQcm9taXNlLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
aml0LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIGNhbGxlZUdQUikpOworICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG5vZGUtPmlzSW50ZXJuYWxQ
cm9taXNlKCkgPyBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UgOiBvcGVyYXRpb25DcmVh
dGVQcm9taXNlLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IGdsb2JhbE9iamVjdCksIGNhbGxlZUdQUikpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQpAQCAtMTQ5MjEsNyArMTQ5MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3Bl
cgogICAgIG1faml0LmVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoc3RydWN0dXJlR1BSLCBz
dHJ1Y3R1cmVHUFIpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZv
KCkpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7Ci0gICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9iYWxP
YmplY3QpLCBzY3JhdGNoMUdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpKSk7CiAKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CkBAIC0xNDkzMCw5ICsxNDkzMCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBv
cGVyCiAgICAgQVNTRVJUKGluaXRpYWxWYWx1ZXMuc2l6ZSgpID09IEpTQ2xhc3M6Om51bWJlck9m
SW50ZXJuYWxGaWVsZHMpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGlu
aXRpYWxWYWx1ZXMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRW
YWx1ZShpbml0aWFsVmFsdWVzW2luZGV4XSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSk7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKG1faml0LnZtKCkpOworICAgIG1faml0Lm11
dGF0b3JGZW5jZSh2bSgpKTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmplY3QpLCBjYWxsZWVHUFIpKTsKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xv
YmFsT2JqZWN0KSwgY2FsbGVlR1BSKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiB9CkBAIC0xNDk3MSw3ICsxNDk3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVOZXdPYmplY3QoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkp
OwogICAgIH0KIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUp
KTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3Ry
dWN0dXJlKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0xNDk5
Niw5ICsxNDk5Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlCiAgICAgc3RhdGljX2Fzc2Vy
dChpbml0aWFsVmFsdWVzLnNpemUoKSA9PSBKU0NsYXNzOjpudW1iZXJPZkludGVybmFsRmllbGRz
KTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbml0aWFsVmFsdWVzLnNp
emUoKTsgKytpbmRleCkKICAgICAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoaW5pdGlhbFZh
bHVlc1tpbmRleF0sIENDYWxsSGVscGVyczo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTSW50ZXJuYWxG
aWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwotICAgIG1f
aml0Lm11dGF0b3JGZW5jZShtX2ppdC52bSgpKTsKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0o
KSk7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb24sIHJlc3VsdEdQUiwgJnZtKCksIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CkBAIC0xNTA0MSw3ICsxNTA0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJ
bnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUb1ByaW1pdGl2ZShOb2RlKiBub2RlKQogewotICAgIERGR19BU1NFUlQobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSk7CisgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBhcmd1bWVudCk7
CiAKQEAgLTE1MDYzLDcgKzE1MDYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRv
UHJpbWl0aXZlKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1By
b3BlcnR5S2V5KE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBu
b2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwog
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZ3VtZW50KTsKIApAQCAt
MTUwODcsNyArMTUwODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Qcm9wZXJ0
eUtleShOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9OdW1lcmlj
KE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwogICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CkBA
IC0xNTEzMSw3ICsxNTEzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsTnVt
YmVyQ29uc3RydWN0b3IoTm9kZSogbm9kZSkKICAgICB9CiAjZW5kaWYKIAotICAgIERGR19BU1NF
UlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CisgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwpAQCAtMTUxOTIsNyArMTUxOTIsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpY2tlblRhaWwoTm9kZSogbm9kZSkKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
R1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7
CisgICAgbV9qaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrLCBzY3JhdGNoMVJlZyk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIHNjcmF0Y2gxUmVnLCBj
YWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApAQCAtMTUyMTgsMTcgKzE1
MjE5LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRBZGQoTm9kZSogbm9kZSkK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hcFNldChOb2RlKiBub2RlKQogewotICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBrZXkodGhpcywgbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgU3BlY3VsYXRlSW50MzJPcGVy
YW5kIGhhc2godGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKIAogICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3By
KCk7CiAgICAgSlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5qc1ZhbHVlUmVncygpOwogICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAgICAgR1BSUmVnIGhh
c2hHUFIgPSBoYXNoLmdwcigpOwogCi0gICAgc3BlY3VsYXRlTWFwT2JqZWN0KG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMCksIG1hcEdQUik7CisgICAgc3BlY3VsYXRlTWFwT2JqZWN0
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIG1hcEdQUik7CiAKICAgICBmbHVzaFJlZ2lz
dGVycygpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKQEAgLTE1MzUw
LDI4ICsxNTM1MSwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlV2Vha1NldEFkZChO
b2RlKiBub2RlKQogICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGlsZDIoKSwga2V5R1BSKTsK
IAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFr
U2V0QWRkLCAmdm0oKSwgc2V0R1BSLCBrZXlHUFIsIGhhc2hHUFIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV2Vha1NldEFkZCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHNldEdQUiwga2V5
R1BSLCBoYXNoR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG5vUmVzdWx0
KG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlV2Vha01hcFNldChOb2Rl
KiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBrZXko
dGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0g
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGtleSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKIAog
ICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CiAgICAgR1BSUmVnIGtleUdQUiA9IGtleS5n
cHIoKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwog
ICAgIEdQUlJlZyBoYXNoR1BSID0gaGFzaC5ncHIoKTsKIAotICAgIHNwZWN1bGF0ZVdlYWtNYXBP
YmplY3QobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSwgbWFwR1BSKTsKLSAgICBz
cGVjdWxhdGVPYmplY3QobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSwga2V5R1BS
KTsKKyAgICBzcGVjdWxhdGVXZWFrTWFwT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCksIG1hcEdQUik7CisgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSksIGtleUdQUik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uV2Vha01hcFNldCwgJnZtKCksIG1hcEdQUiwga2V5R1BSLCB2YWx1ZVJlZ3Ms
IGhhc2hHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV2Vha01hcFNldCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIG1hcEdQUiwga2V5R1BSLCB2YWx1ZVJlZ3MsIGhhc2hHUFIpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC0xNTU4
OCw3ICsxNTU4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0Fy
cmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAjZW5kaWYKICAgICBlbWl0
SW5pdGlhbGl6ZUJ1dHRlcmZseShzdG9yYWdlR1BSLCBzaXplR1BSLCBlbXB0eVZhbHVlUmVncywg
cmVzdWx0R1BSKTsKIAotICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQu
Z3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpKTsKKyAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5k
ZXhpbmdUeXBlKSk7CiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2Ny
YXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAKQEAgLTE1NTk4LDcgKzE1NTk5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsCiAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksCiAgICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAgc2hv
dWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlID8gbV9qaXQuZ3JhcGgoKS5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSA6IHN0cnVjdHVyZSwKKyAgICAg
ICAgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlID8gbV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSA6IHN0cnVjdHVyZSwKICAgICAg
ICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwogfQogCkBAIC0xNTg1OCw3ICsxNTg1OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBH
UFJSZWcgYmFzZUdQUiwgSlNWYWx1CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgaWRlbnRpZmllci5yYXdCaXRzKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1
YkluZm8oKSwgdmFsdWVSZWdzLAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpLCBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgdmFsdWVSZWdzLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
ZWxsVmFsdWUoYmFzZUdQUiksIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAKQEAgLTE2
MDU5LDcgKzE2MDYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5v
ZGUqIG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIEFs
bG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IGFsbG9jYXRvckZvckNvbmN1cnJlbnRseTxKU1JvcGVT
dHJpbmc+KHZtKCksIHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7Ci0gICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKHZtKCkuc3RyaW5nU3RydWN0dXJl
LmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBlbWl0QWxsb2NhdGVKU0NlbGwo
cmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2Nh
dG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodm0oKS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgLy8gVGhp
cyBwdXRzIG51bGxwdHIgZm9yIHRoZSBmaXJzdCBmaWJlci4gSXQgbWFrZXMgdmlzaXRDaGlsZHJl
biBzYWZlIGV2ZW4gaWYgdGhpcyBKU1JvcGVTdHJpbmcgaXMgZGlzY2FyZGVkIGR1ZSB0byB0aGUg
c3BlY3VsYXRpb24gZmFpbHVyZSBpbiB0aGUgZm9sbG93aW5nIHBhdGguCiAgICAgbV9qaXQuc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihKU1N0cmluZzo6aXNSb3BlSW5Qb2ludGVyKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSk7
CkBAIC0xNjE2NSw3ICsxNjE2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtl
Um9wZShOb2RlKiBub2RlKQogCiAgICAgYXV0byBpc05vbkVtcHR5U3RyaW5nID0gbV9qaXQuYnJh
bmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgYWxsb2NhdG9yR1BSKTsKIAotICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwganNFbXB0
eVN0cmluZyhtX2ppdC5ncmFwaCgpLm1fdm0pKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcobV9ncmFw
aC5tX3ZtKSksIHJlc3VsdEdQUik7CiAKICAgICBpc05vbkVtcHR5U3RyaW5nLmxpbmsoJm1faml0
KTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggM2UxNDI5ODJmZDc4NzcyYzUzNDJmMWQ2
MTU0NDBlODU2Njg1ZDZjNy4uNGZiZWJmYzVhZmRlMGRkNTE3YzMwOThmY2U3ZDA4YjU5YmY3N2My
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApA
QCAtMTcwLDkgKzE3MCw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICBCYXNpY0Jsb2Nr
KiBuZXh0QmxvY2soKQogICAgIHsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IHJlc3VsdEluZGV4
ID0gbV9ibG9jay0+aW5kZXggKyAxOyA7IHJlc3VsdEluZGV4KyspIHsKLSAgICAgICAgICAgIGlm
IChyZXN1bHRJbmRleCA+PSBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpKQorICAgICAgICAgICAg
aWYgKHJlc3VsdEluZGV4ID49IG1fZ3JhcGgubnVtQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAoQmFzaWNCbG9jayogcmVzdWx0ID0gbV9q
aXQuZ3JhcGgoKS5ibG9jayhyZXN1bHRJbmRleCkpCisgICAgICAgICAgICBpZiAoQmFzaWNCbG9j
ayogcmVzdWx0ID0gbV9ncmFwaC5ibG9jayhyZXN1bHRJbmRleCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KQEAgLTMzMiw3ICszMzIsNyBAQCBjbGFz
cyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7CisgICAgICAgIHJldHVybiBtX2dyYXBo
Lm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKGNvZGVPcmlnaW4p
OwogICAgIH0KICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGls
bFZhbGlkKCkKICAgICB7CkBAIC01ODgsNyArNTg4LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQg
ewogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudGlmaWVyVUlEKHVuc2lnbmVkIGlu
ZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtp
bmRleF07CisgICAgICAgIHJldHVybiBtX2dyYXBoLmlkZW50aWZpZXJzKClbaW5kZXhdOwogICAg
IH0KIAogICAgIC8vIFNwaWxsIGFsbCBWaXJ0dWFsUmVnaXN0ZXJzIGJhY2sgdG8gdGhlIEpTU3Rh
Y2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAppbmRleCAyN2MzNTVkMzAyMzRiMGYyM2ZlZWEyNjk4YmIzZjhlNzljOWJhMWM4
Li42M2E3ZGU5MGU1ODUxNzgzODljMDBlMDA0ZjI2ODZhNmZjNTgwY2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAg
LTIxNSwxMyArMjE1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAg
ICAgaWYgKGJhc2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUGF5bG9hZEdQ
UiksCiAgICAgICAgICAgICBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJh
c2VQYXlsb2FkR1BSKSwgaWRlbnRpZmllci5yYXdCaXRzKCkpOworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9u
ZSwgYmFzZVBheWxvYWRHUFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfQogCiAgICAg
bV9qaXQuYWRkR2V0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTI1MSw3ICsyNTEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoCiAgICAgaWYgKGJh
c2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZyAmJiB0aGlzVGFnR1BSID09IEludmFsaWRH
UFJSZWcpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
YXNlUGF5bG9hZEdQUiksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZSh0aGlz
UGF5bG9hZEdQUiksCiAgICAgICAgICAgICBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CkBAIC0yNjEs
NyArMjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlzKAog
ICAgICAgICAKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwg
YmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh0aGlzVGFnR1BSLCB0aGlzUGF5bG9hZEdQUiks
IGlkZW50aWZpZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEpTVmFsdWVSZWdzKGJhc2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2Fk
R1BSKSwgSlNWYWx1ZVJlZ3ModGhpc1RhZ0dQUiwgdGhpc1BheWxvYWRHUFIpLCBpZGVudGlmaWVy
LnJhd0JpdHMoKSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkR2V0QnlJZFdpdGhUaGlzKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOwpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3Bl
cmFuCiAgICAgICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0Lmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2Jq
ZWN0LmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFs
T2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhh
cmdQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRQYXlsb2Fk
R1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQ
YXlsb2FkR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFs
T2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwg
bG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0UGF5bG9h
ZEdQUik7CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZUJyYW5jaE51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE4KICAgIAog
ICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2Jh
bE9iamVjdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEds
b2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVj
dEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsK
QEAgLTU4MiwxMSArNTgyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0
eXBlIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5n
cmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgMCk7CiAgICAgR1BSUmVnIGNhbGxlZVRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAg
ICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIENhbGxGcmFt
ZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwpAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0RpcmVjdCk7CiAgICAgICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJh
cmdzRGF0YSgpOwogCi0gICAgICAgIGludCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBo
KCkubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICBpbnQgbnVtVXNlZFN0YWNrU2xvdHMgPSBt
X2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0Zvcndh
cmRWYXJhcmdzKSB7CiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNjYxLDcgKzY2
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGxvYWRBcmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CiAgICAg
ICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNo
ZWQoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGlzRmx1c2hlZCgp
KTsKIAogICAgICAgICAgICAgLy8gUmlnaHQgbm93LCBhcmd1bWVudHMgaXMgaW4gYXJndW1lbnRz
VGFnR1BSL2FyZ3VtZW50c1BheWxvYWRHUFIgYW5kIHRoZSByZWdpc3RlciBmaWxlIGlzCiAgICAg
ICAgICAgICAvLyBmbHVzaGVkLgpAQCAtNjgwLDcgKzY4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3Rl
ZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBpc0ZsdXNoZWQoKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBhcmd1bWVudHMgYXJyYXkgYW55bW9yZS4K
ICAgICAgICAgaWYgKGlzVmFyYXJncykKQEAgLTcxMSw5ICs3MTEsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMg
YWRqdXN0bWVudCBub3cgc2luY2Ugd2Ugd2lsbCBoYXZlIGFscmVhZHkgZW1pdHRlZCBjb2RlIHRo
YXQgcmVsaWVkIG9uIHRoZQogICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIG1fcGFyYW1ldGVy
U2xvdHMuCiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwK
ICAgICAgICAgICAgICAgICAgICAgR3JhcGg6OnBhcmFtZXRlclNsb3RzRm9yQXJnQ291bnQobnVt
QWxsb2NhdGVkQXJncykKLSAgICAgICAgICAgICAgICAgICAgPD0gbV9qaXQuZ3JhcGgoKS5tX3Bh
cmFtZXRlclNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgPD0gbV9ncmFwaC5tX3BhcmFtZXRl
clNsb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03MjQsMTQgKzcyNCwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAg
aWYgKCFpc0RpcmVjdCkKICAgICAgICAgICAgICAgICB1c2UoY2FsbGVlRWRnZSk7CiAKLSAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3Rl
ckNvdW50KCk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2dyYXBoLmZy
YW1lUmVnaXN0ZXJDb3VudCgpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKICAgICAgICAgICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvKGFyZ0VkZ2Uubm9kZSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KQogICAgICAgICAgICAgICAgICAgICB1c2Uo
YXJnRWRnZSk7CkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xv
dChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkg
KyAxICsgaV07CiAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0Vk
Z2UpOwogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIGFyZ1JlZ3MgPSBhcmcuanNWYWx1ZVJl
Z3MoKTsKICAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CkBAIC03OTYsNyArNzk2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gQWZ0
ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjawog
ICAgICAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9yIHZhcmFyZ3MgY2FsbHMsIGNh
bGxzIHdpdGggYXJpdHkKICAgICAgICAgLy8gbWlzbWF0Y2ggKHRoZSBjYWxsZnJhbWUgaXMgc2xp
ZGVkKSBhbmQgdGFpbCBjYWxscy4KLSAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMiht
X2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgfTsKICAgICAKICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDYWxsRXZhbCkgewpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwsIGluZm8sIGNhbGxlZVBheWxvYWRHUFIpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgVHJ1c3Rl
ZEltbVB0cihpbmZvKSwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAg
ICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJm1faml0KTsKQEAgLTg3Miw3
ICs4NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgaW5mbywgY2FsbGVlUGF5
bG9hZEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGws
IFRydXN0ZWRJbW1QdHIoaW5mbyksIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAm
bV9qaXQpOwogICAgICAgICAKQEAgLTE1MDUsNyArMTUwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKEVkZ2Ugbm9kZVVzZSwgYm9vbCBpbnZl
cnQpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCAKLSAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMp
KSkpOworICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
KSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsK
ICAgICB9CkBAIC0xNTgzLDcgKzE1ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VG9Cb29sZWFuKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZh
bGlkKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVh
bih2bSgpLCBhcmcxLmpzVmFsdWVSZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVG
UFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0LCBpbnZlcnQpOwogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MzAsNyArMTYzMCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNC
bG9jayogdGFrZW4sIEJhCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgCi0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKSkpKTsKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWMpKSkpOwogCiAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KCZtX2ppdCk7CiAgICAgfQpAQCAtMTczMCw3ICsxNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwog
CiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgYXV0byBmYWxzZXkgPSBtX2ppdC5icmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZVJlZ3Ms
IHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
YWRkQnJhbmNoKGZhbHNleSwgbm90VGFrZW4pOwogICAgICAgICBqdW1wKHRha2VuLCBGb3JjZUp1
bXApOwpAQCAtMTc1NSw3ICsxNzU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEoKICAgICBj
YXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CiAg
ICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTE4
NDQsMTEgKzE4NDQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5v
ZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEoKICAgICAgICAgICAgIGlm
IChiYXNlUmVncy50YWdHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgQ0NhbGxI
ZWxwZXJzOjpDZWxsVmFsdWUoYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgcHJvcGVydHlSZWdzKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgbnVsbHB0ciwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
YmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgcHJvcGVydHlSZWdzKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1Yklu
Zm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIG51bGxwdHIsIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAg
LTIxMDUsNyArMjEwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRhdGVERkdEb2VzR0MpIHsKICAgICAgICAgaWYg
KE9wdGlvbnM6OnZhbGlkYXRlRG9lc0dDKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZXhwZWN0RG9l
c0dDID0gZG9lc0dDKG1faml0LmdyYXBoKCksIG5vZGUpOworICAgICAgICAgICAgYm9vbCBleHBl
Y3REb2VzR0MgPSBkb2VzR0MobV9ncmFwaCwgbm9kZSk7CiAgICAgICAgICAgICBEb2VzR0NDaGVj
ayBjaGVjazsKICAgICAgICAgICAgIGNoZWNrLnUuZW5jb2RlZCA9IERvZXNHQ0NoZWNrOjplbmNv
ZGUoZXhwZWN0RG9lc0dDLCBub2RlLT5pbmRleCgpLCBub2RlLT5vcCgpKTsKICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2hlY2sudS5vdGhlciks
ICZ2bSgpLmFkZHJlc3NPZkRvZXNHQygpLT51Lm90aGVyKTsKQEAgLTI2NDEsMTYgKzI2NDEsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0
QnlWYWxXaXRoVGhpczogewogICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID49IDgsICJXZSBhcmUgYXNzdW1pbmcgd2UgaGF2ZSBlbm91Z2ggcmVnaXN0ZXJz
IHRvIG1ha2UgdGhpcyBjYWxsIHdpdGhvdXQgaW5jcmVtZW50YWxseSBzZXR0aW5nIHVwIHRoZSBh
cmd1bWVudHMuIik7CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdGhpc1ZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpz
VmFsdWVSZWdzKCk7CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwogICAgICAgICBK
U1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwogCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMykpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFs
dWUuanNWYWx1ZVJlZ3MoKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtMzMwOSw3
ICszMzA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgb2xkU3Ry
dWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBuZXdTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7Ci0gICAg
ICAgIG1faml0LmdyYXBoKCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFk
ZExhemlseShub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVj
dHVyZS5nZXQoKSwgbmV3U3RydWN0dXJlLmdldCgpKTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwpAQCAtMzUyNyw3ICszNTI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQ
UiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlbW90ZUds
b2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVj
dEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
bG9jYWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyh2YWx1ZS5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9qaXQuY29tcGFyZTMy
KEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9i
amVjdEdQUiwgcmVzdWx0LmdwcigpKTsKQEAgLTQwNDAsNyArNDA0MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFBoYW50b206CiAgICAgY2Fz
ZSBDaGVjazoKICAgICBjYXNlIENoZWNrVmFyYXJnczoKLSAgICAgICAgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4obV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgc3BlY3VsYXRlKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC00MTAzLDE1ICs0MTAzLDE1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlT3JFbXB0eToKLSAgICAgICAgREZHX0NSQVNIKG1faml0
LmdyYXBoKCksIG5vZGUsICJDaGVja1N0cnVjdHVyZU9yRW1wdHkgb25seSB1c2VkIGluIDY0LWJp
dCBERkciKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJDaGVja1N0cnVjdHVy
ZU9yRW1wdHkgb25seSB1c2VkIGluIDY0LWJpdCBERkciKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIENoZWNrQXJyYXlPckVtcHR5OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgIkNoZWNrQXJyYXlPckVtcHR5IG9ubHkgdXNlZCBpbiA2NC1iaXQgREZHIik7Cisg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQ2hlY2tBcnJheU9yRW1wdHkgb25seSB1
c2VkIGluIDY0LWJpdCBERkciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElzQmlnSW50
OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIklzQmlnSW50IGlzIG9u
bHkgdXNlZCB3aGVuIFVTRV9CSUdJTlQzMiwgd2hpY2ggY2FuIG9ubHkgYmUgdHJ1ZSBpbiA2NCBi
aXQgbW9kZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIklzQmlnSW50IGlz
IG9ubHkgdXNlZCB3aGVuIFVTRV9CSUdJTlQzMiwgd2hpY2ggY2FuIG9ubHkgYmUgdHJ1ZSBpbiA2
NCBiaXQgbW9kZSIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRmlsdGVyQ2FsbExpbmtT
dGF0dXM6CkBAIC00MTg3LDcgKzQxODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgY2FzZSBEYXRlR2V0SW50MzJPck5hTjoKICAgICBjYXNlIERhdGVH
ZXRUaW1lOgogICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6Ci0gICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBiYWNrZW5kIik7Cisg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAidW5leHBlY3RlZCBub2RlIGluIERGRyBi
YWNrZW5kIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDIxNCwxMiArNDIxNCwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpibGVzc0Jvb2xlYW4oR1BSUmVnKQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oTm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAKICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUmFuZG9tLCByZXN1bHQuZnByKCksIGdsb2JhbE9iamVjdCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SYW5kb20sIHJlc3VsdC5mcHIoKSwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgLy8gb3BlcmF0
aW9uUmFuZG9tIGRvZXMgbm90IHJhaXNlIGFueSBleGNlcHRpb24uCiAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCBkZmZkZGY4ZjJlNThkNmIzM2JmZjBjMGEw
YzM4ZGRhZDE2ZmM5ZmQ4Li44ZTkyZjkyZjcwZjBmOTk1ZDYyMjMxMDFjNmQyYmVmOThhODkwZTAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1
ZShFZGdlIGVkZ2UpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbV9jdXJyZW50Tm9kZSwgc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMsIHNwaWxsRm9ybWF0
KTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsIHNw
aWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CkBAIC0xNDAsMTAgKzE0MCwxMCBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSkKICAgICBjYXNlIERhdGFGb3JtYXRE
b3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgICAgIC8vIHRoaXMgdHlwZSBj
dXJyZW50bHkgbmV2ZXIgb2NjdXJzCi0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBt
X2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAi
Q29ycnVwdCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJy
ZW50Tm9kZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRH
UFJSZWc7CiAgICAgfQogfQpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BS
UmVnCiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksCiAg
ICAgICAgICAgICBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVl
ZGVkLAotICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CisgICAgICAgICAgICByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIGJhc2VH
UFIsIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQuYWRkR2V0
QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBH
UFJSZWcgYmFzZUdQUgogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCiAg
ICAgICAgICAgICBEb250U3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVl
ZGVkLAotICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCB0aGlzR1BSLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CisgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIGJhc2VHUFIsIHRoaXNHUFIsIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAgICAg
CiAgICAgbV9qaXQuYWRkR2V0QnlJZFdpdGhUaGlzKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAt
MjYzLDcgKzI2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuCiAKICAgICAgICAgR1BSUmVn
IGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7
Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQ
Uik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BS
KTsKICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xv
YmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdEdQUik7CkBAIC0zMTUs
NyArMzE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGxPclVuZGVmaW5lZChFZGdlIG9wZXJhbmQsIE4KIAogICAgICAgICBHUFJSZWcgbG9j
YWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAg
ICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICBicmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQ
UiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCB0YWtlbik7CkBAIC02OTEsNyArNjkxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgaXNEaXJlY3Qg
PSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0go
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCk7CiAgICAgICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOwogCi0gICAgICAgIGlu
dCBudW1Vc2VkU3RhY2tTbG90cyA9IG1faml0LmdyYXBoKCkubV9uZXh0TWFjaGluZUxvY2FsOwor
ICAgICAgICBpbnQgbnVtVXNlZFN0YWNrU2xvdHMgPSBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2Nh
bDsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0ZvcndhcmRWYXJhcmdzKSB7CiAgICAgICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNzY5LDcgKzc2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxvYWRB
cmd1bWVudHNHUFIoSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIERG
R19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBpc0ZsdXNoZWQoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c0dQUiBhbmQg
dGhlIHJlZ2lzdGVyIGZpbGUgaXMgZmx1c2hlZC4KICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1bWVudHNHUFIsIG51bVVzZWRTdGFja1Nsb3Rz
LCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CkBAIC03ODcsNyArNzg3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZFB0
cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVz
aGVkKCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGlzRmx1c2hlZCgpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBh
bnltb3JlLgogICAgICAgICBpZiAoaXNWYXJhcmdzKQpAQCAtODE4LDE0ICs4MTgsMTQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzIGFkanVzdG1lbnQgbm93IHNpbmNlIHdlIHdpbGwgaGF2ZSBhbHJlYWR5IGVtaXR0
ZWQgY29kZSB0aGF0IHJlbGllZCBvbiB0aGUKICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBvZiBt
X3BhcmFtZXRlclNsb3RzLgogICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCi0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmdyYXBoKCksIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgIEdyYXBoOjpwYXJhbWV0ZXJTbG90c0ZvckFy
Z0NvdW50KG51bUFsbG9jYXRlZEFyZ3MpCi0gICAgICAgICAgICAgICAgICAgIDw9IG1faml0Lmdy
YXBoKCkubV9wYXJhbWV0ZXJTbG90cyk7CisgICAgICAgICAgICAgICAgICAgIDw9IG1fZ3JhcGgu
bV9wYXJhbWV0ZXJTbG90cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgp
LmNoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBj
YWxsZWVFZGdlKTsKICAgICAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKIApAQCAt
ODQzLDE0ICs4NDMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICBjYWxsZWUudXNlKCk7CiAKICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0
ZXJDb3VudCgpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9ncmFwaC5m
cmFtZVJlZ2lzdGVyQ291bnQoKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwogICAgICAgICAg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2Rl
KCkpOwogICAgICAgICAgICAgICAgIGlmICghaXNEaXJlY3QpCiAgICAgICAgICAgICAgICAgICAg
IHVzZShhcmdFZGdlKTsKQEAgLTg2Nyw3ICs4NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGls
ZCgpICsgMSArIGldOwogICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBh
cmdFZGdlKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwogICAg
ICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKQEAgLTg4MSw3ICs4ODEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIH0KICAgICAKICAgICBpZiAoIWlz
VGFpbCB8fCBpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewotICAgICAgICBFZGdlIGNh
bGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgICAgICBFZGdlIGNh
bGxlZUVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDApOwogICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CiAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5n
cHIoKTsKIApAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIEFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVl
ZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sKICAgICAgICAgLy8gcG9pbnRlci4gV2UgcmVseSBv
biB0aGlzIGZvciB2YXJhcmdzIGNhbGxzLCBjYWxscyB3aXRoIGFyaXR5CiAgICAgICAgIC8vIG1p
c21hdGNoICh0aGUgY2FsbGZyYW1lIGlzIHNsaWRlZCkgYW5kIHRhaWwgY2FsbHMuCi0gICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklU
Q29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKFRy
dXN0ZWRJbW0zMihtX2dyYXBoLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIH07CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2Fs
bFR5cGUsIGNhbGxlZUdQUik7CkBAIC05NzksNyArOTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBz
bG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVHUFIpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgVHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8pLCBjYWxsZWVHUFIpOwogICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAg
ICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obWFpblBhdGgsICZtX2ppdCk7CkBAIC05OTks
NyArOTk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICBtX2ppdC5wb3AoSklUQ29tcGlsZXI6OnNl
bGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKSk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25MaW5rRGlyZWN0Q2FsbCwgY2FsbExpbmtJbmZvLCBjYWxsZWVHUFIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBUcnVzdGVkSW1tUHRyKGNhbGxM
aW5rSW5mbyksIGNhbGxlZUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obWFpblBhdGgsICZtX2ppdCk7CiAgICAgICAgIApA
QCAtMTA5MSw3ICsxMDkxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50MzJJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkYKICAgICAgICAgCiAg
ICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAg
ICAgIAotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dDMyLCBzcGlsbEZvcm1hdCk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50
Tm9kZSwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50MzIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgCkBA
IC0xMTIzLDcgKzExMjMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnQzMkludGVybmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRgogICAgIH0KIAogICAg
IGNhc2UgRGF0YUZvcm1hdEpTOiB7Ci0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bV9jdXJyZW50Tm9kZSwgISh0eXBlICYgU3BlY0ludDUyQW55KSk7CisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgISh0eXBlICYgU3BlY0ludDUyQW55KSk7CiAgICAg
ICAgIC8vIENoZWNrIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLgogICAgICAgICBHUFJSZWcgZ3By
ID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKQEAgLTExODMsMTAgKzEx
ODMsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5h
bChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkYKICAgICBjYXNlIERhdGFGb3JtYXRTdHJp
Y3RJbnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRCaWdJbnQzMjoKICAgICBjYXNlIERhdGFGb3Jt
YXRKU0JpZ0ludDMyOgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50
Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9j
dXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOwogICAgICAgICAKICAgICBkZWZhdWx0Ogot
ICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQg
ZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUs
ICJDb3JydXB0IGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwog
ICAgIH0KIH0KQEAgLTEyMDEsNyArMTIwMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludDMyU3RyaWN0KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RC
ZURhdGFGb3JtYXRJbnQzMjsKICAgICBHUFJSZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0ZUludDMy
SW50ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdEludDMyKTsKLSAgICBERkdfQVNT
RVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIG11c3RCZURhdGFGb3JtYXRJbnQzMiA9
PSBEYXRhRm9ybWF0SW50MzIsIG11c3RCZURhdGFGb3JtYXRJbnQzMik7CisgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50MzIgPT0gRGF0YUZv
cm1hdEludDMyLCBtdXN0QmVEYXRhRm9ybWF0SW50MzIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTEyMzgsNyArMTIzOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludDUyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCBkZXNpcmVkRm9ybWF0KQogICAgICAgICAK
ICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAg
ICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwg
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludDUyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3Jt
YXRTdHJpY3RJbnQ1Miwgc3BpbGxGb3JtYXQpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fY3VycmVudE5vZGUsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnQ1MiB8fCBzcGlsbEZv
cm1hdCA9PSBEYXRhRm9ybWF0U3RyaWN0SW50NTIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGls
bGVkKTsKICAgICAgICAgCkBAIC0xMjkwLDcgKzEyOTAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnQ1MihFZGdlIGVkZ2UsIERhdGFGb3JtYXQgZGVzaXJlZEZvcm1h
dCkKICAgICB9CiAKICAgICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbV9jdXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOwogICAgICAgICByZXR1
cm4gSW52YWxpZEdQUlJlZzsKICAgICB9CiB9CkBAIC0xMzI4LDExICsxMzI4LDExIEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlIGVkZ2UpCiAgICAgICAg
IERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAgICAgIGlm
IChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICBERkdfQ1JB
U0goCi0gICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgdG9DU3Ry
aW5nKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsIHRvQ1N0cmluZygK
ICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkICIsIGVkZ2UsICIgdG8gaGF2ZSBkb3VibGUg
Zm9ybWF0IGJ1dCBpbnN0ZWFkIGl0IGlzIHNwaWxsZWQgYXMgIiwKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUZvcm1hdFRvU3RyaW5nKHNwaWxsRm9ybWF0KSkuZGF0YSgpKTsKICAgICAgICAgfQot
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIHNwaWxsRm9y
bWF0ID09IERhdGFGb3JtYXREb3VibGUsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0RG91Ymxl
LCBzcGlsbEZvcm1hdCk7CiAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAg
ICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIGZwcik7CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJEb3VibGUpOwpAQCAtMTM0MCw3ICsxMzQwLDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSkKICAgICAgICAgcmV0dXJuIGZw
cjsKICAgICB9CiAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUs
IGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlLCBpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgaW5mby5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUsIGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSk7CiAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7CiAgICAgbV9mcHJzLmxvY2soZnByKTsK
ICAgICByZXR1cm4gZnByOwpAQCAtMTQxOCwxMCArMTQxOCwxMCBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSkKICAgICBjYXNlIERhdGFGb3JtYXRT
dHJpY3RJbnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRCaWdJbnQzMjoKICAgICBjYXNlIERhdGFG
b3JtYXRKU0JpZ0ludDMyOgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJy
ZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9jdXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOwogICAgICAgICAKICAgICBkZWZhdWx0
OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1
cHQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3VycmVudE5v
ZGUsICJDb3JydXB0IGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVn
OwogICAgIH0KIH0KQEAgLTE0NTMsNyArMTQ1Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQogICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgICAgICBy
ZXR1cm4gZ3ByOwogICAgICAgICB9Ci0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bV9jdXJyZW50Tm9kZSwgaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTLCBpbmZvLnNw
aWxsRm9ybWF0KCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUs
IGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUywgaW5mby5zcGlsbEZvcm1hdCgpKTsK
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNw
aWxsZWQpOwogICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIApAQCAtMTQ5NywxMCArMTQ5NywxMCBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKICAgICBjYXNlIERh
dGFGb3JtYXRTdHJpY3RJbnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRCaWdJbnQzMjoKICAgICBj
YXNlIERhdGFGb3JtYXRKU0JpZ0ludDMyOgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbV9jdXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkJhZCBkYXRhIGZvcm1hdCIpOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9k
ZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
Y3VycmVudE5vZGUsICJDb3JydXB0IGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZh
bGlkR1BSUmVnOwogICAgIH0KIH0KQEAgLTE1NjIsNyArMTU2Miw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJpZ0ludDMyKEVkZ2UgZWRnZSkKICAgICAgICAgfQogCiAg
ICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgKHNwaWxsRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0QmlnSW50MzIsIHNw
aWxsRm9ybWF0KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAo
c3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRC
aWdJbnQzMiwgc3BpbGxGb3JtYXQpOwogCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKIApAQCAtMTYxNSwxMCArMTYxNSwxMCBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCaWdJbnQzMihFZGdlIGVkZ2Up
CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50
NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0QmlnSW50MzI6Ci0gICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAKICAg
ICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9k
ZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
Y3VycmVudE5vZGUsICJDb3JydXB0IGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZh
bGlkR1BSUmVnOwogICAgIH0KIH0KQEAgLTE5MjYsNyArMTkyNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSogbm9kZSkKICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxsKCkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbm9kZS0+Y2VsbE9wZXJhbmQo
KS0+Y2VsbCgpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5jb21wYXJlNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOwogICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE5NzAsNyArMTk3MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKEVkZ2Ug
bm9kZVVzZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSkpOworICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpKSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC0yMDY1LDcgKzIwNjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogICAg
ICAgICBGUFJUZW1wb3JhcnkgdGVtcEZQUih0aGlzKTsKIAogICAgICAgICBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCgpOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BS
VGVtcG9yYXJ5PiBzY3JhdGNoOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IEludmFsaWRH
UFJSZWc7CiAgICAgICAgIGlmIChzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpIHsK
QEAgLTIwODYsNyArMjA4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xl
YW4oTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTIxMjUsNyArMjEyNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNCbG9j
ayogdGFrZW4sIEJhCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFw
aCgpLCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWMpKSkpOworICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
Jm1faml0KTsKICAgICB9CkBAIC0yMTkxLDcgKzIxOTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0VW50eXBlZEJyYW5jaChFZGdlIG5vZGVVc2UsIEJhc2ljQmxvY2sqIHRha2VuLCBCYXNp
Y0JsbwogICAgICAgICAgICAgaWYgKCFpc0RlZmluaXRlbHlTdHJpbmcpCiAgICAgICAgICAgICAg
ICAgc2tpcFN0cmluZ0Nhc2UgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyh2YWx1ZUdQUik7CiAK
LSAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZt
KCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1w
dHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CiAgICAgICAgICAgICBqdW1wKHRha2VuLCBGb3Jj
ZUp1bXApOwogCiAgICAgICAgICAgICBpZiAoIWlzRGVmaW5pdGVseVN0cmluZykKQEAgLTIyMTUs
OCArMjIxNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKEVkZ2Ug
bm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvCiAgICAgICAgIGlmIChzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpIHsKICAgICAgICAgICAgIGJyYW5jaFRlc3Q4KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCksIHRha2VuKTsKICAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHZhbHVlR1BSLCB0ZW1wMUdQUik7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgdGVtcDJHUFIpOworICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCks
IHRlbXAyR1BSKTsKICAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAxR1BSLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgdGVtcDJHUFIsIHRha2VuKTsKICAgICAgICAgICAgIGp1bXAobm90VGFr
ZW4sIEZvcmNlSnVtcCk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjM1Niw3ICsyMzU2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVu
dE5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3Vy
cmVudE5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICB9CiB9CiAKQEAgLTIzNjgsNyArMjM2OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKCiAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdB
cmd1bWVudHM6CiAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICBj
YXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogewogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CkBAIC0yNDc0LDcgKzI0
NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SgogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOworICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikp
LCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOwogICAgICAgICB9CiAKICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7CkBAIC0yODcwLDkgKzI4NzAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVnRXhwVGVzdElubGluZShOb2RlKiBub2RlKQogI2lmIFVTRShMQVJHRV9UWVBFRF9B
UlJBWVMpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheVdpdGhJbnQ1
MlNpemUoTm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBhdXRvIHR5cGVkQXJyYXlUeXBlID0gbm9kZS0+
dHlwZWRBcnJheVR5cGUoKTsKLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3Ry
dWN0dXJlQ29uY3VycmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7CisgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseSh0eXBlZEFycmF5VHlwZSkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKHN0cnVjdHVyZS5nZXQoKSk7CiAKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQ1
Mk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0yOTU0LDcgKzI5NTQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBpZiBjb25z
dGV4cHIgKHZhbGlkYXRlREZHRG9lc0dDKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZURvZXNHQygpKSB7Ci0gICAgICAgICAgICBib29sIGV4cGVjdERvZXNHQyA9IGRvZXNHQyhtX2pp
dC5ncmFwaCgpLCBub2RlKTsKKyAgICAgICAgICAgIGJvb2wgZXhwZWN0RG9lc0dDID0gZG9lc0dD
KG1fZ3JhcGgsIG5vZGUpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChUcnVzdGVkSW1tNjQo
RG9lc0dDQ2hlY2s6OmVuY29kZShleHBlY3REb2VzR0MsIG5vZGUtPmluZGV4KCksIG5vZGUtPm9w
KCkpKSwgdm0oKS5hZGRyZXNzT2ZEb2VzR0MoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTE3
LDcgKzMxMTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0Iik7CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQiKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTMyMzQsNyArMzIzNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zNTE2LDEyICszNTE2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9yOiB7CiAgICAg
ICAgIHVuc2lnbmVkIG51bUV4dHJhQXJncyA9IG51bUV4dHJhQXRvbWljc0FyZ3Mobm9kZS0+b3Ao
KSk7Ci0gICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDAp
OwotICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMSk7
CisgICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDApOworICAgICAg
ICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2Ug
YXJnRWRnZXNbbWF4TnVtRXh0cmFBdG9taWNzQXJnc107CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUV4dHJhQXJnczsgaS0tOykKLSAgICAgICAgICAgIGFyZ0VkZ2VzW2ldID0gbV9qaXQu
Z3JhcGgoKS5jaGlsZChub2RlLCAyICsgaSk7Ci0gICAgICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBt
X2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDIgKyBudW1FeHRyYUFyZ3MpOworICAgICAgICAgICAg
YXJnRWRnZXNbaV0gPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDIgKyBpKTsKKyAgICAgICAgRWRnZSBz
dG9yYWdlRWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMiArIG51bUV4dHJhQXJncyk7CiAKICAg
ICAgICAgR1BSUmVnIGJhc2VHUFI7CiAgICAgICAgIEdQUlJlZyBpbmRleEdQUjsKQEAgLTQwMTAs
NyArNDAxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdf
Q1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDQyNCw3ICs0NDI0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0U3RydWN0
dXJlOiB7CiAgICAgICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgb2xkU3RydWN0dXJlID0gbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91czsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBuZXdT
dHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7Ci0gICAgICAgIG1faml0LmdyYXBo
KCkubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5j
b2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUuZ2V0KCkp
OworICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseShub2RlLT5v
cmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksIG9sZFN0cnVjdHVyZS5nZXQoKSwgbmV3
U3RydWN0dXJlLmdldCgpKTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwpAQCAtNDUyNSwxMyArNDUyNSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOiB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVH
UFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykp
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTQ2NzMsNyArNDY3Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxP
YmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9i
YWxPYmplY3RHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOyAKICAgICAg
ICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9i
amVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHQuZ3ByKCkpOwpAQCAtNDgzNSw3
ICs0ODM1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2hIZWFwQmln
SW50LCByZXN1bHRHUFIsICZ2bSgpLCBpbnB1dEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk1hcEhhc2hIZWFwQmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBpbnB1dEdQUik7CiAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQ4NjQsNyArNDg2
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgICAgICBhdXRvIGlzSGVhcEJpZ0ludCA9IG1faml0LmJyYW5jaElmSGVhcEJpZ0ludChpbnB1
dEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC53YW5nc0ludDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIp
OwotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChpc0hl
YXBCaWdJbnQsIHRoaXMsIG9wZXJhdGlvbk1hcEhhc2hIZWFwQmlnSW50LCBOZWVkVG9TcGlsbCwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIHJlc3VsdEdQUiwgJnZt
KCksIGlucHV0R1BSKSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwgdGhpcywgb3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQs
IE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgaW5wdXRHUFIpKTsKICAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIGlzU3RyaW5n
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KQEAgLTQ5MTgsNyArNDkxOCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgc3RyYWlnaHRIYXNo
LmxpbmsoJm1faml0KTsKICAgICAgICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
ICAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwgdGhpcywg
b3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1Jl
cXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0R1BSLCAmdm0oKSwgaW5wdXRHUFIpKTsK
KyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwg
dGhpcywgb3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25D
aGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgaW5wdXRHUFIpKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsK
IAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC01MDgxLDkgKzUwODEsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgbm90UHJl
c2VudEluVGFibGUubGluaygmbV9qaXQpOwogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSkKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgdm0oKS5zZW50aW5lbE1hcEJ1Y2tldCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCB2bSgpLnNlbnRpbmVsU2V0QnVja2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCB2bSgpLnNlbnRpbmVsU2V0QnVja2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwog
ICAgICAgICBicmVhazsKQEAgLTU0MjQsNyArNTQyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBDaGVjazoK
ICAgICBjYXNlIENoZWNrVmFyYXJnczoKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAgICAgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4obV9ncmFwaCwgbm9kZSwgc3BlY3VsYXRlKTsKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTU5MzgsNyArNTkzOCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGNhbGxUaWVy
VXAubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcmlnZ2VyVGllclVwTm93SW5Mb29w
LCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlclRpZXJVcE5vd0luTG9vcCwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIFRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4LmFzQml0cygpKSk7CiAg
ICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAgIG1faml0Lmp1
bXAoKS5saW5rVG8odG9OZXh0T3BlcmF0aW9uLCAmbV9qaXQpOwpAQCAtNTk1Myw3ICs1OTUzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBD
b3VudGVyLm1fY291bnRlcikpOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJp
Z2dlclRpZXJVcE5vdywgJnZtKCkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
aWdnZXJUaWVyVXBOb3csIFRydXN0ZWRJbW1QdHIoJnZtKCkpKTsKICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycygpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBA
IC01OTY4LDcgKzU5NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgYXV0byB0cmlnZ2VySXRlcmF0b3Ig
PSBtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZmluZChieXRlY29kZUluZGV4
KTsKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCB0cmlnZ2VySXRlcmF0
b3IgIT0gbV9qaXQuaml0Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmVuZCgpKTsKKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB0cmlnZ2VySXRlcmF0b3IgIT0gbV9qaXQuaml0
Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmVuZCgpKTsKICAgICAgICAgSklUQ29kZTo6VHJp
Z2dlclJlYXNvbiogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1faml0LmppdENvZGUoKS0+dGllclVw
RW50cnlUcmlnZ2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpLT52YWx1ZSk7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoIXN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRv
bnRUcmlnZ2VyKSwgInRoZSBKSVQgY29kZSBhc3N1bWVzIG5vbi16ZXJvIG1lYW5zICdlbnRlcici
KTsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSklUQ29kZTo6VHJpZ2dlclJlYXNvbikg
PT0gMSwgImJyYW5jaFRlc3Q4IGFzc3VtZXMgdGhpcyBzaXplIik7CkBAIC01OTkxLDcgKzU5OTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBvdmVyZmxvd2VkQ291bnRlci5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNw
aWxsKHNhdmVQbGFucyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyaWdn
ZXJPU1JFbnRyeU5vdywgdGVtcEdQUiwgJnZtKCksIFRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4
LmFzQml0cygpKSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyaWdnZXJP
U1JFbnRyeU5vdywgdGVtcEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIFRydXN0ZWRJbW0zMihi
eXRlY29kZUluZGV4LmFzQml0cygpKSk7CiAKICAgICAgICAgICAgIGlmIChzYXZlUGxhbnMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHRlbXBHUFIpLmxpbmtUbyh0b05leHRPcGVyYXRpb24sICZtX2ppdCk7CkBAIC02
MDExLDcgKzYwMTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CiAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgotICAgICAgICBERkdfQ1JBU0go
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgdGllci11cCBub2RlIik7CisgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiVW5leHBlY3RlZCB0aWVyLXVwIG5vZGUiKTsKICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTYwNjYsNyArNjA2
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IFBoYW50b21OZXdBcnJheUJ1ZmZlcjoKICAgICBjYXNlIElkZW50aXR5V2l0aFByb2ZpbGU6CiAg
ICAgY2FzZSBDUFVJbnRyaW5zaWM6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAiVW5leHBlY3RlZCBub2RlIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjE1MSw3
ICs2MTUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlRG91YmxlUmVwQW55SW50
KEVkZ2UgZWRnZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUmFuZG9tKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAxKHRoaXMpOwogICAgIEdQUlRl
bXBvcmFyeSB0ZW1wMih0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcDModGhpcyk7CkBAIC02
MjM1LDcgKzYyMzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGF0ZUdldChOb2Rl
KiBub2RlKQogICAgICAgICBjYWxsYmFjayhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgIG1faml0LmJveEludDMyKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzKTsK
IAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb24sIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpD
aGVja05vdE5lZWRlZCwgcmVzdWx0UmVncywgJnZtKCksIGJhc2VHUFIpKTsKKyAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
LCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQs
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBiYXNlR1BSKSk7CiAKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDc4ZDUyY2Y1YmFhZDUwN2Jj
ZDE3OWM2YjFiYTA3NTkwYzExYjE1N2MuLjZhNGJlMjQwYTY3OTY3OTk0ZmYyN2E2ZmNiYWZlMjJi
M2MxZjVmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKQEAgLTI0NDIsMTEgKzI0NDIsMTEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xv
d1BhdGhSZXBhdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLCBleGNlcHRpb25zLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIo
KSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwg
cGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNsb3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KHNlbWFudGljTm9kZU9yaWdpbiksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwg
cGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5z
bG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAt
MjQ2Niw3ICsyNDY2LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAg
ICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBz
ZW1hbnRpY05vZGVPcmlnaW4sIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC0yNTUzLDEx
ICsyNTUzLDExIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGlj
Tm9kZU9yaWdpbiwgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIGppdC5jb2RlQmxvY2so
KS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksIHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSwgcGFy
YW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENh
bGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2Rl
T3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgp
LCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNl
bWFudGljTm9kZU9yaWdpbikpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAtMjU3Nyw3
ICsyNTc3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRp
Y05vZGVPcmlnaW4sIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJh
bXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQpAQCAtNDA2NywxMyArNDA2NywxMyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3Vs
dEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mb0dQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpLmNhbGwoKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJh
bXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbikpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5l
cmF0b3ItPnN0dWJJbmZvKCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikuY2FsbCgpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRv
bmUsICZqaXQpOwpAQCAtNDIyNSwxMyArNDIyNSwxMyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
aml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIEludmFsaWRHUFJSZWcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2Vt
YW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIGJhc2VHUFIsIGJy
YW5kR1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFu
dGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgYXBw
cm9wcmlhdGVQcml2YXRlQWNjZXNzRnVuY3Rpb24oYWNjZXNzVHlwZSksIEludmFsaWRHUFJSZWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVT
ZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIGJhc2VHUFIsIGJyYW5kR1BSKS5j
YWxsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGRvbmUsICZqaXQpOwpAQCAtNDM3MCwxMyArNDM3MCwxMyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAog
ICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIEludmFsaWRHUFJSZWcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihu
b2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1h
bnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwgcHJvcGVydHlH
UFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFu
dGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3Bl
cmF0aW9uLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKQEAgLTQ3MjUsMTQgKzQ3MjUsMTQgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
c3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09y
aWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50
aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFu
dGljT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BS
LCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1swXS5ncHIoKSwgaWRlbnRpZmllci5yYXdCaXRzKCkpLmNhbGwoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIGdl
bmVyYXRvci0+c2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0u
Z3ByKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1swXS5ncHIoKSwg
aWRlbnRpZmllci5yYXdCaXRzKCkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTU1MTEsMTMgKzU1MTEsMTMgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdEdQUiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihu
b2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
U2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mb0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQs
IG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25zLmdldCgpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCByZXN1bHRHUFIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhk
b25lLCAmaml0KTsKQEAgLTU4NjMsMTMgKzU4NjMsMTMgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdT
X0VORAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIEludmFs
aWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBzdHViSW5mb0dQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbiwgSW52YWxpZEdQ
UlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKQEAgLTYyNjksMTQgKzYyNjksMTQg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNl
bWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25z
LmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJldHVybkdQUiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNl
bWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVT
ZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
b0dQUiwgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0LCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihlY21hTW9kZSkpLmNhbGwoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNP
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCks
IG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXR1cm5HUFIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNP
cmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIGJhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZWNtYU1vZGUpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC02OTg4LDcg
KzY5ODgsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExWYWx1ZSBjYWxs
UmVzdWx0ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAot
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2Nh
dGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRh
YmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CkBAIC03MDc1LDcgKzcwNzUsNyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
biA9IG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFs
bG9jYXRpb25XYXRjaHBvaW50OwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKHZtLCBvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICBzbG93UGF0aEFyZ3VtZW50cyk7CkBAIC03MTM1LDcgKzcxMzUs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0
ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgJnZtLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVE
aXJlY3RBcmd1bWVudHMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZ2bSksCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5
KSk7CiAgICAgICAgICAgICB9LCBsZW5ndGgudmFsdWUpOwpAQCAtNzMyOSw3ICs3MzI5LDcgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChj
b25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6
OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID09IE9iamVj
dEtleXMgPyBvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0IDogb3BlcmF0aW9uT2JqZWN0R2V0T3du
UHJvcGVydHlOYW1lc09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9iYWxPYmpl
Y3QsIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3AgPT0gT2JqZWN0S2V5cyA/IG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QgOiBvcGVyYXRp
b25PYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAg
ICAgICBvYmplY3QpOwogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKQEAgLTc0NzIsNyArNzQ3Miw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksICZ2bSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwK
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZS5nZXQoKSkpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHN0cmluZyk7CkBAIC04Mzc1
LDcgKzgzNzUsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExWYWx1ZSBz
bG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6
ZUZvclR5cGUodHlwZWRBcnJheVR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2Jh
bE9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhT
aXplRm9yVHlwZSh0eXBlZEFycmF5VHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJl
Y3RHUFIoKSk7CiAgICAgICAgICAgICB9LApAQCAtODg1MCw3ICs4ODUwLDcgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTIsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwgZ2xvYmFsT2JqZWN0LCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTIsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5k
aXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RH
UFIoKSk7CiAgICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTg4NTgsNyArODg1OCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAg
ICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQ
dHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTWFrZVJvcGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwg
bG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uTWFrZVJvcGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sz
XS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSwga2lk
c1syXSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk0OTEsNyArOTQ5MSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0s
ICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlk
R1BSUmVnLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIEludmFsaWRHUFJSZWcsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAKQEAgLTEwODkyLDcgKzEwODkyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGRvbnRUaHJvdyA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
LmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKT4oaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dGb3JWYXJhcmdzKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpKTsKICAgICAgICAgICAg
ICAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKGppdC52bSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dGb3JWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihE
RkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOwpAQCAtMTExNTUsNyArMTExNTUsNyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyk+KGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93Rm9yVmFyYXJncyk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbihqaXQudm0oKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQoKiko
KT4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncykpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RU
aHJvdyk7CkBAIC0xMTE2Myw3ICsxMTE2Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgc2Ny
YXRjaEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncyk+KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksIGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLCBhcmd1bWVudHNH
UFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZh
ckFyZ09mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRp
b24oaml0LnZtKCkpOwogICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGJpdHdpc2VfY2FzdDx2b2lkKCopKCk+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsK
IApAQCAtMTExNzIsNyArMTExNzIsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50c0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBhcmd1bWVu
dHNHUFIpOwogICAgICAgICAgICAgICAgICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2Ny
YXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjIpOwogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1taW5pbXVtSlND
YWxsQXJlYVNpemUpLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSk+KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksIHNjcmF0Y2hHUFIyLCBhcmd1bWVudHNHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHNjcmF0
Y2hHUFIyLCBhcmd1bWVudHNHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24oaml0LnZtKCkpOwogICAgICAgICAgICAgICAgICAgICBjYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKCopKCk+KG9wZXJhdGlvblNldHVw
VmFyYXJnc0ZyYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEzMjAsNyArMTEzMjAs
NyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgcmVxdWlyZWRC
eXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJl
cXVpcmVkQnl0ZXMpOwogICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGVjbWFNb2RlKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DYWxsRXZhbCk+KGdsb2JhbE9iamVjdCwgR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsK
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25Bcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
blByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKQEAgLTEyOTM5LDEz
ICsxMjkzOSwxMyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmV0
dXJuR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBiYXNlLCBzdWJzY3JpcHQp
LmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5jdGlv
biwgcmV0dXJuR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBiYXNlLCBzdWJzY3JpcHQpLmNhbGwoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewpAQCAtMTI5NTUsMTQgKzEyOTU1LDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXR1cm5HUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNl
bWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMuZ2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXR1cm5HUFIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1Yklu
Zm8oKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzMjU1LDE0ICsxMzI1NSwxNCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmln
aW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3Jp
Z2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCB2YWx1
ZUdQUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlR1BSKS5jYWxs
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGpp
dCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5jdGlvbiwgcmVzdWx0R1BSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCB2YWx1
ZUdQUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlR1BSKS5jYWxs
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzk4Niw3ICsxMzk4Niw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1d
IChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJbmRleGluZ0hlYWRlckFuZFZlY3Rv
ckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCAmdm0sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZl
Y3Rvckxlbmd0aCwgYnV0dGVyZmx5VmFsdWUpOwpAQCAtMTM5OTQsNyArMTM5OTQsNyBAQCBJR05P
UkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIHNsb3dPYmplY3RWYWx1
ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25z
dCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6Okdl
bmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdpdGhC
dXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZ2bSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1dHRlcmZseVZhbHVlKTsKQEAgLTE0MTk0LDcgKzE0MTk0LDcgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKICAg
ICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0s
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSks
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCiAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSkpOwpAQCAtMTQyNjEsNyArMTQyNjEsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0s
ICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwgJnZtLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSks
CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwpAQCAtMTQzMjEsNyArMTQzMjEsNyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgICAgIGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JikgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLCBvcGVyYXRpb25IYW5k
bGVUcmFwcywgSW52YWxpZEdQUlJlZywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sIG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBJ
bnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICAKQEAgLTE0NTg4LDcgKzE0NTg4LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAog
ICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAg
ICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdS
ZWdleHBXaXRoTGFzdEluZGV4LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVj
dCwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xv
YmFsT2JqZWN0KSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHJlZ2V4cENlbGwpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAg
fSwgbGFzdEluZGV4KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwpAQCAtMTUwNjAsMTMgKzE1MDYwLDEzIEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVj
dG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KHZtLAogICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0pOworICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZt
KSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBz
bG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICAgICAgWz0sICZ2
bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9j
YXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlT
dG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHNpemVJblZhbHVlcykpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBA
IC0xNTE0OSwxNCArMTUxNDksMTQgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHBhcmFt
c1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiwgcGFyYW1zWzFdLmdwcigpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRl
bnRpZmllci5yYXdCaXRzKCkpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5j
dGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVudGlmaWVy
LnJhd0JpdHMoKSkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE1MjM5
LDE0ICsxNTIzOSwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcGFyYW1zWzBdLmdw
cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmds
b2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGlkZW50aWZpZXIucmF3Qml0cygpKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3B0aW1p
emF0aW9uRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3Jp
Z2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgcGFyYW1zWzFdLmdwcigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0uZ3ByKCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihpZGVudGlmaWVyLnJhd0JpdHMoKSkpLmNhbGwoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE2NjAzLDE0ICsxNjYwMywxNCBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFt
c1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05v
ZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93
UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksIHBhcmFtc1sxXS5ncHIoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFtc1sw
XS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xv
YmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0pOwpAQCAtMTY2NjcsNyArMTY2NjcsNyBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0x
NjczMSw3ICsxNjczMSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVP
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xv
d1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdw
cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZq
aXQpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTE2OTk2LDcgKzE2OTk2LDcgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0g
bGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwg
JnZtLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUuZ2V0KCkp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CkBAIC0xNzExOSw3ICsxNzExOSw3IEBAIElH
Tk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxh
enlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0
aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCks
IGxvY2F0aW9uc1szXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoLCBidXR0ZXJmbHlWYWx1ZSk7CkBA
IC0xNzEyNyw3ICsxNzEyNyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
ICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBbPSwg
JnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZEhpbnQsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2Jq
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZEhpbnQsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzNdLmRpcmVj
dEdQUigpLCBsb2NhdGlvbnNbNF0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCwgdmVjdG9yTGVuZ3Ro
LCBidXR0ZXJmbHlWYWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAKaW5kZXggN2I1YWIyZGNlNjEzZmUwYmY0MjVkZmU4NWNiZWUxNjky
ODhiYzE0NC4uOGYxYTRiZjYwYTVmMjY5ZjdhZGY5NDQ1MDZlZDI0OTVjMzY3YmY5MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAt
NTg2LDcgKzU4Niw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQg
ZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewogICAg
ICAgICBFbmNvZGVkSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3Jp
cHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0
LCB0bXBTY3JhdGNoKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodG1wU2NyYXRjaCkpOwogICAgICAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOwogICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0ZXJpYWxpemVP
U1JFeGl0U2lkZVN0YXRlKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCmluZGV4IGNhYzY5NTZkYTk3ZGM5MWE0Y2I4YjNh
ZWQ2MWZhZmYzN2MzODVmMjQuLjUzZDhkMWVhNmFlN2FmNzM0NzhiYzZiMTExMzYxYThmZWUzZWM5
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKQEAgLTc1
LDExICs3NSw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlCiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKIH0KIAot
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1Q
dHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBj
b2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQogewogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQ
YWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCmluZGV4IGI0YjljM2MwYTFmYTZmMjM3
ZmNjYTA0YjJhODc3YmYyMzRlNmFhNjIuLjBmZmNhNDM3ZGZiNjRhYTQ3NzMyNmU3YzQ4YjgzMWU3
NDM2NWMwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaApAQCAt
NjMwLDggKzYzMCw3IEBAIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3NlbWJseUhlbHBl
cnMgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIG51bUdQ
UkFyZ3MsIHVuc2lnbmVkIG51bUdQUlNvdXJjZXMsIHVuc2lnbmVkIG51bUZQUkFyZ3MsIHVuc2ln
bmVkIG51bUZQUlNvdXJjZXMsIHVuc2lnbmVkIG51bUNyb3NzU291cmNlcywgdW5zaWduZWQgZXh0
cmFHUFJBcmdzLCB1bnNpZ25lZCBub25BcmdHUFJzLCB1bnNpZ25lZCBleHRyYVBva2UsIHR5cGVu
YW1lIEFyZywgdHlwZW5hbWUuLi4gQXJncz4KICAgICBBTFdBWVNfSU5MSU5FIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxDVVJSRU5UX0FSR1VNRU5UX1RZUEU+Ojp2
YWx1ZQotICAgICAgICAmJiAoKHN0ZDo6aXNfcG9pbnRlcjxBcmc+Ojp2YWx1ZSAmJiBzdGQ6Omlz
X2NvbnZlcnRpYmxlPHN0ZDo6cmVtb3ZlX2NvbnN0X3Q8c3RkOjpyZW1vdmVfcG9pbnRlcl90PEFy
Zz4+KiwgQ1VSUkVOVF9BUkdVTUVOVF9UWVBFPjo6dmFsdWUpCi0gICAgICAgICAgICB8fCBzdGQ6
OmlzX3NhbWU8QXJnLCBzdGQ6Om51bGxwdHJfdD46OnZhbHVlKT4KKyAgICAgICAgJiYgc3RkOjpp
c19zYW1lPEFyZywgc3RkOjpudWxscHRyX3Q+Ojp2YWx1ZT4KICAgICBzZXR1cEFyZ3VtZW50c0lt
cGwoQXJnQ29sbGVjdGlvbjxudW1HUFJBcmdzLCBudW1HUFJTb3VyY2VzLCBudW1GUFJBcmdzLCBu
dW1GUFJTb3VyY2VzLCBudW1Dcm9zc1NvdXJjZXMsIGV4dHJhR1BSQXJncywgbm9uQXJnR1BScywg
ZXh0cmFQb2tlPiBhcmdTb3VyY2VSZWdzLCBBcmcgYXJnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewog
ICAgICAgICBzZXR1cEFyZ3VtZW50c0ltcGw8T3BlcmF0aW9uVHlwZT4oYXJnU291cmNlUmVncywg
VHJ1c3RlZEltbVB0cihhcmcpLCBhcmdzLi4uKTsKQEAgLTg1Myw3ICs4NTIsNiBAQCBjbGFzcyBD
Q2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxwZXJzIHsKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKIHB1YmxpYzoKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJ
bW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KTsKIAogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRo
ZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAppbmRleCBmMzliNzFjNDkwMjBkNWI2ODFhM2FjYzEzZWRmZWMxZTdmOWFj
OWYzLi43MWFiMTc2NDcwYTcwODNmOWU5OGFmZDMzODA2ODVjNDZiMzJiMDJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKCkKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNG
cm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKIAotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25PcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgc2tpcE9wdGltaXplLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZmFySnVtcChyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRpbWl6
ZS5saW5rKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKaW5kZXggMDUzNzdiODIwNTgxZWFiZmFlODI5ZWY0ZjVjYjA4MjAxOTE1YTMwYi4uNGVkNDc1
MWE3MTdjOWFmMmMxMmZkYzgzZDQyZThkNGQwYWQ1MzE5NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3Qg
SlNJbnN0cnVjdGlvbioKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIoYXJpdGhQ
cm9maWxlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgc3Jj
UmVncyk7CiAgICAgfSBlbHNlCkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1
Y3Rpb24KICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKGFyaXRoUHJvZmlsZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9i
YWxPYmplY3RHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQpAQCAtODQ0LDcg
Kzg0NCw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24qCiAgICAgICAgIGlmIChtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQogICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOwogCkBAIC05MDUsNyArOTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEpTSW5zdHJ1Y3Rpb24K
ICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gp
CiAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BS
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBsZWZ0UmVncywgcmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKGFyaXRoUHJvZmlsZSkpOwogICAgIH0gZWxzZQogICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCmluZGV4IGZmNDg0MTMxYzZkZmYwZWUyZTljOGQzMGEzN2FkMWFiYWNlMWRlNjkuLjUxZmMx
OTc4Nzk3N2E1M2YwNjUxNTg4MTkzNmMyOGM5M2JkMDk2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmVSZWcpOwog
ICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQpAQCAtMTAxOCw3ICsxMDE4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZCYXNlbGluZUpJVERhdGEoKSksIHNfY29uc3RhbnRzR1BSKTsKICAgICB9CiAKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFy
RXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CkBAIC0x
MDM0LDcgKzEwMzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBKU0luc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0
b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNr
aXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNl
cHRpb25IYW5kbGVyUHRyVGFnKTsKQEAgLTEwODAsNyArMTA4MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGZhckp1bXAocmVnVDIsIEpTU3dpdGNoUHRyVGFnKTsKIAogICAgIG5vdEludDMyLmxpbmso
dGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwganNSZWdUMTAsIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGpz
UmVnVDEwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEyNjIsNyArMTI2Miw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKICAgICBqaXQuc3ViUHRyKFRydXN0ZWRJbW1QdHIoMTYpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0LnN0b3JlUHRyKGNhbkJlT3B0aW1pemVkR1BS
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CiAKLSAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGFyZ3VtZW50
R1BSMSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKT4oVHJ1c3RlZEltbVB0cigmdm0pLCBhcmd1bWVudEdQUjEpOwogICAgIENh
bGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CiAKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyKSwgY2FuQmVP
cHRpbWl6ZWRHUFIpOyAvLyBSZXN0b3JlIGNhbkJlT3B0aW1pemVkR1BSCkBAIC0xNDUyLDcgKzE0
NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBKU0luc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJS
ZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hv
b2tUeXBlKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgVHJ1c3RlZEltbVB0
cigmdm0oKSksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAg
ICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKQEAgLTE0OTMsNyArMTQ5Myw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8CiAKICAgICAgICAgY29weUxMSW50QmFzZWxpbmVD
YWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAg
ICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZh
bHVlR1BSKTsKICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CiAgICAgICAgICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAw
MCkpKSk7CkBAIC0xNTc3LDcgKzE1NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7CiAgICAgR1BSUmVnIGdsb2JhbEdQUiA9
IGFyZ3VtZW50R1BSMDsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+
KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBUcnVzdGVkSW1tUHRyKGpzQ2Fz
dDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSkpOwog
ICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQpAQCAtMTU5NCwxNCArMTU5
NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRz
dCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19h
c3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjM3
LDE0ICsxNjM3LDE0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSlNJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9m
dW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0
aW9uLCBkc3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTc1Nyw3ICsxNzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJy
ZW50TG9nRW50cnlPZmZzZXQoKSkpOwogICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxv
Z0VuZFB0cigpKSk7CiAgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9m
IHRoZSBsb2cuCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUHJv
Y2Vzc1R5cGVQcm9maWxlckxvZywgJnZtKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csIFRydXN0ZWRJbW1QdHIoJnZt
KCkpKTsKICAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKIAogICAgIGp1bXBUb0VuZC5saW5r
KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAppbmRleCBkNDJhYzgwMzhlMzVlNDAyNjBhNzE2MmZkYmY4NzJkNTg2NTkwMzlkLi43NGY0
OTlkYzdhNWYyOTE3OTU2YjA5YWE0ZjQ5NGM5ZmVhYzkxYThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTg3LDcgKzU4Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdU
MiwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCkpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNTk3LDcgKzU5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCkpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTYwOCw3ICs2MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpbwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCkpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTI1MjAsNyArMjUyMCw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbCh0bXBKU1IpOwogCiAg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCB0
bXBKU1IucGF5bG9hZEdQUigpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCB0bXBKU1IucGF5bG9h
ZEdQUigpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHRtcEpTUi5wYXlsb2FkR1BS
KCkpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUpCkBAIC0yNTM4LDE0ICsyNTM4LDE0IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKIHsKICAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lcik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBUcnVzdGVk
SW1tUHRyKG93bmVyKSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCiB7CiAgICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25l
ciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgb3duZXIpOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2FzbVRvSlMuY3BwCmluZGV4IDdiMDE0OGI5MWRjNTg0MDc5OWUwYmU1NWRlZTFiM2FhNzkyNzU0
Y2YuLjZiOWViYWMwMzFkMWM5N2YzNjZiZjJiZWYwYjViN2I1ZTkzNGJhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgICAgICB9CiAKLSAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzKT4od2FzbUNv
bnRleHRJbnN0YW5jZUdQUiwgJnNpZ25hdHVyZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnNpZ25hdHVyZSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyKTsKICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cykpOwogICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456734</attachid>
            <date>2022-04-05 12:57:42 -0700</date>
            <delta_ts>2022-04-05 13:36:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238827-20220405125742.patch</filename>
            <type>text/plain</type>
            <size>253286</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
M2E2MDYwN2UwYzM2ZDYyZWYzYjU5ZDZkNzhlNzhkZmYxOWI0ZjE4Li45NTYwZTZhOGI1NWVjYWNm
ZDMxOGM4Y2VlNjA2ZjMzMzRlNzE3ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDggQEAKKzIwMjItMDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTdHJpY3RseSBhbm5vdGF0ZSBwb2ludGVycyB3aXRoIFRydXN0
ZWRJbW1QdHIgaW4gQ0NhbGxIZWxwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzg4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBkZXRlY3QgcG9pbnRlciB1c2UgaW4g
REZHIGVhc3kuIFRoaXMgaXMgaW1wb3J0YW50IGluIHVubGlua2VkIERGRyBkZXZlbG9wbWVudC4K
KyAgICAgICAgV2UgYWxzbyBjb25zaXN0ZW50bHkgdXNlIG1fZ3JhcGggaW5zdGVhZCBvZiBtX2pp
dC5ncmFwaCgpIGluIERGRzo6U3BlY3VsYXRpdmVKSVQuCisKKyAgICAgICAgV2UgYWxzbyBwdXJn
ZSBDb2RlQmxvY2sqIGVtYmVkZGluZyBpbiBERkcgY29kZSBjb21wbGV0ZWx5LiBOb3cgd2UgbG9h
ZCBpdCBmcm9tIHRoZSBjZnIKKyAgICAgICAgaW5zdGVhZCAoY29tcGlsZUxvZ1NoYWRvd0NoaWNr
ZW5UYWlsIGFuZCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24p
LgorCisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmg6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNv
bXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEdldENhbGxlZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPU1JF
eGl0RnV6ekNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNh
dmVQbGFuRm9yR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlJZEZsdXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlWYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5CeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzUHJpdmF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdTbGljZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb29wSGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNoZWNrVHJhcHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVDbGFtcERvdWJsZVRvQnl0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Omp1bXBGb3JUeXBlZEFycmF5T3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjppZGVudGlmaWVyVUlEKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZU51bGxPclVuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMlN0cmlj
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQ1
Mik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJp
Z0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbXBh
cmVFcVB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jv
b2xlYW5PYmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdFVudHlwZWRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d1R5cGVkQXJyYXlXaXRoSW50NTJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aFJhbmRvbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEYXRlR2V0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVVuYXJ5TWF0aElDKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUJpbmFyeU1hdGhJQyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldFByaXZhdGVOYW1lKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVByaXZhdGVCcmFuZEFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRQ
cml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNhY2hl
ZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
R2V0QnlWYWxJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZURlbEJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlTmV3RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU9iamVjdEtleXNPck9iamVjdEdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3
U3RyaW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1p
dE5ld1R5cGVkQXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAg
ICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6
CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c3RkOjppc19wb2ludGVyPENVUlJFTlRfQVJH
VU1FTlRfVFlQRT46OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICog
aml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfaGFuZGxl
ckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9u
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pT
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDIyLTA0LTA0ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVkdWNlIHNp
emVvZihCYXNlbGluZUNhbGxMaW5rSW5mbykgdG8gbWFrZSBidWcgMjM4NTM1IGdvb2QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2Vu
ZXJhdG9yLmgKaW5kZXggZTk3OGI2ZjgwODA3MzI4MmVmYWI0YzJhZDk4ZjExNTE4NDRiYjZkNy4u
NjBmMzkwYjE0MDQ5YjBmZjA0YWRjOGY1ZjU4MWVlMmRhY2Q0OWIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgKQEAgLTk0LDE3ICs5NCwxNyBAQCBjbGFzcyBBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0FzcwogICAgICAgICBW
TSYgdm0gPSBqaXQtPnZtKCk7CiAgICAgICAgIHN3aXRjaCAobV9hcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyLCBtX3RlbXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKKyAg
ICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVJbnQzMiwgbV90ZW1w
R1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jhc2VHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAg
IGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3VibGUsIG1fdGVtcEdQUiwgJnZt
LCBtX2Jhc2VHUFIpOworICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
c3VyZURvdWJsZSwgbV90ZW1wR1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0p
LCBtX2Jhc2VHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6Ci0gICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJl
Q29udGlndW91cywgbV90ZW1wR1BSLCAmdm0sIG1fYmFzZUdQUik7CisgICAgICAgICAgICBqaXQt
PmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgbV90ZW1wR1BSLCBTcGVj
dWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jhc2VHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIG1fdGVtcEdQUiwgJnZtLCBtX2Jhc2VHUFIp
OworICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3Rv
cmFnZSwgbV90ZW1wR1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jh
c2VHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCmluZGV4IDIzZmQ0
NTQ3YzU5YjkyYTkzNDM3NDJhNTg0ZjdkZGNkZjI5MWY5ZWIuLmNmMGI4OTg1NDVkMWNhNWRlYTk2
MzRmNWYyMjU3OGY1Y2I5ZTc5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9y
LmgKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG8KICAgICAgICAgbGlu
a0Zyb20oaml0KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwotICAg
ICAgICBqaXQtPmNhbGxPcGVyYXRpb24obV9mdW5jdGlvbiwgbV9yZXN1bHRHUFIsICZqaXQtPnZt
KCksIG1fc3RydWN0dXJlLCBtX3NpemUsIG1fc3RvcmFnZUdQUik7CisgICAgICAgIGppdC0+Y2Fs
bE9wZXJhdGlvbihtX2Z1bmN0aW9uLCBtX3Jlc3VsdEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0
ZWRJbW1QdHIoJmppdC0+dm0oKSksIG1fc3RydWN0dXJlLCBtX3NpemUsIG1fc3RvcmFnZUdQUik7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAgICAg
ICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPm1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3IuaAppbmRleCAzMDIwNTAzOGQyYTNkNDYxODRiYzc2NmEwMDdhZGU3N2IzMzhkNjI2Li5m
MGFiMDc0NDE1NTAxNTczOWE0MzgwY2YzOThiNjg0MGU5MGIyNGIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0
aEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbENyZWF0
ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xh
c3MgQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIEp1bXBpbmdTbG93UGF0aEcKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
cGxhbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNb
aV0pOwogICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICBvcGVyYXRpb25D
cmVhdGVEaXJlY3RBcmd1bWVudHMsIG1fcmVzdWx0R1BSLCAmaml0LT52bSgpLCBtX3N0cnVjdHVy
ZSwgbV9sZW5ndGhHUFIsIG1fbWluQ2FwYWNpdHkpOworICAgICAgICAgICAgb3BlcmF0aW9uQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzLCBtX3Jlc3VsdEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJ
bW1QdHIoJmppdC0+dm0oKSksIG1fc3RydWN0dXJlLCBtX2xlbmd0aEdQUiwgbV9taW5DYXBhY2l0
eSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAg
ICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPm1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCmluZGV4IDRmY2Q0ZDM4NmIyNDIxNzgxYWY3MzljYTUzMjg4ZmE1OWYwZTkwMGIu
Ljk0ZjUwYjc3ZmJmNzgyMGI2OTkxMGEwNTc3ZjQ5OTVlODMwMWZjMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0zNDYsNyArMzQ2LDggQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKLSAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJs
b2NrKTsKKyAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2ssIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgbV9zcGVjdWxhdGl2
ZS0+Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogCiAgICAg
Ly8gR2VuZXJhdGUgc2xvdyBwYXRoIGNvZGUuCiAgICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1Bh
dGhHZW5lcmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKQEAgLTQxOSw3ICs0MjAs
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogCi0gICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisgICAgbV9qaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IG1fc3BlY3VsYXRpdmUtPmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICAKICAgICAvLyBUaGUgZmFzdCBlbnRyeSBwb2ludCBpbnRvIGEgZnVuY3Rpb24g
ZG9lcyBub3QgY2hlY2sgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgIC8vIGhh
dmUgYmVlbiBwYXNzZWQgdG8gdGhlIGNhbGwgKHdlIG9ubHkgdXNlIHRoZSBmYXN0IGVudHJ5IHBv
aW50IHdoZXJlIHdlIGNhbiBzdGF0aWNhbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAppbmRleCA4YjEwZGIyYWY1MmM3NjdlYzEyZmE0ZDIxNGU3NGZkZWIzZjdhMjQ2
Li4yNDMyNmE2ODBiMjhlOTU2ZDI2NTZkNDIyMzE1YmFmMzYwNzQzMDY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBPU1JFeGl0
OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0
aG9kT2ZHZXR0aW5nQVZhbAogewogICAgIGJvb2wgY2FuRXhpdCA9IGppdC0+bV9vcmlnaW4uZXhp
dE9LOwogICAgIGlmICghY2FuRXhpdCAmJiBqaXQtPm1fY3VycmVudE5vZGUpIHsKLSAgICAgICAg
RXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KGppdC0+bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1
cnJlbnROb2RlKTsKKyAgICAgICAgRXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KGppdC0+bV9n
cmFwaCwgaml0LT5tX2N1cnJlbnROb2RlKTsKICAgICAgICAgY2FuRXhpdCA9IGV4aXRNb2RlID09
IEV4aXRNb2RlOjpFeGl0cyB8fCBleGl0TW9kZSA9PSBFeGl0TW9kZTo6RXhpdHNGb3JFeGNlcHRp
b25zOwogICAgIH0KLSAgICBERkdfQVNTRVJUKGppdC0+bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1
cnJlbnROb2RlLCBjYW5FeGl0KTsKKyAgICBERkdfQVNTRVJUKGppdC0+bV9ncmFwaCwgaml0LT5t
X2N1cnJlbnROb2RlLCBjYW5FeGl0KTsKIH0KIAogQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFs
UHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKQEAgLTc0Nyw3
ICs3NDcsNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBW
TSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAKICAgICBpZiAoaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNj
cmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7Ci0gICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUp
Pigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodG1wU2NyYXRjaCkpOwogICAgICAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TWF0ZXJpYWxpemVPU1JFeGl0U2lkZVN0YXRlKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAg
ICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCmluZGV4IDU4NGZmZDg4NTZiMThjNzc2OGJjYTJkMzc5NWU5MGU4MzMxZTIxMDkuLjNk
N2NiOGMwMTE5YmNjODIxODhjODA3YzkzNWExZjU2NTU3NzMwNjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAg
LTM0Myw3ICszNDMsNyBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYQogewogICAgIEFzc2VtYmx5
SGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJCcmFu
Y2hXaXRob3V0RmVuY2Uob3duZXIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KCZ2bSwgb3duZXIpOworICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpPihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgb3duZXIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlv
bih2bSk7CiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0
Y2gpOwogICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDE0NzZiNGU4
Mzg0YjM3ZmY5YmRhNDczM2Y1MTE4ZmVhZjFiN2M1MDguLmY1N2I5NTA5YzFhYzFmM2JjNmJjZGNk
Y2ZlZTRmNGVlZTJlN2U4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCkBAIC03OSwxMCArNzksMTAgQEAgU3BlY3VsYXRpdmVKSVQ6OlNw
ZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCiAgICAgLCBtX2N1cnJlbnROb2RlKG51bGxw
dHIpCiAgICAgLCBtX2xhc3RHZW5lcmF0ZWROb2RlKExhc3ROb2RlVHlwZSkKICAgICAsIG1faW5k
ZXhJbkJsb2NrKDApCi0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmdyYXBoKCkuZnJhbWVS
ZWdpc3RlckNvdW50KCkpCisgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1fZ3JhcGguZnJhbWVSZWdp
c3RlckNvdW50KCkpCiAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgLCBtX3N0YXRlKG1f
aml0LmdyYXBoKCkpCi0gICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUp
CisgICAgLCBtX3N0YXRlKG1fZ3JhcGgpCisgICAgLCBtX2ludGVycHJldGVyKG1fZ3JhcGgsIG1f
c3RhdGUpCiAgICAgLCBtX3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVh
bSkKICAgICAsIG1fbWluaWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCiB7
CkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZShD
b2RlT3JpZ2luIG9yaWdpbiwgR1BSUmVnIGNhbGxlZUdQUikKICAgICAgICAgICAgICAgICBjYWxs
ZWVHUFIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKLSAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAorICAgICAg
ICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSksCiAgICAgICAgICAgICAg
ICAgY2FsbGVlR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRHZXRBcmd1bWVudFN0YXJ0KENvZGVPcmlnaW4gb3Jp
Z2luLCBHUFJSZWcgc3RhcnRHUFIpCiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9TUkV4aXRGdXp6Q2hlY2soKQogewogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRXhp
dEZ1enooKQotICAgICAgICB8fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5i
YXNlbGluZUNvZGVCbG9ja0ZvcihtX29yaWdpbi5zZW1hbnRpYykpCisgICAgICAgIHx8ICFjYW5V
c2VPU1JFeGl0RnV6emluZyhtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fb3JpZ2luLnNl
bWFudGljKSkKICAgICAgICAgfHwgIWRvT1NSRXhpdEZ1enppbmcoKSkKICAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpKdW1wKCk7CiAgICAgCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0Zh
aWwpOwogICAgIH0gZWxzZQogICAgICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWls
KTsKLSAgICBtX2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwg
bV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5v
ZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuYXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNp
emUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKQEAgLTI4NSw3ICsyODUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZQogICAgICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyht
eUp1bXBzVG9GYWlsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8o
anVtcHNUb0ZhaWwpOwotICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1Zh
bHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
bV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBtX2pp
dC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9ncmFwaC5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBt
X3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBOb2RlKiBub2RlKQpAQCAtMjk0LDcgKzI5NCw3IEBAIE9TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBtX2ppdC5tX29zckV4aXQuc2l6ZSgpOwogICAgIG1faml0LmFwcGVu
ZEV4aXRJbmZvKCk7Ci0gICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFs
dWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvciht
X2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0
LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2dyYXBoLm1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCkpKTsKICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcihpbmRl
eCk7CiB9CiAKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZQogICAg
ICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1faml0LmFwcGVuZFNw
ZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1
bXBUb0ZhaWwpOwotICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9j
dXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgp
KTsKKyAgICBtX2ppdC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwg
bV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5v
ZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4KSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQpAQCAtNTEyLDcg
KzUxMiw3IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNh
dmVQbGFuRm9yR1BSKFZpcnR1YWxSZWdpc3RlciBzcGlsCiAgICAgfSBlbHNlIGlmIChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9
PSBzb3VyY2UpOwogICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBub2RlLT5pc0NlbGxD
b25zdGFudCgpKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9k
ZSwgbm9kZS0+aXNDZWxsQ29uc3RhbnQoKSk7CiAgICAgICAgICAgICBub2RlLT5hc0NlbGwoKTsg
Ly8gVG8gZ2V0IHRoZSBhc3NlcnRpb24uCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Q2Vs
bENvbnN0YW50OwogICAgICAgICB9IGVsc2UgewpAQCAtODU2LDcgKzg1Niw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm9kZSkKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CiAgICAgCi0gICAgaWYgKGFycmF5TW9kZS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5n
cmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAgIGlm
IChhcnJheU1vZGUuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIHB1cmdlIEVtcHR5IGNoZWNr
IGNvbXBsZXRlbHkgaW4gdGhpcyBjYXNlIG9mIENoZWNrQXJyYXlPckVtcHR5IHNpbmNlIENlbGxV
c2Ugb25seSBhY2NlcHRzIFNwZWNDZWxsIHwgU3BlY0VtcHR5LgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIEFTU0VSVCh0eXBlRmlsdGVyRm9yKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
JiBTcGVjRW1wdHkpOwpAQCAtMTAxNyw4ICsxMDE3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dXNlQ2hpbGRyZW4oTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVI
YXNWYXJBcmdzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgY2hpbGRJZHgrKykgewotICAgICAgICAgICAgaWYgKCEhbV9qaXQuZ3JhcGgoKS5tX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICBpZiAoISFtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgIHVzZShtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMTAwLDcgKzExMDAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlJZChOb2RlKiBub2RlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCiAgICAgfQogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
fQpAQCAtMTE2NSw3ICsxMTY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
SWRGbHVzaChOb2RlKiBub2RlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgfQogCiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQi
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTIxMSw3ICsxMjExLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5SWQoTm9kZSogbm9kZSkKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLAotICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCks
IFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAgICAg
IH0KICNlbHNlCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xv
d1BhdGg7CkBAIC0xMjIyLDcgKzEyMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
RGVsZXRlQnlJZChOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xv
d1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
YXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgQ0NhbGxI
ZWxwZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAg
ICAgfQogI2VuZGlmCiAKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVEZWxldGVCeVZhbChOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIGtleVJlZ3MsIFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsK
KyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVk
SW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAgICAgIH0KICNlbHNlCiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CkBAIC0xMzA4
LDcgKzEzMDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlWYWwoTm9k
ZSogbm9kZSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1Bh
dGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgZ2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlS
ZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwga2V5UmVncywgVHJ1c3Rl
ZEltbTMyKG5vZGUtPmVjbWFNb2RlKCkudmFsdWUoKSkpOwogICAgICAgICB9CiAjZW5kaWYKIApA
QCAtMTM3OCw3ICsxMzc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlJZChO
b2RlKiBub2RlKQogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsCiAgICAgICAgICAgICBO
ZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAg
ICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2Fs
bEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigp
LnJhd0JpdHMoKSk7CisgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSk7CiAgICAgfQogCiAg
ICAgbV9qaXQuYWRkSW5CeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTQyOCw3ICsxNDI4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwoTm9kZSogbm9kZSkKICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwKICAgICAgICAgICAgIE5lZWRUb1NwaWxsLCBF
eGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIENDYWxsSGVs
cGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlSZWdzKTsKKyAgICAgICAgICAgIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIG51bGxw
dHIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlSZWdzKTsKICAgICB9CiAK
ICAgICBtX2ppdC5hZGRJbkJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTQ4Miw3ICsx
NDgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1ByaXZhdGUoTm9kZSogbm9k
ZSwgQWNjZXNzVHlwZSB0eXBlKQogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSwKICAgICAgICAgICAgIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVj
a1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VH
UFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKKyAgICAg
ICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6
OkNlbGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRJ
bkJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTkxMSw3ICsxOTExLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNlKE5vZGUqIG5vZGUpCiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIGF1dG8gbm9uRW1wdHlDYXNlID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKTsKLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlT
dHJpbmcodm0pKSwgdGVtcEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBqc0VtcHR5U3RyaW5nKHZtKSksIHRlbXBHUFIpOwogICAgIGRvbmVD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgIG5vbkVtcHR5Q2FzZS5saW5rKCZtX2pp
dCk7CkBAIC0xOTQxLDcgKzE5NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3Ry
aW5nU2xpY2UoTm9kZSogbm9kZSkKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cih2bS5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgdGVtcEdQUik7CiAgICAgbV9q
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3ModGVtcEdQUiksIHRlbXBHUFIpOwogCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJpZ0NoYXJhY3RlciwgdGhpcywg
b3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCB0ZW1wR1BSLCAmdm0sIHRlbXBHUFIpKTsK
KyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmlnQ2hhcmFjdGVyLCB0aGlz
LCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHRlbXBHUFIsIFRydXN0ZWRJbW1QdHIo
JnZtKSwgdGVtcEdQUikpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uU3RyaW5nU3Vic3RyLCB0ZW1wR1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgc3RyaW5nR1BSLCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKSk7
CiAKQEAgLTIxMTQsMTkgKzIxMTQsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
b3BIaW50KE5vZGUqIG5vZGUpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkpKSB7CiAgICAgICAgIGJvb2wgZW1pdEVhcmx5
UmV0dXJuID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLndhbGtVcElubGlu
ZVN0YWNrKFsmXShDb2RlT3JpZ2luIG9yaWdpbikgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iob3Jp
Z2luKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG9yaWdpbik7CiAgICAgICAgICAgICBpZiAoIWJhc2VsaW5l
Q29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKQog
ICAgICAgICAgICAgICAgIGVtaXRFYXJseVJldHVybiA9IGZhbHNlOwogICAgICAgICB9KTsKICAg
ICAgICAgaWYgKGVtaXRFYXJseVJldHVybikgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1
Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkucHRyKCk7CiAKICAgICAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5n
ZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgbV9q
aXQucHVzaFRvU2F2ZShHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KHB0ciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4g
PSBtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgR1BSSW5mbzo6cmVnVDAsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOworICAgICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBtX2pp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJ
bW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKIAog
ICAgICAgICAgICAgaWYgY29uc3RleHByICh2YWxpZGF0ZURGR0RvZXNHQykgewogICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURvZXNHQygpKSB7CkBAIC0yMjE0LDcgKzIyMTQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICB9CiAK
ICAgICBpZiAobV9ibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKLSAgICAgICAgbV9qaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC0obV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lz
dGVyQ291bnQoKSAqIHNpemVvZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC0obV9ncmFwaC5mcmFtZVJlZ2lzdGVy
Q291bnQoKSAqIHNpemVvZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQuZW1p
dFNhdmVDYWxsZWVTYXZlcygpOwogICAgICAgICBtX2ppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVj
a1JlZ2lzdGVycygpOwogICAgICAgICAvLyBDb2RlQmxvY2sgaW4gdGhlIHN0YWNrIGlzIGFscmVh
ZHkgcmVwbGFjZWQgaW4gT1NSIGVudHJ5LgpAQCAtMjI0MCw3ICsyMjQwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVm
Q291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFk
IFNldExvY2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpOwotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFv
cGVyYW5kLmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1l
bnQoKSA+PSAwKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhb3BlcmFuZC5p
c0FyZ3VtZW50KCkgfHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0g
MCk7CiAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwob3BlcmFuZCwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpKTsKICAgICB9CiAK
QEAgLTIyODksOCArMjI4OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50
QmxvY2soKQogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCIsIChpbnQp
bV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAoIiwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSwgIikgYXQgSklUIG9mZnNldCAweCIsIG1faml0
LmRlYnVnT2Zmc2V0KCkpOwogCi0gICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2Vw
dGlvbkhhbmRsaW5nKCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkg
IT0gRG9lc05vdEV4aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAgICAgICAg
ICAgIG1faml0LmppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihtX2ppdC52bSgpKTsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSAmJiAobWF5RXhp
dChtX2dyYXBoLCBtX2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCB8fCBtX2N1cnJlbnROb2Rl
LT5pc1Rlcm1pbmFsKCkpKQorICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKHZtKCkpOwogCiAgICAgICAgIG1faml0LnBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigp
LmFwcGVuZEl0ZW0obV9qaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIG1fb3JpZ2luLnNl
bWFudGljKTsKIApAQCAtMjM1MCw3ICsyMzUwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcmd1bWVudFR5cGVzKCkKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBDb2RlT3JpZ2lu
KEJ5dGVjb2RlSW5kZXgoMCkpLCB0cnVlKTsKIAotICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1faml0
LmdyYXBoKCkubV9yb290VG9Bcmd1bWVudHMuZmluZChtX2ppdC5ncmFwaCgpLmJsb2NrKDApKS0+
dmFsdWU7CisgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5m
aW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBhcmd1bWVudHNbaV07CiAgICAgICAgIGlmICghbm9kZSkgewpAQCAtMjQyMiw5
ICsyNDIyLDkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgY2hlY2tBcmd1
bWVudFR5cGVzKCk7CiAgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
ICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4KTsKLSAgICAgICAgbV9i
bG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIG1fYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBjb21waWxlQ3VycmVudEJsb2Nr
KCk7CiAgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwpAQCAtMjQzMyw4ICsyNDMzLDggQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0
ZU9TUkVudHJpZXMoKQogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7
CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYmxvY2stPmlzT1NSVGFyZ2V0IHx8IGJsb2Nr
LT5pc0NhdGNoRW50cnlwb2ludCkgewpAQCAtMjQ0OCwxNCArMjQ0OCwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtP
U1JFbnRyaWVzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgdW5zaWduZWQgb3NyRW50
cnlJbmRleCA9IDA7Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0ICYmICFibG9jay0+
aXNDYXRjaEVudHJ5cG9pbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGJs
b2NrLT5pc0NhdGNoRW50cnlwb2ludCkgewotICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzVmVj
dG9yID0gbV9qaXQuZ3JhcGgoKS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKS0+dmFsdWU7
CisgICAgICAgICAgICBhdXRvJiBhcmd1bWVudHNWZWN0b3IgPSBtX2dyYXBoLm1fcm9vdFRvQXJn
dW1lbnRzLmZpbmQoYmxvY2spLT52YWx1ZTsKICAgICAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1h
dD4gYXJndW1lbnRGb3JtYXRzOwogICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYXJndW1lbnRzVmVjdG9yLnNpemUoKSk7CiAgICAgICAgICAgICBmb3Ig
KE5vZGUqIHNldEFyZ3VtZW50IDogYXJndW1lbnRzVmVjdG9yKSB7CkBAIC0yNDc0LDcgKzI0NzQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQogICAgIH0KIAogICAgIG1faml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBv
aW50cyhXVEZNb3ZlKG1faml0Lm1fb3NyRW50cnkpKTsKLSAgICBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5maW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoV1RGTW92ZShtX2ppdC5ncmFwaCgpLm1fY2F0
Y2hFbnRyeXBvaW50cykpOworICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0
Y2hFbnRyeXBvaW50cyhXVEZNb3ZlKG1fZ3JhcGgubV9jYXRjaEVudHJ5cG9pbnRzKSk7CiAKICAg
ICBBU1NFUlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKICAgICAK
QEAgLTI0OTUsNyArMjQ5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1Ry
YXBzKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHVudXNlZEdQUiA9IHVudXNlZC5ncHIoKTsKIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUcmFwSGFuZGxpbmcgPSBtX2ppdC5icmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sCi0gICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFk
ZHJlc3MobV9qaXQudm0oKS50cmFwcygpLnRyYXBCaXRzQWRkcmVzcygpKSwKKyAgICAgICAgSklU
Q29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyh2bSgpLnRyYXBzKCkudHJhcEJpdHNBZGRyZXNzKCkp
LAogICAgICAgICBUcnVzdGVkSW1tMzIoVk1UcmFwczo6QXN5bmNFdmVudHMpKTsKIAogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChuZWVkVHJhcEhhbmRsaW5nLCB0aGlzLCBv
cGVyYXRpb25IYW5kbGVUcmFwcywgdW51c2VkR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSkpOwpAQCAtMjUwNCw5ICsyNTA0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrVHJhcHMoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRp
Z3VvdXNQdXRCeVZhbChOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMiksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSkKICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMp
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CkBAIC0yNTczLDIyICsyNTczLDIyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlKQogewogICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKIAotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKIAogICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKICAgICBGUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5mcHIoKTsKIAogICAgIERGR19UWVBF
X0NIRUNLKAotICAgICAgICBKU1ZhbHVlUmVncygpLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDIpLCBTcGVjRnVsbFJlYWxOdW1iZXIsCisgICAgICAgIEpTVmFsdWVSZWdzKCksIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIFNwZWNGdWxsUmVhbE51bWJlciwKICAgICAgICAg
bV9qaXQuYnJhbmNoSWZOYU4odmFsdWVSZWcpKTsKIAogICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAogICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFs
QWxpYXMpIHsKQEAgLTI2NDcsMTAgKzI2NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURvdWJsZVB1dEJ5VmFsKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWwoTm9kZSogbm9kZSkKIHsKICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpOwotICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICBFZGdlIGNoaWxkMiA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAzKTsKKyAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOworICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAg
ICBFZGdlIGNoaWxkNCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAKICAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgpA
QCAtMjY2NiwxNCArMjY2NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWwoTm9kZSogbm9kZSkKICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgogICAgIGNhc2Ug
QXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgogI2VuZGlmCi0gICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgogICAgIGNh
c2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgogI2VuZGlmCiAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzogewotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkg
PT0gUHV0QnlWYWwgfHwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCwgbm9kZS0+b3AoKSk7
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZh
bCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgpKTsKICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkgfHwgKGNoaWxkMS51c2VL
aW5kKCkgIT0gQ2VsbFVzZSAmJiBjaGlsZDEudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkpIHsK
ICAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UgfHwgY2hpbGQxLnVz
ZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVz
ZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKQEAgLTI3NTUsNyArMjc1NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbChOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1Yklu
Zm8oKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgbnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5hZGRQdXRC
eVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTI5NDksNyArMjk0OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNj
b3BlZExhbWJkYTxzdGQ6CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xv
d1BhdGhDYWxsKAotICAgICAgICAgICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5n
bGVDaGFyYWN0ZXJTdHJpbmcsIHNjcmF0Y2hSZWcsICZ2bSwgc2NyYXRjaFJlZykpOworICAgICAg
ICAgICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcs
IHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW1QdHIoJnZtKSwgc2NyYXRjaFJlZykpOwogCiAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICBBU1NFUlQoZm9y
bWF0ID09IERhdGFGb3JtYXRKUyk7CkBAIC0yOTY5LDggKzI5NjksOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOgogICAgICAgICAgICAgLy8gb24gYSBzdHJpbmdQcm90b3R5cGVDaGFpbklzU2Fu
ZUNvbmN1cnJlbnRseSgpIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBwcm90b3R5cGVzIGhhdmUgbm8g
bmVnYXRpdmUKICAgICAgICAgICAgIC8vIGluZGV4ZWQgcHJvcGVydGllcyBlaXRoZXIuCiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4
Ci0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFu
c2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0
cnVjdHVyZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVU
cmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2dyYXBo
LnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVj
dHVyZSk7CiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2Fu
ZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAgICAgIG91dE9m
Qm91bmRzLCB0aGlzLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwpAQCAtMzUyNSwxMiAr
MzUyNSwxMiBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUQ29tcGls
ZXImIGppdCwgR1BSUmVnIHJlc3VsdCwgRlBSUmVnIHNvdQogICAgIHN0YXRpYyBjb25zdGV4cHIg
ZG91YmxlIHplcm8gPSAwOwogICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIGJ5dGVNYXggPSAy
NTU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgaGFsZiA9IDAuNTsKLSAgICBqaXQubG9h
ZERvdWJsZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigmemVybyksIHNjcmF0Y2gpOworICAg
IGppdC5sb2FkRG91YmxlKFNwZWN1bGF0aXZlSklUOjpUcnVzdGVkSW1tUHRyKCZ6ZXJvKSwgc2Ny
YXRjaCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdG9vU21hbGwgPSBqaXQuYnJhbmNoRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgc291
cmNlLCBzY3JhdGNoKTsKLSAgICBqaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cigmYnl0ZU1heCksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkRG91YmxlKFNwZWN1bGF0aXZl
SklUOjpUcnVzdGVkSW1tUHRyKCZieXRlTWF4KSwgc2NyYXRjaCk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgdG9vQmlnID0gaml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5BbmRPcmRlcmVkLCBzb3VyY2UsIHNjcmF0Y2gpOwogICAgIAotICAgIGppdC5s
b2FkRG91YmxlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZoYWxmKSwgc2NyYXRjaCk7Cisg
ICAgaml0LmxvYWREb3VibGUoU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHIoJmhhbGYpLCBz
Y3JhdGNoKTsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkganVzdCB1c2UgYSBm
bG9hdGluZyBwb2ludCByb3VuZCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzIwNTQKICAgICBqaXQuYWRkRG91YmxlKHNvdXJjZSwgc2NyYXRjaCk7CkBA
IC0zNTUzLDExICszNTUzLDExIEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpq
dW1wRm9yVHlwZWRBcnJheU91dE9mQm91bmRzKE5vZGUqIG5vZGUsIEdQUlJlCiB7CiAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKICAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVy
OjpKdW1wKCk7Ci0gICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2ppdC5ncmFwaCgpLnRy
eUdldEZvbGRhYmxlVmlldygKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1faml0LmdyYXBoKCku
Y2hpbGQobm9kZSwgMCkpLm1fdmFsdWUsIG5vZGUtPmFycmF5TW9kZSgpKTsKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdmlldyA9IG1fZ3JhcGgudHJ5R2V0Rm9sZGFibGVWaWV3KAorICAgICAgICBt
X3N0YXRlLmZvck5vZGUobV9ncmFwaC5jaGlsZChub2RlLCAwKSkubV92YWx1ZSwgbm9kZS0+YXJy
YXlNb2RlKCkpOwogICAgIGlmICh2aWV3KSB7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSB2aWV3
LT5sZW5ndGgoKTsKLSAgICAgICAgTm9kZSogaW5kZXhOb2RlID0gbV9qaXQuZ3JhcGgoKS5jaGls
ZChub2RlLCAxKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGluZGV4Tm9kZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgMSkubm9kZSgpOwogICAgICAgICBpZiAoaW5kZXhOb2RlLT5pc0FueUludENvbnN0
YW50KCkgJiYgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4Tm9kZS0+YXNBbnlJbnQoKSkgPCBs
ZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6Okp1bXAoKTsKICNpZiBVU0Uo
TEFSR0VfVFlQRURfQVJSQVlTKQpAQCAtMzg4Miw5ICszODgyLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogewogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAKLSAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0zOTA0LDcgKzM5
MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgcHJvcGVydHlUYWcsIHZhbHVlVGFnLAogI2VuZGlmCi0gICAgICAgIG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMiksIHNsb3dQYXRoQ2FzZXMsIGlzQ2xhbXBlZCh0eXBlKSk7
CisgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIHNsb3dQYXRoQ2FzZXMsIGlz
Q2xhbXBlZCh0eXBlKSk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQwMDIsMTAgKzQwMDIsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXAKIHsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlT3AodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0g
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KSk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKIAogICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlRl
bXBvcmFyeSBncFNjcmF0Y2godGhpcyk7CkBAIC00MTA5LDE0ICs0MTA5LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBo
KCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRQcml2YXRlTmFtZUJ5VmFsKE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHByb3BlcnR5KQogewotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgbm9kZS0+b3AoKSA9PSBHZXRQcml2YXRlTmFtZSk7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBHZXRQcml2
YXRlTmFtZSk7CisgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBtX2dyYXBoLmNoaWxkKG5v
ZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpOwogCiAgICAgc3RkOjpvcHRpb25hbDxHUFJU
ZW1wb3Jhcnk+IHN0dWJJbmZvOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKQEAgLTQxNTYsNyArNDE1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQ
cml2YXRlTmFtZUJ5VmFsKE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwKLSAgICAgICAgICAgIHJlc3Vs
dC5yZWdzKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksCisgICAgICAgICAgICBy
ZXN1bHQucmVncygpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLAogICAgICAgICAgICAgYmFzZSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHku
cGF5bG9hZEdQUigpKSk7CiAgICAgfTsKIApAQCAtNDIyMiwyMiArNDIyMiwyMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQg
dXNlIGtpbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiBub2RlKQogewotICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAwKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRo
aXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwogCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJl
ZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyBhcmczUmVncyA9IGFyZzMu
anNWYWx1ZVJlZ3MoKTsKIAotICAgIHNwZWN1bGF0ZVN0cmluZyhtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKKyAgICBzcGVjdWxhdGVTdHJpbmcobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwog
ICAgIGNhbGxPcGVyYXRpb24oCkBAIC00MjUyLDE1ICs0MjUyLDE1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5nKE5vZGUqIG5vZGUpCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKE5vZGUq
IG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcy
KHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZzModGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7Cisg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3By
KCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgIEpTVmFsdWVSZWdzIGFy
ZzNSZWdzID0gYXJnMy5qc1ZhbHVlUmVncygpOwogCi0gICAgc3BlY3VsYXRlU3ltYm9sKG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOworICAgIHNwZWN1bGF0ZVN5
bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CiAgICAgY2FsbE9wZXJhdGlvbigKQEAgLTQzNTksNyArNDM1OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmFtZShOb2RlKiBub2RlKQogICAg
IH0gZWxzZSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sCi0gICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgQ0NhbGxIZWxwZXJz
OjpDZWxsVmFsdWUocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIENDYWxsSGVscGVy
czo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQ
UiksIHZhbHVlUmVncywgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIG51bGxwdHIpOwog
ICAgIH0KIAogICAgIG1faml0LmFkZFB1dEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAt
NDQzNyw3ICs0NDM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrUHJpdmF0
ZUJyYW5kKE5vZGUqIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIE5vUmVzdWx0LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5k
R1BSKSk7CisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBiYXNlUmVncywgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYnJhbmRHUFIpKTsK
ICAgICB9CiAKICAgICBtX2ppdC5hZGRQcml2YXRlQnJhbmRBY2Nlc3MoZ2VuLCBzbG93UGF0aC5n
ZXQoKSk7CkBAIC00NDg1LDcgKzQ0ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U2V0UHJpdmF0ZUJyYW5kKE5vZGUqIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplLCBOb1Jlc3VsdCwKLSAgICAgICAgICAgIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIp
LCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShicmFuZEdQUikpOworICAgICAgICAgICAgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpD
ZWxsVmFsdWUoYmFzZUdQUiksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BSKSk7CiAg
ICAgfQogCiAgICAgbV9qaXQuYWRkUHJpdmF0ZUJyYW5kQWNjZXNzKGdlbiwgc2xvd1BhdGguZ2V0
KCkpOwpAQCAtNDYyNCw3ICs0NjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
c3RhbmNlT2ZGb3JDZWxscyhOb2RlKiBub2RlLCBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MKICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3R1YkluZm9HUFIsIHZhbHVlUmVncywgcHJv
dG90eXBlUmVncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZ2VuLnN0dWJJbmZv
KCksIHZhbHVlUmVncywgcHJvdG90eXBlUmVncyk7CisgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHZhbHVlUmVncywg
cHJvdG90eXBlUmVncyk7CiAgICAgfQogICAgIAogICAgIG1faml0LmFkZEluc3RhbmNlT2YoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7CkBAIC00NjYyLDggKzQ2NjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSW5zdGFuY2VPZihOb2RlKiBub2RlKQogICAgIH0KICNlbmRpZgogICAgIAot
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpOwotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
bm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwor
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UpOwogICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHVi
SW5mbzsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBA
IC00Nzc2LDcgKzQ3NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZE9yQW55
QmlnSW50Qml0T3AoTm9kZSogbm9kZSkKICAgICBFZGdlJiBsZWZ0Q2hpbGQgPSBub2RlLT5jaGls
ZDEoKTsKICAgICBFZGdlJiByaWdodENoaWxkID0gbm9kZS0+Y2hpbGQyKCk7CiAKLSAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVk
VXNlKSB8fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoQW55QmlnSW50VXNlKSB8fCBub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoSGVhcEJpZ0ludFVzZSkgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJpZ0lu
dDMyVXNlKSk7CisgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoVW50eXBlZFVzZSkgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEFueUJpZ0ludFVzZSkg
fHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEhlYXBCaWdJbnRVc2UpIHx8IG5vZGUtPmlzQmluYXJ5
VXNlS2luZChCaWdJbnQzMlVzZSkpOwogCiAgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobGVmdENo
aWxkLm5vZGUoKSkgfHwgaXNLbm93bk5vdE51bWJlcihyaWdodENoaWxkLm5vZGUoKSkpIHsKICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgbGVmdCh0aGlzLCBsZWZ0Q2hpbGQsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CkBAIC01MjYxLDcgKzUyNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKQEAgLTUzNDUsNyArNTM0NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2RlKiBub2RlKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBKSVRT
dWJJQyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOwpAQCAtNTYwOCw3ICs1NjA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVRvT2JqZWN0T3JDYWxsT2JqZWN0Q29uc3RydWN0b3IoTm9kZSogbm9kZSkKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGVycm9yTWVzc2FnZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCkgIT0gVUlOVDMyX01BWCkKICAgICAgICAgICAgIGVycm9yTWVz
c2FnZSA9IGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKTsKLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uVG9PYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVl
UmVncywgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblRvT2JqZWN0LCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIoZXJyb3JN
ZXNzYWdlKSkpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25DYWxsT2JqZWN0Q29uc3RydWN0b3Is
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihub2RlLT5jZWxsT3BlcmFuZCgpKSwgdmFsdWVSZWdz
KSk7CiAKQEAgLTU3NDksNyArNTc0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aEFicyhOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgREZH
X0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKKyAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwg
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5q
c1ZhbHVlUmVncygpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNTkyNyw3ICs1OTI3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5vZGUqIG5vZGUpCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUoTm9kZSogbm9kZSkKIHsKICAg
ICAvLyBGSVhNRTogYWRkIGEgZmFzdCBwYXRoLCBhdCBsZWFzdCBmb3IgQmlnSW50MzIsIGJ1dCBw
cm9iYWJseSBhbHNvIGZvciBIZWFwQmlnSW50IGhlcmUuCi0gICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9ncmFw
aC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7
CiAgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKQEAgLTYxNzEsNyArNjE3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZU11bChOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5q
aXRDb2RlKCktPmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwpAQCAtNjY0NCw3ICs2
NjQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5vZGUqIG5vZGUp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCks
IG5vZGUsIG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJp
Z0ludDMyVXNlLCBub2RlLT5iaW5hcnlVc2VLaW5kKCkpOworICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Ymlu
YXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0g
QmlnSW50MzJVc2UsIG5vZGUtPmJpbmFyeVVzZUtpbmQoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIGxlZnRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBKU1Zh
bHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKICAgICBzcGVjdWxhdGUobm9kZSwgbGVmdENoaWxkKTsKQEAgLTcwMzIsNyArNzAzMiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKE5vZGUqIG5vZGUpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAK
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
SlNWYWx1ZVJlZ3MgYXJndW1lbnRSZWdzID0gYXJndW1lbnQuanNWYWx1ZVJlZ3MoKTsKQEAgLTcx
NjQsNyArNzE2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1pbk1heChO
b2RlKiBub2RlKQogICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAg
LTcxNzcsNyArNzE3Nyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjb21waWxlQXJp
dGhQb3dJbnRlZ2VyRmFzdFBhdGgoSklUQ29tcGlsZXImIGFzc2VtYmxlCiAgICAgc2tpcEZhc3RQ
YXRoLmFwcGVuZChhc3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB5T3Bl
cmFuZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtYXhFeHBvbmVudEZvckludGVnZXJN
YXRoUG93KSkpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgb25lQ29uc3RhbnQgPSAx
LjA7Ci0gICAgYXNzZW1ibGVyLmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoJm9uZUNvbnN0YW50KSwgcmVzdWx0KTsKKyAgICBhc3NlbWJsZXIubG9hZERvdWJsZShTcGVj
dWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmb25lQ29uc3RhbnQpLCByZXN1bHQpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHN0YXJ0TG9vcChhc3NlbWJsZXIubGFiZWwoKSk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhwb25lbnRJc0V2ZW4gPSBhc3NlbWJsZXIuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB5T3BlcmFuZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSk7CkBAIC03MjE5LDcgKzcyMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVQb3coTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09
IFVudHlwZWRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBu
b2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UsIG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSk7CisgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5iaW5hcnlVc2VLaW5kKCkg
PT0gVW50eXBlZFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55QmlnSW50VXNlIHx8
IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSwgbm9kZS0+YmluYXJ5VXNlS2lu
ZCgpKTsKIAogICAgIEpTVmFsdWVPcGVyYW5kIGxlZnQodGhpcywgbGVmdENoaWxkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEpTVmFsdWVPcGVyYW5kIHJpZ2h0KHRoaXMsIHJpZ2h0
Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CkBAIC04MjM2LDcgKzgyMzYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3RyaW5nKE5vZGUqIG5vZGUsIGJv
b2wgaW52ZXJ0KQogICAgIEdQUlRlbXBvcmFyeSBlcSh0aGlzKTsKICAgICBHUFJSZWcgZXFHUFIg
PSBlcS5ncHIoKTsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9qaXQuZ3JhcGgoKSwganNFbXB0eVN0cmluZyh2bSgpKSksIGVxR1BSKTsKKyAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0o
KSkpLCBlcUdQUik7CiAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBDQ2FsbEhlbHBlcnM6
OkVxdWFsIDogQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc3RyR1BSLCBlcUdQUiwgZXFHUFIpOwog
ICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQoZXFHUFIsIG5vZGUpOwogfQpAQCAtODI1Myw3ICs4
MjUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhblN0cmluZ09yT3Ro
ZXIoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAg
IHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCksICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5n
LCBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhjZWxsR1BSKSk7CiAKLSAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0o
KSkpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0oKSkpLCB0ZW1wR1BSKTsKICAgICBtX2ppdC5jb21w
YXJlUHRyKGludmVydCA/IENDYWxsSGVscGVyczo6RXF1YWwgOiBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBjZWxsR1BSLCB0ZW1wR1BSLCB0ZW1wR1BSKTsKICAgICBhdXRvIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAKQEAgLTgyNzQsNyArODI3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRT
dHJpbmdCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jCiAK
ICAgICBzcGVjdWxhdGVTdHJpbmcobm9kZVVzZSwgc3RyR1BSKTsKIAotICAgIGJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6OkVxdWFsLCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
aml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNo
UHRyKENDYWxsSGVscGVyczo6RXF1YWwsIHN0ckdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRh
a2VuKTsKIAogICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwpAQCAtODI5MSw3ICs4MjkxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ09yT3RoZXJCcmFuY2goRWRnZSBub2Rl
VXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmEKICAgICBHUFJSZWcgY2VsbEdQUiA9IHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCk7CiAgICAgREZHX1RZUEVfQ0hFQ0sodmFsdWVSZWdzLCBub2RlVXNlLCAo
flNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoY2Vs
bEdQUikpOwogCi0gICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGNlbGxHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0o
KSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGNlbGxH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0o
KSkpLCBub3RUYWtlbik7CiAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKIAogICAgIG5vdENl
bGwubGluaygmbV9qaXQpOwpAQCAtODMzMSw3ICs4MzMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJl
ZywgYm8KICAgICBpZiAoIUdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9y
YmlkZGVuKCkpIHsKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgaWYgKHZt
LnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS53YXRjaHBvaW50cygpLmFkZExhemlseSh2bS5wcmltaXRpdmVHaWdhY2Fn
ZUVuYWJsZWQoKSk7CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHZtLnByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICB1bnRhZ0FycmF5UHRyKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC04NTc1LDcgKzg1
NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsVGhpcyhOb2RlKiBu
b2RlKQogewogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIGF1dG8qIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CiAgICAgbV9qaXQubG9hZFB0cihnbG9iYWxPYmplY3QtPmFkZHJlc3NPZkdsb2JhbFRoaXMo
KSwgcmVzdWx0R1BSKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC04
NzM4LDcgKzg3MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25D
b21tb24oR1BSUmVnIHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdAogICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1Bh
dGgsIHNpemUpOwogICAgIAogICAgIG1faml0LnN0b3JlUHRyKHNjb3BlR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSk7
Ci0gICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwgZXhlY3V0YWJsZSksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSk7CisgICAgbV9qaXQuc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
T3JSYXJlRGF0YSgpKSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogfQogCkBAIC04
NzU5LDIxICs4NzU5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlv
bihOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIGlmIChu
b2RlVHlwZSA9PSBOZXdHZW5lcmF0b3JGdW5jdGlvbikKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHNjb3Bl
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRhYmxlKSk7CiAg
ICAgICAgIGVsc2UgaWYgKG5vZGVUeXBlID09IE5ld0FzeW5jRnVuY3Rpb24pCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZt
KCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwg
c2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUp
KTsKICAgICAgICAgZWxzZSBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
bikKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgcmVzdWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsICZ2bSgp
LCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoCisgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKAog
ICAgICAgICBbJl0gKCkgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZVR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1
cmUoKTsKQEAgLTg4MDEsMjUgKzg4MDEsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqIG5vZGUpCiAgICAgaWYgKG5vZGVUeXBlID09IE5ld0Z1bmN0aW9u
KSB7CiAgICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbjxKU0Z1bmN0aW9uPihyZXN1bHRH
UFIsIHN0cnVjdHVyZSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY29wZUdQUiwgc2xvd1Bh
dGgsIEpTRnVuY3Rpb246OmFsbG9jYXRpb25TaXplKDApLCBleGVjdXRhYmxlKTsKICAgICAgICAg
ICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgs
IHRoaXMsIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludCwgcmVzdWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpKTsKKyAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRhYmxlKSkpOwogICAgIH0KIAogICAgIGlmIChub2Rl
VHlwZSA9PSBOZXdHZW5lcmF0b3JGdW5jdGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rp
b25Db21tb248SlNHZW5lcmF0b3JGdW5jdGlvbj4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0
Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NvcGVHUFIsIHNsb3dQYXRoLCBKU0dlbmVyYXRvckZ1bmN0
aW9uOjphbGxvY2F0aW9uU2l6ZSgwKSwgZXhlY3V0YWJsZSk7CiAKLSAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3Vs
dEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7CisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpKTsKICAgICB9CiAKICAgICBpZiAobm9kZVR5cGUg
PT0gTmV3QXN5bmNGdW5jdGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248
SlNBc3luY0Z1bmN0aW9uPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzY29wZUdQUiwgc2xvd1BhdGgsIEpTQXN5bmNGdW5jdGlvbjo6YWxsb2NhdGlvblNp
emUoMCksIGV4ZWN1dGFibGUpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbldpdGhJbnZh
bGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BS
LCBleGVjdXRhYmxlKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbldpdGhJbnZhbGlkYXRl
ZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSks
IHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRhYmxl
KSkpOwogICAgIH0KIAogICAgIGlmIChub2RlVHlwZSA9PSBOZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uKSB7CiAgICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbjxKU0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIs
IHNjb3BlR1BSLCBzbG93UGF0aCwgSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uOjphbGxvY2F0aW9u
U2l6ZSgwKSwgZXhlY3V0YWJsZSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRH
UFIsICZ2bSgpLCBzY29wZUdQUiwgZXhlY3V0YWJsZSkpOworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpKTsKICAgICB9CiAgICAgCiAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtODk2NCw3ICs4OTY0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIFN5bWJv
bFRhYmxlKiB0YWJsZSA9IG5vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKLSAgICBS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IoCisgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKAogICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CkBAIC04OTg2LDEwICs4OTg2LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25E
aXJlY3QsCi0gICAgICAgICAgICByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BS
LCB0YWJsZSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVl
KSkpOworICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0
dXJlLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgdGFibGUp
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CiAj
ZWxzZQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJl
Y3QsCi0gICAgICAgICAgICByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0
YWJsZSwgaW5pdGlhbGl6YXRpb25SZWdzKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIHRhYmxlKSwgaW5pdGlhbGl6YXRpb25SZWdzKTsKICNlbmRpZgogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CkBAIC05MDM1LDExICs5MDM1LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3Vs
dEdQUiwgJnZtKCksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIHRhYmxlLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSkpOworICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIHRhYmxlKSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShp
bml0aWFsaXphdGlvblZhbHVlKSkpKTsKICNlbHNlCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUs
IHNjb3BlR1BSLCB0YWJsZSwgaW5pdGlhbGl6YXRpb25SZWdzKSk7CisgICAgICAgICAgICBzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgcmVzdWx0R1BSLCBU
cnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgdGFibGUpLCBpbml0aWFsaXphdGlvblJlZ3MpKTsKICNlbmRp
ZgogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtOTA2MSw3ICs5MDYxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhzY3Jh
dGNoMUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBtaW5DYXBhY2l0
eSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+bnVtUGFyYW1ldGVycygpIC0gMTsKKyAgICB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9IG1f
Z3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bnVtUGFy
YW1ldGVycygpIC0gMTsKICAgICAgICAgCiAgICAgdW5zaWduZWQga25vd25MZW5ndGg7CiAgICAg
Ym9vbCBsZW5ndGhJc0tub3duOyAvLyBpZiBmYWxzZSwgbGVuZ3RoR1BSIHdpbGwgaGF2ZSB0aGUg
bGVuZ3RoLgpAQCAtOTA4NCw3ICs5MDg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPQotICAgICAgICBtX2ppdC5ncmFwaCgpLnJl
Z2lzdGVyU3RydWN0dXJlKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIAogICAgIC8v
IFVzZSBhIGRpZmZlcmVudCBzdHJhdGVneSBmb3IgYWxsb2NhdGluZyB0aGUgb2JqZWN0IGRlcGVu
ZGluZyBvbiB3aGV0aGVyIHdlIGtub3cgaXRzCiAgICAgLy8gc2l6ZSBzdGF0aWNhbGx5LgpAQCAt
OTEzNCw3ICs5MTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGlmIChsZW5ndGhJc0tub3duKSB7CiAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMs
IHJlc3VsdEdQUiwgJnZtKCksIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAga25vd25MZW5ndGgsIG1p
bkNhcGFjaXR5KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBtYWtl
VW5pcXVlPENhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcj4oCkBAIC05
MTUxLDcgKzkxNTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0
QXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKAogICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKAotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJl
Y292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAog
ICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAt
OTI2OSw3ICs5MjY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIG1faml0LnNldHVwQXJndW1lbnQoCiAgICAgICAg
IDEsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xv
YmFsT2JqZWN0LT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0LT5zY29wZWRB
cmd1bWVudHNTdHJ1Y3R1cmUoKSksCiAgICAgICAgICAgICAgICAgZGVzdEdQUik7CiAgICAgICAg
IH0pOwogICAgIG1faml0LnNldHVwQXJndW1lbnQoMCwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVj
dCksIGRlc3RHUFIpOyB9KTsKQEAgLTkyOTksNyArOTI5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICAgICAgMSwg
WyZdIChHUFJSZWcgZGVzdEdQUikgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAg
ICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSks
CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1l
bnRzU3RydWN0dXJlKCkpLAogICAgICAgICAgICAgICAgIGRlc3RHUFIpOwogICAgICAgICB9KTsK
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBk
ZXN0R1BSKTsgfSk7CkBAIC05MzM2LDcgKzkzMzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlUmVzdChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlLT5vcCgpID09
IENyZWF0ZVJlc3QpOwogCi0gICAgaWYgKG1faml0LmdyYXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FC
YWRUaW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZp
bmdBQmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGFycmF5TGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IGFycmF5UmVzdWx0KHRoaXMpOwogCkBAIC05MzQ4LDcgKzkzNDgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUmVzdChOb2RlKiBub2RlKQogICAgICAgICAv
LyBhbHdheXMgYmUgYm91bmRlZCBieSBzdGFjayBzaXplLiBSZWFsaXN0aWNhbGx5LCB3ZSB3b24n
dCBiZSBhYmxlIHRvIHB1c2ggZW5vdWdoCiAgICAgICAgIC8vIGFyZ3VtZW50cyB0byBoYXZlIGFy
cmF5TGVuZ3RoIGV4Y2VlZCBNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RILgog
ICAgICAgICBib29sIHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VB
cnJheXMgPSBmYWxzZTsKLSAgICAgICAgY29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZSht
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcnJh
eVJlc3VsdEdQUiwgYXJyYXlMZW5ndGhHUFIsIEFycmF5V2l0aENvbnRpZ3VvdXMsIHNob3VsZEFs
bG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJheXMpOworICAgICAgICBjb21w
aWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksIGFycmF5UmVzdWx0R1BSLCBhcnJheUxlbmd0aEdQUiwgQXJyYXlX
aXRoQ29udGlndW91cywgc2hvdWxkQWxsb3dGb3JBcnJheVN0b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJn
ZUFycmF5cyk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOwog
ICAgICAgICBHUFJSZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsK
QEAgLTk0MDksNyArOTQwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQo
Tm9kZSogbm9kZSkKICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNl
KQogICAgICAgICBzcGVjdWxhdGVBcnJheShub2RlLT5jaGlsZDEoKSwgYXJndW1lbnQpOwogCi0g
ICAgaWYgKG1faml0LmdyYXBoKCkuY2FuRG9GYXN0U3ByZWFkKG5vZGUsIG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKSB7CisgICAgaWYgKG1fZ3JhcGguY2FuRG9GYXN0U3ByZWFkKG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOwpAQCAtOTQ0Nyw3ICs5NDQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5sc2hpZnQzMihU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0Y2gxR1BS
KTsKIAotICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxKU0ltbXV0
YWJsZUJ1dHRlcmZseT4odm0oKSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5tX3ZtLmltbXV0YWJsZUJ1dHRlcmZs
eVN0cnVjdHVyZXNbYXJyYXlJbmRleEZyb21JbmRleGluZ1R5cGUoQ29weU9uV3JpdGVBcnJheVdp
dGhDb250aWd1b3VzKSAtIE51bWJlck9mSW5kZXhpbmdTaGFwZXNdLmdldCgpKSksIHNjcmF0Y2gx
R1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQu
ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGw8SlNJbW11dGFibGVCdXR0ZXJmbHk+KHZtKCks
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3Jh
cGgubV92bS5pbW11dGFibGVCdXR0ZXJmbHlTdHJ1Y3R1cmVzW2FycmF5SW5kZXhGcm9tSW5kZXhp
bmdUeXBlKENvcHlPbldyaXRlQXJyYXlXaXRoQ29udGlndW91cykgLSBOdW1iZXJPZkluZGV4aW5n
U2hhcGVzXS5nZXQoKSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBz
bG93UGF0aCk7CiAgICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZlZl
Y3Rvckxlbmd0aCgpKSk7CiAKQEAgLTk1MTQsOCArOTUxNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJl
Z2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBo
LnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgaWYgKCFn
bG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5v
ZGUtPm51bUNoaWxkcmVuKCk7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aEhpbnQgPSBu
b2RlLT52ZWN0b3JMZW5ndGhIaW50KCk7CkBAIC05NTI0LDcgKzk1MjQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkoTm9kZSogbm9kZSkKICAgICAgICAgLy8gQmVjYXVz
ZSB3ZSBmaXJzdCBzcGVjdWxhdGUgb24gYWxsIG9mIHRoZSBjaGlsZHJlbiBoZXJlLCB3ZSBjYW4g
bmV2ZXIgZXhpdCBhZnRlciBjcmVhdGluZwogICAgICAgICAvLyB1bmluaXRpYWxpemVkIGNvbnRp
Z3VvdXMgSlNBcnJheSwgd2hpY2ggZW5zdXJlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgcHJvZHVjZSBh
IGhhbGYtYmFrZWQgSlNBcnJheS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXgg
PSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkK
LSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIG9wZXJhbmRJbmRleCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgb3BlcmFuZEluZGV4KSk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC05
NTQwLDcgKzk1NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkoTm9k
ZSogbm9kZSkKICAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOwogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytvcGVyYW5kSW5kZXgpIHsKLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCBvcGVyYW5kSW5kZXgpOworICAgICAgICAgICAgRWRnZSB1c2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCk7CiAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19U
WVBFUzoKQEAgLTk1NzksNyArOTU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVO
ZXdBcnJheShOb2RlKiBub2RlKQogICAgIGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewogICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSwg
cmVzdWx0LmdwcigpLCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBzdHJ1Y3R1cmUpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBj
ZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1OTQs
NyArOTU5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2RlKiBu
b2RlKQogICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGluZyB0eXBl
IGlzIG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMKICAgICAgICAgLy8gcHJvYmFibHkg
c29tZXRoaW5nIGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0
IGFsbCB0aGUKICAgICAgICAgLy8gdGhpbmdzLCBidXQgYXQgbGVhc3Qgd2UncmUgZ29pbmcgdG8g
YmUgc291bmQuCi0gICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAgICAgICBFZGdlIHVzZSA9
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4
XTsKICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lO
REVYSU5HX1RZUEVTOgpAQCAtOTY0Myw4ICs5NjQzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKIAogICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0FycmF5
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9i
amVjdCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdU
eXBlKCkpKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2Rl
LT5udW1DaGlsZHJlbigpKSk7CisgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwKKyAgICAgICAg
VHJ1c3RlZEltbVB0cihidWZmZXIpLCBzaXplX3Qobm9kZS0+bnVtQ2hpbGRyZW4oKSkpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTk2NTMsMTcgKzk2NTMsMTcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiB7CiAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaWYgKG1faml0LmdyYXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FCYWRU
aW1lV2F0Y2hwb2ludChub2RlKSkgeworICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdB
QmFkVGltZVdhdGNocG9pbnQobm9kZSkpIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgICAg
ICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwogCiAgICAgICAgIGlm
IChub2RlLT5udW1DaGlsZHJlbigpID09IDEgJiYgYml0VmVjdG9yLT5nZXQoMCkpIHsKLSAgICAg
ICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAg
ICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGltbXV0YWJsZUJ1dHRlcmZseSh0aGlzLCB1c2Up
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBidXR0ZXJmbHkodGhpcyk7CkBAIC05Njc2LDcgKzk2NzYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCi0gICAgICAgICAgICBSZWdp
c3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKENv
cHlPbldyaXRlQXJyYXlXaXRoQ29udGlndW91cykpOworICAgICAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShDb3B5T25Xcml0ZUFycmF5
V2l0aENvbnRpZ3VvdXMpKTsKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKIApAQCAtOTY4NSw3ICs5Njg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBlbWl0
QWxsb2NhdGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgYnV0dGVyZmx5R1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7
CiAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1
Y3R1cmUsIGltbXV0YWJsZUJ1dHRlcmZseUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlC
dWZmZXIsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSwgaW1tdXRh
YmxlQnV0dGVyZmx5R1BSKSk7CiAKICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk3MDQsNyArOTcwNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9kZSogbm9kZSkKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewotICAgICAgICAg
ICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSk7
CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBpKTsKICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgaW1tdXRhYmxl
QnV0dGVyZmx5KHRoaXMsIHVzZSk7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBpbW11dGFi
bGVCdXR0ZXJmbHlHUFIgPSBpbW11dGFibGVCdXR0ZXJmbHkuZ3ByKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIG51bGxwdHIs
IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoaW1tdXRhYmxlQnV0dGVyZmx5R1BSLCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIGxlbmd0aEdQUikpOwpAQCAtOTczMSw3ICs5NzMxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKiBu
b2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewot
ICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkp
OworICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpOwog
ICAgICAgICAgICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CiAgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgaW1tdXRhYmxlQnV0dGVyZmx5KHRoaXMsIHVzZSk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIGltbXV0YWJsZUJ1dHRlcmZseUdQUiA9IGltbXV0YWJsZUJ1dHRlcmZs
eS5ncHIoKTsKQEAgLTk3NzksNyArOTc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVOZXdBcnJheVdpdGhTcHJlYWQoTm9kZSogbm9kZSkKIAogICAgIEJpdFZlY3RvciogYml0VmVj
dG9yID0gbm9kZS0+Yml0VmVjdG9yKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewotICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBpXTsKKyAgICAgICAgRWRn
ZSB1c2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgaV07
CiAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgaW1tdXRhYmxlQnV0dGVyZmx5KHRoaXMsIHVzZSk7CiAgICAgICAgICAgICBH
UFJSZWcgaW1tdXRhYmxlQnV0dGVyZmx5R1BSID0gaW1tdXRhYmxlQnV0dGVyZmx5LmdwcigpOwpA
QCAtOTgwMiw3ICs5ODAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5
V2l0aFNwcmVhZChOb2RlKiBub2RlKQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTcHJlYWRTbG93LCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJ1ZmZlciwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTcHJlYWRTbG93LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIGdsb2JhbE9iamVjdCksIFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKQEAgLTk4NzUsMTAgKzk4NzUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFycmF5U2xpY2UoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBBcnJheVNsaWNlKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0g
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxKSk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPm51bUNoaWxkcmVuKCkg
LSAxKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC05ODk0LDE3ICs5ODk0LDE3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogCiAgICAgICAgIGlmIChub2Rl
LT5udW1DaGlsZHJlbigpID09IDQpCi0gICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4
KG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgbGVuZ3Ro
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSwgc3RkOjpudWxsb3B0LCBsZW5ndGhHUFIsIHRlbXBHUFIp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGxlbmd0aEdQUiwgdGVtcEdQ
Uik7CiAKLSAgICAgICAgaWYgKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSktPmlz
SW50MzJDb25zdGFudCgpICYmIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSktPmFz
SW50MzIoKSA9PSAwKSB7CisgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LT5pc0ludDMyQ29uc3RhbnQoKSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5hc0lu
dDMyKCkgPT0gMCkgewogICAgICAgICAgICAgLy8gRG8gbm90aGluZyBmb3IgYXJyYXkuc2xpY2Uo
MCwgZW5kKSBvciBhcnJheS5zbGljZSgwKSBjYXNlcy4KICAgICAgICAgICAgIC8vIGB0ZW1wR1BS
YCBhbHJlYWR5IHBvaW50cyB0byB0aGUgc2l6ZSBvZiBhIG5ld2x5IGNyZWF0ZWQgYXJyYXkuCiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcFN0YXJ0SW5kZXgo
dGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc3RhcnRHUFIgPSB0ZW1wU3RhcnRJbmRleC5ncHIo
KTsKLSAgICAgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAxKSwgc3RkOjpudWxsb3B0LCBsZW5ndGhHUFIsIHN0YXJ0R1BSKTsKKyAg
ICAgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSwgc3RkOjpudWxsb3B0LCBsZW5ndGhHUFIsIHN0YXJ0R1BSKTsKIAogICAgICAgICAgICAg
YXV0byB0b29CaWcgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0YXJ0
R1BSLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKHN0YXJ0R1BSLCB0ZW1wR1BS
KTsgLy8gdGhlIHNpemUgb2YgdGhlIGFycmF5IHdlJ2xsIG1ha2UuCkBAIC05OTIyLDcgKzk5MjIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShOb2RlKiBub2RlKQog
ICAgIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoZSBzb3VyY2UgYXJyYXkgYWxpdmUg
YXQgbGVhc3QgdW50aWwgYWZ0ZXIgd2UncmUgZG9uZQogICAgICAgICAvLyB3aXRoIGFueXRoaW5n
IHRoYXQgY2FuIEdDIChlLmcuIGFsbG9jYXRpbmcgdGhlIHJlc3VsdCBhcnJheSBiZWxvdykuCi0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAKICAgICAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbC5ncHIoKSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB0ZW1wVmFsdWUpOwogICAgICAgICAvLyBXZSBjYW4gaWdub3JlIHRo
ZSB3cml0YWJpbGl0eSBvZiB0aGUgY2VsbCBzaW5jZSB3ZSB3b24ndCB3cml0ZSB0byB0aGUgc291
cmNlLgpAQCAtOTk0OCwxNyArOTk0OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJyYXlTbGljZShOb2RlKiBub2RlKQogICAgICAgICAvLyB0byBlbnN1cmUgdGhlIGluY29taW5n
IGFycmF5IGlzIG9uZSB0byBiZSBvbmUgb2YgdGhlIG9yaWdpbmFsIGFycmF5IHN0cnVjdHVyZXMK
ICAgICAgICAgLy8gd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbmRleGluZyBzaGFwZXM6IElu
dDMyLCBDb250aWd1b3VzLCBEb3VibGUuIFRoZXJlZm9yZSwKICAgICAgICAgLy8gd2UncmUgYSBk
b3VibGUgYXJyYXkgaGVyZS4KLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0
LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoRG91YmxlKSkpLCB0ZW1wVmFs
dWUpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhEb3VibGUpKSksIHRlbXBWYWx1ZSk7CiAgICAgICAgIGVtaXRN
b3ZlRW1wdHlWYWx1ZShqc05hTigpKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKIAogICAgICAgICBpc0NvbnRpZ3VvdXMubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhDb250aWd1b3VzKSkpLCB0ZW1wVmFsdWUpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3Vz
KSkpLCB0ZW1wVmFsdWUpOwogICAgICAgICBlbWl0TW92ZUVtcHR5VmFsdWUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAgICBpc0ludDMyLmxp
bmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoSW50MzIpKSksIHRlbXBWYWx1ZSk7Cisg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKEFycmF5V2l0aEludDMyKSkpLCB0ZW1wVmFsdWUpOwogICAgICAgICBlbWl0TW92ZUVtcHR5
VmFsdWUoSlNWYWx1ZSgpKTsKIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTk5OTQs
MTAgKzk5OTQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U2xpY2UoTm9k
ZSogbm9kZSkKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSwgdGVtcFZhbHVlKTsKICAgICAgICAgaWYgKG5vZGUtPm51bUNoaWxkcmVuKCkgPT0gNCkKLSAg
ICAgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAyKSwgc3RkOjpudWxsb3B0LCB0ZW1wVmFsdWUsIHRlbXBHUFIpOworICAgICAgICAg
ICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRleChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBz
dGQ6Om51bGxvcHQsIHRlbXBWYWx1ZSwgdGVtcEdQUik7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1faml0Lm1vdmUodGVtcFZhbHVlLCB0ZW1wR1BSKTsKLSAgICAgICAgZW1pdFBvcHVsYXRl
U2xpY2VJbmRleChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBzdGQ6Om51bGxv
cHQsIHRlbXBWYWx1ZSwgbG9hZEluZGV4KTsKKyAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRl
eChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBzdGQ6Om51bGxvcHQsIHRlbXBWYWx1ZSwg
bG9hZEluZGV4KTsKICAgICB9CiAKICAgICBHUFJUZW1wb3JhcnkgdGVtcDUodGhpcyk7CkBAIC0x
MDA0MCw3ICsxMDA0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheUluZGV4
T2YoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcnJheUluZGV4T2Yp
OwogCi0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIG5vZGUtPm51bUNoaWxkcmVuKCkgPT0gMyA/IDIgOiAzKSk7CisgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUt
Pm51bUNoaWxkcmVuKCkgPT0gMyA/IDIgOiAzKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGluZGV4KHRo
aXMpOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wTGVuZ3RoKHRoaXMpOwogCkBAIC0xMDA1MSwxMSAr
MTAwNTEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5SW5kZXhPZihOb2Rl
KiBub2RlKQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogCiAg
ICAgaWYgKG5vZGUtPm51bUNoaWxkcmVuKCkgPT0gNCkKLSAgICAgICAgZW1pdFBvcHVsYXRlU2xp
Y2VJbmRleChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzdGQ6Om51bGxvcHQs
IGxlbmd0aEdQUiwgaW5kZXhHUFIpOworICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCBpbmRl
eEdQUik7CiAgICAgZWxzZQogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgaW5k
ZXhHUFIpOwogCi0gICAgRWRnZSYgc2VhcmNoRWxlbWVudEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpOworICAgIEVkZ2UmIHNlYXJjaEVsZW1lbnRFZGdlID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICBzd2l0Y2ggKHNlYXJjaEVsZW1lbnRFZGdlLnVz
ZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6CiAgICAgY2FzZSBPYmplY3RVc2U6CkBAIC0x
MDI0Miw4ICsxMDI0Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2go
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuaXNKU0FycmF5KCkp
OwogCi0gICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOwotICAgIEVkZ2UmIGFycmF5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMSk7CisgICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOworICAgIEVkZ2UmIGFycmF5RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSk7CiAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGFycmF5RWRnZSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CkBAIC0xMDI3Myw3ICsxMDI3Myw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm9kZSogbm9kZSkKICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAg
ICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSkgewotICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudE9mZnNldCk7CisgICAgICAg
ICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zm
c2V0KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkludDMyKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlbGVtZW50KTsKQEAgLTEw
Mjk3LDcgKzEwMjk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChO
b2RlKiBub2RlKQogCiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IDA7
IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICBFZGdlIGVsZW1lbnQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGVs
ZW1lbnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOworICAgICAgICAgICAgICAgIEVkZ2UgZWxlbWVu
dCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IEludDMyVXNl
KTsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlbGVtZW50KTsKICAgICAgICAgICAg
IH0KQEAgLTEwMzI1LDcgKzEwMzI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5UHVzaChOb2RlKiBub2RlKQogCiAgICAgICAgIHN0b3JhZ2VEb25lLmxpbmsoJm1faml0KTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBl
bGVtZW50Q291bnQ7ICsrZWxlbWVudEluZGV4KSB7Ci0gICAgICAgICAgICBFZGdlJiBlbGVtZW50
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50
T2Zmc2V0KTsKKyAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgZWxlbWVudCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsg
Ly8gV2UgZGlkIHR5cGUgY2hlY2tzIGFib3ZlLgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKIApAQCAtMTAzNDcsNyArMTAzNDcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAKICAgICBj
YXNlIEFycmF5OjpEb3VibGU6IHsKICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxKSB7Ci0g
ICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBlbGVtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKG5v
ZGUsIGVsZW1lbnQpOwogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBlbGVtZW50KTsKICAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigp
OwpAQCAtMTAzNjcsNyArMTAzNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlQdXNoKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGVs
ZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5k
ZXgpIHsKLSAgICAgICAgICAgIEVkZ2UgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdl
IGVsZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1l
bnRPZmZzZXQpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IERvdWJs
ZVJlcFJlYWxVc2UpOwogICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGVsZW1lbnQpOwogICAg
ICAgICB9CkBAIC0xMDM5NCw3ICsxMDM5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcnJheVB1c2goTm9kZSogbm9kZSkKIAogICAgICAgICBzdG9yYWdlRG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4
IDwgZWxlbWVudENvdW50OyArK2VsZW1lbnRJbmRleCkgewotICAgICAgICAgICAgRWRnZSYgZWxl
bWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxl
bWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgZWxlbWVudCk7CiAgICAgICAgICAgICBG
UFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKIApAQCAtMTA0MTgsNyArMTA0MTgsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAgICAgICAg
IC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgb2YgQXJyYXlQdXNoIGlzIEludDMyIGlu
IEFJLgogICAgICAgICBpbnQzMl90IGxhcmdlc3RQb3NpdGl2ZUludDMyTGVuZ3RoID0gMHg3ZmZm
ZmZmZiAtIGVsZW1lbnRDb3VudDsKICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxKSB7Ci0g
ICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBlbGVtZW50T2Zmc2V0KTsKKyAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgZWxlbWVudCk7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwogCkBAIC0xMDQ3MCw3ICsxMDQ3MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm9kZSogbm9kZSkKIAogICAgICAgICBz
dG9yYWdlRG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgZWxlbWVudElu
ZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVudENvdW50OyArK2VsZW1lbnRJbmRleCkgewot
ICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVt
ZW50ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zm
c2V0KTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGVsZW1lbnQpOwog
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsK
IApAQCAtMTA1MDYsNyArMTA1MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90
aWZ5V3JpdGUoTm9kZSogbm9kZSkKICAgICAgICAgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxs
KHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTmVlZFRvU3BpbGwsIEV4Y2Vw
dGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCBOb1Jlc3VsdCwgJnZtKCksIHNl
dCkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlm
eVdyaXRlLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3RO
ZWVkZWQsIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3RlZEltbVB0cihzZXQp
KSk7CiAgICAgCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC0xMDUzNiw3ICsxMDUzNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdChOb2RlKiBub2RlKQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mSXNPYmplY3QoTm9kZSogbm9kZSkKIHsKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKQEAgLTEwNTY5
LDcgKzEwNTY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZklzT2JqZWN0
KE5vZGUqIG5vZGUpCiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25UeXBlT2ZJ
c09iamVjdCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICBzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uVHlwZU9mSXNPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTEwNTc5
LDcgKzEwNTc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZklzT2JqZWN0
KE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0NhbGxhYmxlKE5v
ZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDIHNsb3dQYXRoT3BlcmF0aW9uKQogewotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IAogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwpAQCAtMTA2MDYsNyAr
MTA2MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNDYWxsYWJsZShOb2RlKiBu
b2RlLCBTX0pJVE9wZXJhdGlvbl9HQyBzbG93UGF0aE9wZQogICAgIAogICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93UGF0aCwg
dGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAg
ICAgICAgc2xvd1BhdGgsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksCiAgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CkBAIC0xMDYyOCw3ICsxMDYyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0Nv
bnN0cnVjdG9yKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBl
T2YoTm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNW
YWx1ZVJlZ3MoKTsKQEAgLTEwNjQxLDcgKzEwNjQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVR5cGVPZihOb2RlKiBub2RlKQogICAgIG1faml0LmVtaXRUeXBlT2YoCiAgICAgICAg
IHZhbHVlUmVncywgcmVzdWx0R1BSLAogICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9v
bCBmYWxsc1Rocm91Z2gpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgdm0oKS5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0
eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCiAgICAgICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfSwKQEAgLTEwNjUyLDcg
KzEwNjUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKiBub2Rl
KQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25UeXBlT2ZPYmplY3QsIHJlc3VsdEdQ
UiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvblR5
cGVPZk9iamVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwog
ICAgIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTEwNzU4LDcgKzEwNzU4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5v
ZGUpCiAgICAgfQogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBo
KCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTEwNzgw
LDcgKzEwNzgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKICAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksIHJlc3VsdC5ncHIoKSwgJnZtKCksIGJhc2VHUFIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGJhc2VHUFIpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwpAQCAtMTA4MDAsNyArMTA4MDAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkK
ICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEs
ICZ2bSgpKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNo
R1BSMSwgVHJ1c3RlZEltbVB0cigmdm0oKSkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IG9mZnNl
dCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKQogICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwpAQCAtMTA4MjQsNyArMTA4MjQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBu
b2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BbGxv
Y2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgJnZtKCksIGJhc2VHUFIs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CiAgICAg
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOwpAQCAtMTA4NDcsNyArMTA4NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgIG1f
aml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVT
aW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCAmdm0oKSwgbmV3U2l6ZSAvIHNpemVv
ZihKU1ZhbHVlKSkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZElt
bVB0cigmdm0oKSksIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKIAogICAgIGZvciAocHRy
ZGlmZl90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
bmV3U2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKQogICAgICAgICBtX2ppdC5zdG9yZVB0
cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwpAQCAtMTA5
MzksNyArMTA5MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2Rl
KiBub2RlKQogICAgIH07CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgbV9qaXQuZ3Jh
cGgoKS5kb1RvQ2hpbGRyZW4obm9kZSwgWyZdKEVkZ2UgZWRnZSkgeworICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKG5vZGUsIFsmXShFZGdlIGVkZ2UpIHsKICAgICAgICAgaWYgKCFpbmRleCkKICAg
ICAgICAgICAgIGFwcGVuZENlbGwoZWRnZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMDIsOSAr
MTEwMDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRlcihOb2Rl
KiBub2RlKQogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VKSVRDYWdlKCkpCi0gICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9w
ZXJhdGlvbl9HSklQPihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJzOjpD
ZWxsVmFsdWUoYmFzZUdQUiksIGlkZW50aWZpZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEo
KS0+aWRlbnRpZmllck51bWJlciksIGdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPEpfSklUT3BlcmF0aW9uX0dKSVA+KFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1
c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50
aWZpZXJOdW1iZXIpKSwgVHJ1c3RlZEltbVB0cihnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9w
ZXJhdGlvbl9HSkk+KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNl
bGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgp
LT5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxK
X0pJVE9wZXJhdGlvbl9HSkk+KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBl
cnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUt
PmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bSgpLnRvcENhbGxGcmFt
ZSk7CiAgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKQEAgLTExMDQ5LDcgKzExMDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNhbGxET01HZXR0ZXIoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNoZWNrSlNDYXN0KE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENoZWNrSlNDYXN0IHx8IG5vZGUtPm9wKCkg
PT0gQ2hlY2tOb3RKU0Nhc3QpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+
b3AoKSA9PSBDaGVja0pTQ2FzdCB8fCBub2RlLT5vcCgpID09IENoZWNrTm90SlNDYXN0KTsKICAg
ICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IG5vZGUtPmNsYXNzSW5mbygpOwogICAgIGlm
IChjbGFzc0luZm8tPmluaGVyaXRzSlNUeXBlUmFuZ2UpIHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTA3Niw3ICsxMTA3Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0pTQ2FzdChOb2RlKiBub2RlKQog
CiAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGJhc2VHUFIsIG90aGVyR1BS
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIs
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7Ci0gICAgICAgIG1faml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwgc3Bl
Y2lmaWVkR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNz
SW5mbygpKSwgc3BlY2lmaWVkR1BSKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxv
b3AgPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICBhdXRvIGZvdW5kID0gbV9qaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6RXF1YWwsIG90aGVyR1BSLCBzcGVjaWZpZWRHUFIpOwpAQCAtMTE0Mzgs
NyArMTE0MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0
KE5vZGUqIG5vZGUpCiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgIAogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgb3BlcmFuZEdQUiwg
bm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5l
d1N0cmluZ09iamVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgb3BlcmFuZEdQ
Uiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiB9CkBAIC0xMTQ0OSw3ICsxMTQ0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdTeW1ib2woTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1N5bWJvbCwgcmVzdWx0R1BSLCAmdm0oKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3U3ltYm9sLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC0xMTQ4Miw5ICsxMTQ4Miw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTeW1ib2woTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZShOb2RlKiBub2RlKQogewotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIGF1dG8gdHlwZWRBcnJheVR5cGUgPSBub2RlLT50eXBlZEFycmF5VHlwZSgpOwotICAgIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkodHlwZWRB
cnJheVR5cGUpKTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgu
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3Vy
cmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdl
dCgpKTsKIAogI2lmIFVTRShMQVJHRV9UWVBFRF9BUlJBWVMpCkBAIC0xMTYxOSw3ICsxMTYxOSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdSZWdleHAoTm9kZSogbm9kZSkKIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGF1dG8gc3RydWN0dXJl
ID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAg
YXV0byBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3Q8UmVnRXhwT2JqZWN0PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKIApA
QCAtMTE2MjksNyArMTE2MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UmVn
ZXhwKE5vZGUqIG5vZGUpCiAgICAgbV9qaXQuc3RvcmVWYWx1ZShsYXN0SW5kZXhSZWdzLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNldE9mTGFzdElu
ZGV4KCkpKTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKLSAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1JlZ2V4
cFdpdGhMYXN0SW5kZXgsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJl
Z2V4cCwgbGFzdEluZGV4UmVncykpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgcmVnZXhwKSwgbGFzdEluZGV4UmVncykpOwogCiAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTI0OTIsOCArMTI0OTIsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkZ2UgZWRnZSkKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAogICAgIFN3aXRjaERhdGEqIGRhdGEsIEdQUlJlZyB2YWx1
ZSwgR1BSUmVnIHNjcmF0Y2gpCiB7Ci0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2ppdC5ncmFwaCgpLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2ppdC5ncmFwaCgpLnN3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsK
KyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3Jh
cGgudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fZ3JhcGguc3dpdGNoSnVtcFRhYmxlKGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVu
bGlua2VkVGFibGUpOwogICAgIG1faml0LnN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4p
LCB2YWx1ZSk7CiAgICAgYWRkQnJhbmNoKApAQCAtMTI1MzQsOSArMTI1MzQsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEp
CiAgICAgICAgIG5vdEludDMyLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaElmTm90TnVtYmVyKHZhbHVlUmVncywgc2NyYXRjaCksIGRhdGEtPmZhbGxUaHJvdWdo
LmJsb2NrKTsKIAotICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1faml0LmdyYXBoKCkudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dp
dGNoVGFibGVJbmRleCk7CisgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0
Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRv
dWJsZSwgc2NyYXRjaCwgJnZtKCksIHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCwg
dW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmlu
ZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgVHJ1c3RlZEltbVB0cigmdm0oKSks
IHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7
CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKIAogICAgICAgICBtX2ppdC5mYXJK
dW1wKHNjcmF0Y2gsIEpTU3dpdGNoUHRyVGFnKTsKQEAgLTEyNzc2LDcgKzEyNzc2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKE5vZGUqIG5vZGUsIFN3
aXRjaERhdGEqIGRhdGEsIEdQUlIKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwog
CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dy
YXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgp
OwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdC5ncmFwaCgpLnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9ncmFwaC5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKICAgICBib29sIGNhbkRvQmluYXJ5U3dpdGNoID0gdHJ1ZTsKQEAgLTEyNzk3
LDcgKzEyNzk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3Ry
aW5nKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEsIEdQUlIKIAogICAgIGlmICghY2FuRG9C
aW5hcnlTd2l0Y2ggfHwgdG90YWxMZW5ndGggPiBPcHRpb25zOjptYXhpbXVtQmluYXJ5U3RyaW5n
U3dpdGNoVG90YWxMZW5ndGgoKSkgewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUlu
ZGV4KSwgJnVubGlua2VkVGFibGUsIHN0cmluZyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBUcnVzdGVkSW1tUHRy
KCZ1bmxpbmtlZFRhYmxlKSwgc3RyaW5nKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKICAgICAgICAgbV9qaXQuZmFySnVtcChzdHJpbmcsIEpTU3dpdGNoUHRyVGFnKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTI4MzQsNyArMTI4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0U3dpdGNoU3RyaW5nT25TdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSwgR1BS
UgogICAgIAogICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoc3RyaW5nKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Zywgc3RyaW5nLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgJnVubGlua2VkVGFibGUsIHN0cmluZyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRl
eCksIFRydXN0ZWRJbW1QdHIoJnVubGlua2VkVGFibGUpLCBzdHJpbmcpOwogICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG1faml0
LmZhckp1bXAoc3RyaW5nLCBKU1N3aXRjaFB0clRhZyk7CkBAIC0xMjkyMSw3ICsxMjkyMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9kZSogbm9kZSkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIFN3aXRjaENlbGw6IHsKLSAgICAgICAgREZHX0NSQVNIKG1f
aml0LmdyYXBoKCksIG5vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG5vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0gfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjk2NCw3ICsxMjk2
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSogbm9k
ZSkKICAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFz
ZUdQUikpOwogCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIGJh
c2VHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKCk7CiAKICAgICBvay5saW5rKCZtX2ppdCk7CkBAIC0xMjk4MSw3ICsxMjk4MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKICAg
ICBHUFJSZWcgYWNjZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0
ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGFjY2Vzc29yR1BSKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG5vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlJZCA/IG9wZXJhdGlvblB1
dEdldHRlckJ5SWQgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZUdQUiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKSkpLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgYWNjZXNzb3JHUFIp
OwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAg
LTEyOTk5LDcgKzEyOTk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEdldHRl
clNldHRlckJ5SWQoTm9kZSogbm9kZSkKICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdw
cigpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlk
ZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JBdHRy
aWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKSwg
bm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKICNlbHNl
CiAgICAgLy8gVGhlc2UgSlNWYWx1ZXMgbWF5IGJlIEpTVW5kZWZpbmVkIE9SIEpTRnVuY3Rpb24q
LgogICAgIC8vIEF0IHRoYXQgdGltZSwKQEAgLTEzMDExLDcgKzEzMDExLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEdldHRlclNldHRlckJ5SWQoTm9kZSogbm9kZSkKICAgICBK
U1ZhbHVlUmVncyBzZXR0ZXJSZWdzID0gc2V0dGVyLmpzVmFsdWVSZWdzKCk7CiAKICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgZ2V0dGVy
UmVncy5wYXlsb2FkR1BSKCksIHNldHRlclJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGJhc2VHUFIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkpKSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdldHRlclJlZ3MucGF5bG9h
ZEdQUigpLCBzZXR0ZXJSZWdzLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogCkBAIC0xMzAyNSw3ICsxMzAyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZXNvbHZlU2NvcGUoTm9kZSogbm9kZSkKICAgICBHUFJGbHVzaGVkQ2FsbFJl
c3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2
ZVNjb3BlLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQUiwg
aWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblJlc29sdmVTY29wZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0xMzAzNyw3ICsxMzAzNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5F
dmFsKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0Zs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVTY29w
ZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBzY29wZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5n
RnVuY0RlY2xJbkV2YWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBz
Y29wZUdQUiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSkpKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CiB9CkBAIC0xMzA2NSw3ICsxMzA2NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXREeW5hbWljVmFyKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldER5bmFtaWNWYXIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBzY29wZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpLCBub2RlLT5nZXRQdXRJbmZvKCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
R2V0RHluYW1pY1ZhciwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNj
b3BlR1BSLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJl
cigpKSksIG5vZGUtPmdldFB1dEluZm8oKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtMTMwNzksNyArMTMw
NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0RHluYW1pY1ZhcihOb2RlKiBu
b2RlKQogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUo
KS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdCA6IG9wZXJhdGlvblB1
dER5bmFtaWNWYXJOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQ
UiwgdmFsdWVSZWdzLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5v
ZGUtPmdldFB1dEluZm8oKSk7CisgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXREeW5hbWljVmFyU3RyaWN0IDogb3BlcmF0aW9uUHV0RHlu
YW1pY1Zhck5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNjb3BlR1BSLCB2
YWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpKSwgbm9kZS0+Z2V0UHV0SW5mbygpKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQpAQCAtMTM0NDUsNyArMTM0NDUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTGF6eUpTQ29uc3RhbnQoTm9kZSogbm9kZSkKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogewog
ICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlU2V0KCku
YXQoMCk7Ci0gICAgQVNTRVJUKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCktPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8U3RydWN0dXJlKj4odm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsK
KyAgICBBU1NFUlQobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxTdHJ1Y3R1cmUqPih2bSgpKSA9PSBzdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgT2JqZWN0
TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRh
dGEoKTsKICAgICAgICAgCkBAIC0xMzQ1Niw3ICsxMzQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogCiAgICAgaWYgKGhh
c0luZGV4aW5nSGVhZGVyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9w
ZXJ0aWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAxICsgaSk7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZGF0
YS5tX3Byb3BlcnRpZXNbaV0ua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1YmxpY0xlbmd0
aFBMb2M6CiAgICAgICAgICAgICAgICAgcHVibGljTGVuZ3RoID0gZWRnZS0+YXNJbnQzMigpOwpA
QCAtMTM0ODQsNyArMTM0ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJp
YWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgRWRnZSBlZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxICsgaSk7Cisg
ICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpOwogICAg
ICAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZGF0YS5tX3Byb3Bl
cnRpZXNbaV07CiAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKICAgICAgICAg
Y2FzZSBJbmRleGVkUHJvcGVydHlQTG9jOiB7CkBAIC0xMzQ5Niw3ICsxMzQ5Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogewotICAgICAgICAg
ICAgU3RyaW5nSW1wbCogdWlkID0gbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW2Rlc2NyaXB0
b3IuaW5mbygpXTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtkZXNjcmlwdG9yLmluZm8oKV07CiAgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFw
RW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewog
ICAgICAgICAgICAgICAgIGlmICh1aWQgIT0gZW50cnkua2V5KQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTEzNTIwLDExICsxMzUyMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdChOb2RlKiBub2RlKQogewot
ICAgIEVkZ2UgZ2xvYmFsT2JqZWN0RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7Ci0gICAgRWRnZSByZWdFeHBFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAxKTsKLSAgICBFZGdlIHN0cmluZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotICAgIEVkZ2Ugc3RhcnRFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAzKTsKLSAgICBFZGdlIGVuZEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDQpOworICAgIEVkZ2UgZ2xvYmFsT2JqZWN0RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgRWRnZSByZWdFeHBFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKKyAgICBFZGdlIHN0cmluZ0VkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpOworICAgIEVkZ2Ugc3RhcnRFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKTsK
KyAgICBFZGdlIGVuZEVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpOwogCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZ2xvYmFsT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdEVkZ2Up
OwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHJlZ0V4cCh0aGlzLCByZWdFeHBFZGdlKTsKQEAg
LTEzNTcxLDE2ICsxMzU3MSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5l
RGF0YVByb3BlcnR5KE5vZGUqIG5vZGUpCiAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA+PSA2LCAiV2UgYXJlIGFzc3VtaW5nIHdlIGhhdmUgZW5vdWdoIHJlZ2lz
dGVycyB0byBtYWtlIHRoaXMgY2FsbCB3aXRob3V0IGluY3JlbWVudGFsbHkgc2V0dGluZyB1cCB0
aGUgYXJndW1lbnRzLiIpOwogI2VuZGlmCiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCi0gICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKIAotICAgIFNwZWN1
bGF0ZUludDMyT3BlcmFuZCBhdHRyaWJ1dGVzKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMykpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBhdHRyaWJ1dGVzKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBhdHRyaWJ1dGVzR1BS
ID0gYXR0cmlidXRlcy5ncHIoKTsKIAotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICBzd2l0Y2ggKHByb3BlcnR5RWRnZS51c2VL
aW5kKCkpIHsKICAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwpAQCAtMTM2NDksMTkgKzEzNjQ5LDE5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KE5v
ZGUqIG5vZGUpCiAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+
PSA2LCAiV2UgYXJlIGFzc3VtaW5nIHdlIGhhdmUgZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIHRo
aXMgY2FsbCB3aXRob3V0IGluY3JlbWVudGFsbHkgc2V0dGluZyB1cCB0aGUgYXJndW1lbnRzLiIp
OwogI2VuZGlmCiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZ2V0dGVyKHRoaXMs
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGdldHRlcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKICAgICBH
UFJSZWcgZ2V0dGVyR1BSID0gZ2V0dGVyLmdwcigpOwogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgc2V0dGVyKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNldHRlcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDMpKTsKICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwogCi0gICAgU3Bl
Y3VsYXRlSW50MzJPcGVyYW5kIGF0dHJpYnV0ZXModGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCA0KSk7CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGF0dHJpYnV0ZXModGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgR1BSUmVnIGF0dHJpYnV0ZXNH
UFIgPSBhdHRyaWJ1dGVzLmdwcigpOwogCi0gICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwogICAgIHN3aXRjaCAocHJvcGVydHlFZGdlLnVz
ZUtpbmQoKSkgewogICAgIGNhc2UgU3RyaW5nVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7CkBAIC0xMzc4Nyw3ICsxMzc4Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkoTm9kZSogbm9k
ZSkKIAogICAgIHBhc3NUaHJvdWdoQ2FzZXMubGluaygmbV9qaXQpOwogICAgIG1faml0Lm1vdmVW
YWx1ZVJlZ3Moa2V5UmVncywgcmVzdWx0UmVncyk7Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25Ob3JtYWxpemVNYXBLZXlIZWFw
QmlnSW50LCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3RO
ZWVkZWQsIHJlc3VsdFJlZ3MsICZ2bSgpLCBrZXlSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
Tm9ybWFsaXplTWFwS2V5SGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVx
dWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwga2V5UmVncy5wYXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7
CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTEzODQzLDcgKzEzODQz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldE1hcEJ1Y2tldE5leHQoTm9kZSog
bm9kZSkKICAgICAgICAgQVNTRVJUKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tldE93
bmVyVHlwZTo6U2V0KTsKICAgICAgICAgc2VudGluZWwgPSB2bSgpLnNlbnRpbmVsU2V0QnVja2V0
KCk7CiAgICAgfQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9q
aXQuZ3JhcGgoKSwgc2VudGluZWwpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgc2VudGluZWwpLCByZXN1bHRHUFIpOwogICAg
IGRvbmUubGluaygmbV9qaXQpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpA
QCAtMTQ0OTgsMTEgKzE0NDk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJD
YXQoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5QnVm
ZmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgYXV0byogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFu
ZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCk7CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdN
b2RlID0gbm9kZS0+aW5kZXhpbmdNb2RlKCk7Ci0gICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nTW9kZSkp
OworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihpbmRleGluZ01vZGUpKTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ01vZGUpKSB7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNDUxNyw5ICsxNDUxNyw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihOb2RlKiBub2RlKQog
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGFycmF5LT50b0J1dHRlcmZseSgpKSwg
c2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogCi0gICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0Fy
cmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksICZ2bSgpLCBzdHJ1Y3R1cmUsIGFycmF5KSk7CisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBzdHJ1Y3R1cmUsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGFycmF5KSkp
OwogCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaW5kZXhpbmdNb2Rl
ICYgSXNBcnJheSwgaW5kZXhpbmdNb2RlKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBpbmRleGluZ01vZGUgJiBJc0FycmF5LCBpbmRleGluZ01vZGUpOwogICAgICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDUy
Nyw3ICsxNDUyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZl
cihOb2RlKiBub2RlKQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eUJ1ZmZlciwgcmVzdWx0LmdwcigpLCAmdm0oKSwgc3RydWN0dXJlLCBUcnVzdGVkSW1tUHRyKG5v
ZGUtPmNlbGxPcGVyYW5kKCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
QnVmZmVyLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsIFRy
dXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC0xNDUzNSw3
ICsxNDUzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihO
b2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6
ZShOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRU
aW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTQ1NTUsMTAgKzE0
NTU1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5v
ZGUqIG5vZGUpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHNpemVH
UFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5f
QVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSk7Ci0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhp
bmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0
cnVjdHVyZUdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKICAgICBiaWdMZW5ndGgubGluaygmbV9qaXQpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9n
cmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSksIHN0cnVj
dHVyZUdQUik7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOwogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CkBAIC0xNDU4NSwxMCArMTQ1ODUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSogbm9kZSkKICAgICAgICAgR1BSRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogCi0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCkpLAotICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVk
QXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLCBhcmd1
bWVudFJlZ3MpOworICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlT
dHJ1Y3R1cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLCBhcmd1bWVudFJl
Z3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTE0NjYzLDE1ICsxNDY2MywxNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0S2V5c09yT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyhO
b2RlKiBub2RlKQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0J1
dEFycmF5QnVmZmVyQ2FzZXM7CiAKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBhcnJheVN0cnVjdHVyZSA9IG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQ29weU9uV3JpdGVBcnJheVdpdGhDb250
aWd1b3VzKSk7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgYXJyYXlTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKENvcHlPbldyaXRlQXJyYXlXaXRoQ29udGlndW91cykpOwogCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNjcmF0Y2hHUFIsIHNjcmF0Y2gzR1BSKTsKICAgICAgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoSlNJbW11dGFibGVCdXR0ZXJmbHk6Om9mZnNldE9mRGF0YSgp
KSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJy
YXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihhcnJheVN0cnVjdHVyZSksIHNjcmF0Y2hHUFIs
IHN0cnVjdHVyZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dCdXRBcnJheUJ1ZmZlckNhc2VzKTsKIAot
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dCdXRBcnJh
eUJ1ZmZlckNhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0R1BSLCAm
dm0oKSwgYXJyYXlTdHJ1Y3R1cmUsIHNjcmF0Y2gzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0J1dEFycmF5QnVmZmVyQ2FzZXMsIHRoaXMs
IG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBhcnJheVN0cnVjdHVyZSwgc2NyYXRjaDNHUFIpKTsKIAogICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+b3AoKSA9PSBP
YmplY3RLZXlzID8gb3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCA6IG9wZXJhdGlvbk9iamVjdEdl
dE93blByb3BlcnR5TmFtZXNPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIG9iamVjdEdQUikpOwogCkBAIC0xNDc1MCw3ICsxNDc1MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RBc3NpZ24oTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTQ4NTksOCAr
MTQ4NTksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUHJvbWlzZShOb2Rl
KiBub2RlKQogICAgIC8vIFdlIGNhbiBhdm9pZCB1c2luZyBhbiBhZGRpdGlvbmFsIEdQUiB0aGlz
IHdheQogICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG5vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmludGVybmFsUHJvbWlzZVN0cnVj
dHVyZSgpIDogZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpKSwgc3RydWN0dXJlR1BS
KTsKLSAgICBhdXRvIGZhc3RQcm9taXNlUGF0aCA9IG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBl
cnM6OkVxdWFsLCBjYWxsZWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIG5vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmludGVybmFs
UHJvbWlzZUNvbnN0cnVjdG9yKCkgOiBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1Y3Rvcigp
KSk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUobm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9t
aXNlU3RydWN0dXJlKCkgOiBnbG9iYWxPYmplY3QtPnByb21pc2VTdHJ1Y3R1cmUoKSkpLCBzdHJ1
Y3R1cmVHUFIpOworICAgIGF1dG8gZmFzdFByb21pc2VQYXRoID0gbV9qaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6RXF1YWwsIGNhbGxlZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IGdsb2JhbE9iamVjdC0+aW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IoKSA6IGdsb2JhbE9iamVjdC0+cHJvbWlzZUNvbnN0cnVjdG9y
KCkpKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTE0
ODcyLDcgKzE0ODcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVByb21p
c2UoTm9kZSogbm9kZSkKICAgICBtX2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0
cnVjdHVyZUdQUiwgc3RydWN0dXJlR1BSKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
bm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBK
U1Byb21pc2U6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQo
KSkpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BS
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkpKTsKIAogICAgIGZhc3RQcm9taXNlUGF0
aC5saW5rKCZtX2ppdCk7CkBAIC0xNDg4Myw5ICsxNDg4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0V2l0aEtub3duU2l6ZTxKU1Byb21pc2U+KHJlc3VsdEdQUiwgc3RydWN0dXJlR1BS
LCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzLCBzaXplb2Yo
SlNQcm9taXNlKSk7CiAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNOdW1iZXIoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nKSksIENDYWxsSGVscGVy
czo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0
T2ZJbnRlcm5hbEZpZWxkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OkZpZWxkOjpG
bGFncykpKSk7CiAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6
RmllbGQ6OlJlYWN0aW9uc09yUmVzdWx0KSkpKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UobV9q
aXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCi0gICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+aXNJbnRlcm5h
bFByb21pc2UoKSA/IG9wZXJhdGlvbkNyZWF0ZUludGVybmFsUHJvbWlzZSA6IG9wZXJhdGlvbkNy
ZWF0ZVByb21pc2UsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQu
Z3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSwgY2FsbGVlR1BSKSk7CisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+aXNJbnRlcm5hbFByb21p
c2UoKSA/IG9wZXJhdGlvbkNyZWF0ZUludGVybmFsUHJvbWlzZSA6IG9wZXJhdGlvbkNyZWF0ZVBy
b21pc2UsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xv
YmFsT2JqZWN0KSwgY2FsbGVlR1BSKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiB9CkBAIC0xNDkyMSw3ICsxNDkyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGVyCiAg
ICAgbV9qaXQuZW1pdE5vbk51bGxEZWNvZGVTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVHUFIsIHN0cnVj
dHVyZUdQUik7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSks
IHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKLSAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVj
dCksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKQEAgLTE0OTMwLDkgKzE0OTMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZUludGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIK
ICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlcy5zaXplKCkgPT0gSlNDbGFzczo6bnVtYmVyT2ZJbnRl
cm5hbEZpZWxkcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaW5pdGlh
bFZhbHVlcy5zaXplKCk7ICsraW5kZXgpCiAgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVl
KGluaXRpYWxWYWx1ZXNbaW5kZXhdLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkp
KTsKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UobV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRv
ckZlbmNlKHZtKCkpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIGNhbGxlZUdQUikpOworICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
biwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBjYWxsZWVHUFIpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
IH0KQEAgLTE0OTcxLDcgKzE0OTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d09iamVjdChOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAg
ICAgfQogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgJnZtKCksIHN0cnVjdHVyZSkpOwor
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1
cmUpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE0OTk2LDkg
KzE0OTk2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRmllbGRP
YmplY3RJbXBsKE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGUKICAgICBzdGF0aWNfYXNzZXJ0KGlu
aXRpYWxWYWx1ZXMuc2l6ZSgpID09IEpTQ2xhc3M6Om51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwog
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluaXRpYWxWYWx1ZXMuc2l6ZSgp
OyArK2luZGV4KQogICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWVz
W2luZGV4XSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgbV9qaXQu
bXV0YXRvckZlbmNlKG1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsK
IAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbiwgcmVzdWx0R1BSLCAmdm0oKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSkpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAg
LTE1MDQxLDcgKzE1MDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVy
bmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVRvUHJpbWl0aXZlKE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgp
LCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
OwogICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZ3VtZW50KTsKIApA
QCAtMTUwNjMsNyArMTUwNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Qcmlt
aXRpdmUoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvUHJvcGVy
dHlLZXkoTm9kZSogbm9kZSkKIHsKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUs
IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYXJndW1lbnQpOwogCkBAIC0xNTA4
Nyw3ICsxNTA4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1Byb3BlcnR5S2V5
KE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb051bWVyaWMoTm9k
ZSogbm9kZSkKIHsKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
OworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKQEAgLTE1
MTMxLDcgKzE1MTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxOdW1iZXJD
b25zdHJ1Y3RvcihOb2RlKiBub2RlKQogICAgIH0KICNlbmRpZgogCi0gICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpOwogICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CkBAIC0xNTE5Miw3ICsxNTE5Miw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKiBub2RlKQogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJS
ZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKKyAg
ICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2ssIHNjcmF0Y2gxUmVnKTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgc2NyYXRjaDFSZWcsIGNhbGxT
aXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0xNTIxOCwxNyArMTUyMTks
MTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFkZChOb2RlKiBub2RlKQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFwU2V0KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQg
aGFzaCh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBtYXAodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMykpOwogCiAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsK
ICAgICBKU1ZhbHVlUmVncyBrZXlSZWdzID0ga2V5LmpzVmFsdWVSZWdzKCk7CiAgICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgaGFzaEdQ
UiA9IGhhc2guZ3ByKCk7CiAKLSAgICBzcGVjdWxhdGVNYXBPYmplY3QobV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAwKSwgbWFwR1BSKTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgbWFwR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtMTUzNTAsMjgg
KzE1MzUxLDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrU2V0QWRkKE5vZGUq
IG5vZGUpCiAgICAgc3BlY3VsYXRlT2JqZWN0KG5vZGUtPmNoaWxkMigpLCBrZXlHUFIpOwogCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldlYWtTZXRB
ZGQsICZ2bSgpLCBzZXRHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25XZWFrU2V0QWRkLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2V0R1BSLCBrZXlHUFIs
IGhhc2hHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KE5vZGUqIG5v
ZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGtleSh0aGlz
LCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICBT
cGVjdWxhdGVJbnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBtYXAodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQga2V5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBoYXNoKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogCiAgICAg
R1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKICAgICBHUFJSZWcga2V5R1BSID0ga2V5Lmdwcigp
OwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAgICAg
R1BSUmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOwogCi0gICAgc3BlY3VsYXRlV2Vha01hcE9iamVj
dChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBtYXBHUFIpOwotICAgIHNwZWN1
bGF0ZU9iamVjdChtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBrZXlHUFIpOwor
ICAgIHNwZWN1bGF0ZVdlYWtNYXBPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwg
bWFwR1BSKTsKKyAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSwga2V5R1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25XZWFrTWFwU2V0LCAmdm0oKSwgbWFwR1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFz
aEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFrTWFwU2V0LCBUcnVzdGVkSW1t
UHRyKCZ2bSgpKSwgbWFwR1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFzaEdQUik7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KQEAgLTE1NTg4LDcg
KzE1NTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlX
aXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICNlbmRpZgogICAgIGVtaXRJbml0
aWFsaXplQnV0dGVyZmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIGVtcHR5VmFsdWVSZWdzLCByZXN1
bHRHUFIpOwogCi0gICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSkpOworICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGlu
Z1R5cGUpKTsKIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
MkdQUiwgc2xvd0Nhc2VzKTsKIApAQCAtMTU1OTgsNyArMTU1OTksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplYwogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemUsIHJlc3VsdEdQUiwKICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgc3RydWN0dXJlLAotICAgICAgICBzaG91bGRD
b252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpIDogc3RydWN0dXJlLAorICAgICAgICBz
aG91bGRDb252ZXJ0TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpIDogc3RydWN0dXJlLAogICAgICAgICBz
aXplR1BSLCBzdG9yYWdlR1BSKSk7CiB9CiAKQEAgLTE1ODU4LDcgKzE1ODU5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlR1BSLCBKU1ZhbHUKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJh
c2VHUFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xv
d1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLCB2YWx1ZVJlZ3MsCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCksIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxW
YWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllci5yYXdCaXRzKCkpOwogICAgIH0KIApAQCAtMTYwNTks
NyArMTYwNjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kZSog
bm9kZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvclZhbHVlID0gYWxsb2NhdG9yRm9yQ29uY3VycmVudGx5PEpTUm9wZVN0cmlu
Zz4odm0oKSwgc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKLSAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRy
KG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUodm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1
bHRHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2bSgpLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAvLyBUaGlzIHB1
dHMgbnVsbHB0ciBmb3IgdGhlIGZpcnN0IGZpYmVyLiBJdCBtYWtlcyB2aXNpdENoaWxkcmVuIHNh
ZmUgZXZlbiBpZiB0aGlzIEpTUm9wZVN0cmluZyBpcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBzcGVj
dWxhdGlvbiBmYWlsdXJlIGluIHRoZSBmb2xsb3dpbmcgcGF0aC4KICAgICBtX2ppdC5zdG9yZVB0
cihUcnVzdGVkSW1tUHRyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MocmVzdWx0R1BSLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIwKCkpKTsKQEAg
LTE2MTY1LDcgKzE2MTY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3Bl
KE5vZGUqIG5vZGUpCiAKICAgICBhdXRvIGlzTm9uRW1wdHlTdHJpbmcgPSBtX2ppdC5icmFuY2hU
ZXN0MzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBhbGxvY2F0b3JHUFIpOwogCi0gICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3Ry
aW5nKG1faml0LmdyYXBoKCkubV92bSkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyhtX2dyYXBoLm1f
dm0pKSwgcmVzdWx0R1BSKTsKIAogICAgIGlzTm9uRW1wdHlTdHJpbmcubGluaygmbV9qaXQpOwog
ICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCAzZTE0Mjk4MmZkNzg3NzJjNTM0MmYxZDYxNTQ0
MGU4NTY2ODVkNmM3Li4wMzE1YmEyMzEyMGVjNzNmMTY2ODU4YzBjYmVkNTQ3YjQ1MThkOTg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0x
NzAsOSArMTcwLDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIEJhc2ljQmxvY2sqIG5l
eHRCbG9jaygpCiAgICAgewogICAgICAgICBmb3IgKEJsb2NrSW5kZXggcmVzdWx0SW5kZXggPSBt
X2Jsb2NrLT5pbmRleCArIDE7IDsgcmVzdWx0SW5kZXgrKykgewotICAgICAgICAgICAgaWYgKHJl
c3VsdEluZGV4ID49IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCkpCisgICAgICAgICAgICBpZiAo
cmVzdWx0SW5kZXggPj0gbV9ncmFwaC5udW1CbG9ja3MoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1bHQgPSBtX2ppdC5n
cmFwaCgpLmJsb2NrKHJlc3VsdEluZGV4KSkKKyAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiBy
ZXN1bHQgPSBtX2dyYXBoLmJsb2NrKHJlc3VsdEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQpAQCAtMzMyLDcgKzMzMiw3IEBAIGNsYXNzIFNw
ZWN1bGF0aXZlSklUIHsKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SXNTdGlsbFZhbGlkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZChjb2RlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGgubWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7CiAg
ICAgfQogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFs
aWQoKQogICAgIHsKQEAgLTU4OCw3ICs1ODgsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAg
ICAgCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50aWZpZXJVSUQodW5zaWduZWQgaW5kZXgp
CiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW2luZGV4
XTsKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpbmRleF07CiAgICAgfQog
CiAgICAgLy8gU3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgSlNTdGFjay4K
QEAgLTk3NCwxMCArOTc0LDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgICAgICBhcHBl
bmRDYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBhZGRyZXNz
Lm9mZnNldCkpOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9DYiBvcGVyYXRp
b24sIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9DYiBv
cGVyYXRpb24sIEdQUlJlZyBjb2RlQmxvY2tHUFIpCiAgICAgewotICAgICAgICAvLyBEbyBub3Qg
cmVnaXN0ZXIgQ29kZUJsb2NrKiBhcyBhIHdlYWstcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHM8Vl9KSVRPcGVyYXRpb25fQ2I+KFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8
dm9pZCo+KGNvZGVCbG9jaykpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Vl9KSVRP
cGVyYXRpb25fQ2I+KGNvZGVCbG9ja0dQUik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CmluZGV4IDI3YzM1NWQzMDIzNGIwZjIzZmVlYTI2OThiYjNmOGU3OWM5YmExYzguLjYzYTdkZTkw
ZTU4NTE3ODM4OWMwMGUwMDRmMjY4NmE2ZmM1ODBjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMjE1LDEzICsy
MTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKICAgICBpZiAoYmFz
ZVRhZ0dQUk9yTm9uZSA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xv
d1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VQYXlsb2FkR1BSKSwKICAgICAg
ICAgICAgIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRH
UFIpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5
bG9hZEdQUiksIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRH
ZXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWRXaXRoVGhpcygKICAgICBpZiAoYmFzZVRhZ0dQUk9y
Tm9uZSA9PSBJbnZhbGlkR1BSUmVnICYmIHRoaXNUYWdHUFIgPT0gSW52YWxpZEdQUlJlZykgewog
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCi0gICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VQYXlsb2Fk
R1BSKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHRoaXNQYXlsb2FkR1BS
KSwKICAgICAgICAgICAgIGlkZW50aWZpZXIucmF3Qml0cygpKTsKQEAgLTI2MSw3ICsyNjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoCiAgICAgICAgIAog
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCi0gICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9h
ZEdQUiksIEpTVmFsdWVSZWdzKHRoaXNUYWdHUFIsIHRoaXNQYXlsb2FkR1BSKSwgaWRlbnRpZmll
ci5yYXdCaXRzKCkpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLCBKU1Zh
bHVlUmVncyh0aGlzVGFnR1BSLCB0aGlzUGF5bG9hZEdQUiksIGlkZW50aWZpZXIucmF3Qml0cygp
KTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRHZXRCeUlkV2l0aFRoaXMoZ2VuLCBzbG93UGF0aC5n
ZXQoKSk7CkBAIC0zMDMsNyArMzAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW4KICAgICAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICAgICAgR1BSUmVn
IGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyByZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7
Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3Jh
cGgoKSwgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2Jh
bE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAg
LTM2Nyw3ICszNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTgogICAgCiAgICAgICAgIEdQ
UlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAg
ICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0Lmdw
cigpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0
R1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXls
b2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAg
IGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1v
dGVHbG9iYWxPYmplY3RHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwpAQCAtNTgyLDEx
ICs1ODIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICAgICAgaXNEaXJlY3QgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hp
bGQobm9kZSwgMCk7CisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAw
KTsKICAgICBHUFJSZWcgY2FsbGVlVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBHUFJSZWcg
Y2FsbGVlUGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7CkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KTsK
ICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7
CiAKLSAgICAgICAgaW50IG51bVVzZWRTdGFja1Nsb3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRN
YWNoaW5lTG9jYWw7CisgICAgICAgIGludCBudW1Vc2VkU3RhY2tTbG90cyA9IG1fZ3JhcGgubV9u
ZXh0TWFjaGluZUxvY2FsOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRm9yd2FyZFZhcmFyZ3Mp
IHsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgCi0gICAg
ICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXNGbHVzaGVkKCkpOwogCiAgICAg
ICAgICAgICAvLyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNUYWdHUFIvYXJn
dW1lbnRzUGF5bG9hZEdQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMKICAgICAgICAgICAgIC8v
IGZsdXNoZWQuCkBAIC02ODAsNyArNjgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGlzRmx1c2hlZCgpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgogICAgICAgICBp
ZiAoaXNWYXJhcmdzKQpAQCAtNzExLDkgKzcxMSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gZG8gdGhpcyBhZGp1c3RtZW50
IG5vdyBzaW5jZSB3ZSB3aWxsIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGNvZGUgdGhhdCByZWxpZWQg
b24gdGhlCiAgICAgICAgICAgICAgICAgLy8gdmFsdWUgb2YgbV9wYXJhbWV0ZXJTbG90cy4KICAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFw
aCgpLCBub2RlLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAogICAgICAgICAg
ICAgICAgICAgICBHcmFwaDo6cGFyYW1ldGVyU2xvdHNGb3JBcmdDb3VudChudW1BbGxvY2F0ZWRB
cmdzKQotICAgICAgICAgICAgICAgICAgICA8PSBtX2ppdC5ncmFwaCgpLm1fcGFyYW1ldGVyU2xv
dHMpOworICAgICAgICAgICAgICAgICAgICA8PSBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTcyNCwxNCArNzI0LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpZiAoIWlzRGly
ZWN0KQogICAgICAgICAgICAgICAgIHVzZShjYWxsZWVFZGdlKTsKIAotICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsK
KyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1fZ3JhcGguZnJhbWVSZWdpc3Rl
ckNvdW50KCk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
ICsraSkgewotICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwogICAgICAgICAgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2RlKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghaXNEaXJlY3QpCiAgICAgICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsK
QEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG51bVBhc3NlZEFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgYXJnUmVncyA9IGFyZy5qc1ZhbHVlUmVncygpOwogICAg
ICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKQEAgLTc5Niw3ICs3OTYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAvLyBBZnRlciB0aGUgY2Fs
bHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrCiAgICAgICAgIC8v
IHBvaW50ZXIuIFdlIHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywgY2FsbHMgd2l0aCBh
cml0eQogICAgICAgICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFuZCB0
YWlsIGNhbGxzLgotICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBo
KCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICB9OwogICAgIAogICAgIGlmIChub2Rl
LT5vcCgpID09IENhbGxFdmFsKSB7CkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okxh
YmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25MaW5rRGlyZWN0Q2FsbCwgaW5mbywgY2FsbGVlUGF5bG9hZEdQUik7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBUcnVzdGVkSW1tUHRyKGlu
Zm8pLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgICAgICBt
X2ppdC5qdW1wKCkubGlua1RvKG1haW5QYXRoLCAmbV9qaXQpOwpAQCAtODcyLDcgKzg3Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBKSVRD
b21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBpbmZvLCBjYWxsZWVQYXlsb2FkR1BSKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgVHJ1c3RlZElt
bVB0cihpbmZvKSwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obWFpblBhdGgsICZtX2ppdCk7CiAg
ICAgICAgIApAQCAtMTUwNSw3ICsxNTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIoRWRnZSBub2RlVXNlLCBib29sIGludmVydCkKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVy
ZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CisgICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKIAogICAg
ICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KQEAg
LTE1ODMsNyArMTU4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW4o
Tm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAKICAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSAhbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCksIGFy
ZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwg
dGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxP
YmplY3QsIGludmVydCk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtl
biwgQmEKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCAKLSAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMp
KSkpOworICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
KSk7CiAKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsK
ICAgICB9CkBAIC0xNzMwLDcgKzE3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBhdXRv
IGZhbHNleSA9IG1faml0LmJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlUmVncywgcmVzdWx0R1BS
LCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBhZGRCcmFuY2go
ZmFsc2V5LCBub3RUYWtlbik7CiAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CkBAIC0x
NzU1LDcgKzE3NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9k
ZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SgogICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICBjYXNlIEFy
cmF5OjpCaWdVaW50NjRBcnJheToKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFy
cmF5OjpVbmRlY2lkZWQ6IHsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMTg0NCwxMSArMTg0
NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SgogICAgICAgICAgICAgaWYgKGJhc2VSZWdz
LnRhZ0dQUigpID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNl
bGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBwcm9wZXJ0eVJlZ3MpOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUmVncy5w
YXlsb2FkR1BSKCkpLCBwcm9wZXJ0eVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxs
cHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgbnVs
bHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMjEwNSw3ICsy
MTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAg
aWYgY29uc3RleHByICh2YWxpZGF0ZURGR0RvZXNHQykgewogICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVEb2VzR0MoKSkgewotICAgICAgICAgICAgYm9vbCBleHBlY3REb2VzR0MgPSBkb2Vz
R0MobV9qaXQuZ3JhcGgoKSwgbm9kZSk7CisgICAgICAgICAgICBib29sIGV4cGVjdERvZXNHQyA9
IGRvZXNHQyhtX2dyYXBoLCBub2RlKTsKICAgICAgICAgICAgIERvZXNHQ0NoZWNrIGNoZWNrOwog
ICAgICAgICAgICAgY2hlY2sudS5lbmNvZGVkID0gRG9lc0dDQ2hlY2s6OmVuY29kZShleHBlY3RE
b2VzR0MsIG5vZGUtPmluZGV4KCksIG5vZGUtPm9wKCkpOwogICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjaGVjay51Lm90aGVyKSwgJnZtKCkuYWRk
cmVzc09mRG9lc0dDKCktPnUub3RoZXIpOwpAQCAtMjY0MSwxNiArMjY0MSwxNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRCeVZhbFdpdGhU
aGlzOiB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
Pj0gOCwgIldlIGFyZSBhc3N1bWluZyB3ZSBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSB0
aGlzIGNhbGwgd2l0aG91dCBpbmNyZW1lbnRhbGx5IHNldHRpbmcgdXAgdGhlIGFyZ3VtZW50cy4i
KTsKIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFs
dWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKICAgICAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MgPSB0aGlzVmFsdWUuanNWYWx1ZVJlZ3Mo
KTsKIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAgICAgICAgIEpTVmFsdWVSZWdz
IHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CiAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMykpOwogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVl
UmVncygpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0zMzA5LDcgKzMzMDksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJl
IG5ld1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQu
Z3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgp
LCBuZXdTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CkBAIC0zNTI3LDcgKzM1MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygm
bV9qaXQpOwogICAgICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxH
bG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0
R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2Jh
bE9iamVjdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSKTsgCiAgICAgICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGls
ZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCBy
ZXN1bHQuZ3ByKCkpOwpAQCAtNDA0MCw3ICs0MDQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgog
ICAgIGNhc2UgQ2hlY2tWYXJhcmdzOgotICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2ppdC5ncmFwaCgpLCBub2RlLCBzcGVjdWxhdGUpOworICAgICAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihtX2dyYXBoLCBub2RlLCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTQxMDMsMTUgKzQxMDMsMTUgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVPckVtcHR5OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIkNoZWNrU3RydWN0dXJlT3JFbXB0eSBvbmx5IHVzZWQgaW4gNjQtYml0IERGRyIpOwor
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkNoZWNrU3RydWN0dXJlT3JFbXB0eSBv
bmx5IHVzZWQgaW4gNjQtYml0IERGRyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hl
Y2tBcnJheU9yRW1wdHk6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
Q2hlY2tBcnJheU9yRW1wdHkgb25seSB1c2VkIGluIDY0LWJpdCBERkciKTsKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJDaGVja0FycmF5T3JFbXB0eSBvbmx5IHVzZWQgaW4gNjQt
Yml0IERGRyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSXNCaWdJbnQ6Ci0gICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiSXNCaWdJbnQgaXMgb25seSB1c2VkIHdo
ZW4gVVNFX0JJR0lOVDMyLCB3aGljaCBjYW4gb25seSBiZSB0cnVlIGluIDY0IGJpdCBtb2RlIik7
CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiSXNCaWdJbnQgaXMgb25seSB1c2Vk
IHdoZW4gVVNFX0JJR0lOVDMyLCB3aGljaCBjYW4gb25seSBiZSB0cnVlIGluIDY0IGJpdCBtb2Rl
Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKQEAg
LTQxODcsNyArNDE4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIERhdGVHZXRJbnQzMk9yTmFOOgogICAgIGNhc2UgRGF0ZUdldFRpbWU6CiAg
ICAgY2FzZSBTdHJpbmdDb2RlUG9pbnRBdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBo
KCksIG5vZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjE0LDEyICs0MjE0LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmJsZXNzQm9vbGVhbihHUFJSZWcpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aFJhbmRvbShOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKIAogICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25SYW5kb20sIHJlc3VsdC5mcHIoKSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblJhbmRvbSwgcmVzdWx0LmZwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpKTsKICAgICAvLyBvcGVyYXRpb25SYW5kb20g
ZG9lcyBub3QgcmFpc2UgYW55IGV4Y2VwdGlvbi4KICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCmluZGV4IGRmZmRkZjhmMmU1OGQ2YjMzYmZmMGMwYTBjMzhkZGFkMTZm
YzlmZDguLjhlOTJmOTJmNzBmMGY5OTVkNjIyMzEwMWM2ZDJiZWY5OGE4OTBlMDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAt
OTksNyArOTksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRn
ZSkKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUywgc3BpbGxGb3JtYXQpOworICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgc3BpbGxGb3JtYXQg
JiBEYXRhRm9ybWF0SlMsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IHNwaWxsRm9ybWF0KTsKQEAgLTE0MCwxMCArMTQwLDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAg
ICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKICAgICAgICAgLy8gdGhpcyB0eXBlIGN1cnJlbnRseSBu
ZXZlciBvY2N1cnMKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5v
ZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3Vy
cmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsICJDb3JydXB0IGRh
dGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAi
Q29ycnVwdCBkYXRhIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKICAg
ICB9CiB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0
QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcKICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAgICAgICAg
IHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAg
ICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIGlkZW50aWZpZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYmFzZUdQUiwgaWRlbnRp
Zmllci5yYXdCaXRzKCkpOwogICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRHZXRCeUlkKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWRXaXRoVGhpcyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
R1BSCiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAgICAgICAg
IERvbnRTcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAg
ICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VH
UFIsIHRoaXNHUFIsIGlkZW50aWZpZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYmFzZUdQ
UiwgdGhpc0dQUiwgaWRlbnRpZmllci5yYXdCaXRzKCkpOwogICAgIH0KICAgICAKICAgICBtX2pp
dC5hZGRHZXRCeUlkV2l0aFRoaXMoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC0yNjMsNyArMjYz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW4KIAogICAgICAgICBHUFJSZWcgbG9jYWxHbG9i
YWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJl
bW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAg
ICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RH
UFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKQEAgLTMxNSw3ICszMTUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9y
VW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTgogCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9i
amVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3Rl
R2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
b2NhbEdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9q
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYXJnR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVH
bG9iYWxPYmplY3RHUFIsIHRha2VuKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBub2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bm9kZSwgImJhZCBub2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC03MTcs
NyArNzE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KTsKICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CiAKLSAgICAgICAgaW50IG51bVVzZWRT
dGFja1Nsb3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIGlu
dCBudW1Vc2VkU3RhY2tTbG90cyA9IG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgICAg
ICAKICAgICAgICAgaWYgKGlzRm9yd2FyZFZhcmFyZ3MpIHsKICAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CkBAIC03NjksNyArNzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbG9hZEFyZ3VtZW50c0dQ
UihJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVCht
X2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsIGlzRmx1c2hlZCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gUmlnaHQgbm93LCBhcmd1bWVudHMgaXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0
ZXIgZmlsZSBpcyBmbHVzaGVkLgogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGFyZ3VtZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZp
cnN0VmFyQXJnT2Zmc2V0KTsKQEAgLTc4Nyw3ICs3ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
SklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7Cisg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXNGbHVzaGVkKCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCiAg
ICAgICAgIGlmIChpc1ZhcmFyZ3MpCkBAIC04MTgsMTQgKzgxOCwxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMg
YWRqdXN0bWVudCBub3cgc2luY2Ugd2Ugd2lsbCBoYXZlIGFscmVhZHkgZW1pdHRlZCBjb2RlIHRo
YXQgcmVsaWVkIG9uIHRoZQogICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIG1fcGFyYW1ldGVy
U2xvdHMuCiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwK
ICAgICAgICAgICAgICAgICAgICAgR3JhcGg6OnBhcmFtZXRlclNsb3RzRm9yQXJnQ291bnQobnVt
QWxsb2NhdGVkQXJncykKLSAgICAgICAgICAgICAgICAgICAgPD0gbV9qaXQuZ3JhcGgoKS5tX3Bh
cmFtZXRlclNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgPD0gbV9ncmFwaC5tX3BhcmFtZXRl
clNsb3RzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9k
ZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUs
IDApOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2Up
OwogICAgICAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogCkBAIC04NDMsMTQgKzg0
MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgIGNhbGxlZS51c2UoKTsKIAogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtYmVy
VGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50KCk7
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2dyYXBoLmZyYW1lUmVnaXN0
ZXJDb3VudCgpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVy
eTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKICAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgo
KS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CiAgICAgICAgICAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdlLm5vZGUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0RpcmVjdCkKICAgICAgICAgICAgICAgICAgICAgdXNlKGFyZ0Vk
Z2UpOwpAQCAtODY3LDcgKzg2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobnVtUGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRT
bG90KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEVkZ2UgYXJn
RWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsg
aV07CiAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwog
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAgICAgICAgICAgICAg
ICAgdXNlKGFyZ0VkZ2UpOwpAQCAtODgxLDcgKzg4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgfQogICAgIAogICAgIGlmICghaXNUYWlsIHx8IGlz
VmFyYXJncyB8fCBpc0ZvcndhcmRWYXJhcmdzKSB7Ci0gICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9
IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CisgICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9
IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0
aGlzLCBjYWxsZWVFZGdlKTsKICAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogCkBA
IC05MjEsNyArOTIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgLy8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0
YWJsaXNoIG91ciBzdGFjawogICAgICAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9y
IHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGggYXJpdHkKICAgICAgICAgLy8gbWlzbWF0Y2ggKHRo
ZSBjYWxsZnJhbWUgaXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4KLSAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMy
KG1fZ3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgfTsKICAgICAKICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKQEAgLTk3OSw3ICs5NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0g
bV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkxpbmtEaXJlY3RDYWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIGNhbGxlZUdQUik7CiAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKCk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAgICAg
bV9qaXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJm1faml0KTsKQEAgLTk5OSw3ICs5OTksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBpZiAo
aXNYODYoKSkKICAgICAgICAgICAgIG1faml0LnBvcChKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRj
aEdQUihjYWxsZWVHUFIpKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtE
aXJlY3RDYWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTGlua0RpcmVjdENhbGwsIFRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwg
Y2FsbGVlR1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgbV9q
aXQuanVtcCgpLmxpbmtUbyhtYWluUGF0aCwgJm1faml0KTsKICAgICAgICAgCkBAIC0xMDkxLDcg
KzEwOTEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVy
bmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRgogICAgICAgICAKICAgICAgICAgRGF0
YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgCi0gICAg
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgKHNwaWxsRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIsIHNwaWxs
Rm9ybWF0KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAoc3Bp
bGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnQz
Miwgc3BpbGxGb3JtYXQpOwogICAgICAgICAKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAKQEAgLTExMjMsNyAr
MTEyMyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMySW50ZXJu
YWwoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5GCiAgICAgfQogCiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlM6IHsKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnRO
b2RlLCAhKHR5cGUgJiBTcGVjSW50NTJBbnkpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX2N1cnJlbnROb2RlLCAhKHR5cGUgJiBTcGVjSW50NTJBbnkpKTsKICAgICAgICAgLy8gQ2hl
Y2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIuCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdw
cigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwpAQCAtMTE4MywxMCArMTE4MywxMCBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKEVkZ2UgZWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRgogICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOgog
ICAgIGNhc2UgRGF0YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQmlnSW50
MzI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFk
IGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2Rl
LCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1h
dCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQg
ZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQogfQpA
QCAtMTIwMSw3ICsxMjAxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50MzJTdHJpY3QoRWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1h
dEludDMyOwogICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbDx0
cnVlPihlZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50MzIpOwotICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludDMyID09IERhdGFGb3Jt
YXRJbnQzMiwgbXVzdEJlRGF0YUZvcm1hdEludDMyKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fY3VycmVudE5vZGUsIG11c3RCZURhdGFGb3JtYXRJbnQzMiA9PSBEYXRhRm9ybWF0SW50MzIs
IG11c3RCZURhdGFGb3JtYXRJbnQzMik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTIz
OCw3ICsxMjM4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50NTIo
RWRnZSBlZGdlLCBEYXRhRm9ybWF0IGRlc2lyZWRGb3JtYXQpCiAgICAgICAgIAogICAgICAgICBE
YXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwogICAgICAgICAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBzcGlsbEZvcm1h
dCA9PSBEYXRhRm9ybWF0SW50NTIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdFN0cmljdElu
dDUyLCBzcGlsbEZvcm1hdCk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50
Tm9kZSwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludDUyIHx8IHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRTdHJpY3RJbnQ1Miwgc3BpbGxGb3JtYXQpOwogICAgICAgICAKICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAg
ICAgICAKQEAgLTEyOTAsNyArMTI5MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludDUyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCBkZXNpcmVkRm9ybWF0KQogICAgIH0K
IAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZhbGlk
R1BSUmVnOwogICAgIH0KIH0KQEAgLTEzMjgsMTEgKzEzMjgsMTEgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSkKICAgICAgICAgRGF0YUZvcm1h
dCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgaWYgKHNwaWxsRm9y
bWF0ICE9IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIERGR19DUkFTSCgKLSAgICAg
ICAgICAgICAgICBtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCB0b0NTdHJpbmcoCisgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgdG9DU3RyaW5nKAogICAgICAgICAg
ICAgICAgICAgICAiRXhwZWN0ZWQgIiwgZWRnZSwgIiB0byBoYXZlIGRvdWJsZSBmb3JtYXQgYnV0
IGluc3RlYWQgaXQgaXMgc3BpbGxlZCBhcyAiLAogICAgICAgICAgICAgICAgICAgICBkYXRhRm9y
bWF0VG9TdHJpbmcoc3BpbGxGb3JtYXQpKS5kYXRhKCkpOwogICAgICAgICB9Ci0gICAgICAgIERG
R19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgc3BpbGxGb3JtYXQgPT0gRGF0
YUZvcm1hdERvdWJsZSwgc3BpbGxGb3JtYXQpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fY3VycmVudE5vZGUsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUsIHNwaWxsRm9y
bWF0KTsKICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0
LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnBy
KTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckRvdWJsZSk7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3VibGUoRWRnZSBlZGdlKQogICAgICAgICByZXR1cm4gZnByOwogICAgIH0K
IAotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUsIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSk7
CisgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCBpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSwgaW5mby5yZWdpc3RlckZvcm1hdCgpKTsKICAgICBG
UFJSZWcgZnByID0gaW5mby5mcHIoKTsKICAgICBtX2ZwcnMubG9jayhmcHIpOwogICAgIHJldHVy
biBmcHI7CkBAIC0xNDE4LDEwICsxNDE4LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUy
OgogICAgIGNhc2UgRGF0YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQmln
SW50MzI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAi
QmFkIGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnRO
b2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZv
cm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1
cHQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQog
fQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbGVhbihFZGdlIGVkZ2UpCiAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybiBncHI7
CiAgICAgICAgIH0KLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnRO
b2RlLCBpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMsIGluZm8uc3BpbGxGb3JtYXQo
KSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgaW5mby5zcGls
bEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTLCBpbmZvLnNwaWxsRm9ybWF0KCkpOwogICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAg
ICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwogCkBAIC0xNDk3LDEwICsxNDk3LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdFN0
cmljdEludDUyOgogICAgIGNhc2UgRGF0YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZv
cm1hdEpTQmlnSW50MzI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVw
dCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9k
ZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7
CiAgICAgfQogfQpAQCAtMTU2Miw3ICsxNTYyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQmlnSW50MzIoRWRnZSBlZGdlKQogICAgICAgICB9CiAKICAgICAgICAgRGF0
YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgREZHX0FT
U0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAoc3BpbGxGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRCaWdJbnQzMiwgc3BpbGxGb3JtYXQp
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsIChzcGlsbEZvcm1h
dCAmIERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEJpZ0ludDMyLCBz
cGlsbEZvcm1hdCk7CiAKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlclNwaWxsZWQpOwogCkBAIC0xNjE1LDEwICsxNjE1LDEwIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJpZ0ludDMyKEVkZ2UgZWRnZSkKICAgICBjYXNl
IERhdGFGb3JtYXRJbnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKICAgICBj
YXNlIERhdGFGb3JtYXRCaWdJbnQzMjoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG1fY3VycmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fY3VycmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVw
dCBkYXRhIGZvcm1hdCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9k
ZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7
CiAgICAgfQogfQpAQCAtMTkyNiw3ICsxOTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvbXBhcmVFcVB0cihOb2RlKiBub2RlKQogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG5vZGUtPmNl
bGxPcGVyYW5kKCktPmNlbGwoKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxsKCkp
LCByZXN1bHRHUFIpOwogICAgIG1faml0LmNvbXBhcmU2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCByZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTk3MCw3ICsxOTcwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIoRWRnZSBub2RlVXNlLCBi
b29sIGludmVydCkKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBo
KCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKSk7CisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNl
bWFudGljKSkpKTsKIAogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygm
bV9qaXQpOwogICAgIH0KQEAgLTIwNjUsNyArMjA2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVUb0Jvb2xlYW4oTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIEZQUlRl
bXBvcmFyeSB0ZW1wRlBSKHRoaXMpOwogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGls
bFZhbGlkKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+
IHNjcmF0Y2g7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKICAg
ICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkgewpAQCAtMjA4Niw3
ICsyMDg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbihOb2RlKiBu
b2RlLCBib29sIGludmVydCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpAQCAtMjEyNSw3ICsyMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwg
QmEKICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAg
ICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
KSk7CisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkp
KTsKIAogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwog
ICAgIH0KQEAgLTIxOTEsNyArMjE5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5
cGVkQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvCiAgICAg
ICAgICAgICBpZiAoIWlzRGVmaW5pdGVseVN0cmluZykKICAgICAgICAgICAgICAgICBza2lwU3Ry
aW5nQ2FzZSA9IG1faml0LmJyYW5jaElmTm90U3RyaW5nKHZhbHVlR1BSKTsKIAotICAgICAgICAg
ICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RU
YWtlbik7CisgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyh2
bSgpKSksIG5vdFRha2VuKTsKICAgICAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAK
ICAgICAgICAgICAgIGlmICghaXNEZWZpbml0ZWx5U3RyaW5nKQpAQCAtMjIxNSw4ICsyMjE1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCcmFuY2goRWRnZSBub2RlVXNlLCBC
YXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG8KICAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkgewogICAgICAgICAgICAgYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwg
dGFrZW4pOwogICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVH
UFIsIHRlbXAxR1BSKTsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmplY3QpLCB0ZW1wMkdQUik7CisgICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgdGVtcDJHUFIp
OwogICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcDFHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCB0ZW1wMkdQUiwgdGFrZW4pOwogICAgICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VK
dW1wKTsKICAgICAgICAgfSBlbHNlCkBAIC0yMzU2LDcgKzIzNTYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBkZWZh
dWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgIkJh
ZCB1c2Uga2luZCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgIH0KIH0KIApAQCAtMjM2OCw3ICsyMzY4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxzdGQ6OnR1cGxlPEoKICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoK
ICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFk
IGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCBhcnJheSBtb2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOiB7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTI0NzQsNyArMjQ3NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxKCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihj
b2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgp
KTsKQEAgLTI4NzAsOSArMjg3MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdF
eHBUZXN0SW5saW5lKE5vZGUqIG5vZGUpCiAjaWYgVVNFKExBUkdFX1RZUEVEX0FSUkFZUykKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aEludDUyU2l6ZShOb2Rl
KiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgIGF1dG8gdHlwZWRBcnJheVR5cGUgPSBub2RlLT50eXBlZEFycmF5
VHlwZSgpOwotICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgo
KS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25j
dXJyZW50bHkodHlwZWRBcnJheVR5cGUpKTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5
U3RydWN0dXJlQ29uY3VycmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoc3RydWN0dXJlLmdldCgpKTsKIAogICAgIFNwZWN1bGF0ZVN0cmljdEludDUyT3BlcmFuZCBz
aXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI5NTQsNyArMjk1NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGlmIGNvbnN0ZXhwciAodmFs
aWRhdGVERkdEb2VzR0MpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRG9lc0dDKCkp
IHsKLSAgICAgICAgICAgIGJvb2wgZXhwZWN0RG9lc0dDID0gZG9lc0dDKG1faml0LmdyYXBoKCks
IG5vZGUpOworICAgICAgICAgICAgYm9vbCBleHBlY3REb2VzR0MgPSBkb2VzR0MobV9ncmFwaCwg
bm9kZSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KFRydXN0ZWRJbW02NChEb2VzR0NDaGVj
azo6ZW5jb2RlKGV4cGVjdERvZXNHQywgbm9kZS0+aW5kZXgoKSwgbm9kZS0+b3AoKSkpLCB2bSgp
LmFkZHJlc3NPZkRvZXNHQygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMTcsNyArMzExNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMzIzNCw3ICszMjM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM1MTYsMTIg
KzM1MTYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6IHsKICAgICAgICAgdW5zaWdu
ZWQgbnVtRXh0cmFBcmdzID0gbnVtRXh0cmFBdG9taWNzQXJncyhub2RlLT5vcCgpKTsKLSAgICAg
ICAgRWRnZSBiYXNlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7Ci0gICAgICAg
IEVkZ2UgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAxKTsKKyAgICAgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CisgICAgICAgIEVkZ2UgaW5k
ZXhFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBhcmdFZGdlc1tt
YXhOdW1FeHRyYUF0b21pY3NBcmdzXTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRXh0
cmFBcmdzOyBpLS07KQotICAgICAgICAgICAgYXJnRWRnZXNbaV0gPSBtX2ppdC5ncmFwaCgpLmNo
aWxkKG5vZGUsIDIgKyBpKTsKLSAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1faml0LmdyYXBo
KCkuY2hpbGQobm9kZSwgMiArIG51bUV4dHJhQXJncyk7CisgICAgICAgICAgICBhcmdFZGdlc1tp
XSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMiArIGkpOworICAgICAgICBFZGdlIHN0b3JhZ2VFZGdl
ID0gbV9ncmFwaC5jaGlsZChub2RlLCAyICsgbnVtRXh0cmFBcmdzKTsKIAogICAgICAgICBHUFJS
ZWcgYmFzZUdQUjsKICAgICAgICAgR1BSUmVnIGluZGV4R1BSOwpAQCAtNDAxMCw3ICs0MDEwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NDI0LDcgKzQ0MjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9u
KCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9
IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4u
dHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5P
d25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUu
Z2V0KCkpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC00NTI1
LDEzICs0NTI1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFsV2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNW
YWx1ZS5ncHIoKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwogICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykp
OwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwpAQCAtNDY3Myw3ICs0NjczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9
IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2Jh
bE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQ
Uik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9j
YWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9q
aXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CkBAIC00ODM1LDcgKzQ4MzUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIHJlc3Vs
dEdQUiwgJnZtKCksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTWFwSGFzaEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlu
cHV0R1BSKTsKICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDg2NCw3ICs0ODY0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGF1
dG8gaXNIZWFwQmlnSW50ID0gbV9qaXQuYnJhbmNoSWZIZWFwQmlnSW50KGlucHV0R1BSKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgICAgIG1faml0LndhbmdzSW50NjRIYXNoKHJlc3VsdEdQUiwgdGVtcEdQUik7Ci0gICAgICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwg
dGhpcywgb3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25D
aGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0R1BSLCAmdm0oKSwgaW5wdXRH
UFIpKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
aXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoSGVhcEJpZ0ludCwgTmVlZFRvU3Bp
bGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUikpOwogICAgICAgICAgICAgICAgIGRvbmUu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgfQpAQCAtNDkxOCw3ICs0OTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzdHJhaWdodEhhc2gubGluaygmbV9q
aXQpOwogICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC53YW5nc0ludDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOwotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25N
YXBIYXNoSGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6
OkNoZWNrTm90TmVlZGVkLCByZXN1bHRHUFIsICZ2bSgpLCBpbnB1dEdQUikpOworICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVy
YXRpb25NYXBIYXNoSGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWly
ZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBp
bnB1dEdQUikpOwogICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAg
IHNsb3dQYXRoLmxpbmsoJm1faml0KTsKQEAgLTUwODEsOSArNTA4MSw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBub3RQcmVzZW50SW5UYWJs
ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
TWFwT2JqZWN0VXNlKQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2ppdC5ncmFwaCgpLCB2bSgpLnNlbnRpbmVsTWFwQnVja2V0KCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCB2bSgpLnNlbnRpbmVsTWFwQnVja2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
aml0LmdyYXBoKCksIHZtKCkuc2VudGluZWxTZXRCdWNrZXQoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHZt
KCkuc2VudGluZWxTZXRCdWNrZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNTQyNCw3ICs1NDI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2Ug
Q2hlY2tWYXJhcmdzOgotICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2ppdC5ncmFw
aCgpLCBub2RlLCBzcGVjdWxhdGUpOworICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBub2RlLCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIApAQCAtNTkzOCw3ICs1OTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgY2FsbFRpZXJVcC5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyaWdnZXJUaWVyVXBOb3dJbkxvb3AsICZ2bSgpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSkpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcmlnZ2VyVGllclVwTm93SW5Mb29wLCBUcnVzdGVkSW1tUHRyKCZ2
bSgpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKICAgICAgICAgICAg
IHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKIAogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtU
byh0b05leHRPcGVyYXRpb24sICZtX2ppdCk7CkBAIC01OTUzLDcgKzU5NTMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9j
b3VudGVyKSk7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZh
bGlkR1BSUmVnKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcmlnZ2VyVGllclVw
Tm93LCAmdm0oKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlclRpZXJV
cE5vdywgVHJ1c3RlZEltbVB0cigmdm0oKSkpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKCk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTU5NjgsNyAr
NTk2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpOwogICAgICAgICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9IG1faml0Lmpp
dENvZGUoKS0+dGllclVwRW50cnlUcmlnZ2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpOwotICAgICAg
ICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAhPSBtX2pp
dC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAhPSBtX2ppdC5qaXRDb2RlKCktPnRp
ZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOwogICAgICAgICBKSVRDb2RlOjpUcmlnZ2VyUmVhc29u
KiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV9qaXQuaml0Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdn
ZXJzLmZpbmQoYnl0ZWNvZGVJbmRleCktPnZhbHVlKTsKICAgICAgICAgc3RhdGljX2Fzc2VydCgh
c3RhdGljX2Nhc3Q8dWludDhfdD4oSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXIp
LCAidGhlIEpJVCBjb2RlIGFzc3VtZXMgbm9uLXplcm8gbWVhbnMgJ2VudGVyJyIpOwogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihKSVRDb2RlOjpUcmlnZ2VyUmVhc29uKSA9PSAxLCAiYnJh
bmNoVGVzdDggYXNzdW1lcyB0aGlzIHNpemUiKTsKQEAgLTU5OTEsNyArNTk5MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG92ZXJmbG93
ZWRDb3VudGVyLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgc2lsZW50U3BpbGwoc2F2ZVBs
YW5zKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlck9TUkVudHJ5
Tm93LCB0ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkp
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlck9TUkVudHJ5Tm93
LCB0ZW1wR1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpKTsKIAogICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dGVtcEdQUikubGlua1RvKHRvTmV4dE9wZXJhdGlvbiwgJm1faml0KTsKQEAgLTYwMTEsNyArNjAx
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IENoZWNrVGllclVwSW5Mb29wOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBj
YXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBub2RlLCAiVW5leHBlY3RlZCB0aWVyLXVwIG5vZGUiKTsKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIHRpZXItdXAgbm9kZSIpOwogICAgICAgICBicmVh
azsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIApAQCAtNjA2Niw3ICs2MDY2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbU5l
d0FycmF5QnVmZmVyOgogICAgIGNhc2UgSWRlbnRpdHlXaXRoUHJvZmlsZToKICAgICBjYXNlIENQ
VUludHJpbnNpYzoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4
cGVjdGVkIG5vZGUiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVj
dGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC02MTUxLDcgKzYxNTEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZXBBbnlJbnQoRWRnZSBlZGdl
KQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oTm9kZSogbm9kZSkK
IHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAyKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wMyh0aGlzKTsKQEAgLTYyMzUsNyArNjIz
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEYXRlR2V0KE5vZGUqIG5vZGUpCiAg
ICAgICAgIGNhbGxiYWNrKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgbV9qaXQu
Ym94SW50MzIocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MpOwogCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVl
ZGVkLCByZXN1bHRSZWdzLCAmdm0oKSwgYmFzZUdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sIE5lZWRUb1Nw
aWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cigmdm0oKSksIGJhc2VHUFIpKTsKIAogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNzhkNTJjZjViYWFkNTA3YmNkMTc5YzZiMWJh
MDc1OTBjMTFiMTU3Yy4uNmE0YmUyNDBhNjc5Njc5OTRmZjI3YTZmY2JhZmUyMmIzYzFmNWY5NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAt
MjQ0MiwxMSArMjQ0MiwxMSBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0
Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG93UGF0aENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBz
ZW1hbnRpY05vZGVPcmlnaW4sIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0u
Z3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xv
d1BhdGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNO
b2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0u
Z3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2Fs
bCA9IGNhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0yNDY2LDcgKzI0
NjYsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9k
ZU9yaWdpbiwgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAgICAg
ICAgICB9CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTI1NTMsMTEgKzI1NTMsMTEg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0
ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2lu
LCBleGNlcHRpb25zLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBh
dGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0u
Z3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwu
Y2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTbG93UGF0aENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oKnN0YXRlLCBw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5n
cHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCks
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2Rl
T3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNh
bGwuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0yNTc3LDcgKzI1NzcsNyBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3Rh
dGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdp
biwgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFt
c1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLCBwYXJhbXNbMV0uZ3ByKCksIHBh
cmFtc1syXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCkBAIC00MDY3LDEzICs0MDY3LDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0R1BSLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGVTZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1
YkluZm8oKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7
CkBAIC00MjI1LDEzICs0MjI1LDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVT
ZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdp
biksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiwgYmFzZUdQUiwgYnJhbmRHUFIpLmNh
bGwoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRl
LCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBhcHByb3ByaWF0ZVBy
aXZhdGVBY2Nlc3NGdW5jdGlvbihhY2Nlc3NUeXBlKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1h
bnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3Jp
Z2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgYmFzZUdQUiwgYnJhbmRHUFIpLmNhbGwoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwg
JmppdCk7CkBAIC00MzcwLDEzICs0MzcwLDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQs
IG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRp
Y09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2lu
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVH
UFIsIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNh
bGwoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRl
LCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIElu
dmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmds
b2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2VuZXJhdG9yLT5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAtNDcyNSwxNCArNDcyNSwxNCBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4p
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIHBhcmFtc1sx
XS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigp
LCBpZGVudGlmaWVyLnJhd0JpdHMoKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFt
cy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgZ2VuZXJhdG9yLT5z
bG93UGF0aEZ1bmN0aW9uKCksIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNP
cmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBpZGVudGlmaWVy
LnJhd0JpdHMoKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTUxMSwx
MyArNTUxMSwxMyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRp
Y09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGJhc2VHUFIsIHByb3BlcnR5R1BSKS5jYWxs
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFu
dGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCks
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNP
cmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmln
aW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQp
OwpAQCAtNTg2MywxMyArNTg2MywxMyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAg
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
R1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uLCBJbnZhbGlkR1BSUmVnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGVTZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVy
YXRvci0+c3R1YkluZm8oKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSku
Y2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGppdC5q
dW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAtNjI2OSwxNCArNjI2OSwxNCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmV0dXJuR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmln
aW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3Jp
Z2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBiYXNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHQsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGVjbWFNb2RlKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3B0aW1pemF0
aW9uRnVuY3Rpb24sIHJldHVybkdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbikpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3Vic2NyaXB0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihlY21hTW9kZSkp
LmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTY5ODgsNyArNjk4OCw3IEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBs
YXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9u
PiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwgJnZtLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3Rp
dmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldh
dGNocG9pbnQ7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sIG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCAmdm0sIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzKTsKQEAgLTcxMzUsNyArNzEzNSw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xv
d1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLCAmdm0sCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKICAgICAg
ICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7CkBAIC03MzI5LDcgKzczMjksNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPT0gT2JqZWN0S2V5cyA/IG9w
ZXJhdGlvbk9iamVjdEtleXNPYmplY3QgOiBvcGVyYXRpb25PYmplY3RHZXRPd25Qcm9wZXJ0eU5h
bWVzT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9PSBP
YmplY3RLZXlzID8gb3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCA6IG9wZXJhdGlvbk9iamVjdEdl
dE93blByb3BlcnR5TmFtZXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIG9iamVj
dCk7CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcihzbG93UmVzdWx0VmFsdWUpOwpAQCAtNzQ3Miw3ICs3NDcyLDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZt
LCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk5ld1N0cmluZ09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSk7
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgc3RyaW5nKTsKQEAgLTgzNzUsNyArODM3NSw3
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRW
YWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0
eXBlZEFycmF5VHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAor
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBl
KHR5cGVkQXJyYXlUeXBlKSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJl
Y3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsK
ICAgICAgICAgICAgIH0sCkBAIC04ODUwLDcgKzg4NTAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklO
R1NfRU5ECiAgICAgICAgICAgICBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAg
ICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9iYWxP
YmplY3QsIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKICAg
ICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFdKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtODg1OCw3ICs4ODU4LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAm
dm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtl
Um9wZTMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9w
ZTMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzNdLmRpcmVjdEdQ
UigpKTsKICAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFdLCBraWRzWzJdKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTQ5MSw3ICs5NDkxLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIEludmFsaWRHUFJSZWcsICZ2
bSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNldCkpOworICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApA
QCAtMTA4OTIsNyArMTA4OTIsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9udFRo
cm93ID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpPihqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZh
cmFyZ3MpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSkpOwogICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24oaml0LnZtKCkpOwogICAgICAgICAgICAgICAgICAgICBj
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFy
Z3MpOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NU
aHJvd2luZ1BhdGhEaWROb3RUaHJvdyk7CkBAIC0xMTE1NSw3ICsxMTE1NSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKT4oaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dG
b3JWYXJhcmdzKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpKTsKICAgICAgICAgICAgICAgICAg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKGppdC52bSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCgqKSgpPihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERpZE5vdFRocm93KTsKQEAg
LTExMTYzLDcgKzExMTYzLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3Jp
Z2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25TaXplRnJhbWVGb3JWYXJhcmdzKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
c2VtYW50aWNOb2RlT3JpZ2luKSwgYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3MpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIGFyZ3VtZW50c0dQUiwgc2NyYXRj
aEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0
KSk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbihqaXQudm0o
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9j
YXN0PHZvaWQoKikoKT4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOwogCkBAIC0xMTE3
Miw3ICsxMTE3Miw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGFyZ3VtZW50c0dQUik7CiAg
ICAgICAgICAgICAgICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwg
ZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1pbmltdW1KU0NhbGxBcmVhU2l6
ZSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50
aWNOb2RlT3JpZ2luKSwgc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25TZXR1
cFZhcmFyZ3NGcmFtZSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgc2NyYXRjaEdQUjIsIGFy
Z3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbihqaXQudm0oKSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQoKikoKT4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJh
bWUpKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMTMyMCw3ICsxMTMyMCw3IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICByZXF1aXJlZEJ5dGVzID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgcmVxdWlyZWRCeXRl
cyk7CiAgICAgICAgICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihyZXF1aXJlZEJ5dGVzKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZWNtYU1v
ZGUpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxFdmFsKT4oZ2xvYmFsT2JqZWN0LCBHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25DYWxsRXZhbCk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAg
ICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAgICAgICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbkNhbGxFdmFsKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uQXJndW1lbnRHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwpAQCAtMTI5MzksMTMgKzEyOTM5LDEz
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGpp
dCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy5nZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXR1cm5HUFIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXR1cm5H
UFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVy
YXRvci0+c3R1YkluZm8oKSksIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0x
Mjk1NSwxNCArMTI5NTUsMTQgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIHJldHVybkdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgYmFzZSwgc3Vic2NyaXB0KS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2Rl
T3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgb3B0aW1pemF0aW9uRnVuY3Rpb24sIHJldHVybkdQUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFu
dGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
c2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSwgYmFzZSwgc3Vic2NyaXB0KS5jYWxsKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTMyNTUsMTQgKzEzMjU1LDE0IEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFt
cy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIHZhbHVlR1BSLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVHUFIpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRp
Y05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGlj
Tm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHZhbHVlR1BSLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVHUFIpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzOTg2LDcgKzEzOTg2LDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKHZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25O
ZXdPYmplY3RXaXRoQnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
ICZ2bSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUuZ2V0KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3Ro
LCBidXR0ZXJmbHlWYWx1ZSk7CkBAIC0xMzk5NCw3ICsxMzk5NCw3IEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgc2xvd09iamVjdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKHZtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmpl
Y3RXaXRoQnV0dGVyZmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZt
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5
VmFsdWUpOwpAQCAtMTQxOTQsNyArMTQxOTQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAg
Wz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExh
enlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVB
Y3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSks
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CkBAIC0x
NDI2MSw3ICsxNDI2MSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZh
bHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCAmdm0sCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3IoY2FsbFJlc3VsdCk7CkBAIC0xNDMyMSw3ICsxNDMyMSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgbGF6
eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sIG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBJ
bnZhbGlkR1BSUmVnLCBnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwgb3BlcmF0aW9uSGFuZGxlVHJhcHMsIEludmFsaWRHUFJS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAt
MTQ1ODgsNyArMTQ1ODgsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExW
YWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZt
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhM
YXN0SW5kZXgsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3Qp
LAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVnZXhw
Q2VsbCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICB9LCBsYXN0SW5k
ZXgpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNs
b3dSZXN1bHRWYWx1ZSk7CkBAIC0xNTA2MCwxMyArMTUwNjAsMTMgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksICZ2bSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pKTsKICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dCdXR0ZXJm
bHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKHZtLAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQ
cm9wZXJ0eVN0b3JhZ2UsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSks
CiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6
ZUluVmFsdWVzKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTE1MTQ5LDE0
ICsxNTE0OSwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
aml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcGFyYW1zWzBdLmdwcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvR1BSLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVudGlmaWVyLnJh
d0JpdHMoKSkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCBwYXJh
bXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRv
ci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIucmF3Qml0cygp
KSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTUyMzksMTQgKzE1MjM5
LDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNl
bWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9ucy5nZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBwYXJhbXNbMF0uZ3ByKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm9HUFIsIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRl
bnRpZmllci5yYXdCaXRzKCkpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5j
dGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGlkZW50aWZpZXIucmF3Qml0cygpKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTY2MDMsMTQgKzE2NjAzLDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19F
TkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rp
b24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2Vt
YW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1syXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSk7CkBAIC0xNjY2Nyw3ICsxNjY2Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBz
ZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGlj
Tm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9k
ZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwg
cGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGRvbmUsICZqaXQpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTE2NzMxLDcgKzE2
NzMxLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0
aW9uLCBwYXJhbXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTY5OTYsNyArMTY5OTYsNyBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1Bh
dGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRp
b25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3Ioc2xvd1Jlc3VsdFZhbHVlKTsKQEAgLTE3MTE5LDcgKzE3MTE5LDcgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRo
KAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2Nh
dGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25z
WzNdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseVZhbHVlKTsKQEAgLTE3MTI3LDcg
KzE3MTI3LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgc2xvd1Jl
c3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25z
dCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6Okdl
bmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kSGludCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9iYWxPYmplY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kSGludCwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIo
KSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbM10uZGlyZWN0R1BSKCksIGxv
Y2F0aW9uc1s0XS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZs
eVZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAppbmRleCA3YjVhYjJkY2U2MTNmZTBiZjQyNWRmZTg1Y2JlZTE2OTI4OGJjMTQ0Li44
ZjFhNGJmNjBhNWYyNjlmN2FkZjk0NDUwNmVkMjQ5NWMzNjdiZjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC01ODYsNyArNTg2
LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJ
VENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIGlmIChleGl0Lm1fY29kZU9yaWdp
bi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CiAgICAgICAgIEVuY29k
ZWRKU1ZhbHVlKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5tX3Zh
bHVlcy50bXBJbmRleCgwKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0
Y2gpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJp
YWxpemVPU1JFeGl0U2lkZVN0YXRlKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmZXhpdCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0bXBTY3JhdGNoKSk7CiAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2
bSk7CiAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRl
U3RhdGUpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAKaW5kZXggY2FjNjk1NmRhOTdkYzkxYTRjYjhiM2FlZDYxZmFmZjM3
YzM4NWYyNC4uNTNkOGQxZWE2YWU3YWY3MzQ3OGJjNmIxMTEzNjFhOGZlZTNlYzk1NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcApAQCAtNzUsMTEgKzc1LDYg
QEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmUKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwogfQogCi12b2lkIENDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywg
Y2FsbFNpdGVJbmRleCk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
CiB7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhp
c1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKaW5kZXggYjRiOWMzYzBhMWZhNmYyMzdmY2NhMDRiMmE4
NzdiZjIzNGU2YWE2Mi4uMGZmY2E0MzdkZmI2NGFhNDc3MzI2ZTdjNDhiODMxZTc0MzY1YzAzYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCkBAIC02MzAsOCArNjMw
LDcgQEAgY2xhc3MgQ0NhbGxIZWxwZXJzIDogcHVibGljIEFzc2VtYmx5SGVscGVycyB7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgbnVtR1BSQXJncywgdW5z
aWduZWQgbnVtR1BSU291cmNlcywgdW5zaWduZWQgbnVtRlBSQXJncywgdW5zaWduZWQgbnVtRlBS
U291cmNlcywgdW5zaWduZWQgbnVtQ3Jvc3NTb3VyY2VzLCB1bnNpZ25lZCBleHRyYUdQUkFyZ3Ms
IHVuc2lnbmVkIG5vbkFyZ0dQUnMsIHVuc2lnbmVkIGV4dHJhUG9rZSwgdHlwZW5hbWUgQXJnLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgIEFMV0FZU19JTkxJTkUgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgc3RkOjppc19wb2ludGVyPENVUlJFTlRfQVJHVU1FTlRfVFlQRT46OnZhbHVlCi0gICAg
ICAgICYmICgoc3RkOjppc19wb2ludGVyPEFyZz46OnZhbHVlICYmIHN0ZDo6aXNfY29udmVydGli
bGU8c3RkOjpyZW1vdmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8QXJnPj4qLCBDVVJS
RU5UX0FSR1VNRU5UX1RZUEU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHx8IHN0ZDo6aXNfc2FtZTxB
cmcsIHN0ZDo6bnVsbHB0cl90Pjo6dmFsdWUpPgorICAgICAgICAmJiBzdGQ6OmlzX3NhbWU8QXJn
LCBzdGQ6Om51bGxwdHJfdD46OnZhbHVlPgogICAgIHNldHVwQXJndW1lbnRzSW1wbChBcmdDb2xs
ZWN0aW9uPG51bUdQUkFyZ3MsIG51bUdQUlNvdXJjZXMsIG51bUZQUkFyZ3MsIG51bUZQUlNvdXJj
ZXMsIG51bUNyb3NzU291cmNlcywgZXh0cmFHUFJBcmdzLCBub25BcmdHUFJzLCBleHRyYVBva2U+
IGFyZ1NvdXJjZVJlZ3MsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIHNl
dHVwQXJndW1lbnRzSW1wbDxPcGVyYXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBUcnVzdGVkSW1t
UHRyKGFyZyksIGFyZ3MuLi4pOwpAQCAtODUzLDcgKzg1Miw2IEBAIGNsYXNzIENDYWxsSGVscGVy
cyA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVC
bG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwogcHVibGlj
OgotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CiAgICAgdm9pZCBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOwogCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3
ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCmluZGV4IGYzOWI3MWM0OTAyMGQ1YjY4MWEzYWNjMTNlZGZlYzFlN2Y5YWM5ZjMuLjcxYWIx
NzY0NzBhNzA4M2Y5ZTk4YWZkMzM4MDY4NWM0NmIzMmIwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2soKQogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1pemUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk9wdGltaXplLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhp
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAw
NTM3N2I4MjA1ODFlYWJmYWU4MjllZjRmNWNiMDgyMDE5MTVhMzBiLi40ZWQ0NzUxYTcxN2M5YWYy
YzEyZmRjODNkNDJlOGQ0ZDBhZDUzMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3RydWN0
aW9uKgogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamVjdEdQUiwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNSZWdzKTsKICAg
ICB9IGVsc2UKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSlNJbnN0cnVjdGlvbgogICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBn
bG9iYWxPYmplY3RHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBnbG9iYWxPYmplY3RHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
YXJpdGhQcm9maWxlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCkBAIC04NDQsNyArODQ0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgY29uc3QgSlNJbnN0cnVjdGlvbioKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCiAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBnbG9iYWxPYmpldEdQUiwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamV0R1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKGFyaXRoUHJvZmlsZSkpOwogICAgIH0gZWxzZQogICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSlNJbnN0cnVjdGlvbgogICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKICAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxlKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXgg
ZmY0ODQxMzFjNmRmZjBlZTJlOWM4ZDMwYTM3YWQxYWJhY2UxZGU2OS4uNTFmYzE5Nzg3OTc3YTUz
ZjA2NTE1ODgxOTM2YzI4YzkzYmQwOTZhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1
Y3R1cmVSZWcpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5l
d09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZVJlZyk7CiAgICAgYm94Q2Vs
bChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkJh
c2VsaW5lSklURGF0YSgpKSwgc19jb25zdGFudHNHUFIpOwogICAgIH0KIAotICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgJnZtKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgVHJ1c3RlZEltbVB0
cigmdm0oKSkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0o
KSk7CiAgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKQEAgLTEwMzQsNyArMTAz
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2Nh
bHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVt
cChyZWdUMiwgSlNTd2l0Y2hQdHJUYWcpOwogCiAgICAgbm90SW50MzIubGluayh0aGlzKTsKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsICZ2bSgpLCBqc1JlZ1QxMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwganNSZWdUMTAsIHRh
YmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTI2Miw3ICsxMjYyLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0
b3IoVk0mIHZtKQogICAgIGppdC5zdWJQdHIoVHJ1c3RlZEltbVB0cigxNiksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBqaXQuc3RvcmVQdHIoY2FuQmVPcHRpbWl6ZWRHUFIsIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGFyZ3VtZW50R1BSMSk7CiAgICAgQ2FsbCBvcGVyYXRp
b25Xcml0ZUJhcnJpZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBjYW5CZU9wdGltaXplZEdQ
Uik7IC8vIFJlc3RvcmUgY2FuQmVPcHRpbWl6ZWRHUFIKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVi
dWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
YnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIApAQCAtMTQ5Myw3ICsxNDkzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjwKIAogICAgICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVz
RnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25PcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgICAgIEp1bXAg
bm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwog
ICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKICAgICAgICAgICAgIEp1bXAgb2sgPSBicmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKQEAg
LTE1NzcsNyArMTU3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSlNJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRH
UFIwOwogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIFRydXN0ZWRJbW1QdHIoanNDYXN0PFJlZ0V4cCo+
KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKSk7CiAgICAgYm94Q2Vs
bChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CkBAIC0xNTk0LDE0ICsxNTk0LDE0IEBAIHZv
aWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCBUcnVzdGVk
SW1tUHRyKCZ2bSgpKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MzcsMTQgKzE2Mzcs
MTQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBKU0luc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
VHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgfQogfQogCkBAIC0xNzU3LDcgKzE3NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0b3Jl
UHRyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRy
eU9mZnNldCgpKSk7CiAgICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QzLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkp
KTsKICAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4K
LSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVBy
b2ZpbGVyTG9nLCAmdm0oKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgVHJ1c3RlZEltbVB0cigmdm0oKSkpOwogICAg
IHNraXBDbGVhckxvZy5saW5rKHRoaXMpOwogCiAgICAganVtcFRvRW5kLmxpbmsodGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4
IGQ0MmFjODAzOGUzNWU0MDI2MGE3MTYyZmRiZjg3MmQ1ODY1OTAzOWQuLjc0ZjQ5OWRjN2E1ZjI5
MTc5NTZiMDlhYTRmNDk0YzlmZWFjOTFhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC01OTcsNyArNTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJl
Z1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSksIG9wdGlv
bnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjA4LDcgKzYw
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEpT
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjUyMCw3ICsyNTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmly
dHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmEKICAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpTUik7CiAKICAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHRtcEpTUi5wYXls
b2FkR1BSKCksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHRtcEpTUi5wYXlsb2FkR1BSKCkpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgdG1wSlNSLnBheWxvYWRHUFIoKSk7CiAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKQEAg
LTI1MzgsMTQgKzI1MzgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJl
Z2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyKQogewogICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCks
IG93bmVyKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIFRydXN0ZWRJbW1QdHIob3du
ZXIpKTsKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKIHsKICAgICBKdW1wIG93bmVy
SXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RT
Y3JhdGNoR1BSKG93bmVyKSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBvd25lcik7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAKaW5kZXggN2IwMTQ4YjkxZGM1ODQwNzk5ZTBiZTU1ZGVlMWIzYWE3OTI3NTRjZi4uNmI5ZWJh
YzAzMWQxYzk3ZjM2NmJmMmJlZjBiNWI3YjVlOTM0YmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMzkzLDcgKzM5Myw3IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvSlMoVk0mIHZtCiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uod2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3Rh
bmNlR1BSLCAmc2lnbmF0dXJlLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25JdGVyYXRl
UmVzdWx0cyk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmc2lnbmF0dXJlKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIp
OwogICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzKSk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKIAo=
</data>
<flag name="commit-queue"
          id="485138"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456738</attachid>
            <date>2022-04-05 13:30:13 -0700</date>
            <delta_ts>2022-04-05 14:04:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238827-20220405133012.patch</filename>
            <type>text/plain</type>
            <size>253274</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
M2E2MDYwN2UwYzM2ZDYyZWYzYjU5ZDZkNzhlNzhkZmYxOWI0ZjE4Li45NTYwZTZhOGI1NWVjYWNm
ZDMxOGM4Y2VlNjA2ZjMzMzRlNzE3ZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDggQEAKKzIwMjItMDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBTdHJpY3RseSBhbm5vdGF0ZSBwb2ludGVycyB3aXRoIFRydXN0
ZWRJbW1QdHIgaW4gQ0NhbGxIZWxwZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzg4MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBkZXRlY3QgcG9pbnRlciB1c2UgaW4g
REZHIGVhc3kuIFRoaXMgaXMgaW1wb3J0YW50IGluIHVubGlua2VkIERGRyBkZXZlbG9wbWVudC4K
KyAgICAgICAgV2UgYWxzbyBjb25zaXN0ZW50bHkgdXNlIG1fZ3JhcGggaW5zdGVhZCBvZiBtX2pp
dC5ncmFwaCgpIGluIERGRzo6U3BlY3VsYXRpdmVKSVQuCisKKyAgICAgICAgV2UgYWxzbyBwdXJn
ZSBDb2RlQmxvY2sqIGVtYmVkZGluZyBpbiBERkcgY29kZSBjb21wbGV0ZWx5LiBOb3cgd2UgbG9h
ZCBpdCBmcm9tIHRoZSBjZnIKKyAgICAgICAgaW5zdGVhZCAoY29tcGlsZUxvZ1NoYWRvd0NoaWNr
ZW5UYWlsIGFuZCBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24p
LgorCisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBkZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmg6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNv
bXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpvc3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEdldENhbGxlZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPU1JF
eGl0RnV6ekNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNh
dmVQbGFuRm9yR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlJZEZsdXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlWYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5CeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzUHJpdmF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdTbGljZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb29wSGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNoZWNrVHJhcHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVDbGFtcERvdWJsZVRvQnl0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Omp1bXBGb3JUeXBlZEFycmF5T3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bmV4dEJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjppZGVudGlmaWVyVUlEKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZU51bGxPclVuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMlN0cmlj
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQ1
Mik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJp
Z0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbXBh
cmVFcVB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jv
b2xlYW5PYmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdFVudHlwZWRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d1R5cGVkQXJyYXlXaXRoSW50NTJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aFJhbmRvbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEYXRlR2V0KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVVuYXJ5TWF0aElDKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUJpbmFyeU1hdGhJQyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmdldFByaXZhdGVOYW1lKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVByaXZhdGVCcmFuZEFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRQ
cml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNhY2hl
ZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
R2V0QnlWYWxJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZURlbEJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlTmV3RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU9iamVjdEtleXNPck9iamVjdEdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3
U3RyaW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZW1p
dE5ld1R5cGVkQXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAg
ICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6
CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c3RkOjppc19wb2ludGVyPENVUlJFTlRfQVJH
VU1FTlRfVFlQRT46OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICog
aml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgICogaml0L0pJ
VE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfaGFuZGxl
ckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9u
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pT
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDIyLTA0LTA0ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVkdWNlIHNp
emVvZihCYXNlbGluZUNhbGxMaW5rSW5mbykgdG8gbWFrZSBidWcgMjM4NTM1IGdvb2QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2Vu
ZXJhdG9yLmgKaW5kZXggZTk3OGI2ZjgwODA3MzI4MmVmYWI0YzJhZDk4ZjExNTE4NDRiYjZkNy4u
NjBmMzkwYjE0MDQ5YjBmZjA0YWRjOGY1ZjU4MWVlMmRhY2Q0OWIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmgKQEAgLTk0LDE3ICs5NCwxNyBAQCBjbGFzcyBBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0FzcwogICAgICAgICBW
TSYgdm0gPSBqaXQtPnZtKCk7CiAgICAgICAgIHN3aXRjaCAobV9hcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyLCBtX3RlbXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKKyAg
ICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVJbnQzMiwgbV90ZW1w
R1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jhc2VHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAg
IGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3VibGUsIG1fdGVtcEdQUiwgJnZt
LCBtX2Jhc2VHUFIpOworICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
c3VyZURvdWJsZSwgbV90ZW1wR1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0p
LCBtX2Jhc2VHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6Ci0gICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJl
Q29udGlndW91cywgbV90ZW1wR1BSLCAmdm0sIG1fYmFzZUdQUik7CisgICAgICAgICAgICBqaXQt
PmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgbV90ZW1wR1BSLCBTcGVj
dWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jhc2VHUFIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIG1fdGVtcEdQUiwgJnZtLCBtX2Jhc2VHUFIp
OworICAgICAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3Rv
cmFnZSwgbV90ZW1wR1BSLCBTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZEltbVB0cigmdm0pLCBtX2Jh
c2VHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oCmluZGV4IDIzZmQ0
NTQ3YzU5YjkyYTkzNDM3NDJhNTg0ZjdkZGNkZjI5MWY5ZWIuLmNmMGI4OTg1NDVkMWNhNWRlYTk2
MzRmNWYyMjU3OGY1Y2I5ZTc5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9y
LmgKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IgZmluYWwgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG8KICAgICAgICAgbGlu
a0Zyb20oaml0KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwotICAg
ICAgICBqaXQtPmNhbGxPcGVyYXRpb24obV9mdW5jdGlvbiwgbV9yZXN1bHRHUFIsICZqaXQtPnZt
KCksIG1fc3RydWN0dXJlLCBtX3NpemUsIG1fc3RvcmFnZUdQUik7CisgICAgICAgIGppdC0+Y2Fs
bE9wZXJhdGlvbihtX2Z1bmN0aW9uLCBtX3Jlc3VsdEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0
ZWRJbW1QdHIoJmppdC0+dm0oKSksIG1fc3RydWN0dXJlLCBtX3NpemUsIG1fc3RvcmFnZUdQUik7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAgICAg
ICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPm1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5l
cmF0b3IuaAppbmRleCAzMDIwNTAzOGQyYTNkNDYxODRiYzc2NmEwMDdhZGU3N2IzMzhkNjI2Li5m
MGFiMDc0NDE1NTAxNTczOWE0MzgwY2YzOThiNjg0MGU5MGIyNGIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0
aEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbENyZWF0
ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xh
c3MgQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yIGZpbmFsIDogcHVi
bGljIEp1bXBpbmdTbG93UGF0aEcKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
cGxhbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNb
aV0pOwogICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICBvcGVyYXRpb25D
cmVhdGVEaXJlY3RBcmd1bWVudHMsIG1fcmVzdWx0R1BSLCAmaml0LT52bSgpLCBtX3N0cnVjdHVy
ZSwgbV9sZW5ndGhHUFIsIG1fbWluQ2FwYWNpdHkpOworICAgICAgICAgICAgb3BlcmF0aW9uQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzLCBtX3Jlc3VsdEdQUiwgU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJ
bW1QdHIoJmppdC0+dm0oKSksIG1fc3RydWN0dXJlLCBtX2xlbmd0aEdQUiwgbV9taW5DYXBhY2l0
eSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAg
ICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPm1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCmluZGV4IDRmY2Q0ZDM4NmIyNDIxNzgxYWY3MzljYTUzMjg4ZmE1OWYwZTkwMGIu
LjNkZDlhZDY5ZmI5N2RjMjlhZTNkYjg0NjU0ODIzN2JiNzNmM2VlNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0zNDYsNyArMzQ2LDggQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKLSAgICBtX3NwZWN1bGF0aXZlLT5jYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJs
b2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2ssIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgbV9zcGVjdWxhdGl2ZS0+Y2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogCiAgICAgLy8gR2Vu
ZXJhdGUgc2xvdyBwYXRoIGNvZGUuCiAgICAgbV9zcGVjdWxhdGl2ZS0+cnVuU2xvd1BhdGhHZW5l
cmF0b3JzKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKTsKQEAgLTQxOSw3ICs0MjAsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nh
c3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogCi0gICAgbV9zcGVjdWxhdGl2ZS0+Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBt
X2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIG1fc3BlY3VsYXRp
dmUtPmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAK
ICAgICAvLyBUaGUgZmFzdCBlbnRyeSBwb2ludCBpbnRvIGEgZnVuY3Rpb24gZG9lcyBub3QgY2hl
Y2sgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgIC8vIGhhdmUgYmVlbiBwYXNz
ZWQgdG8gdGhlIGNhbGwgKHdlIG9ubHkgdXNlIHRoZSBmYXN0IGVudHJ5IHBvaW50IHdoZXJlIHdl
IGNhbiBzdGF0aWNhbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApp
bmRleCA4YjEwZGIyYWY1MmM3NjdlYzEyZmE0ZDIxNGU3NGZkZWIzZjdhMjQ2Li4yNDMyNmE2ODBi
MjhlOTU2ZDI2NTZkNDIyMzE1YmFmMzYwNzQzMDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCBPU1JFeGl0OjpPU1JFeGl0KEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5n
QVZhbAogewogICAgIGJvb2wgY2FuRXhpdCA9IGppdC0+bV9vcmlnaW4uZXhpdE9LOwogICAgIGlm
ICghY2FuRXhpdCAmJiBqaXQtPm1fY3VycmVudE5vZGUpIHsKLSAgICAgICAgRXhpdE1vZGUgZXhp
dE1vZGUgPSBtYXlFeGl0KGppdC0+bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlKTsK
KyAgICAgICAgRXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KGppdC0+bV9ncmFwaCwgaml0LT5t
X2N1cnJlbnROb2RlKTsKICAgICAgICAgY2FuRXhpdCA9IGV4aXRNb2RlID09IEV4aXRNb2RlOjpF
eGl0cyB8fCBleGl0TW9kZSA9PSBFeGl0TW9kZTo6RXhpdHNGb3JFeGNlcHRpb25zOwogICAgIH0K
LSAgICBERkdfQVNTRVJUKGppdC0+bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlLCBj
YW5FeGl0KTsKKyAgICBERkdfQVNTRVJUKGppdC0+bV9ncmFwaCwgaml0LT5tX2N1cnJlbnROb2Rl
LCBjYW5FeGl0KTsKIH0KIAogQ29kZUxvY2F0aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JF
eGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKCkgY29uc3QKQEAgLTc0Nyw3ICs3NDcsNyBAQCB2
b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0
IE9TUkV4aXQmIGV4aXQsIGNvbnN0CiAKICAgICBpZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2
ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3Jh
dGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0
LCB0bXBTY3JhdGNoKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodG1wU2NyYXRjaCkpOwogICAgICAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOwogICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTWF0ZXJpYWxpemVP
U1JFeGl0U2lkZVN0YXRlKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4
IDU4NGZmZDg4NTZiMThjNzc2OGJjYTJkMzc5NWU5MGU4MzMxZTIxMDkuLjNkN2NiOGMwMTE5YmNj
ODIxODhjODA3YzkzNWExZjU2NTU3NzMwNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTM0Myw3ICszNDMs
NyBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYQogewogICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVu
Y2Uob3duZXIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9T
UldyaXRlQmFycmllcik+KCZ2bSwgb3duZXIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgb3duZXIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gpOwogICAgIGpp
dC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDE0NzZiNGU4Mzg0YjM3ZmY5YmRh
NDczM2Y1MTE4ZmVhZjFiN2M1MDguLmY1N2I5NTA5YzFhYzFmM2JjNmJjZGNkY2ZlZTRmNGVlZTJl
N2U4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCkBAIC03OSwxMCArNzksMTAgQEAgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklU
KEpJVENvbXBpbGVyJiBqaXQpCiAgICAgLCBtX2N1cnJlbnROb2RlKG51bGxwdHIpCiAgICAgLCBt
X2xhc3RHZW5lcmF0ZWROb2RlKExhc3ROb2RlVHlwZSkKICAgICAsIG1faW5kZXhJbkJsb2NrKDAp
Ci0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50
KCkpCisgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1fZ3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCkp
CiAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgLCBtX3N0YXRlKG1faml0LmdyYXBoKCkp
Ci0gICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCisgICAgLCBtX3N0
YXRlKG1fZ3JhcGgpCisgICAgLCBtX2ludGVycHJldGVyKG1fZ3JhcGgsIG1fc3RhdGUpCiAgICAg
LCBtX3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1f
bWluaWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCiB7CkBAIC0yMDcsNyAr
MjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldENhbGxlZShDb2RlT3JpZ2luIG9y
aWdpbiwgR1BSUmVnIGNhbGxlZUdQUikKICAgICAgICAgICAgICAgICBjYWxsZWVHUFIpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKLSAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAorICAgICAgICAgICAgICAgIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
UmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSksCiAgICAgICAgICAgICAgICAgY2FsbGVlR1BS
KTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRHZXRBcmd1bWVudFN0YXJ0KENvZGVPcmlnaW4gb3JpZ2luLCBHUFJSZWcg
c3RhcnRHUFIpCiBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9TUkV4
aXRGdXp6Q2hlY2soKQogewogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRXhpdEZ1enooKQotICAg
ICAgICB8fCAhY2FuVXNlT1NSRXhpdEZ1enppbmcobV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0ZvcihtX29yaWdpbi5zZW1hbnRpYykpCisgICAgICAgIHx8ICFjYW5Vc2VPU1JFeGl0RnV6
emluZyhtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fb3JpZ2luLnNlbWFudGljKSkKICAg
ICAgICAgfHwgIWRvT1NSRXhpdEZ1enppbmcoKSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyOjpKdW1wKCk7CiAgICAgCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKLSAgICBtX2pp
dC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgo
KS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZUZvcihtX2N1cnJlbnROb2RlLCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZQogICAgICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhteUp1bXBzVG9GYWls
KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwp
OwotICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9k
ZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBtX2ppdC5hcHBlbmRPU1JF
eGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpKSk7CiB9CiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBO
b2RlKiBub2RlKQpAQCAtMjk0LDcgKzI5NCw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvCiAg
ICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBtX2ppdC5tX29zckV4aXQuc2l6ZSgpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7
Ci0gICAgbV9qaXQuYXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1f
aml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihtX2N1cnJlbnROb2Rl
LCBub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwgbm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXpl
KCkpKTsKICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcihpbmRleCk7CiB9CiAKQEAg
LTMxOSw3ICszMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1faml0LmFwcGVuZFNwZWN1bGF0aW9uUmVj
b3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwot
ICAgIG1faml0LmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IobV9jdXJyZW50Tm9kZSwg
bm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKKyAgICBtX2pp
dC5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9ncmFwaC5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG1fY3VycmVudE5vZGUsIG5vZGUpLCB0aGlzLCBt
X3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4KSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNv
bnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQpAQCAtNTEyLDcgKzUxMiw3IEBAIFNp
bGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yR1BS
KFZpcnR1YWxSZWdpc3RlciBzcGlsCiAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBE
YXRhRm9ybWF0Q2VsbCkgewogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwog
ICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgREZHX0FTU0VS
VChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBub2RlLT5pc0NlbGxDb25zdGFudCgpKTsK
KyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgbm9kZS0+aXND
ZWxsQ29uc3RhbnQoKSk7CiAgICAgICAgICAgICBub2RlLT5hc0NlbGwoKTsgLy8gVG8gZ2V0IHRo
ZSBhc3NlcnRpb24uCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0Q2VsbENvbnN0YW50Owog
ICAgICAgICB9IGVsc2UgewpAQCAtODU2LDcgKzg1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJyYXkoTm9kZSogbm9kZSkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAg
ICAgCi0gICAgaWYgKGFycmF5TW9kZS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgeworICAgIGlmIChhcnJheU1vZGUu
YWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIHB1cmdlIEVtcHR5IGNoZWNrIGNvbXBsZXRlbHkg
aW4gdGhpcyBjYXNlIG9mIENoZWNrQXJyYXlPckVtcHR5IHNpbmNlIENlbGxVc2Ugb25seSBhY2Nl
cHRzIFNwZWNDZWxsIHwgU3BlY0VtcHR5LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEFT
U0VSVCh0eXBlRmlsdGVyRm9yKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgJiBTcGVjRW1wdHkp
OwpAQCAtMTAxNyw4ICsxMDE3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4o
Tm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJ
ZHgrKykgewotICAgICAgICAgICAgaWYgKCEhbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKQorICAgICAgICAgICAgICAgIHVzZShtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CkBAIC0xMTAwLDcgKzExMDAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlJZChOb2RlKiBub2RlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUpCiAgICAgfQogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBo
KCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTE2NSw3
ICsxMTY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5SWRGbHVzaChOb2Rl
KiBub2RlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgfQogCiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQpAQCAtMTIxMSw3ICsxMjExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURlbGV0ZUJ5SWQoTm9kZSogbm9kZSkKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLAotICAgICAgICAgICAgICAgIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
Mihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBub2RlLT5jYWNoZWFibGVJZGVudGlmaWVyKCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAgICAgIH0KICNlbHNlCiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CkBAIC0x
MjIyLDcgKzEyMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlJZChO
b2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9k
ZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKG5vZGUtPmVj
bWFNb2RlKCkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpDZWxs
VmFsdWUoYmFzZUdQUiksIG5vZGUtPmNhY2hlYWJsZUlkZW50aWZpZXIoKS5yYXdCaXRzKCksIFRy
dXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKICAgICAgICAgfQogI2VuZGlm
CiAKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxl
dGVCeVZhbChOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
Y29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIGtleVJl
Z3MsIFRydXN0ZWRJbW0zMihub2RlLT5lY21hTW9kZSgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVkSW1tMzIobm9kZS0+
ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CiAgICAgICAgIH0KICNlbHNlCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CkBAIC0xMzA4LDcgKzEzMDgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlWYWwoTm9kZSogbm9kZSkKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJ
bmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlSZWdzLCBUcnVzdGVk
SW1tMzIobm9kZS0+ZWNtYU1vZGUoKS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBDQ2Fs
bEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwga2V5UmVncywgVHJ1c3RlZEltbTMyKG5vZGUt
PmVjbWFNb2RlKCkudmFsdWUoKSkpOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTM3OCw3ICsx
Mzc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlJZChOb2RlKiBub2RlKQog
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsCiAgICAgICAgICAgICBOZWVkVG9TcGlsbCwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNl
bGxWYWx1ZShiYXNlR1BSKSwgbm9kZS0+Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSk7
CisgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgbm9kZS0+
Y2FjaGVhYmxlSWRlbnRpZmllcigpLnJhd0JpdHMoKSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRk
SW5CeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTQyOCw3ICsxNDI4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwoTm9kZSogbm9kZSkKICAgICAgICAgc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSwKICAgICAgICAgICAgIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVj
a1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIENDYWxsSGVscGVyczo6Q2VsbFZh
bHVlKGJhc2VHUFIpLCBrZXlSZWdzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIG51bGxwdHIsIENDYWxsSGVs
cGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBrZXlSZWdzKTsKICAgICB9CiAKICAgICBtX2ppdC5h
ZGRJbkJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1ByaXZhdGUoTm9kZSogbm9kZSwgQWNjZXNzVHlw
ZSB0eXBlKQogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSwKICAgICAgICAgICAgIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50
OjpDaGVja05lZWRlZCwKLSAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwg
Z2VuLnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhl
bHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eU9yQnJhbmRHUFIpKTsKKyAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEND
YWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShw
cm9wZXJ0eU9yQnJhbmRHUFIpKTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRJbkJ5VmFsKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOwpAQCAtMTkxMSw3ICsxOTExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmluZ1NsaWNlKE5vZGUqIG5vZGUpCiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIGF1dG8gbm9uRW1wdHlDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0pKSwg
dGVtcEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBqc0VtcHR5U3RyaW5nKHZtKSksIHRlbXBHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKIAogICAgIG5vbkVtcHR5Q2FzZS5saW5rKCZtX2ppdCk7CkBAIC0xOTQx
LDcgKzE5NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nU2xpY2UoTm9k
ZSogbm9kZSkKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbVB0cih2bS5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgdGVtcEdQUik7CiAgICAgbV9qaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3ModGVtcEdQUiksIHRlbXBHUFIpOwogCi0gICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nLCB0ZW1wR1BSLCAmdm0sIHRlbXBHUFIpKTsKKyAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25T
aW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHRlbXBHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKSwgdGVtcEdQ
UikpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uU3RyaW5nU3Vic3RyLCB0ZW1wR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgc3RyaW5nR1BSLCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKSk7CiAKQEAgLTIxMTQs
MTkgKzIxMTQsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvb3BIaW50KE5vZGUq
IG5vZGUpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRl
TG9vcHNGb3JGdXp6aW5nKCkpKSB7CiAgICAgICAgIGJvb2wgZW1pdEVhcmx5UmV0dXJuID0gdHJ1
ZTsKICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLndhbGtVcElubGluZVN0YWNrKFsmXShD
b2RlT3JpZ2luIG9yaWdpbikgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iob3JpZ2luKTsKKyAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG9yaWdpbik7CiAgICAgICAgICAgICBpZiAoIWJhc2VsaW5lQ29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKQogICAgICAgICAgICAg
ICAgIGVtaXRFYXJseVJldHVybiA9IGZhbHNlOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKGVt
aXRFYXJseVJldHVybikgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb24gPSBiYXNl
bGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSku
cHRyKCk7CiAKICAgICAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgbV9qaXQucHVzaFRvU2F2
ZShHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHB0ciwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkpOworICAgICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBtX2ppdC5icmFuY2hQdHIo
Q0NhbGxIZWxwZXJzOjpCZWxvdywgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKIAogICAgICAgICAgICAg
aWYgY29uc3RleHByICh2YWxpZGF0ZURGR0RvZXNHQykgewogICAgICAgICAgICAgICAgIGlmIChP
cHRpb25zOjp2YWxpZGF0ZURvZXNHQygpKSB7CkBAIC0yMjE0LDcgKzIyMTQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICB9CiAKICAgICBpZiAobV9i
bG9jay0+aXNDYXRjaEVudHJ5cG9pbnQpIHsKLSAgICAgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC0obV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKSAq
IHNpemVvZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC0obV9ncmFwaC5mcmFtZVJlZ2lzdGVyQ291bnQoKSAqIHNp
emVvZihSZWdpc3RlcikpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQuZW1pdFNhdmVDYWxsZWVT
YXZlcygpOwogICAgICAgICBtX2ppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OwogICAgICAgICAvLyBDb2RlQmxvY2sgaW4gdGhlIHN0YWNrIGlzIGFscmVhZHkgcmVwbGFjZWQg
aW4gT1NSIGVudHJ5LgpAQCAtMjI0MCw3ICsyMjQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3Mu
CiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkp
OwotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5kLmlzQXJn
dW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+PSAwKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhb3BlcmFuZC5pc0FyZ3VtZW50KCkg
fHwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCkgPj0gMCk7CiAgICAgICAg
IG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQpKTsKICAgICB9CiAKQEAgLTIyODksOCAr
MjI4OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxv
Z0xuKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCIsIChpbnQpbV9jdXJyZW50Tm9k
ZS0+aW5kZXgoKSwgIiAoIiwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKS5vZmZzZXQoKSwgIikgYXQgSklUIG9mZnNldCAweCIsIG1faml0LmRlYnVnT2Zmc2V0
KCkpOwogCi0gICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5n
KCkgJiYgKG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgIT0gRG9lc05vdEV4
aXQgfHwgbV9jdXJyZW50Tm9kZS0+aXNUZXJtaW5hbCgpKSkKLSAgICAgICAgICAgIG1faml0Lmpp
dFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihtX2ppdC52bSgpKTsKKyAgICAgICAgaWYgKE9wdGlv
bnM6OnZhbGlkYXRlREZHRXhjZXB0aW9uSGFuZGxpbmcoKSAmJiAobWF5RXhpdChtX2dyYXBoLCBt
X2N1cnJlbnROb2RlKSAhPSBEb2VzTm90RXhpdCB8fCBtX2N1cnJlbnROb2RlLT5pc1Rlcm1pbmFs
KCkpKQorICAgICAgICAgICAgbV9qaXQuaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKHZtKCkp
OwogCiAgICAgICAgIG1faml0LnBjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigpLmFwcGVuZEl0ZW0o
bV9qaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCksIG1fb3JpZ2luLnNlbWFudGljKTsKIApA
QCAtMjM1MCw3ICsyMzUwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKCkKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbihDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5k
ZXgoMCkpLCB0cnVlKTsKIAotICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1faml0LmdyYXBoKCkubV9y
b290VG9Bcmd1bWVudHMuZmluZChtX2ppdC5ncmFwaCgpLmJsb2NrKDApKS0+dmFsdWU7CisgICAg
YXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGgu
YmxvY2soMCkpLT52YWx1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBh
cmd1bWVudHNbaV07CiAgICAgICAgIGlmICghbm9kZSkgewpAQCAtMjQyMiw5ICsyNDIyLDkgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7
CiAgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgbV9q
aXQuc2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4KTsKLSAgICAgICAgbV9ibG9jayA9IG1faml0
LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBjb21waWxlQ3VycmVudEJsb2NrKCk7CiAgICAgfQog
ICAgIGxpbmtCcmFuY2hlcygpOwpAQCAtMjQzMyw4ICsyNDMzLDggQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSgpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMo
KQogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
aml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBpZiAoYmxvY2stPmlzT1NSVGFyZ2V0IHx8IGJsb2NrLT5pc0NhdGNoRW50
cnlwb2ludCkgewpAQCAtMjQ0OCwxNCArMjQ0OCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
cmVhdGVPU1JFbnRyaWVzKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgdW5zaWduZWQgb3NyRW50cnlJbmRleCA9IDA7
Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQu
Z3JhcGgoKS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKKyAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0ICYmICFibG9jay0+aXNDYXRjaEVudHJ5
cG9pbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGJsb2NrLT5pc0NhdGNo
RW50cnlwb2ludCkgewotICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzVmVjdG9yID0gbV9qaXQu
Z3JhcGgoKS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKS0+dmFsdWU7CisgICAgICAgICAg
ICBhdXRvJiBhcmd1bWVudHNWZWN0b3IgPSBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmZpbmQo
YmxvY2spLT52YWx1ZTsKICAgICAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1hdD4gYXJndW1lbnRG
b3JtYXRzOwogICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoYXJndW1lbnRzVmVjdG9yLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIHNldEFy
Z3VtZW50IDogYXJndW1lbnRzVmVjdG9yKSB7CkBAIC0yNDc0LDcgKzI0NzQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAg
IH0KIAogICAgIG1faml0LmppdENvZGUoKS0+ZmluYWxpemVPU1JFbnRyeXBvaW50cyhXVEZNb3Zl
KG1faml0Lm1fb3NyRW50cnkpKTsKLSAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5maW5hbGl6
ZUNhdGNoRW50cnlwb2ludHMoV1RGTW92ZShtX2ppdC5ncmFwaCgpLm1fY2F0Y2hFbnRyeXBvaW50
cykpOworICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50
cyhXVEZNb3ZlKG1fZ3JhcGgubV9jYXRjaEVudHJ5cG9pbnRzKSk7CiAKICAgICBBU1NFUlQob3Ny
RW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKICAgICAKQEAgLTI0OTUsNyAr
MjQ5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1RyYXBzKE5vZGUqIG5v
ZGUpCiAgICAgR1BSUmVnIHVudXNlZEdQUiA9IHVudXNlZC5ncHIoKTsKIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5lZWRUcmFwSGFuZGxpbmcgPSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGls
ZXI6Ok5vblplcm8sCi0gICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MobV9qaXQu
dm0oKS50cmFwcygpLnRyYXBCaXRzQWRkcmVzcygpKSwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFi
c29sdXRlQWRkcmVzcyh2bSgpLnRyYXBzKCkudHJhcEJpdHNBZGRyZXNzKCkpLAogICAgICAgICBU
cnVzdGVkSW1tMzIoVk1UcmFwczo6QXN5bmNFdmVudHMpKTsKIAogICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChuZWVkVHJhcEhhbmRsaW5nLCB0aGlzLCBvcGVyYXRpb25IYW5k
bGVUcmFwcywgdW51c2VkR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwpAQCAtMjUw
NCw5ICsyNTA0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrVHJhcHMoTm9k
ZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZh
bChOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMiksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKIAogICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSkKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbEFsaWFzKSB7CkBAIC0yNTczLDIyICsyNTczLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlKQogewogICAgIEFycmF5TW9kZSBh
cnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKIAotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhp
cywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBG
UFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5mcHIoKTsKIAogICAgIERGR19UWVBFX0NIRUNLKAotICAg
ICAgICBKU1ZhbHVlUmVncygpLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBT
cGVjRnVsbFJlYWxOdW1iZXIsCisgICAgICAgIEpTVmFsdWVSZWdzKCksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMiksIFNwZWNGdWxsUmVhbE51bWJlciwKICAgICAgICAgbV9qaXQuYnJhbmNo
SWZOYU4odmFsdWVSZWcpKTsKIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAogICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKQEAg
LTI2NDcsMTAgKzI2NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1
dEJ5VmFsKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWwo
Tm9kZSogbm9kZSkKIHsKICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCkubW9kZUZvclB1dCgpOwotICAgIEVkZ2UgY2hpbGQxID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAwKTsKLSAgICBFZGdlIGNoaWxkMiA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgRWRnZSBjaGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAzKTsKKyAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgIEVk
Z2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICBFZGdlIGNoaWxk
NCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgpAQCAtMjY2NiwxNCAr
MjY2NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWwoTm9kZSogbm9k
ZSkKICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgogICAgIGNhc2UgQXJyYXk6OkJpZ1Vp
bnQ2NEFycmF5OgogI2VuZGlmCi0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2Rl
LCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgogICAgIGNhc2UgQXJyYXk6OkJp
Z1VpbnQ2NEFycmF5OgogI2VuZGlmCiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAg
ICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwg
fHwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCwgbm9kZS0+b3AoKSk7CisgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5v
cCgpID09IFB1dEJ5VmFsRGlyZWN0LCBub2RlLT5vcCgpKTsKICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9zbG93UHV0QnlWYWwuY29udGFpbnMobm9kZSkgfHwgKGNoaWxkMS51c2VLaW5kKCkgIT0gQ2Vs
bFVzZSAmJiBjaGlsZDEudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkpIHsKICAgICAgICAgICAg
IGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UgfHwgY2hpbGQxLnVzZUtpbmQoKSA9PSBL
bm93bkNlbGxVc2UpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpIHsKQEAgLTI3NTUsNyArMjc1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbChOb2RlKiBub2RlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwg
YmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
bnVsbHB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5hZGRQdXRCeVZhbChnZW4sIHNs
b3dQYXRoLmdldCgpKTsKQEAgLTI5NDksNyArMjk0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAot
ICAgICAgICAgICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJT
dHJpbmcsIHNjcmF0Y2hSZWcsICZ2bSwgc2NyYXRjaFJlZykpOworICAgICAgICAgICAgYmlnQ2hh
cmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHNjcmF0Y2hSZWcs
IFRydXN0ZWRJbW1QdHIoJnZtKSwgc2NyYXRjaFJlZykpOwogCiAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFG
b3JtYXRKUyk7CkBAIC0yOTY5LDggKzI5NjksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOgog
ICAgICAgICAgICAgLy8gb24gYSBzdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZUNvbmN1cnJlbnRs
eSgpIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBwcm90b3R5cGVzIGhhdmUgbm8gbmVnYXRpdmUKICAg
ICAgICAgICAgIC8vIGluZGV4ZWQgcHJvcGVydGllcyBlaXRoZXIuCiAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVy
QW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyQW5k
V2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7CiAKICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5
VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlz
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwpAQCAtMzUyNSwxMiArMzUyNSwxMiBAQCBz
dGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUQ29tcGlsZXImIGppdCwgR1BS
UmVnIHJlc3VsdCwgRlBSUmVnIHNvdQogICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIHplcm8g
PSAwOwogICAgIHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIGJ5dGVNYXggPSAyNTU7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBkb3VibGUgaGFsZiA9IDAuNTsKLSAgICBqaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cigmemVybyksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkRG91
YmxlKFNwZWN1bGF0aXZlSklUOjpUcnVzdGVkSW1tUHRyKCZ6ZXJvKSwgc2NyYXRjaCk7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgdG9vU21hbGwgPSBqaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgc291cmNlLCBzY3JhdGNo
KTsKLSAgICBqaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigmYnl0ZU1h
eCksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkRG91YmxlKFNwZWN1bGF0aXZlSklUOjpUcnVzdGVk
SW1tUHRyKCZieXRlTWF4KSwgc2NyYXRjaCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdG9v
QmlnID0gaml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5B
bmRPcmRlcmVkLCBzb3VyY2UsIHNjcmF0Y2gpOwogICAgIAotICAgIGppdC5sb2FkRG91YmxlKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZoYWxmKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRE
b3VibGUoU3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHIoJmhhbGYpLCBzY3JhdGNoKTsKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkganVzdCB1c2UgYSBmbG9hdGluZyBwb2lu
dCByb3VuZCEKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzIwNTQKICAgICBqaXQuYWRkRG91YmxlKHNvdXJjZSwgc2NyYXRjaCk7CkBAIC0zNTUzLDExICsz
NTUzLDExIEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpqdW1wRm9yVHlwZWRB
cnJheU91dE9mQm91bmRzKE5vZGUqIG5vZGUsIEdQUlJlCiB7CiAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gUHV0QnlWYWxBbGlhcykKICAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpKdW1wKCk7Ci0g
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2ppdC5ncmFwaCgpLnRyeUdldEZvbGRhYmxl
VmlldygKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwg
MCkpLm1fdmFsdWUsIG5vZGUtPmFycmF5TW9kZSgpKTsKKyAgICBKU0FycmF5QnVmZmVyVmlldyog
dmlldyA9IG1fZ3JhcGgudHJ5R2V0Rm9sZGFibGVWaWV3KAorICAgICAgICBtX3N0YXRlLmZvck5v
ZGUobV9ncmFwaC5jaGlsZChub2RlLCAwKSkubV92YWx1ZSwgbm9kZS0+YXJyYXlNb2RlKCkpOwog
ICAgIGlmICh2aWV3KSB7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSB2aWV3LT5sZW5ndGgoKTsK
LSAgICAgICAgTm9kZSogaW5kZXhOb2RlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAxKS5u
b2RlKCk7CisgICAgICAgIE5vZGUqIGluZGV4Tm9kZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSku
bm9kZSgpOwogICAgICAgICBpZiAoaW5kZXhOb2RlLT5pc0FueUludENvbnN0YW50KCkgJiYgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4Tm9kZS0+YXNBbnlJbnQoKSkgPCBsZW5ndGgpCiAgICAg
ICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6Okp1bXAoKTsKICNpZiBVU0UoTEFSR0VfVFlQRURf
QVJSQVlTKQpAQCAtMzg4Miw5ICszODgyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogewog
ICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAzKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0zOTA0LDcgKzM5MDQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KE5vZGUqIG5v
ZGUsIFR5cGVkQXJyYXlUeXBlCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgcHJvcGVy
dHlUYWcsIHZhbHVlVGFnLAogI2VuZGlmCi0gICAgICAgIG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMiksIHNsb3dQYXRoQ2FzZXMsIGlzQ2xhbXBlZCh0eXBlKSk7CisgICAgICAgIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMiksIHNsb3dQYXRoQ2FzZXMsIGlzQ2xhbXBlZCh0eXBl
KSk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQwMDIsMTAgKzQwMDIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXAK
IHsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3Ao
dGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlT3AodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
IAogICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBncFNj
cmF0Y2godGhpcyk7CkBAIC00MTA5LDE0ICs0MTA5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJC
YWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKICAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcml2
YXRlTmFtZUJ5VmFsKE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHBy
b3BlcnR5KQogewotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3Ao
KSA9PSBHZXRQcml2YXRlTmFtZSk7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpOworICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBHZXRQcml2YXRlTmFtZSk7Cisg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpLnVzZUtp
bmQoKSA9PSBTeW1ib2xVc2UpOwogCiAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHN0
dWJJbmZvOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTQxNTYs
NyArNDE1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcml2YXRlTmFtZUJ5
VmFsKE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTCiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwKLSAgICAgICAgICAgIHJlc3VsdC5yZWdzKCksIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksCisgICAgICAgICAgICByZXN1bHQucmVncygp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLAogICAgICAg
ICAgICAgYmFzZSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHkucGF5bG9hZEdQUigp
KSk7CiAgICAgfTsKIApAQCAtNDIyMiwyMiArNDIyMiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgZGVm
YXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGFyZzEodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKSk7
Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFy
ZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBK
U1ZhbHVlT3BlcmFuZCBhcmczKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwog
CiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0g
YXJnMi5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyBhcmczUmVncyA9IGFyZzMuanNWYWx1ZVJlZ3Mo
KTsKIAotICAgIHNwZWN1bGF0ZVN0cmluZyhtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKKyAgICBzcGVjdWxhdGVTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIGNhbGxPcGVy
YXRpb24oCkBAIC00MjUyLDE1ICs0MjUyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5nKE5vZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0No
aWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzMo
dGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CiAKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BS
UmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogICAgIEpTVmFsdWVSZWdzIGFyZzNSZWdzID0gYXJn
My5qc1ZhbHVlUmVncygpOwogCi0gICAgc3BlY3VsYXRlU3ltYm9sKG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOworICAgIHNwZWN1bGF0ZVN5bWJvbChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CiAgICAgY2FsbE9wZXJhdGlvbigKQEAgLTQzNTksNyArNDM1OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmFtZShOb2RlKiBub2RlKQogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb24sCi0gICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBD
Q2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUo
cHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVl
KGJhc2VHUFIpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUiksIHZhbHVlUmVn
cywgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIG51bGxwdHIpOwogICAgIH0KIAogICAg
IG1faml0LmFkZFB1dEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtNDQzNyw3ICs0NDM3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrUHJpdmF0ZUJyYW5kKE5vZGUq
IG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCiAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0
aW1pemUsIE5vUmVzdWx0LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BSKSk7CisgICAg
ICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBi
YXNlUmVncywgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYnJhbmRHUFIpKTsKICAgICB9CiAKICAg
ICBtX2ppdC5hZGRQcml2YXRlQnJhbmRBY2Nlc3MoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC00
NDg1LDcgKzQ0ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0UHJpdmF0ZUJy
YW5kKE5vZGUqIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplLCBOb1Jlc3VsdCwKLSAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2Vu
LnN0dWJJbmZvKCksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBDQ2FsbEhlbHBl
cnM6OkNlbGxWYWx1ZShicmFuZEdQUikpOworICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFz
ZUdQUiksIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJyYW5kR1BSKSk7CiAgICAgfQogCiAgICAg
bV9qaXQuYWRkUHJpdmF0ZUJyYW5kQWNjZXNzKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtNDYy
NCw3ICs0NjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JD
ZWxscyhOb2RlKiBub2RlLCBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MKICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgc3R1YkluZm9HUFIsIHZhbHVlUmVncywgcHJvdG90eXBlUmVncyk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlUmVn
cywgcHJvdG90eXBlUmVncyk7CisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHZhbHVlUmVncywgcHJvdG90eXBlUmVn
cyk7CiAgICAgfQogICAgIAogICAgIG1faml0LmFkZEluc3RhbmNlT2YoZ2VuLCBzbG93UGF0aC5n
ZXQoKSk7CkBAIC00NjYyLDggKzQ2NjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SW5zdGFuY2VPZihOb2RlKiBub2RlKQogICAgIH0KICNlbmRpZgogICAgIAotICAgIERGR19BU1NF
UlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpOwotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQy
KCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9k
ZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OwogICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC00Nzc2LDcgKzQ3
NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZE9yQW55QmlnSW50Qml0T3Ao
Tm9kZSogbm9kZSkKICAgICBFZGdlJiBsZWZ0Q2hpbGQgPSBub2RlLT5jaGlsZDEoKTsKICAgICBF
ZGdlJiByaWdodENoaWxkID0gbm9kZS0+Y2hpbGQyKCk7CiAKLSAgICBERkdfQVNTRVJUKG1faml0
LmdyYXBoKCksIG5vZGUsIG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSB8fCBub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoQW55QmlnSW50VXNlKSB8fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQo
SGVhcEJpZ0ludFVzZSkgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJpZ0ludDMyVXNlKSk7Cisg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBl
ZFVzZSkgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEFueUJpZ0ludFVzZSkgfHwgbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKEhlYXBCaWdJbnRVc2UpIHx8IG5vZGUtPmlzQmluYXJ5VXNlS2luZChCaWdJ
bnQzMlVzZSkpOwogCiAgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobGVmdENoaWxkLm5vZGUoKSkg
fHwgaXNLbm93bk5vdE51bWJlcihyaWdodENoaWxkLm5vZGUoKSkpIHsKICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgbGVmdCh0aGlzLCBsZWZ0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CkBAIC01MjYxLDcgKzUyNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVB
ZGQoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7CiAgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24u
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKQEAgLTUzNDUsNyArNTM0NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwpAQCAt
NTYwOCw3ICs1NjA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvT2JqZWN0T3JD
YWxsT2JqZWN0Q29uc3RydWN0b3IoTm9kZSogbm9kZSkKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGVycm9yTWVzc2FnZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkgIT0gVUlOVDMyX01BWCkKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGlkZW50
aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKTsKLSAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uVG9PYmplY3Qs
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVncywgZXJyb3JN
ZXNzYWdlKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblRvT2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIoZXJyb3JNZXNzYWdlKSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25DYWxsT2JqZWN0Q29uc3RydWN0b3IsIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cihub2RlLT5jZWxsT3BlcmFuZCgpKSwgdmFsdWVSZWdzKSk7CiAKQEAgLTU3
NDksNyArNTc0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aEFicyhOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwg
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5qc1ZhbHVlUmVncygp
OwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtNTkyNyw3ICs1OTI3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluY09yRGVjKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUoTm9kZSogbm9kZSkKIHsKICAgICAvLyBGSVhNRTog
YWRkIGEgZmFzdCBwYXRoLCBhdCBsZWFzdCBmb3IgQmlnSW50MzIsIGJ1dCBwcm9iYWJseSBhbHNv
IGZvciBIZWFwQmlnSW50IGhlcmUuCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFy
eUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgSklUTmVn
SUMqIG5lZ0lDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKQEAgLTYxNzEsNyArNjE3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZU11bChOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwpAQCAtNjY0NCw3ICs2NjQ0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5vZGUqIG5vZGUpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9
PSBBbnlCaWdJbnRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlLCBu
b2RlLT5iaW5hcnlVc2VLaW5kKCkpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9k
ZS0+YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgp
ID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2Us
IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIGxl
ZnRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBzcGVj
dWxhdGUobm9kZSwgbGVmdENoaWxkKTsKQEAgLTcwMzIsNyArNzAzMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
OworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAKICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZVJlZ3Mg
YXJndW1lbnRSZWdzID0gYXJndW1lbnQuanNWYWx1ZVJlZ3MoKTsKQEAgLTcxNjQsNyArNzE2NCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1pbk1heChOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAi
QmFkIHVzZSBraW5kIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTcxNzcsNyArNzE3
Nyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjb21waWxlQXJpdGhQb3dJbnRlZ2Vy
RmFzdFBhdGgoSklUQ29tcGlsZXImIGFzc2VtYmxlCiAgICAgc2tpcEZhc3RQYXRoLmFwcGVuZChh
c3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB5T3BlcmFuZCwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtYXhFeHBvbmVudEZvckludGVnZXJNYXRoUG93KSkpOwog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7Ci0gICAgYXNz
ZW1ibGVyLmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0
YW50KSwgcmVzdWx0KTsKKyAgICBhc3NlbWJsZXIubG9hZERvdWJsZShTcGVjdWxhdGl2ZUpJVDo6
VHJ1c3RlZEltbVB0cigmb25lQ29uc3RhbnQpLCByZXN1bHQpOwogCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHN0YXJ0TG9vcChhc3NlbWJsZXIubGFiZWwoKSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZXhwb25lbnRJc0V2ZW4gPSBhc3NlbWJsZXIuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCB5T3BlcmFuZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSk7
CkBAIC03MjE5LDcgKzcyMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVQ
b3coTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2Ug
fHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlV
c2VLaW5kKCkgPT0gQmlnSW50MzJVc2UsIG5vZGUtPmJpbmFyeVVzZUtpbmQoKSk7CisgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55QmlnSW50VXNlIHx8IG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSwgbm9kZS0+YmluYXJ5VXNlS2luZCgpKTsKIAogICAg
IEpTVmFsdWVPcGVyYW5kIGxlZnQodGhpcywgbGVmdENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogICAgIEpTVmFsdWVPcGVyYW5kIHJpZ2h0KHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CkBAIC04MjM2LDcgKzgyMzYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3RyaW5nKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQog
ICAgIEdQUlRlbXBvcmFyeSBlcSh0aGlzKTsKICAgICBHUFJSZWcgZXFHUFIgPSBlcS5ncHIoKTsK
IAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgo
KSwganNFbXB0eVN0cmluZyh2bSgpKSksIGVxR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBlcUdQUik7
CiAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBDQ2FsbEhlbHBlcnM6OkVxdWFsIDogQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc3RyR1BSLCBlcUdQUiwgZXFHUFIpOwogICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQoZXFHUFIsIG5vZGUpOwogfQpAQCAtODI1Myw3ICs4MjUzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhblN0cmluZ09yT3RoZXIoTm9kZSogbm9k
ZSwgYm9vbCBpbnZlcnQpCiAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgIHZhbHVlUmVncywg
bm9kZS0+Y2hpbGQxKCksICh+U3BlY0NlbGxDaGVjaykgfCBTcGVjU3RyaW5nLCBtX2ppdC5icmFu
Y2hJZk5vdFN0cmluZyhjZWxsR1BSKSk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCB0ZW1wR1BS
KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpz
RW1wdHlTdHJpbmcodm0oKSkpLCB0ZW1wR1BSKTsKICAgICBtX2ppdC5jb21wYXJlUHRyKGludmVy
dCA/IENDYWxsSGVscGVyczo6RXF1YWwgOiBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjZWxsR1BS
LCB0ZW1wR1BSLCB0ZW1wR1BSKTsKICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKQEAg
LTgyNzQsNyArODI3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTdHJpbmdCcmFuY2go
RWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jCiAKICAgICBzcGVjdWxh
dGVTdHJpbmcobm9kZVVzZSwgc3RyR1BSKTsKIAotICAgIGJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6
OkVxdWFsLCBzdHJHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6RXF1YWwsIHN0ckdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
anNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRha2VuKTsKICAgICBqdW1wKHRha2VuKTsKIAogICAg
IG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwpAQCAtODI5MSw3ICs4MjkxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN0cmluZ09yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Js
b2NrKiB0YWtlbiwgQmEKICAgICBHUFJSZWcgY2VsbEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BS
KCk7CiAgICAgREZHX1RZUEVfQ0hFQ0sodmFsdWVSZWdzLCBub2RlVXNlLCAoflNwZWNDZWxsQ2hl
Y2spIHwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoY2VsbEdQUikpOwogCi0g
ICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGNlbGxHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtl
bik7CisgICAgYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIGNlbGxHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtl
bik7CiAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKIAogICAgIG5vdENlbGwubGluaygmbV9q
aXQpOwpAQCAtODMzMSw3ICs4MzMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVk
QXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgYm8KICAgICBp
ZiAoIUdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKCkpIHsK
ICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgaWYgKHZtLnByaW1pdGl2ZUdp
Z2FjYWdlRW5hYmxlZCgpLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KS53YXRjaHBvaW50cygpLmFkZExhemlseSh2bS5wcmltaXRpdmVHaWdhY2FnZUVuYWJsZWQoKSk7
CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHZtLnByaW1pdGl2
ZUdpZ2FjYWdlRW5hYmxlZCgpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnRhZ0Fy
cmF5UHRyKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC04NTc1LDcgKzg1NzUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsVGhpcyhOb2RlKiBub2RlKQogewogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgbV9q
aXQubG9hZFB0cihnbG9iYWxPYmplY3QtPmFkZHJlc3NPZkdsb2JhbFRoaXMoKSwgcmVzdWx0R1BS
KTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC04NzM4LDcgKzg3Mzgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVn
IHJlc3VsdEdQUiwgUmVnaXN0ZXJlZFN0cnVjdAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0
aEtub3duU2l6ZTxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBidXR0ZXJmbHksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd1BhdGgsIHNpemUpOwog
ICAgIAogICAgIG1faml0LnN0b3JlUHRyKHNjb3BlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSk7Ci0gICAgbV9qaXQu
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZXhlY3V0
YWJsZSksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSksIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgp
KSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogfQogCkBAIC04NzU5LDIxICs4NzU5
LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKiBub2Rl
KQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIGlmIChub2RlVHlwZSA9PSBO
ZXdHZW5lcmF0b3JGdW5jdGlvbikKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRh
YmxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHNjb3BlR1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRhYmxlKSk7CiAgICAgICAgIGVsc2Ug
aWYgKG5vZGVUeXBlID09IE5ld0FzeW5jRnVuY3Rpb24pCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BS
LCBleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNGdW5jdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2NvcGVHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGV4ZWN1dGFibGUpKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbikKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgcmVz
dWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgZXhlY3V0YWJsZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsICZ2bSgpLCBzY29wZUdQUiwg
ZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZXhlY3V0YWJsZSkpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoCisgICAgUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKAogICAgICAgICBbJl0g
KCkgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgTmV3R2VuZXJhdG9yRnVuY3Rpb246CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsb2JhbE9iamVjdC0+Z2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKTsKQEAgLTg4
MDEsMjUgKzg4MDEsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9u
KE5vZGUqIG5vZGUpCiAgICAgaWYgKG5vZGVUeXBlID09IE5ld0Z1bmN0aW9uKSB7CiAgICAgICAg
IGNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbjxKU0Z1bmN0aW9uPihyZXN1bHRHUFIsIHN0cnVjdHVy
ZSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY29wZUdQUiwgc2xvd1BhdGgsIEpTRnVuY3Rp
b246OmFsbG9jYXRpb25TaXplKDApLCBleGVjdXRhYmxlKTsKICAgICAgICAgICAgIAotICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwgcmVz
dWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpKTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdGdW5j
dGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHNjb3BlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBleGVjdXRhYmxlKSkpOwogICAgIH0KIAogICAgIGlmIChub2RlVHlwZSA9PSBOZXdH
ZW5lcmF0b3JGdW5jdGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248SlNH
ZW5lcmF0b3JGdW5jdGlvbj4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gxR1BSLCBzY3Jh
dGNoMkdQUiwgc2NvcGVHUFIsIHNsb3dQYXRoLCBKU0dlbmVyYXRvckZ1bmN0aW9uOjphbGxvY2F0
aW9uU2l6ZSgwKSwgZXhlY3V0YWJsZSk7CiAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
bldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgJnZtKCks
IHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb25X
aXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgZXhlY3V0YWJsZSkpKTsKICAgICB9CiAKICAgICBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNG
dW5jdGlvbikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248SlNBc3luY0Z1bmN0
aW9uPihyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzY29w
ZUdQUiwgc2xvd1BhdGgsIEpTQXN5bmNGdW5jdGlvbjo6YWxsb2NhdGlvblNpemUoMCksIGV4ZWN1
dGFibGUpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxs
b2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxl
KSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlv
bldhdGNocG9pbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHNjb3BlR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBleGVjdXRhYmxlKSkpOwogICAgIH0K
IAogICAgIGlmIChub2RlVHlwZSA9PSBOZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uKSB7CiAgICAg
ICAgIGNvbXBpbGVOZXdGdW5jdGlvbkNvbW1vbjxKU0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24+KHJl
c3VsdEdQUiwgc3RydWN0dXJlLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNjb3BlR1BSLCBz
bG93UGF0aCwgSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uOjphbGxvY2F0aW9uU2l6ZSgwKSwgZXhl
Y3V0YWJsZSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25X
aXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsICZ2bSgpLCBz
Y29wZUdQUiwgZXhlY3V0YWJsZSkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHIoJnZtKCkpLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgZXhlY3V0YWJsZSkpKTsKICAgICB9CiAgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwpAQCAtODk2NCw3ICs4OTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUZvcndhcmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIFN5bWJvbFRhYmxlKiB0YWJs
ZSA9IG5vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKLSAgICBSZWdpc3RlcmVkU3Ry
dWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IoCisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1
cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKAog
ICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwog
ICAgICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CkBAIC04OTg2LDEwICs4OTg2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsCi0gICAg
ICAgICAgICByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0YWJsZSwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAg
ICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RydWN0dXJlLCBzY29wZUdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgdGFibGUpLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CiAjZWxzZQogICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsCi0gICAgICAg
ICAgICByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0YWJsZSwgaW5pdGlh
bGl6YXRpb25SZWdzKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIHRhYmxlKSwgaW5pdGlhbGl6YXRpb25SZWdzKTsKICNlbmRpZgogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBA
IC05MDM1LDExICs5MDM1LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVB
Y3RpdmF0aW9uKE5vZGUqIG5vZGUpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd1BhdGgs
IHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgJnZtKCks
IHN0cnVjdHVyZSwgc2NvcGVHUFIsIHRhYmxlLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGluaXRpYWxpemF0aW9uVmFsdWUpKSkpOworICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigm
dm0oKSksIHN0cnVjdHVyZSwgc2NvcGVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIHRhYmxlKSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlv
blZhbHVlKSkpKTsKICNlbHNlCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVB
Y3RpdmF0aW9uRGlyZWN0LCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0
YWJsZSwgaW5pdGlhbGl6YXRpb25SZWdzKSk7CisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
KCZ2bSgpKSwgc3RydWN0dXJlLCBzY29wZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgdGFibGUpLCBpbml0aWFsaXphdGlvblJlZ3MpKTsKICNlbmRpZgogCiAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtOTA2MSw3ICs5MDYxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAg
IEdQUlJlZyBsZW5ndGhHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhzY3JhdGNoMUdQUiwgc2Ny
YXRjaDJHUFIpOwogICAgICAgICAKLSAgICB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9IG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bnVtUGFy
YW1ldGVycygpIC0gMTsKKyAgICB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9IG1fZ3JhcGguYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bnVtUGFyYW1ldGVycygpIC0g
MTsKICAgICAgICAgCiAgICAgdW5zaWduZWQga25vd25MZW5ndGg7CiAgICAgYm9vbCBsZW5ndGhJ
c0tub3duOyAvLyBpZiBmYWxzZSwgbGVuZ3RoR1BSIHdpbGwgaGF2ZSB0aGUgbGVuZ3RoLgpAQCAt
OTA4NCw3ICs5MDg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPQotICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0
dXJlKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0
cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5k
aXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIAogICAgIC8vIFVzZSBhIGRpZmZl
cmVudCBzdHJhdGVneSBmb3IgYWxsb2NhdGluZyB0aGUgb2JqZWN0IGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlIGtub3cgaXRzCiAgICAgLy8gc2l6ZSBzdGF0aWNhbGx5LgpAQCAtOTEzNCw3ICs5MTM0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhO
b2RlKiBub2RlKQogICAgIGlmIChsZW5ndGhJc0tub3duKSB7CiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIHJlc3VsdEdQUiwg
JnZtKCksIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkp
LCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAga25vd25MZW5ndGgsIG1pbkNhcGFjaXR5KSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBtYWtlVW5pcXVlPENhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcj4oCkBAIC05MTUxLDcgKzkxNTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5v
ZGUqIG5vZGUpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAogICAg
ICAgICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKAotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0
YW50KCkuYXNDZWxsKCkpLAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpLAogICAgICAgICAgICAg
ICAgIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtOTI2OSw3ICs5MjY5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhO
b2RlKiBub2RlKQogICAgIG1faml0LnNldHVwQXJndW1lbnQoCiAgICAgICAgIDEsIFsmXSAoR1BS
UmVnIGRlc3RHUFIpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAgICAgICAgICAgICAg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0LT5z
Y29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0LT5zY29wZWRBcmd1bWVudHNTdHJ1
Y3R1cmUoKSksCiAgICAgICAgICAgICAgICAgZGVzdEdQUik7CiAgICAgICAgIH0pOwogICAgIG1f
aml0LnNldHVwQXJndW1lbnQoMCwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGRlc3RHUFIp
OyB9KTsKQEAgLTkyOTksNyArOTI5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
cmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICAgICAgMSwgWyZdIChHUFJSZWcg
ZGVzdEdQUikgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAgICAgICAgICAgICBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSksCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJl
KCkpLAogICAgICAgICAgICAgICAgIGRlc3RHUFIpOwogICAgICAgICB9KTsKICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBkZXN0R1BSKTsgfSk7
CkBAIC05MzM2LDcgKzkzMzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRl
UmVzdChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlLT5vcCgpID09IENyZWF0ZVJlc3Qp
OwogCi0gICAgaWYgKG1faml0LmdyYXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hw
b2ludChub2RlKSkgeworICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdh
dGNocG9pbnQobm9kZSkpIHsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFy
cmF5TGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFy
cmF5UmVzdWx0KHRoaXMpOwogCkBAIC05MzQ4LDcgKzkzNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlUmVzdChOb2RlKiBub2RlKQogICAgICAgICAvLyBhbHdheXMgYmUg
Ym91bmRlZCBieSBzdGFjayBzaXplLiBSZWFsaXN0aWNhbGx5LCB3ZSB3b24ndCBiZSBhYmxlIHRv
IHB1c2ggZW5vdWdoCiAgICAgICAgIC8vIGFyZ3VtZW50cyB0byBoYXZlIGFycmF5TGVuZ3RoIGV4
Y2VlZCBNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RILgogICAgICAgICBib29s
IHNob3VsZEFsbG93Rm9yQXJyYXlTdG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJheXMgPSBmYWxz
ZTsKLSAgICAgICAgY29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcnJheVJlc3VsdEdQUiwg
YXJyYXlMZW5ndGhHUFIsIEFycmF5V2l0aENvbnRpZ3VvdXMsIHNob3VsZEFsbG93Rm9yQXJyYXlT
dG9yYWdlU3RydWN0dXJlRm9yTGFyZ2VBcnJheXMpOworICAgICAgICBjb21waWxlQWxsb2NhdGVO
ZXdBcnJheVdpdGhTaXplKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyksIGFycmF5UmVzdWx0R1BSLCBhcnJheUxlbmd0aEdQUiwgQXJyYXlXaXRoQ29udGlndW91
cywgc2hvdWxkQWxsb3dGb3JBcnJheVN0b3JhZ2VTdHJ1Y3R1cmVGb3JMYXJnZUFycmF5cyk7CiAK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOwogICAgICAgICBHUFJS
ZWcgYXJndW1lbnRzU3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsKQEAgLTk0MDksNyAr
OTQwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9kZSkK
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEFycmF5VXNlKQogICAgICAgICBz
cGVjdWxhdGVBcnJheShub2RlLT5jaGlsZDEoKSwgYXJndW1lbnQpOwogCi0gICAgaWYgKG1faml0
LmdyYXBoKCkuY2FuRG9GYXN0U3ByZWFkKG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKSB7CisgICAgaWYgKG1fZ3JhcGguY2FuRG9GYXN0U3ByZWFkKG5vZGUsIG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gx
KHRoaXMpOwpAQCAtOTQ0Nyw3ICs5NDQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVNwcmVhZChOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKEpTSW1t
dXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZkRhdGEoKSksIHNjcmF0Y2gxR1BSKTsKIAotICAgICAg
ICBtX2ppdC5lbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbDxKU0ltbXV0YWJsZUJ1dHRlcmZs
eT4odm0oKSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUobV9qaXQuZ3JhcGgoKS5tX3ZtLmltbXV0YWJsZUJ1dHRlcmZseVN0cnVjdHVyZXNb
YXJyYXlJbmRleEZyb21JbmRleGluZ1R5cGUoQ29weU9uV3JpdGVBcnJheVdpdGhDb250aWd1b3Vz
KSAtIE51bWJlck9mSW5kZXhpbmdTaGFwZXNdLmdldCgpKSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZENlbGw8SlNJbW11dGFibGVCdXR0ZXJmbHk+KHZtKCksIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cihtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGgubV92bS5pbW11
dGFibGVCdXR0ZXJmbHlTdHJ1Y3R1cmVzW2FycmF5SW5kZXhGcm9tSW5kZXhpbmdUeXBlKENvcHlP
bldyaXRlQXJyYXlXaXRoQ29udGlndW91cykgLSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzXS5nZXQo
KSkpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CiAgICAgICAgIG1faml0LnN0b3JlMzIobGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTSW1tdXRhYmxlQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSk7CiAKQEAgLTk1MTQsOCArOTUxNCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
cHJlYWQoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5
KE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxk
cmVuKCk7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aEhpbnQgPSBub2RlLT52ZWN0b3JM
ZW5ndGhIaW50KCk7CkBAIC05NTI0LDcgKzk1MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTmV3QXJyYXkoTm9kZSogbm9kZSkKICAgICAgICAgLy8gQmVjYXVzZSB3ZSBmaXJzdCBz
cGVjdWxhdGUgb24gYWxsIG9mIHRoZSBjaGlsZHJlbiBoZXJlLCB3ZSBjYW4gbmV2ZXIgZXhpdCBh
ZnRlciBjcmVhdGluZwogICAgICAgICAvLyB1bmluaXRpYWxpemVkIGNvbnRpZ3VvdXMgSlNBcnJh
eSwgd2hpY2ggZW5zdXJlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgcHJvZHVjZSBhIGhhbGYtYmFrZWQg
SlNBcnJheS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5k
SW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIG9wZXJhbmRJ
bmRleCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgb3BlcmFuZEluZGV4KSk7CiAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC05NTQwLDcgKzk1NDAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkoTm9kZSogbm9kZSkKICAg
ICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgfHwg
IW5vZGUtPm51bUNoaWxkcmVuKCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElu
ZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5k
ZXgpIHsKLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCBvcGVyYW5kSW5kZXgpOworICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIG9wZXJhbmRJbmRleCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTk1
NzksNyArOTU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2Rl
KiBub2RlKQogICAgIGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSwgcmVzdWx0Lmdwcigp
LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdF
bXB0eUFycmF5LCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUp
OwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1OTQsNyArOTU5NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShOb2RlKiBub2RlKQogICAgICAg
ICAvLyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGluZyB0eXBlIGlzIG5vdCBhcnJh
eSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMKICAgICAgICAgLy8gcHJvYmFibHkgc29tZXRoaW5nIGhp
bGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFsbCB0aGUKICAg
ICAgICAgLy8gdGhpbmdzLCBidXQgYXQgbGVhc3Qgd2UncmUgZ29pbmcgdG8gYmUgc291bmQuCi0g
ICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZp
cnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAgICAgICBFZGdlIHVzZSA9IG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKICAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVT
OgpAQCAtOTY0Myw4ICs5NjQzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Fy
cmF5KE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAog
ICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIG1faml0
LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1DaGlsZHJl
bigpKSk7CisgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIG1fZ3JhcGgucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwKKyAgICAgICAgVHJ1c3RlZEltbVB0
cihidWZmZXIpLCBzaXplX3Qobm9kZS0+bnVtQ2hpbGRyZW4oKSkpOwogICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTk2NTMsMTcgKzk2NTMsMTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hwb2lu
dChub2RlKSkgeworICAgIGlmIChtX2dyYXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNo
cG9pbnQobm9kZSkpIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgICAgICBCaXRWZWN0b3Iq
IGJpdFZlY3RvciA9IG5vZGUtPmJpdFZlY3RvcigpOwogCiAgICAgICAgIGlmIChub2RlLT5udW1D
aGlsZHJlbigpID09IDEgJiYgYml0VmVjdG9yLT5nZXQoMCkpIHsKLSAgICAgICAgICAgIEVkZ2Ug
dXNlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVk
Z2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGltbXV0YWJsZUJ1dHRlcmZseSh0aGlzLCB1c2UpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBi
dXR0ZXJmbHkodGhpcyk7CkBAIC05Njc2LDcgKzk2NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCi0gICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKENvcHlPbldyaXRlQXJy
YXlXaXRoQ29udGlndW91cykpOworICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxB
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShDb3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3Vv
dXMpKTsKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
IApAQCAtOTY4NSw3ICs5Njg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Fy
cmF5V2l0aFNwcmVhZChOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVy
Zmx5R1BSLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAKLSAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIGltbXV0
YWJsZUJ1dHRlcmZseUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZSwgaW1tdXRhYmxlQnV0dGVyZmx5
R1BSKSk7CiAKICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTk3MDQsNyArOTcwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewogICAgICAg
ICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkgewotICAgICAgICAgICAgICAgICAgICBF
ZGdlIHVzZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAg
ICAgICAgICAgIEVkZ2UgdXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKTsKICAgICAg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgaW1tdXRhYmxlQnV0dGVyZmx5KHRo
aXMsIHVzZSk7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBpbW11dGFibGVCdXR0ZXJmbHlH
UFIgPSBpbW11dGFibGVCdXR0ZXJmbHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5j
aEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
aW1tdXRhYmxlQnV0dGVyZmx5R1BSLCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSksIGxlbmd0aEdQUikpOwpAQCAtOTczMSw3ICs5NzMxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKiBub2RlKQogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsraSkgewotICAgICAgICAgICAg
RWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkpOworICAgICAgICAg
ICAgRWRnZSB1c2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpOwogICAgICAgICAgICAg
aWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgaW1tdXRhYmxlQnV0dGVyZmx5KHRoaXMsIHVzZSk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIGltbXV0YWJsZUJ1dHRlcmZseUdQUiA9IGltbXV0YWJsZUJ1dHRlcmZseS5ncHIoKTsKQEAg
LTk3NzksNyArOTc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdp
dGhTcHJlYWQoTm9kZSogbm9kZSkKIAogICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gbm9kZS0+
Yml0VmVjdG9yKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bUNoaWxk
cmVuKCk7ICsraSkgewotICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBpXTsKKyAgICAgICAgRWRnZSB1c2UgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgaV07CiAgICAgICAgIGlm
IChiaXRWZWN0b3ItPmdldChpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
aW1tdXRhYmxlQnV0dGVyZmx5KHRoaXMsIHVzZSk7CiAgICAgICAgICAgICBHUFJSZWcgaW1tdXRh
YmxlQnV0dGVyZmx5R1BSID0gaW1tdXRhYmxlQnV0dGVyZmx5LmdwcigpOwpAQCAtOTgwMiw3ICs5
ODAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChO
b2RlKiBub2RlKQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTcHJlYWRTbG93LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJ1ZmZlciwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTcHJlYWRTbG93
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9i
amVjdCksIFRydXN0ZWRJbW1QdHIoYnVmZmVyKSwgbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CiAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKQEAgLTk4NzUsMTAgKzk4NzUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5U2xpY2UoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcnJheVNs
aWNlKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUt
Pm51bUNoaWxkcmVuKCkgLSAxKSk7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxKSk7CiAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHN0b3JhZ2UuZ3ByKCk7CkBAIC05ODk0LDE3ICs5ODk0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVNsaWNlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogCiAgICAgICAgIGlmIChub2RlLT5udW1DaGlsZHJl
bigpID09IDQpCi0gICAgICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCB0ZW1wR1BS
KTsKKyAgICAgICAgICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSwgc3RkOjpudWxsb3B0LCBsZW5ndGhHUFIsIHRlbXBHUFIpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGxlbmd0aEdQUiwgdGVtcEdQUik7CiAKLSAgICAg
ICAgaWYgKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSktPmlzSW50MzJDb25zdGFu
dCgpICYmIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSktPmFzSW50MzIoKSA9PSAw
KSB7CisgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5pc0ludDMyQ29u
c3RhbnQoKSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5hc0ludDMyKCkgPT0gMCkg
ewogICAgICAgICAgICAgLy8gRG8gbm90aGluZyBmb3IgYXJyYXkuc2xpY2UoMCwgZW5kKSBvciBh
cnJheS5zbGljZSgwKSBjYXNlcy4KICAgICAgICAgICAgIC8vIGB0ZW1wR1BSYCBhbHJlYWR5IHBv
aW50cyB0byB0aGUgc2l6ZSBvZiBhIG5ld2x5IGNyZWF0ZWQgYXJyYXkuCiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcFN0YXJ0SW5kZXgodGhpcyk7CiAgICAg
ICAgICAgICBHUFJSZWcgc3RhcnRHUFIgPSB0ZW1wU3RhcnRJbmRleC5ncHIoKTsKLSAgICAgICAg
ICAgIGVtaXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAxKSwgc3RkOjpudWxsb3B0LCBsZW5ndGhHUFIsIHN0YXJ0R1BSKTsKKyAgICAgICAgICAgIGVt
aXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgc3RkOjpu
dWxsb3B0LCBsZW5ndGhHUFIsIHN0YXJ0R1BSKTsKIAogICAgICAgICAgICAgYXV0byB0b29CaWcg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0YXJ0R1BSLCB0ZW1wR1BS
KTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKHN0YXJ0R1BSLCB0ZW1wR1BSKTsgLy8gdGhlIHNp
emUgb2YgdGhlIGFycmF5IHdlJ2xsIG1ha2UuCkBAIC05OTIyLDcgKzk5MjIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoZSBzb3VyY2UgYXJyYXkgYWxpdmUgYXQgbGVhc3QgdW50
aWwgYWZ0ZXIgd2UncmUgZG9uZQogICAgICAgICAvLyB3aXRoIGFueXRoaW5nIHRoYXQgY2FuIEdD
IChlLmcuIGFsbG9jYXRpbmcgdGhlIHJlc3VsdCBhcnJheSBiZWxvdykuCi0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CiAKICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbC5ncHIoKSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0
KCkpLCB0ZW1wVmFsdWUpOwogICAgICAgICAvLyBXZSBjYW4gaWdub3JlIHRoZSB3cml0YWJpbGl0
eSBvZiB0aGUgY2VsbCBzaW5jZSB3ZSB3b24ndCB3cml0ZSB0byB0aGUgc291cmNlLgpAQCAtOTk0
OCwxNyArOTk0OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTbGljZShO
b2RlKiBub2RlKQogICAgICAgICAvLyB0byBlbnN1cmUgdGhlIGluY29taW5nIGFycmF5IGlzIG9u
ZSB0byBiZSBvbmUgb2YgdGhlIG9yaWdpbmFsIGFycmF5IHN0cnVjdHVyZXMKICAgICAgICAgLy8g
d2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbmRleGluZyBzaGFwZXM6IEludDMyLCBDb250aWd1
b3VzLCBEb3VibGUuIFRoZXJlZm9yZSwKICAgICAgICAgLy8gd2UncmUgYSBkb3VibGUgYXJyYXkg
aGVyZS4KLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVn
aXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoRG91YmxlKSkpLCB0ZW1wVmFsdWUpOworICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhEb3VibGUpKSksIHRlbXBWYWx1ZSk7CiAgICAgICAgIGVtaXRNb3ZlRW1wdHlWYWx1
ZShqc05hTigpKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAg
ICBpc0NvbnRpZ3VvdXMubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1
b3VzKSkpLCB0ZW1wVmFsdWUpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9n
cmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSkpLCB0ZW1wVmFs
dWUpOwogICAgICAgICBlbWl0TW92ZUVtcHR5VmFsdWUoSlNWYWx1ZSgpKTsKICAgICAgICAgZG9u
ZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAgICBpc0ludDMyLmxpbmsoJm1faml0KTsK
LSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oQXJyYXlXaXRoSW50MzIpKSksIHRlbXBWYWx1ZSk7CisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEludDMyKSkpLCB0ZW1wVmFsdWUpOwogICAgICAgICBlbWl0TW92ZUVtcHR5VmFsdWUoSlNWYWx1
ZSgpKTsKIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTk5OTQsMTAgKzk5OTQsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U2xpY2UoTm9kZSogbm9kZSkKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdGVtcFZhbHVl
KTsKICAgICAgICAgaWYgKG5vZGUtPm51bUNoaWxkcmVuKCkgPT0gNCkKLSAgICAgICAgICAgIGVt
aXRQb3B1bGF0ZVNsaWNlSW5kZXgobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSwg
c3RkOjpudWxsb3B0LCB0ZW1wVmFsdWUsIHRlbXBHUFIpOworICAgICAgICAgICAgZW1pdFBvcHVs
YXRlU2xpY2VJbmRleChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzdGQ6Om51bGxvcHQs
IHRlbXBWYWx1ZSwgdGVtcEdQUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lm1v
dmUodGVtcFZhbHVlLCB0ZW1wR1BSKTsKLSAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRleCht
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBzdGQ6Om51bGxvcHQsIHRlbXBWYWx1
ZSwgbG9hZEluZGV4KTsKKyAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRleChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpLCBzdGQ6Om51bGxvcHQsIHRlbXBWYWx1ZSwgbG9hZEluZGV4KTsK
ICAgICB9CiAKICAgICBHUFJUZW1wb3JhcnkgdGVtcDUodGhpcyk7CkBAIC0xMDA0MCw3ICsxMDA0
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheUluZGV4T2YoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcnJheUluZGV4T2YpOwogCi0gICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IG5vZGUtPm51bUNoaWxkcmVuKCkgPT0gMyA/IDIgOiAzKSk7CisgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPm51bUNoaWxkcmVu
KCkgPT0gMyA/IDIgOiAzKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGluZGV4KHRoaXMpOwogICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wTGVuZ3RoKHRoaXMpOwogCkBAIC0xMDA1MSwxMSArMTAwNTEsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5SW5kZXhPZihOb2RlKiBub2RlKQogICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBsZW5ndGhHUFIpOwogCiAgICAgaWYgKG5vZGUt
Pm51bUNoaWxkcmVuKCkgPT0gNCkKLSAgICAgICAgZW1pdFBvcHVsYXRlU2xpY2VJbmRleChtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpLCBzdGQ6Om51bGxvcHQsIGxlbmd0aEdQUiwg
aW5kZXhHUFIpOworICAgICAgICBlbWl0UG9wdWxhdGVTbGljZUluZGV4KG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMiksIHN0ZDo6bnVsbG9wdCwgbGVuZ3RoR1BSLCBpbmRleEdQUik7CiAgICAg
ZWxzZQogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgaW5kZXhHUFIpOwogCi0g
ICAgRWRnZSYgc2VhcmNoRWxlbWVudEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOworICAgIEVkZ2UmIHNlYXJjaEVsZW1lbnRFZGdlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKTsKICAgICBzd2l0Y2ggKHNlYXJjaEVsZW1lbnRFZGdlLnVzZUtpbmQoKSkgewog
ICAgIGNhc2UgSW50MzJVc2U6CiAgICAgY2FzZSBPYmplY3RVc2U6CkBAIC0xMDI0Miw4ICsxMDI0
Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm9kZSogbm9kZSkK
IHsKICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogCi0gICAgRWRn
ZSYgc3RvcmFnZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAg
IEVkZ2UmIGFycmF5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Cisg
ICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAg
IEVkZ2UmIGFycmF5RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGFycmF5RWRnZSk7CiAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CkBAIC0xMDI3Myw3ICsxMDI3Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm9kZSogbm9kZSkKICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgIGlmIChlbGVt
ZW50Q291bnQgPT0gMSkgewotICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBl
bGVtZW50ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IEludDMyVXNlKTsKICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlbGVtZW50KTsKQEAgLTEwMjk3LDcgKzEwMjk3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2RlKiBub2RlKQog
CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRl
eCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBFZGdl
IGVsZW1lbnQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCAr
IGVsZW1lbnRPZmZzZXQpOworICAgICAgICAgICAgICAgIEVkZ2UgZWxlbWVudCA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IEludDMyVXNlKTsKICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMihlbGVtZW50KTsKICAgICAgICAgICAgIH0KQEAgLTEwMzI1
LDcgKzEwMzI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2Rl
KiBub2RlKQogCiAgICAgICAgIHN0b3JhZ2VEb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7
ICsrZWxlbWVudEluZGV4KSB7Ci0gICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKKyAg
ICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1l
bnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgZWxlbWVudCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsgLy8gV2UgZGlkIHR5
cGUgY2hlY2tzIGFib3ZlLgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFs
dWUuanNWYWx1ZVJlZ3MoKTsKIApAQCAtMTAzNDcsNyArMTAzNDcsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEFycmF5OjpE
b3VibGU6IHsKICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAgICBF
ZGdlJiBlbGVtZW50ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zm
c2V0KTsKKyAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGVsZW1lbnQp
OwogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBlbGVtZW50
KTsKICAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOwpAQCAtMTAzNjcs
NyArMTAzNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9
IDA7IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50SW5kZXgpIHsKLSAgICAg
ICAgICAgIEVkZ2UgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxl
bWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlIGVsZW1lbnQgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGVsZW1lbnRJbmRleCArIGVsZW1lbnRPZmZzZXQpOwog
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudXNlS2luZCgpID09IERvdWJsZVJlcFJlYWxVc2Up
OwogICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGVsZW1lbnQpOwogICAgICAgICB9CkBAIC0x
MDM5NCw3ICsxMDM5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2go
Tm9kZSogbm9kZSkKIAogICAgICAgICBzdG9yYWdlRG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVudENv
dW50OyArK2VsZW1lbnRJbmRleCkgewotICAgICAgICAgICAgRWRnZSYgZWxlbWVudCA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudEluZGV4ICsgZWxlbWVudE9mZnNldCk7
CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBl
bGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWUodGhpcywgZWxlbWVudCk7CiAgICAgICAgICAgICBGUFJSZWcgdmFsdWVG
UFIgPSB2YWx1ZS5mcHIoKTsKIApAQCAtMTA0MTgsNyArMTA0MTgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGF0IHRoZSByZXN1bHQgb2YgQXJyYXlQdXNoIGlzIEludDMyIGluIEFJLgogICAgICAg
ICBpbnQzMl90IGxhcmdlc3RQb3NpdGl2ZUludDMyTGVuZ3RoID0gMHg3ZmZmZmZmZiAtIGVsZW1l
bnRDb3VudDsKICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAgICBF
ZGdlJiBlbGVtZW50ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50T2Zm
c2V0KTsKKyAgICAgICAgICAgIEVkZ2UmIGVsZW1lbnQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIGVsZW1lbnRPZmZzZXQpOwogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgZWxlbWVudCk7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5q
c1ZhbHVlUmVncygpOwogCkBAIC0xMDQ3MCw3ICsxMDQ3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVB1c2goTm9kZSogbm9kZSkKIAogICAgICAgICBzdG9yYWdlRG9uZS5s
aW5rKCZtX2ppdCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgZWxlbWVudEluZGV4ID0gMDsgZWxl
bWVudEluZGV4IDwgZWxlbWVudENvdW50OyArK2VsZW1lbnRJbmRleCkgewotICAgICAgICAgICAg
RWRnZSYgZWxlbWVudCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgZWxlbWVudElu
ZGV4ICsgZWxlbWVudE9mZnNldCk7CisgICAgICAgICAgICBFZGdlJiBlbGVtZW50ID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBlbGVtZW50SW5kZXggKyBlbGVtZW50T2Zmc2V0KTsKICAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGVsZW1lbnQpOwogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKIApAQCAtMTA1MDYs
NyArMTA1MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUoTm9k
ZSogbm9kZSkKICAgICAgICAgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKICAgICAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0
aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVx
dWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCBOb1Jlc3VsdCwgJnZtKCksIHNldCkpOworICAgICAg
ICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOZWVk
VG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIE5vUmVz
dWx0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3RlZEltbVB0cihzZXQpKSk7CiAgICAgCiAg
ICAgbm9SZXN1bHQobm9kZSk7CiB9CkBAIC0xMDUzNiw3ICsxMDUzNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdChOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVHlwZU9mSXNPYmplY3QoTm9kZSogbm9kZSkKIHsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAKICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKQEAgLTEwNTY5LDcgKzEwNTY5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqIG5vZGUp
CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
LSAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25UeXBlT2ZJc09iamVjdCwgcmVz
dWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uVHlwZU9mSXNPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTEwNTc5LDcgKzEwNTc5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZklzT2JqZWN0KE5vZGUqIG5vZGUp
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0NhbGxhYmxlKE5vZGUqIG5vZGUsIFNf
SklUT3BlcmF0aW9uX0dDIHNsb3dQYXRoT3BlcmF0aW9uKQogewotICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIAogICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlUmVncyB2
YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwpAQCAtMTA2MDYsNyArMTA2MDYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNDYWxsYWJsZShOb2RlKiBub2RlLCBTX0pJVE9w
ZXJhdGlvbl9HQyBzbG93UGF0aE9wZQogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgc2xvd1Bh
dGhPcGVyYXRpb24sIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpKSk7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC0xMDYyOCw3
ICsxMDYyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0NvbnN0cnVjdG9yKE5v
ZGUqIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSogbm9k
ZSkKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICAKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsK
QEAgLTEwNjQxLDcgKzEwNjQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVP
ZihOb2RlKiBub2RlKQogICAgIG1faml0LmVtaXRUeXBlT2YoCiAgICAgICAgIHZhbHVlUmVncywg
cmVzdWx0R1BSLAogICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91
Z2gpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9qaXQuZ3JhcGgoKSwgdm0oKS5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpLCByZXN1bHRHUFIp
OwogICAgICAgICAgICAgaWYgKCFmYWxsc1Rocm91Z2gpCiAgICAgICAgICAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfSwKQEAgLTEwNjUyLDcgKzEwNjUyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKiBub2RlKQogCiAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25UeXBlT2ZPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2Jq
ZWN0LAorICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvblR5cGVPZk9iamVjdCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLAogICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwogICAgIAogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTEwNzU4LDcgKzEwNzU4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCiAgICAgfQog
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJC
YWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTEwNzgwLDcgKzEwNzgwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3Vs
dC5ncHIoKSwgJnZtKCksIGJhc2VHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3Vs
dC5ncHIoKSwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGJhc2VHUFIpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwpAQCAtMTA4MDAsNyArMTA4MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKICAgICBtX2ppdC5h
ZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSksIHNjcmF0Y2hHUFIxKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlU2ltcGxlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEsICZ2bSgpKSk7Cisg
ICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVTaW1w
bGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSMSwgVHJ1c3Rl
ZEltbVB0cigmdm0oKSkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNl
dCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KQogICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBz
aXplb2Yodm9pZCopKSkpOwpAQCAtMTA4MjQsNyArMTA4MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQ
cm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgJnZtKCksIGJhc2VHUFIsIG5ld1NpemUgLyBz
aXplb2YoSlNWYWx1ZSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRl
Q29tcGxleFByb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwpAQCAtMTA4NDcsNyArMTA4NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgIG1faml0LmFkZFB0cihK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc2NyYXRjaEdQUjEpOwogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0
eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCAmdm0oKSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkp
OworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRl
U2ltcGxlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbVB0cigmdm0oKSks
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IG9mZnNl
dCA9IG9sZFNpemU7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obmV3U2l6ZSk7IG9m
ZnNldCArPSBzaXplb2Yodm9pZCopKQogICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQg
KyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwpAQCAtMTA5MzksNyArMTA5Mzks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2RlKiBub2RlKQogICAg
IH07CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgbV9qaXQuZ3JhcGgoKS5kb1RvQ2hp
bGRyZW4obm9kZSwgWyZdKEVkZ2UgZWRnZSkgeworICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKG5v
ZGUsIFsmXShFZGdlIGVkZ2UpIHsKICAgICAgICAgaWYgKCFpbmRleCkKICAgICAgICAgICAgIGFw
cGVuZENlbGwoZWRnZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMDIsOSArMTEwMDIsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRlcihOb2RlKiBub2RlKQogCiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVRDYWdl
KCkpCi0gICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSklQ
PihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUoYmFz
ZUdQUiksIGlkZW50aWZpZXJVSUQobm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmll
ck51bWJlciksIGdldHRlci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzPEpfSklUT3BlcmF0aW9uX0dKSVA+KFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihp
ZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIp
KSwgVHJ1c3RlZEltbVB0cihnZXR0ZXIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlvbl9HSkk+
KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
R1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxKX0pJVE9wZXJhdGlv
bl9HSkk+KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0
ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXIpKSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bSgpLnRvcENhbGxGcmFtZSk7CiAgICAgICAg
IG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKQEAgLTExMDQ5LDcgKzExMDQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNh
bGxET01HZXR0ZXIoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrSlNDYXN0KE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBu
b2RlLCBub2RlLT5vcCgpID09IENoZWNrSlNDYXN0IHx8IG5vZGUtPm9wKCkgPT0gQ2hlY2tOb3RK
U0Nhc3QpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDaGVj
a0pTQ2FzdCB8fCBub2RlLT5vcCgpID09IENoZWNrTm90SlNDYXN0KTsKICAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IG5vZGUtPmNsYXNzSW5mbygpOwogICAgIGlmIChjbGFzc0luZm8t
PmluaGVyaXRzSlNUeXBlUmFuZ2UpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTA3Niw3ICsxMTA3Niw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0pTQ2FzdChOb2RlKiBub2RlKQogCiAgICAgICAgIG1f
aml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGJhc2VHUFIsIG90aGVyR1BSKTsKICAgICAgICAg
bV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwgc3BlY2lmaWVkR1BSKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwgc3Bl
Y2lmaWVkR1BSKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOwogICAgICAgICBhdXRvIGZvdW5kID0gbV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVy
czo6RXF1YWwsIG90aGVyR1BSLCBzcGVjaWZpZWRHUFIpOwpAQCAtMTE0MzgsNyArMTE0MzgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0KE5vZGUqIG5vZGUp
CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogICAgIAogICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5l
d1N0cmluZ09iamVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgb3BlcmFuZEdQUiwgbm9kZS0+c3RydWN0
dXJlKCkpKTsKKyAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1N0cmluZ09iamVj
dCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgb3BlcmFuZEdQUiwgbm9kZS0+c3Ry
dWN0dXJlKCkpKTsKICAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBA
IC0xMTQ0OSw3ICsxMTQ0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTeW1i
b2woTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1N5bWJvbCwg
cmVzdWx0R1BSLCAmdm0oKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3U3lt
Ym9sLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpKTsKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMTQ4Miw5ICsxMTQ4Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdTeW1ib2woTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZShOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIGF1dG8gdHlw
ZWRBcnJheVR5cGUgPSBub2RlLT50eXBlZEFycmF5VHlwZSgpOwotICAgIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkodHlwZWRBcnJheVR5cGUpKTsK
KyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29uY3VycmVudGx5KHR5cGVk
QXJyYXlUeXBlKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLmdldCgpKTsKIAogI2lm
IFVTRShMQVJHRV9UWVBFRF9BUlJBWVMpCkBAIC0xMTYxOSw3ICsxMTYxOSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdSZWdleHAoTm9kZSogbm9kZSkKIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGF1dG8gc3RydWN0dXJlID0gbV9qaXQuZ3Jh
cGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgYXV0byBzdHJ1Y3R1
cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8
UmVnRXhwT2JqZWN0PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVy
Zmx5LCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dQYXRoKTsKIApAQCAtMTE2MjksNyAr
MTE2MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UmVnZXhwKE5vZGUqIG5v
ZGUpCiAgICAgbV9qaXQuc3RvcmVWYWx1ZShsYXN0SW5kZXhSZWdzLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MocmVzdWx0R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNldE9mTGFzdEluZGV4KCkpKTsKICAg
ICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5k
ZXgsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ2V4cCwgbGFzdElu
ZGV4UmVncykpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgcmVnZXhwKSwgbGFzdEluZGV4UmVncykpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQpAQCAtMTI0OTIsOCArMTI0OTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGUoTm9kZSosIEVkZ2UgZWRnZSkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0
Y2hJbnRKdW1wKAogICAgIFN3aXRjaERhdGEqIGRhdGEsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNj
cmF0Y2gpCiB7Ci0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2ppdC5ncmFwaCgpLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdC5ncmFw
aCgpLnN3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fZ3JhcGguc3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogICAgIG1faml0LnN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCB2YWx1ZSk7CiAg
ICAgYWRkQnJhbmNoKApAQCAtMTI1MzQsOSArMTI1MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEpCiAgICAgICAgIG5v
dEludDMyLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaElmTm90
TnVtYmVyKHZhbHVlUmVncywgc2NyYXRjaCksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKIAot
ICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
aml0LmdyYXBoKCkudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRl
eCk7CisgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4
KTsKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRj
aCwgJnZtKCksIHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCwgdW5saW5rZWRUYWJs
ZS5tX21pbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRh
cmdldEZvckRvdWJsZSwgc2NyYXRjaCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHZhbHVlUmVncywg
ZGF0YS0+c3dpdGNoVGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKIAogICAgICAgICBtX2ppdC5mYXJKdW1wKHNjcmF0Y2gs
IEpTU3dpdGNoUHRyVGFnKTsKQEAgLTEyNzc2LDcgKzEyNzc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRh
dGEsIEdQUlIKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwogCiAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwotICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdC5ncmFwaCgpLnN0cmluZ1N3aXRjaEp1bXBU
YWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9ncmFwaC5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJ
bmRleCk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
ICAgICBib29sIGNhbkRvQmluYXJ5U3dpdGNoID0gdHJ1ZTsKQEAgLTEyNzk3LDcgKzEyNzk3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKE5vZGUqIG5v
ZGUsIFN3aXRjaERhdGEqIGRhdGEsIEdQUlIKIAogICAgIGlmICghY2FuRG9CaW5hcnlTd2l0Y2gg
fHwgdG90YWxMZW5ndGggPiBPcHRpb25zOjptYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxM
ZW5ndGgoKSkgewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgJnVubGlu
a2VkVGFibGUsIHN0cmluZyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nLCBzdHJpbmcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBUcnVzdGVkSW1tUHRyKCZ1bmxpbmtlZFRh
YmxlKSwgc3RyaW5nKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAg
bV9qaXQuZmFySnVtcChzdHJpbmcsIEpTU3dpdGNoUHRyVGFnKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTI4MzQsNyArMTI4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3Ry
aW5nT25TdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSwgR1BSUgogICAgIAogICAg
IHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3Ry
aW5nKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0
Y2hUYWJsZUluZGV4KSwgJnVubGlua2VkVGFibGUsIHN0cmluZyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRleCksIFRydXN0ZWRJ
bW1QdHIoJnVubGlua2VkVGFibGUpLCBzdHJpbmcpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG1faml0LmZhckp1bXAoc3Ry
aW5nLCBKU1N3aXRjaFB0clRhZyk7CkBAIC0xMjkyMSw3ICsxMjkyMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIFN3aXRjaENlbGw6IHsKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gfQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjk2NCw3ICsxMjk2NCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKICAgICAgICAg
b2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRob3V0RmVuY2UoYmFzZUdQUikpOwogCiAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIGJhc2VHUFIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBiYXNlR1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAKICAg
ICBvay5saW5rKCZtX2ppdCk7CkBAIC0xMjk4MSw3ICsxMjk4MSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZSogbm9kZSkKICAgICBHUFJSZWcgYWNj
ZXNzb3JHUFIgPSBhY2Nlc3Nvci5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwg
bm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGFjY2Vzc29yR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG5vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlJZCA/IG9wZXJhdGlvblB1dEdldHRlckJ5SWQg
OiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZUdQUiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KSkpLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgYWNjZXNzb3JHUFIpOwogICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTEyOTk5LDcgKzEy
OTk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEdldHRlclNldHRlckJ5SWQo
Tm9kZSogbm9kZSkKICAgICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwogCiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdl
dHRlckdQUiwgc2V0dGVyR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIFRydXN0ZWRJbW1Q
dHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKSwgbm9kZS0+YWNjZXNz
b3JBdHRyaWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKICNlbHNlCiAgICAgLy8gVGhl
c2UgSlNWYWx1ZXMgbWF5IGJlIEpTVW5kZWZpbmVkIE9SIEpTRnVuY3Rpb24qLgogICAgIC8vIEF0
IHRoYXQgdGltZSwKQEAgLTEzMDExLDcgKzEzMDExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEdldHRlclNldHRlckJ5SWQoTm9kZSogbm9kZSkKICAgICBKU1ZhbHVlUmVncyBz
ZXR0ZXJSZWdzID0gc2V0dGVyLmpzVmFsdWVSZWdzKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkpLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgZ2V0dGVyUmVncy5wYXlsb2Fk
R1BSKCksIHNldHRlclJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKSwg
bm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCksIGdldHRlclJlZ3MucGF5bG9hZEdQUigpLCBzZXR0
ZXJSZWdzLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogCkBAIC0xMzAyNSw3ICsxMzAyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZXNvbHZlU2NvcGUoTm9kZSogbm9kZSkKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQUiwgaWRlbnRpZmllclVJ
RChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blJlc29sdmVTY29wZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc2Nv
cGVHUFIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCkpKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiB9CkBAIC0xMzAzNyw3ICsxMzAzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKE5vZGUqIG5v
ZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5n
RnVuY0RlY2xJbkV2YWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBz
Y29wZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2
YWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQUiwgVHJ1
c3RlZEltbVB0cihpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CiB9CkBAIC0xMzA2NSw3ICsxMzA2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXREeW5hbWljVmFyKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkdldER5bmFtaWNWYXIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBzY29wZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2Rl
LT5nZXRQdXRJbmZvKCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0RHluYW1pY1Zh
ciwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNjb3BlR1BSLCBUcnVz
dGVkSW1tUHRyKGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSksIG5vZGUt
PmdldFB1dEluZm8oKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtMTMwNzksNyArMTMwNzksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0RHluYW1pY1ZhcihOb2RlKiBub2RlKQogICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAKICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24obm9kZS0+ZWNtYU1vZGUoKS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdCA6IG9wZXJhdGlvblB1dER5bmFtaWNWYXJO
b25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzY29wZUdQUiwgdmFsdWVSZWdz
LCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmdldFB1dElu
Zm8oKSk7CisgICAgY2FsbE9wZXJhdGlvbihub2RlLT5lY21hTW9kZSgpLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXREeW5hbWljVmFyU3RyaWN0IDogb3BlcmF0aW9uUHV0RHluYW1pY1Zhck5vblN0
cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNjb3BlR1BSLCB2YWx1ZVJlZ3MsIFRy
dXN0ZWRJbW1QdHIoaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKSwgbm9k
ZS0+Z2V0UHV0SW5mbygpKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQpAQCAtMTM0NDUsNyArMTM0NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTGF6eUpTQ29uc3RhbnQoTm9kZSogbm9kZSkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogewogICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlU2V0KCkuYXQoMCk7Ci0gICAg
QVNTRVJUKG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCktPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8U3RydWN0dXJlKj4odm0oKSkgPT0gc3RydWN0dXJlLmdldCgpKTsKKyAgICBBU1NFUlQo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxTdHJ1Y3R1
cmUqPih2bSgpKSA9PSBzdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YSYgZGF0YSA9IG5vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKICAgICAg
ICAgCkBAIC0xMzQ1Niw3ICsxMzQ1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVN
YXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogCiAgICAgaWYgKGhhc0luZGV4aW5nSGVh
ZGVyKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAxICsgaSk7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEgKyBpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5tX3Byb3BlcnRp
ZXNbaV0ua2luZCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1YmxpY0xlbmd0aFBMb2M6CiAgICAg
ICAgICAgICAgICAgcHVibGljTGVuZ3RoID0gZWRnZS0+YXNJbnQzMigpOwpAQCAtMTM0ODQsNyAr
MTM0ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmpl
Y3QoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgRWRnZSBlZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxICsgaSk7CisgICAgICAgIEVkZ2Ug
ZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpOwogICAgICAgICBQcm9tb3Rl
ZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CiAg
ICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKICAgICAgICAgY2FzZSBJbmRleGVk
UHJvcGVydHlQTG9jOiB7CkBAIC0xMzQ5Niw3ICsxMzQ5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdChOb2RlKiBub2RlKQogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBOYW1lZFByb3BlcnR5UExvYzogewotICAgICAgICAgICAgU3RyaW5nSW1w
bCogdWlkID0gbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW2Rlc2NyaXB0b3IuaW5mbygpXTsK
KyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkZXNj
cmlwdG9yLmluZm8oKV07CiAgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkg
OiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewogICAgICAgICAgICAg
ICAgIGlmICh1aWQgIT0gZW50cnkua2V5KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTEzNTIwLDExICsxMzUyMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0
ZXJpYWxpemVOZXdPYmplY3QoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVJlY29yZFJlZ0V4cENhY2hlZFJlc3VsdChOb2RlKiBub2RlKQogewotICAgIEVkZ2UgZ2xv
YmFsT2JqZWN0RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAg
RWRnZSByZWdFeHBFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICBFZGdlIHN0cmluZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwot
ICAgIEVkZ2Ugc3RhcnRFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsK
LSAgICBFZGdlIGVuZEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDQpOwor
ICAgIEVkZ2UgZ2xvYmFsT2JqZWN0RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgRWRnZSByZWdFeHBFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAg
ICBFZGdlIHN0cmluZ0VkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgIEVk
Z2Ugc3RhcnRFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKTsKKyAgICBFZGdlIGVu
ZEVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpOwogCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZ2xvYmFsT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdEVkZ2UpOwogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHJlZ0V4cCh0aGlzLCByZWdFeHBFZGdlKTsKQEAgLTEzNTcxLDE2ICsx
MzU3MSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5lRGF0YVByb3BlcnR5
KE5vZGUqIG5vZGUpCiAgICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyA+PSA2LCAiV2UgYXJlIGFzc3VtaW5nIHdlIGhhdmUgZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtl
IHRoaXMgY2FsbCB3aXRob3V0IGluY3JlbWVudGFsbHkgc2V0dGluZyB1cCB0aGUgYXJndW1lbnRz
LiIpOwogI2VuZGlmCiAKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogCi0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKIAotICAgIFNwZWN1bGF0ZUludDMyT3Bl
cmFuZCBhdHRyaWJ1dGVzKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykp
OworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBhdHRyaWJ1dGVzKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBhdHRyaWJ1dGVzR1BSID0gYXR0cmlidXRl
cy5ncHIoKTsKIAotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMSk7CisgICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKICAgICBzd2l0Y2ggKHByb3BlcnR5RWRnZS51c2VLaW5kKCkpIHsKICAg
ICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwpAQCAtMTM2NDksMTkgKzEzNjQ5LDE5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KE5vZGUqIG5vZGUpCiAg
ICAgc3RhdGljX2Fzc2VydChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2LCAiV2UgYXJl
IGFzc3VtaW5nIHdlIGhhdmUgZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIHRoaXMgY2FsbCB3aXRo
b3V0IGluY3JlbWVudGFsbHkgc2V0dGluZyB1cCB0aGUgYXJndW1lbnRzLiIpOwogI2VuZGlmCiAK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZ2V0dGVyKHRoaXMsIG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGdldHRl
cih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKICAgICBHUFJSZWcgZ2V0dGVy
R1BSID0gZ2V0dGVyLmdwcigpOwogCi0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2V0dGVyKHRo
aXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHNldHRlcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAg
ICBHUFJSZWcgc2V0dGVyR1BSID0gc2V0dGVyLmdwcigpOwogCi0gICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIGF0dHJpYnV0ZXModGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCA0
KSk7CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGF0dHJpYnV0ZXModGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgR1BSUmVnIGF0dHJpYnV0ZXNHUFIgPSBhdHRyaWJ1
dGVzLmdwcigpOwogCi0gICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAxKTsKKyAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpOwogICAgIHN3aXRjaCAocHJvcGVydHlFZGdlLnVzZUtpbmQoKSkgewog
ICAgIGNhc2UgU3RyaW5nVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7CkBAIC0xMzc4Nyw3ICsxMzc4Nyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkoTm9kZSogbm9kZSkKIAogICAgIHBh
c3NUaHJvdWdoQ2FzZXMubGluaygmbV9qaXQpOwogICAgIG1faml0Lm1vdmVWYWx1ZVJlZ3Moa2V5
UmVncywgcmVzdWx0UmVncyk7Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25Ob3JtYWxpemVNYXBLZXlIZWFwQmlnSW50LCBOZWVk
VG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIHJlc3Vs
dFJlZ3MsICZ2bSgpLCBrZXlSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTm9ybWFsaXplTWFw
S2V5SGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNo
ZWNrTm90TmVlZGVkLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwga2V5UmVncy5w
YXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTEzODQzLDcgKzEzODQzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldE1hcEJ1Y2tldE5leHQoTm9kZSogbm9kZSkKICAgICAg
ICAgQVNTRVJUKG5vZGUtPmJ1Y2tldE93bmVyVHlwZSgpID09IEJ1Y2tldE93bmVyVHlwZTo6U2V0
KTsKICAgICAgICAgc2VudGluZWwgPSB2bSgpLnNlbnRpbmVsU2V0QnVja2V0KCk7CiAgICAgfQot
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwg
c2VudGluZWwpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgc2VudGluZWwpLCByZXN1bHRHUFIpOwogICAgIGRvbmUubGluaygm
bV9qaXQpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtMTQ0OTgsMTEg
KzE0NDk4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJDYXQoTm9kZSogbm9k
ZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5QnVmZmVyKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgYXV0byogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJs
ZUJ1dHRlcmZseSo+KCk7CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2RlID0gbm9kZS0+
aW5kZXhpbmdNb2RlKCk7Ci0gICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nTW9kZSkpOworICAgIFJlZ2lz
dGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihp
bmRleGluZ01vZGUpKTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ01vZGUpKSB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNDUxNyw5ICsxNDUxNyw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihOb2RlKiBub2RlKQogCiAgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGFycmF5LT50b0J1dHRlcmZseSgpKSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCBy
ZXN1bHQuZ3ByKCksICZ2bSgpLCBzdHJ1Y3R1cmUsIGFycmF5KSk7CisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0Fy
cmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGFycmF5KSkpOwogCi0gICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaW5kZXhpbmdNb2RlICYgSXNBcnJheSwg
aW5kZXhpbmdNb2RlKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBpbmRleGlu
Z01vZGUgJiBJc0FycmF5LCBpbmRleGluZ01vZGUpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDUyNyw3ICsxNDUyNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihOb2RlKiBub2Rl
KQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVz
dWx0LmdwcigpLCAmdm0oKSwgc3RydWN0dXJlLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVy
YW5kKCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1
bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUsIFRydXN0ZWRJbW1QdHIo
bm9kZS0+Y2VsbE9wZXJhbmQoKSkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC0xNDUzNSw3ICsxNDUzNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihOb2RlKiBub2RlKQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZShOb2RlKiBub2Rl
KQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhh
c0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTQ1NTUsMTAgKzE0NTU1LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqIG5vZGUpCiAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBHUFJSZWcgc3RydWN0dXJl
R1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5fQVJSQVlfU1RPUkFH
RV9DT05TVFJVQ1RJT05fTEVOR1RIKSk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSks
IHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVn
aXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBiaWdM
ZW5ndGgubGluaygmbV9qaXQpOwotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5n
cmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKSwgc3Ry
dWN0dXJlR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSksIHN0cnVjdHVyZUdQUik7CiAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdHJ1Y3R1
cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBA
IC0xNDU4NSwxMCArMTQ1ODUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYXkoTm9kZSogbm9kZSkKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5
cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpLAot
ICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbV9qaXQu
Z3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1
cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLCBhcmd1bWVudFJlZ3MpOwor
ICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25j
dXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLCBhcmd1bWVudFJlZ3MpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKQEAgLTE0NjYzLDE1ICsxNDY2MywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0S2V5c09yT2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyhOb2RlKiBub2RlKQog
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0J1dEFycmF5QnVmZmVy
Q2FzZXM7CiAKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBhcnJheVN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCku
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24oQ29weU9uV3JpdGVBcnJheVdpdGhDb250aWd1b3VzKSk7Cisg
ICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgYXJyYXlTdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKENv
cHlPbldyaXRlQXJyYXlXaXRoQ29udGlndW91cykpOwogCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KHNjcmF0Y2hHUFIsIHNjcmF0Y2gzR1BSKTsKICAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVz
dGVkSW1tMzIoSlNJbW11dGFibGVCdXR0ZXJmbHk6Om9mZnNldE9mRGF0YSgpKSwgc2NyYXRjaEdQ
Uik7CiAKICAgICAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cihhcnJheVN0cnVjdHVyZSksIHNjcmF0Y2hHUFIsIHN0cnVjdHVyZUdQ
Uiwgc2NyYXRjaDJHUFIsIHNsb3dCdXRBcnJheUJ1ZmZlckNhc2VzKTsKIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dCdXRBcnJheUJ1ZmZlckNhc2Vz
LCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0R1BSLCAmdm0oKSwgYXJyYXlT
dHJ1Y3R1cmUsIHNjcmF0Y2gzR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd0J1dEFycmF5QnVmZmVyQ2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5l
d0FycmF5QnVmZmVyLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcnJheVN0cnVj
dHVyZSwgc2NyYXRjaDNHUFIpKTsKIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+b3AoKSA9PSBPYmplY3RLZXlzID8g
b3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCA6IG9wZXJhdGlvbk9iamVjdEdldE93blByb3BlcnR5
TmFtZXNPYmplY3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9iamVj
dEdQUikpOwogCkBAIC0xNDc1MCw3ICsxNDc1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RBc3NpZ24oTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1
c2Uga2luZCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMTQ4NTksOCArMTQ4NTksOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUHJvbWlzZShOb2RlKiBub2RlKQogICAg
IC8vIFdlIGNhbiBhdm9pZCB1c2luZyBhbiBhZGRpdGlvbmFsIEdQUiB0aGlzIHdheQogICAgIEdQ
UlJlZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKIAotICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG5vZGUtPmlzSW50ZXJuYWxQ
cm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmludGVybmFsUHJvbWlzZVN0cnVjdHVyZSgpIDogZ2xv
YmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpKSwgc3RydWN0dXJlR1BSKTsKLSAgICBhdXRv
IGZhc3RQcm9taXNlUGF0aCA9IG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBj
YWxsZWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG5vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBnbG9iYWxPYmplY3QtPmludGVybmFsUHJvbWlzZUNvbnN0
cnVjdG9yKCkgOiBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1Y3RvcigpKSk7CisgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUobm9kZS0+aXNJ
bnRlcm5hbFByb21pc2UoKSA/IGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlU3RydWN0dXJl
KCkgOiBnbG9iYWxPYmplY3QtPnByb21pc2VTdHJ1Y3R1cmUoKSkpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgIGF1dG8gZmFzdFByb21pc2VQYXRoID0gbV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
RXF1YWwsIGNhbGxlZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbm9k
ZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlQ29u
c3RydWN0b3IoKSA6IGdsb2JhbE9iamVjdC0+cHJvbWlzZUNvbnN0cnVjdG9yKCkpKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTE0ODcyLDcgKzE0ODcy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVByb21pc2UoTm9kZSogbm9k
ZSkKICAgICBtX2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0cnVjdHVyZUdQUiwg
c3RydWN0dXJlR1BSKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+aXNJbnRl
cm5hbFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6Omlu
Zm8oKSksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKLSAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGdsb2Jh
bE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSkpKTsKIAogICAgIGZhc3RQcm9taXNlUGF0aC5saW5rKCZtX2pp
dCk7CkBAIC0xNDg4Myw5ICsxNDg4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
cmVhdGVQcm9taXNlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0
aEtub3duU2l6ZTxKU1Byb21pc2U+KHJlc3VsdEdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHks
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzLCBzaXplb2YoSlNQcm9taXNlKSk7
CiAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nKSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhy
ZXN1bHRHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OkZpZWxkOjpGbGFncykpKSk7CiAg
ICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6RmllbGQ6OlJlYWN0
aW9uc09yUmVzdWx0KSkpKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVuY2UobV9qaXQudm0oKSk7Cisg
ICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/
IG9wZXJhdGlvbkNyZWF0ZUludGVybmFsUHJvbWlzZSA6IG9wZXJhdGlvbkNyZWF0ZVByb21pc2Us
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xv
YmFsT2JqZWN0KSwgY2FsbGVlR1BSKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IG9wZXJh
dGlvbkNyZWF0ZUludGVybmFsUHJvbWlzZSA6IG9wZXJhdGlvbkNyZWF0ZVByb21pc2UsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwg
Y2FsbGVlR1BSKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0x
NDkyMSw3ICsxNDkyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRl
cm5hbEZpZWxkT2JqZWN0KE5vZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGVyCiAgICAgbV9qaXQuZW1p
dE5vbk51bGxEZWNvZGVTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVHUFIsIHN0cnVjdHVyZUdQUik7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0Y2gxR1BS
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gx
R1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKQEAg
LTE0OTMwLDkgKzE0OTMwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUlu
dGVybmFsRmllbGRPYmplY3QoTm9kZSogbm9kZSwgT3BlcmF0aW9uIG9wZXIKICAgICBBU1NFUlQo
aW5pdGlhbFZhbHVlcy5zaXplKCkgPT0gSlNDbGFzczo6bnVtYmVyT2ZJbnRlcm5hbEZpZWxkcyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaW5pdGlhbFZhbHVlcy5zaXpl
KCk7ICsraW5kZXgpCiAgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGluaXRpYWxWYWx1
ZXNbaW5kZXhdLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKLSAgICBtX2pp
dC5tdXRhdG9yRmVuY2UobV9qaXQudm0oKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkp
OwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIGdsb2JhbE9iamVjdCksIGNhbGxlZUdQUikpOworICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBjYWxs
ZWVHUFIpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE0OTcx
LDcgKzE0OTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChOb2Rl
KiBub2RlKQogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAgICAgfQogCi0gICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25OZXdPYmplY3QsIHJlc3VsdEdQUiwgJnZtKCksIHN0cnVjdHVyZSkpOworICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2Jq
ZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpKTsKIAogICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE0OTk2LDkgKzE0OTk2LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRmllbGRPYmplY3RJbXBsKE5v
ZGUqIG5vZGUsIE9wZXJhdGlvbiBvcGUKICAgICBzdGF0aWNfYXNzZXJ0KGluaXRpYWxWYWx1ZXMu
c2l6ZSgpID09IEpTQ2xhc3M6Om51bWJlck9mSW50ZXJuYWxGaWVsZHMpOwogICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluaXRpYWxWYWx1ZXMuc2l6ZSgpOyArK2luZGV4KQog
ICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWVzW2luZGV4XSwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNl
KG1faml0LnZtKCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSh2bSgpKTsKIAotICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwg
cmVzdWx0R1BSLCAmdm0oKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
KTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTE1MDQxLDcgKzE1
MDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0ludGVybmFsRmllbGRPYmpl
Y3QoTm9kZSogbm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvUHJpbWl0aXZl
KE5vZGUqIG5vZGUpCiB7Ci0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwogICAgIEpTVmFs
dWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGFyZ3VtZW50KTsKIApAQCAtMTUwNjMsNyAr
MTUwNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9QcmltaXRpdmUoTm9kZSog
bm9kZSkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvUHJvcGVydHlLZXkoTm9kZSog
bm9kZSkKIHsKLSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwor
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFVudHlwZWRVc2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYXJndW1lbnQpOwogCkBAIC0xNTA4Nyw3ICsxNTA4Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1Byb3BlcnR5S2V5KE5vZGUqIG5vZGUp
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb051bWVyaWMoTm9kZSogbm9kZSkKIHsK
LSAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOworICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1l
bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKQEAgLTE1MTMxLDcgKzE1MTMx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxOdW1iZXJDb25zdHJ1Y3RvcihO
b2RlKiBub2RlKQogICAgIH0KICNlbmRpZgogCi0gICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgp
LCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
OwogICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CkBAIC0xNTE5Miw3ICsxNTE5Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKiBub2RlKQogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcg
PSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5lbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHNjcmF0
Y2gxUmVnKTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgc2NyYXRjaDFSZWcsIGNhbGxTaXRlSW5kZXgpOwog
ICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkBAIC0xNTIxOCwxNyArMTUyMTksMTcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFkZChOb2RlKiBub2RlKQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWFwU2V0KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgbWFwKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAg
IEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKLSAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBtYXAodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgSlNWYWx1
ZU9wZXJhbmQga2V5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMykpOwogCiAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKICAgICBKU1ZhbHVl
UmVncyBrZXlSZWdzID0ga2V5LmpzVmFsdWVSZWdzKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3By
KCk7CiAKLSAgICBzcGVjdWxhdGVNYXBPYmplY3QobV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAwKSwgbWFwR1BSKTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSwgbWFwR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtMTUzNTAsMjggKzE1MzUxLDI4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrU2V0QWRkKE5vZGUqIG5vZGUpCiAgICAg
c3BlY3VsYXRlT2JqZWN0KG5vZGUtPmNoaWxkMigpLCBrZXlHUFIpOwogCiAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldlYWtTZXRBZGQsICZ2bSgpLCBz
ZXRHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFr
U2V0QWRkLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc2V0R1BSLCBrZXlHUFIsIGhhc2hHUFIpOwog
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KE5vZGUqIG5vZGUpCiB7Ci0gICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGtleSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICBTcGVjdWxhdGVJbnQz
Mk9wZXJhbmQgaGFzaCh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBtYXAodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQga2V5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNo
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogCiAgICAgR1BSUmVnIG1hcEdQ
UiA9IG1hcC5ncHIoKTsKICAgICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CiAgICAgR1BSUmVnIGhhc2hH
UFIgPSBoYXNoLmdwcigpOwogCi0gICAgc3BlY3VsYXRlV2Vha01hcE9iamVjdChtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBtYXBHUFIpOwotICAgIHNwZWN1bGF0ZU9iamVjdCht
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBrZXlHUFIpOworICAgIHNwZWN1bGF0
ZVdlYWtNYXBPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgbWFwR1BSKTsKKyAg
ICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwga2V5R1BSKTsK
IAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFr
TWFwU2V0LCAmdm0oKSwgbWFwR1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFzaEdQUik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFrTWFwU2V0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwg
bWFwR1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFzaEdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KQEAgLTE1NTg4LDcgKzE1NTg5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICNlbmRpZgogICAgIGVtaXRJbml0aWFsaXplQnV0dGVy
Zmx5KHN0b3JhZ2VHUFIsIHNpemVHUFIsIGVtcHR5VmFsdWVSZWdzLCByZXN1bHRHUFIpOwogCi0g
ICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVy
U3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSkpOworICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpKTsKIAog
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nh
c2VzKTsKIApAQCAtMTU1OTgsNyArMTU1OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwog
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dEdQUiwKICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFs
T2JqZWN0KSwKICAgICAgICAgc3RydWN0dXJlLAotICAgICAgICBzaG91bGRDb252ZXJ0TGFyZ2VT
aXplVG9BcnJheVN0b3JhZ2UgPyBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpIDogc3RydWN0dXJlLAorICAgICAgICBzaG91bGRDb252ZXJ0
TGFyZ2VTaXplVG9BcnJheVN0b3JhZ2UgPyBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpIDogc3RydWN0dXJlLAogICAgICAgICBzaXplR1BSLCBzdG9y
YWdlR1BSKSk7CiB9CiAKQEAgLTE1ODU4LDcgKzE1ODU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBK
U1ZhbHUKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VHUFIpLCBpZGVu
dGlmaWVyLnJhd0JpdHMoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJl
Z3MsCisgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCks
IE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BS
KSwgaWRlbnRpZmllci5yYXdCaXRzKCkpOwogICAgIH0KIApAQCAtMTYwNTksNyArMTYwNjAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kZSogbm9kZSkKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
clZhbHVlID0gYWxsb2NhdG9yRm9yQ29uY3VycmVudGx5PEpTUm9wZVN0cmluZz4odm0oKSwgc2l6
ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
LSAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUodm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRj
aEdQUiwgc2xvd1BhdGgpOworICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFs
bG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZSh2bSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAvLyBUaGlzIHB1dHMgbnVsbHB0ciBm
b3IgdGhlIGZpcnN0IGZpYmVyLiBJdCBtYWtlcyB2aXNpdENoaWxkcmVuIHNhZmUgZXZlbiBpZiB0
aGlzIEpTUm9wZVN0cmluZyBpcyBkaXNjYXJkZWQgZHVlIHRvIHRoZSBzcGVjdWxhdGlvbiBmYWls
dXJlIGluIHRoZSBmb2xsb3dpbmcgcGF0aC4KICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIwKCkpKTsKQEAgLTE2MTY1LDcgKzE2
MTY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZGUqIG5vZGUp
CiAKICAgICBhdXRvIGlzTm9uRW1wdHlTdHJpbmcgPSBtX2ppdC5icmFuY2hUZXN0MzIoQ0NhbGxI
ZWxwZXJzOjpOb25aZXJvLCBhbGxvY2F0b3JHUFIpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKG1faml0Lmdy
YXBoKCkubV92bSkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyhtX2dyYXBoLm1fdm0pKSwgcmVzdWx0
R1BSKTsKIAogICAgIGlzTm9uRW1wdHlTdHJpbmcubGluaygmbV9qaXQpOwogICAgIG1faml0Lm11
dGF0b3JGZW5jZSh2bSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCAzZTE0Mjk4MmZkNzg3NzJjNTM0MmYxZDYxNTQ0MGU4NTY2ODVkNmM3
Li4wMzE1YmEyMzEyMGVjNzNmMTY2ODU4YzBjYmVkNTQ3YjQ1MThkOTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xNzAsOSArMTcwLDkg
QEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIEJhc2ljQmxvY2sqIG5leHRCbG9jaygpCiAg
ICAgewogICAgICAgICBmb3IgKEJsb2NrSW5kZXggcmVzdWx0SW5kZXggPSBtX2Jsb2NrLT5pbmRl
eCArIDE7IDsgcmVzdWx0SW5kZXgrKykgewotICAgICAgICAgICAgaWYgKHJlc3VsdEluZGV4ID49
IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCkpCisgICAgICAgICAgICBpZiAocmVzdWx0SW5kZXgg
Pj0gbV9ncmFwaC5udW1CbG9ja3MoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1bHQgPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
KHJlc3VsdEluZGV4KSkKKyAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1bHQgPSBtX2dy
YXBoLmJsb2NrKHJlc3VsdEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgfQpAQCAtMzMyLDcgKzMzMiw3IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklU
IHsKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGls
bFZhbGlkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxW
YWxpZChjb2RlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1fZ3JhcGgubWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29kZU9yaWdpbik7CiAgICAgfQogICAgIGJv
b2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQogICAgIHsK
QEAgLTU4OCw3ICs1ODgsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgCiAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGlkZW50aWZpZXJVSUQodW5zaWduZWQgaW5kZXgpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW2luZGV4XTsKKyAgICAgICAg
cmV0dXJuIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpbmRleF07CiAgICAgfQogCiAgICAgLy8gU3Bp
bGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgSlNTdGFjay4KQEAgLTk3NCwxMCAr
OTc0LDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgICAgICBhcHBlbmRDYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBhZGRyZXNzLm9mZnNldCkpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9DYiBvcGVyYXRpb24sIENvZGVCbG9j
ayogY29kZUJsb2NrKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihWX0pJVE9wZXJhdGlvbl9DYiBvcGVyYXRpb24sIEdQ
UlJlZyBjb2RlQmxvY2tHUFIpCiAgICAgewotICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgQ29k
ZUJsb2NrKiBhcyBhIHdlYWstcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8
Vl9KSVRPcGVyYXRpb25fQ2I+KFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8dm9pZCo+KGNvZGVC
bG9jaykpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8Vl9KSVRPcGVyYXRpb25fQ2I+
KGNvZGVCbG9ja0dQUik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDI3YzM1
NWQzMDIzNGIwZjIzZmVlYTI2OThiYjNmOGU3OWM5YmExYzguLjYzYTdkZTkwZTU4NTE3ODM4OWMw
MGUwMDRmMjY4NmE2ZmM1ODBjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMjE1LDEzICsyMTUsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKICAgICBpZiAoYmFzZVRhZ0dQUk9yTm9u
ZSA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAog
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlk
RnVuY3Rpb24odHlwZSksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VQYXlsb2FkR1BSKSwKICAgICAgICAgICAgIGlkZW50
aWZpZXIucmF3Qml0cygpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nR2V0QnlJZEZ1bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0
VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLCBpZGVudGlm
aWVyLnJhd0JpdHMoKSk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiksIGlk
ZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAKICAgICBtX2ppdC5hZGRHZXRCeUlkKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWRXaXRoVGhpcygKICAgICBpZiAoYmFzZVRhZ0dQUk9yTm9uZSA9PSBJbnZh
bGlkR1BSUmVnICYmIHRoaXNUYWdHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwKICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VQYXlsb2FkR1BSKSwKICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHRoaXNQYXlsb2FkR1BSKSwKICAgICAgICAg
ICAgIGlkZW50aWZpZXIucmF3Qml0cygpKTsKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoaXMoCiAgICAgICAgIAogICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5bG9hZEdQUiksIEpTVmFs
dWVSZWdzKHRoaXNUYWdHUFIsIHRoaXNQYXlsb2FkR1BSKSwgaWRlbnRpZmllci5yYXdCaXRzKCkp
OworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgSlNWYWx1
ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh0aGlz
VGFnR1BSLCB0aGlzUGF5bG9hZEdQUiksIGlkZW50aWZpZXIucmF3Qml0cygpKTsKICAgICB9CiAK
ICAgICBtX2ppdC5hZGRHZXRCeUlkV2l0aFRoaXMoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC0z
MDMsNyArMzAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmVOdWxsT3JVbmRlZmluZWQoRWRnZSBvcGVyYW4KICAgICAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFs
T2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZW1v
dGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBt
X2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2JhbE9iamVjdEdQUiwg
cmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTM2Nyw3ICszNjcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bE9yVW5kZWZpbmVkKEVkZ2Ugb3BlcmFuZCwgTgogICAgCiAgICAgICAgIEdQUlJlZyBsb2NhbEds
b2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJy
ZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJyYW5jaFB0cihK
SVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmpl
Y3RHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwpAQCAtNTgyLDExICs1ODIsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgaXNEaXJl
Y3QgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBERkdfQ1JB
U0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7
CisgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICBHUFJS
ZWcgY2FsbGVlVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICBHUFJSZWcgY2FsbGVlUGF5bG9h
ZEdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURh
dGE7CkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KTsKICAgICAgICAgQ2Fs
bFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CiAKLSAgICAgICAg
aW50IG51bVVzZWRTdGFja1Nsb3RzID0gbV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7
CisgICAgICAgIGludCBudW1Vc2VkU3RhY2tTbG90cyA9IG1fZ3JhcGgubV9uZXh0TWFjaGluZUxv
Y2FsOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRm9yd2FyZFZhcmFyZ3MpIHsKICAgICAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbG9h
ZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgCi0gICAgICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlzRmx1c2hlZCgpKTsKKyAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXNGbHVzaGVkKCkpOwogCiAgICAgICAgICAgICAvLyBS
aWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNUYWdHUFIvYXJndW1lbnRzUGF5bG9h
ZEdQUiBhbmQgdGhlIHJlZ2lzdGVyIGZpbGUgaXMKICAgICAgICAgICAgIC8vIGZsdXNoZWQuCkBA
IC02ODAsNyArNjgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpJVENvbXBpbGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQo
bV9qaXQuZ3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOworICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIGlzRmx1c2hlZCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0
IG5lZWQgdGhlIGFyZ3VtZW50cyBhcnJheSBhbnltb3JlLgogICAgICAgICBpZiAoaXNWYXJhcmdz
KQpAQCAtNzExLDkgKzcxMSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gZG8gdGhpcyBhZGp1c3RtZW50IG5vdyBzaW5jZSB3
ZSB3aWxsIGhhdmUgYWxyZWFkeSBlbWl0dGVkIGNvZGUgdGhhdCByZWxpZWQgb24gdGhlCiAgICAg
ICAgICAgICAgICAgLy8gdmFsdWUgb2YgbV9wYXJhbWV0ZXJTbG90cy4KICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLCBub2RlLAor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAogICAgICAgICAgICAgICAgICAgICBH
cmFwaDo6cGFyYW1ldGVyU2xvdHNGb3JBcmdDb3VudChudW1BbGxvY2F0ZWRBcmdzKQotICAgICAg
ICAgICAgICAgICAgICA8PSBtX2ppdC5ncmFwaCgpLm1fcGFyYW1ldGVyU2xvdHMpOworICAgICAg
ICAgICAgICAgICAgICA8PSBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKQEAgLTcyNCwxNCArNzI0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpZiAoIWlzRGlyZWN0KQogICAgICAg
ICAgICAgICAgIHVzZShjYWxsZWVFZGdlKTsKIAotICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
TG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1fZ3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2Fs
bGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFy
Z3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Q
YXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAg
ICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgaSArIDEpOworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgaSArIDEpOwogICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gZ2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIGlmICgh
aXNEaXJlY3QpCiAgICAgICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKQEAgLTc0Niw3ICs3
NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3Nl
ZEFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7CiAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgYXJnUmVncyA9IGFyZy5qc1ZhbHVlUmVncygpOwogICAgICAgICAgICAgICAg
IHVzZShhcmdFZGdlKTsKQEAgLTc5Niw3ICs3OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAvLyBBZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUs
IHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrCiAgICAgICAgIC8vIHBvaW50ZXIuIFdl
IHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywgY2FsbHMgd2l0aCBhcml0eQogICAgICAg
ICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFuZCB0YWlsIGNhbGxzLgot
ICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICB9OwogICAgIAogICAgIGlmIChub2RlLT5vcCgpID09IENh
bGxFdmFsKSB7CkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRo
ID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGly
ZWN0Q2FsbCwgaW5mbywgY2FsbGVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBUcnVzdGVkSW1tUHRyKGluZm8pLCBjYWxsZWVQ
YXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgICAgICBtX2ppdC5qdW1wKCku
bGlua1RvKG1haW5QYXRoLCAmbV9qaXQpOwpAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkxpbmtEaXJlY3RDYWxsLCBpbmZvLCBjYWxsZWVQYXlsb2FkR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25MaW5rRGlyZWN0Q2FsbCwgVHJ1c3RlZEltbVB0cihpbmZvKSwg
Y2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAg
ICAgIG1faml0Lmp1bXAoKS5saW5rVG8obWFpblBhdGgsICZtX2ppdCk7CiAgICAgICAgIApAQCAt
MTUwNSw3ICsxNTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9i
amVjdE9yT3RoZXIoRWRnZSBub2RlVXNlLCBib29sIGludmVydCkKICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CisgICAgICAgICAgICAgICAg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKIAogICAgICAgICBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KQEAgLTE1ODMsNyArMTU4
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW4oTm9kZSogbm9kZSwg
Ym9vbCBpbnZlcnQpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAK
ICAgICAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCksIGFyZzEuanNWYWx1ZVJl
Z3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIo
KSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIGludmVy
dCk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVj
dE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmEKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOworICAgICAg
ICAgICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAKICAgICAg
ICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC0x
NzMwLDcgKzE3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5v
ZGUpCiAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAhbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBhdXRvIGZhbHNleSA9IG1f
aml0LmJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlUmVncywgcmVzdWx0R1BSLCB0ZW1wLmdwcigp
LCB2YWx1ZUZQUi5mcHIoKSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBhZGRCcmFuY2goZmFsc2V5LCBub3RU
YWtlbik7CiAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CkBAIC0xNzU1LDcgKzE3NTUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
CiAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKICAgICBjYXNlIEFycmF5OjpCaWdVaW50
NjRBcnJheToKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJy
YXkgbW9kZSB0eXBlIik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIGFy
cmF5IG1vZGUgdHlwZSIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6IHsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMTg0NCwxMSArMTg0NCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SgogICAgICAgICAgICAgaWYgKGJhc2VSZWdzLnRhZ0dQUigpID09
IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNl
UmVncy5wYXlsb2FkR1BSKCkpLCBwcm9wZXJ0eVJlZ3MpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBudWxscHRyLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlUmVncy5wYXlsb2FkR1BSKCkp
LCBwcm9wZXJ0eVJlZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVn
cywgcHJvcGVydHlSZWdzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgbnVsbHB0ciwgYmFzZVJl
Z3MsIHByb3BlcnR5UmVncyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faml0LmFk
ZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMjEwNSw3ICsyMTA1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgaWYgY29uc3RleHBy
ICh2YWxpZGF0ZURGR0RvZXNHQykgewogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVEb2Vz
R0MoKSkgewotICAgICAgICAgICAgYm9vbCBleHBlY3REb2VzR0MgPSBkb2VzR0MobV9qaXQuZ3Jh
cGgoKSwgbm9kZSk7CisgICAgICAgICAgICBib29sIGV4cGVjdERvZXNHQyA9IGRvZXNHQyhtX2dy
YXBoLCBub2RlKTsKICAgICAgICAgICAgIERvZXNHQ0NoZWNrIGNoZWNrOwogICAgICAgICAgICAg
Y2hlY2sudS5lbmNvZGVkID0gRG9lc0dDQ2hlY2s6OmVuY29kZShleHBlY3REb2VzR0MsIG5vZGUt
PmluZGV4KCksIG5vZGUtPm9wKCkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihjaGVjay51Lm90aGVyKSwgJnZtKCkuYWRkcmVzc09mRG9lc0dD
KCktPnUub3RoZXIpOwpAQCAtMjY0MSwxNiArMjY0MSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOiB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gOCwgIldlIGFy
ZSBhc3N1bWluZyB3ZSBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSB0aGlzIGNhbGwgd2l0
aG91dCBpbmNyZW1lbnRhbGx5IHNldHRpbmcgdXAgdGhlIGFyZ3VtZW50cy4iKTsKIAotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNW
YWx1ZVJlZ3MoKTsKIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKICAgICAgICAg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MgPSB0aGlzVmFsdWUuanNWYWx1ZVJlZ3MoKTsKIAotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVn
cyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwog
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwogCiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0zMzA5LDcgKzMzMDksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsK
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzOwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVy
ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3Bs
YW4udHJhbnNpdGlvbnMoKS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmln
aW5Pd25lcigpLCBvbGRTdHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1
cmUuZ2V0KCkpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0z
NTI3LDcgKzM1MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAg
ICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3Qu
Z3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3Rl
R2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9qaXQuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0Lmdw
cigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0
R1BSKTsgCiAgICAgICAgICAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBs
b2NhbEdsb2JhbE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHQuZ3ByKCkp
OwpAQCAtNDA0MCw3ICs0MDQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQ2hl
Y2tWYXJhcmdzOgotICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2ppdC5ncmFwaCgp
LCBub2RlLCBzcGVjdWxhdGUpOworICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAKQEAgLTQxMDMsMTUgKzQxMDMsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmVPckVtcHR5OgotICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkNoZWNr
U3RydWN0dXJlT3JFbXB0eSBvbmx5IHVzZWQgaW4gNjQtYml0IERGRyIpOworICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbm9kZSwgIkNoZWNrU3RydWN0dXJlT3JFbXB0eSBvbmx5IHVzZWQgaW4g
NjQtYml0IERGRyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tBcnJheU9yRW1w
dHk6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQ2hlY2tBcnJheU9y
RW1wdHkgb25seSB1c2VkIGluIDY0LWJpdCBERkciKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJDaGVja0FycmF5T3JFbXB0eSBvbmx5IHVzZWQgaW4gNjQtYml0IERGRyIpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSXNCaWdJbnQ6Ci0gICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBub2RlLCAiSXNCaWdJbnQgaXMgb25seSB1c2VkIHdoZW4gVVNFX0JJR0lO
VDMyLCB3aGljaCBjYW4gb25seSBiZSB0cnVlIGluIDY0IGJpdCBtb2RlIik7CisgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBub2RlLCAiSXNCaWdJbnQgaXMgb25seSB1c2VkIHdoZW4gVVNFX0JJ
R0lOVDMyLCB3aGljaCBjYW4gb25seSBiZSB0cnVlIGluIDY0IGJpdCBtb2RlIik7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKQEAgLTQxODcsNyArNDE4
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IERhdGVHZXRJbnQzMk9yTmFOOgogICAgIGNhc2UgRGF0ZUdldFRpbWU6CiAgICAgY2FzZSBTdHJp
bmdDb2RlUG9pbnRBdDoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJ1
bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJ1bmV4cGVjdGVkIG5vZGUgaW4gREZHIGJhY2tlbmQiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC00MjE0LDEyICs0MjE0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmJsZXNzQm9vbGVhbihHUFJSZWcpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aFJhbmRvbShOb2RlKiBub2RlKQogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAg
IEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SYW5k
b20sIHJlc3VsdC5mcHIoKSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJhbmRvbSwgcmVzdWx0LmZwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpKTsKICAgICAvLyBvcGVyYXRpb25SYW5kb20gZG9lcyBub3QgcmFp
c2UgYW55IGV4Y2VwdGlvbi4KICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCmluZGV4IGRmZmRkZjhmMmU1OGQ2YjMzYmZmMGMwYTBjMzhkZGFkMTZmYzlmZDguLjhlOTJm
OTJmNzBmMGY5OTVkNjIyMzEwMWM2ZDJiZWY5OGE4OTBlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtOTksNyArOTksNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSkKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBzcGls
bEZvcm1hdCAmIERhdGFGb3JtYXRKUywgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0
SlMsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0
KTsKQEAgLTE0MCwxMCArMTQwLDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUoRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFG
b3JtYXRJbnQ1MjoKICAgICAgICAgLy8gdGhpcyB0eXBlIGN1cnJlbnRseSBuZXZlciBvY2N1cnMK
LSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsICJCYWQgZGF0
YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsICJC
YWQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsICJDb3JydXB0IGRhdGEgZm9ybWF0Iik7
CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRh
IGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKICAgICB9CiB9CkBAIC0x
ODYsNyArMTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcKICAgICAgICAgc2xvd1BhdGgg
PSBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbih0eXBlKSwKICAgICAgICAgICAgIHNwaWxsTW9kZSwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGlkZW50aWZp
ZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYmFzZUdQUiwgaWRlbnRpZmllci5yYXdCaXRz
KCkpOwogICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRHZXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0
KCkpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5
SWRXaXRoVGhpcyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSCiAgICAgICAg
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAgICAgICAgIERvbnRTcGlsbCwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgICAgICByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHRoaXNHUFIs
IGlkZW50aWZpZXIucmF3Qml0cygpKTsKKyAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgYmFzZUdQUiwgdGhpc0dQUiwg
aWRlbnRpZmllci5yYXdCaXRzKCkpOwogICAgIH0KICAgICAKICAgICBtX2ppdC5hZGRHZXRCeUlk
V2l0aFRoaXMoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRl
ZmluZWQoRWRnZSBvcGVyYW4KIAogICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxPYmplY3RHUFIg
PSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9i
amVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9i
YWxPYmplY3RHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIG1faml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBtX2ppdC5jb21w
YXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUds
b2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKEVk
Z2Ugb3BlcmFuZCwgTgogCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxv
Y2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0
R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgYXJnR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJyYW5jaFB0cihKSVRD
b21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RH
UFIsIHRha2VuKTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
YmFkIG5vZGUgdHlwZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgImJhZCBu
b2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC03MTcsNyArNzE3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzRGlyZWN0KTsKICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9k
ZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7CiAKLSAgICAgICAgaW50IG51bVVzZWRTdGFja1Nsb3RzID0g
bV9qaXQuZ3JhcGgoKS5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgICAgIGludCBudW1Vc2VkU3Rh
Y2tTbG90cyA9IG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgICAgICAKICAgICAgICAg
aWYgKGlzRm9yd2FyZFZhcmFyZ3MpIHsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBA
IC03NjksNyArNzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbG9hZEFyZ3VtZW50c0dQUihJbnZhbGlkR1BS
UmVnKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgp
LCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIGlzRmx1c2hlZCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUmlnaHQgbm93
LCBhcmd1bWVudHMgaXMgaW4gYXJndW1lbnRzR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcyBm
bHVzaGVkLgogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGFyZ3VtZW50c0dQUiwgbnVtVXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0KTsKQEAgLTc4Nyw3ICs3ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgSklUQ29tcGlsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgREZH
X0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpc0ZsdXNoZWQoKSk7CisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgaXNGbHVzaGVkKCkpOwogICAgICAgICAKICAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0aGUgYXJndW1lbnRzIGFycmF5IGFueW1vcmUuCiAgICAgICAgIGlmIChp
c1ZhcmFyZ3MpCkBAIC04MTgsMTQgKzgxOCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMgYWRqdXN0bWVudCBu
b3cgc2luY2Ugd2Ugd2lsbCBoYXZlIGFscmVhZHkgZW1pdHRlZCBjb2RlIHRoYXQgcmVsaWVkIG9u
IHRoZQogICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIG1fcGFyYW1ldGVyU2xvdHMuCiAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgo
KSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKICAgICAgICAgICAg
ICAgICAgICAgR3JhcGg6OnBhcmFtZXRlclNsb3RzRm9yQXJnQ291bnQobnVtQWxsb2NhdGVkQXJn
cykKLSAgICAgICAgICAgICAgICAgICAgPD0gbV9qaXQuZ3JhcGgoKS5tX3BhcmFtZXRlclNsb3Rz
KTsKKyAgICAgICAgICAgICAgICAgICAgPD0gbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAg
ICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CisgICAg
ICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDApOwogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwogICAgICAgICAg
ICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogCkBAIC04NDMsMTQgKzg0MywxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNh
bGxlZS51c2UoKTsKIAogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIg
PSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICAgICAgICAgIHNodWZmbGVEYXRhLm51
bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50KCk7CisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpOwog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2Fs
bGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNp
emUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gbnVtUGFzc2VkQXJnczsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpICsgMSk7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CiAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFpc0RpcmVjdCkKICAgICAgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwpAQCAtODY3
LDcgKzg2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
UGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwogICAgICAgICAgICAg
ICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAgICAgICAgICAgICAgICAgdXNlKGFyZ0Vk
Z2UpOwpAQCAtODgxLDcgKzg4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgfQogICAgIAogICAgIGlmICghaXNUYWlsIHx8IGlzVmFyYXJncyB8fCBp
c0ZvcndhcmRWYXJhcmdzKSB7Ci0gICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBo
KCkuY2hpbGQobm9kZSwgMCk7CisgICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1fZ3JhcGguY2hp
bGQobm9kZSwgMCk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVF
ZGdlKTsKICAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogCkBAIC05MjEsNyArOTIx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAg
Ly8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBz
dGFjawogICAgICAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9yIHZhcmFyZ3MgY2Fs
bHMsIGNhbGxzIHdpdGggYXJpdHkKICAgICAgICAgLy8gbWlzbWF0Y2ggKHRoZSBjYWxsZnJhbWUg
aXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4KLSAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1fZ3JhcGguc3Rh
Y2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgfTsKICAg
ICAKICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgY2FsbGVlR1BSKTsKQEAg
LTk3OSw3ICs5NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
KQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52
YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJl
Y3RDYWxsLCBjYWxsTGlua0luZm8sIGNhbGxlZUdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyks
IGNhbGxlZUdQUik7CiAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAgICAgbV9qaXQuanVtcCgp
LmxpbmtUbyhtYWluUGF0aCwgJm1faml0KTsKQEAgLTk5OSw3ICs5OTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBpZiAoaXNYODYoKSkKICAg
ICAgICAgICAgIG1faml0LnBvcChKSVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVH
UFIpKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsLCBj
YWxsTGlua0luZm8sIGNhbGxlZUdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TGlua0RpcmVjdENhbGwsIFRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgY2FsbGVlR1BSKTsK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgbV9qaXQuanVtcCgpLmxp
bmtUbyhtYWluUGF0aCwgJm1faml0KTsKICAgICAgICAgCkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKEVkZ2UgZWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRgogICAgICAgICAKICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgCi0gICAgICAgIERGR19BU1NF
UlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1h
dEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIsIHNwaWxsRm9ybWF0KTsKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAoc3BpbGxGb3JtYXQgJiBE
YXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnQzMiwgc3BpbGxGb3Jt
YXQpOwogICAgICAgICAKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAKQEAgLTExMjMsNyArMTEyMyw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSBlZGdl
LCBEYXRhRm9ybWF0JiByZXR1cm5GCiAgICAgfQogCiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsK
LSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAhKHR5cGUg
JiBTcGVjSW50NTJBbnkpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX2N1cnJlbnRO
b2RlLCAhKHR5cGUgJiBTcGVjSW50NTJBbnkpKTsKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVl
IGlzIGFuIGludGVnZXIuCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAg
ICBtX2dwcnMubG9jayhncHIpOwpAQCAtMTE4MywxMCArMTE4MywxMCBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1h
dCYgcmV0dXJuRgogICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOgogICAgIGNhc2UgRGF0
YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQmlnSW50MzI6Ci0gICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0
Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEg
Zm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1hdCIpOworICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQi
KTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQogfQpAQCAtMTIwMSw3ICsx
MjAxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MzJTdHJpY3Qo
RWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1hdEludDMyOwogICAg
IEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbDx0cnVlPihlZGdlLCBt
dXN0QmVEYXRhRm9ybWF0SW50MzIpOwotICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9j
dXJyZW50Tm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludDMyID09IERhdGFGb3JtYXRJbnQzMiwgbXVz
dEJlRGF0YUZvcm1hdEludDMyKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5v
ZGUsIG11c3RCZURhdGFGb3JtYXRJbnQzMiA9PSBEYXRhRm9ybWF0SW50MzIsIG11c3RCZURhdGFG
b3JtYXRJbnQzMik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTIzOCw3ICsxMjM4LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50NTIoRWRnZSBlZGdlLCBE
YXRhRm9ybWF0IGRlc2lyZWRGb3JtYXQpCiAgICAgICAgIAogICAgICAgICBEYXRhRm9ybWF0IHNw
aWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwogICAgICAgICAKLSAgICAgICAgREZHX0FT
U0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0SW50NTIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdFN0cmljdEludDUyLCBzcGlsbEZv
cm1hdCk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEludDUyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRTdHJp
Y3RJbnQ1Miwgc3BpbGxGb3JtYXQpOwogICAgICAgICAKICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAKQEAgLTEy
OTAsNyArMTI5MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUy
KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCBkZXNpcmVkRm9ybWF0KQogICAgIH0KIAogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFk
IGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2Rl
LCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogICAg
IH0KIH0KQEAgLTEzMjgsMTEgKzEzMjgsMTEgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSkKICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1h
dCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFG
b3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIERGR19DUkFTSCgKLSAgICAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCB0b0NTdHJpbmcoCisgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgdG9DU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAi
RXhwZWN0ZWQgIiwgZWRnZSwgIiB0byBoYXZlIGRvdWJsZSBmb3JtYXQgYnV0IGluc3RlYWQgaXQg
aXMgc3BpbGxlZCBhcyAiLAogICAgICAgICAgICAgICAgICAgICBkYXRhRm9ybWF0VG9TdHJpbmco
c3BpbGxGb3JtYXQpKS5kYXRhKCkpOwogICAgICAgICB9Ci0gICAgICAgIERGR19BU1NFUlQobV9q
aXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSwgc3BpbGxGb3JtYXQpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5v
ZGUsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUsIHNwaWxsRm9ybWF0KTsKICAgICAg
ICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWREb3VibGUo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAgICAg
bV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBA
IC0xMzQwLDcgKzEzNDAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVE
b3VibGUoRWRnZSBlZGdlKQogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KIAotICAgIERGR19B
U1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgaW5mby5yZWdpc3RlckZvcm1hdCgp
ID09IERhdGFGb3JtYXREb3VibGUsIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdERvdWJsZSwgaW5mby5yZWdpc3RlckZvcm1hdCgpKTsKICAgICBGUFJSZWcgZnByID0g
aW5mby5mcHIoKTsKICAgICBtX2ZwcnMubG9jayhmcHIpOwogICAgIHJldHVybiBmcHI7CkBAIC0x
NDE4LDEwICsxNDE4LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNl
bGwoRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQmlnSW50MzI6Ci0gICAg
ICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9y
bWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRh
dGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1hdCIpOworICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQgZGF0YSBmb3Jt
YXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQogfQpAQCAtMTQ1Myw3
ICsxNDUzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihF
ZGdlIGVkZ2UpCiAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0K
LSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBpbmZvLnNw
aWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMsIGluZm8uc3BpbGxGb3JtYXQoKSk7CisgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgaW5mby5zcGlsbEZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTLCBpbmZvLnNwaWxsRm9ybWF0KCkpOwogICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0
LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwog
CkBAIC0xNDk3LDEwICsxNDk3LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQogICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOgog
ICAgIGNhc2UgRGF0YUZvcm1hdEJpZ0ludDMyOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQmlnSW50
MzI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFk
IGRhdGEgZm9ybWF0Iik7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX2N1cnJlbnROb2Rl
LCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1h
dCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQg
ZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQogfQpA
QCAtMTU2Miw3ICsxNTYyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
QmlnSW50MzIoRWRnZSBlZGdlKQogICAgICAgICB9CiAKICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBtX2N1cnJlbnROb2RlLCAoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNw
aWxsRm9ybWF0ID09IERhdGFGb3JtYXRCaWdJbnQzMiwgc3BpbGxGb3JtYXQpOworICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsIChzcGlsbEZvcm1hdCAmIERhdGFGb3Jt
YXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEJpZ0ludDMyLCBzcGlsbEZvcm1hdCk7
CiAKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
clNwaWxsZWQpOwogCkBAIC0xNjE1LDEwICsxNjE1LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJpZ0ludDMyKEVkZ2UgZWRnZSkKICAgICBjYXNlIERhdGFGb3JtYXRJ
bnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKICAgICBjYXNlIERhdGFGb3Jt
YXRCaWdJbnQzMjoKLSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5v
ZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3Vy
cmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1h
dCIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQg
ZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CiAgICAgfQogfQpA
QCAtMTkyNiw3ICsxOTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbXBhcmVF
cVB0cihOb2RlKiBub2RlKQogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG5vZGUtPmNlbGxPcGVyYW5kKCkt
PmNlbGwoKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxsKCkpLCByZXN1bHRHUFIp
OwogICAgIG1faml0LmNvbXBhcmU2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBy
ZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogfQpAQCAtMTk3MCw3ICsxOTcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIoRWRnZSBub2RlVXNlLCBib29sIGludmVydCkK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7
CisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsK
IAogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAg
IH0KQEAgLTIwNjUsNyArMjA2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jv
b2xlYW4oTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1w
RlBSKHRoaXMpOwogCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7Ci0g
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHNjcmF0Y2g7CiAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICAgICAgaWYgKHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkgewpAQCAtMjA4Niw3ICsyMDg2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbihOb2RlKiBub2RlLCBib29sIGlu
dmVydCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
fQpAQCAtMjEyNSw3ICsyMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmEKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQ
UiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CisgICAgICAg
ICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKIAogICAgICAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KQEAgLTIx
OTEsNyArMjE5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKEVk
Z2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvCiAgICAgICAgICAgICBpZiAo
IWlzRGVmaW5pdGVseVN0cmluZykKICAgICAgICAgICAgICAgICBza2lwU3RyaW5nQ2FzZSA9IG1f
aml0LmJyYW5jaElmTm90U3RyaW5nKHZhbHVlR1BSKTsKIAotICAgICAgICAgICAgYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1faml0LmdyYXBoKCksIGpzRW1wdHlTdHJpbmcodm0oKSkpLCBub3RUYWtlbik7CisgICAg
ICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwganNFbXB0eVN0cmluZyh2bSgpKSksIG5vdFRh
a2VuKTsKICAgICAgICAgICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CiAKICAgICAgICAgICAg
IGlmICghaXNEZWZpbml0ZWx5U3RyaW5nKQpAQCAtMjIxNSw4ICsyMjE1LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0
YWtlbiwgQmFzaWNCbG8KICAgICAgICAgaWYgKHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkgewogICAgICAgICAgICAgYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgdGFrZW4pOwogICAg
ICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHRlbXAxR1BS
KTsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFw
aCgpLCBnbG9iYWxPYmplY3QpLCB0ZW1wMkdQUik7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgdGVtcDJHUFIpOwogICAgICAgICAg
ICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcDFHUFIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCB0ZW1wMkdQ
UiwgdGFrZW4pOwogICAgICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICAg
ICAgfSBlbHNlCkBAIC0yMzU2LDcgKzIzNTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAg
ICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgIkJhZCB1c2Uga2luZCIp
OworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwogICAgIH0KIH0KIApAQCAtMjM2OCw3ICsyMzY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEoKICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKICAgICBjYXNlIEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUg
dHlwZSIpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBhcnJheSBtb2Rl
IHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTI0NzQsNyArMjQ3NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxKCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAg
ICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgICAgIH0KIAog
ICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTI4NzAs
OSArMjg3MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBUZXN0SW5saW5l
KE5vZGUqIG5vZGUpCiAjaWYgVVNFKExBUkdFX1RZUEVEX0FSUkFZUykKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aEludDUyU2l6ZShOb2RlKiBub2RlKQogewot
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIGF1dG8gdHlwZWRBcnJheVR5cGUgPSBub2RlLT50eXBlZEFycmF5VHlwZSgpOwotICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkodHlw
ZWRBcnJheVR5cGUpKTsKKyAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlQ29u
Y3VycmVudGx5KHR5cGVkQXJyYXlUeXBlKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJl
LmdldCgpKTsKIAogICAgIFNwZWN1bGF0ZVN0cmljdEludDUyT3BlcmFuZCBzaXplKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKQEAgLTI5NTQsNyArMjk1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRhdGVERkdEb2Vz
R0MpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRG9lc0dDKCkpIHsKLSAgICAgICAg
ICAgIGJvb2wgZXhwZWN0RG9lc0dDID0gZG9lc0dDKG1faml0LmdyYXBoKCksIG5vZGUpOworICAg
ICAgICAgICAgYm9vbCBleHBlY3REb2VzR0MgPSBkb2VzR0MobV9ncmFwaCwgbm9kZSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KFRydXN0ZWRJbW02NChEb2VzR0NDaGVjazo6ZW5jb2RlKGV4
cGVjdERvZXNHQywgbm9kZS0+aW5kZXgoKSwgbm9kZS0+b3AoKSkpLCB2bSgpLmFkZHJlc3NPZkRv
ZXNHQygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMTcsNyArMzExNyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMzIzNCw3ICszMjM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM1MTYsMTIgKzM1MTYsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQXRvbWlj
c1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6IHsKICAgICAgICAgdW5zaWduZWQgbnVtRXh0cmFB
cmdzID0gbnVtRXh0cmFBdG9taWNzQXJncyhub2RlLT5vcCgpKTsKLSAgICAgICAgRWRnZSBiYXNl
RWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7Ci0gICAgICAgIEVkZ2UgaW5kZXhF
ZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAxKTsKKyAgICAgICAgRWRnZSBiYXNlRWRn
ZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CisgICAgICAgIEVkZ2UgaW5kZXhFZGdlID0gbV9n
cmFwaC5jaGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBhcmdFZGdlc1ttYXhOdW1FeHRyYUF0
b21pY3NBcmdzXTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRXh0cmFBcmdzOyBpLS07
KQotICAgICAgICAgICAgYXJnRWRnZXNbaV0gPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDIg
KyBpKTsKLSAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9k
ZSwgMiArIG51bUV4dHJhQXJncyk7CisgICAgICAgICAgICBhcmdFZGdlc1tpXSA9IG1fZ3JhcGgu
Y2hpbGQobm9kZSwgMiArIGkpOworICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCAyICsgbnVtRXh0cmFBcmdzKTsKIAogICAgICAgICBHUFJSZWcgYmFzZUdQUjsK
ICAgICAgICAgR1BSUmVnIGluZGV4R1BSOwpAQCAtNDAxMCw3ICs0MDEwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBu
b2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CkBAIC00NDI0LDcgKzQ0MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
OwogICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIG5ld1N0cnVjdHVyZSA9IG5vZGUtPnRyYW5z
aXRpb24oKS0+bmV4dDsKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX3BsYW4udHJhbnNpdGlvbnMo
KS5hZGRMYXppbHkobm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLCBvbGRT
dHJ1Y3R1cmUuZ2V0KCksIG5ld1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIG1fZ3JhcGgubV9w
bGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwgb2xkU3RydWN0dXJlLmdldCgpLCBuZXdTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC00NTI1LDEzICs0NTI1LDEz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFB1dEJ5VmFsV2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwpAQCAtNDY3Myw3ICs0NjczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFs
T2JqZWN0LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9
IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9iYWxPYmpl
Y3RHUFIpOwogICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWUu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAogICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0
cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxP
YmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CkBAIC00ODM1LDcgKzQ4MzUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgJnZtKCks
IGlucHV0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaEhl
YXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGlucHV0R1BSKTsKICAg
ICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNDg2NCw3ICs0ODY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGF1dG8gaXNIZWFwQmln
SW50ID0gbV9qaXQuYnJhbmNoSWZIZWFwQmlnSW50KGlucHV0R1BSKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgICAgIG1faml0
LndhbmdzSW50NjRIYXNoKHJlc3VsdEdQUiwgdGVtcEdQUik7Ci0gICAgICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwgdGhpcywgb3BlcmF0
aW9uTWFwSGFzaEhlYXBCaWdJbnQsIE5lZWRUb1NwaWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVt
ZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0R1BSLCAmdm0oKSwgaW5wdXRHUFIpKTsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50
LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoSGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlv
bkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBpbnB1dEdQUikpOwogICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgaXNTdHJpbmcubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgfQpAQCAtNDkxOCw3ICs0OTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBzdHJhaWdodEhhc2gubGluaygmbV9qaXQpOwogICAgICAg
ICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC53YW5nc0lu
dDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOwotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoSGVhcEJp
Z0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVl
ZGVkLCByZXN1bHRHUFIsICZ2bSgpLCBpbnB1dEdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNo
SGVhcEJpZ0ludCwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNr
Tm90TmVlZGVkLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBpbnB1dEdQUikpOwog
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKQEAgLTUwODEsOSArNTA4MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBub3RQcmVzZW50SW5UYWJsZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2pp
dC5ncmFwaCgpLCB2bSgpLnNlbnRpbmVsTWFwQnVja2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCB2bSgp
LnNlbnRpbmVsTWFwQnVja2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IHZtKCkuc2VudGluZWxTZXRCdWNrZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIHZtKCkuc2VudGluZWxT
ZXRCdWNrZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTQy
NCw3ICs1NDI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgQ2hlY2tWYXJhcmdz
OgotICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2ppdC5ncmFwaCgpLCBub2RlLCBz
cGVjdWxhdGUpOworICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBzcGVjdWxhdGUpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApAQCAtNTkzOCw3ICs1OTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgY2FsbFRpZXJVcC5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyaWdnZXJUaWVyVXBOb3dJbkxvb3AsICZ2bSgpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSkpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcmlnZ2VyVGllclVwTm93SW5Mb29wLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKICAgICAgICAgICAgIHNpbGVudEZpbGwo
c2F2ZVBsYW5zKTsKIAogICAgICAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyh0b05leHRPcGVy
YXRpb24sICZtX2ppdCk7CkBAIC01OTUzLDcgKzU5NTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CiAg
ICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcmlnZ2VyVGllclVwTm93LCAmdm0oKSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlclRpZXJVcE5vdywgVHJ1c3Rl
ZEltbVB0cigmdm0oKSkpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTU5NjgsNyArNTk2OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCgpOwogICAgICAgICBhdXRvIHRyaWdnZXJJdGVyYXRvciA9IG1faml0LmppdENvZGUoKS0+dGll
clVwRW50cnlUcmlnZ2Vycy5maW5kKGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBERkdfQVNTRVJU
KG1faml0LmdyYXBoKCksIG5vZGUsIHRyaWdnZXJJdGVyYXRvciAhPSBtX2ppdC5qaXRDb2RlKCkt
PnRpZXJVcEVudHJ5VHJpZ2dlcnMuZW5kKCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIHRyaWdnZXJJdGVyYXRvciAhPSBtX2ppdC5qaXRDb2RlKCktPnRpZXJVcEVudHJ5VHJp
Z2dlcnMuZW5kKCkpOwogICAgICAgICBKSVRDb2RlOjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5
VHJpZ2dlciA9ICYobV9qaXQuaml0Q29kZSgpLT50aWVyVXBFbnRyeVRyaWdnZXJzLmZpbmQoYnl0
ZWNvZGVJbmRleCktPnZhbHVlKTsKICAgICAgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8
dWludDhfdD4oSklUQ29kZTo6VHJpZ2dlclJlYXNvbjo6RG9udFRyaWdnZXIpLCAidGhlIEpJVCBj
b2RlIGFzc3VtZXMgbm9uLXplcm8gbWVhbnMgJ2VudGVyJyIpOwogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihKSVRDb2RlOjpUcmlnZ2VyUmVhc29uKSA9PSAxLCAiYnJhbmNoVGVzdDggYXNz
dW1lcyB0aGlzIHNpemUiKTsKQEAgLTU5OTEsNyArNTk5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG92ZXJmbG93ZWRDb3VudGVyLmxp
bmsoJm1faml0KTsKIAogICAgICAgICAgICAgc2lsZW50U3BpbGwoc2F2ZVBsYW5zKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BS
LCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkpKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCBU
cnVzdGVkSW1tUHRyKCZ2bSgpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXguYXNCaXRzKCkp
KTsKIAogICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUikubGlu
a1RvKHRvTmV4dE9wZXJhdGlvbiwgJm1faml0KTsKQEAgLTYwMTEsNyArNjAxMSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrVGllclVw
SW5Mb29wOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICBjYXNlIENoZWNrVGll
clVwQW5kT1NSRW50ZXI6Ci0gICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
VW5leHBlY3RlZCB0aWVyLXVwIG5vZGUiKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJVbmV4cGVjdGVkIHRpZXItdXAgbm9kZSIpOwogICAgICAgICBicmVhazsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKIApAQCAtNjA2Niw3ICs2MDY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5QnVmZmVy
OgogICAgIGNhc2UgSWRlbnRpdHlXaXRoUHJvZmlsZToKICAgICBjYXNlIENQVUludHJpbnNpYzoK
LSAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUi
KTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC02MTUxLDcgKzYxNTEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZXBBbnlJbnQoRWRnZSBlZGdlKQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSYW5kb20oTm9kZSogbm9kZSkKIHsKLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBH
UFJUZW1wb3JhcnkgdGVtcDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwog
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wMyh0aGlzKTsKQEAgLTYyMzUsNyArNjIzNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEYXRlR2V0KE5vZGUqIG5vZGUpCiAgICAgICAgIGNhbGxi
YWNrKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgbV9qaXQuYm94SW50MzIocmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MpOwogCi0gICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwgTmVlZFRv
U3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCByZXN1bHRS
ZWdzLCAmdm0oKSwgYmFzZUdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb24sIE5lZWRUb1NwaWxsLCBFeGNlcHRp
b25DaGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cigmdm0oKSksIGJhc2VHUFIpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggNzhkNTJjZjViYWFkNTA3YmNkMTc5YzZiMWJhMDc1OTBjMTFiMTU3
Yy4uNmE0YmUyNDBhNjc5Njc5OTRmZjI3YTZmY2JhZmUyMmIzYzFmNWY5NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjQ0MiwxMSArMjQ0
MiwxMSBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTbG93UGF0aENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
KnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVP
cmlnaW4sIGV4Y2VwdGlvbnMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmds
b2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIo
KSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwg
cGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2Fs
bCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
aml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0yNDY2LDcgKzI0NjYsNyBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwgZXhj
ZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAgICAgICAgICB9CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKQEAgLTI1NTMsMTEgKzI1NTMsMTEgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2xvd1BhdGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLCBleGNlcHRpb25z
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rp
b24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2Vt
YW50aWNOb2RlT3JpZ2luKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTbG93UGF0aENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG5vblJlcGF0Y2hpbmdGdW5jdGlv
biwgcGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1h
bnRpY05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0yNTc3LDcgKzI1NzcsNyBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwgZXhjZXB0aW9u
cy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwg
cGFyYW1zWzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC00
MDY3LDEzICs0MDY3LDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRp
Y09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCByZXN1
bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC00MjI1LDEz
ICs0MjI1LDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3Rh
dGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mb0dQUiwgYmFzZUdQUiwgYnJhbmRHUFIpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBhcHByb3ByaWF0ZVByaXZhdGVBY2Nlc3NG
dW5jdGlvbihhY2Nlc3NUeXBlKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9y
LT5zdHViSW5mbygpKSwgYmFzZUdQUiwgYnJhbmRHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC00
MzcwLDEzICs0MzcwLDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAg
ICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRp
Y09yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZv
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpLmNhbGwoKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb24sIEludmFsaWRHUFJSZWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVT
ZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwgcHJvcGVy
dHlHUFIsIHZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5z
dHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKS5jYWxsKCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRv
bmUsICZqaXQpOwpAQCAtNDcyNSwxNCArNDcyNSwxNCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24o
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIHBhcmFtc1sxXS5ncHIoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBpZGVudGlmaWVy
LnJhd0JpdHMoKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgZ2VuZXJhdG9yLT5zbG93UGF0aEZ1bmN0
aW9uKCksIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBpZGVudGlmaWVyLnJhd0JpdHMoKSku
Y2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTUxMSwxMyArNTUxMSwxMyBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpz
dGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3Jp
Z2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbikpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIGJhc2VHUFIsIHByb3BlcnR5R1BSKS5jYWxsKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwg
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZVNlbWFudGljT3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQu
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJh
dG9yLT5zdHViSW5mbygpKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUikuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAtNTg2Mywx
MyArNTg2MywxMyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZVNlbWFudGljT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2Vt
YW50aWNPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50
aWNPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBwcm9wZXJ0
eUdQUiwgdmFsdWVHUFIsIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
aml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRp
Y09yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09y
aWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1Yklu
Zm8oKSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkuY2FsbCgpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1Rv
KGRvbmUsICZqaXQpOwpAQCAtNjI2OSwxNCArNjI2OSwxNCBAQCBJR05PUkVfQ0xBTkdfV0FSTklO
R1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMu
dW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlU2VtYW50aWNPcmlnaW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmV0dXJuR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlU2VtYW50aWNPcmlnaW4pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0
LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSLCBiYXNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGVjbWFNb2RlKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGVTZW1hbnRpY09yaWdpbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3B0aW1pemF0aW9uRnVuY3Rpb24s
IHJldHVybkdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZVNlbWFudGljT3JpZ2luKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGVTZW1hbnRpY09yaWdpbikpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9y
LT5zdHViSW5mbygpKSwgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
c2NyaXB0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihlY21hTW9kZSkpLmNhbGwoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTY5ODgsNyArNjk4OCw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgo
CiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwg
JnZtLAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0
LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
dm0pLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6
YXRpb25WYWx1ZSkpKTsKQEAgLTcwNzUsNyArNzA3NSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQ7CiAK
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sIG9wZXJh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0s
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHNs
b3dQYXRoQXJndW1lbnRzKTsKQEAgLTcxMzUsNyArNzEzNSw3IEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCiAgICAg
ICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRp
b25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5n
ZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKICAgICAgICAgICAgIH0sIGxl
bmd0aC52YWx1ZSk7CkBAIC03MzI5LDcgKzczMjksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0
aCgKICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3AgPT0gT2JqZWN0S2V5cyA/IG9wZXJhdGlvbk9iamVj
dEtleXNPYmplY3QgOiBvcGVyYXRpb25PYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzT2JqZWN0LCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwgbG9jYXRpb25zWzFdLmRpcmVj
dEdQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9PSBPYmplY3RLZXlzID8g
b3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCA6IG9wZXJhdGlvbk9iamVjdEdldE93blByb3BlcnR5
TmFtZXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVz
dWx0VmFsdWUpOwpAQCAtNzQ3Miw3ICs3NDcyLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAg
ICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25O
ZXdTdHJpbmdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgc3RyaW5nKTsKQEAgLTgzNzUsNyArODM3NSw3IEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlT
bG93UGF0aCgKICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBlZEFycmF5VHlw
ZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKHR5cGVkQXJyYXlU
eXBlKSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAg
IH0sCkBAIC04ODUwLDcgKzg4NTAsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAg
ICAgICAgICBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICAgICAg
Wz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExh
enlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9iYWxPYmplY3QsIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1h
a2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAgICAg
ICB9LCBraWRzWzBdLCBraWRzWzFdKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODg1OCw3ICs4
ODU4LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgc2xvd1Jlc3Vs
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTMsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTMsIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzNdLmRpcmVjdEdQUigpKTsKICAgICAg
ICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFdLCBraWRzWzJdKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtOTQ5MSw3ICs5NDkxLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcih2bSwKLSAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIEludmFsaWRHUFJSZWcsICZ2bSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHNldCkpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25O
b3RpZnlXcml0ZSwgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2
bSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMTA4OTIsNyAr
MTA4OTIsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9udFRocm93ID0gaml0Lmp1
bXAoKTsKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0ZvclZhcmFyZ3MpPihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpPihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
c2VtYW50aWNOb2RlT3JpZ2luKSkpOwogICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24oaml0LnZtKCkpOwogICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MpOwogICAgICAg
ICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhE
aWROb3RUaHJvdyk7CkBAIC0xMTE1NSw3ICsxMTE1NSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKIAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGpp
dC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Ioc2VtYW50aWNOb2RlT3JpZ2luKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKT4o
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpKTsKICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKGppdC52bSgpKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhF
eGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCgqKSgpPihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dGb3JWYXJhcmdzKSk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERpZE5vdFRocm93KTsKQEAgLTExMTYzLDcgKzEx
MTYzLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICBk
b25lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hl
aWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25TaXplRnJhbWVG
b3JWYXJhcmdzKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2Rl
T3JpZ2luKSwgYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpPihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RG
b3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksIGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbihqaXQudm0oKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQoKiko
KT4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOwogCkBAIC0xMTE3Miw3ICsxMTE3Miw3
IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGFyZ3VtZW50c0dQUik7CiAgICAgICAgICAgICAg
ICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSMik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1pbmltdW1KU0NhbGxBcmVhU2l6ZSksIHNjcmF0Y2hH
UFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblNldHVwVmFyYXJnc0Zy
YW1lKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2lu
KSwgc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFt
ZSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwgc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBzY3Jh
dGNoR1BSMSk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbihq
aXQudm0oKSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0
d2lzZV9jYXN0PHZvaWQoKikoKT4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xMTMyMCw3ICsxMTMyMCw3IEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgICAgICAgICByZXF1aXJlZEJ5dGVzID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgcmVxdWlyZWRCeXRlcyk7CiAgICAgICAg
ICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5
dGVzKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZWNtYU1vZGUpLCBHUFJJbmZv
OjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbkNhbGxFdmFsKT4oZ2xvYmFsT2JqZWN0LCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDIpOworICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVy
YXRpb25DYWxsRXZhbCk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3Qp
LCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkNhbGxFdmFsKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCk7CiAg
ICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOwpAQCAtMTI5MzksMTMgKzEyOTM5LDEzIEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNO
b2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy5nZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXR1cm5HUFIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm9HUFIsIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNl
bWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMuZ2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXR1cm5HUFIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1Yklu
Zm8oKSksIGJhc2UsIHN1YnNjcmlwdCkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjk1NSwxNCArMTI5
NTUsMTQgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25zLmdldCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJldHVybkdQ
UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgYmFz
ZSwgc3Vic2NyaXB0KS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3B0aW1p
emF0aW9uRnVuY3Rpb24sIHJldHVybkdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdp
biksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2Rl
T3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgYmFzZSwgc3Vic2NyaXB0KS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMTMyNTUsMTQgKzEzMjU1LDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm9HUFIsIHZhbHVlR1BSLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRl
LCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wdGlt
aXphdGlvbkZ1bmN0aW9uLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4p
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHZhbHVlR1BSLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVHUFIpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTEzOTg2LDcgKzEzOTg2LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3RXaXRo
QnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZ2bSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUu
Z2V0KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3RoLCBidXR0ZXJmbHlW
YWx1ZSk7CkBAIC0xMzk5NCw3ICsxMzk5NCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICAgICAgc2xvd09iamVjdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAg
ICAgICAgICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVy
Zmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5VmFsdWUpOwpAQCAt
MTQxOTQsNyArMTQxOTQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExW
YWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKHZtLAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGly
ZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksICZ2bSwKKyAgICAgICAgICAgICAgICAgICAg
b3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CkBAIC0xNDI2MSw3ICsxNDI2
MSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1
bHQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0s
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
Y2FsbFJlc3VsdCk7CkBAIC0xNDMyMSw3ICsxNDMyMSw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgbGF6eVNsb3dQYXRoKAog
ICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3Iodm0sIG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBJbnZhbGlkR1BSUmVn
LCBnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcih2bSwgb3BlcmF0aW9uSGFuZGxlVHJhcHMsIEludmFsaWRHUFJSZWcsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMTQ1ODgsNyArMTQ1
ODgsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVj
dG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0s
Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLAogICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVnZXhwQ2VsbCksIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICB9LCBsYXN0SW5kZXgpOwogICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1
ZSk7CkBAIC0xNTA2MCwxMyArMTUwNjAsMTMgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAog
ICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksICZ2bSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pKTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IGxh
enlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0
aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3Jh
Z2UsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZUluVmFsdWVzKSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTE1MTQ5LDE0ICsxNTE0OSwxNCBA
QCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRp
Y05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
c2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvR1BSLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVudGlmaWVyLnJhd0JpdHMoKSkpLmNh
bGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
aml0LCBzZW1hbnRpY05vZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8o
KSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIucmF3Qml0cygpKSkuY2FsbCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTUyMzksMTQgKzE1MjM5LDE0IEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
c3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9y
aWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBwYXJhbXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGlj
Tm9kZU9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRp
Y05vZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm9H
UFIsIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRlbnRpZmllci5yYXdC
aXRzKCkpKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIGppdCwgc2VtYW50aWNOb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihzZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3It
PnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50
aWZpZXIucmF3Qml0cygpKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MTY2MDMsMTQgKzE2NjAzLDE0IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNl
bWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihz
ZW1hbnRpY05vZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
c2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFtc1sw
XS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3Jp
Z2luKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Ioc2VtYW50aWNO
b2RlT3JpZ2luKSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1syXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CkBAIC0x
NjY2Nyw3ICsxNjY2Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBzZW1hbnRpY05vZGVP
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xv
d1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKHNlbWFudGljTm9kZU9yaWdpbikpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdw
cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZq
aXQpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTE2NzMxLDcgKzE2NzMxLDcgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsIHNlbWFudGljTm9kZU9yaWdpbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNb
MF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Ioc2VtYW50aWNOb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwpAQCAtMTY5OTYsNyArMTY5OTYsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAg
ICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQ
dHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5l
d09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3Vs
dFZhbHVlKTsKQEAgLTE3MTE5LDcgKzE3MTE5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAg
ICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJl
ZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2Jh
bE9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzNdLmRpcmVjdEdQ
UigpKTsKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVl
LCBwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseVZhbHVlKTsKQEAgLTE3MTI3LDcgKzE3MTI3LDcgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0g
bGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9j
YXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kSGludCwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kSGludCwgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25z
WzJdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbM10uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1s0XS5k
aXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVWYWx1ZSwgcHVibGljTGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseVZhbHVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAppbmRl
eCA3YjVhYjJkY2U2MTNmZTBiZjQyNWRmZTg1Y2JlZTE2OTI4OGJjMTQ0Li44ZjFhNGJmNjBhNWYy
NjlmN2FkZjk0NDUwNmVkMjQ5NWMzNjdiZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC01ODYsNyArNTg2LDcgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENv
ZGUsIE9TUkV4aXQmIGV4aXQKIAogICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiB0
bXBTY3JhdGNoID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy50bXBJbmRl
eCgwKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVy
aWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOworICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJpYWxpemVPU1JFeGl0
U2lkZVN0YXRlKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmZXhpdCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0bXBT
Y3JhdGNoKSk7CiAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAgICAgICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAKaW5kZXggY2FjNjk1NmRhOTdkYzkxYTRjYjhiM2FlZDYxZmFmZjM3YzM4NWYyNC4uNTNk
OGQxZWE2YWU3YWY3MzQ3OGJjNmIxMTEzNjFhOGZlZTNlYzk1NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcApAQCAtNzUsMTEgKzc1LDYgQEAgdm9pZCBDQ2Fs
bEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmUKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldElt
cGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRl
eCk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBH
UFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCiB7CiAgICAgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3Bl
LCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmgKaW5kZXggYjRiOWMzYzBhMWZhNmYyMzdmY2NhMDRiMmE4NzdiZjIzNGU2YWE2
Mi4uMGZmY2E0MzdkZmI2NGFhNDc3MzI2ZTdjNDhiODMxZTc0MzY1YzAzYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCkBAIC02MzAsOCArNjMwLDcgQEAgY2xhc3Mg
Q0NhbGxIZWxwZXJzIDogcHVibGljIEFzc2VtYmx5SGVscGVycyB7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgbnVtR1BSQXJncywgdW5zaWduZWQgbnVtR1BS
U291cmNlcywgdW5zaWduZWQgbnVtRlBSQXJncywgdW5zaWduZWQgbnVtRlBSU291cmNlcywgdW5z
aWduZWQgbnVtQ3Jvc3NTb3VyY2VzLCB1bnNpZ25lZCBleHRyYUdQUkFyZ3MsIHVuc2lnbmVkIG5v
bkFyZ0dQUnMsIHVuc2lnbmVkIGV4dHJhUG9rZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgIEFMV0FZU19JTkxJTkUgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgc3RkOjpp
c19wb2ludGVyPENVUlJFTlRfQVJHVU1FTlRfVFlQRT46OnZhbHVlCi0gICAgICAgICYmICgoc3Rk
Ojppc19wb2ludGVyPEFyZz46OnZhbHVlICYmIHN0ZDo6aXNfY29udmVydGlibGU8c3RkOjpyZW1v
dmVfY29uc3RfdDxzdGQ6OnJlbW92ZV9wb2ludGVyX3Q8QXJnPj4qLCBDVVJSRU5UX0FSR1VNRU5U
X1RZUEU+Ojp2YWx1ZSkKLSAgICAgICAgICAgIHx8IHN0ZDo6aXNfc2FtZTxBcmcsIHN0ZDo6bnVs
bHB0cl90Pjo6dmFsdWUpPgorICAgICAgICAmJiBzdGQ6OmlzX3NhbWU8QXJnLCBzdGQ6Om51bGxw
dHJfdD46OnZhbHVlPgogICAgIHNldHVwQXJndW1lbnRzSW1wbChBcmdDb2xsZWN0aW9uPG51bUdQ
UkFyZ3MsIG51bUdQUlNvdXJjZXMsIG51bUZQUkFyZ3MsIG51bUZQUlNvdXJjZXMsIG51bUNyb3Nz
U291cmNlcywgZXh0cmFHUFJBcmdzLCBub25BcmdHUFJzLCBleHRyYVBva2U+IGFyZ1NvdXJjZVJl
Z3MsIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKICAgICB7CiAgICAgICAgIHNldHVwQXJndW1lbnRz
SW1wbDxPcGVyYXRpb25UeXBlPihhcmdTb3VyY2VSZWdzLCBUcnVzdGVkSW1tUHRyKGFyZyksIGFy
Z3MuLi4pOwpAQCAtODUzLDcgKzg1Miw2IEBAIGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBB
c3NlbWJseUhlbHBlcnMgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgog
ICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwogcHVibGljOgotICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwogCiAg
ICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3Jp
dGUgdG8gaW4gc2hhZG93UGFja2V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGYz
OWI3MWM0OTAyMGQ1YjY4MWEzYWNjMTNlZGZlYzFlN2Y5YWM5ZjMuLjcxYWIxNzY0NzBhNzA4M2Y5
ZTk4YWZkMzM4MDY4NWM0NmIzMmIwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQog
CiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbk9wdGltaXplLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgbV9ieXRlY29kZUluZGV4
LmFzQml0cygpKTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAwNTM3N2I4MjA1ODFl
YWJmYWU4MjllZjRmNWNiMDgyMDE5MTVhMzBiLi40ZWQ0NzUxYTcxN2M5YWYyYzEyZmRjODNkNDJl
OGQ0ZDBhZDUzMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAKQEAgLTczNyw3ICs3MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBKU0luc3RydWN0aW9uKgogICAgICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2Jh
bE9iamVjdEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVj
dEdQUiwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKQEAg
LTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSlNJbnN0cnVjdGlvbgogICAgICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RH
UFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxP
YmplY3RHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxl
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSlNJ
bnN0cnVjdGlvbioKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93
UGF0aFJlcGF0Y2gpCiAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBnbG9iYWxP
YmpldEdQUiwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0
R1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KGFyaXRoUHJvZmlsZSkpOwogICAgIH0gZWxzZQogICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xv
YmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKQEAgLTkwNSw3
ICs5MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSlNJbnN0cnVjdGlvbgogICAgICAgICBpZiAobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKICAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIGdsb2JhbE9iamV0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
YXJpdGhQcm9maWxlKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBnbG9iYWxP
YmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZmY0ODQxMzFjNmRm
ZjBlZTJlOWM4ZDMwYTM3YWQxYWJhY2UxZGU2OS4uNTFmYzE5Nzg3OTc3YTUzZjA2NTE1ODgxOTM2
YzI4YzkzYmQwOTZhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIHN0cnVjdHVyZVJlZyk7CiAgICAgYm94Q2VsbChyZXR1cm5WYWx1
ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUpTUik7CiB9CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkJhc2VsaW5lSklURGF0
YSgpKSwgc19jb25zdGFudHNHUFIpOwogICAgIH0KIAotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJp
ZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgVHJ1c3RlZEltbVB0cigmdm0oKSkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgaXND
YXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1
ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTU5OAogCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFz
Qml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwpA
QCAtMTA4MCw3ICsxMDgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBK
U0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZmFySnVtcChyZWdUMiwgSlNT
d2l0Y2hQdHJUYWcpOwogCiAgICAgbm90SW50MzIubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUs
ICZ2bSgpLCBqc1JlZ1QxMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25v
d25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwganNSZWdUMTAsIHRhYmxlSW5kZXgsIHVu
bGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKIH0KIApAQCAtMTI2Miw3ICsxMjYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQog
ICAgIGppdC5zdWJQdHIoVHJ1c3RlZEltbVB0cigxNiksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBqaXQuc3RvcmVQdHIoY2FuQmVPcHRpbWl6ZWRHUFIsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIpKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgYXJndW1lbnRHUFIxKTsKKyAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihUcnVzdGVk
SW1tUHRyKCZ2bSksIGFyZ3VtZW50R1BSMSk7CiAgICAgQ2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIpLCBjYW5CZU9wdGltaXplZEdQUik7IC8vIFJlc3Rv
cmUgY2FuQmVPcHRpbWl6ZWRHUFIKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0
cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMu
bGluayh0aGlzKTsKIH0KIApAQCAtMTQ5Myw3ICsxNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2xvb3BfaGludChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjwKIAogICAgICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1p
emUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25PcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKICAgICAgICAgICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKQEAgLTE1NzcsNyArMTU3
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29k
ZS5tX3JlZ2V4cDsKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwogICAgIGxv
YWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVn
ZXhwLCBnbG9iYWxHUFIsIFRydXN0ZWRJbW1QdHIoanNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRD
b2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKSk7CiAgICAgYm94Q2VsbChyZXR1cm5WYWx1
ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUpTUik7CiB9CkBAIC0xNTk0LDE0ICsxNTk0LDE0IEBAIHZvaWQgSklUOjplbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCBUcnVzdGVkSW1tUHRyKCZ2bSgp
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MzcsMTQgKzE2MzcsMTQgQEAgdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgVHJ1
c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgVHJ1c3RlZEltbVB0
cigmdm0oKSksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIFRydXN0ZWRJ
bW1QdHIoJnZtKCkpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBA
IC0xNzU3LDcgKzE3NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0b3JlUHRyKHJlZ1QzLCBB
ZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7
CiAgICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QzLCBUcnVz
dGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKICAgICAvLyBD
bGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCAm
dm0oKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUHJvY2Vz
c1R5cGVQcm9maWxlckxvZywgVHJ1c3RlZEltbVB0cigmdm0oKSkpOwogICAgIHNraXBDbGVhckxv
Zy5saW5rKHRoaXMpOwogCiAgICAganVtcFRvRW5kLmxpbmsodGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGQ0MmFjODAzOGUz
NWU0MDI2MGE3MTYyZmRiZjg3MmQ1ODY1OTAzOWQuLjc0ZjQ5OWRjN2E1ZjI5MTc5NTZiMDlhYTRm
NDk0YzlmZWFjOTFhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01OTcs
NyArNTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBKU0lu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwg
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSksIG9wdGlvbnMsIHJlZ1QxKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSlNJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9h
ZChieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVn
VDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjUy
MCw3ICsyNTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmEKICAgICAgICAgb3duZXJOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpTUik7CiAKICAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHRtcEpTUi5wYXlsb2FkR1BSKCksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgJnZtKCksIHRtcEpTUi5wYXlsb2FkR1BSKCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBUcnVz
dGVkSW1tUHRyKCZ2bSgpKSwgdG1wSlNSLnBheWxvYWRHUFIoKSk7CiAgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKQEAgLTI1MzgsMTQgKzI1
MzgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKQogewogICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIFRydXN0ZWRJbW1QdHIob3duZXIpKTsKICAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKIHsKICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93
bmVyKSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIFRydXN0ZWRJbW1QdHIoJnZt
KCkpLCBvd25lcik7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKaW5kZXggN2Iw
MTQ4YjkxZGM1ODQwNzk5ZTBiZTU1ZGVlMWIzYWE3OTI3NTRjZi4uNmI5ZWJhYzAzMWQxYzk3ZjM2
NmJmMmJlZjBiNWI3YjVlOTM0YmFmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmNwcApAQCAtMzkzLDcgKzM5Myw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZt
CiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uod2FzbUNvbnRleHRJbnN0
YW5jZUdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCAmc2ln
bmF0dXJlLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25JdGVyYXRlUmVzdWx0cyk+KHdh
c21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2lnbmF0
dXJlKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBq
aXQuY2FsbE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkl0
ZXJhdGVSZXN1bHRzKSk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRK
dW1wSWZFeGNlcHRpb24odm0pKTsKIAo=
</data>
<flag name="review"
          id="485136"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>