<?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>234268</bug_id>
          
          <creation_ts>2021-12-13 14:13:07 -0800</creation_ts>
          <short_desc>Roll back r286345, r286387, r286471, r286667, r286849</short_desc>
          <delta_ts>2021-12-13 16:29:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1823747</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 14:13:07 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823748</commentid>
    <comment_count>1</comment_count>
      <attachid>447063</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 14:14:37 -0800</bug_when>
    <thetext>Created attachment 447063
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823758</commentid>
    <comment_count>2</comment_count>
      <attachid>447063</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-13 14:25:20 -0800</bug_when>
    <thetext>Comment on attachment 447063
patch

r=me if EWS is happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823794</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 15:05:15 -0800</bug_when>
    <thetext>&lt;rdar://86408710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823796</commentid>
    <comment_count>4</comment_count>
      <attachid>447073</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 15:07:29 -0800</bug_when>
    <thetext>Created attachment 447073
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823826</commentid>
    <comment_count>5</comment_count>
      <attachid>447073</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-12-13 16:19:14 -0800</bug_when>
    <thetext>Comment on attachment 447073
patch for landing

EWS doesn&apos;t look happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823830</commentid>
    <comment_count>6</comment_count>
      <attachid>447081</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 16:25:34 -0800</bug_when>
    <thetext>Created attachment 447081
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823831</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-13 16:25:48 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #5)
&gt; Comment on attachment 447073 [details]
&gt; patch for landing
&gt; 
&gt; EWS doesn&apos;t look happy.

should be fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823833</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-13 16:29:01 -0800</bug_when>
    <thetext>Committed r286994 (?): &lt;https://commits.webkit.org/r286994&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447081.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447063</attachid>
            <date>2021-12-13 14:14:37 -0800</date>
            <delta_ts>2021-12-13 15:07:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>262391</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzNCBA
QAorMjAyMS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsIGJhY2sgcjI4NjM0NSwgcjI4NjM4NywgcjI4NjQ3MSwgcjI4NjY2NywgcjI4Njg0OQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MjY4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
cHJvcGFnYXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVk
KToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0
cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omhhc2ggY29uc3QpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKiBieXRlY29k
ZS9BcnJheVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpDaGVja1ByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4
aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpz
dHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6RGVsZXRlQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YTo6R2V0QnlJZE1v
ZGVNZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGE6OmNsZWFyVG9E
ZWZhdWx0TW9kZVdpdGhvdXRDYWNoZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAg
ICAgIChKU0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVG
ZWVkYmFjayk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNr
KToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6Oklu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0luc3RhbmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SW50
ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAg
IChKU0M6OkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6Y3JlYXRlQWxsb2NhdGlv
blN0cnVjdHVyZUZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHA6CisgICAgICAgIChKU0M6OlBvbHlQcm90
b0FjY2Vzc0NoYWluOjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50IGNvbnN0KToKKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6
OnZpc2l0V2VhayBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeVN0
YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1
cy5jcHA6CisgICAgICAgIChKU0M6OlNldFByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2VsbCk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0
dWJJbmZvOjppbml0SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpkZXJlZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphYm91dFRvRGllKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6c3VtbWFyeSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojpjb250YWluc1BDIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9m
ZnNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCk6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YnJhbmNoV2Vh
a1N0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxs
T3JVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNy
ZWF0ZVByb21pc2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGhlYXAvQWJz
dHJhY3RTbG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UpOgorICAgICAgICAqIGhlYXAv
SGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAg
KiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAg
ICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZUFsaWduZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpmcmVlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I6OnRyeU1hbGxvY0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6Y29tbWl0QmxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDoKKyAgICAgICAg
KiBoZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSXNv
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgor
ICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKToKKyAg
ICAgICAgKiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9QcmVjaXNlQWxsb2Nh
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OlByZWNpc2VBbGxvY2F0aW9uOjpjcmVhdGVGb3JMb3dl
clRpZXIpOgorICAgICAgICAoSlNDOjpQcmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93
ZXJUaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmg6Cisg
ICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgICogaGVhcC9T
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
ZWFwL1N0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0TG9hZFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
ZW1pdFJhbmRvbVRodW5rKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Q29u
dmVydFZhbHVlVG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hJZlZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uTnVsbERl
Y29kZVN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpudWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJm
bHkpOgorICAgICAgICAqIGppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAo
SlNDOjpQb2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0aW5lOjpjb21wdXRlSGFzaCk6CisgICAg
ICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
SW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAg
ICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZik6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUu
aDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpwZXJmb3Jt
TExJbnRHZXRCeUlEKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRlRGF0ZUluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRN
ZXNzYWdlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTmFt
ZVN0cmluZyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwp
OgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSGFzT3duUHJvcGVydHlDYWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDQ29uZmlnLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZSBjb25zdCk6CisgICAgICAg
ICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnRvT2JqZWN0U2xv
dyBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpjbGVhclN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c3RydWN0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpzZXRTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFy
cmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9B
cnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Q3VzdG9tR2V0dGVy
U2V0dGVyV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0Tm9uSW5kZXhBY2Nlc3NvcldpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpudWtlU3RydWN0dXJlQW5kU2V0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROb25JbmRl
eFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6
CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJl
bkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6Cisg
ICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp0b1Ro
aXNOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
UHJvdG90eXBlVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6flN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvciBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpp
ZCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVD
aGFpbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSUQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZUlEVGFibGU6OlN0cnVjdHVyZUlEVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRh
YmxlOjptYWtlRnJlZUxpc3RGcm9tUmFuZ2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRh
YmxlOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRh
Ymxlcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6OmFsbG9jYXRlSUQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWFsbG9jYXRlSUQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlSURUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6bnVrZWRTdHJ1
Y3R1cmVJREJpdCk6CisgICAgICAgIChKU0M6Om51a2UpOgorICAgICAgICAoSlNDOjppc051a2Vk
KToKKyAgICAgICAgKEpTQzo6ZGVjb250YW1pbmF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZUlEVGFibGU6OmJhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURUYWJsZTo6dGFibGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJRFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpn
ZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjp0cnlHZXQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZUlEVGFibGU6OmRlYWxsb2NhdGVJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6
OmFsbG9jYXRlSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRh
Ymxlcyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjp0cnlD
YWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3JWaWFXYXRjaHBvaW50KToKKyAgICAgICAgKiBydW50
aW1lL1N5bWJvbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAg
ICAgICogcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwOgorICAgICAgICAoSlNDOjpUeXBlUHJv
ZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVy
TG9nOjp2aXNpdCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6
Z2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Vk06OnRyeUdldFN0cnVjdHVyZSk6CisgICAg
ICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQ6OldyaXRlQmFycmllclN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpvcGVyYXRvciogY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6b3BlcmF0b3ItPiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpj
bGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpv
cGVyYXRvciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQ6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllclN0cnVjdHVyZUlEOjpzZXRXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnVudmFsaWRhdGVkR2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnZh
bHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpzZXRNYXlCZU51bGwp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6c2V0RWFy
bHlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogdG9vbHMvSGVhcFZlcmlmaWVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbCk6CisgICAgICAgICogdG9v
bHMvSW50ZWdyaXR5LmNwcDoKKyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDoKKyAgICAgICAg
KiB0b29scy9JbnRlZ3JpdHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVk
aXRTdHJ1Y3R1cmVJRCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAg
IChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6dmlzaXRDaGls
ZHJlbkltcGwpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uaDoKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseUdsb2JhbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldEdsb2JhbCk6CisKIDIw
MjEtMTItMTMgIHdhZGRsZXNwbGFzaCAgPHdhZGRsZXNwbGFzaEBnbWFpbC5jb20+CiAKICAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjogRG8gbm90IHN0b3JlIHRoaW5ncyBpbiBnX2NvbmZpZyB3
aGVuIFVTRShTWVNURU1fTUFMTE9DKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDExICs3NjIsMTEgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRl
ci5oCiAgICAgaGVhcC9IZWFwU3Vic3BhY2VUeXBlcy5oCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuaAorICAgIGhlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oLmgKICAgICBoZWFw
L0lzb0NlbGxTZXQuaAogICAgIGhlYXAvSXNvSGVhcENlbGxUeXBlLmgKICAgICBoZWFwL0lzb0lu
bGluZWRIZWFwQ2VsbFR5cGUuaAogICAgIGhlYXAvSXNvSW5saW5lZEhlYXBDZWxsVHlwZUlubGlu
ZXMuaAotICAgIGhlYXAvSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oCiAgICAgaGVhcC9Jc29TdWJz
cGFjZS5oCiAgICAgaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAogICAgIGhlYXAvSXNvU3Vic3Bh
Y2VQZXJWTS5oCkBAIC03OTMsNyArNzkzLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQQogICAgIGhlYXAvU3Ryb25nLmgKICAgICBoZWFwL1N0cm9uZ0ZvcndhcmQu
aAogICAgIGhlYXAvU3Ryb25nSW5saW5lcy5oCi0gICAgaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmgKICAgICBoZWFwL1N1YnNwYWNlLmgKICAgICBoZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCiAgICAgaGVhcC9TeW5jaHJvbm91c25lc3MuaApAQCAtMTE4Niw4ICsxMTg1LDggQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvU3Ry
dWN0dXJlLmgKICAgICBydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgKICAgICBydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgKLSAgICBydW50aW1lL1N0cnVjdHVyZUlELmgKICAgICBydW50aW1lL1N0cnVj
dHVyZUlEQmxvYi5oCisgICAgcnVudGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmgKICAgICBydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAogICAgIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAogICAg
IHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDcgKzUzNyw2IEBAIGhlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcAogaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAogaGVh
cC9Jc29DZWxsU2V0LmNwcAogaGVhcC9Jc29IZWFwQ2VsbFR5cGUuY3BwCi1oZWFwL0lzb01lbW9y
eUFsbG9jYXRvckJhc2UuY3BwCiBoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9Jc29TdWJzcGFj
ZVBlclZNLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKQEAgLTU1OSw3ICs1NTgsNiBA
QCBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cAogaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3Rv
cElmTmVjZXNzYXJ5VGltZXIuY3BwCi1oZWFwL1N0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3IuY3BwCiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11
dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKQEAgLTEwMDcsNiAr
MTAwNSw3IEBAIHJ1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAKIHJ1bnRpbWUvU3Ry
dWN0dXJlLmNwcAogcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAKIHJ1bnRpbWUvU3RydWN0dXJl
Q2hhaW4uY3BwCitydW50aW1lL1N0cnVjdHVyZUlEVGFibGUuY3BwCiBydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmNwcAogcnVudGltZS9TeW1ib2wuY3BwCiBydW50aW1lL1N5bWJvbENvbnN0cnVj
dG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4Njk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTcsNiArODU3LDcgQEAKIAkJMkFBQ0U2
M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQ0U2M0IxOENBNUEwMzAwRUQwMTkx
IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJBRDJFREZCMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlv
bk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
RDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2
NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJh
dGlvblNjb3BlLmggKi87IH07CisJCTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1
cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQUY3MzgyQjE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEMzQyRjM2RjcyNDQw
OTY4MDRBREIyNCAvKiBTb3VyY2VPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQyNUJBMTMzN0U0MzQ0RTFCMjY5QTY3MSAvKiBTb3VyY2VPcmln
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
MzExMUI4QjIzOTcyNTY1MDBBQTM0Q0UgLyogU2NyaWJibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzMTExQjhBMjM5NzI1NjUwMEFBMzRDRSAvKiBT
Y3JpYmJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTMzOTVDNzA3MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzk1QzcwNTIyNTU1
RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwpAQCAtMTA4OSwxMCAr
MTA5MCw2IEBACiAJCTUzNkIzMTlFMUY3MzVGMTYwMDM3RkMzMyAvKiBMb3dMZXZlbEludGVycHJl
dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDY4MEM3MTRCQkIxNjkwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCAqLzsgfTsK
IAkJNTM3MDgwNkIxRkUyMzJERjAwMjk5RTQ0IC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgfTsKIAkJNTM3MEI0RjYxQkYyNjIw
NTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEY0
MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmggKi87IH07Ci0JCTUzN0ZFRUM5Mjc0MkJEQTMwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVJ
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3RkVF
QzgyNzQyQkRBMzAwQzlFRkVFIC8qIFN0cnVjdHVyZUlELmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTM3RkVFQ0UyNzQyQkRFMTAwQzlFRkVFIC8q
IElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzdGRUVDQTI3NDJCREUwMDBDOUVGRUUgLyogSXNvTWVt
b3J5QWxsb2NhdG9yQmFzZUlubGluZXMuaCAqLzsgfTsKLQkJNTM3RkVFRDAyNzQyQkRFMTAwQzlF
RkVFIC8qIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzN0ZFRUNDMjc0MkJERTAwMEM5RUZFRSAv
KiBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IH07Ci0JCTUzN0ZFRUQxMjc0
MkJERTEwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzdGRUVDRDI3NDJCREUwMDBDOUVGRUUg
LyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUzODFCOTM5MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUz
OEYxNUU3MjY4RkJCQjYwMEQ2MDFDNCAvKiBVbmlmaWVkU291cmNlMTQ4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOEYxNUREMjY4RkJCQjMwMEQ2
MDFDNCAvKiBVbmlmaWVkU291cmNlMTQ4LmNwcCAqLzsgfTsKIAkJNTM4RjE1RTgyNjhGQkJCNjAw
RDYwMUM0IC8qIFVuaWZpZWRTb3VyY2UxNTEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTM4RjE1REUyNjhGQkJCMzAwRDYwMUM0IC8qIFVuaWZpZWRT
b3VyY2UxNTEuY3BwICovOyB9OwpAQCAtMzYzOSw2ICszNjM2LDggQEAKIAkJMkFEMkVERkExOTc5
OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFbnVtZXJhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9n
Z2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0xvZ2dpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQUY3MzgyQTE4QkJCRjkyMDA4QTVB
MzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHJ1Y3R1cmVJRFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkFGNzM4MkIxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMDMyMTc1REYxQUQ0N0Q4OTk4QjM0RTEgLyogSlNTb3VyY2VD
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU291cmNlQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMEE1RjQwM0YxMUM0RjU5OUNENTk2RDUgLyog
V2FzbVNpZ25hdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbVNpZ25hdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzMx
MTFCOEEyMzk3MjU2NTAwQUEzNENFIC8qIFNjcmliYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmli
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzQxLDcgKzM3NDAsNiBAQAog
CQk1MzBGQjMwMTFFN0EwQjZFMDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Xb3JrbGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMEZERTczMjFGQUFGQzYwMDA1OUQ2NSAvKiB0
ZXN0SW5jbHVkZXMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gdGVzdEluY2x1ZGVzLm07IHBhdGggPSBB
UEkvdGVzdHMvdGVzdEluY2x1ZGVzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUz
MTAxM0YzMjc0NDE5RjQwMDA5MDA5QyAvKiBsaWJXVEYuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYldURi5hOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MzExQkQ0ODFFQTU4MUU1MDA1
MjUyODEgLyogV2FzbU9NR1BsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbU9NR1BsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEx
QkQ0OTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbU9NR1BsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zOTMwLDExICszOTI4LDYgQEAKIAkJNTM3MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzczQjREMzIyQUQ4QkY3
MDA4MDM1NzIgLyogV2Vha09iamVjdFJlZlByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTM3M0I0RDQyMkFEQjMxNDAwODAzNTcyIC8qIFdlYWtPYmplY3RSZWZDb25zdHJ1Y3Rvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzdGRUVDODI3NDJCREEzMDBDOUVGRUUgLyogU3Ry
dWN0dXJlSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSUQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTM3RkVFQ0EyNzQyQkRFMDAwQzlFRkVF
IC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElzb01lbW9yeUFsbG9jYXRvckJhc2VJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUzN0ZFRUNCMjc0MkJERTAwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MzdGRUVDQzI3NDJCREUwMDBDOUVGRUUgLyogU3RydWN0dXJlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUzN0ZFRUNEMjc0MkJERTAwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb01lbW9yeUFsbG9jYXRvckJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM4MUI5MzYxRTYwRTk2NjAwOTBG
Nzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzODFCOTM4MUU2MEU5N0QwMDkwRjc5NCAvKiBXYXNtRmF1bHRTaWdu
YWxIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21GYXVsdFNp
Z25hbEhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM4M0FBMkYxRTY1
RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU3OTAsNyArNTc4Myw2IEBACiAJCQkJNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8q
IGxpYmVkaXQuZHlsaWIgKi8sCiAJCQkJOTMyMkEwMDMwNkMzNDFEMzAwOTA2N0JCIC8qIGxpYmlj
dWNvcmUuZHlsaWIgKi8sCiAJCQkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMu
ZHlsaWIgKi8sCi0JCQkJNTMxMDEzRjMyNzQ0MTlGNDAwMDkwMDlDIC8qIGxpYldURi5hICovLAog
CQkJCTE0OThDQUQzMjE0NjU2QzQwMDcxMDg3OSAvKiBsaWJXVEYuYSAqLywKIAkJCQlBOEE0NzQ4
RDE1MUE4MzA2MDA0MTIzRkYgLyogbGliV1RGLmEgKi8sCiAJCQkJMzcxRDg0MkMxN0M5OEI2RTAw
RUNGOTk0IC8qIGxpYnouZHlsaWIgKi8sCkBAIC02NjcyLDggKzY2NjQsNiBAQAogCQkJCTE0MkUz
MTMyMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCAqLywKIAkJCQlDRDFGOUI0QTI3MENGRTBG
MDA2MTdFQjYgLyogU3Ryb25nRm9yd2FyZC5oICovLAogCQkJCTE0NTcyMjg1MTQzN0UxNDAwMDVG
REUyNiAvKiBTdHJvbmdJbmxpbmVzLmggKi8sCi0JCQkJNTM3RkVFQ0IyNzQyQkRFMDAwQzlFRkVF
IC8qIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAotCQkJCTUzN0ZFRUND
Mjc0MkJERTAwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8s
CiAJCQkJMEY3REYxMzExRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmNwcCAqLywKIAkJCQkw
RjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2UuaCAqLywKIAkJCQkwRjdERjEzMzFF
Mjk3MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi8sCkBAIC04MDc1LDggKzgwNjUs
OSBAQAogCQkJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICov
LAogCQkJCTdFNEVFNzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8s
CiAJCQkJN0U0RUU3MDgwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggKi8sCi0J
CQkJNTM3RkVFQzgyNzQyQkRBMzAwQzlFRkVFIC8qIFN0cnVjdHVyZUlELmggKi8sCiAJCQkJMkFB
QUEzMTAxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oICovLAorCQkJCTJBRjcz
ODJBMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCAqLywKKwkJCQkyQUY3
MzgyQjE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovLAogCQkJCTBGRDJD
OTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi8sCiAJCQkJQzJGMEYy
RDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAqLywKIAkJCQlDMkZF
MThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLywKQEAgLTEwMjc2
LDggKzEwMjY3LDYgQEAKIAkJCQkwRkI0Njc4MTFGRERBNkY3MDAzRkNCMDkgLyogSXNvQ2VsbFNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQkYxQkFFMjM4QUFFREIwMDNBMUMyQiAv
KiBJc29IZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQzhFRDQzMjNBMURCQ0Iw
MDEzMTk1OCAvKiBJc29JbmxpbmVkSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MzdGRUVEMTI3NDJCREUxMDBDOUVGRUUgLyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNTM3RkVFQ0UyNzQyQkRFMTAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9j
YXRvckJhc2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRDRTEyRDFGQUZCNEU1MDA2
RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDJGRDk1MjBCNTJC
RTIwMEYwOTQ0MSAvKiBJc29TdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NUUwRkU3MjA4NkFENDgwMDk3RjBERSAvKiBJc29TdWJzcGFjZVBlclZNLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwODI4LDExICsxMDgxNywxMCBAQAogCQkJCUNEMUY5QjRCMjcwQ0ZFMEYwMDYxN0VC
NiAvKiBTdHJvbmdGb3J3YXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQw
MDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgw
RTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM3RkVF
RDAyNzQyQkRFMTAwQzlFRkVFIC8qIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0
cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MzdGRUVDOTI3NDJCREEzMDBDOUVG
RUUgLyogU3RydWN0dXJlSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEw
MDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBRjczODJE
MThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0
dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCBBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKFZNJiB2bSwgSlND
ZWxsKiBvCiAgICAgLCBtX3BvbHlQcm90b0FjY2Vzc0NoYWluKFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiB7Ci0gICAgbV9zdHJ1
Y3R1cmVJRC5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgIG1fc3RydWN0
dXJlLnNldE1heUJlTnVsbCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgbV9jb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb25kaXRpb25TZXQuaXNW
YWxpZCgpKTsKIH0KQEAgLTUzNiwxNCArNTM2LDE0IEBAIGJvb2wgQWNjZXNzQ2FzZTo6bmVlZHNT
Y3JhdGNoRlBSKCkgY29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQg
QWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAordm9pZCBBY2Nlc3NDYXNlOjpmb3JFYWNoRGVwZW5kZW50Q2VsbChWTSYgdm0s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgbV9jb25kaXRpb25TZXQuZm9y
RWFjaERlcGVuZGVudENlbGwoZnVuY3Rvcik7Ci0gICAgaWYgKG1fc3RydWN0dXJlSUQpCi0gICAg
ICAgIGZ1bmN0b3IobV9zdHJ1Y3R1cmVJRC5nZXQoKSk7CisgICAgaWYgKG1fc3RydWN0dXJlKQor
ICAgICAgICBmdW5jdG9yKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICBpZiAobV9wb2x5UHJvdG9B
Y2Nlc3NDaGFpbikgewogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogbV9w
b2x5UHJvdG9BY2Nlc3NDaGFpbi0+Y2hhaW4oKSkKLSAgICAgICAgICAgIGZ1bmN0b3Ioc3RydWN0
dXJlSUQuZGVjb2RlKCkpOworICAgICAgICAgICAgZnVuY3Rvcih2bS5nZXRTdHJ1Y3R1cmUoc3Ry
dWN0dXJlSUQpKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHR5cGUoKSkgewpAQCAtODc0LDggKzg3
NCw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKICAgICAgICAg
aWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uIHx8IG1fdHlwZSA9PSBEZWxldGUgfHwgbV90eXBlID09
IFNldFByaXZhdGVCcmFuZCkKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iLCBpbmRlbnQsICJm
cm9tIHN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSgpKSwKICAgICAgICAgICAg
ICAgICAiXG4iLCBpbmRlbnQsICJ0byBzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChuZXdTdHJ1
Y3R1cmUoKSkpOwotICAgICAgICBlbHNlIGlmIChtX3N0cnVjdHVyZUlEKQotICAgICAgICAgICAg
b3V0LnByaW50KCJcbiIsIGluZGVudCwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3Ry
dWN0dXJlSUQuZ2V0KCkpKTsKKyAgICAgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIlxuIiwgaW5kZW50LCAic3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAo
bV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKQEAgLTkwNCwxOSArOTA0LDE5IEBAIGJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFr
KFZNJiB2bSkgY29uc3QKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIEFjY2Vzc0Nh
c2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fc3RydWN0dXJlSUQpCi0gICAgICAgIG1fc3RydWN0dXJlSUQtPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgbV9zdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hhaW4pIHsKICAg
ICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IG1fcG9seVByb3RvQWNjZXNzQ2hh
aW4tPmNoYWluKCkpCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRC5kZWNvZGUoKS0+bWFya0lmQ2hl
YXAodmlzaXRvcik7CisgICAgICAgICAgICB2aXNpdG9yLnZtKCkuZ2V0U3RydWN0dXJlKHN0cnVj
dHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAgICAgfQogCiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgY2FzZSBEZWxldGU6Ci0gICAgICAgIGlm
ICh2aXNpdG9yLmlzTWFya2VkKG1fc3RydWN0dXJlSUQtPnByZXZpb3VzSUQoKSkpCi0gICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlSUQuZ2V0KCkpOworICAg
ICAgICBpZiAodmlzaXRvci5pc01hcmtlZChtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTE3MjAsNyAr
MTcyMCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3Moc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogI2VuZGlmCiAK
LSAgICAgICAgaml0LmVtaXRMb2FkUHJvdG90eXBlKHZtLCB2YWx1ZUdQUiwgcmVzdWx0UmVncywg
ZmFpbEFuZElnbm9yZSk7CisgICAgICAgIGppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSwgdmFsdWVH
UFIsIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGZhaWxBbmRJZ25vcmUpOwogICAgICAgICBqaXQu
bW92ZShzY3JhdGNoMkdQUiwgdmFsdWVHUFIpOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGlzSW5zdGFuY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWws
IHZhbHVlR1BSLCBwcm90b3R5cGVHUFIpOwpAQCAtMjYxMyw3ICsyNjEzLDcgQEAgYm9vbCBBY2Nl
c3NDYXNlOjpjYW5CZVNoYXJlZChjb25zdCBBY2NlcwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKGxocy5tX3ZpYVByb3h5ICE9IHJocy5tX3ZpYVByb3h5KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGxocy5tX3N0cnVjdHVyZUlELmdldCgpICE9IHJocy5tX3N0cnVjdHVy
ZUlELmdldCgpKQorICAgIGlmIChsaHMubV9zdHJ1Y3R1cmUuZ2V0KCkgIT0gcmhzLm1fc3RydWN0
dXJlLmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGxocy5tX2lkZW50aWZp
ZXIgIT0gcmhzLm1faWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODQsMTUgKzE4NCwxNSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9u
IHx8IG1fdHlwZSA9PSBEZWxldGUgfHwgbV90eXBlID09IFNldFByaXZhdGVCcmFuZCkKLSAgICAg
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUlELT5wcmV2aW91c0lEKCk7Ci0gICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZUlELmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5w
cmV2aW91c0lEKCk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKICAgICB9CiAg
ICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayhjb25zdCBTdHJ1Y3R1cmVTdHViSW5mbyYp
IGNvbnN0OwogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUcmFuc2l0aW9uIHx8IG1fdHlwZSA9PSBEZWxldGUgfHwg
bV90eXBlID09IFNldFByaXZhdGVCcmFuZCk7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUlE
LmdldCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogCiAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jb25kaXRpb25TZXQ7IH0KQEAgLTI3Miw3ICsyNzIsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChtX2Nv
bmRpdGlvblNldC5oYXNoKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3R5cGUpLCBtX3ZpYVBy
b3h5LCBtX3N0cnVjdHVyZUlELnVudmFsaWRhdGVkR2V0KCksIG1fb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVIYXNoKG1fY29uZGl0aW9uU2V0Lmhhc2goKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fdHlwZSksIG1fdmlhUHJveHksIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCks
IG1fb2Zmc2V0KTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBjYW5CZVNoYXJlZChjb25zdCBB
Y2Nlc3NDYXNlJiwgY29uc3QgQWNjZXNzQ2FzZSYpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgLCBtX3N0YXRlKFdURk1vdmUob3RoZXIubV9zdGF0ZSkpCiAgICAgICAg
ICwgbV92aWFQcm94eShXVEZNb3ZlKG90aGVyLm1fdmlhUHJveHkpKQogICAgICAgICAsIG1fb2Zm
c2V0KFdURk1vdmUob3RoZXIubV9vZmZzZXQpKQotICAgICAgICAsIG1fc3RydWN0dXJlSUQoV1RG
TW92ZShvdGhlci5tX3N0cnVjdHVyZUlEKSkKKyAgICAgICAgLCBtX3N0cnVjdHVyZShXVEZNb3Zl
KG90aGVyLm1fc3RydWN0dXJlKSkKICAgICAgICAgLCBtX2NvbmRpdGlvblNldChXVEZNb3ZlKG90
aGVyLm1fY29uZGl0aW9uU2V0KSkKICAgICAgICAgLCBtX3BvbHlQcm90b0FjY2Vzc0NoYWluKFdU
Rk1vdmUob3RoZXIubV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikpCiAgICAgICAgICwgbV9pZGVudGlm
aWVyKFdURk1vdmUob3RoZXIubV9pZGVudGlmaWVyKSkKQEAgLTI5NSw3ICsyOTUsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQogICAgICAgICAsIG1fdmlh
UHJveHkob3RoZXIubV92aWFQcm94eSkKICAgICAgICAgLCBtX29mZnNldChvdGhlci5tX29mZnNl
dCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUlEKG90aGVyLm1fc3RydWN0dXJlSUQpCisgICAgICAg
ICwgbV9zdHJ1Y3R1cmUob3RoZXIubV9zdHJ1Y3R1cmUpCiAgICAgICAgICwgbV9jb25kaXRpb25T
ZXQob3RoZXIubV9jb25kaXRpb25TZXQpCiAgICAgICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFp
bihvdGhlci5tX3BvbHlQcm90b0FjY2Vzc0NoYWluKQogICAgICAgICAsIG1faWRlbnRpZmllcihv
dGhlci5tX2lkZW50aWZpZXIpCkBAIC0zNDgsNyArMzQ4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBV
c3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmpl
Y3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3KgogICAgIC8vIHN0cnVjdHVyZSBmb3Ig
YSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25n
IHJlZmVyZW5jZSB0byB0aGUgb2xkCiAgICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhp
cyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KLSAgICBX
cml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwogCiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
bV9jb25kaXRpb25TZXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIz
LDkgKzEyMyw5IEBAIHZvaWQgQXJyYXlQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3QKICAg
ICBpZiAoIW1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFN0cnVjdHVyZSogbGFzdFNlZW5TdHJ1Y3R1cmUgPSBtX2xhc3RTZWVuU3RydWN0dXJlSUQuZGVj
b2RlKCk7CisgICAgU3RydWN0dXJlKiBsYXN0U2VlblN0cnVjdHVyZSA9IGNvZGVCbG9jay0+aGVh
cCgpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCk7CiAgICAg
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBsYXN0U2VlblN0cnVj
dHVyZSk7Ci0gICAgbV9sYXN0U2VlblN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICBt
X2xhc3RTZWVuU3RydWN0dXJlSUQgPSAwOwogfQogCiB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGxhc3RTZWVuU3RydWN0dXJlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMjg2OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBwb2x5bW9ycGhpY1N0cnVjdHVyZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0
cnVjdHVyZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpKTsgfQogICAgIAotICAgIFN0cnVj
dHVyZUlEIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRDsKKyAgICBTdHJ1Y3R1cmVJRCBtX2xhc3RTZWVu
U3RydWN0dXJlSUQgeyAwIH07CiAgICAgYm9vbCBtX21heVN0b3JlVG9Ib2xlIHsgZmFsc2UgfTsg
Ly8gVGhpcyBmbGFnIG1heSBiZWNvbWUgb3ZlcmxvYWRlZCB0byBpbmRpY2F0ZSBvdGhlciBzcGVj
aWFsIGNhc2VzIHRoYXQgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgYXJyYXkgYWNjZXNzLCBhcyBp
dCBkZXBlbmRzIG9uIGluZGV4aW5nIHR5cGUuIFNpbmNlIHdlIGN1cnJlbnRseSBoYXZlIGJhc2lj
YWxseSBqdXN0IG9uZSBpbmRleGluZyB0eXBlICh0d28gdmFyaWFudHMgb2YgQXJyYXlTdG9yYWdl
KSwgdGhpcyBmbGFnIGZvciBub3cganVzdCBtZWFucyBleGFjdGx5IHdoYXQgaXRzIG5hbWUgaW1w
bGllcy4KICAgICBib29sIG1fb3V0T2ZCb3VuZHMgeyBmYWxzZSB9OwogI2lmIFVTRShMQVJHRV9U
WVBFRF9BUlJBWVMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQ
cml2YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DaGVja1ByaXZhdGVCcmFuZFN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyBDaGVja1ByaXZhdGVCcmFuCiAgICAgICAgIHJldHVybiBDaGVja1ByaXZhdGVCcmFu
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0g
ICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsKKyAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogCiAgICAgICAg
IGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyAr
K2xpc3RJbmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlz
dC0+YXQobGlzdEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5Miw2ICsxMTky
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdh
dGVUcmFuc2l0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIHR5cGVuYW1lIFZpc2l0b3I6OlN1cHByZXNzR0NWZXJpZmllclNjb3BlIHN1cHBy
ZXNzU2NvcGUodmlzaXRvcik7CisgICAgVk0mIHZtID0gKm1fdm07CiAKICAgICBpZiAoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspIHsKICAgICAgICAgaWYgKG1fbWV0YWRh
dGEpIHsKQEAgLTEyMDEsOSArMTIwMiw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFu
c2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFuZXdT
dHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0
b3IuaXNNYXJrZWQob2xkU3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJs
ZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9KTsKQEAgLTEyMTksOSArMTIyMCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVU
cmFuc2l0aW9ucyhjb24KICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQocHJv
cGVydHkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5p
c01hcmtlZChvbGRTdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZChuZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0pOwpAQCAtMTIzNyw5ICsxMjM4LDkgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKGNvbgogICAgICAgICAgICAgICAgIGlmICghdmlzaXRvci5pc01hcmtlZChicmFuZCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFya2Vk
KG9sZFN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBuZXdTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3
U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CkBA
IC0xMjY4LDcgKzEyNjksNyBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uCiAgICAgICAgIGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBk
ZmdDb21tb24tPm1fd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCi0gICAgICAgICAgICBzdHJ1Y3R1
cmVJRC5kZWNvZGUoKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgICAgICAgICB2bS5nZXRT
dHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgICAgICBm
b3IgKGF1dG8mIHRyYW5zaXRpb24gOiBkZmdDb21tb24tPm1fdHJhbnNpdGlvbnMpIHsKICAgICAg
ICAgICAgIGlmIChzaG91bGRNYXJrVHJhbnNpdGlvbih2aXNpdG9yLCB0cmFuc2l0aW9uKSkgewpA
QCAtMTMwOCw3ICsxMzA5LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKGNv
bnN0IAogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIFZNJiB2bSA9ICptX3ZtOwotICAg
IFVOVVNFRF9WQVJJQUJMRSh2bSk7CiAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQodGhpcykpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAgICB9CiAgICAgaWYgKGFsbEFyZUxpdmVTb0Zh
cikgewogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT5t
X3dlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICAgICAgaWYgKCF2
aXNpdG9yLmlzTWFya2VkKHN0cnVjdHVyZSkpIHsKICAgICAgICAgICAgICAgICBhbGxBcmVMaXZl
U29GYXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNjcsNyArMTM2Nyw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgICAg
IGlmIChtb2RlTWV0YWRhdGEubW9kZSAhPSBHZXRCeUlkTW9kZTo6RGVmYXVsdCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9
IG1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICgh
b2xkU3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUo
KSkpCisgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQo
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9z
ZU9TUigpLCAiQ2xlYXJpbmcgIiwgb3BOYW1lLCAiIExMSW50IHByb3BlcnR5IGFjY2Vzcy4iKTsK
ICAgICAgICAgICAgIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dDo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShtb2RlTWV0YWRhdGEpOwpAQCAtMTM4OCwxOSArMTM4
OCwxOSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAKICAgICAg
ICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcFRyeUdldEJ5SWQ+KFsmXSAoYXV0byYgbWV0YWRhdGEp
IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgdm0uaGVhcC5p
c01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisgICAgICAgICAgICBpZiAoIW9sZFN0
cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgdHJ5X2dldF9i
eV9pZCBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuIik7Ci0gICAgICAgICAgICBtZXRhZGF0YS5tX3N0
cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0
dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwogICAgICAgICB9
KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wR2V0QnlJZERpcmVjdD4oWyZdIChh
dXRvJiBtZXRhZGF0YSkgewogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwotICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZUlELmRlY29kZSgpKSkKKyAgICAgICAg
ICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVh
cmluZyBnZXRfYnlfaWRfZGlyZWN0IExMSW50IHByb3BlcnR5IGFjY2Vzcy4iKTsKLSAgICAgICAg
ICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAg
bWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNl
dCA9IDA7CiAgICAgICAgIH0pOwogCkBAIC0xNDA4LDExICsxNDA4LDExIEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVy
dHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwogICAgICAgICAgICAgU3RydWN0dXJlSUQg
c3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwogCi0gICAgICAgICAgICBpZiAo
KCFwcm9wZXJ0eSB8fCB2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkgJiYgKCFzdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZUlELmRlY29kZSgpKSkpCisgICAgICAgICAg
ICBpZiAoKCFwcm9wZXJ0eSB8fCB2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkgJiYgKCFzdHJ1
Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChzdHJ1Y3R1cmVJRCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IHByaXZh
dGUgcHJvcGVydHkgYWNjZXNzLiIpOwotICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJ
RCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEID0g
MDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIG1ldGFk
YXRhLm1fcHJvcGVydHkuY2xlYXIoKTsKICAgICAgICAgfSk7CkBAIC0xNDIxLDE0ICsxNDIxLDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgICAg
IFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsK
ICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdT
dHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IG1ldGFkYXRh
Lm1fc3RydWN0dXJlQ2hhaW4uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZUlELmRlY29kZSgpKSkKLSAgICAgICAg
ICAgICAgICAmJiAoIW5ld1N0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQobmV3U3RydWN0
dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJl
SUQpKSkKKyAgICAgICAgICAgICAgICAmJiAoIW5ld1N0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNN
YXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpCiAg
ICAgICAgICAgICAgICAgJiYgKCFjaGFpbiB8fCB2bS5oZWFwLmlzTWFya2VkKGNoYWluKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRpb24uIik7Ci0gICAgICAg
ICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEu
bV9vZmZzZXQgPSAwOwotICAgICAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IFN0
cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gMDsK
ICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKICAgICAgICAg
fSk7CiAKQEAgLTE0MzYsMTUgKzE0MzYsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3Ry
dWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgICAgICAgICAgSlNDZWxs
KiBwcm9wZXJ0eSA9IG1ldGFkYXRhLm1fcHJvcGVydHkuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
KCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG9sZFN0cnVjdHVyZUlELmRlY29k
ZSgpKSkKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJr
ZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAg
ICAgICAgICAgICAgJiYgKCFwcm9wZXJ0eSB8fCB2bS5oZWFwLmlzTWFya2VkKHByb3BlcnR5KSkK
LSAgICAgICAgICAgICAgICAmJiAoIW5ld1N0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQo
bmV3U3RydWN0dXJlSUQuZGVjb2RlKCkpKSkKKyAgICAgICAgICAgICAgICAmJiAoIW5ld1N0cnVj
dHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0
KG5ld1N0cnVjdHVyZUlEKSkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgcHV0
X3ByaXZhdGVfbmFtZSB0cmFuc2l0aW9uLiIpOwotICAgICAgICAgICAgbWV0YWRhdGEubV9vbGRT
dHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX29sZFN0
cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKLSAgICAg
ICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAg
ICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX3Byb3BlcnR5LmNsZWFyKCk7CiAgICAgICAgIH0pOwogCkBAIC0xNDUyLDM3ICsxNDUyLDM3
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgICAg
IFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsK
ICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9uZXdT
dHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIEpTQ2VsbCogYnJhbmQgPSBtZXRhZGF0YS5tX2JyYW5k
LmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01h
cmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisgICAgICAgICAgICBpZiAoKCFvbGRTdHJ1
Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAgICYmICghYnJhbmQgfHwgdm0uaGVh
cC5pc01hcmtlZChicmFuZCkpCi0gICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8
fCB2bS5oZWFwLmlzTWFya2VkKG5ld1N0cnVjdHVyZUlELmRlY29kZSgpKSkpCisgICAgICAgICAg
ICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
IkNsZWFyaW5nIExMSW50IHNldF9wcml2YXRlX2JyYW5kIHRyYW5zaXRpb24uIik7Ci0gICAgICAg
ICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKLSAgICAgICAg
ICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAg
ICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5t
X25ld1N0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fYnJhbmQuY2xlYXIo
KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcENoZWNrUHJp
dmF0ZUJyYW5kPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBKU0Nl
bGwqIGJyYW5kID0gbWV0YWRhdGEubV9icmFuZC5nZXQoKTsKLSAgICAgICAgICAgIGlmICgoIXN0
cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAg
ICAgICAgICAgaWYgKCghc3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICAmJiAo
IWJyYW5kIHx8IHZtLmhlYXAuaXNNYXJrZWQoYnJhbmQpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNs
ZWFyaW5nIExMSW50IGNoZWNrX3ByaXZhdGVfYnJhbmQgdHJhbnNpdGlvbi4iKTsKLSAgICAgICAg
ICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAg
bWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX2JyYW5k
LmNsZWFyKCk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BU
b1RoaXM+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIGlmICghbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxl
KCkuZ2V0KG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Ci0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190aGlzIHdpdGgg
c3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX3RvVGhpc1N0YXR1cyA9IG1lcmdlKG1ldGFkYXRhLm1fdG9UaGlzU3RhdHVzLCBUb1RoaXND
bGVhcmVkQnlHQyk7CiAgICAgICAgIH0pOwogCkBAIC0xNTY5LDcgKzE1NjksNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfTsKIAotICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQoc3RkOjpnZXQ8
MD4ocGFpci5rZXkpLmRlY29kZSgpKSkKKyAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdGQ6OmdldDwwPihwYWlyLmtleSkpKSkKICAg
ICAgICAgICAgIHJldHVybiBjbGVhcigpOwogCiAgICAgICAgIGZvciAoY29uc3QgTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50JiB3YXRjaHBvaW50IDogcGFpci52
YWx1ZSkgewpAQCAtMTkxNyw3ICsxOTE3LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5Vmlz
aXRXZWFrUmVmZXJlbgogICAgICAgICB2aXNpdG9yLmFwcGVuZCh3ZWFrUmVmZXJlbmNlKTsKIAog
ICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBkZmdDb21tb24tPm1fd2Vha1N0cnVj
dHVyZVJlZmVyZW5jZXMpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoc3RydWN0
dXJlSUQuZGVjb2RlKCkpOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZpc2l0
b3Iudm0oKS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpKTsKICNlbmRpZiAgICAKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVsZXRlQnlTdGF0dXMu
Y3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RGVsZXRlQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIERlbGV0
ZUJ5U3RhdHVzIERlbGV0ZUJ5U3RhdHVzOjpjb21wdXRlRm8KICAgICAgICAgcmV0dXJuIERlbGV0
ZUJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsK
LSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+bV9zdHViOworICAg
ICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51LnN0dWI7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7
ICsrbGlzdEluZGV4KSB7CiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBs
aXN0LT5hdChsaXN0SW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEK
IHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGEoKQog
ICAgIHsKLSAgICAgICAgZGVmYXVsdE1vZGUuc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOwor
ICAgICAgICBkZWZhdWx0TW9kZS5zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIGRlZmF1bHRNb2Rl
LmNhY2hlZE9mZnNldCA9IDA7CiAgICAgICAgIGRlZmF1bHRNb2RlLnBhZGRpbmcxID0gMDsKICAg
ICAgICAgbW9kZSA9IEdldEJ5SWRNb2RlOjpEZWZhdWx0OwpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIHN0cnVjdCBHZXRCeUlkTW9k
ZU1ldGFkYXRhIHsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhKCkKICAgICB7Ci0gICAgICAgIGRl
ZmF1bHRNb2RlLnN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgZGVmYXVsdE1v
ZGUuc3RydWN0dXJlSUQgPSAwOwogICAgICAgICBkZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXQgPSAw
OwogICAgICAgICBkZWZhdWx0TW9kZS5wYWRkaW5nMSA9IDA7CiAgICAgICAgIG1vZGUgPSBHZXRC
eUlkTW9kZTo6RGVmYXVsdDsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVN
ZXRhZGF0YSB7CiBpbmxpbmUgdm9pZCBHZXRCeUlkTW9kZU1ldGFkYXRhOjpjbGVhclRvRGVmYXVs
dE1vZGVXaXRob3V0Q2FjaGUoKQogewogICAgIG1vZGUgPSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsK
LSAgICBkZWZhdWx0TW9kZS5zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgZGVmYXVs
dE1vZGUuc3RydWN0dXJlSUQgPSAwOwogICAgIGRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldCA9IDA7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4KICAgICBpZiAoIXN0cnVjdHVy
ZUlEKQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1
Y3R1cmVJRCk7CiAKICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1
cmVQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbiwg
ZmFsc2UpOwpAQCAtMjM2LDcgKzIzNiw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21w
dXRlRm9yU3R1YkkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7
Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsKKyAg
ICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAgICAg
ICBpZiAobGlzdC0+c2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2Um
IGFjY2VzcyA9IGxpc3QtPmF0KDApOwogICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMu
Y3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBJbkJ5U3Rh
dHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgfQogCiAgICAgY2FzZSBDYWNo
ZVR5cGU6OlN0dWI6IHsKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5m
by0+bV9zdHViOworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT51
LnN0dWI7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwg
bGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2Fz
ZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKICAgICAgICAgICAgIGlmIChhY2Nlc3Mu
dmlhUHJveHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0
Nyw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAg
fQogCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKLSAgICAgICAgc3R1Yklu
Zm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQuY2xlYXIoKTsgLy8gQ2xlYXIgb3V0IHRo
ZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAg
ICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKLSAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQuY2xlYXIo
KTsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHN0dWJJbmZv
Lm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5l
IGFjY2VzcyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VPZlN0YXR1cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdGFuY2VP
ZlN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgSW5zdGFuY2VPZlN0
YXR1cyBJbnN0YW5jZU9mU3RhdHVzOjpjb21wdQogICAgIGlmIChzdHViSW5mby0+Y2FjaGVUeXBl
KCkgIT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICByZXR1cm4gVGFrZXNTbG93UGF0aDsgLy8g
VGhpcyBpcyBjb25zZXJ2YXRpdmUuIEl0IGNvdWxkIGJlIHRoYXQgd2UgaGF2ZSBubyBpbmZvcm1h
dGlvbi4KICAgICAKLSAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0
dWI7CisgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAg
IEluc3RhbmNlT2ZTdGF0dXMgcmVzdWx0OwogICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0g
MDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAgICBjb25z
dCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChsaXN0SW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMSArMzMsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZTdHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUsIG1fc3RydWN0
dXJlSUQpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZTdHJ1Y3R1cmUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlLCBtX3N0cnVjdHVyZSk7IH0KIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVJRC5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUFsbG9jYXRp
b25TdHJ1Y3R1cmVGcm9tQmFzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvd25lciwg
SlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlKTsKIAotICAgIHZvaWQgY2xlYXIo
KSB7IG1fc3RydWN0dXJlSUQuY2xlYXIoKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+IHZvaWQgdmlzaXRBZ2dyZWdhdGUoVmlzaXRvciYgdmlzaXRvcikgeyB2aXNpdG9yLmFwcGVu
ZChtX3N0cnVjdHVyZUlEKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RydWN0dXJlLmNsZWFy
KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIHZpc2l0QWdncmVnYXRl
KFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1Y3R1cmUpOyB9CiAKIHBy
aXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKKyAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKIH07CiAKIGlubGluZSBTdHJ1Y3R1
cmUqIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6Y3JlYXRlQWxsb2NhdGlvblN0
cnVjdHVyZUZyb21CYXNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGJhc2VHbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVj
dHVyZSkKIHsKLSAgICBBU1NFUlQoIW1fc3RydWN0dXJlSUQgfHwgbV9zdHJ1Y3R1cmVJRC5nZXQo
KS0+Y2xhc3NJbmZvKCkgIT0gYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgfHwgbV9zdHJ1Y3R1
cmVJRC0+Z2xvYmFsT2JqZWN0KCkgIT0gYmFzZVN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwor
ICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUgfHwgbV9zdHJ1Y3R1cmUuZ2V0KCktPmNsYXNzSW5mbygp
ICE9IGJhc2VTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpIHx8IG1fc3RydWN0dXJlLT5nbG9iYWxPYmpl
Y3QoKSAhPSBiYXNlU3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgQVNTRVJUKGJhc2VT
dHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwpA
QCAtNjEsOCArNjEsOCBAQCBpbmxpbmUgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
CiAgICAgLy8gRW5zdXJlIHRoYXQgaWYgYW5vdGhlciB0aHJlYWQgc2VlcyB0aGUgc3RydWN0dXJl
LCBpdCB3aWxsIHNlZSBpdCBwcm9wZXJseSBjcmVhdGVkLgogICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CiAKLSAgICBtX3N0cnVjdHVyZUlELnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0g
ICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1
Y3R1cmUpOworICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNj
ZXNzQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDEwICs4MCwxMCBAQCBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IFBv
bHlQcm90b0FjCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUG9seVByb3RvQWNjZXNzQ2hhaW4o
V1RGTW92ZShjaGFpbikpKTsKIH0KIAotYm9vbCBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChWTSYpIGNvbnN0Citib29sIFBvbHlQcm90b0FjY2Vzc0No
YWluOjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFZNJiB2bSkgY29uc3QKIHsKICAgICBm
b3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogbV9jaGFpbikgewotICAgICAgICBpZiAoc3Ry
dWN0dXJlSUQuZGVjb2RlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAg
ICAgaWYgKHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNj
ZXNzQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seVByb3RvQWNjZXNzQ2hhaW4uaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJ
RC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgPHd0Zi9GaXhlZFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU3
LDIwICs1NywyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KFZNJikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lk
IGZvckVhY2goVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIGNvbnN0IEZ1bmMmIGZ1bmMp
IGNvbnN0CisgICAgdm9pZCBmb3JFYWNoKFZNJiB2bSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJl
LCBjb25zdCBGdW5jJiBmdW5jKSBjb25zdAogICAgIHsKICAgICAgICAgYm9vbCBhdEVuZCA9ICFt
X2NoYWluLnNpemUoKTsKICAgICAgICAgZnVuYyhiYXNlU3RydWN0dXJlLCBhdEVuZCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoYWluLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICBhdEVuZCA9IGkgKyAxID09IG1fY2hhaW4uc2l6ZSgpOwotICAgICAgICAgICAgZnVu
YyhtX2NoYWluW2ldLmRlY29kZSgpLCBhdEVuZCk7CisgICAgICAgICAgICBmdW5jKHZtLmdldFN0
cnVjdHVyZShtX2NoYWluW2ldKSwgYXRFbmQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU3Ry
dWN0dXJlKiBzbG90QmFzZVN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkg
Y29uc3QKKyAgICBTdHJ1Y3R1cmUqIHNsb3RCYXNlU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJl
KiBiYXNlU3RydWN0dXJlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fY2hhaW4uc2l6ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIG1fY2hhaW4ubGFzdCgpLmRlY29kZSgpOworICAgICAgICAg
ICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2NoYWluLmxhc3QoKSk7CiAgICAgICAgIHJldHVy
biBiYXNlU3RydWN0dXJlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNyArMzgxLDcgQEAgYm9vbCBQb2x5bW9ycGhpY0FjY2Vz
czo6dmlzaXRXZWFrKFZNJiB2bQogICAgIH0KICAgICBpZiAobV9zdHViUm91dGluZSkgewogICAg
ICAgICBmb3IgKFN0cnVjdHVyZUlEIHdlYWtSZWZlcmVuY2UgOiBtX3N0dWJSb3V0aW5lLT53ZWFr
U3RydWN0dXJlcygpKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHdlYWtS
ZWZlcmVuY2UuZGVjb2RlKCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZt
LmdldFN0cnVjdHVyZSh3ZWFrUmVmZXJlbmNlKTsKICAgICAgICAgICAgIGlmICghdm0uaGVhcC5p
c01hcmtlZChzdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxh
Z3MuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkVDTUFNb2RlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRnJvbUxMSW4K
ICAgICBpZiAoIXN0cnVjdHVyZUlEKQogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoTm9JbmZv
cm1hdGlvbik7CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5k
ZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAKICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJ
RCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQ7CiAgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewpAQCAtOTIsNyArOTIsNyBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21M
TEluCiAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UobnVsbHB0ciwgc3RydWN0
dXJlLCBvZmZzZXQpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbmV3
U3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwogICAgIAogICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpOwogICAgIApAQCAtMTg4LDcgKzE4OCw3IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpj
b21wdXRlRm9yU3R1YkkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHVi
OiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsK
KyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogICAg
ICAgICAKICAgICAgICAgUHV0QnlTdGF0dXMgcmVzdWx0OwogICAgICAgICByZXN1bHQubV9zdGF0
ZSA9IFNpbXBsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TZXRQcml2
YXRlQnJhbmRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIFNldFByaXZhdGVCcmFuZFN0YXR1cyBT
ZXRQcml2YXRlQnJhbmRTdGEKICAgICAgICAgcmV0dXJuIFNldFByaXZhdGVCcmFuZFN0YXR1cyhO
b0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsKKyAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRl
eCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlz
dEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk2LDcg
KzU5NiwxMyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DZWxsKEpTQ2VsCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7CiAgICAgfQotICAgIHJldHVybiBzcGVj
dWxhdGlvbkZyb21TdHJ1Y3R1cmUoY2VsbC0+c3RydWN0dXJlKCkpOworICAgIC8vIEZJWE1FOiBy
ZGFyOi8vNjkwMzY4ODg6IHVuZG8gdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgICAgYXV0
byogc3RydWN0dXJlID0gY2VsbC0+dm0oKS50cnlHZXRTdHJ1Y3R1cmUoY2VsbC0+c3RydWN0dXJl
SUQoKSk7CisgICAgaWYgKFVOTElLRUxZKCFpc1NhbmVQb2ludGVyKHN0cnVjdHVyZSkpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3BlY05vbmU7Cisg
ICAgfQorICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKIH0K
IAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
OCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJU
KGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRC5zZXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxv
Y2ssIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CisgICAgY29kZUJsb2Nr
LT52bSgpLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zm
c2V0OwogfQogCkBAIC03MCw3ICs3MSw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQ
dXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7
CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZSk7CiAg
ICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmVJRC5zZXQoY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2ssIGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CisgICAgY29kZUJsb2NrLT52bSgpLndyaXRlQmFycmllcihj
b2RlQmxvY2spOwogICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCkBAIC03OSw3ICs4
MSw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NF
UlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxv
Y2tlciwgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlm
aWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELnNldChjb2RlQmxvY2stPnZt
KCksIGNvZGVCbG9jaywgaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKKyAg
ICBjb2RlQmxvY2stPnZtKCkud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CiAgICAgYnlJZFNlbGZP
ZmZzZXQgPSBvZmZzZXQ7CiB9CiAKQEAgLTg3LDcgKzkwLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6ZGVyZWYoKQogewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBjYXNlIENh
Y2hlVHlwZTo6U3R1YjoKLSAgICAgICAgZGVsZXRlIG1fc3R1YjsKKyAgICAgICAgZGVsZXRlIHUu
c3R1YjsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKICAgICBj
YXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CkBAIC0xMDUsNyArMTA4LDcgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6YWJvdXRUb0RpZSgpCiB7CiAgICAgc3dpdGNoIChtX2NhY2hlVHlwZSkg
ewogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAgICBtX3N0dWItPmFib3V0VG9EaWUo
KTsKKyAgICAgICAgdS5zdHViLT5hYm91dFRvRGllKCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgpA
QCAtMTM2LDcgKzEzOSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1Yklu
Zm8KICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CiAgICAgICAgIAogICAg
ICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBtX3N0dWItPmFkZENhc2UobG9ja2VyLCB2bSwgY29kZUJsb2NrLCAqdGhpcywgYWNj
ZXNzQ2FzZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHUuc3R1Yi0+
YWRkQ2FzZShsb2NrZXIsIHZtLCBjb2RlQmxvY2ssICp0aGlzLCBhY2Nlc3NDYXNlLnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlU3R1Yklu
Zm9JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYWQgc3R1Yiwg
cmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwpAQCAtMTczLDcgKzE3Niw3IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpTdHViKTsKLSAg
ICAgICAgICAgIG1fc3R1YiA9IGFjY2Vzcy5yZWxlYXNlKCk7CisgICAgICAgICAgICB1LnN0dWIg
PSBhY2Nlc3MucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBU1NFUlQo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKTsKQEAgLTE5OSw3ICsyMDIsNyBAQCBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIFBvbHltb3Jw
aGljQWNjZXNzLgogICAgICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgICAgICAK
LSAgICAgICAgcmVzdWx0ID0gbV9zdHViLT5yZWdlbmVyYXRlKGxvY2tlciwgdm0sIGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgKnRoaXMpOworICAgICAgICByZXN1bHQgPSB1LnN0
dWItPnJlZ2VuZXJhdGUobG9ja2VyLCB2bSwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGVjbWFN
b2RlLCAqdGhpcyk7CiAgICAgICAgIAogICAgICAgICBpZiAoU3RydWN0dXJlU3R1YkluZm9JbnRl
cm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlJlZ2VuZXJhdGlvbiByZXN1bHQ6
ICIsIHJlc3VsdCwgIlxuIik7CkBAIC0yMTMsMTEgKzIxNiwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIGFjY2VzcyBjb2RlLiBUaGF0J3Mg
YmVjYXVzZSB3aGVuIHdlIGZpcnN0IHRyYW5zaXRpb24gdG8gYmVjb21pbmcgYSBTdHViLCB3ZSBt
YXkKICAgICAgICAgLy8gYmUgYnVmZmVyZWQsIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgZ2VuZXJhdGVk
IGFueSBjb2RlLiBPbmNlIHRoZSBTdHViIGZpbmFsbHkgZ2VuZXJhdGVzCiAgICAgICAgIC8vIGNv
ZGUsIHdlJ3JlIG5vIGxvbmdlciBydW5uaW5nIHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUsIHNvIHdl
IGNhbiB0aGVuIGNsZWFyIG91dAotICAgICAgICAvLyBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmVJRC4gVGhlIHJlYXNvbiB3ZSBkb24ndCBjbGVhciBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmVJRCB3aGlsZQotICAgICAgICAvLyB3ZSdyZSBidWZmZXJlZCBpcyBiZWNhdXNlIHdlIHJlbHkg
b24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlE
CisgICAgICAgIC8vIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS4gVGhlIHJlYXNvbiB3ZSBk
b24ndCBjbGVhciBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgd2hpbGUKKyAgICAgICAgLy8g
d2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBH
QyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVk
LgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmVJRC5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29k
ZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUg
dW50aWwgd2UKICAgICAgICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTIzMiw3ICsyMzUs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xl
YXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6
OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0zMjAsNyArMzIzLDcgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRBZ2dyZWdhdGVJbQogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlk
U2VsZjoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOgotICAgICAg
ICBtX3N0dWItPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzQ1
LDcgKzM0OCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZt
KSkKICAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAg
aWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKLSAgICAgICAgaXNWYWxpZCAmPSBt
X3N0dWItPnZpc2l0V2Vhayh2bSk7CisgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNpdFdl
YWsodm0pOwogCiAgICAgaWYgKGlzVmFsaWQpCiAgICAgICAgIHJldHVybjsKQEAgLTM2MSw3ICsz
NjQsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0CiAgICAgICAg
IHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNoZVR5cGUg
PT0gQ2FjaGVUeXBlOjpTdHViKQotICAgICAgICBtX3N0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25z
KHZpc2l0b3IpOworICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3Ip
OwogfQogCiB0ZW1wbGF0ZSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0
aW9ucyhBYnN0cmFjdFNsb3RWaXNpdG9yJik7CkBAIC0zNzIsNyArMzc1LDcgQEAgU3R1YkluZm9T
dW1tYXJ5IFN0cnVjdHVyZVN0dWJJbmZvOjpzdW1tYQogICAgIFN0dWJJbmZvU3VtbWFyeSB0YWtl
c1Nsb3dQYXRoID0gU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoOwogICAgIFN0dWJJbmZv
U3VtbWFyeSBzaW1wbGUgPSBTdHViSW5mb1N1bW1hcnk6OlNpbXBsZTsKICAgICBpZiAobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKSB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBs
aXN0ID0gbV9zdHViOworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHUuc3R1YjsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKICAgICAg
ICAgICAgIGlmIChhY2Nlc3MuZG9lc0NhbGxzKHZtKSkgewpAQCAtNDA0LDcgKzQwNyw3IEBAIGJv
b2wgU3RydWN0dXJlU3R1YkluZm86OmNvbnRhaW5zUEModm9pZCoKIHsKICAgICBpZiAobV9jYWNo
ZVR5cGUgIT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIG1fc3R1Yi0+Y29udGFpbnNQQyhwYyk7CisgICAgcmV0dXJuIHUuc3R1Yi0+Y29udGFpbnNQ
QyhwYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2V0Q2Fj
aGVUeXBlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmLCBDYWNoZVR5cGUgbmV3Q2FjaGVU
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsMTQg
KzIxMSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvbnNpZGVyQ2FjaGluZyh2bSwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUsIGltcGwpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSogaW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZShWTSYpCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlSUQuZ2V0KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlEKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCk7IH0K
LQogcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY29uc2lkZXJDYWNoaW5nKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGltcGwpCiAgICAgewpAQCAtMzU5LDEwICszNTEsMTkgQEAgcHJpdmF0ZToKIAog
cHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKLSAgICBQb2x5bW9ycGhpY0FjY2Vz
cyogbV9zdHViIHsgbnVsbHB0ciB9OwogICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zmc2V0
OwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZUlEOwotCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKTsgfQorICAgIHVuaW9uIHsKKyAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3MqIHN0dWI7CisgICAgfSB1OworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0u
Z2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0
cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0
aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGlu
IHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTQyMSwxMSArNDIyLDEwIEBAIHB1YmxpYzoKICAg
ICB1aW50OF90IGNvdW50ZG93biB7IDEgfTsKICAgICB1aW50OF90IHJlcGF0Y2hDb3VudCB7IDAg
fTsKICAgICB1aW50OF90IG51bWJlck9mQ29vbERvd25zIHsgMCB9OwotICAgIHVpbnQ4X3QgYnVm
ZmVyaW5nQ291bnRkb3duOwotcHJpdmF0ZToKLSAgICBMb2NrIG1fYnVmZmVyZWRTdHJ1Y3R1cmVz
TG9jazsKLXB1YmxpYzoKKwogICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleDsKKworICAg
IHVpbnQ4X3QgYnVmZmVyaW5nQ291bnRkb3duOwogICAgIGJvb2wgcmVzZXRCeUdDIDogMTsKICAg
ICBib29sIHRvb2tTbG93UGF0aCA6IDE7CiAgICAgYm9vbCBldmVyQ29uc2lkZXJlZCA6IDE7CkBA
IC00MzUsNiArNDM1LDggQEAgcHVibGljOgogICAgIGJvb2wgcHJvcGVydHlJc1N0cmluZyA6IDE7
CiAgICAgYm9vbCBwcm9wZXJ0eUlzSW50MzIgOiAxOwogICAgIGJvb2wgcHJvcGVydHlJc1N5bWJv
bCA6IDE7Citwcml2YXRlOgorICAgIExvY2sgbV9idWZmZXJlZFN0cnVjdHVyZXNMb2NrOwogfTsK
IAogaW5saW5lIENvZGVPcmlnaW4gZ2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwMSw3ICsyMjAxLDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
ICAgIC8vIEFuZCB3ZSBjaGVjayB0aGUgaW5kZXhpbmcgbW9kZSBvZiB0aGUgc3RydWN0dXJlLiBJ
ZiB0aGUgaW5kZXhpbmcgbW9kZSBpcyBDb1csIHRoZSBidXR0ZXJmbHkgaXMKICAgICAgICAgICAg
ICAgICAvLyBkZWZpbml0ZWx5IEpTSW1tdXRhYmxlQnV0dGVyZmx5LgogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlERWFybHkgPSBhcnJheS0+c3RydWN0dXJlSUQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlSURFYXJseS5pc051a2VkKCkpCisgICAgICAgICAg
ICAgICAgaWYgKGlzTnVrZWQoc3RydWN0dXJlSURFYXJseSkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
cnJheUNsYXNzKCkgPT0gQXJyYXk6Ok9yaWdpbmFsQ29weU9uV3JpdGVBcnJheSkgewpAQCAtMjIx
NSw3ICsyMjE1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlSURFYXJseSAhPSBzdHJ1Y3R1cmVJRExh
dGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRExhdGUuZGVjb2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV92bS5nZXRTdHJ1
Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CkBAIC0y
MjczLDcgKzIyNzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlSURFYXJseSAhPSBzdHJ1Y3R1
cmVJRExhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlE
TGF0ZS5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV92bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSURMYXRlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2Rl
KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTA0LDcgKzU1MDQsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBj
YWNoZWRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGNhY2hlZFN0cnVjdHVyZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBp
ZiAoY2FjaGVkU3RydWN0dXJlSUQpCi0gICAgICAgICAgICAgICAgY2FjaGVkU3RydWN0dXJlID0g
Y2FjaGVkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgY2FjaGVkU3RydWN0
dXJlID0gbV92bS0+aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGNhY2hlZFN0cnVjdHVyZUlE
KTsKICAgICAgICAgICAgIGlmIChtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyAhPSBUb1RoaXNPSwog
ICAgICAgICAgICAgICAgIHx8ICFjYWNoZWRTdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICB8fCBj
YWNoZWRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXMgIT0gSlNPYmpl
Y3Q6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5vZGUtPmhh
c1RyYW5zaXRpb24oKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5D
b250ZXh0KG5vZGUtPnRyYW5zaXRpb24oKSwgY29udGV4dCkpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPmlk
KCkuYml0cygpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIElEOiIsIG5vZGUtPnRyYW5zaXRpb24o
KS0+bmV4dC0+aWQoKSk7CiAjZWxzZQogICAgICAgICBvdXQucHJpbnQoIiwgSUQ6IiwgUmF3UG9p
bnRlcihub2RlLT50cmFuc2l0aW9uKCktPm5leHQuZ2V0KCkpKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMjg2OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjgsNyArMjY4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB3ZWFrU3RydWN0dXJlLmdldCgpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwgbGVmdCwgVHJ1c3RlZEltbTMy
KHN0cnVjdHVyZS0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gz
Mihjb25kLCBsZWZ0LCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAjZWxzZQogICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsNyBAQCBDb21waWxh
dGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZSgpCiAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmll
cjxKU0NlbGw+JiByZWZlcmVuY2UgOiBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+bV93ZWFrUmVmZXJlbmNlcykKICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5h
ZGQocmVmZXJlbmNlLmdldCgpKTsKICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlSUQgc3RydWN0
dXJlSUQgOiBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bV93ZWFrU3RydWN0
dXJlUmVmZXJlbmNlcykKLSAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoc3Ry
dWN0dXJlSUQuZGVjb2RlKCkpOworICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFk
ZChtX3ZtLT5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpKTsKICAgICAgICAgICAgIGZvciAoV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudCA6IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKSkK
ICAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQoY29uc3RhbnQuZ2V0KCkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw2ICsyNDQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgfSBlbHNlIHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwog
ICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKQEAgLTI1OCw3ICsyNTks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQ
UlJlZyBsb2NhbEdsb2JhbE9iamVjdEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAg
ICAgICBHUFJSZWcgcmVtb3RlR2xvYmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0Lmdw
cigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0
LmdyYXBoKCksIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsb2NhbEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQu
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7
CiAgICAgICAgIG1faml0LmNvbXBhcmVQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBsb2NhbEdsb2Jh
bE9iamVjdEdQUiwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtMjk4LDYgKzI5OSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICB9IGVsc2UgewogICAgICAgICBHUFJU
ZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZW1vdGVHbG9iYWxPYmplY3QodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7CiAgICAgICAgIGlmICgh
aXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQpAQCAtMzEwLDcgKzMxMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgR1BSUmVnIGxvY2FsR2xv
YmFsT2JqZWN0R1BSID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGxvY2FsR2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgYXJnR1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUds
b2JhbE9iamVjdEdQUiwgdGFrZW4pOwogCkBAIC0xOTAzLDYgKzE5MDUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuT2JqCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlOwogICAgIEdQUlJlZyBzdHJ1
Y3R1cmVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKIAogICAgIGJvb2wgbWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCA9CiAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CkBAIC0xOTExLDggKzE5MTUsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iagogICAgICAgICAvLyBUaGUgbWFz
cXVlcmFkZXMgYXMgdW5kZWZpbmVkIGNhc2Ugd2lsbCB1c2UgdGhlIHN0cnVjdHVyZSByZWdpc3Rl
ciwgc28gYWxsb2NhdGUgaXQgaGVyZS4KICAgICAgICAgLy8gRG8gdGhpcyBhdCB0aGUgdG9wIG9m
IHRoZSBmdW5jdGlvbiB0byBhdm9pZCBicmFuY2hpbmcgYXJvdW5kIGEgcmVnaXN0ZXIgYWxsb2Nh
dGlvbi4KICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlYWxTdHJ1Y3R1cmUodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZWFsU2NyYXRjaCh0aGlzKTsKICAgICAgICAgc3RydWN0dXJlLmFkb3B0
KHJlYWxTdHJ1Y3R1cmUpOworICAgICAgICBzY3JhdGNoLmFkb3B0KHJlYWxTY3JhdGNoKTsKICAg
ICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOworICAgICAgICBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKICAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CkBAIC0x
OTI5LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuT2Jq
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKLSAgICAgICAgbV9q
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVyZUdQUik7CisgICAg
ICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKQEAgLTIwODQsNyArMjA5MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZUdQUiwg
c3RydWN0dXJlR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFs
dWVHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CkBAIC0yMTc4LDcgKzIxODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZEJy
YW5jaChFCiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
IW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAgICAg
IGlmIChzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpIHsKICAgICAgICAgICAgIGJy
YW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2
YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCksIHRha2VuKTsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCB0ZW1wMUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZUdQUiwgdGVtcDFHUFIsIHRlbXAyR1BSKTsKICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBn
bG9iYWxPYmplY3QpLCB0ZW1wMkdQUik7CiAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wMUdQUiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHRlbXAyR1BSLCB0YWtlbik7CkBAIC00NDQwLDcg
KzQ0NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9k
ZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpOwogICAgICAgICBBU1NFUlQob2xk
U3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
dHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkp
OwotICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3
U3RydWN0dXJlLT5pZCgpLmJpdHMoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U3RydWN0dXJlLT5pZCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjU5
LDYgKzQ2NjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBs
b2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2Jh
bE9iamVjdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoSWZDZWxsKHZhbHVl
LmpzVmFsdWVSZWdzKCkpOwogCkBAIC00NjgyLDcgKzQ2OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgbG9jYWxHbG9iYWxP
YmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBy
ZW1vdGVHbG9iYWxPYmplY3RHUFIgPSByZW1vdGVHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbG9jYWxHbG9i
YWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
dmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCB2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpLCBzY3JhdGNoLmdwcigpKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0Lmdw
cigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVtb3RlR2xvYmFsT2JqZWN0
R1BSKTsgCiAgICAgICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
bG9jYWxHbG9iYWxPYmplY3RHUFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTMzLDcg
Kzg1MzMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsT2JqCiB7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIG9iamVjdC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKKyAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3QuZ3By
KCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKIH0KQEAgLTExMDQxLDcgKzExMDQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNoZWNrSlNDYXN0KAogICAgICAgICBHUFJSZWcgb3RoZXJHUFIgPSBvdGhlci5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHNwZWNpZmllZEdQUiA9IHNwZWNpZmllZC5ncHIoKTsKIAotICAgICAgICBt
X2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUik7CisgICAgICAg
IG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGJhc2VHUFIsIG90aGVyR1BSLCBzcGVjaWZp
ZWRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvdGhl
ckdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIG90aGVyR1BSKTsKICAgICAgICAg
bV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobm9kZS0+Y2xhc3NJbmZvKCkp
LCBzcGVjaWZpZWRHUFIpOwogCkBAIC0xMTI1Miw3ICsxMTI1Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVGdW5jdGlvblRvU3QKIAogICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKG5vZGUt
PmNoaWxkMSgpLCBmdW5jdGlvbi5ncHIoKSk7CiAKLSAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBmdW5jdGlvbi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5lbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBmdW5jdGlvbi5ncHIoKSwgcmVzdWx0LmdwcigpLCBleGVjdXRhYmxl
LmdwcigpKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5n
cHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwgIldlIGRvbid0
IGhhbmRsZSBzdWJjbGFzc2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxvdyIpOwogICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cihKU0JvdW5kRnVuY3Rpb246OmluZm8oKSkpKTsKQEAg
LTE0MjY3LDExICsxNDI2OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJv
cGVydHlFCiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsT3JPdGhlclVzZSkgewogICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKIAogICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9k
ZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1Zh
bHVlUmVncygpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZUNhc2VzOwpAQCAtMTQzMjMsNyArMTQzMjYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFCiAgICAgICAgICAgICBpZiAob25seVN0cnVjdHVy
ZSkKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIob25seVN0cnVjdHVy
ZSksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2pp
dC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gx
R1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNl
UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoMUdQUiwgU3RydWN0
dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olpl
cm8sIHNjcmF0Y2gxR1BSKSk7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaElmU3RydWN0dXJlKHNjcmF0Y2gxR1BSKSk7CkBAIC0xNDMzNSw3ICsxNDMzOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm9wZXJ0eUUKICAgICAgICAgZG9uZUNhc2Vz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gxR1BSKTsKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBzY3Jh
dGNoMUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLnBheWxvYWRHUFIo
KSk7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKQEAgLTE0NjAyLDcgKzE0NjA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEtleXNPcgogICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KG5vZGUt
PmNoaWxkMSgpLCBvYmplY3RHUFIpOwogCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IG9iamVjdEdQUiwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIG9iamVjdEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCiAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBzY3JhdGNoR1BSKSk7CkBAIC0xNDgxOSw5ICsxNDgyMiw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXMKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CiAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKLSAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlSUQoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BSKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVyZUdQUikp
OwotICAgIG1faml0LmVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoc3RydWN0dXJlR1BSLCBz
dHJ1Y3R1cmVHUFIpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFy
ZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
WmVybywgc3RydWN0dXJlR1BSKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUt
PmlzSW50ZXJuYWxQcm9taXNlKCkgPyBKU0ludGVybmFsUHJvbWlzZTo6aW5mbygpIDogSlNQcm9t
aXNlOjppbmZvKCkpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBnbG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CkBAIC0xNDg2OCw5ICsxNDg3MCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVJbnRlcm4KICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CiAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsK
LSAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKCkg
KyBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlSUQo
KSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlR1BSKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVy
ZUdQUikpOwotICAgIG1faml0LmVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoc3RydWN0dXJl
R1BSLCBzdHJ1Y3R1cmVHUFIpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVy
ZUdQUik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVs
cGVyczo6WmVybywgc3RydWN0dXJlR1BSKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KEpTQ2xhc3M6OmluZm8oKSksIHNjcmF0Y2gxR1BSKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoMUdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQo
KSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0Lmdy
YXBoKCksIGdsb2JhbE9iamVjdCksIHNjcmF0Y2gxR1BSKTsKQEAgLTE1MzMxLDE0ICsxNTMzMiwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlV2Vha01hcFNldChOCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlT2YoTm9kZSogbm9kZSkKIHsKICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDIodGhpcyk7CiAKICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXAyR1BSID0gdGVt
cDIuZ3ByKCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3ModGVtcEdQUik7CiAjZWxzZQotICAgIEdQUlRlbXBvcmFyeSB0ZW1wMih0aGlzKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXAyLmdwcigpLCB0ZW1wR1BSKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHRlbXAyR1BSLCB0ZW1wR1BSKTsKICNlbmRpZgogCiAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKQEAgLTE1MzYzLDcgKzE1MzY1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3RvdHlwZQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmpl
Y3RHUFIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBv
YmplY3RHUFIsIHRlbXBHUFIsIHRlbXAyR1BSKTsKIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICgodmFs
dWUubV90eXBlICYmICEodmFsdWUubV90eXBlICYgflNwZWNPYmplY3QpKSAmJiB2YWx1ZS5tX3N0
cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CkBAIC0xNTQwMiw3ICsxNTQwNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KG5v
ZGUtPmNoaWxkMSgpLCBvYmplY3RHUFIpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIG9iamVj
dEdQUiwgcmVzdWx0UmVncywgc2xvd0Nhc2VzKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRQcm90
b3R5cGUodm0oKSwgb2JqZWN0R1BSLCByZXN1bHRSZWdzLCB0ZW1wMkdQUiwgc2xvd0Nhc2VzKTsK
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsCiAgICAgICAgICAgICByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb2JqZWN0R1BSKSk7CiAKQEAgLTE1NDE5LDcg
KzE1NDIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3RvdHlwZQogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwogICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlR1BSKSk7CiAKLSAg
ICAgICAgbV9qaXQuZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIsIHJlc3VsdFJlZ3Ms
IHNsb3dDYXNlcyk7CisgICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
R1BSLCByZXN1bHRSZWdzLCB0ZW1wMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0UHJv
dG90eXBlT2YsCiAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgdmFsdWVSZWdzKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyODY5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9wcm90b3R5cGUsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZQcm90b3R5cGUoKSkgXAogICAgIG1hY3Jv
KEZ1bmN0aW9uUmFyZURhdGFfYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0LCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKSBcCiAg
ICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9leGVjdXRhYmxlLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSkgXAotICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfaW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZUlELCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKCkpIFwKKyAgICBt
YWNybyhGdW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9z
dHJ1Y3R1cmUsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlKCkgKyBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkpIFwKKyAgICBtYWNybyhGdW5jdGlvblJhcmVEYXRhX2JvdW5kRnVuY3Rp
b25TdHJ1Y3R1cmUsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQm91bmRGdW5jdGlvblN0cnVj
dHVyZSgpKSBcCisgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9hbGxvY2F0aW9uUHJvZmlsZUNs
ZWFyaW5nV2F0Y2hwb2ludCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJv
ZmlsZUNsZWFyaW5nV2F0Y2hwb2ludCgpKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0dGVyX2dldHRl
ciwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSBcCiAgICAgbWFjcm8oR2V0dGVyU2V0
dGVyX3NldHRlciwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSBcCiAgICAgbWFjcm8o
SlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODc3LDExICs3ODc3LDEwIEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNS
YXJlRGF0YSwgaGFzU3RydWN0dXJlKTsKICAgICAgICAgTFZhbHVlIHJhcmVEYXRhID0gbV9vdXQu
c3ViKHJhcmVEYXRhVGFncywgbV9vdXQuY29uc3RJbnRQdHIoSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpKTsKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKHJhcmVEYXRh
LCBtX2hlYXBzLkZ1bmN0aW9uUmFyZURhdGFfaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9m
aWxlX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKHN0
cnVjdHVyZUlEKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IG1fb3V0LmxvYWRQdHIocmFyZURhdGEsIG1faGVhcHMu
RnVuY3Rpb25SYXJlRGF0YV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGVfc3RydWN0
dXJlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzY0KHN0cnVjdHVyZSksIHJh
cmVseShzbG93Q2FzZSksIHVzdWFsbHkoaGFzU3RydWN0dXJlKSk7CiAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaGFzU3RydWN0dXJlLCBjaGVja0dsb2JhbE9iamVjdENhc2UpOwotICAgICAgICBM
VmFsdWUgc3RydWN0dXJlID0gZGVjb2RlTm9uTnVsbFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtX291dC5sb2FkUHRyKHN0cnVjdHVyZSwg
bV9oZWFwcy5TdHJ1Y3R1cmVfY2xhc3NJbmZvKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5p
c0ludGVybmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlz
ZTo6aW5mbygpKSksIHVzdWFsbHkoY2hlY2tHbG9iYWxPYmplY3RDYXNlKSwgcmFyZWx5KHNsb3dD
YXNlKSk7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tHbG9iYWxPYmplY3RDYXNlLCBm
YXN0QWxsb2NhdGlvbkNhc2UpOwpAQCAtNzkzMywxMSArNzkzMiwxMCBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGFzUmFyZURhdGEsIGhhc1N0
cnVjdHVyZSk7CiAgICAgICAgIExWYWx1ZSByYXJlRGF0YSA9IG1fb3V0LnN1YihyYXJlRGF0YVRh
Z3MsIG1fb3V0LmNvbnN0SW50UHRyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Ci0gICAgICAg
IExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihyYXJlRGF0YSwgbV9oZWFwcy5GdW5j
dGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1cmVJ
RCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihzdHJ1Y3R1cmVJRCksIHJh
cmVseShzbG93Q2FzZSksIHVzdWFsbHkoaGFzU3RydWN0dXJlKSk7CisgICAgICAgIExWYWx1ZSBz
dHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKHJhcmVEYXRhLCBtX2hlYXBzLkZ1bmN0aW9uUmFyZURh
dGFfaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1N0
cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVy
ZSA9IGRlY29kZU5vbk51bGxTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0
dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKEpTQ2xhc3M6OmluZm8oKSkpLCB1c3Vh
bGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwogCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9jYXRpb25DYXNl
KTsKQEAgLTEzNzEyLDcgKzEzNzEwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CiAgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlKQotICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5j
b25zdEludDMyKHN0cnVjdHVyZS0+aWQoKS5iaXRzKCkpOworICAgICAgICAgICAgc3RydWN0dXJl
SUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKTsKIApAQCAtMTY3OTEsNyArMTY3ODksNyBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgCiAgICAgdm9pZCBzdG9yZVN0cnVjdHVyZShMVmFsdWUgb2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQu
Y29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihz
dHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAg
ICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0
dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksCiAgICAgICAgICAgICBvYmplY3QsIG1f
aGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKQEAgLTE5NTcyLDcgKzE5NTcwLDcgQEAgSUdOT1JF
X0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAg
cmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAogICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
dm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkuYml0cygpKSk7CisgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgpKSk7CiAgICAgfQogICAgIAogICAg
IExWYWx1ZSBpc1N0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNG
dWxsVG9wKQpAQCAtMTk1ODEsNyArMTk1NzksNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwo
CiAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+
aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdT
dHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9CiAKICAgICBMVmFsdWUgaXNSb3BlU3RyaW5nKExWYWx1
ZSBzdHJpbmcsIEVkZ2UgZWRnZSA9IEVkZ2UoKSkKQEAgLTE5NjI4LDcgKzE5NjI2LDcgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAg
ICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAogICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIodm0oKS5zeW1ib2xTdHJ1Y3R1cmUtPmlkKCkuYml0cygpKSk7CisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKHZtKCkuc3ltYm9sU3RydWN0dXJlLT5pZCgpKSk7CiAgICAgfQogICAgIAog
ICAgIExWYWx1ZSBpc1N5bWJvbChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQpAQCAtMTk2MzcsNyArMTk2MzUsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuZXF1
YWwoCiAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN5bWJvbFN0cnVjdHVy
ZS0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1i
b2xTdHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9CiAKICAgICBMVmFsdWUgaXNOb3RIZWFwQmlnSW50
VW5rbm93bldoZXRoZXJDZWxsKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQpAQCAtMTk2NjYsNyArMTk2NjQsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQubm90
RXF1YWwoCiAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLmJpZ0ludFN0cnVj
dHVyZS0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5i
aWdJbnRTdHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9CiAKICAgICBMVmFsdWUgaXNIZWFwQmlnSW50
KExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCkBAIC0xOTY3
NSw3ICsxOTY3Myw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKHZtKCkuYmlnSW50U3RydWN0dXJlLT5pZCgpLmJpdHMoKSkpOwor
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLmJpZ0ludFN0cnVjdHVyZS0+aWQoKSkp
OwogICAgIH0KIAogICAgIExWYWx1ZSBpc0FycmF5VHlwZUZvckFycmF5aWZ5KExWYWx1ZSBjZWxs
LCBBcnJheU1vZGUgYXJyYXlNb2RlKQpAQCAtMjA0MDIsNyArMjA0MDAsNyBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmJpdE9yKAogICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIob2JqZWN0
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoU3RydWN0dXJlSUQ6Om51a2VkU3RydWN0dXJlSURCaXQpKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudWtlZFN0cnVjdHVyZUlEQml0KCkpKSwKICAg
ICAgICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICAgICAg
bV9vdXQuc3RvcmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KTsKQEAgLTIwNDMwLDcgKzIwNDI4LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAog
ICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuYml0T3IoCiAgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
LAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RydWN0dXJlSUQ6Om51a2VkU3Ry
dWN0dXJlSURCaXQpKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKG51a2VkU3Ry
dWN0dXJlSURCaXQoKSkpLAogICAgICAgICAgICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7CiAgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwog
ICAgICAgICBtX291dC5zdG9yZVB0cihidXR0ZXJmbHksIG9iamVjdCwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOwpAQCAtMjA5NzUsMTYgKzIwOTczLDE1IEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgbV9ncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXpp
bHkodGFyZ2V0KTsKICAgICB9CiAKLSAgICBMVmFsdWUgZGVjb2RlTm9uTnVsbFN0cnVjdHVyZShM
VmFsdWUgc3RydWN0dXJlSUQpCi0gICAgewotICAgICAgICBMVmFsdWUgbWFza2VkU3RydWN0dXJl
SUQgPSBtX291dC5iaXRBbmQoc3RydWN0dXJlSUQsIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJl
SURNYXNrKSk7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoZ19q
c2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXApLCBtX291dC56ZXJvRXh0UHRyKG1hc2tlZFN0
cnVjdHVyZUlEKSk7Ci0gICAgfQotCiAgICAgTFZhbHVlIGxvYWRTdHJ1Y3R1cmUoTFZhbHVlIHZh
bHVlKQogICAgIHsKICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKHZh
bHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIHJldHVybiBkZWNvZGVO
b25OdWxsU3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKKyAgICAgICAgTFZhbHVlIHRhYmxlQmFzZSA9
IG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5iYXNlKCkpKTsKKyAgICAgICAgTFZhbHVlIHRhYmxlSW5kZXggPSBtX291dC5hU2hyKHN0cnVj
dHVyZUlELCBtX291dC5jb25zdEludDMyKFN0cnVjdHVyZUlEVGFibGU6OnNfbnVtYmVyT2ZFbnRy
b3B5Qml0cykpOworICAgICAgICBMVmFsdWUgZW50cm9weUJpdHMgPSBtX291dC5zaGwobV9vdXQu
emVyb0V4dFB0cihzdHJ1Y3R1cmVJRCksIG1fb3V0LmNvbnN0SW50MzIoU3RydWN0dXJlSURUYWJs
ZTo6c19lbnRyb3B5Qml0c1NoaWZ0Rm9yU3RydWN0dXJlUG9pbnRlcikpOworICAgICAgICBUeXBl
ZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnN0cnVjdHVyZVRhYmxl
LCB0YWJsZUJhc2UsIG1fb3V0Lnplcm9FeHRQdHIodGFibGVJbmRleCkpOworICAgICAgICBMVmFs
dWUgZW5jb2RlZFN0cnVjdHVyZUJpdHMgPSBtX291dC5sb2FkUHRyKGFkZHJlc3MpOworICAgICAg
ICByZXR1cm4gbV9vdXQuYml0WG9yKGVuY29kZWRTdHJ1Y3R1cmVCaXRzLCBlbnRyb3B5Qml0cyk7
CiAgICAgfQogCiAgICAgTFZhbHVlIHdlYWtQb2ludGVyKEpTQ2VsbCogcG9pbnRlcikKQEAgLTIx
MDAwLDcgKzIwOTk3LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogCiAgICAgTFZhbHVl
IHdlYWtTdHJ1Y3R1cmVJRChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKS5iaXRzKCkpOwor
ICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwogICAgIH0K
ICAgICAKICAgICBMVmFsdWUgd2Vha1N0cnVjdHVyZShSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVj
dHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNs
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBA
QCBjbGFzcyBWTTsKIGNsYXNzIFZlcmlmaWVyU2xvdFZpc2l0b3I7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWFrOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiBj
bGFzcyBXcml0ZUJhcnJpZXJCYXNlOwotY2xhc3MgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ7CiAK
IGNsYXNzIEFic3RyYWN0U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFi
c3RyYWN0U2xvdFZpc2l0b3IpOwpAQCAtMTQ0LDggKzE0Myw2IEBAIHB1YmxpYzoKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmQoY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFQs
IFRyYWl0cz4mKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJ
RCYpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlE
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9y
IGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFs
dWVzKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5rbm93
bj4+Kiwgc2l6ZV90IGNvdW50KTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kVmFsdWVz
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmF3VmFsdWVUcmFpdHM8VW5r
bm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDE2ICsxNTgsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6CiAgICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
c2xvdC5nZXQoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9y
OjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmIHNsb3QpCi17Ci0gICAgYXBw
ZW5kVW5iYXJyaWVyZWQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzbG90LmdldCgpKSk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4o
Y29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmIHNsb3QpCi17Ci0gICAgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzbG90LmdldCgpKSk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgdm9pZCBBYnN0cmFjdFNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW5VbmJh
cnJpZXJlZChKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyAr
NjcsNiBAQAogI2luY2x1ZGUgIlNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRl
ICJTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlN0b3BJ
Zk5lY2Vzc2FyeVRpbWVyLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2Ft
cGxlci5oIgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKQEAgLTM4OSw4ICszODgsOCBAQCBI
ZWFwOjpIZWFwKFZNJiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBzdHJpbmdPYmplY3RT
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgY2VsbEhlYXBDZWxsVHlwZSwgU3RyaW5nT2Jq
ZWN0KQogICAgICwgc3RydWN0dXJlQ2hhaW5TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywg
Y2VsbEhlYXBDZWxsVHlwZSwgU3RydWN0dXJlQ2hhaW4pCiAgICAgLCBzdHJ1Y3R1cmVSYXJlRGF0
YVNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxU
eXBlLCBTdHJ1Y3R1cmVSYXJlRGF0YSkgLy8gSGFzaDoweGFjYTRlNjJkCi0gICAgLCBzdHJ1Y3R1
cmVTcGFjZSgiSXNvbGF0ZWRTdHJ1Y3R1cmVTcGFjZSIsICp0aGlzLCBkZXN0cnVjdGlibGVDZWxs
SGVhcENlbGxUeXBlLCBzaXplb2YoU3RydWN0dXJlKSwgU3RydWN0dXJlOjpudW1iZXJPZkxvd2Vy
VGllckNlbGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJT
dHJ1Y3R1cmUiKSkKLSAgICAsIGJyYW5kZWRTdHJ1Y3R1cmVTcGFjZSgiSXNvbGF0ZWRCcmFuZGVk
U3RydWN0dXJlU3BhY2UiLCAqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgc2l6
ZW9mKEJyYW5kZWRTdHJ1Y3R1cmUpLCBCcmFuZGVkU3RydWN0dXJlOjpudW1iZXJPZkxvd2VyVGll
ckNlbGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJTdHJ1
Y3R1cmUiKSkKKyAgICAsIHN0cnVjdHVyZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTdHJ1Y3R1cmUpCisgICAgLCBicmFuZGVkU3Ry
dWN0dXJlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFw
Q2VsbFR5cGUsIEJyYW5kZWRTdHJ1Y3R1cmUpCiAgICAgLCBzeW1ib2xUYWJsZVNwYWNlIElTT19T
VUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTeW1ib2xU
YWJsZSkgLy8gSGFzaDoweGM1MjE1YWZkCiAgICAgLCBleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
c1dpdGhDb25zdHJhaW50cyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlU3BhY2UpCiAgICAgLCBl
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlc1dpdGhGaW5hbGl6ZXJzKGV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2VTcGFjZSkKQEAgLTE2MDYsNiArMTYwNSw4IEBAIE5FVkVSX0lOTElORSBib29sIEhl
YXA6OnJ1bkVuZFBoYXNlKEdDQ28KICAgICAgICAgaWYgKHZtKCkudHlwZVByb2ZpbGVyKCkpCiAg
ICAgICAgICAgICB2bSgpLnR5cGVQcm9maWxlcigpLT5pbnZhbGlkYXRlVHlwZVNldENhY2hlKHZt
KCkpOwogCisgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworCiAg
ICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwogICAgICAgICBwcnVuZVN0YWxlRW50cmllc0Zyb21X
ZWFrR0NIYXNoVGFibGVzKCk7CiAgICAgICAgIHN3ZWVwQXJyYXlCdWZmZXJzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJTeW5jaHJvbm91c25lc3MuaCIKICNpbmNsdWRl
ICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBA
IC0yNzUsNiArMjc1LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9kZWZlcnJhbERlcHRoOyB9CiAKKyAgICBTdHJ1Y3R1cmVJRFRhYmxl
JiBzdHJ1Y3R1cmVJRFRhYmxlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRFRhYmxlOyB9CisKICAg
ICBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja1NldCgpIHsgcmV0dXJuICptX2NvZGVCbG9ja3M7IH0K
IAogI2lmIFVTRShGT1VOREFUSU9OKQpAQCAtNTk0LDYgKzU5Niw3IEBAIHByaXZhdGU6CiAgICAg
TWFya2FibGU8Q29sbGVjdGlvblNjb3BlLCBFbnVtTWFya2FibGVUcmFpdHM8Q29sbGVjdGlvblNj
b3BlPj4gbV9sYXN0Q29sbGVjdGlvblNjb3BlOwogICAgIExvY2sgbV9yYWNlTWFya1N0YWNrTG9j
azsKIAorICAgIFN0cnVjdHVyZUlEVGFibGUgbV9zdHJ1Y3R1cmVJRFRhYmxlOwogICAgIE1hcmtl
ZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlC
dWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5U2l6ZSB7IDAg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTMgKzMwLDcyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihDU3RyaW5nIG5hbWUpCi0g
ICAgOiBCYXNlKG5hbWUpCisjaWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICA6
IG1fZGVidWdIZWFwKG5hbWUuZGF0YSgpKQorI2VuZGlmCiB7CisgICAgVU5VU0VEX1BBUkFNKG5h
bWUpOwogfQogCiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpCiB7Ci0gICAgcmVsZWFzZU1lbW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKTsK
KyNpZiAhRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdm9pZCogYmxvY2sgPSBt
X2Jsb2Nrc1tpXTsKKyAgICAgICAgaWYgKCFtX2NvbW1pdHRlZC5xdWlja0dldChpKSkKKyAgICAg
ICAgICAgIFdURjo6ZmFzdENvbW1pdEFsaWduZWRNZW1vcnkoYmxvY2ssIE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUpOworICAgICAgICBmYXN0QWxpZ25lZEZyZWUoYmxvY2spOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFsaWdu
ZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gU2luY2Ug
dGhpcyBpcyBkZXNpZ25lZCBzcGVjaWFsbHkgZm9yIElzb1N1YnNwYWNlLCB3ZSBrbm93IHRoYXQg
d2Ugd2lsbCBvbmx5IGJlIGFza2VkIHRvCisgICAgLy8gYWxsb2NhdGUgTWFya2VkQmxvY2tzLgor
ICAgIFJFTEVBU0VfQVNTRVJUKGFsaWdubWVudCA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworCisj
aWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICByZXR1cm4gbV9kZWJ1Z0hlYXAu
bWVtYWxpZ24oTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwg
dHJ1ZSk7CisjZWxzZQorICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAKKyAgICBt
X2ZpcnN0VW5jb21taXR0ZWQgPSBtX2NvbW1pdHRlZC5maW5kQml0KG1fZmlyc3RVbmNvbW1pdHRl
ZCwgZmFsc2UpOworICAgIGlmIChtX2ZpcnN0VW5jb21taXR0ZWQgPCBtX2Jsb2Nrcy5zaXplKCkp
IHsKKyAgICAgICAgbV9jb21taXR0ZWQucXVpY2tTZXQobV9maXJzdFVuY29tbWl0dGVkKTsKKyAg
ICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsKKyAgICAg
ICAgV1RGOjpmYXN0Q29tbWl0QWxpZ25lZE1lbW9yeShyZXN1bHQsIE1hcmtlZEJsb2NrOjpibG9j
a1NpemUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlGYXN0QWxpZ25lZE1hbGxvYyhNYXJrZWRCbG9jazo6YmxvY2tTaXplLCBNYXJr
ZWRCbG9jazo6YmxvY2tTaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7CisgICAgbV9ibG9j
a3MuYXBwZW5kKHJlc3VsdCk7CisgICAgbV9ibG9ja0luZGljZXMuYWRkKHJlc3VsdCwgaW5kZXgp
OworICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1fY29tbWl0dGVkLnNpemUoKSkKKyAg
ICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNhcGFjaXR5KCkpOworICAgIG1fY29t
bWl0dGVkLnF1aWNrU2V0KGluZGV4KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisK
K3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRNZW1vcnkodm9pZCog
YmFzZVB0cikKK3sKKyNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQorICAgIG1fZGVi
dWdIZWFwLmZyZWUoYmFzZVB0cik7CisjZWxzZQorICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sg
fTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNlcy5maW5kKGJhc2VQdHIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGljZXMuZW5kKCkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgbV9jb21taXR0ZWQucXVpY2tDbGVhcihp
bmRleCk7CisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjptaW4oaW5kZXgsIG1fZmlyc3RV
bmNvbW1pdHRlZCk7CisgICAgV1RGOjpmYXN0RGVjb21taXRBbGlnbmVkTWVtb3J5KGJhc2VQdHIs
IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworI2VuZGlmCiB9CiAKIHZvaWQgSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNjgsMjUgKzEy
Nyw1IEBAIHZvaWQqIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeVJlYWwKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOjp0cnlNYWxsb2NCbG9jaygpCi17Ci0gICAgcmV0dXJuIHRyeUZhc3RBbGlnbmVkTWFs
bG9jKE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotfQot
Ci12b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVCbG9jayh2b2lkKiBibG9jaykK
LXsKLSAgICBmYXN0QWxpZ25lZEZyZWUoYmxvY2spOwotfQotCi12b2lkIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I6OmNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKQotewotICAgIFdURjo6ZmFzdENv
bW1pdEFsaWduZWRNZW1vcnkoYmxvY2ssIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotfQotCi12
b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmRlY29tbWl0QmxvY2sodm9pZCogYmxvY2sp
Ci17Ci0gICAgV1RGOjpmYXN0RGVjb21taXRBbGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9j
azo6YmxvY2tTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIklzb01lbW9yeUFsbG9jYXRvckJhc2UuaCIKKyNp
bmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtMzQsMjQgKzM0LDMxIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBJc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yIGZpbmFsIDogcHVibGljIElzb01lbW9yeUFsbG9jYXRvckJhc2Ug
eworY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICB1c2luZyBCYXNlID0gSXNvTWVtb3J5QWxs
b2NhdG9yQmFzZTsKLQogICAgIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoQ1N0cmluZyk7CiAg
ICAgfklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBmaW5hbDsKIAorICAgIHZvaWQqIHRyeUFs
bG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgZmluYWw7
CisgICAgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgZmluYWw7CisKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQqIHRyeUFsbG9jYXRlTWVt
b3J5KHNpemVfdCkgZmluYWw7CiAgICAgdm9pZCBmcmVlTWVtb3J5KHZvaWQqKSBmaW5hbDsKICAg
ICB2b2lkKiB0cnlSZWFsbG9jYXRlTWVtb3J5KHZvaWQqLCBzaXplX3QpIGZpbmFsOwogCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCogdHJ5TWFsbG9jQmxvY2soKSBmaW5hbDsKLSAgICB2b2lkIGZyZWVC
bG9jayh2b2lkKiBibG9jaykgZmluYWw7Ci0gICAgdm9pZCBjb21taXRCbG9jayh2b2lkKiBibG9j
aykgZmluYWw7Ci0gICAgdm9pZCBkZWNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKSBmaW5hbDsKK3By
aXZhdGU6CisjaWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICAvLyBJZiBicmVh
a2Rvd24gaXMgZW5hYmxlZCwgd2UgZG8gbm90IGVuc3VyZSBJc28tZmVhdHVyZS4gVGhpcyBpcyB0
b3RhbGx5IE9LIHNpbmNlIGJyZWFrZG93biBpcyBtZW1vcnkgYmxvYXQgZGVidWdnaW5nIGZlYXR1
cmUuCisgICAgV1RGOjpEZWJ1Z0hlYXAgbV9kZWJ1Z0hlYXA7CisjZWxzZQorICAgIFZlY3Rvcjx2
b2lkKj4gbV9ibG9ja3M7CisgICAgSGFzaE1hcDx2b2lkKiwgdW5zaWduZWQ+IG1fYmxvY2tJbmRp
Y2VzOworICAgIEJpdFZlY3RvciBtX2NvbW1pdHRlZDsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0VW5j
b21taXR0ZWQgeyAwIH07CisgICAgTG9jayBtX2xvY2s7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxs
b2NhdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSXNvTWVtb3J5
QWxsb2NhdG9yQmFzZS5oIgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLUlzb01lbW9yeUFsbG9jYXRvckJhc2U6Oklzb01lbW9yeUFsbG9jYXRvckJhc2Uo
Q1N0cmluZyBuYW1lKQotI2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCi0gICAgOiBt
X2RlYnVnSGVhcChuYW1lLmRhdGEoKSkKLSNlbmRpZgotewotICAgIFVOVVNFRF9QQVJBTShuYW1l
KTsKLX0KLQotSXNvTWVtb3J5QWxsb2NhdG9yQmFzZTo6fklzb01lbW9yeUFsbG9jYXRvckJhc2Uo
KQotewotfQotCi0vLyBXZSBuZWVkIHRvIGNhbGwgdGhpcyBmcm9tIHRoZSBkZXJpdmVkIGNsYXNz
J3MgZGVzdHJ1Y3RvciBiZWNhdXNlIGl0J3MgdW5kZWZpbmVkIGJlaGF2aW9yIHRvIGNhbGwgcHVy
ZSB2aXJ0dWFsIG1ldGhvZHMgZnJvbSB3aXRoaW4gYSBkZXN0cnVjdG9yLgotdm9pZCBJc29NZW1v
cnlBbGxvY2F0b3JCYXNlOjpyZWxlYXNlTWVtb3J5RnJvbVN1YmNsYXNzRGVzdHJ1Y3RvcigpCi17
Ci0jaWYgIUVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHZvaWQqIGJsb2NrID0g
bV9ibG9ja3NbaV07Ci0gICAgICAgIGlmICghbV9jb21taXR0ZWQucXVpY2tHZXQoaSkpCi0gICAg
ICAgICAgICBjb21taXRCbG9jayhibG9jayk7Ci0gICAgICAgIGZyZWVCbG9jayhibG9jayk7Ci0g
ICAgfQotI2VuZGlmCi19Ci0KLXZvaWQqIElzb01lbW9yeUFsbG9jYXRvckJhc2U6OnRyeUFsbG9j
YXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICAv
LyBTaW5jZSB0aGlzIGlzIGRlc2lnbmVkIHNwZWNpYWxseSBmb3IgSXNvU3Vic3BhY2UsIHdlIGtu
b3cgdGhhdCB3ZSB3aWxsIG9ubHkgYmUgYXNrZWQgdG8KLSAgICAvLyBhbGxvY2F0ZSBNYXJrZWRC
bG9ja3MuCi0gICAgUkVMRUFTRV9BU1NFUlQoYWxpZ25tZW50ID09IE1hcmtlZEJsb2NrOjpibG9j
a1NpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSk7Ci0KLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotICAgIHJldHVybiBtX2Rl
YnVnSGVhcC5tZW1hbGlnbihNYXJrZWRCbG9jazo6YmxvY2tTaXplLCBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplLCB0cnVlKTsKLSNlbHNlCi0gICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAg
IAotICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IG1fY29tbWl0dGVkLmZpbmRCaXQobV9maXJzdFVu
Y29tbWl0dGVkLCBmYWxzZSk7Ci0gICAgaWYgKG1fZmlyc3RVbmNvbW1pdHRlZCA8IG1fYmxvY2tz
LnNpemUoKSkgewotICAgICAgICBtX2NvbW1pdHRlZC5xdWlja1NldChtX2ZpcnN0VW5jb21taXR0
ZWQpOwotICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2Jsb2Nrc1ttX2ZpcnN0VW5jb21taXR0ZWRd
OwotICAgICAgICBjb21taXRCbG9jayhyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlNYWxsb2NCbG9jaygpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB1bnNpZ25lZCBpbmRleCA9
IG1fYmxvY2tzLnNpemUoKTsKLSAgICBtX2Jsb2Nrcy5hcHBlbmQocmVzdWx0KTsKLSAgICBtX2Js
b2NrSW5kaWNlcy5hZGQocmVzdWx0LCBpbmRleCk7Ci0gICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5
KCkgIT0gbV9jb21taXR0ZWQuc2l6ZSgpKQotICAgICAgICBtX2NvbW1pdHRlZC5yZXNpemUobV9i
bG9ja3MuY2FwYWNpdHkoKSk7Ci0gICAgbV9jb21taXR0ZWQucXVpY2tTZXQoaW5kZXgpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0jZW5kaWYKLX0KLQotdm9pZCBJc29NZW1vcnlBbGxvY2F0b3JCYXNl
OjpmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQotewotI2lmIEVOQUJMRShNQUxMT0Nf
SEVBUF9CUkVBS0RPV04pCi0gICAgbV9kZWJ1Z0hlYXAuZnJlZShiYXNlUHRyKTsKLSNlbHNlCi0g
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgIAotICAgIGF1dG8gaXRlciA9IG1fYmxv
Y2tJbmRpY2VzLmZpbmQoYmFzZVB0cik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX2Js
b2NrSW5kaWNlcy5lbmQoKSk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBpdGVyLT52YWx1ZTsKLSAg
ICBtX2NvbW1pdHRlZC5xdWlja0NsZWFyKGluZGV4KTsKLSAgICBtX2ZpcnN0VW5jb21taXR0ZWQg
PSBzdGQ6Om1pbihpbmRleCwgbV9maXJzdFVuY29tbWl0dGVkKTsKLSAgICBkZWNvbW1pdEJsb2Nr
KGJhc2VQdHIpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29NZW1vcnlBbGxvY2F0b3JCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5o
CShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29NZW1v
cnlBbGxvY2F0b3JCYXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCi0jaW5jbHVkZSA8d3RmL0Jp
dFZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZSA6IHB1YmxpYyBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yIHsKLXB1YmxpYzoKLSAgICBJc29NZW1vcnlBbGxvY2F0b3JCYXNlKENTdHJpbmcpOwotICAg
IH5Jc29NZW1vcnlBbGxvY2F0b3JCYXNlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkKiB0cnlBbGxv
Y2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIGZpbmFsOwot
ICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIGZpbmFsOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCByZWxlYXNlTWVtb3J5RnJvbVN1YmNsYXNzRGVzdHJ1Y3RvcigpOwotICAgIHZpcnR1
YWwgdm9pZCogdHJ5TWFsbG9jQmxvY2soKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZyZWVCbG9j
ayh2b2lkKiBibG9jaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21taXRCbG9jayh2b2lkKiBi
bG9jaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKSA9
IDA7Ci0KLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotcHJvdGVjdGVkOgotICAg
IC8vIElmIGJyZWFrZG93biBpcyBlbmFibGVkLCB3ZSBkbyBub3QgZW5zdXJlIElzby1mZWF0dXJl
LiBUaGlzIGlzIHRvdGFsbHkgT0sgc2luY2UgYnJlYWtkb3duIGlzIG1lbW9yeSBibG9hdCBkZWJ1
Z2dpbmcgZmVhdHVyZS4KLSAgICBXVEY6OkRlYnVnSGVhcCBtX2RlYnVnSGVhcDsKLSNlbHNlCi1w
cml2YXRlOgotICAgIFZlY3Rvcjx2b2lkKj4gbV9ibG9ja3M7Ci0gICAgSGFzaE1hcDx2b2lkKiwg
dW5zaWduZWQ+IG1fYmxvY2tJbmRpY2VzOwotICAgIEJpdFZlY3RvciBtX2NvbW1pdHRlZDsKLSAg
ICB1bnNpZ25lZCBtX2ZpcnN0VW5jb21taXR0ZWQgeyAwIH07Ci0gICAgTG9jayBtX2xvY2s7Ci0j
ZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSXNvU3Vic3BhY2U6Oklzb1N1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgY29uc3QgSGVhcENlbGxUeXBlJiBoZWFwQ2Vs
bFR5cGUsIHNpemVfdCBzaXplLCB1aW50OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMsIHN0ZDo6
dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxvY2F0b3JCYXNlPiYmIGFsbG9jYXRvcikKK0lzb1N1YnNw
YWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxs
VHlwZSYgaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGll
ckNlbGxzKQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fZGlyZWN0b3J5KFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpKQogICAg
ICwgbV9sb2NhbEFsbG9jYXRvcigmbV9kaXJlY3RvcnkpCi0gICAgLCBtX2lzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IoYWxsb2NhdG9yID8gV1RGTW92ZShhbGxvY2F0b3IpIDogbWFrZVVuaXF1ZTxJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihuYW1lKSkKKyAgICAsIG1faXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcihtYWtlVW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KG5hbWUpKQog
ewogICAgIG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50ID0gbnVtYmVyT2ZMb3dlclRpZXJD
ZWxsczsKICAgICBBU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjph
dG9tU2l6ZT4oc2l6ZSkgPT0gY2VsbFNpemUoKSk7CkBAIC05OSw5ICs5OSw4IEBAIHZvaWQqIElz
b1N1YnNwYWNlOjp0cnlBbGxvY2F0ZUZyb21Mb3dlclQKICAgICAgICAgcmV0dXJuIHJldml2ZShh
bGxvY2F0aW9uKTsKICAgICB9CiAgICAgaWYgKG1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50
KSB7Ci0gICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gUHJlY2lzZUFsbG9j
YXRpb246OnRyeUNyZWF0ZUZvckxvd2VyVGllcihtX3NwYWNlLmhlYXAoKSwgY2VsbFNpemUoKSwg
dGhpcywgLS1tX3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3VudCk7Ci0gICAgICAgIGlmIChhbGxv
Y2F0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHJldml2ZShhbGxvY2F0aW9uKTsKKyAgICAgICAg
UHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBQcmVjaXNlQWxsb2NhdGlvbjo6Y3JlYXRl
Rm9yTG93ZXJUaWVyKG1fc3BhY2UuaGVhcCgpLCBjZWxsU2l6ZSgpLCB0aGlzLCAtLW1fcmVtYWlu
aW5nTG93ZXJUaWVyQ2VsbENvdW50KTsKKyAgICAgICAgcmV0dXJuIHJldml2ZShhbGxvY2F0aW9u
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsy
NiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgotI2lu
Y2x1ZGUgIklzb01lbW9yeUFsbG9jYXRvckJhc2UuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgog
I2luY2x1ZGUgIlN1YnNwYWNlQWNjZXNzLmgiCiAjaW5jbHVkZSA8d3RmL1NpbmdseUxpbmtlZExp
c3RXaXRoVGFpbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjsKIGNsYXNzIElzb0NlbGxTZXQ7CiAKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVi
bGljIFN1YnNwYWNlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFj
ZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5cGUmLCBzaXplX3Qgc2l6ZSwg
dWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5
QWxsb2NhdG9yQmFzZT4mJiA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1
YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIGNvbnN0IEhlYXBDZWxsVHlwZSYsIHNpemVfdCwg
dWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
SXNvU3Vic3BhY2UoKSBvdmVycmlkZTsKIAogICAgIHNpemVfdCBjZWxsU2l6ZSgpIHsgcmV0dXJu
IG1fZGlyZWN0b3J5LmNlbGxTaXplKCk7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKICAgICBMb2NhbEFsbG9jYXRvciBt
X2xvY2FsQWxsb2NhdG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxvY2F0b3JC
YXNlPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxQcmVjaXNlQWxsb2NhdGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PElzb0NlbGxTZXQsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0
Pj4gbV9jZWxsU2V0czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVj
aXNlQWxsb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw3ICsxMjAsNyBAQCBQcmVjaXNlQWxsb2NhdGlvbiogUHJlY2lzZUFsbG9jYXRpb246OnRy
CiB9CiAKIAotUHJlY2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0aW9uOjp0cnlDcmVhdGVG
b3JMb3dlclRpZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIFN1YnNwYWNlKiBzdWJzcGFjZSwg
dWludDhfdCBsb3dlclRpZXJJbmRleCkKK1ByZWNpc2VBbGxvY2F0aW9uKiBQcmVjaXNlQWxsb2Nh
dGlvbjo6Y3JlYXRlRm9yTG93ZXJUaWVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBTdWJzcGFj
ZSogc3Vic3BhY2UsIHVpbnQ4X3QgbG93ZXJUaWVySW5kZXgpCiB7CiAgICAgaWYgY29uc3RleHBy
ICh2YWxpZGF0ZURGR0RvZXNHQykKICAgICAgICAgaGVhcC52bSgpLnZlcmlmeUNhbkdDKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VB
bGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFByZWNpc2VBbGxvY2F0aW9uKiB0cnlDcmVhdGUoSGVhcCYsIHNpemVfdCwgU3Vi
c3BhY2UqLCB1bnNpZ25lZCBpbmRleEluU3BhY2UpOwogCi0gICAgc3RhdGljIFByZWNpc2VBbGxv
Y2F0aW9uKiB0cnlDcmVhdGVGb3JMb3dlclRpZXIoSGVhcCYsIHNpemVfdCwgU3Vic3BhY2UqLCB1
aW50OF90IGxvd2VyVGllckluZGV4KTsKKyAgICBzdGF0aWMgUHJlY2lzZUFsbG9jYXRpb24qIGNy
ZWF0ZUZvckxvd2VyVGllcihIZWFwJiwgc2l6ZV90LCBTdWJzcGFjZSosIHVpbnQ4X3QgbG93ZXJU
aWVySW5kZXgpOwogICAgIFByZWNpc2VBbGxvY2F0aW9uKiByZXVzZUZvckxvd2VyVGllcigpOwog
CiAgICAgUHJlY2lzZUFsbG9jYXRpb24qIHRyeVJlYWxsb2NhdGUoc2l6ZV90LCBTdWJzcGFjZSop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsOSArMTUyLDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJH
QyB0eXBlOiAiLCBoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCJPYmplY3QgYXQ6ICIsIFJhd1BvaW50ZXIoanNDZWxsKSwgIlxu
Iik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJT
dHJ1Y3R1cmUgSUQ6ICIsIHN0cnVjdHVyZUlELmJpdHMoKSwgIiAoIiwgUmF3UG9pbnRlcihzdHJ1
Y3R1cmVJRC5kZWNvZGUoKSksICIpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJTdHJ1Y3R1cmUgSUQ6ICIsIHN0cnVjdHVyZUlELCAiICgweCIsIGZvcm1hdCgiJXgiLCBzdHJ1
Y3R1cmVJRCksICIpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1
cmUgSUQgdGFibGUgc2l6ZTogIiwgaGVhcCgpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuc2l6ZSgpLCAi
XG4iKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlOiAi
LCBSYXdQb2ludGVyKHN0cnVjdHVyZUlELmRlY29kZSgpKSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlOiAiLCBSYXdQb2ludGVyKHN0cnVjdHVyZUlEKSwg
IlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJPYmplY3QgY29u
dGVudHM6Iik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
OyArK2kpCkBAIC0xODUsMTMgKzE4NiwxMyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0Nl
bGxPckF1eGlsaWFyCiAgICAgICAgICAgICBkaWUoIkdDIHNjYW4gZm91bmQgY29ycnVwdCBvYmpl
Y3Q6IHN0cnVjdHVyZUlEIGlzIHplcm8hXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIEl0J3Mg
bm90IE9LIGZvciB0aGUgc3RydWN0dXJlIHRvIGJlIG51a2VkIGF0IGFueSBHQyBzY2FuIHBvaW50
LgotICAgICAgICBpZiAoc3RydWN0dXJlSUQuaXNOdWtlZCgpKQorICAgICAgICBpZiAoaXNOdWtl
ZChzdHJ1Y3R1cmVJRCkpCiAgICAgICAgICAgICBkaWUoIkdDIHNjYW4gZm91bmQgb2JqZWN0IGlu
IGJhZCBzdGF0ZTogc3RydWN0dXJlSUQgaXMgbnVrZWQhXG4iKTsKLQorICAgICAgICAKICAgICAg
ICAgLy8gVGhpcyBkZXRlY3RzIHRoZSB3b3JzdCBvZiB0aGUgYmFkbmVzcy4KLSAgICAgICAgSW50
ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHN0cnVjdHVyZUlEKTsKKyAgICAgICAgSW50ZWdyaXR5
OjphdWRpdFN0cnVjdHVyZUlEKGhlYXAoKS0+c3RydWN0dXJlSURUYWJsZSgpLCBzdHJ1Y3R1cmVJ
RCk7CiAgICAgfTsKLQorICAgIAogICAgIC8vIEluIGRlYnVnIG1vZGUsIHdlIHZhbGlkYXRlIGJl
Zm9yZSBtYXJraW5nIHNpbmNlIHRoaXMgbWFrZXMgaXQgY2xlYXJlciB3aGF0IHRoZSBwcm9ibGVt
CiAgICAgLy8gd2FzLiBJdCdzIGFsc28gc2xvd2VyLCBzbyB3ZSBkb24ndCBkbyBpdCBub3JtYWxs
eS4KICAgICBpZiAoQVNTRVJUX0VOQUJMRUQgJiYgaXNKU0NlbGxLaW5kKGhlYXBDZWxsLT5jZWxs
S2luZCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAko
cmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsOCArOTIsNiBAQCBwdWJsaWM6CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBU
cmFpdHM+Jik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQm
KTsKLSAgICB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCYp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBi
ZWdpbiAsIEl0ZXJhdG9yIGVuZCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVl
cyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+
PiosIHNpemVfdCBjb3VudCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hp
ZGRlbihjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25v
d24+PiosIHNpemVfdCBjb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNiwxNiArMTE2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRI
aQogICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0KCkpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJTdHJ1Y3R1
cmVJRCYgc2xvdCkKLXsKLSAgICBhcHBlbmRVbmJhcnJpZXJlZChyZWludGVycHJldF9jYXN0PEpT
Q2VsbCo+KHNsb3QuZ2V0KCkpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmIHNsb3QpCi17Ci0g
ICAgYXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzbG90
LmdldCgpKSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgogQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cnVjdHVyZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKLQotI2luY2x1ZGUg
IkpTQ0NvbmZpZy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T1NBbGxvY2F0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVN0cnVjdHVyZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3I6OlN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoQ1N0cmluZyBuYW1l
KQotICAgIDogQmFzZShuYW1lKQotewotfQotCi1TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjp+U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCi17Ci0gICAgcmVsZWFzZU1l
bW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0
LnByaW50KCJTdHJ1Y3R1cmUoIiwgUmF3UG9pbnRlcih0aGlzKSwgIikiKTsKLX0KLQotdm9pZCog
U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVNZW1vcnkoc2l6ZV90
KQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3I6OmZyZWVNZW1vcnkodm9pZCopCi17Ci0gICAgLy8gU3RydWN0dXJlcyBkbyBu
b3Qgc3VwcG9ydCBQcmVjaXNlIGFsbG9jYXRpb25zIHJpZ2h0IG5vdy4KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkKiBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOjp0cnlSZWFsbG9jYXRlTWVtb3J5KHZvaWQqLCBzaXplX3QpCi17Ci0gICAgLy8gU3Ry
dWN0dXJlcyBkbyBub3Qgc3VwcG9ydCBQcmVjaXNlIGFsbG9jYXRpb25zIHJpZ2h0IG5vdy4KLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi0jaWYgQ1BVKEFERFJFU1M2NCkK
LQotY2xhc3MgU3RydWN0dXJlTWVtb3J5TWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAgU3RydWN0dXJl
TWVtb3J5TWFuYWdlcigpCi0gICAgewotICAgICAgICAvLyBEb24ndCB1c2UgdGhlIGZpcnN0IHBh
Z2UgYmVjYXVzZSB6ZXJvIGlzIHVzZWQgYXMgdGhlIGVtcHR5IFN0cnVjdHVyZUlEIGFuZCB0aGUg
Zmlyc3QgYWxsb2NhdGlvbiB3aWxsIGNvbmZsaWN0LgotICAgICAgICBtX3VzZWRCbG9ja3Muc2V0
KDApOwotICAgIH0KLQotICAgIHZvaWQqIHRyeU1hbGxvY1N0cnVjdHVyZUJsb2NrKCkKLSAgICB7
Ci0gICAgICAgIHNpemVfdCBmcmVlSW5kZXg7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qgc3RhcnRJbmRl
eCA9IDA7Ci0gICAgICAgICAgICBmcmVlSW5kZXggPSBtX3VzZWRCbG9ja3MuZmluZEJpdChzdGFy
dEluZGV4LCAwKTsKLSAgICAgICAgICAgIEFTU0VSVChmcmVlSW5kZXggPD0gbV91c2VkQmxvY2tz
LmJpdENvdW50KCkpOwotICAgICAgICAgICAgaWYgKGZyZWVJbmRleCAqIE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgPj0gc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgbV91c2VkQmxvY2tzLnNldChmcmVlSW5kZXgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gcmVpbnRlcnByZXRfY2Fz
dDxNYXJrZWRCbG9jayo+KGdfanNjQ29uZmlnLnN0YXJ0T2ZTdHJ1Y3R1cmVIZWFwKSArIGZyZWVJ
bmRleCAqIE1hcmtlZEJsb2NrOjpibG9ja1NpemU7Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIHdy
aXRhYmxlID0gdHJ1ZTsKLSAgICAgICAgY29uc3RleHByIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNl
OwotICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tT
aXplLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci0gICAgICAgIHJldHVybiBibG9jazsKLSAgICB9
Ci0KLSAgICB2b2lkIGZyZWVTdHJ1Y3R1cmVCbG9jayh2b2lkKiBibG9ja1B0cikKLSAgICB7Ci0g
ICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChibG9ja1B0ciwgTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSk7Ci0gICAgICAgIHVpbnRwdHJfdCBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihibG9ja1B0cik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGdfanNjQ29uZmlnLnN0YXJ0
T2ZTdHJ1Y3R1cmVIZWFwIDw9IGJsb2NrICYmIGJsb2NrIDwgZ19qc2NDb25maWcuc3RhcnRPZlN0
cnVjdHVyZUhlYXAgKyBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjpibG9ja1NpemU+KGJsb2Nr
KSA9PSBibG9jayk7Ci0KLSAgICAgICAgTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBt
X3VzZWRCbG9ja3MucXVpY2tDbGVhcigoYmxvY2sgLSBnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0
dXJlSGVhcCkgLyBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgTG9jayBtX2xvY2s7Ci0gICAgQml0VmVjdG9yIG1fdXNlZEJsb2NrczsKLX07Ci0KLXN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8U3RydWN0dXJlTWVtb3J5TWFuYWdlcj4gc19zdHJ1Y3R1cmVN
ZW1vcnlNYW5hZ2VyOwotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6Omlu
aXRpYWxpemVTdHJ1Y3R1cmVBZGRyZXNzU3BhY2UoKQotewotICAgIHN0YXRpY19hc3NlcnQoaGFz
T25lQml0U2V0KHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSkpOwotCi0gICAgZ19qc2NDb25maWcu
c3RhcnRPZlN0cnVjdHVyZUhlYXAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oT1NBbGxv
Y2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZEFsaWduZWQoc3RydWN0dXJlSGVhcEFkZHJlc3NTaXpl
LCBPU0FsbG9jYXRvcjo6RmFzdE1hbGxvY1BhZ2VzKSk7Ci0gICAgc19zdHJ1Y3R1cmVNZW1vcnlN
YW5hZ2VyLmNvbnN0cnVjdCgpOwotCi0gICAgQVNTRVJUKChnX2pzY0NvbmZpZy5zdGFydE9mU3Ry
dWN0dXJlSGVhcCAmIH5zdHJ1Y3R1cmVJRE1hc2spID09IGdfanNjQ29uZmlnLnN0YXJ0T2ZTdHJ1
Y3R1cmVIZWFwKTsKLX0KLQotdm9pZCogU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5TWFsbG9jQmxvY2soKQotewotICAgIHJldHVybiBzX3N0cnVjdHVyZU1lbW9yeU1hbmFnZXIt
PnRyeU1hbGxvY1N0cnVjdHVyZUJsb2NrKCk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZnJlZUJsb2NrKHZvaWQqIGJsb2NrKQotewotICAgIHNfc3RydWN0dXJl
TWVtb3J5TWFuYWdlci0+ZnJlZVN0cnVjdHVyZUJsb2NrKGJsb2NrKTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsK
LSAgICBjb25zdGV4cHIgYm9vbCB3cml0YWJsZSA9IHRydWU7Ci0gICAgY29uc3RleHByIGJvb2wg
ZXhlY3V0YWJsZSA9IGZhbHNlOwotICAgIE9TQWxsb2NhdG9yOjpjb21taXQoYmxvY2ssIE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUsIHdyaXRhYmxlLCBleGVjdXRhYmxlKTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKQot
ewotICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChibG9jaywgTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSk7Ci19Ci0KLSNlbHNlIC8vIG5vdCBDUFUoQUREUkVTUzY0KQotCi0vLyBGSVhNRTogVGhpcyBp
cyB0aGUgc2FtZSBhcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIG1heWJlIHdlIHNob3VsZCBq
dXN0IHVzZSB0aGF0IGZvciAzMi1iaXQuCi0KLXZvaWQgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6aW5pdGlhbGl6ZVN0cnVjdHVyZUFkZHJlc3NTcGFjZSgpCi17Ci0gICAgZ19qc2ND
b25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXAgPSAwOwotfQotCi12b2lkKiBTdHJ1Y3R1cmVBbGln
bmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlNYWxsb2NCbG9jaygpCi17Ci0gICAgcmV0dXJuIHRyeUZh
c3RBbGlnbmVkTWFsbG9jKE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE1hcmtlZEJsb2NrOjpibG9j
a1NpemUpOwotfQotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVC
bG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBmYXN0QWxpZ25lZEZyZWUoYmxvY2spOwotfQotCi12
b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmNvbW1pdEJsb2NrKHZvaWQqIGJs
b2NrKQotewotICAgIFdURjo6ZmFzdENvbW1pdEFsaWduZWRNZW1vcnkoYmxvY2ssIE1hcmtlZEJs
b2NrOjpibG9ja1NpemUpOwotfQotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OmRlY29tbWl0QmxvY2sodm9pZCogYmxvY2spCi17Ci0gICAgV1RGOjpmYXN0RGVjb21taXRB
bGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLX0KLQotI2VuZGlm
IC8vIENQVShBRERSRVNTNjQpCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RydWN0dXJlQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5o
IgotI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgotCi0jaWYgRU5BQkxFKE1BTExPQ19IRUFQX0JS
RUFLRE9XTikKLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IgZmluYWwgOiBw
dWJsaWMgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZSB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9
IElzb01lbW9yeUFsbG9jYXRvckJhc2U7Ci0KLSAgICBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKENTdHJpbmcpOwotICAgIH5TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkg
ZmluYWw7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7Ci0K
LSAgICB2b2lkKiB0cnlBbGxvY2F0ZU1lbW9yeShzaXplX3QpIGZpbmFsOwotICAgIHZvaWQgZnJl
ZU1lbW9yeSh2b2lkKikgZmluYWw7Ci0gICAgdm9pZCogdHJ5UmVhbGxvY2F0ZU1lbW9yeSh2b2lk
Kiwgc2l6ZV90KSBmaW5hbDsKLQotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdHJ1Y3R1cmVB
ZGRyZXNzU3BhY2UoKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQqIHRyeU1hbGxvY0Jsb2NrKCkg
ZmluYWw7Ci0gICAgdm9pZCBmcmVlQmxvY2sodm9pZCogYmxvY2spIGZpbmFsOwotICAgIHZvaWQg
Y29tbWl0QmxvY2sodm9pZCogYmxvY2spIGZpbmFsOwotICAgIHZvaWQgZGVjb21taXRCbG9jayh2
b2lkKiBibG9jaykgZmluYWw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
Mjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRTdG9yZVN0cnVjdHVyZQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaml0LnN0b3JlNjQo
VHJ1c3RlZEltbTY0KHN0cnVjdHVyZVB0ci0+aWRCbG9iKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICBpZiAoQVNTRVJU
X0VOQUJMRUQpIHsKLSAgICAgICAgSnVtcCBjb3JyZWN0U3RydWN0dXJlID0gaml0LmJyYW5jaDMy
KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pZCgpLmJpdHMoKSkpOworICAg
ICAgICBKdW1wIGNvcnJlY3RTdHJ1Y3R1cmUgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmlkKCkpKTsKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RTdHJ1Y3R1cmUubGluaygm
aml0KTsKIApAQCAtMzg5LDI5ICszODksNDQgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0b3Jl
UHJvcGVydHkoSlNWYQogICAgICAgICBCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJl
SUQoUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCkKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3Rl
cklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICBtb3ZlKHNvdXJjZSwgZGVzdCk7
Ci0jaWYgQ1BVKEFERFJFU1M2NCkKLSAgICAvLyBUaGlzIGNvdWxkIHVzZSBCRkkgb24gYXJtNjQg
YnV0IHRoYXQgb25seSBoZWxwcyBpZiB0aGUgc3RhcnQgb2Ygc3RydWN0dXJlIGhlYXAgaXMgZW5j
b2RhYmxlIGFzIGEgbW92IGFuZCBub3QgYXMgYW4gaW1tZWRpYXRlIGluIHRoZSBhZGQgc28gaXQn
cyBwcm9iYWJseSBub3Qgc3VwZXIgaW1wb3J0YW50LgotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihz
dHJ1Y3R1cmVJRE1hc2spLCBkZXN0KTsKLSAgICBhZGQ2NChUcnVzdGVkSW1tNjQoZ19qc2NDb25m
aWcuc3RhcnRPZlN0cnVjdHVyZUhlYXApLCBkZXN0KTsKLSNlbmRpZiAvLyBub3QgQ1BVKEFERFJF
U1M2NCkKLX0KKyNpZiBVU0UoSlNWQUxVRTY0KQorI2lmIENQVShBUk02NCkKKyAgICBSZWdpc3Rl
cklEIHNjcmF0Y2gyID0gZGF0YVRlbXBSZWdpc3RlcjsKKyNlbGlmIENQVShYODZfNjQpCisgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHNjcmF0Y2hSZWdpc3RlcigpOworI2Vsc2UKKyNlcnJvciAi
VW5zdXBwb3J0ZWQgY3B1IgorI2VuZGlmCiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9h
ZFN0cnVjdHVyZShWTSYsIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QpCi17Ci0g
ICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNvdXJjZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgZGVzdCk7Ci0gICAgZW1pdE5vbk51bGxEZWNvZGVTdHJ1Y3R1cmVJRChk
ZXN0LCBkZXN0KTsKKyAgICBBU1NFUlQoZGVzdCAhPSBzY3JhdGNoKTsKKyAgICBBU1NFUlQoZGVz
dCAhPSBzY3JhdGNoMik7CisgICAgQVNTRVJUKHNjcmF0Y2ggIT0gc2NyYXRjaDIpOworCisgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNvdXJjZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIGxvYWRQdHIodm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuYmFzZSgpLCBzY3JhdGNoKTsKKyAgICByc2hpZnQzMihzY3JhdGNoMiwgVHJ1c3RlZElt
bTMyKFN0cnVjdHVyZUlEVGFibGU6OnNfbnVtYmVyT2ZFbnRyb3B5Qml0cyksIGRlc3QpOworICAg
IGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoLCBkZXN0LCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIpLCBkZXN0KTsKKyAgICBsc2hpZnRQdHIoVHJ1c3RlZEltbTMyKFN0
cnVjdHVyZUlEVGFibGU6OnNfZW50cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50ZXIpLCBz
Y3JhdGNoMik7CisgICAgeG9yUHRyKHNjcmF0Y2gyLCBkZXN0KTsKKyNlbHNlIC8vIG5vdCBVU0Uo
SlNWQUxVRTY0KQorICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc291cmNlLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBkZXN0KTsKKyNlbmRpZiAvLyBub3QgVVNFKEpTVkFMVUU2
NCkKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkUHJvdG90eXBlKFZNJiB2bSwg
R1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgSnVtcExpc3QmIHNsb3dQ
YXRoKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkUHJvdG90eXBlKFZNJiB2bSwgR1BS
UmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgR1BSUmVnIHNjcmF0Y2hHUFIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKIHsKICAgICBBU1NFUlQocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkgIT0gb2JqZWN0R1BSKTsKKyAgICBBU1NFUlQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkgIT0g
c2NyYXRjaEdQUik7CisgICAgQVNTRVJUKG9iamVjdEdQUiAhPSBzY3JhdGNoR1BSKTsKIAotICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtLCBvYmplY3RHUFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgb2JqZWN0R1BSLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgc2NyYXRjaEdQUik7CiAKLSAgICBhdXRvIG92ZXJyaWRlc0dldFByb3RvdHlwZSA9
IGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIFN0cnVjdHVyZTo6b3V0T2ZMaW5lVHlwZUZs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5l
KSk7CisgICAgbG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpLCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFnc09mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgYXV0byBvdmVycmlkZXNHZXRQcm90b3R5cGUgPSBicmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihPdmVycmlkZXNHZXRQ
cm90b3R5cGVPdXRPZkxpbmUpKTsKICAgICBzbG93UGF0aC5hcHBlbmQob3ZlcnJpZGVzR2V0UHJv
dG90eXBlKTsKIAogICAgIGxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlc3VsdFJl
Z3MpOwpAQCAtNTEwLDcgKzUyNSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9t
VGh1bmsoSlMKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0mIHZtLCBH
UFJSZWcgc2NyYXRjaDAsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBHUFJSZWcg
c2NyYXRjaDMsIEZQUlJlZyByZXN1bHQpCiB7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBzY3JhdGNoMyk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0sIHNjcmF0Y2gzLCBzY3JhdGNoMyk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0s
IHNjcmF0Y2gzLCBzY3JhdGNoMywgc2NyYXRjaDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoMywgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2gzKTsKICAgICAv
LyBOb3csIHNjcmF0Y2gzIGhvbGRzIEpTR2xvYmFsT2JqZWN0Ki4KIApAQCAtODIzLDcgKzgzOCw3
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZhbHVlVG8KICAgICAgICAgQVNT
RVJUKHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCAhPSBJbnZhbGlk
R1BSUmVnKTsKICAgICAgICAgSnVtcExpc3QgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwog
ICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwotICAgICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWUucGF5bG9hZEdQUigpLCByZXN1bHQpOworICAgICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWUucGF5bG9hZEdQUigpLCByZXN1bHQsIHNjcmF0
Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5k
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZXN1bHQsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKIApAQCAtOTE0LDcgKzkyOSw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1i
bHlIZWxwZXIKICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgSnVtcExpc3QgaXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
YXBwZW5kKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSkpOwotICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWUucGF5bG9hZEdQ
UigpLCBzY3JhdGNoKTsKKyAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxv
YWRHUFIoKSwgc2NyYXRjaCwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKTsKICAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNHbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHN0ZDo6Z2V0
PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEyMyw3ICsxMTIzLDcgQEAgcHVibGljOgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFu
Y2gzMihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQo
KS5iaXRzKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmRpdGlvbiwgbGVmdEhhbmRT
aWRlLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7CiAjZWxzZQogICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKGNvbmRpdGlvbiwgbGVmdEhhbmRTaWRlLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSkpOwogI2VuZGlmCkBAIC0xNTc3LDkgKzE1NzcsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhcmd1bWVudENvdW50KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoUmVnaXN0ZXJJRCBz
b3VyY2UsIFJlZ2lzdGVySUQgZGVzdCk7Ci0gICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYs
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QpOwotICAgIHZvaWQgZW1pdExvYWRQ
cm90b3R5cGUoVk0mLCBHUFJSZWcgb2JqZWN0R1BSLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBK
dW1wTGlzdCYgc2xvd1BhdGgpOworICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoVk0mLCBSZWdp
c3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAg
IHZvaWQgZW1pdExvYWRQcm90b3R5cGUoVk0mLCBHUFJSZWcgb2JqZWN0R1BSLCBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKIAog
ICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKFRydXN0ZWRJbW1QdHIgc3Ry
dWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQpCiAgICAgewpAQCAtMTY2NCwxMyAr
MTY2MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBudWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJm
bHkoVk0mIHZtLCBHUFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAg
ICAgaWYgKGlzWDg2KCkpIHsKLSAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKGJpdHdpc2Vf
Y2FzdDxpbnQzMl90PihTdHJ1Y3R1cmVJRDo6bnVrZWRTdHJ1Y3R1cmVJREJpdCkpLCBBZGRyZXNz
KG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgICAgICBvcjMy
KFRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obnVrZWRTdHJ1Y3R1cmVJREJpdCgp
KSksIEFkZHJlc3Mob2JqZWN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICAg
ICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCh2bSk7Ci0gICAgICAgIG9y
MzIoVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90PihTdHJ1Y3R1cmVJRDo6bnVrZWRT
dHJ1Y3R1cmVJREJpdCkpLCBBZGRyZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKGJpdHdpc2VfY2FzdDxpbnQzMl90Pihu
dWtlZFN0cnVjdHVyZUlEQml0KCkpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOwogICAgICAgICBzdG9yZUZlbmNlKCk7CiAgICAgICAgIHN0b3JlUHRyKGJ1
dHRlcmZseSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwog
ICAgICAgICBzdG9yZUZlbmNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdW5zaWduZWQgUG9seW1vcnBoaWNBY2Nlc3NKSVRT
dHViUm91dGluZQogICAgIGZvciAoYXV0byYga2V5IDogY2FzZXMpCiAgICAgICAgIFdURjo6YWRk
KGhhc2hlciwga2V5LT5oYXNoKCkpOwogICAgIGZvciAoYXV0byYgc3RydWN0dXJlSUQgOiB3ZWFr
U3RydWN0dXJlcykKLSAgICAgICAgV1RGOjphZGQoaGFzaGVyLCBzdHJ1Y3R1cmVJRC5iaXRzKCkp
OworICAgICAgICBXVEY6OmFkZChoYXNoZXIsIHN0cnVjdHVyZUlEKTsKICAgICByZXR1cm4gaGFz
aGVyLmhhc2goKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUZhc3RQYQogc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJ
VCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEpTVmFsdWVSZWdzIGJhc2VKU1IsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBKU1ZhbHVlUmVncyByZXN1bHRKU1IpCiB7CiAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlSUQoKSkpOworICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKICAgICBkb0lubGluZUFjY2Vzcy5saW5rKCZqaXQpOwogICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkBAIC0yMjEsNyAr
MjIxLDcgQEAgdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaQogICAgIHVz
aW5nIEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7CiAKICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgYXV0byBkb0lubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCgpKSk7CisgICAgYXV0byBkb0lubGluZUFjY2VzcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOwogICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIGRvSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7
CiAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKQEAg
LTQxMiw3ICs0MTIsNyBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogCiAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCgpKSk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0g
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CiAgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgcmVz
dWx0SlNSKTsKICAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTYsNyArMjU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
bwogICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyKTsKKyAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdU
MSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVn
VDEwLnBheWxvYWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExOTYsNyArMTE5Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpA
QCAtMTIyOCw3ICsxMjI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIpOworICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC0xOTU5LDcgKzE5NTksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoanNSZWdUMTApKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90
b3R5cGUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMiwgc2xvd0Nhc2VzKTsK
KyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVn
VDMyLCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMzIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMxLDcgKzI3MzEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4
aW5nVHlwZU1hc2spLCByZWdUMSk7CiAgICAgZ2VuZXJpY0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZSwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhVbmRlY2lkZWQpKSk7CiAKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURhdGFPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBn
ZW5lcmljQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKICAgICBnZW5l
cmljQ2FzZXMuYXBwZW5kKGJyYW5jaElmU3RydWN0dXJlKHJlZ1QxKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyODY5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEzICsyOSwxOCBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZUlELmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNs
YXNzIFZNOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3VzaW5nIFN0cnVjdHVyZUlEID0gdWludDMy
X3Q7CisjZWxzZQordXNpbmcgU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmUqOworI2VuZGlmCisKIGNs
YXNzIEFjY2Vzc0Nhc2U7CiAKIC8vIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBKSVQgc3R1YiBy
b3V0aW5lcywgYW5kIGFsc28gdGhlIGNsYXNzIHlvdSB3YW50CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3Miw3ICs2NzIsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfdHJ5X2dldF9iCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVj
dHVyZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIGlmIChvbGRTdHJ1
Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IG9sZFN0cnVjdHVyZUlE
LmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogCiAgICAgICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7CkBA
IC02ODYsNyArNjg2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RyeV9nZXRf
YgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0p
OwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VW
YWx1ZSkgewogICAgICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xk
IGNhY2hlLgotICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlE
KCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAg
IG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkgewpAQCAtNzIxLDcgKzcyMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgewogICAgICAgICAgICAgU3RydWN0dXJl
SUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwogICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gb2xk
U3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gdm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIGIgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlOjpzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8o
YSwgYikpIHsKQEAgLTczNSw3ICs3MzUsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfZ2V0X2J5X2lkCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzbG90LmlzVmFsdWUoKSkgewogICAgICAgICAgICAg
Ly8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAgICAgICAgICAg
bWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0ID0g
MDsKIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewpA
QCAtODQ4LDEwICs4NDgsMTAgQEAgc3RhdGljIEpTVmFsdWUgcGVyZm9ybUxMSW50R2V0QnlJRChj
b25zdAogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEucHJvdG9Mb2Fk
TW9kZS5zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOwor
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
YSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
YSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
dm0pOwogCiAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9s
eVByb3RvKGEsIGIpKSB7CkBAIC05ODYsNyArOTg2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBv
bGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBp
ZiAob2xkU3RydWN0dXJlSUQpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSBvbGRT
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKICAg
ICAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9w
ZXJ0eSkKICAgICAgICAgICAgICAgICAgICAgYiA9IGItPnByZXZpb3VzSUQoKTsKQEAgLTk5OSw5
ICs5OTksOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcgb3V0IHRoZSBvbGQgY2Fj
aGUuCi0gICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOwor
ICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gMDsKICAgICAgICAgbWV0YWRhdGEu
bV9vZmZzZXQgPSAwOwotICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0
dXJlSUQoKTsKKyAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAg
IG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CkBAIC0xMTc1LDcgKzExNzUsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3ByaXZhCiAgICAgICAgIHsKICAg
ICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmVJRDsKICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogYSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1
cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUodm0pOwogCiAgICAgICAgICAgICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxk
Q29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7CkBAIC0xMTg5LDcgKzExODksNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3ByaXZhCiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzbG90LmlzVmFs
dWUoKSkgewogICAgICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xk
IGNhY2hlLgotICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlE
KCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAg
IG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKIAogICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKQEAgLTEzMDgsNyArMTMwOCw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfcHJpdmEKICAgICAgICAgewogICAgICAgICAgICAg
U3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwog
ICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBhID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBhID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGIgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSh2bSk7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpCiAgICAgICAgICAgICAgICAgICAgIGIgPSBiLT5wcmV2aW91c0lE
KCk7CkBAIC0xMzIxLDkgKzEzMjEsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X3ByaXZhCiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcg
b3V0IHRoZSBvbGQgY2FjaGUuCi0gICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSBT
dHJ1Y3R1cmVJRCgpOworICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gMDsKICAg
ICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwotICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVj
dHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJ
RCA9IDA7CiAgICAgICAgIG1ldGFkYXRhLm1fcHJvcGVydHkuY2xlYXIoKTsKICAgICAgICAgCiAg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CkBAIC0xMzk3LDgg
KzEzOTcsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2V0X3ByaXZhCiAgICAg
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbklu
dmFsaWRhdGVkKCkpOwogCiAgICAgICAgIC8vIFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhl
IG9sZCBjYWNoZS4KLSAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVy
ZUlEKCk7Ci0gICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgp
OworICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gMDsKKyAgICAgICAgbWV0YWRh
dGEubV9uZXdTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIG1ldGFkYXRhLm1fYnJhbmQuY2xlYXIo
KTsKIAogICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjk0LDE2ICs2
OTQsMjAgQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxMZXhpY2FsRW52aXJvbgogICAgICAg
ICBlbmQpCiBlbmQKIAotbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNoKHN0
cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgc2NyYXRjaCkKLSAgICBhbmRxIGNvbnN0ZXhwciBzdHJ1
Y3R1cmVJRE1hc2ssIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZQotICAgIGxlYXAgSlNDQ29uZmln
ICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdTdGFydE9mU3RydWN0dXJlSGVhcCwg
c2NyYXRjaAotICAgIGxvYWRwIFtzY3JhdGNoXSwgc2NyYXRjaAotICAgIGFkZHAgc2NyYXRjaCwg
c3RydWN0dXJlSURUaGVuU3RydWN0dXJlCittYWNybyBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0
aFNjcmF0Y2goc3RydWN0dXJlSURUaGVuU3RydWN0dXJlLCBzY3JhdGNoLCBzY3JhdGNoMikKKyAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgc2NyYXRjaAorICAgIG1vdmUgc3RydWN0dXJlSURUaGVu
U3RydWN0dXJlLCBzY3JhdGNoMgorICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVtzY3JhdGNoXSwg
c2NyYXRjaAorICAgIHJzaGlmdGkgTnVtYmVyT2ZTdHJ1Y3R1cmVJREVudHJvcHlCaXRzLCBzY3Jh
dGNoMgorICAgIGxvYWRwIFZNOjpoZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJRFRhYmxlICsgU3Ry
dWN0dXJlSURUYWJsZTo6bV90YWJsZVtzY3JhdGNoXSwgc2NyYXRjaAorICAgIGxvYWRwIFtzY3Jh
dGNoLCBzY3JhdGNoMiwgUHRyU2l6ZV0sIHNjcmF0Y2gyCisgICAgbHNoaWZ0cCBTdHJ1Y3R1cmVF
bnRyb3B5Qml0c1NoaWZ0LCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUKKyAgICB4b3JwIHNjcmF0
Y2gyLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUKIGVuZAogCi1tYWNybyBsb2FkU3RydWN0dXJl
V2l0aFNjcmF0Y2goY2VsbCwgc3RydWN0dXJlLCBzY3JhdGNoKQorbWFjcm8gbG9hZFN0cnVjdHVy
ZVdpdGhTY3JhdGNoKGNlbGwsIHN0cnVjdHVyZSwgc2NyYXRjaCwgc2NyYXRjaDIpCiAgICAgbG9h
ZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW2NlbGxdLCBzdHJ1Y3R1cmUKLSAgICBzdHJ1Y3R1cmVJ
RFRvU3RydWN0dXJlV2l0aFNjcmF0Y2goc3RydWN0dXJlLCBzY3JhdGNoKQorICAgIHN0cnVjdHVy
ZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaChzdHJ1Y3R1cmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKQog
ZW5kCiAKICMgRW50cnlwb2ludHMgaW50byB0aGUgaW50ZXJwcmV0ZXIuCkBAIC05MjYsNyArOTMw
LDcgQEAgbWFjcm8gZXF1YWxOdWxsQ29tcGFyaXNvbk9wKG9wY29kZU5hbWUsIAogICAgICAgICBt
b3ZlIDAsIHQwCiAgICAgICAgIGptcCAuZG9uZQogICAgIC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
OgotICAgICAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICAgICAg
bG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEsIHQzKQogICAgICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDAKICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCiAgICAgICAgIGNwZXEgU3RydWN0dXJlOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQw
LCB0MApAQCAtMTQyOCw3ICsxNDMyLDcgQEAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfdHlwZW9mX2lz
X3VuZGVmaW5lZAogICAgIG1vdmUgVmFsdWVGYWxzZSwgdDEKICAgICByZXR1cm4odDEpCiAubWFz
cXVlcmFkZXNBc1VuZGVmaW5lZDoKLSAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQz
LCB0MSkKKyAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQzLCB0MSwgdDIpCiAgICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9i
amVjdFt0MV0sIHQxCiAgICAgY3BlcSBTdHJ1Y3R1cmU6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDEs
IHQwCkBAIC0xNjQwLDcgKzE2NDQsNyBAQCBsbGludE9wV2l0aFByb2ZpbGUob3BfZ2V0X3Byb3Rv
dHlwZV9vZiwgCiAgICAgYnRxbnogdDAsIG5vdENlbGxNYXNrLCAub3BHZXRQcm90b3R5cGVPZlNs
b3cKICAgICBiYmIgSlNDZWxsOjptX3R5cGVbdDBdLCBPYmplY3RUeXBlLCAub3BHZXRQcm90b3R5
cGVPZlNsb3cKIAotICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxKQorICAg
IGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICBsb2FkaCBTdHJ1
Y3R1cmU6Om1fb3V0T2ZMaW5lVHlwZUZsYWdzW3QyXSwgdDMKICAgICBidGlueiB0MywgT3ZlcnJp
ZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5lLCAub3BHZXRQcm90b3R5cGVPZlNsb3cKIApAQCAtMTY4
MCw3ICsxNjg0LDE5IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIK
ICAgICBsb2FkcCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZUNoYWluW3Q1XSwgdDMK
ICAgICBidHB6IHQzLCAub3BQdXRCeUlkVHJhbnNpdGlvbkRpcmVjdAogCi0gICAgc3RydWN0dXJl
SURUb1N0cnVjdHVyZVdpdGhTY3JhdGNoKHQyLCB0MSkKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgIGxvYWRwIFZNOjpo
ZWFwICsgSGVhcDo6bV9zdHJ1Y3R1cmVJRFRhYmxlICsgU3RydWN0dXJlSURUYWJsZTo6bV90YWJs
ZVt0MV0sIHQxCisKKyAgICBtYWNybyBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2hB
bmRUYWJsZShzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIHRhYmxlLCBzY3JhdGNoKQorICAgICAg
ICBtb3ZlIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgc2NyYXRjaAorICAgICAgICByc2hpZnRp
IE51bWJlck9mU3RydWN0dXJlSURFbnRyb3B5Qml0cywgc2NyYXRjaAorICAgICAgICBsb2FkcCBb
dGFibGUsIHNjcmF0Y2gsIFB0clNpemVdLCBzY3JhdGNoCisgICAgICAgIGxzaGlmdHAgU3RydWN0
dXJlRW50cm9weUJpdHNTaGlmdCwgc3RydWN0dXJlSURUaGVuU3RydWN0dXJlCisgICAgICAgIHhv
cnAgc2NyYXRjaCwgc3RydWN0dXJlSURUaGVuU3RydWN0dXJlCisgICAgZW5kCisKKyAgICBzdHJ1
Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2hBbmRUYWJsZSh0MiwgdDEsIHQwKQogCiAgICAg
bG9hZHAgU3RydWN0dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAgICBhc3NlcnQobWFjcm8g
KG9rKSBidHBueiB0Mywgb2sgZW5kKQpAQCAtMTY5MSw3ICsxNzA3LDcgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1
cmVJRFt0Ml0sIHQyCiAgICAgYmluZXEgdDIsIFt0M10sIC5vcFB1dEJ5SWRTbG93CiAgICAgYWRk
cCA0LCB0MwotICAgIHN0cnVjdHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MiwgdDEpCisg
ICAgc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNoQW5kVGFibGUodDIsIHQxLCB0MCkK
ICAgICBsb2FkcSBTdHJ1Y3R1cmU6Om1fcHJvdG90eXBlW3QyXSwgdDIKICAgICBicW5lcSB0Miwg
VmFsdWVOdWxsLCAub3BQdXRCeUlkVHJhbnNpdGlvbkNoYWluTG9vcAogCkBAIC0yMDY2LDcgKzIw
ODIsNyBAQCBtYWNybyBlcXVhbE51bGxKdW1wT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlCiAgICAgICAg
IGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQwCiAgICAgICAgIGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLmltbWVkaWF0ZQotICAgICAgICBs
b2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICAgICAgbG9hZFN0cnVjdHVy
ZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEsIHQzKQogICAgICAgICBjZWxsSGFuZGxlcih0MiwgSlND
ZWxsOjptX2ZsYWdzW3QwXSwgLnRhcmdldCkKICAgICAgICAgZGlzcGF0Y2goKQogCkBAIC0yNzg1
LDcgKzI4MDEsNyBAQCBlbmQpCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wY29kZVN0
cnVjdCwgZ2V0LCBzbG93UGF0aCkKICAgICBnZXQobV9zY29wZSwgdDApCiAgICAgbG9hZHEgW2Nm
ciwgdDAsIDhdLCB0MAotICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxKQor
ICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fc3RydWN0dXJlW3Q1XSwgdDEKICAgICBicG5lcSB0
MiwgdDEsIHNsb3dQYXRoCiBlbmQKQEAgLTMyMzYsNyArMzI1Miw3IEBAIGxsaW50T3BXaXRoUmV0
dXJuKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXIKICAgICBhbmRpIEluZGV4aW5nVHlwZU1hc2ssIHQx
CiAgICAgYmlhIHQxLCBBcnJheVdpdGhVbmRlY2lkZWQsIC5zbG93UGF0aAogCi0gICAgbG9hZFN0
cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MSwgdDIpCisgICAgbG9hZFN0cnVjdHVyZVdpdGhTY3Jh
dGNoKHQwLCB0MSwgdDIsIHQzKQogICAgIGxvYWRwIFN0cnVjdHVyZTo6bV9wcmV2aW91c09yUmFy
ZURhdGFbdDFdLCB0MQogICAgIGJ0cHogdDEsIC5zbG93UGF0aAogICAgIGJiZXEgSlNDZWxsOjpt
X3R5cGVbdDFdLCBTdHJ1Y3R1cmVUeXBlLCAuc2xvd1BhdGgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjEyLDYgKzIxMiwxMSBAQCBlbHNlCiAgICAgY29u
c3QgTG93ZXN0VGFnID0gY29uc3RleHByIEpTVmFsdWU6Okxvd2VzdFRhZwogZW5kCiAKK2lmIEpT
VkFMVUU2NAorICAgIGNvbnN0IE51bWJlck9mU3RydWN0dXJlSURFbnRyb3B5Qml0cyA9IGNvbnN0
ZXhwciBTdHJ1Y3R1cmVJRFRhYmxlOjpzX251bWJlck9mRW50cm9weUJpdHMKKyAgICBjb25zdCBT
dHJ1Y3R1cmVFbnRyb3B5Qml0c1NoaWZ0ID0gY29uc3RleHByIFN0cnVjdHVyZUlEVGFibGU6OnNf
ZW50cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50ZXIKK2VuZAorCiBpZiBMQVJHRV9UWVBF
RF9BUlJBWVMKICAgICBjb25zdCBTbWFsbFR5cGVkQXJyYXlNYXhMZW5ndGggPSBjb25zdGV4cHIg
QXJyYXlQcm9maWxlOjpzX3NtYWxsVHlwZWRBcnJheU1heExlbmd0aAogZW5kCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw3ICs2MDIsNyBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oYXJyYXlQcm90b0Z1bmNUCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0
aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1
cmVJRCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgIGlmICghY2FuVXNl
RGVmYXVsdEFycmF5Sm9pbkZvclRvU3RyaW5nKHZtLCB0aGlzT2JqZWN0KSkgewogICAgICAgICAv
LyAyLiBMZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQgImpvaW4iLgogICAgICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1l
cy0+am9pbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3
ICsxMTMsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oYmlnSW50UHJvdG9GdW5jCiAKICAg
ICBBU1NFUlQodmFsdWUpOwogCi0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZhbHVl
LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHZh
bHVlLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBpbnQzMl90IHJhZGl4ID0gZXh0cmFjdFRvU3RyaW5n
UmFkaXhBcmd1bWVudChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIHNjb3Bl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC0xNTYsNyArMTU2
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGJpZ0ludFByb3RvRnVuYwogICAgIEpTQmln
SW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAg
IEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2YWx1ZS0+c3RydWN0dXJlSUQoKSk7CisgICAg
SW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB2YWx1ZS0+c3RydWN0dXJlSUQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oYm9vbGVhblByb3RvRnVuCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAK
LSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc09iamVjdC0+c3RydWN0dXJlSUQo
KSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmVJRCgpKTsKICAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpID09IGpzQm9v
bGVhbihmYWxzZSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodm0uc21hbGxTdHJp
bmdzLmZhbHNlU3RyaW5nKCkpOwogCkBAIC05Niw3ICs5Niw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihib29sZWFuUHJvdG9GdW4KICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAot
ICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgp
KTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0cnVj
dHVyZUlEKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTUsMTEgKzM1NSwxMSBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3RvCiAgICAgICAgICAgICBpZiAob3RoZXJTdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7CiAgICAgICAgICAgICBt
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEID0gbXlTdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAg
IHZtLndyaXRlQmFycmllcihjb2RlQmxvY2ssIG15U3RydWN0dXJlSUQuZGVjb2RlKCkpOworICAg
ICAgICAgICAgdm0ud3JpdGVCYXJyaWVyKGNvZGVCbG9jaywgdm0uZ2V0U3RydWN0dXJlKG15U3Ry
dWN0dXJlSUQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1ldGFkYXRhLm1f
dG9UaGlzU3RhdHVzID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgbWV0YWRhdGEubV9jYWNo
ZWRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgIG1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQgPSAwOwogICAgIH0KICAgICAvLyBOb3RlOiBXZSBvbmx5IG5lZWQgdG8gZG8g
dGhpcyB2YWx1ZSBwcm9maWxpbmcgaGVyZSBvbiB0aGUgc2xvdyBwYXRoLiBUaGUgZmFzdCBwYXRo
CiAgICAgLy8ganVzdCByZXR1cm5zIHRoZSBpbnB1dCB0byB0b190aGlzIGlmIHRoZSBzdHJ1Y3R1
cmUgY2hlY2sgc3VjY2VlZHMuIElmIHRoZSBzdHJ1Y3R1cmUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0
ZURhdGVJbnN0YW5jCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgSW50ZWdy
aXR5OjphdWRpdFN0cnVjdHVyZUlEKHRoaXNEYXRlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHRoaXNEYXRlT2JqLT5zdHJ1Y3R1cmVJRCgp
KTsKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBhc1VU
Q1ZhcmlhbnQKICAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoY2Fj
aGUpCiAgICAgICAgIDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGNhY2hlKTsKQEAg
LTMxNSw3ICszMTUsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZGF0ZVByb3RvRnVuY1Rv
CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgSW50ZWdyaXR5OjphdWRpdFN0
cnVjdHVyZUlEKHRoaXNEYXRlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1
ZGl0U3RydWN0dXJlSUQodm0sIHRoaXNEYXRlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBpZiAo
IXN0ZDo6aXNmaW5pdGUodGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCkpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCAiSW52YWxpZCBEYXRlIl9zKSk7CiAKQEAgLTM2Myw3ICszNjMsNyBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZGF0ZVByb3RvRnVuY1RvCiAgICAgaWYgKCF0aGlzVmFs
dWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkRhdGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQg
fHRoaXN8IHRvIGJlIGFuIG9iamVjdC4iKTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZSk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVy
ZUlEKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAKICAgICBpZiAoIWNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiRGF0ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSBl
eHBlY3RlZCBhIGZpcnN0IGFyZ3VtZW50LiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1l
c3NhZ2VTdAogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVj
dHVyZUlEKHN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2
bSwgc3RydWN0dXJlSUQoKSk7CiAKICAgICBKU1ZhbHVlIG1lc3NhZ2VWYWx1ZTsKICAgICBhdXRv
IG1lc3NhZ2VQcm9wZXJ0TmFtZSA9IHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2U7CkBAIC0xNzIs
NyArMTcyLDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVTdHJpbgogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHN0cnVj
dHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgc3RydWN0dXJl
SUQoKSk7CiAKICAgICBKU1ZhbHVlIG5hbWVWYWx1ZTsKICAgICBhdXRvIG5hbWVQcm9wZXJ0TmFt
ZSA9IHZtLnByb3BlcnR5TmFtZXMtPm5hbWU7CkBAIC0yMDMsNyArMjAzLDcgQEAgU3RyaW5nIEVy
cm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKAogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHN0cnVjdHVyZUlEKCkpOworICAgIEludGVn
cml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgc3RydWN0dXJlSUQoKSk7CiAKICAgICBTdHJpbmcg
bmFtZVN0cmluZyA9IHNhbml0aXplZE5hbWVTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGVy
cm9yUHJvdG9GdW5jVAogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gYXNPYmplY3QodGhpc1ZhbHVlKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQodGhpc09iai0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0
cnVjdHVyZUlEKHZtLCB0aGlzT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKIAogICAgIC8vIEd1YXJkIGFn
YWluc3QgcmVjdXJzaW9uIQogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihnbG9i
YWxPYmplY3QsIHRoaXNPYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuSW0KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV4
ZWN1dGFibGUpOwogICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzT2JqZWN0LT5tX3Jh
cmVEYXRhLmdldCgpKSB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hl
ZFBvbHlQcm90b1N0cnVjdHVyZUlEKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQocmFyZURhdGEt
Pm1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQocmFy
ZURhdGEtPm1fYXNTdHJpbmcpOwogICAgICAgICBpZiAoVGVtcGxhdGVPYmplY3RNYXAqIG1hcCA9
IHJhcmVEYXRhLT5tX3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CiAgICAgICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgdGhpc09iamVjdC0+Y2VsbExvY2soKSB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMTIgKzI1NywxMiBAQCBwdWJsaWM6CiAgICAg
U3RydWN0dXJlKiBjYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKQogICAgIHsKICAgICAgICAgaWYg
KFVOTElLRUxZKG1fcmFyZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1f
Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlSUQuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9y
YXJlRGF0YS0+bV9jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICB2b2lkIHNldENhY2hlZFBvbHlQcm90b1N0cnVjdHVyZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgZW5zdXJlUmFyZURh
dGEoKS5tX2NhY2hlZFBvbHlQcm90b1N0cnVjdHVyZUlELnNldCh2bSwgdGhpcywgc3RydWN0dXJl
KTsKKyAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2NhY2hlZFBvbHlQcm90b1N0cnVjdHVyZS5z
ZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgfQogCiAgICAgSW5saW5lV2F0Y2hwb2ludFNl
dCYgZW5zdXJlUG9seVByb3RvV2F0Y2hwb2ludCgpCkBAIC0zMTAsOCArMzEwLDggQEAgcHJpdmF0
ZToKICAgICAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgeyAwIH07CiAgICAg
ICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0IHsgVUlOVF9NQVggfTsKICAg
ICAgICAgdW5zaWduZWQgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0IHsgVUlOVF9NQVggfTsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmVJ
RDsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRl
T2JqZWN0TWFwOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhY2hlZFBvbHlQ
cm90b1N0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX2FzU3RyaW5n
OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEsMTkgKzgxLDE5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblByb3Rv
RnUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAg
aWYgKHRoaXNWYWx1ZS5pbmhlcml0czxKU0Z1bmN0aW9uPih2bSkpIHsKICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHRoaXNWYWx1ZSk7Ci0gICAgICAg
IEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChmdW5jdGlvbi0+c3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgZnVuY3Rpb24tPnN0cnVjdHVy
ZUlEKCkpOwogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShmdW5jdGlvbi0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0KSkpOwogICAgIH0KIAogICAgIGlmICh0
aGlzVmFsdWUuaW5oZXJpdHM8SW50ZXJuYWxGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgIEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEludGVybmFsRnVuY3Rpb24qPih0aGlzVmFs
dWUpOwotICAgICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQoZnVuY3Rpb24tPnN0cnVj
dHVyZUlEKCkpOworICAgICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIGZ1bmN0
aW9uLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJmdW5j
dGlvbiAiLCBmdW5jdGlvbi0+bmFtZSgpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSkp
OwogICAgIH0KIAogICAgIGlmICh0aGlzVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodGhpc1ZhbHVlKTsKLSAgICAgICAgSW50ZWdyaXR5Ojph
dWRpdFN0cnVjdHVyZUlEKG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIEludGVncml0
eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAg
aWYgKG9iamVjdC0+aXNDYWxsYWJsZSh2bSkpCiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGdsb2JhbE9i
amVjdCwgImZ1bmN0aW9uICIsIG9iamVjdC0+Y2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lLCAiKCkg
e1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAy
ODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEZ1bmN0aW9uUmFyZURh
dGE6OnZpc2l0Q2hpbGRyZW5JbXBsCiAKICAgICByYXJlRGF0YS0+bV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICByYXJlRGF0YS0+bV9pbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAg
dmlzaXRvci5hcHBlbmQocmFyZURhdGEtPm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZUlEKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVu
Y3Rpb25SYXJlRGF0YSwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQpOyB9CiAgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlv
blByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25SYXJlRGF0YSwgbV9p
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUpOyB9CisgICAgc3RhdGljIGlubGluZSBw
dHJkaWZmX3Qgb2Zmc2V0T2ZCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fYm91bmRGdW5jdGlvblN0cnVjdHVyZSk7IH0K
ICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkV4ZWN1dGFibGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25SYXJlRGF0YSwgbV9leGVjdXRhYmxlKTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGVDbGVhcmlu
Z1dhdGNocG9pbnQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25SYXJlRGF0YSwg
bV9hbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludCk7IH0KIAogICAgIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQog
ICAgIHsKQEAgLTExMSw4ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2FsbG9jYXRp
b25Qcm9maWxlV2F0Y2hwb2ludFNldC5zdGFydFdhdGNoaW5nKCk7CiAgICAgfQogCi0gICAgU3Ry
dWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9ib3VuZEZ1bmN0
aW9uU3RydWN0dXJlSUQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1
cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeyBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1
cmVJRC5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7IH0KKyAgICBTdHJ1Y3R1cmUqIGdldEJvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgeyBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBz
dHJ1Y3R1cmUpOyB9CiAKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQogCkBAIC0xNTgsNyArMTYwLDcgQEAgcHJpdmF0
ZToKICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGUgbV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTsKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fYWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50U2V0OwogICAgIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSBt
X2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1
Y3R1cmVJRCBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1
dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFsbG9jYXRpb25Q
cm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50PiBtX2FsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRj
aHBvaW50OwogICAgIGJvb2wgbV9oYXNSZWlmaWVkTGVuZ3RoIDogMTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc093blByb3BlcnR5Q2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNPd25Qcm9wZXJ0eUNhY2hlLmgJKHJl
dmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc093blBy
b3BlcnR5Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZSZXN1bHQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRW50cnksIHJlc3VsdCk7IH0KIAogICAgICAgICBSZWZQdHI8VW5pcXVlZFN0cmlu
Z0ltcGw+IGltcGw7Ci0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOworICAgICAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCB7IDAgfTsKICAgICAgICAgYm9vbCByZXN1bHQgeyBmYWxz
ZSB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN1cGVyU2Ft
cGxlci5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0
cnkuaCIKQEAgLTY2LDcgKzY1LDYgQEAgdm9pZCBpbml0aWFsaXplKCkKICNlbmRpZgogICAgICAg
ICB7CiAgICAgICAgICAgICBPcHRpb25zOjpBbGxvd1VuZmluYWxpemVkQWNjZXNzU2NvcGUgc2Nv
cGU7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbml0aWFs
aXplU3RydWN0dXJlQWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBKSVRPcGVyYXRpb25MaXN0
Ojppbml0aWFsaXplKCk7CiAgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFs
aXplKCk7CiAgICAgICAgICAgICBWTTo6Y29tcHV0ZUNhblVzZUpJVCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgJKHJldmlzaW9uIDI4Njk2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDAsMTIgKzQwLDYgQEAgY2xhc3MgVk07CiB1c2luZyBKSVRXcml0ZVNlcGFyYXRlSGVh
cHNGdW5jdGlvbiA9IHZvaWQgKCopKG9mZl90LCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgQ1BVKEFSTTY0KSAmJiAhQ1BVKEFSTTY0
RSkKLWNvbnN0ZXhwciB1aW50cHRyX3Qgc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplID0gNTEyICog
TUI7Ci0jZWxzZQotY29uc3RleHByIHVpbnRwdHJfdCBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUg
PSAxICogR0I7Ci0jZW5kaWYKLQogc3RydWN0IENvbmZpZyB7CiAgICAgc3RhdGljIENvbmZpZyYg
c2luZ2xldG9uKCk7CiAKQEAgLTg3LDcgKzgxLDYgQEAgc3RydWN0IENvbmZpZyB7CiAgICAgdm9p
ZCogc3RhcnRFeGVjdXRhYmxlTWVtb3J5OwogICAgIHZvaWQqIGVuZEV4ZWN1dGFibGVNZW1vcnk7
CiAgICAgdWludHB0cl90IHN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbDsKLSAgICB1aW50
cHRyX3Qgc3RhcnRPZlN0cnVjdHVyZUhlYXA7CiAKICNpZiBFTkFCTEUoU0VQQVJBVEVEX1dYX0hF
QVApCiAgICAgSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24gaml0V3JpdGVTZXBhcmF0ZUhl
YXBzOwpAQCAtMTI1LDcgKzExOCw2IEBAIGV4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgQ29u
ZmlnIGdfanMKIAogY29uc3RleHByIHNpemVfdCBvZmZzZXRPZkpTQ0NvbmZpZ0luaXRpYWxpemVI
YXNCZWVuQ2FsbGVkID0gb2Zmc2V0b2YoSlNDOjpDb25maWcsIGluaXRpYWxpemVIYXNCZWVuQ2Fs
bGVkKTsKIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwID0gb2Zmc2V0
b2YoSlNDOjpDb25maWcsIGxsaW50LmdhdGVNYXApOwotY29uc3RleHByIHNpemVfdCBvZmZzZXRP
ZkpTQ0NvbmZpZ1N0YXJ0T2ZTdHJ1Y3R1cmVIZWFwID0gb2Zmc2V0b2YoSlNDOjpDb25maWcsIHN0
YXJ0T2ZTdHJ1Y3R1cmVIZWFwKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4
dEFzc3VtaW5nU3RydWMKICAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBpbkNvbnRleHQoKnN0
cnVjdHVyZSwgY29udGV4dCksICIpIik7CiAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBvdXQucHJpbnQoIiwgU3RydWN0dXJlSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1cmVJ
RCgpLmJpdHMoKSk7CisgICAgICAgIG91dC5wcmludCgiLCBTdHJ1Y3R1cmVJRDogIiwgYXNDZWxs
KCktPnN0cnVjdHVyZUlEKCkpOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChpc1RydWUoKSkKICAg
ICAgICAgb3V0LnByaW50KCJUcnVlIik7CkBAIC0zNTcsOSArMzU3LDE1IEBAIHZvaWQgSlNWYWx1
ZTo6ZHVtcEZvckJhY2t0cmFjZShQcmludFN0cmUKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Iih1bnJlc29sdmVkIHN0cmluZykiKTsKICAgICAgICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+aW5o
ZXJpdHM8U3RydWN0dXJlPih2bSkpIHsKICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJl
WyAiLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBJRDogIiwgYXNDZWxsKCkt
PnN0cnVjdHVyZUlEKCkpOworI2VuZGlmCiAgICAgICAgICAgICBvdXQucHJpbnQoIl06ICIsIFJh
d1BvaW50ZXIoYXNDZWxsKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG91dC5w
cmludCgiQ2VsbFsiLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFzc05h
bWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBvdXQucHJpbnQoIiBJRDogIiwg
YXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworI2VuZGlmCiAgICAgICAgICAgICBvdXQucHJpbnQo
Il06ICIsIFJhd1BvaW50ZXIoYXNDZWxsKCkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
aXNUcnVlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBkb3VibGUgSlNDZWxsOjp0
b051bWJlcihKU0dsb2JhbE9iamVjdCogCiAKIEpTT2JqZWN0KiBKU0NlbGw6OnRvT2JqZWN0U2xv
dyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIEludGVncml0eTo6
YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmVJRCgpKTsKICAgICBBU1NFUlQo
IWlzT2JqZWN0KCkpOwogICAgIGlmIChpc1N0cmluZygpKQogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShW
TSYpIGNvbnN0OwogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAg
dm9pZCBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KFN0cnVjdHVyZUlEIGlkKSB7IG1fc3RydWN0dXJl
SUQgPSBpZDsgfQotICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQgPSBT
dHJ1Y3R1cmVJRCgpOyB9CisgICAgdm9pZCBjbGVhclN0cnVjdHVyZSgpIHsgbV9zdHJ1Y3R1cmVJ
RCA9IDA7IH0KIAogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgaW5saW5lVHlwZUZsYWdz
KCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMsMTMgKzEzMywxMiBAQCBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5k
ZXhpbmdNb2RlCiAKIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHVyZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgcmV0dXJu
IHN0cnVjdHVyZSh2bSgpKTsKIH0KIAotLy8gRklYTUU6IERlbGV0ZSB0aGlzIGluIGEgY2xlYW51
cCBmaXh1cC4KLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHVyZShWTSYp
IGNvbnN0CitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoVk0mIHZt
KSBjb25zdAogewotICAgIHJldHVybiBzdHJ1Y3R1cmUoKTsKKyAgICByZXR1cm4gdm0uZ2V0U3Ry
dWN0dXJlKG1fc3RydWN0dXJlSUQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpA
QCAtMzA1LDcgKzMwNCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVy
ZSgKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUo
dm0pLT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1Y3R1cmUodm0pCiAgICAg
ICAgIHx8IHRoaXMtPnN0cnVjdHVyZSh2bSktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkKLSAgICAgICAgfHwgc3RydWN0dXJlLT5pZCgpLmRlY29kZSgpID09IHN0
cnVjdHVyZSk7CisgICAgICAgIHx8IEhlYXA6OmhlYXAodGhpcyktPnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQoc3RydWN0dXJlLT5pZCgpKSA9PSBzdHJ1Y3R1cmUpOwogICAgIG1fc3RydWN0dXJlSUQg
PSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9mbGFncyA9IFR5cGVJbmZvOjptZXJnZUlubGluZVR5
cGVGbGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCksIG1fZmxhZ3Mp
OwogICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyODEsMTYgKzIyODEsMTMgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwoSgogICAgIGZvciAoYXV0byYgcHJvcGVydHkg
OiB0aGlzT2JqZWN0LT5tX2xpbmtUaW1lQ29uc3RhbnRzKQogICAgICAgICBwcm9wZXJ0eS52aXNp
dCh2aXNpdG9yKTsKIAotI2RlZmluZSBWSVNJVF9TSU1QTEVfVFlQRV9QUk9UT1RZUEUoQ2FwaXRh
bE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3Rv
dHlwZUJhc2UsIGZlYXR1cmVGbGFnKSBpZiAoZmVhdHVyZUZsYWcpIFwKKyNkZWZpbmUgVklTSVRf
U0lNUExFX1RZUEUoQ2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VU
eXBlLCBqc05hbWUsIHByb3RvdHlwZUJhc2UsIGZlYXR1cmVGbGFnKSBpZiAoZmVhdHVyZUZsYWcp
IHsgXAogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tXyAjIyBsb3dlck5hbWUg
IyMgUHJvdG90eXBlKTsgXAotCi0jZGVmaW5lIFZJU0lUX1NJTVBMRV9UWVBFX1NUUlVDVFVSRShD
YXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwg
cHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIGlmIChmZWF0dXJlRmxhZykgXAogICAgICAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZSk7
IFwKKyAgICB9CiAKLSAgICBGT1JfRUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFKFZJU0lUX1NJTVBM
RV9UWVBFX1NUUlVDVFVSRSkKLSAgICBGT1JfRUFDSF9CVUlMVElOX0RFUklWRURfSVRFUkFUT1Jf
VFlQRShWSVNJVF9TSU1QTEVfVFlQRV9TVFJVQ1RVUkUpCi0gICAgRk9SX0VBQ0hfU0lNUExFX0JV
SUxUSU5fVFlQRShWSVNJVF9TSU1QTEVfVFlQRV9QUk9UT1RZUEUpCi0gICAgRk9SX0VBQ0hfQlVJ
TFRJTl9ERVJJVkVEX0lURVJBVE9SX1RZUEUoVklTSVRfU0lNUExFX1RZUEVfUFJPVE9UWVBFKQor
ICAgIEZPUl9FQUNIX1NJTVBMRV9CVUlMVElOX1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCisgICAg
Rk9SX0VBQ0hfQlVJTFRJTl9ERVJJVkVEX0lURVJBVE9SX1RZUEUoVklTSVRfU0lNUExFX1RZUEUp
CiAKICNkZWZpbmUgVklTSVRfTEFaWV9UWVBFKENhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Bl
ck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykg
aWYgKGZlYXR1cmVGbGFnKSBcCiAgICAgICAgIHRoaXNPYmplY3QtPm1fICMjIHByb3Blck5hbWUg
IyMgU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzYsNyArMzc2LDIwIEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3dpdGhTY29wZVN0cnVjdHVyZTsKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9zdHJpY3RFdmFsQWN0
aXZhdGlvblN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2xleGljYWxF
bnZpcm9ubWVudFN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0
cnVjdHVyZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2RpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX3Njb3BlZEFyZ3VtZW50c1N0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2Nsb25lZEFyZ3VtZW50c1N0cnVjdHVyZTsKKworICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fb2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3I7CisgICAg
ICAgIAorICAgIC8vIExpc3RzIHRoZSBhY3R1YWwgc3RydWN0dXJlcyB1c2VkIGZvciBoYXZpbmcg
dGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFwZXMuCisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtOdW1iZXJPZkFy
cmF5SW5kZXhpbmdNb2Rlc107CisgICAgLy8gTGlzdHMgdGhlIHN0cnVjdHVyZXMgd2Ugc2hvdWxk
IHVzZSBkdXJpbmcgYWxsb2NhdGlvbiBmb3IgdGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFw
ZXMuCisgICAgLy8gVGhlc2Ugc3RydWN0dXJlcyB3aWxsIGRpZmZlciBmcm9tIHRoZSBvcmlnaW5h
bHMgbGlzdCBhYm92ZSB3aGVuIHdlIGFyZSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0Fs
bG9jYXRpb25bTnVtYmVyT2ZBcnJheUluZGV4aW5nTW9kZXNdOworCiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVy
ZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlOwpAQCAtMzg4LDU3ICs0MDEsNDIgQEAg
cHVibGljOgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2ds
aWJDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9i
amVjdCwgU3RydWN0dXJlPiBtX2dsaWJXcmFwcGVyT2JqZWN0U3RydWN0dXJlOwogI2VuZGlmCisg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJl
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGVlU3RydWN0dXJlOwogCi0gICAg
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9sZXhpY2FsRW52aXJvbm1lbnRTdHJ1Y3R1cmU7Ci0g
ICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmU7Ci0g
ICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmU7Ci0g
ICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmU7Ci0K
LSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX29iamVjdFN0cnVjdHVyZUZvck9iamVjdENv
bnN0cnVjdG9yOwotCi0gICAgLy8gTGlzdHMgdGhlIGFjdHVhbCBzdHJ1Y3R1cmVzIHVzZWQgZm9y
IGhhdmluZyB0aGVzZSBwYXJ0aWN1bGFyIGluZGV4aW5nIHNoYXBlcy4KLSAgICBXcml0ZUJhcnJp
ZXJTdHJ1Y3R1cmVJRCBtX29yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBlW051
bWJlck9mQXJyYXlJbmRleGluZ01vZGVzXTsKLSAgICAvLyBMaXN0cyB0aGUgc3RydWN0dXJlcyB3
ZSBzaG91bGQgdXNlIGR1cmluZyBhbGxvY2F0aW9uIGZvciB0aGVzZSBwYXJ0aWN1bGFyIGluZGV4
aW5nIHNoYXBlcy4KLSAgICAvLyBUaGVzZSBzdHJ1Y3R1cmVzIHdpbGwgZGlmZmVyIGZyb20gdGhl
IG9yaWdpbmFscyBsaXN0IGFib3ZlIHdoZW4gd2UgYXJlIGhhdmluZyBhIGJhZCB0aW1lLgotICAg
IFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fYXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1NoYXBl
RHVyaW5nQWxsb2NhdGlvbltOdW1iZXJPZkFycmF5SW5kZXhpbmdNb2Rlc107Ci0KLSAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmU7Ci0gICAg
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9jYWxsZWVTdHJ1Y3R1cmU7Ci0KLSAgICBXcml0ZUJh
cnJpZXJTdHJ1Y3R1cmVJRCBtX2hvc3RGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2hvc3RGdW5jdGlvblN0cnVjdHVyZTsKIAogICAgIHN0cnVjdCBGdW5j
dGlvblN0cnVjdHVyZXMgewotICAgICAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBhcnJvd0Z1
bmN0aW9uU3RydWN0dXJlOwotICAgICAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBzbG9wcHlG
dW5jdGlvblN0cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgc3RyaWN0
RnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IGFycm93
RnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHNsb3Bw
eUZ1bmN0aW9uU3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJp
Y3RGdW5jdGlvblN0cnVjdHVyZTsKICAgICB9OwogICAgIEZ1bmN0aW9uU3RydWN0dXJlcyBtX2J1
aWx0aW5GdW5jdGlvbnM7CiAgICAgRnVuY3Rpb25TdHJ1Y3R1cmVzIG1fb3JkaW5hcnlGdW5jdGlv
bnM7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKLSAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwotICAgIFdy
aXRlQmFycmllclN0cnVjdHVyZUlEIG1fcmVnRXhwU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKLSAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2dlbmVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJp
ZXJTdHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXJyYXlJdGVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX21hcEl0ZXJhdG9yU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0cnVj
dHVyZUlEIG1fc2V0SXRlcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJl
SUQgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQgbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZTsKLSAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmU7
Ci0KICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9ib3VuZEZ1
bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0
dXJlPiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU3RydWN0dXJl
OwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX25hdGl2ZVN0
ZEZ1bmN0aW9uU3RydWN0dXJlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fZnVuY3Rpb25OYW1lT2Zm
c2V0OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc2hhZG93UmVhbG1PYmplY3RTdHJ1
Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPEFzeW5jRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5bmNGdW5jdGlvblBy
b3RvdHlwZTsKICAgICBXcml0ZUJhcnJpZXI8QXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlw
ZT4gbV9hc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2dlbmVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2FzeW5jR2VuZXJhdG9yU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYXJyYXlJdGVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX21hcEl0ZXJhdG9yU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fc2V0SXRlcmF0b3JTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU+IG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmU7CiAgICAgTGF6
eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fZGF0YVByb3BlcnR5RGVzY3Jp
cHRvck9iamVjdFN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0
cnVjdHVyZT4gbV9hY2Nlc3NvclByb3BlcnR5RGVzY3JpcHRvck9iamVjdFN0cnVjdHVyZTsKKyAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZTsK
KyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNoZXNBcnJheVdpdGhJbmRp
Y2VzU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwTWF0Y2hl
c0luZGljZXNBcnJheVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZT4gbV9tb2R1bGVSZWNvcmRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpT
R2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJl
OwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3Byb3h5T2Jq
ZWN0U3RydWN0dXJlOwpAQCAtNDQ2LDE5ICs0NDQsMTUgQEAgcHVibGljOgogICAgIExhenlQcm9w
ZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlOwog
ICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX3NoYXJlZEFycmF5QnVmZmVyU3RydWN0dXJlOwogCi0j
ZGVmaW5lIERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9QUk9UT1RZUEUoY2FwaXRhbE5h
bWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3RvdHlw
ZUJhc2UsIGZlYXR1cmVGbGFnKSBcCi0gICAgV3JpdGVCYXJyaWVyPGNhcGl0YWxOYW1lICMjIFBy
b3RvdHlwZT4gbV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZTsKLQotI2RlZmluZSBERUZJTkVf
U1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfU1RSVUNUVVJFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUs
IHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJl
RmxhZykgXAotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fICMjIHByb3Blck5hbWUgIyMg
U3RydWN0dXJlOworI2RlZmluZSBERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEUoY2FwaXRh
bE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3Rv
dHlwZUJhc2UsIGZlYXR1cmVGbGFnKSBcCisgICAgV3JpdGVCYXJyaWVyPGNhcGl0YWxOYW1lICMj
IFByb3RvdHlwZT4gbV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZTsgXAorICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fICMjIHByb3Blck5hbWUgIyMgU3RydWN0dXJlOwogCiAjZGVmaW5l
IERFRklORV9TVE9SQUdFX0ZPUl9MQVpZX1RZUEUoY2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwgcHJv
cGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3RvdHlwZUJhc2UsIGZlYXR1cmVGbGFn
KSBcCiAgICAgTGF6eUNsYXNzU3RydWN0dXJlIG1fICMjIHByb3Blck5hbWUgIyMgU3RydWN0dXJl
OwogCi0gICAgRk9SX0VBQ0hfU0lNUExFX0JVSUxUSU5fVFlQRShERUZJTkVfU1RPUkFHRV9GT1Jf
U0lNUExFX1RZUEVfU1RSVUNUVVJFKQotICAgIEZPUl9FQUNIX0JVSUxUSU5fREVSSVZFRF9JVEVS
QVRPUl9UWVBFKERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9TVFJVQ1RVUkUpCi0gICAg
Rk9SX0VBQ0hfU0lNUExFX0JVSUxUSU5fVFlQRShERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZ
UEVfUFJPVE9UWVBFKQotICAgIEZPUl9FQUNIX0JVSUxUSU5fREVSSVZFRF9JVEVSQVRPUl9UWVBF
KERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9QUk9UT1RZUEUpCisgICAgRk9SX0VBQ0hf
U0lNUExFX0JVSUxUSU5fVFlQRShERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEUpCisgICAg
Rk9SX0VBQ0hfQlVJTFRJTl9ERVJJVkVEX0lURVJBVE9SX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9S
X1NJTVBMRV9UWVBFKQogICAgIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseU1vZHVsZVJlY29y
ZFN0cnVjdHVyZTsKQEAgLTQ3MCw4ICs0NjQsNyBAQCBwdWJsaWM6CiAKICAgICBGT1JfRUFDSF9M
QVpZX0JVSUxUSU5fVFlQRShERUZJTkVfU1RPUkFHRV9GT1JfTEFaWV9UWVBFKQogCi0jdW5kZWYg
REVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFX1BST1RPVFlQRQotI3VuZGVmIERFRklORV9T
VE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9TVFJVQ1RVUkUKKyN1bmRlZiBERUZJTkVfU1RPUkFHRV9G
T1JfU0lNUExFX1RZUEUKICN1bmRlZiBERUZJTkVfU1RPUkFHRV9GT1JfTEFaWV9UWVBFCiAKICAg
ICBXcml0ZUJhcnJpZXI8R2V0dGVyU2V0dGVyPiBtX3NwZWNpZXNHZXR0ZXJTZXR0ZXI7CkBAIC01
ODEsNyArNTc0LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBtX2V2YWxFbmFibGVkIHsgdHJ1ZSB9
OwogICAgIGJvb2wgbV93ZWJBc3NlbWJseUVuYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX25l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2ggeyAxIH07CiAgICAgU3RyaW5nIG1fZXZhbERpc2FibGVkRXJyb3JN
ZXNzYWdlOwogICAgIFN0cmluZyBtX3dlYkFzc2VtYmx5RGlzYWJsZWRFcnJvck1lc3NhZ2U7CkBA
IC0xMjAyLDYgKzExOTQsNyBAQCBwcml2YXRlOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgY2xlYXJSYXJlRGF0YShKU0NlbGwqKTsKIAorICAgIGJvb2wgbV9uZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBS
ZXRhaW5QdHI8SlNXcmFwcGVyTWFwPiBtX3dyYXBwZXJNYXA7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY5LDkgKzM2OSw5IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVj
dDo6dmlzaXQKICAgICAvLyBodHRwczovL3BkZnMuc2VtYW50aWNzY2hvbGFyLm9yZy8zNDNmLzcx
ODJjZGU3NjY5Y2EyYTdkZTNkYzAxMTI3OTI3ZjM4NGVmNy5wZGYKICAgICAKICAgICBTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgaWYgKHN0cnVjdHVy
ZUlELmlzTnVrZWQoKSkKKyAgICBpZiAoaXNOdWtlZChzdHJ1Y3R1cmVJRCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAg
IHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgbWF4T2Zmc2V0
ID0gc3RydWN0dXJlLT5tYXhPZmZzZXQoKTsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2Rl
OwogICAgIERlcGVuZGVuY3kgaW5kZXhpbmdNb2RlRGVwZW5kZW5jeSA9IHN0cnVjdHVyZS0+ZmVu
Y2VkSW5kZXhpbmdNb2RlKGluZGV4aW5nTW9kZSk7CkBAIC0xMTY5LDcgKzExNjksNyBAQCBCdXR0
ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVk
U3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRo
aXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1
Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmdldFN0
cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCBUcmFuc2l0
aW9uS2luZDo6QWxsb2NhdGVVbmRlY2lkZWQpOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0
ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVy
ZSh2bSwgbmV3U3RydWN0dXJlKTsKQEAgLTExODMsNyArMTE4Myw3IEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAg
ICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQp
OwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlSW50MzIp
OwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBu
ZXdCdXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKQEAgLTEx
OTcsNyArMTE5Nyw3IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWEK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07
KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKSA9
IFBOYU47CiAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJ
RCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2Rl
KCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3Ry
dWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9j
YXRlRG91YmxlKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1
Y3R1cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVy
ZSk7CkBAIC0xMjExLDcgKzEyMTEsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCkuYXQodGhpcywg
aSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZUlEIG9s
ZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRT
dHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIG51a2VT
dHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkp
OwogICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKQEAgLTEyNDEsNyArMTI0MSw3
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKIHsKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0pOwogICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+
c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0
dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5n
VHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVz
KG9sZFR5cGUpKTsKIApAQCAtMTMzMSw3ICsxMzMxLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlSUQgb2xkU3Ry
dWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVj
dHVyZSwgdHJhbnNpdGlvbik7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwg
b2xkU3RydWN0dXJlSUQsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xMzkwLDcgKzEzOTAsNyBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZUlEIG9s
ZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRT
dHJ1Y3R1cmUsIHRyYW5zaXRpb24pOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHko
dm0sIG9sZFN0cnVjdHVyZUlELCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CiAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1
cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgb2xkU3RydWN0dXJlLCB0cmFuc2l0aW9uKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0
dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwogICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKQEAgLTE1MjIsNyArMTUyMiw3IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKIAogICAgIEFTU0VSVChuZXdT
dG9yYWdlLT5idXR0ZXJmbHkoKSAhPSBidXR0ZXJmbHkpOwogICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1
Y3R1cmUsIHRyYW5zaXRpb24pOwogCiAgICAgLy8gRW5zdXJlIG5ldyBCdXR0ZXJmbHkgaW5pdGlh
bGl6YXRpb24gaXMgY29ycmVjdGx5IGRvbmUgYmVmb3JlIGV4cG9zaW5nIGl0IHRvIHRoZSBjb25j
dXJyZW50IHRocmVhZHMuCkBAIC0yMDI0LDcgKzIwMjQsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3RDdXN0b21HZXR0ZXJTZXR0CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3JPclZhbHVlKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0cnVj
dHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3RydWN0dXJlKTsKICAgICBwdXREaXJl
Y3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBAIC0yMDUxLDcgKzIwNTEsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yCiB7CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpOwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3RydWN0dXJlKTsKICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgYWNjZXNzb3IpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY3LDcgKzEzNjcsNyBAQCBpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2CiBpbmxpbmUgdm9pZCBKU09iamVjdDo6
bnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZUlEIG9sZFN0cnVj
dHVyZUlELCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBpZiAoaXNYODYoKSB8fCB2bS5o
ZWFwLm11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSB7Ci0gICAgICAgIHNldFN0cnVjdHVyZUlERGly
ZWN0bHkob2xkU3RydWN0dXJlSUQubnVrZSgpKTsKKyAgICAgICAgc2V0U3RydWN0dXJlSUREaXJl
Y3RseShudWtlKG9sZFN0cnVjdHVyZUlEKSk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CiAgICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTE1MDAsNiArMTUwMCw3IEBAIHRlbXBsYXRl
PGJvb2wgY2hlY2tOdWxsU3RydWN0dXJlPgogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGdldFZN
KGdsb2JhbE9iamVjdCk7CisgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkgewpAQCAtMTUxNCwxMCAr
MTUxNSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5CiAgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0LT5nZXROb25JbmRleFByb3BlcnR5U2xvdChnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG9iamVj
dC0+dHlwZSgpICE9IFByb3h5T2JqZWN0VHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLmRlY29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGNoZWNrTnVsbFN0cnVjdHVyZSAmJiBV
TkxJS0VMWSghc3RydWN0dXJlKSkKLSAgICAgICAgICAgIENSQVNIX1dJVEhfSU5GTyhvYmplY3Qt
PnR5cGUoKSwgb2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLmJpdHMoKSk7CisgICAgICAgICAgICBDUkFT
SF9XSVRIX0lORk8ob2JqZWN0LT50eXBlKCksIG9iamVjdC0+c3RydWN0dXJlSUQoKSwgc3RydWN0
dXJlSURUYWJsZS5zaXplKCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChvYmplY3QtPmdldE93bk5v
bkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDkgKzExMCwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3Bl
cnR5CiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlz
OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpLmRlY29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAg
IGJvb2wgaGFzU2xvdCA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKGhhc1Nsb3QpCkBAIC0xNTAsOSArMTUxLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6Z2V0Tm9uSW5kZXgKIAogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIHN0
cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKTsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlSUQoKS5kZWNvZGUoKTsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVy
ZUlEKCkpOwogICAgICAgICBpZiAoTElLRUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYg
KG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNyw3ICsy
MTksNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgQVNT
RVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvcikpOwogICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0
ZXIoKSk7CiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3Ry
dWN0dXJlSUQpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHByZXBhcmVUb1B1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHN0cnVjdHVy
ZUlELCBzdHJ1Y3R1cmUpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCkBAIC0zMjYsNyAr
MzI4LDcgQEAgQUxXQVlTX0lOTElORSBBU0NJSUxpdGVyYWwgSlNPYmplY3Q6OnB1dAogICAgIEFT
U0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFN0cnVjdHVyZUlEIHN0cnVj
dHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoaW5kZXhp
bmdNb2RlKCkpKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZQogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgaW5kZXhlZExlbmd0aCwgdWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGll
cywgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQg
cHJvcGVydHlOYW1lc1NpemUpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1l
cmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHBy
b3BlcnR5TmFtZXNCdWZmZXIpCi0gICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHZtLCB0aGlzLCBz
dHJ1Y3R1cmUsIFdyaXRlQmFycmllclN0cnVjdHVyZUlEOjpNYXlCZU51bGwpCisgICAgLCBtX2Nh
Y2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aWQoKSA6IDApCiAgICAgLCBt
X2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkKICAgICAsIG1fZW5kU3RydWN0dXJlUHJvcGVy
dHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzKQogICAgICwgbV9lbmRHZW5lcmljUHJv
cGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkKQEAgLTg2LDcgKzg2LDExIEBAIHZvaWQgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICAgICAgdmlzaXRvci5tYXJrQXV4
aWxpYXJ5KHByb3BlcnR5TmFtZXMpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZChwcm9wZXJ0eU5h
bWVzLCBwcm9wZXJ0eU5hbWVzICsgdGhpc09iamVjdC0+c2l6ZU9mUHJvcGVydHlOYW1lcygpKTsK
ICAgICB9Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jYWNoZWRTdHJ1Y3R1cmVJ
RCk7CisKKyAgICBpZiAodGhpc09iamVjdC0+Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAgICAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQodm0uZ2V0U3RydWN0dXJlKHRoaXNPYmplY3QtPmNhY2hlZFN0cnVjdHVyZUlEKCkpKTsKKyAg
ICB9CiB9CiAKIERFRklORV9WSVNJVF9DSElMRFJFTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Ip
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MiwxMCArNzIsMTEgQEAgcHVibGljOgogCiAgICAgU3RydWN0dXJlKiBjYWNoZWRT
dHJ1Y3R1cmUoVk0mIHZtKSBjb25zdAogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZtKTsK
LSAgICAgICAgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQuZ2V0KCk7CisgICAgICAgIGlmICgh
bV9jYWNoZWRTdHJ1Y3R1cmVJRCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG1fY2FjaGVkU3RydWN0dXJl
SUQpOwogICAgIH0KLSAgICBTdHJ1Y3R1cmVJRCBjYWNoZWRTdHJ1Y3R1cmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQudmFsdWUoKTsgfQorICAgIFN0cnVjdHVyZUlEIGNh
Y2hlZFN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmVJRDsgfQog
ICAgIHVpbnQzMl90IGluZGV4ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ZWRMZW5n
dGg7IH0KICAgICB1aW50MzJfdCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4OyB9CiAgICAgdWludDMyX3QgZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4OyB9CkBAIC0xMDYsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IgaXMgaW1tdXRhYmxlIGRhdGEgc3RydWN0dXJlLCB3aGljaCBhbGxvd3MgVk0g
dG8gY2FjaGUgdGhlIGVtcHR5IG9uZS4KICAgICAvLyBBZnRlciBpbnN0YW50aWF0aW5nIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciwgd2UgbXVzdCBub3QgY2hhbmdlIGFueSBmaWVsZHMuCiAgICAg
QXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVz
OwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CisgICAg
U3RydWN0dXJlSUQgbV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJfdCBtX2luZGV4ZWRM
ZW5ndGg7CiAgICAgdWludDMyX3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4OwogICAgIHVp
bnQzMl90IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDI4Njk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCB0b1RoaXNOdW1iZXIoVgogICAgIH0KIAogICAgIGlmIChhdXRvKiBudW1iZXJPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PE51bWJlck9iamVjdCo+KHZtLCB0aGlzVmFsdWUpKSB7Ci0gICAgICAgIElu
dGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChudW1iZXJPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwor
ICAgICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIG51bWJlck9iamVjdC0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgICAgIHggPSBudW1iZXJPYmplY3QtPmludGVybmFsVmFsdWUoKS5h
c051bWJlcigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKG9iamVjdFByb3RvRnVuYwogICAgIEpTT2JqZWN0KiB2YWx1ZU9iaiA9IHRoaXNWYWx1
ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdmFsdWVPYmopKQog
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQodmFsdWVPYmotPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRT
dHJ1Y3R1cmVJRChnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2JqKTsKIH0KIApAQCAtMzYxLDcgKzM2
MSw3IEBAIEpTU3RyaW5nKiBvYmplY3RQcm90b3R5cGVUb1N0cmluZyhKU0dsb2IKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgSW50ZWdyaXR5Ojph
dWRpdFN0cnVjdHVyZUlEKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0
eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAg
YXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVjaWFsUHJv
cGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZyk7CiAgICAgaWYgKHJl
c3VsdCkKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04ocmVnRXhwUHJvdG9GdW5jCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBhc09i
amVjdCh0aGlzVmFsdWUpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0s
IHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogCiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tl
ciBjaGVja2VyKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsNyArOTYwLDcgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKHN0cmluZ1Byb3RvRnVuYwogICAgIC8vIEFsc28gdXNlZCBm
b3IgdmFsdWVPZi4KIAogICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc1ZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNWYWx1ZSk7CiAgICAgfQogCkBAIC05NjgsNyArOTY4LDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKHN0cmluZ1Byb3RvRnVuYwogICAgIGlmICghc3RyaW5nT2JqZWN0KQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIElu
dGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChzdHJpbmdPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwor
ICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgc3RyaW5nT2JqZWN0LT5zdHJ1Y3R1
cmVJRCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ09iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAg
aW5saW5lIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKCkgewogCiBTdHJ1Y3R1cmU6OlN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkK
ICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9i
bG9iKFN0cnVjdHVyZUlEOjplbmNvZGUodGhpcyksIGluZGV4aW5nVHlwZSwgdHlwZUluZm8pCisg
ICAgLCBtX2Jsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwg
aW5kZXhpbmdUeXBlLCB0eXBlSW5mbykKICAgICAsIG1fb3V0T2ZMaW5lVHlwZUZsYWdzKHR5cGVJ
bmZvLm91dE9mTGluZVR5cGVGbGFncygpKQogICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVD
YXBhY2l0eSkKICAgICAsIG1fYml0RmllbGQoMCkKQEAgLTI2NCw3ICsyNjQsNyBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIENyZWF0aW5nRWFyCiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBp
bnZhbGlkT2Zmc2V0KTsKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJbmZvKFN0cnVj
dHVyZVR5cGUsIFN0cnVjdHVyZUZsYWdzKTsKLSAgICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJREJsb2Io
U3RydWN0dXJlSUQ6OmVuY29kZSh0aGlzKSwgMCwgdHlwZUluZm8pOworICAgIG1fYmxvYiA9IFN0
cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0ZUlEKHRoaXMp
LCAwLCB0eXBlSW5mbyk7CiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRP
ZkxpbmVUeXBlRmxhZ3MoKTsKIAogICAgIEFTU0VSVChoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgIW1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0
ZXJPclJlYWRvbmx5UHJvcGVydGllcygpKTsKQEAgLTMwMSw3ICszMDEsNyBAQCBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZh
bGlkT2Zmc2V0KTsKICAKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHByZXZpb3VzLT50eXBlSW5m
bygpOwotICAgIG1fYmxvYiA9IFN0cnVjdHVyZUlEQmxvYihTdHJ1Y3R1cmVJRDo6ZW5jb2RlKHRo
aXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBlSW5mbyk7
CisgICAgbV9ibG9iID0gU3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmFsbG9jYXRlSUQodGhpcyksIHByZXZpb3VzLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5
KCksIHR5cGVJbmZvKTsKICAgICBtX291dE9mTGluZVR5cGVGbGFncyA9IHR5cGVJbmZvLm91dE9m
TGluZVR5cGVGbGFncygpOwogCiAgICAgQVNTRVJUKCFwcmV2aW91cy0+dHlwZUluZm8oKS5zdHJ1
Y3R1cmVJc0ltbW9ydGFsKCkpOwpAQCAtMzI2LDYgKzMyNiw3IEBAIFN0cnVjdHVyZTo6flN0cnVj
dHVyZSgpCiAKICAgICBpZiAoaXNCcmFuZGVkU3RydWN0dXJlKCkpCiAgICAgICAgIHN0YXRpY19j
YXN0PEJyYW5kZWRTdHJ1Y3R1cmUqPih0aGlzKS0+ZGVzdHJ1Y3QoKTsKKyAgICBIZWFwOjpoZWFw
KHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZGVhbGxvY2F0ZUlEKHRoaXMsIG1fYmxvYi5zdHJ1
Y3R1cmVJRCgpKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpA
QCAtOTA5LDcgKzkxMCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFy
eVMKICAgICAKICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0p
OwogICAgIAotICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShpZCgpLm51a2UoKSk7
CisgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KG51a2UoaWQoKSkpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAKICAgICBzaXplX3QgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNp
dHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwpAQCAtMTM2OSw3ICsxMzcwLDcgQEAgUmVm
PFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dQogCiB2b2lkIFN0cnVjdHVyZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGF1dG8qIHN0cnVjdHVyZUlEID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaWQoKS5iaXRzKCkpOworICAgIGF1dG8qIHN0cnVjdHVy
ZUlEID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaWQoKSk7CiAgICAgb3V0LnByaW50KFJhd1Bv
aW50ZXIodGhpcyksICI6WyIsIFJhd1BvaW50ZXIoc3RydWN0dXJlSUQpLAogICAgICAgICAiLyIs
ICh1aW50MzJfdCkocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZUlEKSksICIs
ICIsCiAgICAgICAgIGNsYXNzSW5mbygpLT5jbGFzc05hbWUsICIsICgiLCBpbmxpbmVTaXplKCks
ICIvIiwgaW5saW5lQ2FwYWNpdHkoKSwgIiwgIiwKQEAgLTE0NjksNyArMTQ3MCw3IEBAIHVpbnRw
dHJfdCBTdHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5TmFtZUUKICAgICByZXR1cm4gcmFyZURhdGEo
KS0+Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvckFuZEZsYWcoKTsKIH0KIAotYm9vbCBTdHJ1
Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYpIGNvbnN0Citib29sIFN0
cnVjdHVyZTo6Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSkgY29uc3QKIHsK
ICAgICBpZiAoIXRoaXMtPmNhbkNhY2hlT3duUHJvcGVydHlOYW1lcygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDgxLDcgKzE0ODIsNyBAQCBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVQ
cm9wZXJ0eU5hbWVFbnVtCiAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJl
bnRTdHJ1Y3R1cmVJRDsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRl
Y29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5jYW5DYWNoZU93blByb3BlcnR5
TmFtZXMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY3VycmVudFN0cnVj
dHVyZUlEKys7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNiBAQCBwdWJsaWM6CiAKICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMgPSAw
OwogICAgIAogICAgIGVudW0gUG9seVByb3RvVGFnIHsgUG9seVByb3RvIH07CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSBOb25B
cnJheSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwKTsKQEAgLTE2NSw3ICsxNjQsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgdmFsaWRhdGVGbGFncygpOwogCiBwdWJsaWM6Ci0gICAgU3RydWN0
dXJlSUQgaWQoKSBjb25zdCB7IEFTU0VSVChtX2Jsb2Iuc3RydWN0dXJlSUQoKSA9PSBTdHJ1Y3R1
cmVJRDo6ZW5jb2RlKHRoaXMpKTsgcmV0dXJuIG1fYmxvYi5zdHJ1Y3R1cmVJRCgpOyB9CisgICAg
U3RydWN0dXJlSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Iuc3RydWN0dXJlSUQoKTsgfQog
ICAgIGludDMyX3Qgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9iLmJsb2JFeGNsdWRpbmdTdHJ1Y3R1cmVJRCgpOyB9CiAgICAgaW50NjRfdCBpZEJsb2IoKSBj
b25zdCB7IHJldHVybiBtX2Jsb2IuYmxvYigpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0dXJlQ2hh
aW46OmNyZWF0ZShWCiAgICAgKytzaXplOyAvLyBTZW50aW5lbCBudWxscHRyLgogICAgIHNpemVf
dCBieXRlcyA9IENoZWNrZWQ8c2l6ZV90PihzaXplKSAqIHNpemVvZihTdHJ1Y3R1cmVJRCk7CiAg
ICAgdm9pZCogdmVjdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoKS5hbGxv
Y2F0ZSh2bSwgYnl0ZXMsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
LSAgICBzdGF0aWNfYXNzZXJ0KCFTdHJ1Y3R1cmVJRCgpLmJpdHMoKSwgIk1ha2Ugc3VyZSB0aGUg
dmFsdWUgd2UncmUgZ29pbmcgdG8gbWVtY3B5IGJlbG93IG1hdGNoZXMgdGhlIGRlZmF1bHQgU3Ry
dWN0dXJlSUQiKTsKICAgICBtZW1zZXQodmVjdG9yLCAwLCBieXRlcyk7CiAgICAgU3RydWN0dXJl
Q2hhaW4qIGNoYWluID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hhaW4+
KHZtKSkgU3RydWN0dXJlQ2hhaW4odm0sIHZtLnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgp
LCBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVJRCo+KHZlY3RvcikpOwogICAgIGNoYWluLT5maW5pc2hD
cmVhdGlvbih2bSwgaGVhZCk7CkBAIC03NCw5ICs3MywxMCBAQCB2b2lkIFN0cnVjdHVyZUNoYWlu
Ojp2aXNpdENoaWxkcmVuSW1wbChKCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fdmVjdG9yLmdl
dCgpKTsKKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CiAgICAgZm9yIChhdXRvKiBjdXJyZW50
ID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KCk7ICpjdXJyZW50OyArK2N1cnJlbnQpIHsKICAg
ICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSAqY3VycmVudDsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKHN0cnVjdHVyZSk7CiAgICAgfQogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSUQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJRC5oCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJRC5oCShub25leGlz
dGVudCkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiSlNDQ29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNp
bmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBT
dHJ1Y3R1cmU7Ci0KLWNvbnN0ZXhwciBDUFVSZWdpc3RlciBzdHJ1Y3R1cmVJRE1hc2sgPSBzdHJ1
Y3R1cmVIZWFwQWRkcmVzc1NpemUgLSAxOwotCi1jbGFzcyBTdHJ1Y3R1cmVJRCB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBudWtlZFN0cnVjdHVyZUlEQml0ID0gMTsK
LQotICAgIFN0cnVjdHVyZUlEKCkgPSBkZWZhdWx0OwotICAgIFN0cnVjdHVyZUlEKFN0cnVjdHVy
ZUlEIGNvbnN0JikgPSBkZWZhdWx0OwotICAgIFN0cnVjdHVyZUlEJiBvcGVyYXRvcj0oU3RydWN0
dXJlSUQgY29uc3QmKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdHJ1Y3R1cmVJRCBudWtlKCkgY29uc3Qg
eyByZXR1cm4gU3RydWN0dXJlSUQobV9iaXRzIHwgbnVrZWRTdHJ1Y3R1cmVJREJpdCk7IH0KLSAg
ICBib29sIGlzTnVrZWQoKSBjb25zdCB7IHJldHVybiBtX2JpdHMgJiBudWtlZFN0cnVjdHVyZUlE
Qml0OyB9Ci0gICAgU3RydWN0dXJlSUQgZGVjb250YW1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIFN0
cnVjdHVyZUlEKG1fYml0cyAmIH5udWtlZFN0cnVjdHVyZUlEQml0KTsgfQotCi0gICAgaW5saW5l
IFN0cnVjdHVyZSogZGVjb2RlKCkgY29uc3Q7Ci0gICAgc3RhdGljIFN0cnVjdHVyZUlEIGVuY29k
ZShjb25zdCBTdHJ1Y3R1cmUqKTsKLQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIW1fYml0czsgfQotICAgIGJvb2wgb3BlcmF0b3I9PShTdHJ1Y3R1cmVJRCBj
b25zdCYgb3RoZXIpIGNvbnN0ICB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KFN0cnVjdHVyZUlEIGNvbnN0JiBvdGhlcikgY29uc3QgIHsgcmV0
dXJuIG1fYml0cyAhPSBvdGhlci5tX2JpdHM7IH0KLSAgICBjb25zdGV4cHIgdWludDMyX3QgYml0
cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQotCi0gICAgU3RydWN0dXJlSUQoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fYml0cyhudWtlZFN0cnVjdHVyZUlEQml0KSB7IH0K
LSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnRoaXMg
PT0gU3RydWN0dXJlSUQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgU3RydWN0dXJlSUQodWludDMyX3QgYml0cykgOiBtX2JpdHMoYml0cykg
eyB9Ci0KLSAgICB1aW50MzJfdCBtX2JpdHMgeyAwIH07Ci19Owotc3RhdGljX2Fzc2VydChzaXpl
b2YoU3RydWN0dXJlSUQpID09IHNpemVvZih1aW50MzJfdCkpOwotCi0jaWYgQ1BVKEFERFJFU1M2
NCkKLQotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZUlEOjpkZWNvZGUoKSBjb25z
dAotewotICAgIC8vIFRha2UgY2FyZSB0byBvbmx5IHVzZSB0aGUgYml0cyBmcm9tIG1fYml0cyBp
biB0aGUgc3RydWN0dXJlJ3MgYWRkcmVzcyByZXNlcnZhdGlvbi4KLSAgICBBU1NFUlQoZGVjb250
YW1pbmF0ZSgpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihkZWNvbnRhbWluYXRlKCkubV9iaXRzKSAmIHN0cnVjdHVyZUlE
TWFzaykgKyBnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVhcCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgU3RydWN0dXJlSUQgU3RydWN0dXJlSUQ6OmVuY29kZShjb25zdCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLXsKLSAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBBU1NFUlQoZ19qc2NDb25m
aWcuc3RhcnRPZlN0cnVjdHVyZUhlYXAgPD0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0
cnVjdHVyZSkgJiYgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkgPCBnX2pz
Y0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVhcCArIHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSk7
Ci0gICAgYXV0byByZXN1bHQgPSBTdHJ1Y3R1cmVJRChyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oc3RydWN0dXJlKSAmIHN0cnVjdHVyZUlETWFzayk7Ci0gICAgQVNTRVJUKHJlc3VsdC5kZWNv
ZGUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbHNlIC8vIENQ
VShBRERSRVNTNjQpCi0KLUFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRDo6ZGVj
b2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZGVjb250YW1pbmF0ZSgpKTsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPihtX2JpdHMpOwotfQotCi1BTFdBWVNfSU5MSU5F
IFN0cnVjdHVyZUlEIFN0cnVjdHVyZUlEOjplbmNvZGUoY29uc3QgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIFN0cnVjdHVyZUlEKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwotfQotCi0jZW5kaWYKLQotc3Ry
dWN0IFN0cnVjdHVyZUlESGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3Ry
dWN0dXJlSUQmIGtleSkgeyByZXR1cm4ga2V5LmJpdHMoKTsgfQotICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFN0cnVjdHVyZUlEJiBhLCBjb25zdCBTdHJ1Y3R1cmVJRCYgYikgeyByZXR1cm4g
YSA9PSBiOyB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpTdHJ1Y3R1cmVJRD4gOiBKU0M6OlN0cnVjdHVy
ZUlESGFzaCB7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwot
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlN0cnVjdHVyZUlEPiA6IFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxKU0M6OlN0cnVjdHVyZUlEPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotfTsKLQotfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDI4Njk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgsMTcgQEAKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIK
ICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlSUQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBTdHJ1Y3R1cmVJREJsb2IgewogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlSURCbG9iKCkg
PSBkZWZhdWx0OworICAgIFN0cnVjdHVyZUlEQmxvYigpCisgICAgeworICAgICAgICB1LmRvdWJs
ZVdvcmQgPSAweGJiYWRiZWVmOworICAgIH0KIAogICAgIFN0cnVjdHVyZUlEQmxvYihTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJRCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rv
cnksIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKICAgICB7CkBAIC03NCw5ICs3Nyw4IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdW5pb24gRGF0YSB7CisgICAgdW5pb24gewog
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUg
dGhpcyBzaW5jZSB0aGUgc3RydWN0dXJlSUQgY2FuIGJlIGRpcmVjdGx5IGNvbXB1dGVkIGZyb20g
dGhlIFN0cnVjdHVyZSoKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwogICAg
ICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnk7CiAgICAg
ICAgICAgICBKU1R5cGUgdHlwZTsKQEAgLTg4LDExICs5MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpbnQzMl90IHdvcmQyOwogICAgICAgICB9IHdvcmRzOwogICAgICAgICBpbnQ2NF90IGRv
dWJsZVdvcmQ7Ci0KLSAgICAgICAgRGF0YSgpIHsgZG91YmxlV29yZCA9IDB4YmJhZGJlZWY7IH0K
LSAgICB9OwotCi0gICAgRGF0YSB1OworICAgIH0gdTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SURUYWJsZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVJRFRhYmxlLmgiCisKKyNpbmNsdWRlICJSZXNvdXJjZUV4aGF1c3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3Rm
L1Jhd1BvaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
CituYW1lc3BhY2UgU3RydWN0dXJlSURUYWJsZUludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK1N0cnVjdHVyZUlEVGFibGU6OlN0cnVjdHVyZUlE
VGFibGUoKQorICAgIDogbV90YWJsZShtYWtlVW5pcXVlQXJyYXk8U3RydWN0dXJlT3JPZmZzZXQ+
KHNfaW5pdGlhbFNpemUpKQorICAgICwgbV9zaXplKDEpCisgICAgLCBtX2NhcGFjaXR5KHNfaW5p
dGlhbFNpemUpCit7CisgICAgLy8gV2UgcHJlLWFsbG9jYXRlIHRoZSBmaXJzdCBvZmZzZXQgc28g
dGhhdCB0aGUgbnVsbCBTdHJ1Y3R1cmUKKyAgICAvLyBjYW4gc3RpbGwgYmUgcmVwcmVzZW50ZWQg
YXMgdGhlIFN0cnVjdHVyZUlEICcwJy4KKyAgICB0YWJsZSgpWzBdLmVuY29kZWRTdHJ1Y3R1cmVC
aXRzID0gMDsKKworICAgIG1ha2VGcmVlTGlzdEZyb21SYW5nZSgxLCBtX2NhcGFjaXR5IC0gMSk7
Cit9CisKK3ZvaWQgU3RydWN0dXJlSURUYWJsZTo6bWFrZUZyZWVMaXN0RnJvbVJhbmdlKHVpbnQz
Ml90IGZpcnN0LCB1aW50MzJfdCBsYXN0KQoreworICAgIEFTU0VSVCghbV9maXJzdEZyZWVPZmZz
ZXQpOworICAgIEFTU0VSVCghbV9sYXN0RnJlZU9mZnNldCk7CisKKyAgICAvLyBQdXQgYWxsIHRo
ZSBuZXcgSURzIG9uIHRoZSBmcmVlIGxpc3Qgc2VxdWVudGlhbGx5LgorICAgIHVpbnQzMl90IGhl
YWQgPSBmaXJzdDsKKyAgICB1aW50MzJfdCB0YWlsID0gbGFzdDsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSBmaXJzdDsgaSA8IGxhc3Q7ICsraSkKKyAgICAgICAgdGFibGUoKVtpXS5vZmZzZXQgPSBp
ICsgMTsKKyAgICB0YWJsZSgpW2xhc3RdLm9mZnNldCA9IDA7CisKKyAgICAvLyBSYW5kb21pemUg
dGhlIGZyZWUgbGlzdC4KKyAgICB1aW50MzJfdCBzaXplID0gbGFzdCAtIGZpcnN0ICsgMTsKKyAg
ICB1aW50MzJfdCBtYXhJdGVyYXRpb25zID0gKHNpemUgKiAyKSAvIDM7CisgICAgZm9yICh1aW50
MzJfdCBjb3VudCA9IDA7IGNvdW50IDwgbWF4SXRlcmF0aW9uczsgKytjb3VudCkgeworICAgICAg
ICAvLyBNb3ZlIGEgcmFuZG9tIHBpY2sgZWl0aGVyIHRvIHRoZSBoZWFkIG9yIHRoZSB0YWlsIG9m
IHRoZSBmcmVlIGxpc3QuCisgICAgICAgIHVpbnQzMl90IHJhbmRvbSA9IG1fd2Vha1JhbmRvbS5n
ZXRVaW50MzIoKTsKKyAgICAgICAgdWludDMyX3Qgbm9kZUJlZm9yZSA9IGZpcnN0ICsgKHJhbmRv
bSAlIHNpemUpOworICAgICAgICB1aW50MzJfdCBwaWNrID0gdGFibGUoKVtub2RlQmVmb3JlXS5v
ZmZzZXQ7CisgICAgICAgIGlmIChwaWNrKSB7CisgICAgICAgICAgICB1aW50MzJfdCBub2RlQWZ0
ZXIgPSB0YWJsZSgpW3BpY2tdLm9mZnNldDsKKyAgICAgICAgICAgIHRhYmxlKClbbm9kZUJlZm9y
ZV0ub2Zmc2V0ID0gbm9kZUFmdGVyOworICAgICAgICAgICAgaWYgKChyYW5kb20gJiAxKSB8fCAh
bm9kZUFmdGVyKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgaGVhZC4KKyAgICAg
ICAgICAgICAgICB0YWJsZSgpW3BpY2tdLm9mZnNldCA9IGhlYWQ7CisgICAgICAgICAgICAgICAg
aGVhZCA9IHBpY2s7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlQWZ0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIHRhaWwgPSBub2RlQmVmb3JlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSB0YWlsLgorICAgICAgICAgICAgICAgIHRhYmxlKClb
cGlja10ub2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICB0YWJsZSgpW3RhaWxdLm9mZnNldCA9
IHBpY2s7CisgICAgICAgICAgICAgICAgdGFpbCA9IHBpY2s7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBDdXQgbGlzdCBpbiBoYWxmIGFuZCBzd2FwIGhhbHZlcy4K
KyAgICB1aW50MzJfdCBjdXQgPSBmaXJzdCArIChtX3dlYWtSYW5kb20uZ2V0VWludDMyKCkgJSBz
aXplKTsKKyAgICB1aW50MzJfdCBhZnRlckN1dCA9IHRhYmxlKClbY3V0XS5vZmZzZXQ7CisgICAg
aWYgKGFmdGVyQ3V0KSB7CisgICAgICAgIHRhYmxlKClbdGFpbF0ub2Zmc2V0ID0gaGVhZDsKKyAg
ICAgICAgdGFpbCA9IGN1dDsKKyAgICAgICAgaGVhZCA9IGFmdGVyQ3V0OworICAgICAgICB0YWJs
ZSgpW2N1dF0ub2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICBtX2ZpcnN0RnJlZU9mZnNldCA9IGhl
YWQ7CisgICAgbV9sYXN0RnJlZU9mZnNldCA9IHRhaWw7Cit9CisKK3ZvaWQgU3RydWN0dXJlSURU
YWJsZTo6cmVzaXplKHNpemVfdCBuZXdDYXBhY2l0eSkKK3sKKyAgICBpZiAobmV3Q2FwYWNpdHkg
PiBzX21heGltdW1OdW1iZXJPZlN0cnVjdHVyZXMpCisgICAgICAgIG5ld0NhcGFjaXR5ID0gc19t
YXhpbXVtTnVtYmVyT2ZTdHJ1Y3R1cmVzOworCisgICAgLy8gSWYgbV9zaXplIGlzIGFscmVhZHkg
c19tYXhpbXVtTnVtYmVyT2ZTdHJ1Y3R1cmVzLCBuZXdDYXBhY2l0eSBiZWNvbWVzIHNfbWF4aW11
bU51bWJlck9mU3RydWN0dXJlcyBpbiB0aGUgYWJvdmUgY29kZS4KKyAgICAvLyBJbiB0aGF0IGNh
c2UsIHdlIHNob3VsZCBjcmFzaCBiZWNhdXNlIG9mIGV4aGF1c3Qgb2YgU3RydWN0dXJlSURzLgor
ICAgIFJFTEVBU0VfQVNTRVJUX1JFU09VUkNFX0FWQUlMQUJMRShtX3NpemUgPCBuZXdDYXBhY2l0
eSwgU3RydWN0dXJlSURFeGhhdXN0aW9uLCAiQ3Jhc2ggaW50ZW50aW9uYWxseSBiZWNhdXNlIG9m
IGV4aGF1c3Qgb2YgU3RydWN0dXJlSURzLiIpOworCisgICAgLy8gQ3JlYXRlIHRoZSBuZXcgdGFi
bGUuCisgICAgYXV0byBuZXdUYWJsZSA9IG1ha2VVbmlxdWVBcnJheTxTdHJ1Y3R1cmVPck9mZnNl
dD4obmV3Q2FwYWNpdHkpOworCisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIG9sZCB0
YWJsZSB0byB0aGUgbmV3IHRhYmxlLgorICAgIG1lbWNweShuZXdUYWJsZS5nZXQoKSwgdGFibGUo
KSwgbV9jYXBhY2l0eSAqIHNpemVvZihTdHJ1Y3R1cmVPck9mZnNldCkpOworCisgICAgLy8gU3Rv
cmUgZmVuY2UgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNvcGllZCBldmVyeXRoaW5nIGJlZm9yZSBkb2lu
ZyB0aGUgc3dhcC4KKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworCisgICAgLy8gU3dhcCB0
aGUgb2xkIGFuZCBuZXcgdGFibGVzLgorICAgIHN3YXAobV90YWJsZSwgbmV3VGFibGUpOworCisg
ICAgLy8gUHV0IHRoZSBvbGQgdGFibGUgKG5vdyBsYWJlbGVkIGFzIG5ldykgaW50byB0aGUgbGlz
dCBvZiBvbGQgdGFibGVzLgorICAgIG1fb2xkVGFibGVzLmFwcGVuZChXVEZNb3ZlKG5ld1RhYmxl
KSk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGNhcGFjaXR5LgorICAgIG1fY2FwYWNpdHkgPSBuZXdD
YXBhY2l0eTsKKworICAgIG1ha2VGcmVlTGlzdEZyb21SYW5nZShtX3NpemUsIG1fY2FwYWNpdHkg
LSAxKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRhYmxlcygpCit7Cisg
ICAgbV9vbGRUYWJsZXMuY2xlYXIoKTsKK30KKworU3RydWN0dXJlSUQgU3RydWN0dXJlSURUYWJs
ZTo6YWxsb2NhdGVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
IW1fZmlyc3RGcmVlT2Zmc2V0KSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NhcGFjaXR5
IDw9IHNfbWF4aW11bU51bWJlck9mU3RydWN0dXJlcyk7CisgICAgICAgIEFTU0VSVChtX3NpemUg
PT0gbV9jYXBhY2l0eSk7CisgICAgICAgIHJlc2l6ZShtX2NhcGFjaXR5ICogMik7CisgICAgICAg
IEFTU0VSVChtX3NpemUgPCBtX2NhcGFjaXR5KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9m
aXJzdEZyZWVPZmZzZXQpOworICAgIH0KKworICAgIC8vIGVudHJvcHlCaXRzIG11c3Qgbm90IGJl
IHplcm8uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGEgY29ycnVwdGVkCisgICAgLy8gc3RydWN0dXJl
SUQgaXMgZW5jb3VudGVyZWQgKHdpdGggaW5jb3JyZWN0IGVudHJvcHlCaXRzKSwgdGhlIGRlY29k
ZWQKKyAgICAvLyBzdHJ1Y3R1cmUgcG9pbnRlciBmb3IgdGhhdCBJRCB3aWxsIGJlIGFsd2F5cyBi
ZSBhIGJhZCBwb2ludGVyIHdpdGgKKyAgICAvLyBoaWdoIGJpdHMgc2V0LgorICAgIGNvbnN0ZXhw
ciB1aW50MzJfdCBlbnRyb3B5Qml0c01hc2sgPSAoMSA8PCBzX251bWJlck9mRW50cm9weUJpdHMp
IC0gMTsKKyAgICB1aW50MzJfdCBlbnRyb3B5Qml0cyA9IG1fd2Vha1JhbmRvbS5nZXRVaW50MzIo
KSAmIGVudHJvcHlCaXRzTWFzazsKKyAgICBpZiAoVU5MSUtFTFkoIWVudHJvcHlCaXRzKSkgewor
ICAgICAgICBjb25zdGV4cHIgdWludDMyX3QgbnVtYmVyT2ZWYWx1ZXNUb1BpY2tGcm9tID0gZW50
cm9weUJpdHNNYXNrOworICAgICAgICBlbnRyb3B5Qml0cyA9IChtX3dlYWtSYW5kb20uZ2V0VWlu
dDMyKCkgJSBudW1iZXJPZlZhbHVlc1RvUGlja0Zyb20pICsgMTsKKyAgICB9CisKKyAgICB1aW50
MzJfdCBzdHJ1Y3R1cmVJbmRleCA9IG1fZmlyc3RGcmVlT2Zmc2V0OworICAgIG1fZmlyc3RGcmVl
T2Zmc2V0ID0gdGFibGUoKVttX2ZpcnN0RnJlZU9mZnNldF0ub2Zmc2V0OworICAgIGlmICghbV9m
aXJzdEZyZWVPZmZzZXQpCisgICAgICAgIG1fbGFzdEZyZWVPZmZzZXQgPSAwOworCisgICAgU3Ry
dWN0dXJlSUQgcmVzdWx0ID0gKHN0cnVjdHVyZUluZGV4IDw8IHNfbnVtYmVyT2ZFbnRyb3B5Qml0
cykgfCBlbnRyb3B5Qml0czsKKyAgICB0YWJsZSgpW3N0cnVjdHVyZUluZGV4XS5lbmNvZGVkU3Ry
dWN0dXJlQml0cyA9IGVuY29kZShzdHJ1Y3R1cmUsIHJlc3VsdCk7CisgICAgbV9zaXplKys7Cisg
ICAgQVNTRVJUKCFpc051a2VkKHJlc3VsdCkpOworCisgICAgZGF0YUxvZ0xuSWYoU3RydWN0dXJl
SURUYWJsZUludGVybmFsOjp2ZXJib3NlLCAiQWxsb2NhdGVkIFN0cnVjdHVyZUlEICIsIHJlc3Vs
dCwgIiBmb3IgU3RydWN0dXJlICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBTdHJ1Y3R1cmVJRFRhYmxlOjpkZWFsbG9jYXRlSUQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQoreworICAgIGRhdGFMb2dM
bklmKFN0cnVjdHVyZUlEVGFibGVJbnRlcm5hbDo6dmVyYm9zZSwgIkRlYWxsb2NhdGVkIFN0cnVj
dHVyZUlEICIsIHN0cnVjdHVyZUlEKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlSUQgIT0gc191bnVz
ZWRJRCk7CisgICAgdWludDMyX3Qgc3RydWN0dXJlSW5kZXggPSBzdHJ1Y3R1cmVJRCA+PiBzX251
bWJlck9mRW50cm9weUJpdHM7CisgICAgQVNTRVJUKHN0cnVjdHVyZUluZGV4ICYmIHN0cnVjdHVy
ZUluZGV4IDwgc19tYXhpbXVtTnVtYmVyT2ZTdHJ1Y3R1cmVzKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh0YWJsZSgpW3N0cnVjdHVyZUluZGV4XS5lbmNvZGVkU3RydWN0dXJlQml0cyA9PSBlbmNvZGUo
c3RydWN0dXJlLCBzdHJ1Y3R1cmVJRCkpOworICAgIG1fc2l6ZS0tOworICAgIGlmICghbV9maXJz
dEZyZWVPZmZzZXQpIHsKKyAgICAgICAgdGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0ub2Zmc2V0ID0g
MDsKKyAgICAgICAgbV9maXJzdEZyZWVPZmZzZXQgPSBzdHJ1Y3R1cmVJbmRleDsKKyAgICAgICAg
bV9sYXN0RnJlZU9mZnNldCA9IHN0cnVjdHVyZUluZGV4OworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYm9vbCBpbnNlcnRBdEhlYWQgPSBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCkgJiAx
OworICAgIGlmIChpbnNlcnRBdEhlYWQpIHsKKyAgICAgICAgdGFibGUoKVtzdHJ1Y3R1cmVJbmRl
eF0ub2Zmc2V0ID0gbV9maXJzdEZyZWVPZmZzZXQ7CisgICAgICAgIG1fZmlyc3RGcmVlT2Zmc2V0
ID0gc3RydWN0dXJlSW5kZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGFibGUoKVtzdHJ1Y3R1
cmVJbmRleF0ub2Zmc2V0ID0gMDsKKyAgICAgICAgdGFibGUoKVttX2xhc3RGcmVlT2Zmc2V0XS5v
ZmZzZXQgPSBzdHJ1Y3R1cmVJbmRleDsKKyAgICAgICAgbV9sYXN0RnJlZU9mZnNldCA9IHN0cnVj
dHVyZUluZGV4OworICAgIH0KK30KKworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSURUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlEVGFibGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRW5zdXJl
U3RpbGxBbGl2ZUhlcmUuaCIKKyNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSA8
d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUmFuZG9tLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTdHJ1Y3R1cmU7CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQordXNpbmcgU3RydWN0dXJlSUQgPSB1aW50MzJfdDsKKworaW5s
aW5lIFN0cnVjdHVyZUlEIG51a2VkU3RydWN0dXJlSURCaXQoKQoreworICAgIHJldHVybiAweDgw
MDAwMDAwdTsKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIG51a2UoU3RydWN0dXJlSUQgaWQpCit7
CisgICAgcmV0dXJuIGlkIHwgbnVrZWRTdHJ1Y3R1cmVJREJpdCgpOworfQorCitpbmxpbmUgYm9v
bCBpc051a2VkKFN0cnVjdHVyZUlEIGlkKQoreworICAgIHJldHVybiAhIShpZCAmIG51a2VkU3Ry
dWN0dXJlSURCaXQoKSk7Cit9CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBkZWNvbnRhbWluYXRlKFN0
cnVjdHVyZUlEIGlkKQoreworICAgIHJldHVybiBpZCAmIH5udWtlZFN0cnVjdHVyZUlEQml0KCk7
Cit9CisjZWxzZSAvLyBub3QgVVNFKEpTVkFMVUU2NCkKK3VzaW5nIFN0cnVjdHVyZUlEID0gU3Ry
dWN0dXJlKjsKKworaW5saW5lIFN0cnVjdHVyZUlEIG51a2VkU3RydWN0dXJlSURCaXQoKQorewor
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJlSUQ+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkpOworfQorCitpbmxpbmUgU3RydWN0dXJlSUQgbnVrZShTdHJ1Y3R1cmVJRCBpZCkKK3sK
KyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlEPihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihpZCkgfCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihudWtlZFN0cnVjdHVyZUlEQml0KCkp
KTsKK30KKworaW5saW5lIGJvb2wgaXNOdWtlZChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyAgICByZXR1
cm4gISEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaWQpICYgYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSk7Cit9CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBkZWNv
bnRhbWluYXRlKFN0cnVjdHVyZUlEIGlkKQoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3Ry
dWN0dXJlSUQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlkKSAmIH5iaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihudWtlZFN0cnVjdHVyZUlEQml0KCkpKTsKK30KKyNlbmRpZiAvLyBub3QgVVNFKEpT
VkFMVUU2NCkKKworI2lmIFVTRShKU1ZBTFVFNjQpCisKK3VzaW5nIEVuY29kZWRTdHJ1Y3R1cmVC
aXRzID0gdWludHB0cl90OworCitjbGFzcyBTdHJ1Y3R1cmVJRFRhYmxlIHsKKyAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworcHVibGljOgorICAgIFN0cnVjdHVyZUlEVGFi
bGUoKTsKKworICAgIHZvaWQqKiBiYXNlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZtX3RhYmxlKTsgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHZhbGlkYXRlKFN0cnVj
dHVyZUlEKTsKKworICAgIC8vIEZJWE1FOiByZGFyOi8vNjkwMzY4ODg6IHJlbW92ZSB0aGlzIHdo
ZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgYSBzcGVj
aWFsIGNhc2UgbWl0aWdhdGlvbi4gSXQgaXMgbm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICBTdHJ1
Y3R1cmUqIHRyeUdldChTdHJ1Y3R1cmVJRCk7CisKKyAgICBTdHJ1Y3R1cmUqIGdldChTdHJ1Y3R1
cmVJRCk7CisgICAgdm9pZCBkZWFsbG9jYXRlSUQoU3RydWN0dXJlKiwgU3RydWN0dXJlSUQpOwor
ICAgIFN0cnVjdHVyZUlEIGFsbG9jYXRlSUQoU3RydWN0dXJlKik7CisKKyAgICB2b2lkIGZsdXNo
T2xkVGFibGVzKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbmV3Q2FwYWNpdHkpOwor
ICAgIHZvaWQgbWFrZUZyZWVMaXN0RnJvbVJhbmdlKHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBs
YXN0KTsKKworICAgIHVuaW9uIFN0cnVjdHVyZU9yT2Zmc2V0IHsKKyAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVkU3RydWN0dXJlQml0
cyBlbmNvZGVkU3RydWN0dXJlQml0czsKKyAgICAgICAgdWludHB0cl90IG9mZnNldDsKKyAgICB9
OworCisgICAgU3RydWN0dXJlT3JPZmZzZXQqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV90YWJs
ZS5nZXQoKTsgfQorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGRlY29kZShFbmNvZGVkU3RydWN0dXJl
Qml0cywgU3RydWN0dXJlSUQpOworICAgIHN0YXRpYyBFbmNvZGVkU3RydWN0dXJlQml0cyBlbmNv
ZGUoU3RydWN0dXJlKiwgU3RydWN0dXJlSUQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3Qgc19pbml0aWFsU2l6ZSA9IDUxMjsKKworICAgIFZlY3RvcjxVbmlxdWVBcnJheTxTdHJ1Y3R1
cmVPck9mZnNldD4+IG1fb2xkVGFibGVzOworCisgICAgdWludDMyX3QgbV9maXJzdEZyZWVPZmZz
ZXQgeyAwIH07CisgICAgdWludDMyX3QgbV9sYXN0RnJlZU9mZnNldCB7IDAgfTsKKyAgICBVbmlx
dWVBcnJheTxTdHJ1Y3R1cmVPck9mZnNldD4gbV90YWJsZTsKKworICAgIHNpemVfdCBtX3NpemUg
eyAwIH07CisgICAgc2l6ZV90IG1fY2FwYWNpdHk7CisKKyAgICBXZWFrUmFuZG9tIG1fd2Vha1Jh
bmRvbTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgU3RydWN0dXJlSUQgc191bnVzZWRJRCA9IDA7
CisKK3B1YmxpYzoKKyAgICAvLyAxLiBTdHJ1Y3R1cmVJRCBpcyBlbmNvZGVkIGFzOgorICAgIC8v
CisgICAgLy8gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vICAgIHwgMSBOdWtlIEJpdCB8IDI2IFN0cnVjdHVy
ZUlEVGFibGUgaW5kZXggYml0cyB8IDUgZW50cm9weSBiaXRzIHwKKyAgICAvLyAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8KKyAgICAvLyAgICBUaGUgZW50cm9weSBiaXRzIGFyZSBjaG9zZW4gYXQgcmFuZG9t
IGFuZCBhc3NpZ25lZCB3aGVuIGEgU3RydWN0dXJlSUQKKyAgICAvLyAgICBpcyBhbGxvY2F0ZWQu
CisgICAgLy8KKyAgICAvLyAyLiBGb3IgZWFjaCBTdHJ1Y3R1cmVJRCwgdGhlIFN0cnVjdHVyZUlE
VGFibGUgc3RvcmVzIGVuY29kZWRTdHJ1Y3R1cmVCaXRzCisgICAgLy8gICAgd2hpY2ggYXJlIGVu
Y29kZWQgZnJvbSB0aGUgc3RydWN0dXJlIHBvaW50ZXIgYXMgc3VjaDoKKyAgICAvLworICAgIC8v
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgIC8vICAgIHwgMTEgbG93IGluZGV4IGJpdHMgfCA1IGVudHJvcHkg
Yml0cyB8IDQ4IHN0cnVjdHVyZSBwb2ludGVyIGJpdHMgfAorICAgIC8vICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vCisgICAgLy8gICAgVGhlIGVudHJvcHkgYml0cyBoZXJlIGFyZSB0aGUgc2FtZSA1IGJp
dHMgdXNlZCBpbiB0aGUgZW5jb2Rpbmcgb2YgdGhlCisgICAgLy8gICAgU3RydWN0dXJlSUQgZm9y
IHRoaXMgc3RydWN0dXJlIGVudHJ5IGluIHRoZSBTdHJ1Y3R1cmVJRFRhYmxlLgorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50MzJfdCBzX251bWJlck9mTnVrZUJpdHMgPSAxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDMyX3Qgc19udW1iZXJPZkVudHJvcHlCaXRzID0gNTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IHNfZW50cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50
ZXIgPSAoc2l6ZW9mKEVuY29kZWRTdHJ1Y3R1cmVCaXRzKSAqIDgpIC0gMTY7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IHNfbWF4aW11bU51bWJlck9mU3RydWN0dXJlcyA9IDEgPDwg
KDMyIC0gc19udW1iZXJPZkVudHJvcHlCaXRzIC0gc19udW1iZXJPZk51a2VCaXRzKTsKK307CisK
K0FMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRFRhYmxlOjpkZWNvZGUoRW5jb2Rl
ZFN0cnVjdHVyZUJpdHMgYml0cywgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQpCit7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmUqPihiaXRzIF4gKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oc3RydWN0dXJlSUQpIDw8IHNfZW50cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50ZXIp
KTsKK30KKworQUxXQVlTX0lOTElORSBFbmNvZGVkU3RydWN0dXJlQml0cyBTdHJ1Y3R1cmVJRFRh
YmxlOjplbmNvZGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
KQoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFN0cnVjdHVyZUJpdHM+KHN0cnVj
dHVyZSkgXiAoc3RhdGljX2Nhc3Q8RW5jb2RlZFN0cnVjdHVyZUJpdHM+KHN0cnVjdHVyZUlEKSA8
PCBzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyKTsKK30KKworaW5saW5lIFN0
cnVjdHVyZSogU3RydWN0dXJlSURUYWJsZTo6Z2V0KFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQor
eworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0cnVjdHVyZUlEKTsKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighaXNOdWtlZChzdHJ1Y3R1cmVJRCkp
OworICAgIHVpbnQzMl90IHN0cnVjdHVyZUluZGV4ID0gc3RydWN0dXJlSUQgPj4gc19udW1iZXJP
ZkVudHJvcHlCaXRzOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RydWN0dXJlSW5kZXggPCBtX2NhcGFjaXR5KTsKKyAgICByZXR1cm4gZGVjb2RlKHRhYmxl
KClbc3RydWN0dXJlSW5kZXhdLmVuY29kZWRTdHJ1Y3R1cmVCaXRzLCBzdHJ1Y3R1cmVJRCk7Cit9
CisKKy8vIEZJWE1FOiByZGFyOi8vNjkwMzY4ODg6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4g
bm8gbG9uZ2VyIG5lZWRlZC4KK2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZUlEVGFibGU6OnRy
eUdldChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAgICB1aW50MzJfdCBzdHJ1Y3R1cmVJ
bmRleCA9IHN0cnVjdHVyZUlEID4+IHNfbnVtYmVyT2ZFbnRyb3B5Qml0czsKKyAgICBpZiAoc3Ry
dWN0dXJlSW5kZXggPj0gbV9jYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGRlY29kZSh0YWJsZSgpW3N0cnVjdHVyZUluZGV4XS5lbmNvZGVkU3RydWN0dXJlQml0
cywgc3RydWN0dXJlSUQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlSURUYWJs
ZTo6dmFsaWRhdGUoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQpCit7CisgICAgdWludDMyX3Qgc3Ry
dWN0dXJlSW5kZXggPSBzdHJ1Y3R1cmVJRCA+PiBzX251bWJlck9mRW50cm9weUJpdHM7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBkZWNvZGUodGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0uZW5j
b2RlZFN0cnVjdHVyZUJpdHMsIHN0cnVjdHVyZUlEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChzdHJ1
Y3R1cmVJbmRleCA8IG1fY2FwYWNpdHkpOworICAgICpiaXR3aXNlX2Nhc3Q8dm9sYXRpbGUgdWlu
dDY0X3QqPihzdHJ1Y3R1cmUpOworfQorCisjZWxzZSAvLyBub3QgVVNFKEpTVkFMVUU2NCkKKwor
Y2xhc3MgU3RydWN0dXJlSURUYWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVJRFRhYmxlKCkgPSBkZWZhdWx0OworCisg
ICAgLy8gRklYTUU6IHJkYXI6Ly82OTAzNjg4ODogcmVtb3ZlIHRoaXMgZnVuY3Rpb24gd2hlbiBu
byBsb25nZXIgbmVlZGVkLgorICAgIFN0cnVjdHVyZSogdHJ5R2V0KFN0cnVjdHVyZUlEIHN0cnVj
dHVyZUlEKSB7IHJldHVybiBzdHJ1Y3R1cmVJRDsgfQorICAgIFN0cnVjdHVyZSogZ2V0KFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEKSB7IHJldHVybiBzdHJ1Y3R1cmVJRDsgfQorICAgIHZvaWQgZGVh
bGxvY2F0ZUlEKFN0cnVjdHVyZSosIFN0cnVjdHVyZUlEKSB7IH0KKyAgICBTdHJ1Y3R1cmVJRCBh
bGxvY2F0ZUlEKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFp
c051a2VkKHN0cnVjdHVyZSkpOworICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIH07CisK
KyAgICB2b2lkIGZsdXNoT2xkVGFibGVzKCkgeyB9CisgICAgdm9pZCB2YWxpZGF0ZShTdHJ1Y3R1
cmVJRCkgeyB9Cit9OworCisjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVFNjQpCisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwxMCArNjAsMTEgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZGVzdHJveShKU0NlbGwq
IAogCiBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVj
dHVyZS5nZXQoKSkKLSAgICAsIG1fcHJldmlvdXModm0sIHRoaXMsIHByZXZpb3VzLCBXcml0ZUJh
cnJpZXJTdHJ1Y3R1cmVJRDo6TWF5QmVOdWxsKQogICAgICwgbV9tYXhPZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICAsIG1fdHJhbnNpdGlvbk9mZnNldChpbnZhbGlkT2Zmc2V0KQogeworICAgIGlm
IChwcmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHByZXZpb3VzKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMjg2OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHRy
eUNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvclZpYVdhdGNocG9pbnQoVk0mLCBTdHJ1Y3R1cmUq
LCBTdHJ1Y3R1cmVDaGFpbiopOwogCisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2
aW91czsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgc29tZSBzdG9yeSBmb3IgY2xlYXJp
bmcgdGhlc2UgcHJvcGVydHkgbmFtZXMgY2FjaGVzIGluIEdDLgogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI2NTkKICAgICB1aW50cHRyX3QgbV9jYWNo
ZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yQW5kRmxhZyB7IDAgfTsKQEAgLTE1NSw3ICsxNTYsNiBA
QCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsUHJvcGVydHlDYWNoZT4gbV9z
cGVjaWFsUHJvcGVydHlDYWNoZTsKICAgICBCb3g8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9wb2x5
UHJvdG9XYXRjaHBvaW50OwogCi0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgbV9wcmV2aW91
czsKICAgICBQcm9wZXJ0eU9mZnNldCBtX21heE9mZnNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X3RyYW5zaXRpb25PZmZzZXQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgaW5saW5lIHZvaWQg
U3RydWN0dXJlQ2hhaW5JbnZhbGlkYXRpb25XYQogICAgIG1fc3RydWN0dXJlUmFyZURhdGEtPmNs
ZWFyQ2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOwogfQogCi1pbmxpbmUgYm9vbCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6dHJ5Q2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yVmlhV2F0Y2hwb2lu
dChWTSYsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluKQor
aW5saW5lIGJvb2wgU3RydWN0dXJlUmFyZURhdGE6OnRyeUNhY2hlUHJvcGVydHlOYW1lRW51bWVy
YXRvclZpYVdhdGNocG9pbnQoVk0mIHZtLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbikKIHsKICAgICBpZiAoYmFzZVN0cnVjdHVyZS0+aGFzUG9seVByb3Rv
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4Niw3ICsxODYsNyBAQCBpbmxpbmUgYm9v
bCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dHJ5Q2FjaGVQCiAgICAgZm9yIChhdXRvKiBjdXJyZW50ID0g
Y2hhaW4tPmhlYWQoKTsgKmN1cnJlbnQ7ICsrY3VycmVudCkgewogICAgICAgICArK3NpemU7CiAg
ICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJlbnQ7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPnByb3BlcnR5TmFtZUVudW1lcmF0b3JTaG91bGRXYXRjaCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE5NCw3ICsxOTQsNyBAQCBpbmxpbmUgYm9v
bCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dHJ5Q2FjaGVQCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwog
ICAgIGZvciAoYXV0byogY3VycmVudCA9IGNoYWluLT5oZWFkKCk7ICpjdXJyZW50OyArK2N1cnJl
bnQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSAqY3VycmVudDsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAg
ICAgICBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3JXYXRjaHBvaW50c1tpbmRleF0uaW5z
dGFsbCh0aGlzLCBzdHJ1Y3R1cmUpOwogICAgICAgICArK2luZGV4OwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoc3ltYm9sUHJvdG9HZXR0CiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbERlc2Ny
aXB0aW9uVHlwZUVycm9yKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgSW50ZWdyaXR5Ojph
dWRpdFN0cnVjdHVyZUlEKHN5bWJvbC0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5Ojph
dWRpdFN0cnVjdHVyZUlEKHZtLCBzeW1ib2wtPnN0cnVjdHVyZUlEKCkpOwogICAgIGNvbnN0IGF1
dG8gZGVzY3JpcHRpb24gPSBzeW1ib2wtPmRlc2NyaXB0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShkZXNjcmlwdGlvbi5pc051bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBqc1N0cmlu
Zyh2bSwgZGVzY3JpcHRpb24pKTsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oc3ltYm9sUHJvdG9GdW5jCiAgICAgU3ltYm9sKiBzeW1ib2wgPSB0cnlFeHRy
YWN0U3ltYm9sKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXN5bWJvbCkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgU3lt
Ym9sVG9TdHJpbmdUeXBlRXJyb3IpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChz
eW1ib2wtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2
bSwgc3ltYm9sLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN5bWJvbC0+ZGVzY3JpcHRp
dmVTdHJpbmcoKSkpKTsKIH0KIApAQCAtMTIyLDcgKzEyMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihzeW1ib2xQcm90b0Z1bmMKICAgICBpZiAoIXN5bWJvbCkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgU3ltYm9sVmFsdWVPZlR5cGVF
cnJvcik7CiAKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQoc3ltYm9sLT5zdHJ1Y3R1
cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN5bWJvbC0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoc3ltYm9sKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVQcm9maWxlckxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMo
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cjsKICAgICAgICAgYm9vbCBz
YXdQb2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZTsKICAgICAgICAgaWYgKGlkKSB7Ci0gICAgICAg
ICAgICBzdHJ1Y3R1cmUgPSBpZC5kZWNvZGUoKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IEhl
YXA6OmhlYXAodmFsdWUuYXNDZWxsKCkpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGlkKTsKICAg
ICAgICAgICAgIGF1dG8gaXRlciA9IGNhY2hlZE1vbm9Qcm90b1NoYXBlcy5maW5kKHN0cnVjdHVy
ZSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBjYWNoZWRNb25vUHJvdG9TaGFwZXMuZW5kKCkp
IHsKICAgICAgICAgICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZSwg
dmFsdWUuYXNDZWxsKCkpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9n
Ojp2aXNpdChBYnN0cmFjdFNsb3QKICAgICBmb3IgKExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3Rh
cnRQdHI7IGVudHJ5ICE9IG1fY3VycmVudExvZ0VudHJ5UHRyOyArK2VudHJ5KSB7CiAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoZW50cnktPnZhbHVlKTsKICAgICAgICAgaWYgKFN0
cnVjdHVyZUlEIGlkID0gZW50cnktPnN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGlkLmRlY29kZSgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2aXNpdG9yLmhlYXAoKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChpZCk7IAogICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChzdHJ1Y3R1cmUpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NTAsNiArNzUwLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIGdldFN0cnVjdHVyZShTdHJ1
Y3R1cmVJRCBpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQoZGVjb250YW1pbmF0ZShpZCkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiByZGFyOi8v
NjkwMzY4ODg6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAg
ICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogdHJ5R2V0U3RydWN0dXJlKFN0cnVjdHVyZUlEIGlk
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhlYXAuc3RydWN0dXJlSURUYWJsZSgpLnRyeUdldChk
ZWNvbnRhbWluYXRlKGlkKSk7CisgICAgfQorCiAgICAgdm9pZCogc3RhY2tQb2ludGVyQXRWTUVu
dHJ5KCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1BvaW50ZXJBdFZNRW50cnk7IH0KICAgICB2b2lk
IHNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiR0NBc3NlcnRpb25zLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlVHlwZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgogI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgogI2luY2x1ZGUgPHd0Zi9SYXdQdHJUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYv
UmF3VmFsdWVUcmFpdHMuaD4KQEAgLTI0OSwxMDQgKzI0OCw0IEBAIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgV3JpdGVCYXJyaWUKICAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQo
KTsKIH0KIAotY2xhc3MgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgewotcHVibGljOgotICAgIGNv
bnN0ZXhwciBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCgpID0gZGVmYXVsdDsKLQotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0dXJl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRChERkc6OkRlc2lyZWRXcml0ZUJhcnJpZXImLCBT
dHJ1Y3R1cmUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29tcGlsYXRpb25UaHJl
YWQoKSk7Ci0gICAgICAgIHNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgIH0KLQot
ICAgIGVudW0gTWF5QmVOdWxsVGFnIHsgTWF5QmVOdWxsIH07Ci0gICAgV3JpdGVCYXJyaWVyU3Ry
dWN0dXJlSUQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHZhbHVlLCBN
YXlCZU51bGxUYWcpCi0gICAgewotICAgICAgICBzZXRNYXlCZU51bGwodm0sIG93bmVyLCB2YWx1
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXQoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmUqIHZhbHVlKTsKLQotICAgIHZvaWQgc2V0TWF5QmVOdWxsKFZNJiwgY29uc3QgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlKiB2YWx1ZSk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IGJ5IEpTQ2VsbCBkdXJpbmcgZWFybHkgaW5pdGlhbGlzYXRpb24KLSAgICAvLyB3aGVuIHNvbWUg
YmFzaWMgdHlwZXMgYXJlbid0IHlldCBjb21wbGV0ZWx5IGluc3RhbnRpYXRlZAotICAgIHZvaWQg
c2V0RWFybHlWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogdmFsdWUp
OwotCi0gICAgU3RydWN0dXJlKiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gQ29weSBt
X3N0cnVjdHVyZUlEIHRvIGEgbG9jYWwgdG8gYXZvaWQgbXVsdGlwbGUtcmVhZCBpc3N1ZXMuIChT
ZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTEwODU0PikKLSAgICAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQgPSBtX3N0cnVjdHVyZUlEOwotICAgICAgICBpZiAoc3RydWN0dXJlSUQpIHsKLSAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7Ci0g
ICAgICAgICAgICB2YWxpZGF0ZUNlbGwocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1
cmUpKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvciooKSBjb25z
dAotICAgIHsKLSAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtX3N0cnVjdHVyZUlE
OwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlSUQpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOwotICAgICAgICB2YWxpZGF0ZUNlbGwocmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yLT4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBtX3N0cnVjdHVyZUlEOwotICAgICAgICBB
U1NFUlQoc3RydWN0dXJlSUQpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZUlELmRlY29kZSgpOwotICAgICAgICB2YWxpZGF0ZUNlbGwocmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlSUQgPSB7IH07Ci0g
ICAgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gISFtX3N0cnVjdHVyZUlEOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmVJRDsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldFdpdGhvdXRXcml0ZUJhcnJpZXIoU3RydWN0dXJlKiB2YWx1ZSkKLSAgICB7Ci0j
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICBXcml0ZUJhcnJpZXJD
b3VudGVyczo6dXNlc1dpdGhvdXRCYXJyaWVyRnJvbUNwcC5jb3VudCgpOwotI2VuZGlmCi0gICAg
ICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlSUQgPSB7IH07Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJ1Y3R1cmVJRCA9IFN0cnVj
dHVyZUlEOjplbmNvZGUodmFsdWUpOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogdW52YWxpZGF0
ZWRHZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBt
X3N0cnVjdHVyZUlEOwotICAgICAgICBpZiAoc3RydWN0dXJlSUQpCi0gICAgICAgICAgICByZXR1
cm4gc3RydWN0dXJlSUQuZGVjb2RlKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIFN0cnVjdHVyZUlEIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRDsg
fQotCi1wcml2YXRlOgotICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci19OwotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRl
QmFycmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Xcml0ZUJhcnJpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsMjkgKzYxLDQgQEAgaW5saW5lIHZvaWQgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
LCBSYQogICAgIHZtLndyaXRlQmFycmllcihvd25lciwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9p
ZCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6c2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIEFTU0VSVCgh
T3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgIHZhbGlkYXRlQ2VsbChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHZhbHVlKSk7Ci0gICAg
c2V0RWFybHlWYWx1ZSh2bSwgb3duZXIsIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQ6OnNldE1heUJlTnVsbChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICB2YWxpZGF0
ZUNlbGwocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih2YWx1ZSkpOwotICAgIHNldEVhcmx5VmFs
dWUodm0sIG93bmVyLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIFdyaXRlQmFycmllclN0cnVj
dHVyZUlEOjpzZXRFYXJseVZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0
dXJlKiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIG1fc3RydWN0dXJlSUQg
PSB7IH07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9zdHJ1Y3R1cmVJRCA9IFN0cnVj
dHVyZUlEOjplbmNvZGUodmFsdWUpOwotICAgIHZtLndyaXRlQmFycmllcihvd25lciwgcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPih2YWx1ZSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMCArMjMwLDE0IEBAIGJvb2wgSGVhcFZlcmlm
aWVyOjp2YWxpZGF0ZUpTQ2VsbChWTSogZXgKIAogICAgICAgICAvLyAyLiBWYWxpZGF0ZSB0aGUg
Y2VsbCdzIHN0cnVjdHVyZQogCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0
dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uZ2V0U3Ry
dWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKICAgICAgICAg
ICAgIHByaW50SGVhZGVyQW5kQ2VsbCgpOwotICAgICAgICAgICAgdWludDMyX3Qgc3RydWN0dXJl
SURBc1VpbnQzMiA9IHN0cnVjdHVyZUlELmJpdHMoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlSURBc1VpbnQzMiA9IHN0cnVjdHVyZUlEOworI2Vs
c2UKKyAgICAgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUlEQXNVaW50MzIgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmVJRCk7CisjZW5kaWYKICAgICAgICAgICAgIGRhdGFM
b2coIiB3aXRoIHN0cnVjdHVyZUlEICIsIHN0cnVjdHVyZUlEQXNVaW50MzIsICIgbWFwcyB0byBh
IE5VTEwgU3RydWN0dXJlIHBvaW50ZXJcbiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CkBAIC0yODEsNyArMjg1LDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlkYXRl
SlNDZWxsKFZNKiBleAogCiAgICAgICAgIC8vIDMuIFZhbGlkYXRlIHRoZSBjZWxsJ3Mgc3RydWN0
dXJlJ3Mgc3RydWN0dXJlLgogICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmVT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmVTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICBp
ZiAoIXN0cnVjdHVyZVN0cnVjdHVyZSkgewogICAgICAgICAgICAgcHJpbnRIZWFkZXJBbmRDZWxs
KCk7CiAgICAgICAgICAgICBkYXRhTG9nKCIgaGFzIHN0cnVjdHVyZSAiLCBSYXdQb2ludGVyKHN0
cnVjdHVyZSksICIgd2hvc2Ugc3RydWN0dXJlIGlzIE5VTExcbiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlELmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAK
QEAgLTEwMCw3ICsxMDAsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRDZWxsKFZNJiB2bSwg
SlNWCiAgICAgICAgIGF1ZGl0Q2VsbDxhdWRpdExldmVsPih2bSwgdmFsdWUuYXNDZWxsKCkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCk7CitB
TFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRFRhYmxlJiwgU3Ry
dWN0dXJlSUQpOworQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoVk0mLCBTdHJ1
Y3R1cmVJRCk7CiAKIH0gLy8gbmFtZXNwYWNlIEludGVncml0eQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDEzICs3MywxNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRD
ZWxsUmFuZG9tbHkoVk0mCiAgICAgICAgIGF1ZGl0Q2VsbEZ1bGx5KHZtLCBjZWxsKTsKIH0KIAor
QUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSURUYWJsZSYgdGFi
bGUsIFN0cnVjdHVyZUlEIGlkKQoreworICAgIHRhYmxlLnZhbGlkYXRlKGlkKTsKK30KIAotQUxX
QVlTX0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQp
CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRTdHJ1Y3R1cmVJRChWTSYgdm0sIFN0cnVjdHVyZUlE
IGlkKQogewotICAgIFVOVVNFRF9QQVJBTShzdHJ1Y3R1cmVJRCk7Ci0jaWYgQ1BVKEFERFJFU1M2
NCkKLSAgICBBU1NFUlQoc3RydWN0dXJlSUQuYml0cygpIDw9IHN0cnVjdHVyZUhlYXBBZGRyZXNz
U2l6ZSArIFN0cnVjdHVyZUlEOjpudWtlZFN0cnVjdHVyZUlEQml0KTsKLSNlbmRpZgorICAgIGF1
ZGl0U3RydWN0dXJlSUQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCksIGlkKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSW50ZWdyaXR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1ODUsNyArMzU4NSw3
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkdldFN0cnUKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlcy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRv
KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW3N0cnVjdHVyZXMuc2l6ZSgpIC0gaSAtIDFdOwotICAg
ICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+aWQoKS5i
aXRzKCkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1
Y3R1cmUtPmlkKCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25PZmZzZXQoKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwpAQCAtNDAxMiw3ICs0MDEyLDcgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiAKICAgICBhZGRGdW5jdGlvbih2bSwgImVuc3VyZUFycmF5U3RvcmFnZSIsIGZ1
bmN0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCAxKTsKIAotICAgIG1fb2JqZWN0RG9pbmdTaWRlRWZm
ZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlSUQuc2V0KHZtLCB0aGlzLCBP
YmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXM6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSkpOworICAgIG1fb2JqZWN0RG9pbmdT
aWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlLnNldCh2bSwgdGhp
cywgT2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKIH0KIAogdm9pZCBKU0Rv
bGxhclZNOjphZGRGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNpZ25lZCBhcmd1
bWVudHMpCkBAIC00MDM0LDcgKzQwMzQsNyBAQCB2b2lkIEpTRG9sbGFyVk06OnZpc2l0Q2hpbGRy
ZW5JbXBsKEpTQ2VsCiB7CiAgICAgSlNEb2xsYXJWTSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Rv
bGxhclZNKj4oY2VsbCk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVm
ZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlEKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3Jy
ZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSk7CiB9CiAKIERFRklORV9WSVNJVF9DSElMRFJFTihKU0Rv
bGxhclZNKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uaAko
cmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIG9iamVjdERvaW5nU2lkZUVm
ZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSgpIHsgcmV0dXJuIG1fb2Jq
ZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlSUQu
Z2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIG9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZSgpIHsgcmV0dXJuIG1fb2JqZWN0RG9pbmdTaWRlRWZm
ZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlLmdldCgpOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIEpTRG9sbGFyVk0oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAg
LTc2LDcgKzc2LDcgQEAgcHJpdmF0ZToKIAogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAK
LSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlEOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVz
U3RydWN0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViCiAgICAgICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwoc2NyYXRjaEdQUikpOwogCiAgICAgICAgICAg
ICAgICAgc3RhY2tMaW1pdEdQUklzQ2xvYmJlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBq
aXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQ
Uiwgc3RhY2tMaW1pdEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKIAogICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5h
bDxXZWJBc3NlbWJseUZ1bmN0aW9uPjo6dmFsdWUsICJXZSBkbyBub3QgY2hlY2sgZm9yIHN1YnR5
cGVzIGJlbG93Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUdsb2JhbFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNXZWJBc3NlbWJseUdsb2JhbAogICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgImV4cGVjdGVkIHx0aGlzfCB2YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5HbG9iYWwiX3MpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChyZXN1bHQtPnN0cnVjdHVyZUlEKCkp
OworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgcmVzdWx0LT5zdHJ1Y3R1cmVJ
RCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTY1KQor
KysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAyMS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBS
b2xsIGJhY2sgcjI4NjM0NSwgcjI4NjM4NywgcjI4NjQ3MSwgcjI4NjY2NywgcjI4Njg0OQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MjY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvT1NBbGxv
Y2F0b3IuaDoKKyAgICAgICAgKiB3dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHA6CisgICAg
ICAgIChXVEY6Ok9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWRBbGlnbmVkKTogRGVsZXRl
ZC4KKwogMjAyMS0xMi0xMyAgRWxsaW90dCBXaWxsaWFtcyAgPGVtd0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRGVwbG95bWVudCB0YXJnZXQgZm9yIG1hY09TIDExKyBkb2VzIG5vdCBmb2xsb3cgbWlu
b3IgdmVyc2lvbiBidW1wcwpJbmRleDogU291cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9PU0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
NCArMzksMTEgQEAgcHVibGljOgogICAgICAgICBKU0pJVENvZGVQYWdlcyA9IFZNX1RBR19GT1Jf
RVhFQ1VUQUJMRUFMTE9DQVRPUl9NRU1PUlksCiAgICAgfTsKIAotICAgIC8vIFRoZXNlIG1ldGhv
ZHMgYXJlIHN5bW1ldHJpYzsgcmVzZXJ2ZVVuY29tbWl0dGVkKEFsaWduZWQpIGFsbG9jYXRlcyBW
TSBpbiBhbiB1bmNvbW1pdHRlZCBzdGF0ZSwKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzeW1t
ZXRyaWM7IHJlc2VydmVVbmNvbW1pdHRlZCBhbGxvY2F0ZXMgVk0gaW4gYW4gdW5jb21taXR0ZWQg
c3RhdGUsCiAgICAgLy8gcmVsZWFzZURlY29tbWl0dGVkIHNob3VsZCBiZSBjYWxsZWQgb24gYSBy
ZWdpb24gb2YgVk0gYWxsb2NhdGVkIGJ5IGEgc2luZ2xlIHJlc2VydmF0aW9uLAotICAgIC8vIHRo
ZSBtZW1vcnkgbXVzdCBhbGwgY3VycmVudGx5IGJlIGluIGEgZGVjb21taXR0ZWQgc3RhdGUuIHJl
c2VydmVVbmNvbW1pdHRlZChBbGlnbmVkKSByZXR1cm5zIHRvCisgICAgLy8gdGhlIG1lbW9yeSBt
dXN0IGFsbCBjdXJyZW50bHkgYmUgaW4gYSBkZWNvbW1pdHRlZCBzdGF0ZS4gcmVzZXJ2ZVVuY29t
bWl0dGVkIHJldHVybnMgdG8KICAgICAvLyB5b3UgbWVtb3J5IHRoYXQgaXMgemVyb2VkLgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCogcmVzZXJ2ZVVuY29tbWl0dGVkKHNpemVf
dCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1
dGFibGUgPSBmYWxzZSwgYm9vbCBqaXRDYWdlRW5hYmxlZCA9IGZhbHNlLCBib29sIGluY2x1ZGVz
R3VhcmRQYWdlcyA9IGZhbHNlKTsKLSAgICAvLyBUaGlzIGd1YXJhbnRlZXMgdGhlIG1lbW9yeSB3
aWxsIGJlIGFsaWduZWQgdG8gYSBtdWx0aXBsZSBvZiB0aGUgcmVxdWVzdGVkIHNpemUuIFRoZSBy
ZXF1ZXN0ZWQKLSAgICAvLyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28gYW5kIGdyZWF0ZXIg
dGhhbiB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZS4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQqIHJlc2VydmVVbmNvbW1pdHRlZEFsaWduZWQoc2l6ZV90LCBVc2FnZSA9IFVua25vd25V
c2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlLCBib29s
IGppdENhZ2VFbmFibGVkID0gZmFsc2UsIGJvb2wgaW5jbHVkZXNHdWFyZFBhZ2VzID0gZmFsc2Up
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCByZWxlYXNlRGVjb21taXR0ZWQo
dm9pZCosIHNpemVfdCk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzeW1tZXRyaWM7IHRo
ZXkgY29tbWl0IG9yIGRlY29tbWl0IGEgcmVnaW9uIG9mIFZNICh1bmNvbW1pdHRlZCBWTSBzaG91
bGQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAj
aW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogCiAjaWYg
RU5BQkxFKEpJVF9DQUdFKQpAQCAtNDQsMTAgKzQzLDYgQEAKICNlbmRpZiAvLyBPUyhEQVJXSU4p
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9DQUdFKQogCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
PHd0Zi9zcGkvY29jb2EvTWFjaFZNU1BJLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdURiB7CiAK
IHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZV90IGJ5dGVzLCBVc2Fn
ZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGppdENhZ2VFbmFi
bGVkLCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcykKQEAgLTc3LDU2ICs3Miw2IEBAIHZvaWQqIE9T
QWxsb2NhdG9yOjpyZXNlcnZlVW5jb21taXR0ZWQoc2kKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkKiBPU0FsbG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkQWxpZ25lZChzaXplX3QgYnl0
ZXMsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUsIGJvb2wgaml0
Q2FnZUVuYWJsZWQsIGJvb2wgaW5jbHVkZXNHdWFyZFBhZ2VzKQotewotICAgIEFTU0VSVChoYXNP
bmVCaXRTZXQoYnl0ZXMpICYmIGJ5dGVzID49IHBhZ2VTaXplKCkpOwotCi0jaWYgUExBVEZPUk0o
TUFDKSB8fCBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotICAgIFVOVVNFRF9QQVJBTSh1c2FnZSk7
IC8vIE5vdCBzdXBwb3J0ZWQgZm9yIG1hY2ggQVBJLgotICAgIEFTU0VSVF9VTlVTRUQoaW5jbHVk
ZXNHdWFyZFBhZ2VzLCAhaW5jbHVkZXNHdWFyZFBhZ2VzKTsKLSAgICBBU1NFUlRfVU5VU0VEKGpp
dENhZ2VFbmFibGVkLCAhaml0Q2FnZUVuYWJsZWQpOyAvLyBOb3Qgc3VwcG9ydGVkIGZvciBtYWNo
IEFQSS4KLSAgICB2bV9wcm90X3QgcHJvdGVjdGlvbnMgPSBWTV9QUk9UX1JFQUQ7Ci0gICAgaWYg
KHdyaXRhYmxlKQotICAgICAgICBwcm90ZWN0aW9ucyB8PSBWTV9QUk9UX1dSSVRFOwotICAgIGlm
IChleGVjdXRhYmxlKQotICAgICAgICBwcm90ZWN0aW9ucyB8PSBWTV9QUk9UX0VYRUNVVEU7Ci0K
LSAgICBjb25zdCB2bV9pbmhlcml0X3QgY2hpbGRQcm9jZXNzSW5oZXJpdGFuY2UgPSBWTV9JTkhF
UklUX0RFRkFVTFQ7Ci0gICAgY29uc3QgYm9vbCBjb3B5ID0gZmFsc2U7Ci0gICAgY29uc3QgaW50
IGZsYWdzID0gVk1fRkxBR1NfQU5ZV0hFUkU7Ci0KLSAgICB2b2lkKiBhbGlnbmVkID0gbnVsbHB0
cjsKLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IG1hY2hfdm1fbWFwKG1hY2hfdGFza19zZWxm
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF92bV9hZGRyZXNzX3QqPigmYWxpZ25lZCksIGJ5dGVz
LCBieXRlcyAtIDEsIGZsYWdzLCBNRU1PUllfT0JKRUNUX05VTEwsIDAsIGNvcHksIHByb3RlY3Rp
b25zLCBwcm90ZWN0aW9ucywgY2hpbGRQcm9jZXNzSW5oZXJpdGFuY2UpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MsIHJlc3VsdCwgYnl0ZXMpOwotI2lmIEhBVkUo
TUFEVl9GUkVFX1JFVVNFKQotICAgIGlmIChhbGlnbmVkKSB7Ci0gICAgICAgIC8vIFRvIHN1cHBv
cnQgdGhlICJyZXNlcnZlIHRoZW4gY29tbWl0IiBtb2RlbCwgd2UgaGF2ZSB0byBpbml0aWFsbHkg
ZGVjb21taXQuCi0gICAgICAgIHdoaWxlIChtYWR2aXNlKGFsaWduZWQsIGJ5dGVzLCBNQURWX0ZS
RUVfUkVVU0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICByZXR1cm4gYWxpZ25lZDsKLSNlbHNlCi0gICAgLy8gRG91YmxlIHRoZSBzaXplIHNv
IHdlIGNhbiBlbnN1cmUgZW5vdWdoIG1hcHBlZCBtZW1vcnkgdG8gZ2V0IGFuIGFsaWduZWQgc3Rh
cnQuCi0gICAgc2l6ZV90IG1hcHBlZFNpemUgPSBieXRlcyAqIDI7Ci0gICAgY2hhciogbWFwcGVk
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzZXJ2ZVVuY29tbWl0dGVkKG1hcHBlZFNpemUs
IHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSwgaml0Q2FnZUVuYWJsZWQsIGluY2x1ZGVzR3Vh
cmRQYWdlcykpOwotICAgIGNoYXIqIG1hcHBlZEVuZCA9IG1hcHBlZCArIG1hcHBlZFNpemU7Ci0K
LSAgICBjaGFyKiBhbGlnbmVkID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocm91bmRVcFRvTXVs
dGlwbGVPZihieXRlcywgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1hcHBlZCkpKTsKLSAg
ICBjaGFyKiBhbGlnbmVkRW5kID0gYWxpZ25lZCArIGJ5dGVzOwotCi0gICAgUkVMRUFTRV9BU1NF
UlQoYWxpZ25lZEVuZCA8PSBtYXBwZWRFbmQpOwotCi0gICAgaWYgKHNpemVfdCBsZWZ0RXh0cmEg
PSBhbGlnbmVkIC0gbWFwcGVkKQotICAgICAgICByZWxlYXNlRGVjb21taXR0ZWQobWFwcGVkLCBs
ZWZ0RXh0cmEpOwotCi0gICAgaWYgKHNpemVfdCByaWdodEV4dHJhID0gbWFwcGVkRW5kIC0gYWxp
Z25lZEVuZCkKLSAgICAgICAgcmVsZWFzZURlY29tbWl0dGVkKGFsaWduZWRFbmQsIHJpZ2h0RXh0
cmEpOwotCi0gICAgcmV0dXJuIGFsaWduZWQ7Ci0jZW5kaWYKLX0KLQogdm9pZCogT1NBbGxvY2F0
b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0
YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGppdENhZ2VFbmFibGVkLCBib29sIGluY2x1ZGVz
R3VhcmRQYWdlcykKIHsKICAgICAvLyBBbGwgUE9TSVggcmVzZXJ2YXRpb25zIHN0YXJ0IG91dCBs
b2dpY2FsbHkgY29tbWl0dGVkLgo=
</data>
<flag name="review"
          id="472599"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="472600"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447073</attachid>
            <date>2021-12-13 15:07:29 -0800</date>
            <delta_ts>2021-12-13 16:25:34 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>262377</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzNCBA
QAorMjAyMS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsIGJhY2sgcjI4NjM0NSwgcjI4NjM4NywgcjI4NjQ3MSwgcjI4NjY2NywgcjI4Njg0OQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MjY4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0
ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAg
ICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVy
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omhhc2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRl
RmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVsZXRlQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dp
dGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkTWV0YWRh
dGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YTo6R2V0QnlJZE1vZGVNZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGE6OmNsZWFyVG9EZWZhdWx0
TW9kZVdpdGhvdXRDYWNoZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFj
ayk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6Oklu
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Rh
bmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6
OkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6Y3JlYXRlQWxsb2NhdGlvblN0cnVj
dHVyZUZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHA6CisgICAgICAgIChKU0M6OlBvbHlQcm90b0FjY2Vz
c0NoYWluOjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50IGNvbnN0KToKKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
V2VhayBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6
Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHA6
CisgICAgICAgIChKU0M6OlNldFByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
V2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2VsbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpkZXJl
Zik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphYm91dFRvRGllKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6c3VtbWFyeSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250
YWluc1BDIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YnJhbmNoV2Vha1N0cnVj
dHVyZSk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRl
ZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVBy
b21pc2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3Jl
YXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGhlYXAvQWJzdHJhY3RT
bG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAoSlNDOjpIZWFwOjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKiBoZWFw
L0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAgKEpT
Qzo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFs
aWduZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpm
cmVlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OnRyeU1hbGxvY0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZnJlZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6Y29tbWl0QmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFw
L0lzb01lbW9yeUFsbG9jYXRvckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSXNv
TWVtb3J5QWxsb2NhdG9yQmFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAg
ICAoSlNDOjpJc29TdWJzcGFjZTo6dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKToKKyAgICAgICAg
KiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OlByZWNpc2VBbGxvY2F0aW9uOjpjcmVhdGVGb3JMb3dlclRpZXIp
OgorICAgICAgICAoSlNDOjpQcmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJUaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmg6CisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBl
bmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAg
ICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgICogaGVhcC9TdHJ1Y3R1
cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL1N0
cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRMb2FkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0TG9hZFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJh
bmRvbVRodW5rKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZh
bHVlVG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZh
bHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uTnVsbERlY29kZVN0
cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpudWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkpOgor
ICAgICAgICAqIGppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0aW5lOjpjb21wdXRlSGFzaCk6CisgICAgICAgICog
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVH
ZXRCeUlkSW5saW5lQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUSW5CeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191
bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpM
TElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpwZXJmb3JtTExJbnRH
ZXRCeUlEKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Q
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRlRGF0ZUluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRNZXNzYWdl
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTmFtZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSGFz
T3duUHJvcGVydHlDYWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
Q29uZmlnLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6ZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZSBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnRvT2JqZWN0U2xvdyBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpj
bGVhclN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6c3RydWN0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpzZXRTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Q3VzdG9tR2V0dGVyU2V0dGVy
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Tm9u
SW5kZXhBY2Nlc3NvcldpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROb25JbmRleFByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp0b1RoaXNOdW1i
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG90
eXBlVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6flN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvciBjb25zdCk6CisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppZCBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6
dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSUQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVJRFRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OlN0cnVjdHVyZUlEVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpt
YWtlRnJlZUxpc3RGcm9tUmFuZ2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpy
ZXNpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRhYmxlcyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6OmFsbG9jYXRlSUQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWFsbG9jYXRlSUQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSURUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6bnVrZWRTdHJ1Y3R1cmVJ
REJpdCk6CisgICAgICAgIChKU0M6Om51a2UpOgorICAgICAgICAoSlNDOjppc051a2VkKToKKyAg
ICAgICAgKEpTQzo6ZGVjb250YW1pbmF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OmJhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURUYWJsZTo6dGFibGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJ
RFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpnZXQpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjp0cnlHZXQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJRFRhYmxlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OmRlYWxsb2NhdGVJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6OmFsbG9j
YXRlSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRhYmxlcyk6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjp0cnlDYWNoZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3JWaWFXYXRjaHBvaW50KToKKyAgICAgICAgKiBydW50aW1lL1N5
bWJvbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
Uik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICog
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXJM
b2c6OnByb2Nlc3NMb2dFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyTG9nOjp2
aXNpdCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6Vk06OnRyeUdldFN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQ6OldyaXRlQmFycmllclN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpvcGVyYXRvciogY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6b3BlcmF0b3ItPiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpjbGVhcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpvcGVyYXRv
ciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQ6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFy
cmllclN0cnVjdHVyZUlEOjpzZXRXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnVudmFsaWRhdGVkR2V0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnZhbHVlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnNldCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpzZXRNYXlCZU51bGwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6c2V0RWFybHlWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgICogdG9vbHMvSGVhcFZlcmlmaWVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbCk6CisgICAgICAgICogdG9vbHMvSW50
ZWdyaXR5LmNwcDoKKyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDoKKyAgICAgICAgKiB0b29s
cy9JbnRlZ3JpdHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
Ojpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUds
b2JhbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldEdsb2JhbCk6CisKIDIwMjEtMTIt
MTMgIHdhZGRsZXNwbGFzaCAgPHdhZGRsZXNwbGFzaEBnbWFpbC5jb20+CiAKICAgICAgICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjogRG8gbm90IHN0b3JlIHRoaW5ncyBpbiBnX2NvbmZpZyB3aGVuIFVT
RShTWVNURU1fTUFMTE9DKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDExICs3NjIsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCiAg
ICAgaGVhcC9IZWFwU3Vic3BhY2VUeXBlcy5oCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
aAorICAgIGhlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCiAgICAgaGVhcC9Jc29DZWxs
U2V0LmgKICAgICBoZWFwL0lzb0hlYXBDZWxsVHlwZS5oCiAgICAgaGVhcC9Jc29JbmxpbmVkSGVh
cENlbGxUeXBlLmgKICAgICBoZWFwL0lzb0lubGluZWRIZWFwQ2VsbFR5cGVJbmxpbmVzLmgKLSAg
ICBoZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuaAogICAgIGhlYXAvSXNvU3Vic3BhY2UuaAog
ICAgIGhlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgKICAgICBoZWFwL0lzb1N1YnNwYWNlUGVyVk0u
aApAQCAtNzkzLDcgKzc5Myw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUEKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdGb3J3YXJkLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAotICAgIGhlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oCiAgICAgaGVhcC9TdWJzcGFjZS5oCiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAog
ICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgKQEAgLTExODYsOCArMTE4NSw4IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL1N0cnVjdHVyZS5o
CiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5oCi0gICAgcnVudGltZS9TdHJ1Y3R1cmVJRC5oCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVJREJs
b2IuaAorICAgIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5oCiAgICAgcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgKICAgICBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKICAgICBydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzNyw3ICs1MzcsNiBAQCBoZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5jcHAKIGhlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKIGhlYXAvSXNvQ2Vs
bFNldC5jcHAKIGhlYXAvSXNvSGVhcENlbGxUeXBlLmNwcAotaGVhcC9Jc29NZW1vcnlBbGxvY2F0
b3JCYXNlLmNwcAogaGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSXNvU3Vic3BhY2VQZXJWTS5j
cHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCkBAIC01NTksNyArNTU4LDYgQEAgaGVhcC9T
bG90VmlzaXRvci5jcHAKIGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAv
U3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b3BJZk5lY2Vz
c2FyeVRpbWVyLmNwcAotaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAog
aGVhcC9TdWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCkBAIC0xMDA3LDYgKzEwMDUsNyBA
QCBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwCiBydW50aW1lL1N0cnVjdHVyZS5j
cHAKIHJ1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNw
cAorcnVudGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmNwcAogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAKIHJ1bnRpbWUvU3ltYm9sLmNwcAogcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODU3LDYgKzg1Nyw3IEBACiAJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUNFNjNCMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQyRURGQTE5
Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8q
IEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29w
ZS5oICovOyB9OworCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4
MkIxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURC
MjQgLyogU291cmNlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MjVCQTEzMzdFNDM0NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzMxMTFCOEIy
Mzk3MjU2NTAwQUEzNENFIC8qIFNjcmliYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMzExMUI4QTIzOTcyNTY1MDBBQTM0Q0UgLyogU2NyaWJibGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMzk1
QzcwNzIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NUM3MDUyMjU1NUY2RDAwQkRC
RkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKQEAgLTEwODksMTAgKzEwOTAsNiBA
QAogCQk1MzZCMzE5RTFGNzM1RjE2MDAzN0ZDMzMgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBDNzE0
QkJCMTY5MDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgKi87IH07CiAJCTUzNzA4
MDZCMUZFMjMyREYwMDI5OUU0NCAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IH07CiAJCTUzNzBCNEY2MUJGMjYyMDUwMDVDNDBG
QyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzcwQjRGNDFCRjI1RUEy
MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
ICovOyB9OwotCQk1MzdGRUVDOTI3NDJCREEzMDBDOUVGRUUgLyogU3RydWN0dXJlSUQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzN0ZFRUM4Mjc0MkJE
QTMwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUzN0ZFRUNFMjc0MkJERTEwMEM5RUZFRSAvKiBJc29NZW1v
cnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM3RkVFQ0EyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9j
YXRvckJhc2VJbmxpbmVzLmggKi87IH07Ci0JCTUzN0ZFRUQwMjc0MkJERTEwMEM5RUZFRSAvKiBT
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzdGRUVDQzI3NDJCREUwMDBDOUVGRUUgLyogU3RydWN0
dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyB9OwotCQk1MzdGRUVEMTI3NDJCREUxMDBD
OUVGRUUgLyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3RkVFQ0QyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01l
bW9yeUFsbG9jYXRvckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzhGMTVFNzI2
OEZCQkI2MDBENjAxQzQgLyogVW5pZmllZFNvdXJjZTE0OC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhGMTVERDI2OEZCQkIzMDBENjAxQzQgLyog
VW5pZmllZFNvdXJjZTE0OC5jcHAgKi87IH07CiAJCTUzOEYxNUU4MjY4RkJCQjYwMEQ2MDFDNCAv
KiBVbmlmaWVkU291cmNlMTUxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzOEYxNURFMjY4RkJCQjMwMEQ2MDFDNCAvKiBVbmlmaWVkU291cmNlMTUx
LmNwcCAqLzsgfTsKQEAgLTM2MzksNiArMzYzNiw4IEBACiAJCTJBRDJFREZBMTk3OTlFMzgwMDRE
NjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5
MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0
cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBRjcz
ODJCMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzAzMjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NvdXJjZUNvZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWdu
YXR1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWdu
YXR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzMTExQjhBMjM5
NzI1NjUwMEFBMzRDRSAvKiBTY3JpYmJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpYmJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc0MSw3ICszNzQwLDYgQEAKIAkJNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzBGREU3MzIxRkFBRkM2MDAwNTlENjUgLyogdGVzdEluY2x1
ZGVzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IHRlc3RJbmNsdWRlcy5tOyBwYXRoID0gQVBJL3Rlc3Rz
L3Rlc3RJbmNsdWRlcy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzEwMTNGMzI3
NDQxOUY0MDAwOTAwOUMgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTMxMUJENDgxRUE1ODFFNTAwNTI1MjgxIC8q
IFdhc21PTUdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21PTUdQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENDkxRUE1
ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21PTUdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3
NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzkz
MCwxMSArMzkyOCw2IEBACiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3M0I0RDMyMkFEOEJGNzAwODAzNTcy
IC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha09i
amVjdFJlZlByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNzNC
NEQ0MjJBREIzMTQwMDgwMzU3MiAvKiBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2Vha09iamVjdFJlZkNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTM3RkVFQzgyNzQyQkRBMzAwQzlFRkVFIC8qIFN0cnVjdHVyZUlE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzN0ZFRUNBMjc0MkJERTAwMEM5RUZFRSAvKiBJc29N
ZW1vcnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJc29NZW1vcnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MzdGRUVDQjI3NDJCREUwMDBDOUVGRUUgLyogU3RydWN0dXJlQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTM3RkVFQ0MyNzQyQkRFMDAwQzlFRkVFIC8qIFN0cnVjdHVyZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MzdGRUVDRDI3NDJCREUwMDBDOUVGRUUgLyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NzkwLDcgKzU3ODMsNiBAQAogCQkJCTVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0
LmR5bGliICovLAogCQkJCTkzMjJBMDAzMDZDMzQxRDMwMDkwNjdCQiAvKiBsaWJpY3Vjb3JlLmR5
bGliICovLAogCQkJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJvYmpjLmR5bGliICov
LAotCQkJCTUzMTAxM0YzMjc0NDE5RjQwMDA5MDA5QyAvKiBsaWJXVEYuYSAqLywKIAkJCQkxNDk4
Q0FEMzIxNDY1NkM0MDA3MTA4NzkgLyogbGliV1RGLmEgKi8sCiAJCQkJQThBNDc0OEQxNTFBODMw
NjAwNDEyM0ZGIC8qIGxpYldURi5hICovLAogCQkJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAv
KiBsaWJ6LmR5bGliICovLApAQCAtNjY3Miw4ICs2NjY0LDYgQEAKIAkJCQkxNDJFMzEzMjEzNEZG
MEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJQ0QxRjlCNEEyNzBDRkUwRjAwNjE3RUI2
IC8qIFN0cm9uZ0ZvcndhcmQuaCAqLywKIAkJCQkxNDU3MjI4NTE0MzdFMTQwMDA1RkRFMjYgLyog
U3Ryb25nSW5saW5lcy5oICovLAotCQkJCTUzN0ZFRUNCMjc0MkJERTAwMEM5RUZFRSAvKiBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKLQkJCQk1MzdGRUVDQzI3NDJCREUw
MDBDOUVGRUUgLyogU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBG
N0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEY3REYxMzIx
RTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggKi8sCiAJCQkJMEY3REYxMzMxRTI5NzBENTAw
OTU5NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oICovLApAQCAtODA3NSw4ICs4MDY1LDkgQEAKIAkJ
CQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLywKIAkJCQk3
RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCTdF
NEVFNzA4MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovLAotCQkJCTUzN0ZF
RUM4Mjc0MkJEQTMwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVJRC5oICovLAogCQkJCTJBQUFBMzEwMThC
RDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLywKKwkJCQkyQUY3MzgyQTE4QkJC
RjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgKi8sCisJCQkJMkFGNzM4MkIxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLywKIAkJCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovLAogCQkJCUMyRjBGMkQwMTZCQUVF
RTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8sCiAJCQkJQzJGRTE4QTMxNkJB
RUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8sCkBAIC0xMDI3Niw4ICsxMDI2
Nyw2IEBACiAJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGMUJBRTIzOEFBRURCMDAzQTFDMkIgLyogSXNvSGVh
cENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0M4RUQ0MzIzQTFEQkNCMDAxMzE5NTgg
LyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM3RkVFRDEy
NzQyQkRFMTAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUzN0ZFRUNFMjc0MkJERTEwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8q
IElzb1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQyRkQ5NTIwQjUyQkUyMDBGMDk0
NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFMEZFNzIw
ODZBRDQ4MDA5N0YwREUgLyogSXNvU3Vic3BhY2VQZXJWTS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDgyOCwxMSArMTA4MTcsMTAgQEAKIAkJCQlDRDFGOUI0QjI3MENGRTBGMDA2MTdFQjYgLyogU3Ry
b25nRm9yd2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2
IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzN0ZFRUQwMjc0MkJE
RTEwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVD
aGFpbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM3RkVFQzkyNzQyQkRBMzAwQzlFRkVFIC8qIFN0
cnVjdHVyZUlELmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQUY3MzgyRDE4QkJCRjky
MDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkM5
MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVE
YXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogbwog
ICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWlu
KSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogewotICAgIG1fc3RydWN0dXJlSUQu
c2V0TWF5QmVOdWxsKHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZS5zZXRN
YXlCZU51bGwodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgIG1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OwogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7
CiB9CkBAIC01MzYsMTQgKzUzNiwxNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQ
UigpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIEFjY2Vzc0Nh
c2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKK3ZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKSBjb25zdAogewogICAgIG1fY29uZGl0aW9uU2V0LmZvckVhY2hEZXBl
bmRlbnRDZWxsKGZ1bmN0b3IpOwotICAgIGlmIChtX3N0cnVjdHVyZUlEKQotICAgICAgICBmdW5j
dG9yKG1fc3RydWN0dXJlSUQuZ2V0KCkpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAg
ZnVuY3RvcihtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hh
aW4pIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IG1fcG9seVByb3Rv
QWNjZXNzQ2hhaW4tPmNoYWluKCkpCi0gICAgICAgICAgICBmdW5jdG9yKHN0cnVjdHVyZUlELmRl
Y29kZSgpKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iodm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlE
KSk7CiAgICAgfQogCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAgLTg3NCw4ICs4NzQsOCBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAgICAgICAgIGlmIChtX3R5
cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9PSBTZXRQcml2
YXRlQnJhbmQpCiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIiwgaW5kZW50LCAiZnJvbSBzdHJ1
Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUoKSksCiAgICAgICAgICAgICAgICAgIlxu
IiwgaW5kZW50LCAidG8gc3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkp
KTsKLSAgICAgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmVJRCkKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiXG4iLCBpbmRlbnQsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZUlE
LmdldCgpKSk7CisgICAgICAgIGVsc2UgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIsIGluZGVudCwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0
dXJlLmdldCgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkp
CkBAIC05MDQsMTkgKzkwNCwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0p
IGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBBY2Nlc3NDYXNlOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewotICAgIGlmIChtX3N0
cnVjdHVyZUlEKQotICAgICAgICBtX3N0cnVjdHVyZUlELT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG1fc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAgICAgIGZv
ciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5jaGFp
bigpKQotICAgICAgICAgICAgc3RydWN0dXJlSUQuZGVjb2RlKCktPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCkt
Pm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBUcmFuc2l0aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChtX3N0cnVjdHVyZUlELT5wcmV2aW91c0lEKCkpKQotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZUlELmdldCgpKTsKKyAgICAgICAgaWYg
KHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0xNzIwLDcgKzE3MjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKICNlbmRpZgogCi0gICAgICAg
IGppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSwgdmFsdWVHUFIsIHJlc3VsdFJlZ3MsIGZhaWxBbmRJ
Z25vcmUpOworICAgICAgICBqaXQuZW1pdExvYWRQcm90b3R5cGUodm0sIHZhbHVlR1BSLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBmYWlsQW5kSWdub3JlKTsKICAgICAgICAgaml0Lm1vdmUoc2Ny
YXRjaDJHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBpc0luc3RhbmNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCB2YWx1ZUdQ
UiwgcHJvdG90eXBlR1BSKTsKQEAgLTI2MTMsNyArMjYxMyw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6
Y2FuQmVTaGFyZWQoY29uc3QgQWNjZXMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChs
aHMubV92aWFQcm94eSAhPSByaHMubV92aWFQcm94eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChsaHMubV9zdHJ1Y3R1cmVJRC5nZXQoKSAhPSByaHMubV9zdHJ1Y3R1cmVJRC5nZXQo
KSkKKyAgICBpZiAobGhzLm1fc3RydWN0dXJlLmdldCgpICE9IHJocy5tX3N0cnVjdHVyZS5nZXQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChsaHMubV9pZGVudGlmaWVyICE9IHJo
cy5tX2lkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDE1ICsxODQsMTUgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5
cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9PSBTZXRQcml2YXRlQnJhbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmVJRC0+cHJldmlvdXNJRCgpOwotICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmVJRC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIGJvb2wg
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soY29uc3QgU3RydWN0dXJlU3R1YkluZm8mKSBjb25zdDsK
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3R5cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9
PSBTZXRQcml2YXRlQnJhbmQpOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVJRC5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwogICAgIH0KIAogICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0
aW9uU2V0OyB9CkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2gobV9jb25kaXRpb25T
ZXQuaGFzaCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90eXBlKSwgbV92aWFQcm94eSwgbV9z
dHJ1Y3R1cmVJRC51bnZhbGlkYXRlZEdldCgpLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBj
b21wdXRlSGFzaChtX2NvbmRpdGlvblNldC5oYXNoKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3R5cGUpLCBtX3ZpYVByb3h5LCBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpLCBtX29mZnNl
dCk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgY2FuQmVTaGFyZWQoY29uc3QgQWNjZXNzQ2Fz
ZSYsIGNvbnN0IEFjY2Vzc0Nhc2UmKTsKQEAgLTI4NCw3ICsyODQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgICwgbV9zdGF0ZShXVEZNb3ZlKG90aGVyLm1fc3RhdGUpKQogICAgICAgICAsIG1fdmlh
UHJveHkoV1RGTW92ZShvdGhlci5tX3ZpYVByb3h5KSkKICAgICAgICAgLCBtX29mZnNldChXVEZN
b3ZlKG90aGVyLm1fb2Zmc2V0KSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUlEKFdURk1vdmUob3Ro
ZXIubV9zdHJ1Y3R1cmVJRCkpCisgICAgICAgICwgbV9zdHJ1Y3R1cmUoV1RGTW92ZShvdGhlci5t
X3N0cnVjdHVyZSkpCiAgICAgICAgICwgbV9jb25kaXRpb25TZXQoV1RGTW92ZShvdGhlci5tX2Nv
bmRpdGlvblNldCkpCiAgICAgICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKG90
aGVyLm1fcG9seVByb3RvQWNjZXNzQ2hhaW4pKQogICAgICAgICAsIG1faWRlbnRpZmllcihXVEZN
b3ZlKG90aGVyLm1faWRlbnRpZmllcikpCkBAIC0yOTUsNyArMjk1LDcgQEAgcHJvdGVjdGVkOgog
ICAgICAgICAsIG1fc3RhdGUob3RoZXIubV9zdGF0ZSkKICAgICAgICAgLCBtX3ZpYVByb3h5KG90
aGVyLm1fdmlhUHJveHkpCiAgICAgICAgICwgbV9vZmZzZXQob3RoZXIubV9vZmZzZXQpCi0gICAg
ICAgICwgbV9zdHJ1Y3R1cmVJRChvdGhlci5tX3N0cnVjdHVyZUlEKQorICAgICAgICAsIG1fc3Ry
dWN0dXJlKG90aGVyLm1fc3RydWN0dXJlKQogICAgICAgICAsIG1fY29uZGl0aW9uU2V0KG90aGVy
Lm1fY29uZGl0aW9uU2V0KQogICAgICAgICAsIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4ob3RoZXIu
bV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikKICAgICAgICAgLCBtX2lkZW50aWZpZXIob3RoZXIubV9p
ZGVudGlmaWVyKQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXN1YWxseSB0
aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRvIGhh
dmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKICAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJhbnNp
dGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZlcmVu
Y2UgdG8gdGhlIG9sZAogICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMgdGhl
IHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCi0gICAgV3JpdGVCYXJy
aWVyU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMs
OSBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiAgICAgaWYgKCFt
X2xhc3RTZWVuU3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJ1Y3R1
cmUqIGxhc3RTZWVuU3RydWN0dXJlID0gbV9sYXN0U2VlblN0cnVjdHVyZUlELmRlY29kZSgpOwor
ICAgIFN0cnVjdHVyZSogbGFzdFNlZW5TdHJ1Y3R1cmUgPSBjb2RlQmxvY2stPmhlYXAoKS0+c3Ry
dWN0dXJlSURUYWJsZSgpLmdldChtX2xhc3RTZWVuU3RydWN0dXJlSUQpOwogICAgIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgbGFzdFNlZW5TdHJ1Y3R1cmUpOwot
ICAgIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgbV9sYXN0U2Vl
blN0cnVjdHVyZUlEID0gMDsKIH0KIAogdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlKiBsYXN0U2VlblN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogcG9seW1vcnBoaWNTdHJ1Y3R1cmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmUq
PihyZWludGVycHJldF9jYXN0PHZvaWQqPigxKSk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVJRCBt
X2xhc3RTZWVuU3RydWN0dXJlSUQ7CisgICAgU3RydWN0dXJlSUQgbV9sYXN0U2VlblN0cnVjdHVy
ZUlEIHsgMCB9OwogICAgIGJvb2wgbV9tYXlTdG9yZVRvSG9sZSB7IGZhbHNlIH07IC8vIFRoaXMg
ZmxhZyBtYXkgYmVjb21lIG92ZXJsb2FkZWQgdG8gaW5kaWNhdGUgb3RoZXIgc3BlY2lhbCBjYXNl
cyB0aGF0IHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIGFycmF5IGFjY2VzcywgYXMgaXQgZGVwZW5k
cyBvbiBpbmRleGluZyB0eXBlLiBTaW5jZSB3ZSBjdXJyZW50bHkgaGF2ZSBiYXNpY2FsbHkganVz
dCBvbmUgaW5kZXhpbmcgdHlwZSAodHdvIHZhcmlhbnRzIG9mIEFycmF5U3RvcmFnZSksIHRoaXMg
ZmxhZyBmb3Igbm93IGp1c3QgbWVhbnMgZXhhY3RseSB3aGF0IGl0cyBuYW1lIGltcGxpZXMuCiAg
ICAgYm9vbCBtX291dE9mQm91bmRzIHsgZmFsc2UgfTsKICNpZiBVU0UoTEFSR0VfVFlQRURfQVJS
QVlTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMg
Q2hlY2tQcml2YXRlQnJhbgogICAgICAgICByZXR1cm4gQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5k
ZXgpIHsKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxp
c3RJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTIsNiArMTE5Miw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3Bl
KHZpc2l0b3IpOworICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CiAgICAgICAgIGlmIChtX21ldGFkYXRhKSB7CkBA
IC0xMjAxLDkgKzEyMDIsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uCiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJl
SUQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFy
a2VkKG9sZFN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
bmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CkBAIC0xMjE5LDkgKzEyMjAsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uCiAgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQo
b2xkU3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKQEAg
LTEyMzcsOSArMTIzOCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnJhbmQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1
Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
bmV3U3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtMTI2OCw3
ICsxMjY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAg
ICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CiAg
ICAgICAgIAogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9u
LT5tX3dlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKQotICAgICAgICAgICAgc3RydWN0dXJlSUQuZGVj
b2RlKCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJl
KHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICAgICAgZm9yIChhdXRv
JiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT5tX3RyYW5zaXRpb25zKSB7CiAgICAgICAgICAgICBp
ZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKQEAgLTEzMDgs
NyArMTMwOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAg
ICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBWTSYgdm0gPSAqbV92bTsKLSAgICBVTlVTRURf
VkFSSUFCTEUodm0pOwogICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAg
ICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+bV93ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcykgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIGlmICghdmlzaXRvci5p
c01hcmtlZChzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBpZiAobW9k
ZU1ldGFkYXRhLm1vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtb2RlTWV0
YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVj
dHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAg
ICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
IkNsZWFyaW5nICIsIG9wTmFtZSwgIiBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuIik7CiAgICAgICAg
ICAgICBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmNsZWFy
TExJbnRHZXRCeUlkQ2FjaGUobW9kZU1ldGFkYXRhKTsKQEAgLTEzODgsMTkgKzEzODgsMTkgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogCiAgICAgICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BUcnlHZXRCeUlkPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJl
SUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQo
b2xkU3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIHRyeV9nZXRfYnlfaWQgTExJ
bnQgcHJvcGVydHkgYWNjZXNzLiIpOwotICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJ
RCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEID0g
MDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEdldEJ5SWREaXJlY3Q+KFsmXSAoYXV0byYgbWV0
YWRhdGEpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisgICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgZ2V0
X2J5X2lkX2RpcmVjdCBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuIik7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwog
ICAgICAgICB9KTsKIApAQCAtMTQwOCwxMSArMTQwOCwxMSBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0
YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRDsKIAotICAgICAgICAgICAgaWYgKCghcHJvcGVy
dHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpICYmICghc3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChzdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpKQorICAgICAgICAgICAgaWYgKCgh
cHJvcGVydHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpICYmICghc3RydWN0dXJlSUQg
fHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBMTEludCBwcml2YXRlIHByb3Bl
cnR5IGFjY2Vzcy4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1
Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAg
ICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX3By
b3BlcnR5LmNsZWFyKCk7CiAgICAgICAgIH0pOwpAQCAtMTQyMSwxNCArMTQyMSwxNCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCi0gICAgICAgICAgICAgICAg
JiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG5ld1N0cnVjdHVyZUlELmRl
Y29kZSgpKSkKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNN
YXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCisg
ICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAg
ICAgICAgICYmICghY2hhaW4gfHwgdm0uaGVhcC5pc01hcmtlZChjaGFpbikpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uLiIpOwotICAgICAgICAgICAgbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJ
RCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAg
ICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgIH0pOwogCkBA
IC0xNDM2LDE1ICsxNDM2LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGUKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
bV9vbGRTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlE
ID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVy
dHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3Ry
dWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisg
ICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAg
ICAgICYmICghcHJvcGVydHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCi0gICAgICAg
ICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG5ld1N0cnVj
dHVyZUlELmRlY29kZSgpKSkpCisgICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8
fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IHB1dF9wcml2YXRl
X25hbWUgdHJhbnNpdGlvbi4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJl
SUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJ
RCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7Ci0gICAgICAgICAgICBt
ZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1l
dGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9wcm9w
ZXJ0eS5jbGVhcigpOwogICAgICAgICB9KTsKIApAQCAtMTQ1MiwzNyArMTQ1MiwzNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CiAgICAgICAgICAgICBKU0NlbGwqIGJyYW5kID0gbWV0YWRhdGEubV9icmFuZC5nZXQoKTsK
LSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQob2xk
U3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQg
fHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3Ry
dWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICAmJiAoIWJyYW5kIHx8IHZtLmhlYXAuaXNNYXJr
ZWQoYnJhbmQpKQotICAgICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVh
cC5pc01hcmtlZChuZXdTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpKQorICAgICAgICAgICAgICAgICYm
ICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmlu
ZyBMTEludCBzZXRfcHJpdmF0ZV9icmFuZCB0cmFuc2l0aW9uLiIpOwotICAgICAgICAgICAgbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fb2xkU3RydWN0dXJlSUQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1
Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX2JyYW5kLmNsZWFyKCk7CiAgICAg
ICAgIH0pOwogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BDaGVja1ByaXZhdGVCcmFu
ZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwogICAgICAgICAgICAgSlNDZWxsKiBicmFu
ZCA9IG1ldGFkYXRhLm1fYnJhbmQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoKCFzdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZUlELmRlY29kZSgpKSkKKyAgICAgICAgICAg
IGlmICgoIXN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgJiYgKCFicmFuZCB8
fCB2bS5oZWFwLmlzTWFya2VkKGJyYW5kKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBM
TEludCBjaGVja19wcml2YXRlX2JyYW5kIHRyYW5zaXRpb24uIik7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9icmFuZC5jbGVhcigp
OwogICAgICAgICB9KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wVG9UaGlzPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZChtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlELmRlY29kZSgpKSkKKyAgICAgICAgICAgIGlmICghbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1
cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldCht
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRC5kZWNv
ZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVy
ZSAlcC5cbiIsIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZXRhZGF0
YS5tX2NhY2hlZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FjaGVkU3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV90b1Ro
aXNTdGF0dXMgPSBtZXJnZShtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5
R0MpOwogICAgICAgICB9KTsKIApAQCAtMTU2OSw3ICsxNTY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH07CiAKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0ZDo6Z2V0PDA+KHBhaXIu
a2V5KS5kZWNvZGUoKSkpCisgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RkOjpnZXQ8MD4ocGFpci5rZXkpKSkpCiAgICAgICAgICAg
ICByZXR1cm4gY2xlYXIoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCA6IHBhaXIudmFsdWUpIHsK
QEAgLTE5MTcsNyArMTkxNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW4KICAgICAgICAgdmlzaXRvci5hcHBlbmQod2Vha1JlZmVyZW5jZSk7CiAKICAgICBmb3Ig
KFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT5tX3dlYWtTdHJ1Y3R1cmVSZWZl
cmVuY2VzKQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHN0cnVjdHVyZUlELmRl
Y29kZSgpKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2aXNpdG9yLnZtKCku
Z2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKSk7CiAjZW5kaWYgICAgCiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBEZWxldGVCeVN0YXR1
cyBEZWxldGVCeVN0YXR1czo6Y29tcHV0ZUZvCiAgICAgICAgIHJldHVybiBEZWxldGVCeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJ
bmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
bGlzdEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiB1bmlvbiBH
ZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhKCkKICAgICB7Ci0g
ICAgICAgIGRlZmF1bHRNb2RlLnN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
ZGVmYXVsdE1vZGUuc3RydWN0dXJlSUQgPSAwOwogICAgICAgICBkZWZhdWx0TW9kZS5jYWNoZWRP
ZmZzZXQgPSAwOwogICAgICAgICBkZWZhdWx0TW9kZS5wYWRkaW5nMSA9IDA7CiAgICAgICAgIG1v
ZGUgPSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0
YSB7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YSgpCiAgICAgewotICAgICAgICBkZWZhdWx0TW9k
ZS5zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgIGRlZmF1bHRNb2RlLnN0cnVj
dHVyZUlEID0gMDsKICAgICAgICAgZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKICAgICAg
ICAgZGVmYXVsdE1vZGUucGFkZGluZzEgPSAwOwogICAgICAgICBtb2RlID0gR2V0QnlJZE1vZGU6
OkRlZmF1bHQ7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogaW5saW5lIHZvaWQgR2V0QnlJZE1vZGVNZXRhZGF0YTo6Y2xlYXJUb0RlZmF1bHRNb2RlV2l0
aG91dENhY2hlKCkKIHsKICAgICBtb2RlID0gR2V0QnlJZE1vZGU6OkRlZmF1bHQ7Ci0gICAgZGVm
YXVsdE1vZGUuc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgIGRlZmF1bHRNb2RlLnN0
cnVjdHVyZUlEID0gMDsKICAgICBkZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXQgPSAwOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBHZXRCeVN0YXR1
cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQp
OwogCiAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKSkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsK
QEAgLTIzNiw3ICsyMzYsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAg
ICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgaWYgKGxp
c3QtPnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3Mg
PSBsaXN0LT5hdCgwKTsKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgSW5CeVN0YXR1cyBJbkJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgIH0KIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1
YjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNp
emUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2Vz
cyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgIH0KIAogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7Ci0gICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7IC8vIENsZWFyIG91dCB0aGUgaW5saW5l
IGFjY2VzcyBjb2RlLgorICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2UKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247Ci0gICAg
ICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7IC8vIENs
ZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBzdHViSW5mby5tX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3Mg
Y29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEluc3RhbmNlT2ZTdGF0dXMgSW5z
dGFuY2VPZlN0YXR1czo6Y29tcHUKICAgICBpZiAoc3R1YkluZm8tPmNhY2hlVHlwZSgpICE9IENh
Y2hlVHlwZTo6U3R1YikKICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7IC8vIFRoaXMgaXMg
Y29uc2VydmF0aXZlLiBJdCBjb3VsZCBiZSB0aGF0IHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCiAg
ICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+bV9zdHViOworICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICBJbnN0YW5j
ZU9mU3RhdHVzIHJlc3VsdDsKICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJ
bmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgY29uc3QgQWNjZXNz
Q2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMjEgKzMzLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUgewogcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mU3RydWN0dXJlSUQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZUlEKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSwgbV9z
dHJ1Y3R1cmUpOyB9CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlSUQuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIG1f
c3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3RydWN0
dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZSk7CiAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3N0
cnVjdHVyZUlELmNsZWFyKCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1
Y3R1cmVJRCk7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgot
ICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiB9OwogCiBpbmxpbmUgU3RydWN0dXJlKiBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVG
cm9tQmFzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBiYXNlR2xvYmFsT2JqZWN0LCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCiB7
Ci0gICAgQVNTRVJUKCFtX3N0cnVjdHVyZUlEIHx8IG1fc3RydWN0dXJlSUQuZ2V0KCktPmNsYXNz
SW5mbygpICE9IGJhc2VTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpIHx8IG1fc3RydWN0dXJlSUQtPmds
b2JhbE9iamVjdCgpICE9IGJhc2VTdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NF
UlQoIW1fc3RydWN0dXJlIHx8IG1fc3RydWN0dXJlLmdldCgpLT5jbGFzc0luZm8oKSAhPSBiYXNl
U3RydWN0dXJlLT5jbGFzc0luZm8oKSB8fCBtX3N0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkgIT0g
YmFzZVN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIEFTU0VSVChiYXNlU3RydWN0dXJl
LT5oYXNNb25vUHJvdG8oKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKQEAgLTYxLDgg
KzYxLDggQEAgaW5saW5lIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYQogICAgIC8v
IEVuc3VyZSB0aGF0IGlmIGFub3RoZXIgdGhyZWFkIHNlZXMgdGhlIHN0cnVjdHVyZSwgaXQgd2ls
bCBzZWUgaXQgcHJvcGVybHkgY3JlYXRlZC4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwog
Ci0gICAgbV9zdHJ1Y3R1cmVJRC5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVy
biBzdHJ1Y3R1cmU7CisgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsK
KyAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWlu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVBy
b3RvQWNjZXNzQ2hhaW4uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCwxMCArODAsMTAgQEAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBQb2x5UHJvdG9B
YwogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBvbHlQcm90b0FjY2Vzc0NoYWluKFdURk1vdmUo
Y2hhaW4pKSk7CiB9CiAKLWJvb2wgUG9seVByb3RvQWNjZXNzQ2hhaW46Om5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoVk0mKSBjb25zdAorYm9vbCBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IG1fY2hhaW4pIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlE
LmRlY29kZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIGlmICh2
bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWlu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90
b0FjY2Vzc0NoYWluLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3
dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01NywyMCArNTcs
MjAgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChWTSYp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
KFZNJiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBjb25zdCBGdW5jJiBmdW5jKSBjb25zdAor
ICAgIHZvaWQgZm9yRWFjaChWTSYgdm0sIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgY29uc3Qg
RnVuYyYgZnVuYykgY29uc3QKICAgICB7CiAgICAgICAgIGJvb2wgYXRFbmQgPSAhbV9jaGFpbi5z
aXplKCk7CiAgICAgICAgIGZ1bmMoYmFzZVN0cnVjdHVyZSwgYXRFbmQpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGFpbi5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
YXRFbmQgPSBpICsgMSA9PSBtX2NoYWluLnNpemUoKTsKLSAgICAgICAgICAgIGZ1bmMobV9jaGFp
bltpXS5kZWNvZGUoKSwgYXRFbmQpOworICAgICAgICAgICAgZnVuYyh2bS5nZXRTdHJ1Y3R1cmUo
bV9jaGFpbltpXSksIGF0RW5kKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0cnVjdHVyZSog
c2xvdEJhc2VTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpIGNvbnN0Cisg
ICAgU3RydWN0dXJlKiBzbG90QmFzZVN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogYmFzZVN0
cnVjdHVyZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2NoYWluLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX2NoYWluLmxhc3QoKS5kZWNvZGUoKTsKKyAgICAgICAgICAgIHJldHVy
biB2bS5nZXRTdHJ1Y3R1cmUobV9jaGFpbi5sYXN0KCkpOwogICAgICAgICByZXR1cm4gYmFzZVN0
cnVjdHVyZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
V2VhayhWTSYgdm0KICAgICB9CiAgICAgaWYgKG1fc3R1YlJvdXRpbmUpIHsKICAgICAgICAgZm9y
IChTdHJ1Y3R1cmVJRCB3ZWFrUmVmZXJlbmNlIDogbV9zdHViUm91dGluZS0+d2Vha1N0cnVjdHVy
ZXMoKSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB3ZWFrUmVmZXJlbmNl
LmRlY29kZSgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1
Y3R1cmUod2Vha1JlZmVyZW5jZSk7CiAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
c3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJl
dmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
RmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJFQ01BTW9kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgaWYg
KCFzdHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OwogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQoc3RydWN0dXJlSUQpOwogCiAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKQEAgLTky
LDcgKzkyLDcgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbgogICAg
ICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zm
c2V0KTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAKICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAg
ICAKQEAgLTE4OCw3ICsxODgsNyBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgCiAg
ICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBTZXRQcml2YXRlQnJhbmRTdGF0dXMgU2V0UHJpdmF0
ZUJyYW5kU3RhCiAgICAgICAgIHJldHVybiBTZXRQcml2YXRlQnJhbmRTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGxp
c3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAg
ICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsMTMg
QEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0NlbAogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBTcGVjU3RyaW5nOwogICAgIH0KLSAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tU3RydWN0dXJlKGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5
MDM2ODg4OiB1bmRvIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICAgIGF1dG8qIHN0cnVj
dHVyZSA9IGNlbGwtPnZtKCkudHJ5R2V0U3RydWN0dXJlKGNlbGwtPnN0cnVjdHVyZUlEKCkpOwor
ICAgIGlmIChVTkxJS0VMWSghaXNTYW5lUG9pbnRlcihzdHJ1Y3R1cmUpKSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNOb25lOworICAgIH0KKyAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiB9CiAKIFNwZWN1
bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVChoYXNDb25z
dGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6R2V0
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlSUQuc2V0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUg
PSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOworICAgIGNvZGVCbG9jay0+dm0oKS53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0K
IApAQCAtNzAsNyArNzEsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJl
cGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNl
dENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRl
bnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQu
c2V0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLT5pZCgpOworICAgIGNvZGVCbG9jay0+dm0oKS53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKICAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIApAQCAtNzksNyArODEsOCBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJUKG1fY2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRC5zZXQoY29kZUJsb2NrLT52bSgpLCBjb2Rl
QmxvY2ssIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CisgICAgY29kZUJs
b2NrLT52bSgpLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIGJ5SWRTZWxmT2Zmc2V0ID0g
b2Zmc2V0OwogfQogCkBAIC04Nyw3ICs5MCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6
OlN0dWI6Ci0gICAgICAgIGRlbGV0ZSBtX3N0dWI7CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgpAQCAtMTA1LDcgKzEwOCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmFib3V0VG9EaWUoKQogewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgbV9zdHViLT5hYm91dFRvRGllKCk7CisgICAg
ICAgIHUuc3R1Yi0+YWJvdXRUb0RpZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKQEAgLTEzNiw3
ICsxMzksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAg
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYg
KG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikgewotICAgICAgICAgICAgcmVzdWx0ID0g
bV9zdHViLT5hZGRDYXNlKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgKnRoaXMsIGFjY2Vzc0Nhc2Uu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICByZXN1bHQgPSB1LnN0dWItPmFkZENhc2Uo
bG9ja2VyLCB2bSwgY29kZUJsb2NrLCAqdGhpcywgYWNjZXNzQ2FzZS5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFkIHN0dWIsIHJlc3VsdDog
IiwgcmVzdWx0LCAiXG4iKTsKQEAgLTE3Myw3ICsxNzYsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6U3R1Yik7Ci0gICAgICAgICAg
ICBtX3N0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOworICAgICAgICAgICAgdS5zdHViID0gYWNjZXNz
LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1Yik7CkBAIC0xOTksNyArMjAyLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyBQb2x5bW9ycGhpY0FjY2Vz
cy4KICAgICAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICAgICAgCi0gICAgICAg
IHJlc3VsdCA9IG1fc3R1Yi0+cmVnZW5lcmF0ZShsb2NrZXIsIHZtLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgZWNtYU1vZGUsICp0aGlzKTsKKyAgICAgICAgcmVzdWx0ID0gdS5zdHViLT5yZWdl
bmVyYXRlKGxvY2tlciwgdm0sIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgKnRo
aXMpOwogICAgICAgICAKICAgICAgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJSZWdlbmVyYXRpb24gcmVzdWx0OiAiLCByZXN1
bHQsICJcbiIpOwpAQCAtMjEzLDExICsyMTYsMTEgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBT
dHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyBhY2Nlc3MgY29kZS4gVGhhdCdzIGJlY2F1c2Ug
d2hlbiB3ZSBmaXJzdCB0cmFuc2l0aW9uIHRvIGJlY29taW5nIGEgU3R1Yiwgd2UgbWF5CiAgICAg
ICAgIC8vIGJlIGJ1ZmZlcmVkLCBhbmQgd2UgaGF2ZSBub3QgeWV0IGdlbmVyYXRlZCBhbnkgY29k
ZS4gT25jZSB0aGUgU3R1YiBmaW5hbGx5IGdlbmVyYXRlcwogICAgICAgICAvLyBjb2RlLCB3ZSdy
ZSBubyBsb25nZXIgcnVubmluZyB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLCBzbyB3ZSBjYW4gdGhl
biBjbGVhciBvdXQKLSAgICAgICAgLy8gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQuIFRo
ZSByZWFzb24gd2UgZG9uJ3QgY2xlYXIgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQgd2hp
bGUKLSAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRv
IHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRAorICAgICAg
ICAvLyBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuIFRoZSByZWFzb24gd2UgZG9uJ3QgY2xl
YXIgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHdoaWxlCisgICAgICAgIC8vIHdlJ3JlIGJ1
ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAg
ICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlSUQuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3
ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdl
CiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yMzIsNyArMjM1LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVy
ZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRC5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzIwLDcgKzMyMyw3IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0QWdncmVnYXRlSW0KICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgbV9zdHVi
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdS5zdHViLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM0NSw3ICszNDgs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCiAgICAg
ICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2Nh
Y2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCi0gICAgICAgIGlzVmFsaWQgJj0gbV9zdHViLT52
aXNpdFdlYWsodm0pOworICAgICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsK
IAogICAgIGlmIChpc1ZhbGlkKQogICAgICAgICByZXR1cm47CkBAIC0zNjEsNyArMzY0LDcgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogICAgICAgICBzdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikKLSAgICAgICAgbV9zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKKyAgICAgICAgdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKIH0KIAog
dGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwpAQCAtMzcyLDcgKzM3NSw3IEBAIFN0dWJJbmZvU3VtbWFyeSBT
dHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWEKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0
aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKICAgICBTdHViSW5mb1N1bW1hcnkg
c2ltcGxlID0gU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6U3R1YikgewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IG1f
c3R1YjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSB1LnN0dWI7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBp
ZiAoYWNjZXNzLmRvZXNDYWxscyh2bSkpIHsKQEAgLTQwNCw3ICs0MDcsNyBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpjb250YWluc1BDKHZvaWQqCiB7CiAgICAgaWYgKG1fY2FjaGVUeXBlICE9
IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3N0
dWItPmNvbnRhaW5zUEMocGMpOworICAgIHJldHVybiB1LnN0dWItPmNvbnRhaW5zUEMocGMpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ2FjaGVUeXBlIG5ld0NhY2hlVHlwZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDE0ICsyMTEsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywg
c3RydWN0dXJlLCBpbXBsKTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUoVk0mKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZUlELmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQpOyB9Ci0KIHByaXZh
dGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGNvbnNpZGVyQ2FjaGluZyhWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpbXBsKQogICAgIHsKQEAgLTM1OSwxMCArMzUxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgUG9seW1vcnBoaWNBY2Nlc3MqIG1fc3R1
YiB7IG51bGxwdHIgfTsKICAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsKLSAgICBX
cml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRDsKLQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7IH0KKyAgICB1bmlvbiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBz
dHViOworICAgIH0gdTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVj
dHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJ
RCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3Ry
dWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9s
eW1vcnBoaWNBY2Nlc3MuCkBAIC00MjEsMTEgKzQyMiwxMCBAQCBwdWJsaWM6CiAgICAgdWludDhf
dCBjb3VudGRvd24geyAxIH07CiAgICAgdWludDhfdCByZXBhdGNoQ291bnQgeyAwIH07CiAgICAg
dWludDhfdCBudW1iZXJPZkNvb2xEb3ducyB7IDAgfTsKLSAgICB1aW50OF90IGJ1ZmZlcmluZ0Nv
dW50ZG93bjsKLXByaXZhdGU6Ci0gICAgTG9jayBtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2s7Ci1w
dWJsaWM6CisKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CisKKyAgICB1aW50OF90
IGJ1ZmZlcmluZ0NvdW50ZG93bjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7CiAgICAgYm9vbCB0
b29rU2xvd1BhdGggOiAxOwogICAgIGJvb2wgZXZlckNvbnNpZGVyZWQgOiAxOwpAQCAtNDM1LDYg
KzQzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHByb3BlcnR5SXNTdHJpbmcgOiAxOwogICAgIGJv
b2wgcHJvcGVydHlJc0ludDMyIDogMTsKICAgICBib29sIHByb3BlcnR5SXNTeW1ib2wgOiAxOwor
cHJpdmF0ZToKKyAgICBMb2NrIG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jazsKIH07CiAKIGlubGlu
ZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMDEsNyArMjIwMSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBB
bmQgd2UgY2hlY2sgdGhlIGluZGV4aW5nIG1vZGUgb2YgdGhlIHN0cnVjdHVyZS4gSWYgdGhlIGlu
ZGV4aW5nIG1vZGUgaXMgQ29XLCB0aGUgYnV0dGVyZmx5IGlzCiAgICAgICAgICAgICAgICAgLy8g
ZGVmaW5pdGVseSBKU0ltbXV0YWJsZUJ1dHRlcmZseS4KICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJREVhcmx5ID0gYXJyYXktPnN0cnVjdHVyZUlEKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkuaXNOdWtlZCgpKQorICAgICAgICAgICAgICAgIGlm
IChpc051a2VkKHN0cnVjdHVyZUlERWFybHkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlDbGFz
cygpID09IEFycmF5OjpPcmlnaW5hbENvcHlPbldyaXRlQXJyYXkpIHsKQEAgLTIyMTUsNyArMjIx
NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURMYXRlLmRlY29kZSgpOworICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0uZ2V0U3RydWN0dXJlKHN0
cnVjdHVyZUlETGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtMjI3Myw3ICsy
MjczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRExhdGUuZGVj
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlETGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
ODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUwNCw3ICs1NTA0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0dXJlSUQgY2FjaGVkU3Ry
dWN0dXJlSUQgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKGNhY2hl
ZFN0cnVjdHVyZUlEKQotICAgICAgICAgICAgICAgIGNhY2hlZFN0cnVjdHVyZSA9IGNhY2hlZFN0
cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIGNhY2hlZFN0cnVjdHVyZSA9IG1f
dm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChjYWNoZWRTdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICBpZiAobWV0YWRhdGEubV90b1RoaXNTdGF0dXMgIT0gVG9UaGlzT0sKICAgICAgICAg
ICAgICAgICB8fCAhY2FjaGVkU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgfHwgY2FjaGVkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzICE9IEpTT2JqZWN0OjppbmZv
KCktPm1ldGhvZFRhYmxlLnRvVGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNUcmFuc2l0
aW9uKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChu
b2RlLT50cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBvdXQucHJpbnQoIiwgSUQ6Iiwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5pZCgpLmJpdHMo
KSk7CisgICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQt
PmlkKCkpOwogI2Vsc2UKICAgICAgICAgb3V0LnByaW50KCIsIElEOiIsIFJhd1BvaW50ZXIobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0LmdldCgpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY4LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1
cmUtPmlkKCkuYml0cygpKSk7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwg
bGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgQ29tcGlsYXRpb25SZXN1
bHQgUGxhbjo6ZmluYWxpemUoKQogICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8SlNDZWxs
PiYgcmVmZXJlbmNlIDogbV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1fd2Vh
a1JlZmVyZW5jZXMpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHJlZmVy
ZW5jZS5nZXQoKSk7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDog
bV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1fd2Vha1N0cnVjdHVyZVJlZmVy
ZW5jZXMpCi0gICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHN0cnVjdHVyZUlE
LmRlY29kZSgpKTsKKyAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQobV92bS0+
Z2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKSk7CiAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnQgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkpCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGNvbnN0YW50LmdldCgpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiArMjQ0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAgICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCkBAIC0yNTgsNyArMjU5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJSZWcgbG9j
YWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAg
ICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RH
UFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKQEAgLTI5OCw2ICsyOTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVtb3RlR2xv
YmFsT2JqZWN0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgICAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQubm9kZSgpKSkKQEAgLTMxMCw3ICszMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVj
dEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xv
YmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2Nh
bEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGFyZ0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJyYW5jaFB0cihK
SVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmpl
Y3RHUFIsIHRha2VuKTsKIApAQCAtMTkwMyw2ICsxOTA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVRvQm9vbGVhbk9iagogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQgPQogICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpOwpAQCAtMTkxMSw4ICsxOTE1LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmoKICAgICAgICAgLy8gVGhlIG1hc3F1ZXJhZGVz
IGFzIHVuZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1Y3R1cmUgcmVnaXN0ZXIsIHNvIGFs
bG9jYXRlIGl0IGhlcmUuCiAgICAgICAgIC8vIERvIHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZnVu
Y3Rpb24gdG8gYXZvaWQgYnJhbmNoaW5nIGFyb3VuZCBhIHJlZ2lzdGVyIGFsbG9jYXRpb24uCiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU3RydWN0dXJlKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVhbFNjcmF0Y2godGhpcyk7CiAgICAgICAgIHN0cnVjdHVyZS5hZG9wdChyZWFsU3Ry
dWN0dXJlKTsKKyAgICAgICAgc2NyYXRjaC5hZG9wdChyZWFsU2NyYXRjaCk7CiAgICAgICAgIHN0
cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwpAQCAtMTkyOSw3ICsx
OTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iagogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCi0gICAgICAgIG1faml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICBtX2pp
dC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0yMDg0LDcgKzIwOTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCAKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAK
LSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVy
ZUdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBz
dHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMjE3
OCw3ICsyMTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCcmFuY2goRQog
ICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSB7CiAgICAgICAgICAgICBicmFuY2hUZXN0
OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpLCB0YWtlbik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCB2YWx1ZUdQUiwgdGVtcDFHUFIpOworICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHRlbXAxR1BSLCB0ZW1wMkdQUik7CiAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2Jq
ZWN0KSwgdGVtcDJHUFIpOwogICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcDFHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCB0ZW1wMkdQUiwgdGFrZW4pOwpAQCAtNDQ0MCw3ICs0NDQ3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBBU1NF
UlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSk7
CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1N0cnVjdHVy
ZS0+aWQoKS5iaXRzKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG5ld1N0cnVjdHVyZS0+aWQoKSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgICAgICAK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDY1OSw2ICs0NjY2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9i
YWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZW1vdGVHbG9iYWxPYmplY3Qo
dGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZS5qc1ZhbHVl
UmVncygpKTsKIApAQCAtNDY4Miw3ICs0NjkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BS
ID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xv
YmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0
R1BSKTsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAog
ICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xv
YmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUzMyw3ICs4NTMzLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbE9iagogewogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBv
YmplY3QuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0LmdwcigpLCByZXN1
bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CkBA
IC0xMTA0MSw3ICsxMTA0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0pT
Q2FzdCgKICAgICAgICAgR1BSUmVnIG90aGVyR1BSID0gb3RoZXIuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzcGVjaWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7CiAgICAgICAgIG1faml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwgc3BlY2lm
aWVkR1BSKTsKIApAQCAtMTEyNTIsNyArMTEyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRnVuY3Rpb25Ub1N0CiAKICAgICBzcGVjdWxhdGVGdW5jdGlvbihub2RlLT5jaGlsZDEo
KSwgZnVuY3Rpb24uZ3ByKCkpOwogCi0gICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
ZnVuY3Rpb24uZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgZnVuY3Rpb24uZ3ByKCksIHJlc3VsdC5ncHIoKSwgZXhlY3V0YWJsZS5ncHIoKSk7
CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19maW5hbF92PEpTQm91bmRGdW5jdGlvbj4sICJXZSBkb24ndCBoYW5kbGUg
c3ViY2xhc3NlcyB3aGVuIGNvbXBhcmluZyBjbGFzc0luZm8gYmVsb3ciKTsKICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW1QdHIoSlNCb3VuZEZ1bmN0aW9uOjppbmZvKCkpKSk7CkBAIC0xNDI2Nywx
MSArMTQyNjgsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RQog
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQ2VsbE9yT3RoZXJVc2UpIHsKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAKICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxk
MSgpKTsKIAogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3Mo
KTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmVDYXNlczsKQEAgLTE0MzIzLDcgKzE0MzI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3BlcnR5RQogICAgICAgICAgICAgaWYgKG9ubHlTdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG9ubHlTdHJ1Y3R1cmUpLCBzY3Jh
dGNoMUdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMUdQUik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFN0cnVjdHVyZTo6cHJl
dmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3Jh
dGNoMUdQUikpOwogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZlN0
cnVjdHVyZShzY3JhdGNoMUdQUikpOwpAQCAtMTQzMzUsNyArMTQzMzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFCiAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKIAogICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoMUdQUik7CisgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgc2NyYXRjaDFHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CkBAIC0xNDYwMiw3ICsxNDYwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RLZXlzT3IKICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGlsZDEo
KSwgb2JqZWN0R1BSKTsKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3RH
UFIsIHN0cnVjdHVyZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBvYmplY3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVy
ZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVy
bywgc2NyYXRjaEdQUikpOwpAQCAtMTQ4MTksOSArMTQ4MjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlUHJvbWlzCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7Ci0gICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5j
dGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBt
X2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0cnVjdHVyZUdQUiwgc3RydWN0dXJl
R1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BS
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0
cnVjdHVyZUdQUikpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVy
bmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5m
bygpKSwgc2NyYXRjaDFHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkpOwogICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFs
T2JqZWN0KSwgc2NyYXRjaDFHUFIpOwpAQCAtMTQ4NjgsOSArMTQ4NzAsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwogICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7Ci0gICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsK
LSAgICBtX2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0cnVjdHVyZUdQUiwgc3Ry
dWN0dXJlR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVE
YXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olpl
cm8sIHN0cnVjdHVyZUdQUikpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNz
OjppbmZvKCkpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBn
bG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CkBAIC0xNTMzMSwxNCArMTUzMzIsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVdlYWtNYXBTZXQoTgogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwogCiAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigp
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXBH
UFIpOwogI2Vsc2UKLSAgICBHUFJUZW1wb3JhcnkgdGVtcDIodGhpcyk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyh0ZW1wMi5ncHIoKSwgdGVtcEdQUik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyh0ZW1wMkdQUiwgdGVtcEdQUik7CiAjZW5kaWYKIAogICAgIHN3aXRjaCAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0xNTM2Myw3ICsxNTM2NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCB0
ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BS
LCB0ZW1wR1BSLCB0ZW1wMkdQUik7CiAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoKHZhbHVlLm1fdHlw
ZSAmJiAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewpAQCAtMTU0MDIsNyArMTU0MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0UHJvdG90eXBlCiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGls
ZDEoKSwgb2JqZWN0R1BSKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBvYmplY3RHUFIsIHJl
c3VsdFJlZ3MsIHNsb3dDYXNlcyk7CisgICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIG9iamVjdEdQUiwgcmVzdWx0UmVncywgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LAogICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIG9iamVjdEdQUikpOwogCkBAIC0xNTQxOSw3ICsxNTQyMSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUKICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwogCi0gICAgICAgIG1f
aml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCByZXN1bHRSZWdzLCBzbG93Q2Fz
ZXMpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgcmVz
dWx0UmVncywgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
LAogICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZh
bHVlUmVncykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDcgKzg0LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfcHJvdG90eXBlLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mUHJvdG90eXBlKCkpIFwKICAgICBtYWNybyhGdW5jdGlv
blJhcmVEYXRhX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSkgXAogICAgIG1hY3Jv
KEZ1bmN0aW9uUmFyZURhdGFfZXhlY3V0YWJsZSwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpIFwKLSAgICBtYWNybyhGdW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1cmVJRCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmVJRCgpKSBcCisgICAgbWFjcm8oRnVu
Y3Rpb25SYXJlRGF0YV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGVfc3RydWN0dXJl
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpKSBcCisgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9ib3VuZEZ1bmN0aW9uU3RydWN0
dXJlLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSkg
XAorICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfYWxsb2NhdGlvblByb2ZpbGVDbGVhcmluZ1dh
dGNocG9pbnQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGVDbGVh
cmluZ1dhdGNocG9pbnQoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRl
clNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0
ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlC
dWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg3NywxMSArNzg3NywxMCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGFzUmFyZURhdGEs
IGhhc1N0cnVjdHVyZSk7CiAgICAgICAgIExWYWx1ZSByYXJlRGF0YSA9IG1fb3V0LnN1YihyYXJl
RGF0YVRhZ3MsIG1fb3V0LmNvbnN0SW50UHRyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Ci0g
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihyYXJlRGF0YSwgbV9oZWFw
cy5GdW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihzdHJ1Y3R1cmVJ
RCksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoaGFzU3RydWN0dXJlKSk7CisgICAgICAgIExW
YWx1ZSBzdHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKHJhcmVEYXRhLCBtX2hlYXBzLkZ1bmN0aW9u
UmFyZURhdGFfaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZSk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xv
d0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0
cnVjdHVyZSA9IGRlY29kZU5vbk51bGxTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuZXF1YWwobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMu
U3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+aXNJbnRlcm5h
bFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8o
KSkpLCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwog
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9j
YXRpb25DYXNlKTsKQEAgLTc5MzMsMTEgKzc5MzIsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdT
X0VORAogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1JhcmVEYXRhLCBoYXNTdHJ1Y3R1cmUp
OwogICAgICAgICBMVmFsdWUgcmFyZURhdGEgPSBtX291dC5zdWIocmFyZURhdGFUYWdzLCBtX291
dC5jb25zdEludFB0cihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOwotICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIocmFyZURhdGEsIG1faGVhcHMuRnVuY3Rpb25SYXJl
RGF0YV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGVfc3RydWN0dXJlSUQpOwotICAg
ICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIoc3RydWN0dXJlSUQpLCByYXJlbHkoc2xv
d0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOworICAgICAgICBMVmFsdWUgc3RydWN0dXJl
ID0gbV9vdXQubG9hZFB0cihyYXJlRGF0YSwgbV9oZWFwcy5GdW5jdGlvblJhcmVEYXRhX2ludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1cmUpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxs
eShoYXNTdHJ1Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUs
IGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBkZWNv
ZGVOb25OdWxsU3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFz
c0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CkBAIC0x
MzcxMiw3ICsxMzcxMCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZUlEOwogICAgICAgICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9k
ZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAg
aWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQz
MihzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9v
dXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAKQEAgLTE2NzkxLDcgKzE2Nzg5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgIAogICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pZCgpLmJpdHMoKSksIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJl
LT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+b2Jq
ZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAogICAgICAgICAgICAgb2JqZWN0LCBtX2hlYXBzLkpT
Q2VsbF91c2VmdWxCeXRlcyk7CkBAIC0xOTU3Miw3ICsxOTU3MCw3IEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBt
X291dC5ub3RFcXVhbCgKICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3Ry
aW5nU3RydWN0dXJlLT5pZCgpLmJpdHMoKSkpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
Mih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUg
aXNTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkK
QEAgLTE5NTgxLDcgKzE5NTc5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAg
ICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkuYml0
cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJl
LT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzUm9wZVN0cmluZyhMVmFsdWUgc3RyaW5n
LCBFZGdlIGVkZ2UgPSBFZGdlKCkpCkBAIC0xOTYyOCw3ICsxOTYyNiw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVy
biBtX291dC5ub3RFcXVhbCgKICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCku
c3ltYm9sU3RydWN0dXJlLT5pZCgpLmJpdHMoKSkpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMih2bSgpLnN5bWJvbFN0cnVjdHVyZS0+aWQoKSkpOwogICAgIH0KICAgICAKICAgICBMVmFs
dWUgaXNTeW1ib2woTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKQEAgLTE5NjM3LDcgKzE5NjM1LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAg
ICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xTdHJ1Y3R1cmUtPmlkKCku
Yml0cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3ltYm9sU3RydWN0
dXJlLT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzTm90SGVhcEJpZ0ludFVua25vd25X
aGV0aGVyQ2VsbChMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKQEAgLTE5NjY2LDcgKzE5NjY0LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAog
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5iaWdJbnRTdHJ1Y3R1cmUtPmlk
KCkuYml0cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuYmlnSW50U3Ry
dWN0dXJlLT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzSGVhcEJpZ0ludChMVmFsdWUg
Y2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQpAQCAtMTk2NzUsNyArMTk2
NzMsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCiAgICAgICAgICAgICBtX291dC5sb2Fk
MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMih2bSgpLmJpZ0ludFN0cnVjdHVyZS0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5iaWdJbnRTdHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9
CiAKICAgICBMVmFsdWUgaXNBcnJheVR5cGVGb3JBcnJheWlmeShMVmFsdWUgY2VsbCwgQXJyYXlN
b2RlIGFycmF5TW9kZSkKQEAgLTIwNDAyLDcgKzIwNDAwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICBtX291
dC5iaXRPcigKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKFN0cnVjdHVyZUlEOjpudWtlZFN0cnVjdHVyZUlEQml0KSksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIobnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSksCiAgICAgICAgICAg
ICAgICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICBt
X291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgICAgIG1fb3V0LnN0
b3JlUHRyKGJ1dHRlcmZseSwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CkBA
IC0yMDQzMCw3ICsyMDQyOCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
bV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmJpdE9yKAogICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cnVjdHVyZUlEOjpudWtlZFN0cnVjdHVyZUlE
Qml0KSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudWtlZFN0cnVjdHVyZUlE
Qml0KCkpKSwKICAgICAgICAgICAgIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAg
bV9vdXQuc3RvcmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KTsKQEAgLTIwOTc1LDE2ICsyMDk3MywxNSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVuY2VzKCkuYWRkTGF6aWx5KHRhcmdl
dCk7CiAgICAgfQogCi0gICAgTFZhbHVlIGRlY29kZU5vbk51bGxTdHJ1Y3R1cmUoTFZhbHVlIHN0
cnVjdHVyZUlEKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG1hc2tlZFN0cnVjdHVyZUlEID0gbV9v
dXQuYml0QW5kKHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZUlETWFzaykp
OwotICAgICAgICByZXR1cm4gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKGdfanNjQ29uZmln
LnN0YXJ0T2ZTdHJ1Y3R1cmVIZWFwKSwgbV9vdXQuemVyb0V4dFB0cihtYXNrZWRTdHJ1Y3R1cmVJ
RCkpOwotICAgIH0KLQogICAgIExWYWx1ZSBsb2FkU3RydWN0dXJlKExWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICByZXR1cm4gZGVjb2RlTm9uTnVsbFN0
cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CisgICAgICAgIExWYWx1ZSB0YWJsZUJhc2UgPSBtX291dC5s
b2FkUHRyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYmFzZSgp
KSk7CisgICAgICAgIExWYWx1ZSB0YWJsZUluZGV4ID0gbV9vdXQuYVNocihzdHJ1Y3R1cmVJRCwg
bV9vdXQuY29uc3RJbnQzMihTdHJ1Y3R1cmVJRFRhYmxlOjpzX251bWJlck9mRW50cm9weUJpdHMp
KTsKKyAgICAgICAgTFZhbHVlIGVudHJvcHlCaXRzID0gbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHRQ
dHIoc3RydWN0dXJlSUQpLCBtX291dC5jb25zdEludDMyKFN0cnVjdHVyZUlEVGFibGU6OnNfZW50
cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50ZXIpKTsKKyAgICAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5zdHJ1Y3R1cmVUYWJsZSwgdGFibGVC
YXNlLCBtX291dC56ZXJvRXh0UHRyKHRhYmxlSW5kZXgpKTsKKyAgICAgICAgTFZhbHVlIGVuY29k
ZWRTdHJ1Y3R1cmVCaXRzID0gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJu
IG1fb3V0LmJpdFhvcihlbmNvZGVkU3RydWN0dXJlQml0cywgZW50cm9weUJpdHMpOwogICAgIH0K
IAogICAgIExWYWx1ZSB3ZWFrUG9pbnRlcihKU0NlbGwqIHBvaW50ZXIpCkBAIC0yMTAwMCw3ICsy
MDk5Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgIExWYWx1ZSB3ZWFrU3Ry
dWN0dXJlSUQoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKTsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKICAgICB9CiAgICAgCiAg
ICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgY2xhc3Mg
Vk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgV2VhazsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3Jp
dGVCYXJyaWVyQmFzZTsKLWNsYXNzIFdyaXRlQmFycmllclN0cnVjdHVyZUlEOwogCiBjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNs
b3RWaXNpdG9yKTsKQEAgLTE0NCw4ICsxNDMsNiBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+
Jik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmKTsKLSAg
ICB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNp
emVfdCBjb3VudCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OCwxNiArMTU4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OgogICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0
KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVuZFVuYmFy
cmllcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAK
ICNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU3RvY2hh
c3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3Nh
cnlUaW1lci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJTd2VlcGluZ1Njb3BlLmgiCkBAIC0zODksOCArMzg4LDggQEAgSGVhcDo6SGVh
cChWTSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgc3RyaW5nT2JqZWN0U3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFwQ2VsbFR5cGUsIFN0cmluZ09iamVjdCkKICAg
ICAsIHN0cnVjdHVyZUNoYWluU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFw
Q2VsbFR5cGUsIFN0cnVjdHVyZUNoYWluKQogICAgICwgc3RydWN0dXJlUmFyZURhdGFTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3Ry
dWN0dXJlUmFyZURhdGEpIC8vIEhhc2g6MHhhY2E0ZTYyZAotICAgICwgc3RydWN0dXJlU3BhY2Uo
Iklzb2xhdGVkU3RydWN0dXJlU3BhY2UiLCAqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgc2l6ZW9mKFN0cnVjdHVyZSksIFN0cnVjdHVyZTo6bnVtYmVyT2ZMb3dlclRpZXJDZWxs
cywgbWFrZVVuaXF1ZTxTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigiU3RydWN0dXJl
IikpCi0gICAgLCBicmFuZGVkU3RydWN0dXJlU3BhY2UoIklzb2xhdGVkQnJhbmRlZFN0cnVjdHVy
ZVNwYWNlIiwgKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIHNpemVvZihCcmFu
ZGVkU3RydWN0dXJlKSwgQnJhbmRlZFN0cnVjdHVyZTo6bnVtYmVyT2ZMb3dlclRpZXJDZWxscywg
bWFrZVVuaXF1ZTxTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigiU3RydWN0dXJlIikp
CisgICAgLCBzdHJ1Y3R1cmVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3Rp
YmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3RydWN0dXJlKQorICAgICwgYnJhbmRlZFN0cnVjdHVyZVNw
YWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBl
LCBCcmFuZGVkU3RydWN0dXJlKQogICAgICwgc3ltYm9sVGFibGVTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3ltYm9sVGFibGUpIC8v
IEhhc2g6MHhjNTIxNWFmZAogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29u
c3RyYWludHMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQogICAgICwgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
U3BhY2UpCkBAIC0xNjA2LDYgKzE2MDUsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIGlmICh2bSgpLnR5cGVQcm9maWxlcigpKQogICAgICAgICAg
ICAgdm0oKS50eXBlUHJvZmlsZXIoKS0+aW52YWxpZGF0ZVR5cGVTZXRDYWNoZSh2bSgpKTsKIAor
ICAgICAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKKwogICAgICAgICBy
ZWFwV2Vha0hhbmRsZXMoKTsKICAgICAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFz
aFRhYmxlcygpOwogICAgICAgICBzd2VlcEFycmF5QnVmZmVycygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVk
ZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJ
RFRhYmxlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNuZXNzLmgiCiAjaW5jbHVkZSAiV2Vha0hh
bmRsZU93bmVyLmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgpAQCAtMjc1LDYg
KzI3NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJl
dHVybiAhIW1fZGVmZXJyYWxEZXB0aDsgfQogCisgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0
dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorCiAgICAgQ29kZUJs
b2NrU2V0JiBjb2RlQmxvY2tTZXQoKSB7IHJldHVybiAqbV9jb2RlQmxvY2tzOyB9CiAKICNpZiBV
U0UoRk9VTkRBVElPTikKQEAgLTU5NCw2ICs1OTYsNyBAQCBwcml2YXRlOgogICAgIE1hcmthYmxl
PENvbGxlY3Rpb25TY29wZSwgRW51bU1hcmthYmxlVHJhaXRzPENvbGxlY3Rpb25TY29wZT4+IG1f
bGFzdENvbGxlY3Rpb25TY29wZTsKICAgICBMb2NrIG1fcmFjZU1hcmtTdGFja0xvY2s7CiAKKyAg
ICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKICAgICBNYXJrZWRTcGFjZSBt
X29iamVjdFNwYWNlOwogICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDEzICszMCw3MiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoQ1N0cmluZyBuYW1lKQotICAgIDogQmFz
ZShuYW1lKQorI2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgOiBtX2RlYnVn
SGVhcChuYW1lLmRhdGEoKSkKKyNlbmRpZgogeworICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKIH0K
IAogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KQogewotICAgIHJlbGVhc2VNZW1vcnlGcm9tU3ViY2xhc3NEZXN0cnVjdG9yKCk7CisjaWYgIUVO
QUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHZvaWQqIGJsb2NrID0gbV9ibG9ja3Nb
aV07CisgICAgICAgIGlmICghbV9jb21taXR0ZWQucXVpY2tHZXQoaSkpCisgICAgICAgICAgICBX
VEY6OmZhc3RDb21taXRBbGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
KTsKKyAgICAgICAgZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIC8vIFNpbmNlIHRoaXMgaXMg
ZGVzaWduZWQgc3BlY2lhbGx5IGZvciBJc29TdWJzcGFjZSwgd2Uga25vdyB0aGF0IHdlIHdpbGwg
b25seSBiZSBhc2tlZCB0bworICAgIC8vIGFsbG9jYXRlIE1hcmtlZEJsb2Nrcy4KKyAgICBSRUxF
QVNFX0FTU0VSVChhbGlnbm1lbnQgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoc2l6ZSA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKworI2lmIEVOQUJM
RShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgcmV0dXJuIG1fZGVidWdIZWFwLm1lbWFsaWdu
KE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIHRydWUpOwor
I2Vsc2UKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgCisgICAgbV9maXJzdFVu
Y29tbWl0dGVkID0gbV9jb21taXR0ZWQuZmluZEJpdChtX2ZpcnN0VW5jb21taXR0ZWQsIGZhbHNl
KTsKKyAgICBpZiAobV9maXJzdFVuY29tbWl0dGVkIDwgbV9ibG9ja3Muc2l6ZSgpKSB7CisgICAg
ICAgIG1fY29tbWl0dGVkLnF1aWNrU2V0KG1fZmlyc3RVbmNvbW1pdHRlZCk7CisgICAgICAgIHZv
aWQqIHJlc3VsdCA9IG1fYmxvY2tzW21fZmlyc3RVbmNvbW1pdHRlZF07CisgICAgICAgIFdURjo6
ZmFzdENvbW1pdEFsaWduZWRNZW1vcnkocmVzdWx0LCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5RmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6
OmJsb2NrU2l6ZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOworICAgIG1fYmxvY2tzLmFwcGVu
ZChyZXN1bHQpOworICAgIG1fYmxvY2tJbmRpY2VzLmFkZChyZXN1bHQsIGluZGV4KTsKKyAgICBp
ZiAobV9ibG9ja3MuY2FwYWNpdHkoKSAhPSBtX2NvbW1pdHRlZC5zaXplKCkpCisgICAgICAgIG1f
Y29tbWl0dGVkLnJlc2l6ZShtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAgICBtX2NvbW1pdHRlZC5x
dWlja1NldChpbmRleCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCit2b2lkIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqIGJhc2VQdHIp
Cit7CisjaWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICBtX2RlYnVnSGVhcC5m
cmVlKGJhc2VQdHIpOworI2Vsc2UKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAg
CisgICAgYXV0byBpdGVyID0gbV9ibG9ja0luZGljZXMuZmluZChiYXNlUHRyKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyICE9IG1fYmxvY2tJbmRpY2VzLmVuZCgpKTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGl0ZXItPnZhbHVlOworICAgIG1fY29tbWl0dGVkLnF1aWNrQ2xlYXIoaW5kZXgpOwor
ICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IHN0ZDo6bWluKGluZGV4LCBtX2ZpcnN0VW5jb21taXR0
ZWQpOworICAgIFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1lbW9yeShiYXNlUHRyLCBNYXJrZWRC
bG9jazo6YmxvY2tTaXplKTsKKyNlbmRpZgogfQogCiB2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTY4LDI1ICsxMjcsNSBAQCB2
b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlSZWFsCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5TWFsbG9jQmxvY2soKQotewotICAgIHJldHVybiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhNYXJr
ZWRCbG9jazo6YmxvY2tTaXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLX0KLQotdm9pZCBJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQmxvY2sodm9pZCogYmxvY2spCi17Ci0gICAg
ZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKLX0KLQotdm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBXVEY6OmZhc3RDb21taXRBbGln
bmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLX0KLQotdm9pZCBJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKQotewotICAg
IFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1lbW9yeShibG9jaywgTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmgiCisjaW5jbHVkZSAi
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM0
LDI0ICszNCwzMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBJc29NZW1vcnlBbGxvY2F0b3JCYXNlIHsKK2NsYXNz
IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IElzb01lbW9yeUFsbG9jYXRvckJh
c2U7Ci0KICAgICBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKENTdHJpbmcpOwogICAgIH5Jc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgZmluYWw7CiAKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUFs
aWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIGZpbmFsOworICAgIHZv
aWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIGZpbmFsOworCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZU1lbW9yeShzaXpl
X3QpIGZpbmFsOwogICAgIHZvaWQgZnJlZU1lbW9yeSh2b2lkKikgZmluYWw7CiAgICAgdm9pZCog
dHJ5UmVhbGxvY2F0ZU1lbW9yeSh2b2lkKiwgc2l6ZV90KSBmaW5hbDsKIAotcHJvdGVjdGVkOgot
ICAgIHZvaWQqIHRyeU1hbGxvY0Jsb2NrKCkgZmluYWw7Ci0gICAgdm9pZCBmcmVlQmxvY2sodm9p
ZCogYmxvY2spIGZpbmFsOwotICAgIHZvaWQgY29tbWl0QmxvY2sodm9pZCogYmxvY2spIGZpbmFs
OwotICAgIHZvaWQgZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykgZmluYWw7Citwcml2YXRlOgor
I2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgLy8gSWYgYnJlYWtkb3duIGlz
IGVuYWJsZWQsIHdlIGRvIG5vdCBlbnN1cmUgSXNvLWZlYXR1cmUuIFRoaXMgaXMgdG90YWxseSBP
SyBzaW5jZSBicmVha2Rvd24gaXMgbWVtb3J5IGJsb2F0IGRlYnVnZ2luZyBmZWF0dXJlLgorICAg
IFdURjo6RGVidWdIZWFwIG1fZGVidWdIZWFwOworI2Vsc2UKKyAgICBWZWN0b3I8dm9pZCo+IG1f
YmxvY2tzOworICAgIEhhc2hNYXA8dm9pZCosIHVuc2lnbmVkPiBtX2Jsb2NrSW5kaWNlczsKKyAg
ICBCaXRWZWN0b3IgbV9jb21taXR0ZWQ7CisgICAgdW5zaWduZWQgbV9maXJzdFVuY29tbWl0dGVk
IHsgMCB9OworICAgIExvY2sgbV9sb2NrOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9yeUFsbG9jYXRvckJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9y
eUFsbG9jYXRvckJhc2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29NZW1vcnlBbGxvY2F0b3JCYXNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklzb01lbW9yeUFsbG9jYXRv
ckJhc2UuaCIKLQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1Jc29NZW1vcnlBbGxvY2F0b3JCYXNlOjpJc29NZW1vcnlBbGxvY2F0b3JCYXNlKENTdHJpbmcg
bmFtZSkKLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotICAgIDogbV9kZWJ1Z0hl
YXAobmFtZS5kYXRhKCkpCi0jZW5kaWYKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci19Ci0K
LUlzb01lbW9yeUFsbG9jYXRvckJhc2U6On5Jc29NZW1vcnlBbGxvY2F0b3JCYXNlKCkKLXsKLX0K
LQotLy8gV2UgbmVlZCB0byBjYWxsIHRoaXMgZnJvbSB0aGUgZGVyaXZlZCBjbGFzcydzIGRlc3Ry
dWN0b3IgYmVjYXVzZSBpdCdzIHVuZGVmaW5lZCBiZWhhdmlvciB0byBjYWxsIHB1cmUgdmlydHVh
bCBtZXRob2RzIGZyb20gd2l0aGluIGEgZGVzdHJ1Y3Rvci4KLXZvaWQgSXNvTWVtb3J5QWxsb2Nh
dG9yQmFzZTo6cmVsZWFzZU1lbW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKQotewotI2lmICFF
TkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICB2b2lkKiBibG9jayA9IG1fYmxvY2tz
W2ldOwotICAgICAgICBpZiAoIW1fY29tbWl0dGVkLnF1aWNrR2V0KGkpKQotICAgICAgICAgICAg
Y29tbWl0QmxvY2soYmxvY2spOwotICAgICAgICBmcmVlQmxvY2soYmxvY2spOwotICAgIH0KLSNl
bmRpZgotfQotCi12b2lkKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlOjp0cnlBbGxvY2F0ZUFsaWdu
ZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAgLy8gU2luY2Ug
dGhpcyBpcyBkZXNpZ25lZCBzcGVjaWFsbHkgZm9yIElzb1N1YnNwYWNlLCB3ZSBrbm93IHRoYXQg
d2Ugd2lsbCBvbmx5IGJlIGFza2VkIHRvCi0gICAgLy8gYWxsb2NhdGUgTWFya2VkQmxvY2tzLgot
ICAgIFJFTEVBU0VfQVNTRVJUKGFsaWdubWVudCA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotCi0j
aWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKLSAgICByZXR1cm4gbV9kZWJ1Z0hlYXAu
bWVtYWxpZ24oTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwg
dHJ1ZSk7Ci0jZWxzZQotICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAKLSAgICBt
X2ZpcnN0VW5jb21taXR0ZWQgPSBtX2NvbW1pdHRlZC5maW5kQml0KG1fZmlyc3RVbmNvbW1pdHRl
ZCwgZmFsc2UpOwotICAgIGlmIChtX2ZpcnN0VW5jb21taXR0ZWQgPCBtX2Jsb2Nrcy5zaXplKCkp
IHsKLSAgICAgICAgbV9jb21taXR0ZWQucXVpY2tTZXQobV9maXJzdFVuY29tbWl0dGVkKTsKLSAg
ICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsKLSAgICAg
ICAgY29tbWl0QmxvY2socmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5TWFsbG9jQmxvY2soKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nr
cy5zaXplKCk7Ci0gICAgbV9ibG9ja3MuYXBwZW5kKHJlc3VsdCk7Ci0gICAgbV9ibG9ja0luZGlj
ZXMuYWRkKHJlc3VsdCwgaW5kZXgpOwotICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1f
Y29tbWl0dGVkLnNpemUoKSkKLSAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNh
cGFjaXR5KCkpOwotICAgIG1fY29tbWl0dGVkLnF1aWNrU2V0KGluZGV4KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotI2VuZGlmCi19Ci0KLXZvaWQgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZTo6ZnJlZUFs
aWduZWRNZW1vcnkodm9pZCogYmFzZVB0cikKLXsKLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJF
QUtET1dOKQotICAgIG1fZGVidWdIZWFwLmZyZWUoYmFzZVB0cik7Ci0jZWxzZQotICAgIExvY2tl
ciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAKLSAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNl
cy5maW5kKGJhc2VQdHIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGlj
ZXMuZW5kKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7Ci0gICAgbV9jb21t
aXR0ZWQucXVpY2tDbGVhcihpbmRleCk7Ci0gICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjpt
aW4oaW5kZXgsIG1fZmlyc3RVbmNvbW1pdHRlZCk7Ci0gICAgZGVjb21taXRCbG9jayhiYXNlUHRy
KTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuaAkocmV2aXNp
b24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxsb2Nh
dG9yQmFzZS5oCShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIElz
b01lbW9yeUFsbG9jYXRvckJhc2UgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7Ci1w
dWJsaWM6Ci0gICAgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZShDU3RyaW5nKTsKLSAgICB+SXNvTWVt
b3J5QWxsb2NhdG9yQmFzZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCogdHJ5QWxsb2NhdGVBbGln
bmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBmaW5hbDsKLSAgICB2b2lk
IGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBmaW5hbDsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
cmVsZWFzZU1lbW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKTsKLSAgICB2aXJ0dWFsIHZvaWQq
IHRyeU1hbGxvY0Jsb2NrKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcmVlQmxvY2sodm9pZCog
YmxvY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmxvY2sodm9pZCogYmxvY2spID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykgPSAwOwotCi0j
aWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKLXByb3RlY3RlZDoKLSAgICAvLyBJZiBi
cmVha2Rvd24gaXMgZW5hYmxlZCwgd2UgZG8gbm90IGVuc3VyZSBJc28tZmVhdHVyZS4gVGhpcyBp
cyB0b3RhbGx5IE9LIHNpbmNlIGJyZWFrZG93biBpcyBtZW1vcnkgYmxvYXQgZGVidWdnaW5nIGZl
YXR1cmUuCi0gICAgV1RGOjpEZWJ1Z0hlYXAgbV9kZWJ1Z0hlYXA7Ci0jZWxzZQotcHJpdmF0ZToK
LSAgICBWZWN0b3I8dm9pZCo+IG1fYmxvY2tzOwotICAgIEhhc2hNYXA8dm9pZCosIHVuc2lnbmVk
PiBtX2Jsb2NrSW5kaWNlczsKLSAgICBCaXRWZWN0b3IgbV9jb21taXR0ZWQ7Ci0gICAgdW5zaWdu
ZWQgbV9maXJzdFVuY29tbWl0dGVkIHsgMCB9OwotICAgIExvY2sgbV9sb2NrOwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMs
MTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUlzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBz
aXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9w
dHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiBhbGxvY2F0b3IpCitJc29TdWJzcGFjZTo6SXNv
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBjb25zdCBIZWFwQ2VsbFR5cGUmIGhl
YXBDZWxsVHlwZSwgc2l6ZV90IHNpemUsIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJDZWxscykK
ICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAgLCBtX2RpcmVjdG9yeShXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKICAgICAsIG1fbG9j
YWxBbGxvY2F0b3IoJm1fZGlyZWN0b3J5KQotICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKGFsbG9jYXRvciA/IFdURk1vdmUoYWxsb2NhdG9yKSA6IG1ha2VVbmlxdWU8SXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcj4obmFtZSkpCisgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IobWFrZVVuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihuYW1lKSkKIHsKICAgICBt
X3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3VudCA9IG51bWJlck9mTG93ZXJUaWVyQ2VsbHM7CiAg
ICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KHNpemUpID09IGNlbGxTaXplKCkpOwpAQCAtOTksOSArOTksOCBAQCB2b2lkKiBJc29TdWJzcGFj
ZTo6dHJ5QWxsb2NhdGVGcm9tTG93ZXJUCiAgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlv
bik7CiAgICAgfQogICAgIGlmIChtX3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3VudCkgewotICAg
ICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IFByZWNpc2VBbGxvY2F0aW9uOjp0
cnlDcmVhdGVGb3JMb3dlclRpZXIobV9zcGFjZS5oZWFwKCksIGNlbGxTaXplKCksIHRoaXMsIC0t
bV9yZW1haW5pbmdMb3dlclRpZXJDZWxsQ291bnQpOwotICAgICAgICBpZiAoYWxsb2NhdGlvbikK
LSAgICAgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlvbik7CisgICAgICAgIFByZWNpc2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gUHJlY2lzZUFsbG9jYXRpb246OmNyZWF0ZUZvckxvd2Vy
VGllcihtX3NwYWNlLmhlYXAoKSwgY2VsbFNpemUoKSwgdGhpcywgLS1tX3JlbWFpbmluZ0xvd2Vy
VGllckNlbGxDb3VudCk7CisgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlvbik7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxOCArMjYsMTggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKLSNpbmNsdWRlICJJ
c29NZW1vcnlBbGxvY2F0b3JCYXNlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKICNpbmNsdWRl
ICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRh
aWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I7CiBjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJz
cGFjZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBlJiwgc2l6ZV90IHNpemUsIHVpbnQ4X3Qg
bnVtYmVyT2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9jYXRv
ckJhc2U+JiYgPSBudWxscHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5cGUmLCBzaXplX3QsIHVpbnQ4X3Qg
bnVtYmVyT2ZMb3dlclRpZXJDZWxscyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfklzb1N1YnNw
YWNlKCkgb3ZlcnJpZGU7CiAKICAgICBzaXplX3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2RpcmVj
dG9yeS5jZWxsU2l6ZSgpOyB9CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
QmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7CiAgICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFs
bG9jYXRvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4gbV9p
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PFByZWNpc2VBbGxvY2F0aW9uLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UHJl
Y2lzZUFsbG9jYXRpb24+PiBtX2xvd2VyVGllckZyZWVMaXN0OwogICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxJc29DZWxsU2V0LCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2Vs
bFNldHM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9j
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNp
c2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyAr
MTIwLDcgQEAgUHJlY2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0aW9uOjp0cgogfQogCiAK
LVByZWNpc2VBbGxvY2F0aW9uKiBQcmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJU
aWVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBTdWJzcGFjZSogc3Vic3BhY2UsIHVpbnQ4X3Qg
bG93ZXJUaWVySW5kZXgpCitQcmVjaXNlQWxsb2NhdGlvbiogUHJlY2lzZUFsbG9jYXRpb246OmNy
ZWF0ZUZvckxvd2VyVGllcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgU3Vic3BhY2UqIHN1YnNw
YWNlLCB1aW50OF90IGxvd2VyVGllckluZGV4KQogewogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRh
dGVERkdEb2VzR0MpCiAgICAgICAgIGhlYXAudm0oKS52ZXJpZnlDYW5HQygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBQcmVjaXNlQWxsb2NhdGlvbiogdHJ5Q3JlYXRlKEhlYXAmLCBzaXplX3QsIFN1YnNwYWNlKiwg
dW5zaWduZWQgaW5kZXhJblNwYWNlKTsKIAotICAgIHN0YXRpYyBQcmVjaXNlQWxsb2NhdGlvbiog
dHJ5Q3JlYXRlRm9yTG93ZXJUaWVyKEhlYXAmLCBzaXplX3QsIFN1YnNwYWNlKiwgdWludDhfdCBs
b3dlclRpZXJJbmRleCk7CisgICAgc3RhdGljIFByZWNpc2VBbGxvY2F0aW9uKiBjcmVhdGVGb3JM
b3dlclRpZXIoSGVhcCYsIHNpemVfdCwgU3Vic3BhY2UqLCB1aW50OF90IGxvd2VyVGllckluZGV4
KTsKICAgICBQcmVjaXNlQWxsb2NhdGlvbiogcmV1c2VGb3JMb3dlclRpZXIoKTsKIAogICAgIFBy
ZWNpc2VBbGxvY2F0aW9uKiB0cnlSZWFsbG9jYXRlKHNpemVfdCwgU3Vic3BhY2UqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDkgKzE1MiwxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRK
U0NlbGxPckF1eGlsaWFyCiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiR0MgdHlwZTog
IiwgaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludCgiT2JqZWN0IGF0OiAiLCBSYXdQb2ludGVyKGpzQ2VsbCksICJcbiIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJl
IElEOiAiLCBzdHJ1Y3R1cmVJRC5iaXRzKCksICIgKCIsIFJhd1BvaW50ZXIoc3RydWN0dXJlSUQu
ZGVjb2RlKCkpLCAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0
dXJlIElEOiAiLCBzdHJ1Y3R1cmVJRCwgIiAoMHgiLCBmb3JtYXQoIiV4Iiwgc3RydWN0dXJlSUQp
LCAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlIElEIHRh
YmxlIHNpemU6ICIsIGhlYXAoKS0+c3RydWN0dXJlSURUYWJsZSgpLnNpemUoKSwgIlxuIik7CiAj
ZWxzZQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZTogIiwgUmF3UG9p
bnRlcihzdHJ1Y3R1cmVJRC5kZWNvZGUoKSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIlN0cnVjdHVyZTogIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVJRCksICJcbiIpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiT2JqZWN0IGNvbnRlbnRzOiIp
OwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKQpA
QCAtMTg1LDEzICsxODYsMTMgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcgogICAgICAgICAgICAgZGllKCJHQyBzY2FuIGZvdW5kIGNvcnJ1cHQgb2JqZWN0OiBzdHJ1
Y3R1cmVJRCBpcyB6ZXJvIVxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBJdCdzIG5vdCBPSyBm
b3IgdGhlIHN0cnVjdHVyZSB0byBiZSBudWtlZCBhdCBhbnkgR0Mgc2NhbiBwb2ludC4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZUlELmlzTnVrZWQoKSkKKyAgICAgICAgaWYgKGlzTnVrZWQoc3RydWN0
dXJlSUQpKQogICAgICAgICAgICAgZGllKCJHQyBzY2FuIGZvdW5kIG9iamVjdCBpbiBiYWQgc3Rh
dGU6IHN0cnVjdHVyZUlEIGlzIG51a2VkIVxuIik7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFRo
aXMgZGV0ZWN0cyB0aGUgd29yc3Qgb2YgdGhlIGJhZG5lc3MuCi0gICAgICAgIEludGVncml0eTo6
YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCk7CisgICAgICAgIEludGVncml0eTo6YXVkaXRT
dHJ1Y3R1cmVJRChoZWFwKCktPnN0cnVjdHVyZUlEVGFibGUoKSwgc3RydWN0dXJlSUQpOwogICAg
IH07Ci0KKyAgICAKICAgICAvLyBJbiBkZWJ1ZyBtb2RlLCB3ZSB2YWxpZGF0ZSBiZWZvcmUgbWFy
a2luZyBzaW5jZSB0aGlzIG1ha2VzIGl0IGNsZWFyZXIgd2hhdCB0aGUgcHJvYmxlbQogICAgIC8v
IHdhcy4gSXQncyBhbHNvIHNsb3dlciwgc28gd2UgZG9uJ3QgZG8gaXQgbm9ybWFsbHkuCiAgICAg
aWYgKEFTU0VSVF9FTkFCTEVEICYmIGlzSlNDZWxsS2luZChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDggKzkyLDYgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYp
OwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJik7Ci0gICAg
dm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJ
dGVyYXRvciBlbmQpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBz
aXplX3QgY291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTYg
KzExNiw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAgICBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmIHNs
b3QpCi17Ci0gICAgYXBwZW5kVW5iYXJyaWVyZWQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihz
bG90LmdldCgpKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkp
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1
cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCi0KLSNpbmNsdWRlICJKU0NDb25m
aWcuaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgotCi0jaW5jbHVkZSA8d3RmL09TQWxsb2Nh
dG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKENTdHJpbmcgbmFtZSkKLSAgICA6
IEJhc2UobmFtZSkKLXsKLX0KLQotU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6flN0
cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQotewotICAgIHJlbGVhc2VNZW1vcnlGcm9t
U3ViY2xhc3NEZXN0cnVjdG9yKCk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgi
U3RydWN0dXJlKCIsIFJhd1BvaW50ZXIodGhpcyksICIpIik7Ci19Ci0KLXZvaWQqIFN0cnVjdHVy
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlTWVtb3J5KHNpemVfdCkKLXsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpmcmVlTWVtb3J5KHZvaWQqKQotewotICAgIC8vIFN0cnVjdHVyZXMgZG8gbm90IHN1cHBv
cnQgUHJlY2lzZSBhbGxvY2F0aW9ucyByaWdodCBub3cuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCogU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5UmVhbGxvY2F0ZU1lbW9yeSh2b2lkKiwgc2l6ZV90KQotewotICAgIC8vIFN0cnVjdHVyZXMg
ZG8gbm90IHN1cHBvcnQgUHJlY2lzZSBhbGxvY2F0aW9ucyByaWdodCBub3cuCi0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2lmIENQVShBRERSRVNTNjQpCi0KLWNsYXNz
IFN0cnVjdHVyZU1lbW9yeU1hbmFnZXIgewotcHVibGljOgotICAgIFN0cnVjdHVyZU1lbW9yeU1h
bmFnZXIoKQotICAgIHsKLSAgICAgICAgLy8gRG9uJ3QgdXNlIHRoZSBmaXJzdCBwYWdlIGJlY2F1
c2UgemVybyBpcyB1c2VkIGFzIHRoZSBlbXB0eSBTdHJ1Y3R1cmVJRCBhbmQgdGhlIGZpcnN0IGFs
bG9jYXRpb24gd2lsbCBjb25mbGljdC4KLSAgICAgICAgbV91c2VkQmxvY2tzLnNldCgwKTsKLSAg
ICB9Ci0KLSAgICB2b2lkKiB0cnlNYWxsb2NTdHJ1Y3R1cmVCbG9jaygpCi0gICAgewotICAgICAg
ICBzaXplX3QgZnJlZUluZGV4OwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHN0YXJ0SW5kZXggPSAwOwot
ICAgICAgICAgICAgZnJlZUluZGV4ID0gbV91c2VkQmxvY2tzLmZpbmRCaXQoc3RhcnRJbmRleCwg
MCk7Ci0gICAgICAgICAgICBBU1NFUlQoZnJlZUluZGV4IDw9IG1fdXNlZEJsb2Nrcy5iaXRDb3Vu
dCgpKTsKLSAgICAgICAgICAgIGlmIChmcmVlSW5kZXggKiBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
ID49IHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIG1fdXNlZEJsb2Nrcy5zZXQoZnJlZUluZGV4KTsKLSAgICAgICAg
fQotCi0gICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2Vk
QmxvY2sqPihnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVhcCkgKyBmcmVlSW5kZXggKiBN
YXJrZWRCbG9jazo6YmxvY2tTaXplOwotICAgICAgICBjb25zdGV4cHIgYm9vbCB3cml0YWJsZSA9
IHRydWU7Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGV4ZWN1dGFibGUgPSBmYWxzZTsKLSAgICAg
ICAgT1NBbGxvY2F0b3I6OmNvbW1pdChibG9jaywgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgd3Jp
dGFibGUsIGV4ZWN1dGFibGUpOwotICAgICAgICByZXR1cm4gYmxvY2s7Ci0gICAgfQotCi0gICAg
dm9pZCBmcmVlU3RydWN0dXJlQmxvY2sodm9pZCogYmxvY2tQdHIpCi0gICAgewotICAgICAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXQoYmxvY2tQdHIsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwot
ICAgICAgICB1aW50cHRyX3QgYmxvY2sgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmxv
Y2tQdHIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0
dXJlSGVhcCA8PSBibG9jayAmJiBibG9jayA8IGdfanNjQ29uZmlnLnN0YXJ0T2ZTdHJ1Y3R1cmVI
ZWFwICsgc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YmxvY2tTaXplPihibG9jaykgPT0gYmxv
Y2spOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgbV91c2VkQmxv
Y2tzLnF1aWNrQ2xlYXIoKGJsb2NrIC0gZ19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXAp
IC8gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExvY2sg
bV9sb2NrOwotICAgIEJpdFZlY3RvciBtX3VzZWRCbG9ja3M7Ci19OwotCi1zdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFN0cnVjdHVyZU1lbW9yeU1hbmFnZXI+IHNfc3RydWN0dXJlTWVtb3J5TWFu
YWdlcjsKLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbml0aWFsaXpl
U3RydWN0dXJlQWRkcmVzc1NwYWNlKCkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KGhhc09uZUJpdFNl
dChzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUpKTsKLQotICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZT
dHJ1Y3R1cmVIZWFwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KE9TQWxsb2NhdG9yOjpy
ZXNlcnZlVW5jb21taXR0ZWRBbGlnbmVkKHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSwgT1NBbGxv
Y2F0b3I6OkZhc3RNYWxsb2NQYWdlcykpOwotICAgIHNfc3RydWN0dXJlTWVtb3J5TWFuYWdlci5j
b25zdHJ1Y3QoKTsKLQotICAgIEFTU0VSVCgoZ19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhl
YXAgJiB+c3RydWN0dXJlSURNYXNrKSA9PSBnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVh
cCk7Ci19Ci0KLXZvaWQqIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeU1hbGxv
Y0Jsb2NrKCkKLXsKLSAgICByZXR1cm4gc19zdHJ1Y3R1cmVNZW1vcnlNYW5hZ2VyLT50cnlNYWxs
b2NTdHJ1Y3R1cmVCbG9jaygpOwotfQotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmZyZWVCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBzX3N0cnVjdHVyZU1lbW9yeU1h
bmFnZXItPmZyZWVTdHJ1Y3R1cmVCbG9jayhibG9jayk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6Y29tbWl0QmxvY2sodm9pZCogYmxvY2spCi17Ci0gICAgY29u
c3RleHByIGJvb2wgd3JpdGFibGUgPSB0cnVlOwotICAgIGNvbnN0ZXhwciBib29sIGV4ZWN1dGFi
bGUgPSBmYWxzZTsKLSAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KGJsb2NrLCBNYXJrZWRCbG9jazo6
YmxvY2tTaXplLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6ZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXQoYmxvY2ssIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotfQot
Ci0jZWxzZSAvLyBub3QgQ1BVKEFERFJFU1M2NCkKLQotLy8gRklYTUU6IFRoaXMgaXMgdGhlIHNh
bWUgYXMgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBtYXliZSB3ZSBzaG91bGQganVzdCB1c2Ug
dGhhdCBmb3IgMzItYml0LgotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OmluaXRpYWxpemVTdHJ1Y3R1cmVBZGRyZXNzU3BhY2UoKQotewotICAgIGdfanNjQ29uZmlnLnN0
YXJ0T2ZTdHJ1Y3R1cmVIZWFwID0gMDsKLX0KLQotdm9pZCogU3RydWN0dXJlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6dHJ5TWFsbG9jQmxvY2soKQotewotICAgIHJldHVybiB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhNYXJrZWRCbG9jazo6YmxvY2tTaXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
LX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQmxvY2sodm9p
ZCogYmxvY2spCi17Ci0gICAgZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsK
LSAgICBXVEY6OmZhc3RDb21taXRBbGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNv
bW1pdEJsb2NrKHZvaWQqIGJsb2NrKQotewotICAgIFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1l
bW9yeShibG9jaywgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7Ci19Ci0KLSNlbmRpZiAvLyBDUFUo
QUREUkVTUzY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklzb01lbW9yeUFsbG9jYXRvckJhc2UuaCIKLSNpbmNs
dWRlIDx3dGYvR2lnYWNhZ2UuaD4KLQotI2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04p
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIGZpbmFsIDogcHVibGljIElz
b01lbW9yeUFsbG9jYXRvckJhc2UgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBJc29NZW1v
cnlBbGxvY2F0b3JCYXNlOwotCi0gICAgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihD
U3RyaW5nKTsKLSAgICB+U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGZpbmFsOwot
ICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9p
ZCogdHJ5QWxsb2NhdGVNZW1vcnkoc2l6ZV90KSBmaW5hbDsKLSAgICB2b2lkIGZyZWVNZW1vcnko
dm9pZCopIGZpbmFsOwotICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVNZW1vcnkodm9pZCosIHNpemVf
dCkgZmluYWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3RydWN0dXJlQWRkcmVzc1Nw
YWNlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkKiB0cnlNYWxsb2NCbG9jaygpIGZpbmFsOwot
ICAgIHZvaWQgZnJlZUJsb2NrKHZvaWQqIGJsb2NrKSBmaW5hbDsKLSAgICB2b2lkIGNvbW1pdEJs
b2NrKHZvaWQqIGJsb2NrKSBmaW5hbDsKLSAgICB2b2lkIGRlY29tbWl0QmxvY2sodm9pZCogYmxv
Y2spIGZpbmFsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3Rv
cmVTdHJ1Y3R1cmUKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5zdG9yZTY0KFRydXN0ZWRJ
bW02NChzdHJ1Y3R1cmVQdHItPmlkQmxvYigpKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVz
dCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7Ci0gICAgICAgIEp1bXAgY29ycmVjdFN0cnVjdHVyZSA9IGppdC5icmFuY2gzMihFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgSnVt
cCBjb3JyZWN0U3RydWN0dXJlID0gaml0LmJyYW5jaDMyKEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
c3RydWN0dXJlUHRyLT5pZCgpKSk7CiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1
Y3R1cmVJRElzVmFsaWQpOwogICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmppdCk7CiAK
QEAgLTM4OSwyOSArMzg5LDQ0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5
KEpTVmEKICAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAK
LXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKFJlZ2lz
dGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgbW92ZShzb3VyY2UsIGRlc3QpOwotI2lmIENQ
VShBRERSRVNTNjQpCi0gICAgLy8gVGhpcyBjb3VsZCB1c2UgQkZJIG9uIGFybTY0IGJ1dCB0aGF0
IG9ubHkgaGVscHMgaWYgdGhlIHN0YXJ0IG9mIHN0cnVjdHVyZSBoZWFwIGlzIGVuY29kYWJsZSBh
cyBhIG1vdiBhbmQgbm90IGFzIGFuIGltbWVkaWF0ZSBpbiB0aGUgYWRkIHNvIGl0J3MgcHJvYmFi
bHkgbm90IHN1cGVyIGltcG9ydGFudC4KLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJl
SURNYXNrKSwgZGVzdCk7Ci0gICAgYWRkNjQoVHJ1c3RlZEltbTY0KGdfanNjQ29uZmlnLnN0YXJ0
T2ZTdHJ1Y3R1cmVIZWFwKSwgZGVzdCk7Ci0jZW5kaWYgLy8gbm90IENQVShBRERSRVNTNjQpCi19
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBDUFUoQVJNNjQpCisgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoMiA9IGRhdGFUZW1wUmVnaXN0ZXI7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9y
dGVkIGNwdSIKKyNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1
cmUoVk0mLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0KQotewotICAgIGxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIGRlc3QpOwotICAgIGVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoZGVzdCwgZGVz
dCk7CisgICAgQVNTRVJUKGRlc3QgIT0gc2NyYXRjaCk7CisgICAgQVNTRVJUKGRlc3QgIT0gc2Ny
YXRjaDIpOworICAgIEFTU0VSVChzY3JhdGNoICE9IHNjcmF0Y2gyKTsKKworICAgIGxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2gyKTsKKyAgICBsb2FkUHRyKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmJh
c2UoKSwgc2NyYXRjaCk7CisgICAgcnNoaWZ0MzIoc2NyYXRjaDIsIFRydXN0ZWRJbW0zMihTdHJ1
Y3R1cmVJRFRhYmxlOjpzX251bWJlck9mRW50cm9weUJpdHMpLCBkZXN0KTsKKyAgICBsb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgZGVzdCwgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyKSwgZGVzdCk7CisgICAgbHNoaWZ0UHRyKFRydXN0ZWRJbW0zMihTdHJ1Y3R1cmVJ
RFRhYmxlOjpzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyKSwgc2NyYXRjaDIp
OworICAgIHhvclB0cihzY3JhdGNoMiwgZGVzdCk7CisjZWxzZSAvLyBub3QgVVNFKEpTVkFMVUU2
NCkKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAg
ICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNvdXJjZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgZGVzdCk7CisjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVFNjQpCiB9CiAK
LXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFByb3RvdHlwZShWTSYgdm0sIEdQUlJlZyBv
YmplY3RHUFIsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFByb3RvdHlwZShWTSYgdm0sIEdQUlJlZyBvYmpl
Y3RHUFIsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlz
dCYgc2xvd1BhdGgpCiB7CiAgICAgQVNTRVJUKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpICE9IG9i
amVjdEdQUik7CisgICAgQVNTRVJUKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpICE9IHNjcmF0Y2hH
UFIpOworICAgIEFTU0VSVChvYmplY3RHUFIgIT0gc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSwgb2JqZWN0R1BSLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0sIG9iamVjdEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHNjcmF0Y2hHUFIpOwogCi0gICAgYXV0byBvdmVycmlkZXNHZXRQcm90b3R5cGUgPSBicmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpLCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc0dldFByb3RvdHlwZU91dE9mTGluZSkpOworICAg
IGxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
U3RydWN0dXJlOjpvdXRPZkxpbmVUeXBlRmxhZ3NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
IGF1dG8gb3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBl
T3V0T2ZMaW5lKSk7CiAgICAgc2xvd1BhdGguYXBwZW5kKG92ZXJyaWRlc0dldFByb3RvdHlwZSk7
CiAKICAgICBsb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZXN1bHRSZWdzKTsKQEAg
LTUxMCw3ICs1MjUsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKEpT
CiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNj
cmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gz
LCBGUFJSZWcgcmVzdWx0KQogewogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NyYXRjaDMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
LCBzY3JhdGNoMywgc2NyYXRjaDMpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCBzY3JhdGNo
Mywgc2NyYXRjaDMsIHNjcmF0Y2gwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDMsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMyk7CiAgICAgLy8gTm93LCBz
Y3JhdGNoMyBob2xkcyBKU0dsb2JhbE9iamVjdCouCiAKQEAgLTgyMyw3ICs4MzgsNyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvCiAgICAgICAgIEFTU0VSVChzY3Jh
dGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKICAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgcmVzdWx0KTsKKyAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgcmVzdWx0LCBzY3JhdGNoSWZTaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAg
LTkxNCw3ICs5MjksNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVy
CiAgICAgICAgIEFTU0VSVChzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZDsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
KTsKLSAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgc2Ny
YXRjaCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZS5wYXlsb2FkR1BSKCks
IHNjcmF0Y2gsIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CiAg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdGQ6OmdldDxKU0dsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMjMs
NyArMTEyMyw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUtPmlkKCkuYml0cygp
KSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1
c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
ICNlbmRpZgpAQCAtMTU3Nyw5ICsxNTc3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXJn
dW1lbnRDb3VudChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBlbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKFJlZ2lzdGVySUQgc291cmNlLCBS
ZWdpc3RlcklEIGRlc3QpOwotICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoVk0mLCBSZWdpc3Rl
cklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0KTsKLSAgICB2b2lkIGVtaXRMb2FkUHJvdG90eXBl
KFZNJiwgR1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgSnVtcExpc3Qm
IHNsb3dQYXRoKTsKKyAgICB2b2lkIGVtaXRMb2FkU3RydWN0dXJlKFZNJiwgUmVnaXN0ZXJJRCBz
b3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICB2b2lkIGVt
aXRMb2FkUHJvdG90eXBlKFZNJiwgR1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAKICAgICB2b2lk
IGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwg
UmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEKQogICAgIHsKQEAgLTE2NjQsMTMgKzE2NjMsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgbnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KFZNJiB2
bSwgR1BSUmVnIGJ1dHRlcmZseSwgR1BSUmVnIG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChp
c1g4NigpKSB7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oU3RydWN0dXJlSUQ6Om51a2VkU3RydWN0dXJlSURCaXQpKSwgQWRkcmVzcyhvYmplY3Qs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG51a2VkU3RydWN0dXJlSURCaXQoKSkpLCBBZGRy
ZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgICAgICAgICBz
dG9yZVB0cihidXR0ZXJmbHksIEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEp1bXAg
b2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0pOwotICAgICAgICBvcjMyKFRydXN0
ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oU3RydWN0dXJlSUQ6Om51a2VkU3RydWN0dXJl
SURCaXQpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwor
ICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obnVrZWRTdHJ1
Y3R1cmVJREJpdCgpKSksIEFkZHJlc3Mob2JqZWN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKICAgICAgICAgc3RvcmVGZW5jZSgpOwogICAgICAgICBzdG9yZVB0cihidXR0ZXJmbHks
IEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAg
c3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklU
U3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIHVuc2lnbmVkIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRp
bmUKICAgICBmb3IgKGF1dG8mIGtleSA6IGNhc2VzKQogICAgICAgICBXVEY6OmFkZChoYXNoZXIs
IGtleS0+aGFzaCgpKTsKICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUlEIDogd2Vha1N0cnVjdHVy
ZXMpCi0gICAgICAgIFdURjo6YWRkKGhhc2hlciwgc3RydWN0dXJlSUQuYml0cygpKTsKKyAgICAg
ICAgV1RGOjphZGQoaGFzaGVyLCBzdHJ1Y3R1cmVJRCk7CiAgICAgcmV0dXJuIGhhc2hlci5oYXNo
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGEKIHN0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyBiYXNlSlNSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSKQogewogICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBhdXRvIGRvSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZUlEKCkpKTsKKyAgICBhdXRvIGRvSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSgpKSk7CiAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgZG9JbmxpbmVBY2Nlc3MubGluaygmaml0KTsKICAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpAQCAtMjIxLDcgKzIyMSw3IEBA
IHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGkKICAgICB1c2luZyBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCiAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlSUQoKSkpOworICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKICAgICBkb0lubGluZUFjY2Vzcy5saW5rKCZqaXQpOwogICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkBAIC00MTIsNyAr
NDEyLDcgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbgogICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAogICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlSUQoKSkpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUoKSkpOwogICAgIGppdC5ib3hCb29sZWFuKHRydWUsIHJlc3VsdEpTUik7
CiAgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcg
KzI1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBK
dW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QxLCByZWdUMik7CiAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBK
dW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMik7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydQogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCBy
ZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigp
LCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qy
KTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTEyMjgs
NyArMTIyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTk1OSw3ICsxOTU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGpzUmVnVDEwKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIsIHNsb3dDYXNlcyk7CisgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMiwgcmVn
VDQsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDMyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjczMSw3ICsyNzMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0bwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1R5cGVN
YXNrKSwgcmVnVDEpOwogICAgIGdlbmVyaWNDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoVW5kZWNpZGVkKSkpOwogCi0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgZ2VuZXJpY0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CiAgICAgZ2VuZXJpY0Nhc2Vz
LmFwcGVuZChicmFuY2hJZlN0cnVjdHVyZShyZWdUMSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMyArMjksMTggQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBWTTsK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCit1c2luZyBTdHJ1Y3R1cmVJRCA9IHVpbnQzMl90OworI2Vs
c2UKK3VzaW5nIFN0cnVjdHVyZUlEID0gU3RydWN0dXJlKjsKKyNlbmRpZgorCiBjbGFzcyBBY2Nl
c3NDYXNlOwogCiAvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0dWIgcm91dGluZXMs
IGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NzIsNyArNjcyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RyeV9n
ZXRfYgogICAgICAgICB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQp
IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUo
KTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9
IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKIAogICAgICAgICAgICAgICAgIGlm
IChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byhhLCBiKSkgewpAQCAtNjg2LDcg
KzY4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90cnlfZ2V0X2IKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHNsb3QuaXNWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
ICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4K
LSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAg
ICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKQEAgLTcyMSw3ICs3MjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IG9sZFN0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogCiAgICAgICAg
ICAgICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7
CkBAIC03MzUsNyArNzM1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9i
eV9pZAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUo
dm0pOwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFN0YXJ0
IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4KLSAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9z
dHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAKICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKQEAgLTg0OCwx
MCArODQ4LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1MTEludEdldEJ5SUQoY29uc3QKICAg
ICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLnByb3RvTG9hZE1vZGUuc3Ry
dWN0dXJlSUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAob2xkU3RydWN0dXJlSUQpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSBvbGRT
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKIAog
ICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byhh
LCBiKSkgewpAQCAtOTg2LDcgKzk4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wdXRfYnlfaWQKICAgICAgICAgewogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgaWYgKG9sZFN0
cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gb2xkU3RydWN0dXJl
SUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIGIgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpCiAg
ICAgICAgICAgICAgICAgICAgIGIgPSBiLT5wcmV2aW91c0lEKCk7CkBAIC05OTksOSArOTk5LDkg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICB9CiAK
ICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAg
ICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0
ID0gMDsKLSAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7
CisgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwogICAgICAgICBtZXRhZGF0
YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGJh
c2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wcml2YQogICAgICAgICB7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGEgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKTsKIAogICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRU
b1BvbHlQcm90byhhLCBiKSkgewpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9wcml2YQogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsK
ICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4K
LSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAg
ICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKSB7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X3ByaXZhCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVy
ZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKICAgICAgICAg
ICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9
IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0p
OwogICAgICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBiID0gYi0+cHJldmlvdXNJRCgpOwpAQCAt
MTMyMSw5ICsxMzIxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9wcml2
YQogICAgICAgICB9CiAKICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUg
b2xkIGNhY2hlLgotICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJl
SUQoKTsKKyAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIG1l
dGFkYXRhLm1fb2Zmc2V0ID0gMDsKLSAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9
IFN0cnVjdHVyZUlEKCk7CisgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwog
ICAgICAgICBtZXRhZGF0YS5tX3Byb3BlcnR5LmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwpAQCAtMTM5Nyw4ICsxMzk3LDgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NldF9wcml2YQogICAgICAgICBBU1NF
UlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKIAogICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcgb3V0IHRoZSBvbGQgY2Fj
aGUuCi0gICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOwot
ICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAg
ICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgIG1ldGFkYXRhLm1fbmV3
U3RydWN0dXJlSUQgPSAwOwogICAgICAgICBtZXRhZGF0YS5tX2JyYW5kLmNsZWFyKCk7CiAKICAg
ICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTY5NCwxNiArNjk0LDIwIEBA
IG1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb24KICAgICAgICAgZW5kKQog
ZW5kCiAKLW1hY3JvIHN0cnVjdHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaChzdHJ1Y3R1cmVJ
RFRoZW5TdHJ1Y3R1cmUsIHNjcmF0Y2gpCi0gICAgYW5kcSBjb25zdGV4cHIgc3RydWN0dXJlSURN
YXNrLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUKLSAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnU3RhcnRPZlN0cnVjdHVyZUhlYXAsIHNjcmF0Y2gK
LSAgICBsb2FkcCBbc2NyYXRjaF0sIHNjcmF0Y2gKLSAgICBhZGRwIHNjcmF0Y2gsIHN0cnVjdHVy
ZUlEVGhlblN0cnVjdHVyZQorbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNo
KHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgc2NyYXRjaCwgc2NyYXRjaDIpCisgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHNjcmF0Y2gKKyAgICBtb3ZlIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVy
ZSwgc2NyYXRjaDIKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bc2NyYXRjaF0sIHNjcmF0Y2gK
KyAgICByc2hpZnRpIE51bWJlck9mU3RydWN0dXJlSURFbnRyb3B5Qml0cywgc2NyYXRjaDIKKyAg
ICBsb2FkcCBWTTo6aGVhcCArIEhlYXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlE
VGFibGU6Om1fdGFibGVbc2NyYXRjaF0sIHNjcmF0Y2gKKyAgICBsb2FkcCBbc2NyYXRjaCwgc2Ny
YXRjaDIsIFB0clNpemVdLCBzY3JhdGNoMgorICAgIGxzaGlmdHAgU3RydWN0dXJlRW50cm9weUJp
dHNTaGlmdCwgc3RydWN0dXJlSURUaGVuU3RydWN0dXJlCisgICAgeG9ycCBzY3JhdGNoMiwgc3Ry
dWN0dXJlSURUaGVuU3RydWN0dXJlCiBlbmQKIAotbWFjcm8gbG9hZFN0cnVjdHVyZVdpdGhTY3Jh
dGNoKGNlbGwsIHN0cnVjdHVyZSwgc2NyYXRjaCkKK21hY3JvIGxvYWRTdHJ1Y3R1cmVXaXRoU2Ny
YXRjaChjZWxsLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKQogICAgIGxvYWRpIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc3RydWN0dXJlCi0gICAgc3RydWN0dXJlSURUb1N0cnVj
dHVyZVdpdGhTY3JhdGNoKHN0cnVjdHVyZSwgc2NyYXRjaCkKKyAgICBzdHJ1Y3R1cmVJRFRvU3Ry
dWN0dXJlV2l0aFNjcmF0Y2goc3RydWN0dXJlLCBzY3JhdGNoLCBzY3JhdGNoMikKIGVuZAogCiAj
IEVudHJ5cG9pbnRzIGludG8gdGhlIGludGVycHJldGVyLgpAQCAtOTI2LDcgKzkzMCw3IEBAIG1h
Y3JvIGVxdWFsTnVsbENvbXBhcmlzb25PcChvcGNvZGVOYW1lLCAKICAgICAgICAgbW92ZSAwLCB0
MAogICAgICAgICBqbXAgLmRvbmUKICAgICAubWFzcXVlcmFkZXNBc1VuZGVmaW5lZDoKLSAgICAg
ICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEpCisgICAgICAgIGxvYWRTdHJ1
Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQwCiAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0
MAogICAgICAgICBjcGVxIFN0cnVjdHVyZTo6bV9nbG9iYWxPYmplY3RbdDJdLCB0MCwgdDAKQEAg
LTE0MjgsNyArMTQzMiw3IEBAIGxsaW50T3BXaXRoUmV0dXJuKG9wX3R5cGVvZl9pc191bmRlZmlu
ZWQKICAgICBtb3ZlIFZhbHVlRmFsc2UsIHQxCiAgICAgcmV0dXJuKHQxKQogLm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQ6Ci0gICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MywgdDEpCisg
ICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MywgdDEsIHQyKQogICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDFd
LCB0MQogICAgIGNwZXEgU3RydWN0dXJlOjptX2dsb2JhbE9iamVjdFt0M10sIHQxLCB0MApAQCAt
MTY0MCw3ICsxNjQ0LDcgQEAgbGxpbnRPcFdpdGhQcm9maWxlKG9wX2dldF9wcm90b3R5cGVfb2Ys
IAogICAgIGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLm9wR2V0UHJvdG90eXBlT2ZTbG93CiAgICAg
YmJiIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9wR2V0UHJvdG90eXBlT2ZTbG93
CiAKLSAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICBsb2FkU3Ry
dWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMpCiAgICAgbG9hZGggU3RydWN0dXJlOjpt
X291dE9mTGluZVR5cGVGbGFnc1t0Ml0sIHQzCiAgICAgYnRpbnogdDMsIE92ZXJyaWRlc0dldFBy
b3RvdHlwZU91dE9mTGluZSwgLm9wR2V0UHJvdG90eXBlT2ZTbG93CiAKQEAgLTE2ODAsNyArMTY4
NCwxOSBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCCiAgICAgbG9h
ZHAgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCiAgICAgYnRw
eiB0MywgLm9wUHV0QnlJZFRyYW5zaXRpb25EaXJlY3QKIAotICAgIHN0cnVjdHVyZUlEVG9TdHJ1
Y3R1cmVXaXRoU2NyYXRjaCh0MiwgdDEpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICBsb2FkcCBWTTo6aGVhcCArIEhl
YXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlEVGFibGU6Om1fdGFibGVbdDFdLCB0
MQorCisgICAgbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNoQW5kVGFibGUo
c3RydWN0dXJlSURUaGVuU3RydWN0dXJlLCB0YWJsZSwgc2NyYXRjaCkKKyAgICAgICAgbW92ZSBz
dHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIHNjcmF0Y2gKKyAgICAgICAgcnNoaWZ0aSBOdW1iZXJP
ZlN0cnVjdHVyZUlERW50cm9weUJpdHMsIHNjcmF0Y2gKKyAgICAgICAgbG9hZHAgW3RhYmxlLCBz
Y3JhdGNoLCBQdHJTaXplXSwgc2NyYXRjaAorICAgICAgICBsc2hpZnRwIFN0cnVjdHVyZUVudHJv
cHlCaXRzU2hpZnQsIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZQorICAgICAgICB4b3JwIHNjcmF0
Y2gsIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZQorICAgIGVuZAorCisgICAgc3RydWN0dXJlSURU
b1N0cnVjdHVyZVdpdGhTY3JhdGNoQW5kVGFibGUodDIsIHQxLCB0MCkKIAogICAgIGxvYWRwIFN0
cnVjdHVyZUNoYWluOjptX3ZlY3Rvclt0M10sIHQzCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnRw
bnogdDMsIG9rIGVuZCkKQEAgLTE2OTEsNyArMTcwNyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDJd
LCB0MgogICAgIGJpbmVxIHQyLCBbdDNdLCAub3BQdXRCeUlkU2xvdwogICAgIGFkZHAgNCwgdDMK
LSAgICBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2godDIsIHQxKQorICAgIHN0cnVj
dHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaEFuZFRhYmxlKHQyLCB0MSwgdDApCiAgICAgbG9h
ZHEgU3RydWN0dXJlOjptX3Byb3RvdHlwZVt0Ml0sIHQyCiAgICAgYnFuZXEgdDIsIFZhbHVlTnVs
bCwgLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkxvb3AKIApAQCAtMjA2Niw3ICsyMDgyLDcgQEAg
bWFjcm8gZXF1YWxOdWxsSnVtcE9wKG9wY29kZU5hbWUsIG9wY29kZQogICAgICAgICBhc3NlcnRO
b3RDb25zdGFudChzaXplLCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAogICAg
ICAgICBidHFueiB0MCwgbm90Q2VsbE1hc2ssIC5pbW1lZGlhdGUKLSAgICAgICAgbG9hZFN0cnVj
dHVyZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEpCisgICAgICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2Ny
YXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICAgICAgY2VsbEhhbmRsZXIodDIsIEpTQ2VsbDo6bV9m
bGFnc1t0MF0sIC50YXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIApAQCAtMjc4NSw3ICsyODAx
LDcgQEAgZW5kKQogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGNvZGVTdHJ1Y3QsIGdl
dCwgc2xvd1BhdGgpCiAgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDAKLSAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICBsb2Fk
U3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMpCiAgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZVt0NV0sIHQxCiAgICAgYnBuZXEgdDIsIHQxLCBz
bG93UGF0aAogZW5kCkBAIC0zMjM2LDcgKzMyNTIsNyBAQCBsbGludE9wV2l0aFJldHVybihvcF9n
ZXRfcHJvcGVydHlfZW51bWVyCiAgICAgYW5kaSBJbmRleGluZ1R5cGVNYXNrLCB0MQogICAgIGJp
YSB0MSwgQXJyYXlXaXRoVW5kZWNpZGVkLCAuc2xvd1BhdGgKIAotICAgIGxvYWRTdHJ1Y3R1cmVX
aXRoU2NyYXRjaCh0MCwgdDEsIHQyKQorICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwg
dDEsIHQyLCB0MykKICAgICBsb2FkcCBTdHJ1Y3R1cmU6Om1fcHJldmlvdXNPclJhcmVEYXRhW3Qx
XSwgdDEKICAgICBidHB6IHQxLCAuc2xvd1BhdGgKICAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3Qx
XSwgU3RydWN0dXJlVHlwZSwgLnNsb3dQYXRoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsMTEgQEAgZWxzZQogICAgIGNvbnN0IExvd2Vz
dFRhZyA9IGNvbnN0ZXhwciBKU1ZhbHVlOjpMb3dlc3RUYWcKIGVuZAogCitpZiBKU1ZBTFVFNjQK
KyAgICBjb25zdCBOdW1iZXJPZlN0cnVjdHVyZUlERW50cm9weUJpdHMgPSBjb25zdGV4cHIgU3Ry
dWN0dXJlSURUYWJsZTo6c19udW1iZXJPZkVudHJvcHlCaXRzCisgICAgY29uc3QgU3RydWN0dXJl
RW50cm9weUJpdHNTaGlmdCA9IGNvbnN0ZXhwciBTdHJ1Y3R1cmVJRFRhYmxlOjpzX2VudHJvcHlC
aXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyCitlbmQKKwogaWYgTEFSR0VfVFlQRURfQVJSQVlT
CiAgICAgY29uc3QgU21hbGxUeXBlZEFycmF5TWF4TGVuZ3RoID0gY29uc3RleHByIEFycmF5UHJv
ZmlsZTo6c19zbWFsbFR5cGVkQXJyYXlNYXhMZW5ndGgKIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGFycmF5UHJvdG9GdW5jVAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVl
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhp
c09iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHZtLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBpZiAoIWNhblVzZURlZmF1bHRB
cnJheUpvaW5Gb3JUb1N0cmluZyh2bSwgdGhpc09iamVjdCkpIHsKICAgICAgICAgLy8gMi4gTGV0
IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICAgICAgSlNWYWx1ZSBmdW5jdGlv
biA9IHRoaXNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmpvaW4p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGJpZ0ludFByb3RvRnVuYwogCiAgICAgQVNTRVJU
KHZhbHVlKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2YWx1ZS0+c3RydWN0
dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB2YWx1ZS0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgaW50MzJfdCByYWRpeCA9IGV4dHJhY3RUb1N0cmluZ1JhZGl4QXJn
dW1lbnQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBzY29wZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihiaWdJbnRQcm90b0Z1bmMKICAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBJbnRlZ3Jp
dHk6OmF1ZGl0U3RydWN0dXJlSUQodmFsdWUtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0
eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGJvb2xlYW5Qcm90b0Z1bgogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgSW50
ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAg
IEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQo
KSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFs
c2UpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5mYWxz
ZVN0cmluZygpKTsKIApAQCAtOTYsNyArOTYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Ym9vbGVhblByb3RvRnVuCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBJbnRl
Z3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAg
SW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDEx
ICszNTUsMTEgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogICAg
ICAgICAgICAgaWYgKG90aGVyU3RydWN0dXJlSUQpCiAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV90b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVkOwogICAgICAgICAgICAgbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRCA9IG15U3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICB2bS53cml0
ZUJhcnJpZXIoY29kZUJsb2NrLCBteVN0cnVjdHVyZUlELmRlY29kZSgpKTsKKyAgICAgICAgICAg
IHZtLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHZtLmdldFN0cnVjdHVyZShteVN0cnVjdHVyZUlE
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtZXRhZGF0YS5tX3RvVGhpc1N0
YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7Ci0gICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0
dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEID0gMDsKICAgICB9CiAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgdmFs
dWUgcHJvZmlsaW5nIGhlcmUgb24gdGhlIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aAogICAgIC8v
IGp1c3QgcmV0dXJucyB0aGUgaW5wdXQgdG8gdG9fdGhpcyBpZiB0aGUgc3RydWN0dXJlIGNoZWNr
IHN1Y2NlZWRzLiBJZiB0aGUgc3RydWN0dXJlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5z
dGFuYwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIEludGVncml0eTo6YXVk
aXRTdHJ1Y3R1cmVJRCh0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5
OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gYXNVVENWYXJpYW50
CiAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhY2hlKQogICAg
ICAgICA6IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWNoZSk7CkBAIC0zMTUsNyAr
MzE1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGRhdGVQcm90b0Z1bmNUbwogICAgIGlm
IChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJ
RCh0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVj
dHVyZUlEKHZtLCB0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9i
amVjdCwgIkludmFsaWQgRGF0ZSJfcykpOwogCkBAIC0zNjMsNyArMzYzLDcgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGRhdGVQcm90b0Z1bmNUbwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJEYXRlLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdIGV4cGVjdGVkIHx0aGlzfCB0
byBiZSBhbiBvYmplY3QuIik7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPih0aGlzVmFsdWUpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQo
dm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkRhdGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQg
YSBmaXJzdCBhcmd1bWVudC4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw3IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRNZXNzYWdlU3QK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChz
dHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVj
dHVyZUlEKCkpOwogCiAgICAgSlNWYWx1ZSBtZXNzYWdlVmFsdWU7CiAgICAgYXV0byBtZXNzYWdl
UHJvcGVydE5hbWUgPSB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlOwpAQCAtMTcyLDcgKzE3Miw3
IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWROYW1lU3RyaW4KIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCgp
KTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVjdHVyZUlEKCkpOwog
CiAgICAgSlNWYWx1ZSBuYW1lVmFsdWU7CiAgICAgYXV0byBuYW1lUHJvcGVydE5hbWUgPSB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lOwpAQCAtMjAzLDcgKzIwMyw3IEBAIFN0cmluZyBFcnJvckluc3Rh
bmNlOjpzYW5pdGl6ZWRUb1N0cmluZygKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEludGVn
cml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1
ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVjdHVyZUlEKCkpOwogCiAgICAgU3RyaW5nIG5hbWVTdHJp
bmcgPSBzYW5pdGl6ZWROYW1lU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihlcnJvclByb3Rv
RnVuY1QKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICBKU09iamVjdCogdGhpc09i
aiA9IGFzT2JqZWN0KHRoaXNWYWx1ZSk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHRoaXNPYmotPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJ
RCh2bSwgdGhpc09iai0+c3RydWN0dXJlSUQoKSk7CiAKICAgICAvLyBHdWFyZCBhZ2FpbnN0IHJl
Y3Vyc2lvbiEKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZ2xvYmFsT2JqZWN0
LCB0aGlzT2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bkltCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxl
KTsKICAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS5n
ZXQoKSkgewotICAgICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9jYWNoZWRQb2x5UHJv
dG9TdHJ1Y3R1cmVJRCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hl
ZFBvbHlQcm90b1N0cnVjdHVyZSk7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5t
X2FzU3RyaW5nKTsKICAgICAgICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSByYXJlRGF0
YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkgewogICAgICAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IHRoaXNPYmplY3QtPmNlbGxMb2NrKCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU3LDEyICsyNTcsMTIgQEAgcHVibGljOgogICAgIFN0cnVjdHVy
ZSogY2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VM
WShtX3JhcmVEYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NhY2hlZFBv
bHlQcm90b1N0cnVjdHVyZUlELmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlLmdldCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgdm9pZCBzZXRDYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9j
YWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmVJRC5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CisgICAg
ICAgIGVuc3VyZVJhcmVEYXRhKCkubV9jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIGVuc3Vy
ZVBvbHlQcm90b1dhdGNocG9pbnQoKQpAQCAtMzEwLDggKzMxMCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0IHsgMCB9OwogICAgICAgICB1bnNp
Z25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVu
c2lnbmVkIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCB7IFVJTlRfTUFYIH07Ci0gICAgICAgIFdy
aXRlQmFycmllclN0cnVjdHVyZUlEIG1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlSUQ7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9iamVjdE1hcD4gbV90ZW1wbGF0ZU9iamVjdE1h
cDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWNoZWRQb2x5UHJvdG9TdHJ1
Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9hc1N0cmluZzsKICAgICB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE5
ICs4MSwxOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Qcm90b0Z1CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlz
VmFsdWUuaW5oZXJpdHM8SlNGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFsdWUpOwotICAgICAgICBJbnRlZ3Jp
dHk6OmF1ZGl0U3RydWN0dXJlSUQoZnVuY3Rpb24tPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIGZ1bmN0aW9uLT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZnVuY3Rp
b24tPnRvU3RyaW5nKGdsb2JhbE9iamVjdCkpKTsKICAgICB9CiAKICAgICBpZiAodGhpc1ZhbHVl
LmluaGVyaXRzPEludGVybmFsRnVuY3Rpb24+KHZtKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odGhpc1ZhbHVlKTsKLSAg
ICAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKGZ1bmN0aW9uLT5zdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBmdW5jdGlvbi0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZ2xvYmFsT2JqZWN0LCAiZnVuY3Rpb24gIiwg
ZnVuY3Rpb24tPm5hbWUoKSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59IikpKTsKICAgICB9
CiAKICAgICBpZiAodGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHRoaXNWYWx1ZSk7Ci0gICAgICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBJbnRlZ3JpdHk6OmF1ZGl0
U3RydWN0dXJlSUQodm0sIG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChvYmpl
Y3QtPmlzQ2FsbGFibGUodm0pKQogICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJm
dW5jdGlvbiAiLCBvYmplY3QtPmNsYXNzSW5mbyh2bSktPmNsYXNzTmFtZSwgIigpIHtcbiAgICBb
bmF0aXZlIGNvZGVdXG59IikpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjg2OTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNp
dENoaWxkcmVuSW1wbAogCiAgICAgcmFyZURhdGEtPm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgcmFyZURhdGEtPm1faW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKHJhcmVEYXRhLT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmVJRCk7CisgICAgdmlzaXRv
ci5hcHBlbmQocmFyZURhdGEtPm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGlu
bGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdGlvblBy
b2ZpbGVXYXRjaHBvaW50U2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFy
ZURhdGEsIG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1faW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90
IG9mZnNldE9mQm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvblJhcmVEYXRhLCBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUpOyB9CiAgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZFeGVjdXRhYmxlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fZXhlY3V0YWJsZSk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBv
aW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fYWxsb2Nh
dGlvblByb2ZpbGVDbGVhcmluZ1dhdGNocG9pbnQpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKICAgICB7CkBA
IC0xMTEsOCArMTEzLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9hbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnRTZXQuc3RhcnRXYXRjaGluZygpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSog
Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fYm91bmRGdW5jdGlvblN0cnVj
dHVyZUlELmdldCgpOyB9Ci0gICAgdm9pZCBzZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlSUQuc2V0
KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOyB9CisgICAgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIHsgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJl
KTsgfQogCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2V4ZWN1dGFibGUuZ2V0KCk7IH0KIApAQCAtMTU4LDcgKzE2MCw3IEBAIHByaXZhdGU6CiAgICAg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlIG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludFNldDsKICAgICBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUgbV9pbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQg
bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFz
ZT4gbV9leGVjdXRhYmxlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbGxvY2F0aW9uUHJvZmlsZUNs
ZWFyaW5nV2F0Y2hwb2ludD4gbV9hbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludDsK
ICAgICBib29sIG1faGFzUmVpZmllZExlbmd0aCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNPd25Qcm9wZXJ0eUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzT3duUHJvcGVydHlDYWNoZS5oCShyZXZpc2lvbiAy
ODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNPd25Qcm9wZXJ0eUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVzdWx0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEVudHJ5LCByZXN1bHQpOyB9CiAKICAgICAgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBp
bXBsOwotICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgeyAwIH07CiAgICAgICAgIGJvb2wgcmVzdWx0IHsgZmFsc2UgfTsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2lnaWxsQ3Jhc2hBbmFseXplci5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJWTVRyYXBzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCkBA
IC02Niw3ICs2NSw2IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAjZW5kaWYKICAgICAgICAgewogICAg
ICAgICAgICAgT3B0aW9uczo6QWxsb3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlIHNjb3BlOwotICAg
ICAgICAgICAgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVN0cnVj
dHVyZUFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6aW5pdGlh
bGl6ZSgpOwogICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZSgpOwog
ICAgICAgICAgICAgVk06OmNvbXB1dGVDYW5Vc2VKSVQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQw
LDEyICs0MCw2IEBAIGNsYXNzIFZNOwogdXNpbmcgSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rp
b24gPSB2b2lkICgqKShvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmIENQVShBUk02NCkgJiYgIUNQVShBUk02NEUpCi1jb25z
dGV4cHIgdWludHB0cl90IHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSA9IDUxMiAqIE1COwotI2Vs
c2UKLWNvbnN0ZXhwciB1aW50cHRyX3Qgc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplID0gMSAqIEdC
OwotI2VuZGlmCi0KIHN0cnVjdCBDb25maWcgewogICAgIHN0YXRpYyBDb25maWcmIHNpbmdsZXRv
bigpOwogCkBAIC04Nyw3ICs4MSw2IEBAIHN0cnVjdCBDb25maWcgewogICAgIHZvaWQqIHN0YXJ0
RXhlY3V0YWJsZU1lbW9yeTsKICAgICB2b2lkKiBlbmRFeGVjdXRhYmxlTWVtb3J5OwogICAgIHVp
bnRwdHJfdCBzdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2w7Ci0gICAgdWludHB0cl90IHN0
YXJ0T2ZTdHJ1Y3R1cmVIZWFwOwogCiAjaWYgRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQogICAg
IEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwczsKQEAg
LTEyNSw3ICsxMTgsNiBAQCBleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIENvbmZpZyBnX2pz
CiAKIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZKU0NDb25maWdJbml0aWFsaXplSGFzQmVlbkNh
bGxlZCA9IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBpbml0aWFsaXplSGFzQmVlbkNhbGxlZCk7CiBj
b25zdGV4cHIgc2l6ZV90IG9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCA9IG9mZnNldG9mKEpTQzo6
Q29uZmlnLCBsbGludC5nYXRlTWFwKTsKLWNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZKU0NDb25m
aWdTdGFydE9mU3RydWN0dXJlSGVhcCA9IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBzdGFydE9mU3Ry
dWN0dXJlSGVhcCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHRBc3N1bWlu
Z1N0cnVjCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCpzdHJ1Y3R1cmUs
IGNvbnRleHQpLCAiKSIpOwogICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
b3V0LnByaW50KCIsIFN0cnVjdHVyZUlEOiAiLCBhc0NlbGwoKS0+c3RydWN0dXJlSUQoKS5iaXRz
KCkpOworICAgICAgICBvdXQucHJpbnQoIiwgU3RydWN0dXJlSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1
Y3R1cmVJRCgpKTsKICNlbmRpZgogICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIG91
dC5wcmludCgiVHJ1ZSIpOwpAQCAtMzU3LDkgKzM1NywxNSBAQCB2b2lkIEpTVmFsdWU6OmR1bXBG
b3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIodW5yZXNv
bHZlZCBzdHJpbmcpIik7CiAgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzPFN0
cnVjdHVyZT4odm0pKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVsgIiwgYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgb3V0LnByaW50KCIgSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1
cmVJRCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgb3V0LnByaW50KCJdOiAiLCBSYXdQb2ludGVy
KGFzQ2VsbCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNl
bGxbIiwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgb3V0LnByaW50KCIgSUQ6ICIsIGFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgb3V0LnByaW50KCJdOiAiLCBS
YXdQb2ludGVyKGFzQ2VsbCgpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGlzVHJ1ZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgZG91YmxlIEpTQ2VsbDo6dG9OdW1iZXIo
SlNHbG9iYWxPYmplY3QqIAogCiBKU09iamVjdCogSlNDZWxsOjp0b09iamVjdFNsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQoc3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlSUQoKSk7CiAgICAgQVNTRVJUKCFpc09iamVj
dCgpKTsKICAgICBpZiAoaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IEpTU3RyaW5nKj4odGhpcyktPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoVk0mKSBjb25z
dDsKICAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0
U3RydWN0dXJlSUREaXJlY3RseShTdHJ1Y3R1cmVJRCBpZCkgeyBtX3N0cnVjdHVyZUlEID0gaWQ7
IH0KLSAgICB2b2lkIGNsZWFyU3RydWN0dXJlKCkgeyBtX3N0cnVjdHVyZUlEID0gU3RydWN0dXJl
SUQoKTsgfQorICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQgPSAwOyB9
CiAKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0
IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMzLDEzICsxMzMsMTIgQEAgaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nTW9k
ZQogCiBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3N0cnVjdHVyZUlELmRlY29kZSgpOworICAgIHJldHVybiBzdHJ1Y3R1
cmUodm0oKSk7CiB9CiAKLS8vIEZJWE1FOiBEZWxldGUgdGhpcyBpbiBhIGNsZWFudXAgZml4dXAu
Ci1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoVk0mKSBjb25zdAor
QUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKFZNJiB2bSkgY29uc3QK
IHsKLSAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZSht
X3N0cnVjdHVyZUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMwNSw3
ICszMDQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoCiAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gdGhpcy0+c3RydWN0dXJlKHZtKS0+Y2xh
c3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKHZtKQogICAgICAgICB8fCB0
aGlzLT5zdHJ1Y3R1cmUodm0pLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpCi0gICAgICAgIHx8IHN0cnVjdHVyZS0+aWQoKS5kZWNvZGUoKSA9PSBzdHJ1Y3R1cmUp
OworICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0
cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0
dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBUeXBlSW5mbzo6bWVyZ2VJbmxpbmVUeXBlRmxhZ3Mo
c3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpLCBtX2ZsYWdzKTsKICAgICBt
X3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgxLDE2ICsyMjgxLDEzIEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEoKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogdGhpc09i
amVjdC0+bV9saW5rVGltZUNvbnN0YW50cykKICAgICAgICAgcHJvcGVydHkudmlzaXQodmlzaXRv
cik7CiAKLSNkZWZpbmUgVklTSVRfU0lNUExFX1RZUEVfUFJPVE9UWVBFKENhcGl0YWxOYW1lLCBs
b3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNl
LCBmZWF0dXJlRmxhZykgaWYgKGZlYXR1cmVGbGFnKSBcCisjZGVmaW5lIFZJU0lUX1NJTVBMRV9U
WVBFKENhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNO
YW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykgaWYgKGZlYXR1cmVGbGFnKSB7IFwKICAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV8gIyMgbG93ZXJOYW1lICMjIFByb3Rv
dHlwZSk7IFwKLQotI2RlZmluZSBWSVNJVF9TSU1QTEVfVFlQRV9TVFJVQ1RVUkUoQ2FwaXRhbE5h
bWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3RvdHlw
ZUJhc2UsIGZlYXR1cmVGbGFnKSBpZiAoZmVhdHVyZUZsYWcpIFwKICAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUpOyBcCisgICAg
fQogCi0gICAgRk9SX0VBQ0hfU0lNUExFX0JVSUxUSU5fVFlQRShWSVNJVF9TSU1QTEVfVFlQRV9T
VFJVQ1RVUkUpCi0gICAgRk9SX0VBQ0hfQlVJTFRJTl9ERVJJVkVEX0lURVJBVE9SX1RZUEUoVklT
SVRfU0lNUExFX1RZUEVfU1RSVUNUVVJFKQotICAgIEZPUl9FQUNIX1NJTVBMRV9CVUlMVElOX1RZ
UEUoVklTSVRfU0lNUExFX1RZUEVfUFJPVE9UWVBFKQotICAgIEZPUl9FQUNIX0JVSUxUSU5fREVS
SVZFRF9JVEVSQVRPUl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFX1BST1RPVFlQRSkKKyAgICBGT1Jf
RUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFKQorICAgIEZPUl9FQUNI
X0JVSUxUSU5fREVSSVZFRF9JVEVSQVRPUl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFKQogCiAjZGVm
aW5lIFZJU0lUX0xBWllfVFlQRShDYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBp
bnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIGlmIChmZWF0
dXJlRmxhZykgXAogICAgICAgICB0aGlzT2JqZWN0LT5tXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzc2
LDcgKzM3NiwyMCBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV93aXRoU2NvcGVTdHJ1Y3R1cmU7CiAgICAgTGF6eVBy
b3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fc3RyaWN0RXZhbEFjdGl2YXRpb25T
dHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9sZXhpY2FsRW52aXJvbm1l
bnRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fbW9kdWxlRW52aXJvbm1lbnRTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmU7CisKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX29iamVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yOworICAgICAgICAKKyAg
ICAvLyBMaXN0cyB0aGUgYWN0dWFsIHN0cnVjdHVyZXMgdXNlZCBmb3IgaGF2aW5nIHRoZXNlIHBh
cnRpY3VsYXIgaW5kZXhpbmcgc2hhcGVzLgorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbTnVtYmVyT2ZBcnJheUluZGV4
aW5nTW9kZXNdOworICAgIC8vIExpc3RzIHRoZSBzdHJ1Y3R1cmVzIHdlIHNob3VsZCB1c2UgZHVy
aW5nIGFsbG9jYXRpb24gZm9yIHRoZXNlIHBhcnRpY3VsYXIgaW5kZXhpbmcgc2hhcGVzLgorICAg
IC8vIFRoZXNlIHN0cnVjdHVyZXMgd2lsbCBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWxzIGxpc3Qg
YWJvdmUgd2hlbiB3ZSBhcmUgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVEdXJpbmdBbGxvY2F0aW9u
W051bWJlck9mQXJyYXlJbmRleGluZ01vZGVzXTsKKwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZTsKQEAgLTM4OCw1NyArNDAxLDQyIEBAIHB1YmxpYzoK
ICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliQ2FsbGJh
Y2tGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0
cnVjdHVyZT4gbV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZTsKICNlbmRpZgorICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKKyAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxlZVN0cnVjdHVyZTsKIAotICAgIFdyaXRlQmFy
cmllclN0cnVjdHVyZUlEIG1fbGV4aWNhbEVudmlyb25tZW50U3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fc2NvcGVkQXJndW1lbnRzU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fY2xvbmVkQXJndW1lbnRzU3RydWN0dXJlOwotCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3Rv
cjsKLQotICAgIC8vIExpc3RzIHRoZSBhY3R1YWwgc3RydWN0dXJlcyB1c2VkIGZvciBoYXZpbmcg
dGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFwZXMuCi0gICAgV3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtOdW1iZXJPZkFy
cmF5SW5kZXhpbmdNb2Rlc107Ci0gICAgLy8gTGlzdHMgdGhlIHN0cnVjdHVyZXMgd2Ugc2hvdWxk
IHVzZSBkdXJpbmcgYWxsb2NhdGlvbiBmb3IgdGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFw
ZXMuCi0gICAgLy8gVGhlc2Ugc3RydWN0dXJlcyB3aWxsIGRpZmZlciBmcm9tIHRoZSBvcmlnaW5h
bHMgbGlzdCBhYm92ZSB3aGVuIHdlIGFyZSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICBXcml0ZUJh
cnJpZXJTdHJ1Y3R1cmVJRCBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0Fs
bG9jYXRpb25bTnVtYmVyT2ZBcnJheUluZGV4aW5nTW9kZXNdOwotCi0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlOwotICAgIFdyaXRlQmFy
cmllclN0cnVjdHVyZUlEIG1fY2FsbGVlU3RydWN0dXJlOwotCi0gICAgV3JpdGVCYXJyaWVyU3Ry
dWN0dXJlSUQgbV9ob3N0RnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9ob3N0RnVuY3Rpb25TdHJ1Y3R1cmU7CiAKICAgICBzdHJ1Y3QgRnVuY3Rpb25TdHJ1
Y3R1cmVzIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgYXJyb3dGdW5jdGlvblN0
cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgc2xvcHB5RnVuY3Rpb25T
dHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIHN0cmljdEZ1bmN0aW9u
U3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBhcnJvd0Z1bmN0aW9u
U3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzbG9wcHlGdW5jdGlv
blN0cnVjdHVyZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RyaWN0RnVuY3Rp
b25TdHJ1Y3R1cmU7CiAgICAgfTsKICAgICBGdW5jdGlvblN0cnVjdHVyZXMgbV9idWlsdGluRnVu
Y3Rpb25zOwogICAgIEZ1bmN0aW9uU3RydWN0dXJlcyBtX29yZGluYXJ5RnVuY3Rpb25zOwogCi0g
ICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJp
ZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1
cmVJRCBtX2FzeW5jRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJl
SUQgbV9hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0
cnVjdHVyZUlEIG1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9nZW5lcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQgbV9hc3luY0dlbmVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1
cmVJRCBtX2FycmF5SXRlcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJl
SUQgbV9tYXBJdGVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBt
X3NldEl0ZXJhdG9yU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1f
cmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9yZWdFeHBNYXRjaGVzSW5kaWNlc0FycmF5U3RydWN0dXJlOwotCiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fYm91bmRGdW5jdGlvblN0
cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9j
dXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlv
blN0cnVjdHVyZTsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKKyAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwor
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxBc3luY0Z1bmN0aW9uUHJvdG90eXBlPiBtX2FzeW5jRnVuY3Rpb25Qcm90b3R5cGU7
CiAgICAgV3JpdGVCYXJyaWVyPEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5
bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FzeW5jRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9nZW5lcmF0b3JTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9hc3luY0dlbmVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FycmF5SXRlcmF0b3JTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9tYXBJdGVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Nl
dEl0ZXJhdG9yU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0
eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2RhdGFQcm9wZXJ0eURlc2NyaXB0b3JPYmpl
Y3RTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fYWNjZXNzb3JQcm9wZXJ0eURlc2NyaXB0b3JPYmplY3RTdHJ1Y3R1cmU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7CisgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVj
dHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2Vz
QXJyYXlTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmU+IG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9i
amVjdCwgU3RydWN0dXJlPiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZTsKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9wcm94eU9iamVjdFN0cnVj
dHVyZTsKQEAgLTQ0NiwxOSArNDQ0LDE1IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9wcm94eVJldm9rZVN0cnVjdHVyZTsKICAgICBMYXp5
Q2xhc3NTdHJ1Y3R1cmUgbV9zaGFyZWRBcnJheUJ1ZmZlclN0cnVjdHVyZTsKIAotI2RlZmluZSBE
RUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfUFJPVE9UWVBFKGNhcGl0YWxOYW1lLCBsb3dl
ck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBm
ZWF0dXJlRmxhZykgXAotICAgIFdyaXRlQmFycmllcjxjYXBpdGFsTmFtZSAjIyBQcm90b3R5cGU+
IG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGU7Ci0KLSNkZWZpbmUgREVGSU5FX1NUT1JBR0Vf
Rk9SX1NJTVBMRV9UWVBFX1NUUlVDVFVSRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJO
YW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwK
LSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVy
ZTsKKyNkZWZpbmUgREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKGNhcGl0YWxOYW1lLCBs
b3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNl
LCBmZWF0dXJlRmxhZykgXAorICAgIFdyaXRlQmFycmllcjxjYXBpdGFsTmFtZSAjIyBQcm90b3R5
cGU+IG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGU7IFwKKyAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZTsKIAogI2RlZmluZSBERUZJTkVf
U1RPUkFHRV9GT1JfTEFaWV9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUs
IGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykgXAogICAg
IExhenlDbGFzc1N0cnVjdHVyZSBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZTsKIAotICAg
IEZPUl9FQUNIX1NJTVBMRV9CVUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9U
WVBFX1NUUlVDVFVSRSkKLSAgICBGT1JfRUFDSF9CVUlMVElOX0RFUklWRURfSVRFUkFUT1JfVFlQ
RShERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfU1RSVUNUVVJFKQotICAgIEZPUl9FQUNI
X1NJTVBMRV9CVUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFX1BST1RP
VFlQRSkKLSAgICBGT1JfRUFDSF9CVUlMVElOX0RFUklWRURfSVRFUkFUT1JfVFlQRShERUZJTkVf
U1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfUFJPVE9UWVBFKQorICAgIEZPUl9FQUNIX1NJTVBMRV9C
VUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQorICAgIEZPUl9FQUNI
X0JVSUxUSU5fREVSSVZFRF9JVEVSQVRPUl9UWVBFKERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVf
VFlQRSkKICAgICAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgTGF6eVByb3BlcnR5PEpT
R2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1
cmU7CkBAIC00NzAsOCArNDY0LDcgQEAgcHVibGljOgogCiAgICAgRk9SX0VBQ0hfTEFaWV9CVUlM
VElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX0xBWllfVFlQRSkKIAotI3VuZGVmIERFRklORV9T
VE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9QUk9UT1RZUEUKLSN1bmRlZiBERUZJTkVfU1RPUkFHRV9G
T1JfU0lNUExFX1RZUEVfU1RSVUNUVVJFCisjdW5kZWYgREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBM
RV9UWVBFCiAjdW5kZWYgREVGSU5FX1NUT1JBR0VfRk9SX0xBWllfVFlQRQogCiAgICAgV3JpdGVC
YXJyaWVyPEdldHRlclNldHRlcj4gbV9zcGVjaWVzR2V0dGVyU2V0dGVyOwpAQCAtNTgxLDcgKzU3
NCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9ldmFsRW5hYmxlZCB7IHRydWUgfTsKICAgICBi
b29sIG1fd2ViQXNzZW1ibHlFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9uZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgbV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoIHsgMSB9OwogICAgIFN0cmluZyBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsK
ICAgICBTdHJpbmcgbV93ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlOwpAQCAtMTIwMiw2
ICsxMTk0LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAKKyAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MgeyBmYWxzZSB9OwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRy
PEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2OSw5ICszNjksOSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
CiAgICAgLy8gaHR0cHM6Ly9wZGZzLnNlbWFudGljc2Nob2xhci5vcmcvMzQzZi83MTgyY2RlNzY2
OWNhMmE3ZGUzZGMwMTEyNzkyN2YzODRlZjcucGRmCiAgICAgCiAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAgIGlmIChzdHJ1Y3R1cmVJRC5pc051
a2VkKCkpCisgICAgaWYgKGlzTnVrZWQoc3RydWN0dXJlSUQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBzdHJ1Y3R1
cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIG1heE9mZnNldCA9IHN0cnVj
dHVyZS0+bWF4T2Zmc2V0KCk7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZTsKICAgICBE
ZXBlbmRlbmN5IGluZGV4aW5nTW9kZURlcGVuZGVuY3kgPSBzdHJ1Y3R1cmUtPmZlbmNlZEluZGV4
aW5nTW9kZShpbmRleGluZ01vZGUpOwpAQCAtMTE2OSw3ICsxMTY5LDcgQEAgQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIERlZmVyR0MgZGVmZXJHQyh2bSk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uo
dm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1
Y3R1cmVJRCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQu
ZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUo
b2xkU3RydWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6
OkFsbG9jYXRlVW5kZWNpZGVkKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZt
LCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7CkBAIC0xMTgzLDcgKzExODMsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCku
YXQodGhpcywgaSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVj
dHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUludDMyKTsKICAgICBu
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVy
Zmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xMTk3LDcgKzEx
OTcsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSkgPSBQTmFOOwog
ICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlE
KTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZURvdWJs
ZSk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQs
IG5ld0J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwpAQCAt
MTIxMSw3ICsxMjExLDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmF0KHRoaXMsIGkpLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJl
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAgICBudWtlU3RydWN0dXJl
QW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiB7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVy
ZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNv
ZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShvbGRT
dHJ1Y3R1cmVJRCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsK
ICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBl
KSk7CiAKQEAgLTEzMzEsNyArMTMzMSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRVbmRlY2lkZWQKICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlE
ID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9s
ZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0u
Z2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIHRy
YW5zaXRpb24pOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVj
dHVyZUlELCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJl
LCB0cmFuc2l0aW9uKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRT
dHJ1Y3R1cmVJRCwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwogICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlSUQgb2xk
U3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0
cnVjdHVyZSwgdHJhbnNpdGlvbik7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2
bSwgb2xkU3RydWN0dXJlSUQsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKICAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAKICAgICBBU1NFUlQobmV3U3RvcmFnZS0+
YnV0dGVyZmx5KCkgIT0gYnV0dGVyZmx5KTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZt
LmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCB0
cmFuc2l0aW9uKTsKIAogICAgIC8vIEVuc3VyZSBuZXcgQnV0dGVyZmx5IGluaXRpYWxpemF0aW9u
IGlzIGNvcnJlY3RseSBkb25lIGJlZm9yZSBleHBvc2luZyBpdCB0byB0aGUgY29uY3VycmVudCB0
aHJlYWRzLgpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Q3Vz
dG9tR2V0dGVyU2V0dAogICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSk7CiAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gcHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3RydWN0dXJlSUQsIHN0cnVjdHVyZSk7CiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKIApAQCAtMjA1MSw3ICsyMDUxLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcgogewogICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHRo
aXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJ
RC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3RydWN0dXJlSUQsIHN0cnVjdHVyZSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZz
ZXQsIGFjY2Vzc29yKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdgogaW5saW5lIHZvaWQgSlNPYmplY3Q6Om51a2VTdHJ1
Y3R1cmVBbmRTZXRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgaWYgKGlzWDg2KCkgfHwgdm0uaGVhcC5tdXRh
dG9yU2hvdWxkQmVGZW5jZWQoKSkgewotICAgICAgICBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KG9s
ZFN0cnVjdHVyZUlELm51a2UoKSk7CisgICAgICAgIHNldFN0cnVjdHVyZUlERGlyZWN0bHkobnVr
ZShvbGRTdHJ1Y3R1cmVJRCkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAg
ICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0xNTAwLDYgKzE1MDAsNyBAQCB0ZW1wbGF0ZTxib29sIGNo
ZWNrTnVsbFN0cnVjdHVyZT4KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxP
YmplY3QpOworICAgIGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoVU5MSUtFTFkoVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdChvYmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKQEAgLTE1MTQsMTAgKzE1MTUsMTAg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICAgICAg
cmV0dXJuIG9iamVjdC0+Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUo
KSAhPSBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlSUQoKS5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChjaGVja051bGxTdHJ1Y3R1cmUgJiYgVU5MSUtFTFko
IXN0cnVjdHVyZSkpCi0gICAgICAgICAgICBDUkFTSF9XSVRIX0lORk8ob2JqZWN0LT50eXBlKCks
IG9iamVjdC0+c3RydWN0dXJlSUQoKS5iaXRzKCkpOworICAgICAgICAgICAgQ1JBU0hfV0lUSF9J
TkZPKG9iamVjdC0+dHlwZSgpLCBvYmplY3QtPnN0cnVjdHVyZUlEKCksIHN0cnVjdHVyZUlEVGFi
bGUuc2l6ZSgpKTsKICNlbmRpZgogICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFBy
b3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5
ICsxMTAsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogewog
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3Ry
dWN0dXJlSUQoKS5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBib29sIGhh
c1Nsb3QgPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICho
YXNTbG90KQpAQCAtMTUwLDkgKzE1MSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldE5vbkluZGV4CiAKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBzdHJ1Y3R1cmVJ
RFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmplY3QtPnN0cnVjdHVyZUlEKCkuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICAgICAgaWYgKExJS0VMWSghVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dChvYmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKICAgICAgICAgICAgIGlmIChvYmplY3Qt
PmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTcsNyArMjE5LDcgQEAg
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEFTU0VSVCghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwog
ICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlE
KTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3Ry
dWN0dXJlKTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQpAQCAtMzI2LDcgKzMyOCw3IEBA
IEFMV0FZU19JTkxJTkUgQVNDSUlMaXRlcmFsIEpTT2JqZWN0OjpwdXQKICAgICBBU1NFUlQoIXBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKGluZGV4aW5nTW9kZSgp
KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogSlNQcm9wZXJ0eU5hbWUKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90
IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRl
QmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3Ry
dWN0dXJlLmdldCgpKQogICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5h
bWVzQnVmZmVyKQotICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCh2bSwgdGhpcywgc3RydWN0dXJl
LCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6TWF5QmVOdWxsKQorICAgICwgbV9jYWNoZWRTdHJ1
Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVk
TGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgo
bnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXgocHJvcGVydHlOYW1lc1NpemUpCkBAIC04Niw3ICs4NiwxMSBAQCB2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShw
cm9wZXJ0eU5hbWVzKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHJvcGVydHlOYW1lcywgcHJv
cGVydHlOYW1lcyArIHRoaXNPYmplY3QtPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CiAgICAgfQot
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkU3RydWN0dXJlSUQpOworCisg
ICAgaWYgKHRoaXNPYmplY3QtPmNhY2hlZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgVk0mIHZt
ID0gdmlzaXRvci52bSgpOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZtLmdl
dFN0cnVjdHVyZSh0aGlzT2JqZWN0LT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSk7CisgICAgfQogfQog
CiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzIsMTAgKzcyLDExIEBAIHB1YmxpYzoKIAogICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJl
KFZNJiB2bSkgY29uc3QKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgICAg
IHJldHVybiBtX2NhY2hlZFN0cnVjdHVyZUlELmdldCgpOworICAgICAgICBpZiAoIW1fY2FjaGVk
U3RydWN0dXJlSUQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChtX2NhY2hlZFN0cnVjdHVyZUlEKTsKICAg
ICB9Ci0gICAgU3RydWN0dXJlSUQgY2FjaGVkU3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZFN0cnVjdHVyZUlELnZhbHVlKCk7IH0KKyAgICBTdHJ1Y3R1cmVJRCBjYWNoZWRTdHJ1
Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQ7IH0KICAgICB1aW50
MzJfdCBpbmRleGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkTGVuZ3RoOyB9CiAg
ICAgdWludDMyX3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsgfQogICAgIHVpbnQzMl90IGVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsgfQpA
QCAtMTA2LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yIGlzIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggYWxsb3dzIFZNIHRvIGNhY2hl
IHRoZSBlbXB0eSBvbmUuCiAgICAgLy8gQWZ0ZXIgaW5zdGFudGlhdGluZyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIHdlIG11c3Qgbm90IGNoYW5nZSBhbnkgZmllbGRzLgogICAgIEF1eGlsaWFy
eUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKLSAgICBX
cml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOworICAgIFN0cnVjdHVy
ZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9pbmRleGVkTGVuZ3RoOwog
ICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBt
X2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9UaGlz
TnVtYmVyKFYKICAgICB9CiAKICAgICBpZiAoYXV0byogbnVtYmVyT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxOdW1iZXJPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkgewotICAgICAgICBJbnRlZ3JpdHk6
OmF1ZGl0U3RydWN0dXJlSUQobnVtYmVyT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
SW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBudW1iZXJPYmplY3QtPnN0cnVjdHVyZUlE
KCkpOwogICAgICAgICB4ID0gbnVtYmVyT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCkuYXNOdW1iZXIo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihv
YmplY3RQcm90b0Z1bmMKICAgICBKU09iamVjdCogdmFsdWVPYmogPSB0aGlzVmFsdWUudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlT2JqKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHZhbHVlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJl
SUQoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9iaik7CiB9CiAKQEAgLTM2MSw3ICszNjEsNyBAQCBK
U1N0cmluZyogb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcoSlNHbG9iCiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0
U3RydWN0dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgIGF1dG8gcmVz
dWx0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWcpOwogICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBhc1N0cmluZyhyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KHJlZ0V4cFByb3RvRnVuYwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QodGhp
c1ZhbHVlKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tl
cihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYwLDcgKzk2MCw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihzdHJpbmdQcm90b0Z1bmMKICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVl
T2YuCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSW50ZWdyaXR5
OjphdWRpdFN0cnVjdHVyZUlEKHRoaXNWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpOwogICAgIH0KIApAQCAtOTY4LDcgKzk2OCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihzdHJpbmdQcm90b0Z1bmMKICAgICBpZiAoIXN0cmluZ09iamVjdCkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBJbnRlZ3JpdHk6
OmF1ZGl0U3RydWN0dXJlSUQoc3RyaW5nT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRl
Z3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cmluZ09iamVjdC0+c3RydWN0dXJlSUQoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdPYmplY3QtPmludGVybmFsVmFsdWUo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsKIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAgOiBK
U0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fYmxvYihTdHJ1
Y3R1cmVJRDo6ZW5jb2RlKHRoaXMpLCBpbmRleGluZ1R5cGUsIHR5cGVJbmZvKQorICAgICwgbV9i
bG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIGluZGV4aW5n
VHlwZSwgdHlwZUluZm8pCiAgICAgLCBtX291dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRP
ZkxpbmVUeXBlRmxhZ3MoKSkKICAgICAsIG1faW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkp
CiAgICAgLCBtX2JpdEZpZWxkKDApCkBAIC0yNjQsNyArMjY0LDcgQEAgU3RydWN0dXJlOjpTdHJ1
Y3R1cmUoVk0mIHZtLCBDcmVhdGluZ0VhcgogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5mbyhTdHJ1Y3R1cmVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyk7Ci0gICAgbV9ibG9iID0gU3RydWN0dXJlSURCbG9iKFN0cnVjdHVy
ZUlEOjplbmNvZGUodGhpcyksIDAsIHR5cGVJbmZvKTsKKyAgICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJ
REJsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgMCwgdHlw
ZUluZm8pOwogICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gdHlwZUluZm8ub3V0T2ZMaW5lVHlw
ZUZsYWdzKCk7CiAKICAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7CkBAIC0zMDEsNyArMzAxLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1
cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNl
dCk7CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91cy0+dHlwZUluZm8oKTsKLSAg
ICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQ6OmVuY29kZSh0aGlzKSwgcHJl
dmlvdXMtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8pOworICAgIG1f
YmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0
ZUlEKHRoaXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBl
SW5mbyk7CiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMtPnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJ
bW1vcnRhbCgpKTsKQEAgLTMyNiw2ICszMjYsNyBAQCBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQog
CiAgICAgaWYgKGlzQnJhbmRlZFN0cnVjdHVyZSgpKQogICAgICAgICBzdGF0aWNfY2FzdDxCcmFu
ZGVkU3RydWN0dXJlKj4odGhpcyktPmRlc3RydWN0KCk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+
c3RydWN0dXJlSURUYWJsZSgpLmRlYWxsb2NhdGVJRCh0aGlzLCBtX2Jsb2Iuc3RydWN0dXJlSUQo
KSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTkwOSw3
ICs5MTAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAg
CiAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtKTsKICAgICAK
LSAgICBvYmplY3QtPnNldFN0cnVjdHVyZUlERGlyZWN0bHkoaWQoKS5udWtlKCkpOworICAgIG9i
amVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKQEAgLTEzNjksNyArMTM3MCw3IEBAIFJlZjxTdHJ1Y3R1
cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBhdXRvKiBzdHJ1Y3R1cmVJRCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGlkKCkuYml0cygpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmVJRCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGlkKCkpOwogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRo
aXMpLCAiOlsiLCBSYXdQb2ludGVyKHN0cnVjdHVyZUlEKSwKICAgICAgICAgIi8iLCAodWludDMy
X3QpKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVJRCkpLCAiLCAiLAogICAg
ICAgICBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lLCAiLCAoIiwgaW5saW5lU2l6ZSgpLCAiLyIsIGlu
bGluZUNhcGFjaXR5KCksICIsICIsCkBAIC0xNDY5LDcgKzE0NzAsNyBAQCB1aW50cHRyX3QgU3Ry
dWN0dXJlOjpjYWNoZWRQcm9wZXJ0eU5hbWVFCiAgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3JBbmRGbGFnKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpj
YW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6
OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYg
KCF0aGlzLT5jYW5DYWNoZU93blByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTQ4MSw3ICsxNDgyLDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlO
YW1lRW51bQogICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9ICpjdXJyZW50U3RydWN0
dXJlSUQ7CiAgICAgICAgIGlmICghc3RydWN0dXJlSUQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJl
SUQpOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+Y2FuQ2FjaGVPd25Qcm9wZXJ0eU5hbWVzKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmVJRCsr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzID0gMDsKICAgICAK
ICAgICBlbnVtIFBvbHlQcm90b1RhZyB7IFBvbHlQcm90byB9OwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gTm9uQXJyYXksIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMCk7CkBAIC0xNjUsNyArMTY0LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHZhbGlkYXRlRmxhZ3MoKTsKIAogcHVibGljOgotICAgIFN0cnVjdHVyZUlEIGlk
KCkgY29uc3QgeyBBU1NFUlQobV9ibG9iLnN0cnVjdHVyZUlEKCkgPT0gU3RydWN0dXJlSUQ6OmVu
Y29kZSh0aGlzKSk7IHJldHVybiBtX2Jsb2Iuc3RydWN0dXJlSUQoKTsgfQorICAgIFN0cnVjdHVy
ZUlEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnN0cnVjdHVyZUlEKCk7IH0KICAgICBpbnQz
Ml90IG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5ibG9i
RXhjbHVkaW5nU3RydWN0dXJlSUQoKTsgfQogICAgIGludDY0X3QgaWRCbG9iKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmJsb2IoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDYgQEAgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZUNoYWluOjpjcmVh
dGUoVgogICAgICsrc2l6ZTsgLy8gU2VudGluZWwgbnVsbHB0ci4KICAgICBzaXplX3QgYnl0ZXMg
PSBDaGVja2VkPHNpemVfdD4oc2l6ZSkgKiBzaXplb2YoU3RydWN0dXJlSUQpOwogICAgIHZvaWQq
IHZlY3RvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCkuYWxsb2NhdGUodm0s
IGJ5dGVzLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7Ci0gICAgc3Rh
dGljX2Fzc2VydCghU3RydWN0dXJlSUQoKS5iaXRzKCksICJNYWtlIHN1cmUgdGhlIHZhbHVlIHdl
J3JlIGdvaW5nIHRvIG1lbWNweSBiZWxvdyBtYXRjaGVzIHRoZSBkZWZhdWx0IFN0cnVjdHVyZUlE
Iik7CiAgICAgbWVtc2V0KHZlY3RvciwgMCwgYnl0ZXMpOwogICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPih2bSkpIFN0
cnVjdHVyZUNoYWluKHZtLCB2bS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8U3RydWN0dXJlSUQqPih2ZWN0b3IpKTsKICAgICBjaGFpbi0+ZmluaXNoQ3JlYXRpb24o
dm0sIGhlYWQpOwpAQCAtNzQsOSArNzMsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRD
aGlsZHJlbkltcGwoSgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7Cisg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGZvciAoYXV0byogY3VycmVudCA9IHRoaXNP
YmplY3QtPm1fdmVjdG9yLmdldCgpOyAqY3VycmVudDsgKytjdXJyZW50KSB7CiAgICAgICAgIFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJlbnQ7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChzdHJ1Y3R1cmUpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSUQuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSUQuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkpTQ0NvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZEludEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgU3RydWN0dXJl
OwotCi1jb25zdGV4cHIgQ1BVUmVnaXN0ZXIgc3RydWN0dXJlSURNYXNrID0gc3RydWN0dXJlSGVh
cEFkZHJlc3NTaXplIC0gMTsKLQotY2xhc3MgU3RydWN0dXJlSUQgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVrZWRTdHJ1Y3R1cmVJREJpdCA9IDE7Ci0KLSAgICBT
dHJ1Y3R1cmVJRCgpID0gZGVmYXVsdDsKLSAgICBTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBjb25z
dCYpID0gZGVmYXVsdDsKLSAgICBTdHJ1Y3R1cmVJRCYgb3BlcmF0b3I9KFN0cnVjdHVyZUlEIGNv
bnN0JikgPSBkZWZhdWx0OwotCi0gICAgU3RydWN0dXJlSUQgbnVrZSgpIGNvbnN0IHsgcmV0dXJu
IFN0cnVjdHVyZUlEKG1fYml0cyB8IG51a2VkU3RydWN0dXJlSURCaXQpOyB9Ci0gICAgYm9vbCBp
c051a2VkKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgbnVrZWRTdHJ1Y3R1cmVJREJpdDsgfQot
ICAgIFN0cnVjdHVyZUlEIGRlY29udGFtaW5hdGUoKSBjb25zdCB7IHJldHVybiBTdHJ1Y3R1cmVJ
RChtX2JpdHMgJiB+bnVrZWRTdHJ1Y3R1cmVJREJpdCk7IH0KLQotICAgIGlubGluZSBTdHJ1Y3R1
cmUqIGRlY29kZSgpIGNvbnN0OwotICAgIHN0YXRpYyBTdHJ1Y3R1cmVJRCBlbmNvZGUoY29uc3Qg
U3RydWN0dXJlKik7Ci0KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX2JpdHM7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oU3RydWN0dXJlSUQgY29uc3QmIG90
aGVyKSBjb25zdCAgeyByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShTdHJ1Y3R1cmVJRCBjb25zdCYgb3RoZXIpIGNvbnN0ICB7IHJldHVybiBtX2Jp
dHMgIT0gb3RoZXIubV9iaXRzOyB9Ci0gICAgY29uc3RleHByIHVpbnQzMl90IGJpdHMoKSBjb25z
dCB7IHJldHVybiBtX2JpdHM7IH0KLQotICAgIFN0cnVjdHVyZUlEKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBtX2JpdHMobnVrZWRTdHJ1Y3R1cmVJREJpdCkgeyB9Ci0gICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IFN0cnVj
dHVyZUlEKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFN0cnVjdHVyZUlEKHVpbnQzMl90IGJpdHMpIDogbV9iaXRzKGJpdHMpIHsgfQotCi0g
ICAgdWludDMyX3QgbV9iaXRzIHsgMCB9OwotfTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFN0cnVj
dHVyZUlEKSA9PSBzaXplb2YodWludDMyX3QpKTsKLQotI2lmIENQVShBRERSRVNTNjQpCi0KLUFM
V0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRDo6ZGVjb2RlKCkgY29uc3QKLXsKLSAg
ICAvLyBUYWtlIGNhcmUgdG8gb25seSB1c2UgdGhlIGJpdHMgZnJvbSBtX2JpdHMgaW4gdGhlIHN0
cnVjdHVyZSdzIGFkZHJlc3MgcmVzZXJ2YXRpb24uCi0gICAgQVNTRVJUKGRlY29udGFtaW5hdGUo
KSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oZGVjb250YW1pbmF0ZSgpLm1fYml0cykgJiBzdHJ1Y3R1cmVJRE1hc2spICsg
Z19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXApOwotfQotCi1BTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZUlEIFN0cnVjdHVyZUlEOjplbmNvZGUoY29uc3QgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKGdfanNjQ29uZmlnLnN0YXJ0
T2ZTdHJ1Y3R1cmVIZWFwIDw9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUp
ICYmIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpIDwgZ19qc2NDb25maWcu
c3RhcnRPZlN0cnVjdHVyZUhlYXAgKyBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUpOwotICAgIGF1
dG8gcmVzdWx0ID0gU3RydWN0dXJlSUQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0cnVj
dHVyZSkgJiBzdHJ1Y3R1cmVJRE1hc2spOwotICAgIEFTU0VSVChyZXN1bHQuZGVjb2RlKCkgPT0g
c3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZWxzZSAvLyBDUFUoQUREUkVT
UzY0KQotCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogU3RydWN0dXJlSUQ6OmRlY29kZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGRlY29udGFtaW5hdGUoKSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8U3RydWN0dXJlKj4obV9iaXRzKTsKLX0KLQotQUxXQVlTX0lOTElORSBTdHJ1Y3R1
cmVJRCBTdHJ1Y3R1cmVJRDo6ZW5jb2RlKGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJlKQotewot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBTdHJ1Y3R1cmVJRChyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKLX0KLQotI2VuZGlmCi0KLXN0cnVjdCBTdHJ1
Y3R1cmVJREhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cnVjdHVyZUlE
JiBrZXkpIHsgcmV0dXJuIGtleS5iaXRzKCk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJ1Y3R1cmVJRCYgYSwgY29uc3QgU3RydWN0dXJlSUQmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6U3RydWN0dXJlSUQ+IDogSlNDOjpTdHJ1Y3R1cmVJREhhc2gg
eyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpTdHJ1Y3R1cmVJRD4gOiBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8SlNDOjpTdHJ1Y3R1cmVJRD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTQgKzI4LDE3IEBACiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlELmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgU3RydWN0dXJlSURCbG9iIHsKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgotICAgIFN0cnVjdHVyZUlEQmxvYigpID0gZGVmYXVs
dDsKKyAgICBTdHJ1Y3R1cmVJREJsb2IoKQorICAgIHsKKyAgICAgICAgdS5kb3VibGVXb3JkID0g
MHhiYmFkYmVlZjsKKyAgICB9CiAKICAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewpAQCAtNzQsOSArNzcsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHVuaW9uIERhdGEgeworICAgIHVuaW9uIHsKICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgc2lu
Y2UgdGhlIHN0cnVjdHVyZUlEIGNhbiBiZSBkaXJlY3RseSBjb21wdXRlZCBmcm9tIHRoZSBTdHJ1
Y3R1cmUqCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKICAgICAgICAgICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAg
SlNUeXBlIHR5cGU7CkBAIC04OCwxMSArOTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50
MzJfdCB3b3JkMjsKICAgICAgICAgfSB3b3JkczsKICAgICAgICAgaW50NjRfdCBkb3VibGVXb3Jk
OwotCi0gICAgICAgIERhdGEoKSB7IGRvdWJsZVdvcmQgPSAweGJiYWRiZWVmOyB9Ci0gICAgfTsK
LQotICAgIERhdGEgdTsKKyAgICB9IHU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFibGUu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlEVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VFeGhhdXN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9SYXdQb2lu
dGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNw
YWNlIFN0cnVjdHVyZUlEVGFibGVJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOworfQorCitTdHJ1Y3R1cmVJRFRhYmxlOjpTdHJ1Y3R1cmVJRFRhYmxlKCkK
KyAgICA6IG1fdGFibGUobWFrZVVuaXF1ZUFycmF5PFN0cnVjdHVyZU9yT2Zmc2V0PihzX2luaXRp
YWxTaXplKSkKKyAgICAsIG1fc2l6ZSgxKQorICAgICwgbV9jYXBhY2l0eShzX2luaXRpYWxTaXpl
KQoreworICAgIC8vIFdlIHByZS1hbGxvY2F0ZSB0aGUgZmlyc3Qgb2Zmc2V0IHNvIHRoYXQgdGhl
IG51bGwgU3RydWN0dXJlCisgICAgLy8gY2FuIHN0aWxsIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBT
dHJ1Y3R1cmVJRCAnMCcuCisgICAgdGFibGUoKVswXS5lbmNvZGVkU3RydWN0dXJlQml0cyA9IDA7
CisKKyAgICBtYWtlRnJlZUxpc3RGcm9tUmFuZ2UoMSwgbV9jYXBhY2l0eSAtIDEpOworfQorCit2
b2lkIFN0cnVjdHVyZUlEVGFibGU6Om1ha2VGcmVlTGlzdEZyb21SYW5nZSh1aW50MzJfdCBmaXJz
dCwgdWludDMyX3QgbGFzdCkKK3sKKyAgICBBU1NFUlQoIW1fZmlyc3RGcmVlT2Zmc2V0KTsKKyAg
ICBBU1NFUlQoIW1fbGFzdEZyZWVPZmZzZXQpOworCisgICAgLy8gUHV0IGFsbCB0aGUgbmV3IElE
cyBvbiB0aGUgZnJlZSBsaXN0IHNlcXVlbnRpYWxseS4KKyAgICB1aW50MzJfdCBoZWFkID0gZmly
c3Q7CisgICAgdWludDMyX3QgdGFpbCA9IGxhc3Q7CisgICAgZm9yICh1aW50MzJfdCBpID0gZmly
c3Q7IGkgPCBsYXN0OyArK2kpCisgICAgICAgIHRhYmxlKClbaV0ub2Zmc2V0ID0gaSArIDE7Cisg
ICAgdGFibGUoKVtsYXN0XS5vZmZzZXQgPSAwOworCisgICAgLy8gUmFuZG9taXplIHRoZSBmcmVl
IGxpc3QuCisgICAgdWludDMyX3Qgc2l6ZSA9IGxhc3QgLSBmaXJzdCArIDE7CisgICAgdWludDMy
X3QgbWF4SXRlcmF0aW9ucyA9IChzaXplICogMikgLyAzOworICAgIGZvciAodWludDMyX3QgY291
bnQgPSAwOyBjb3VudCA8IG1heEl0ZXJhdGlvbnM7ICsrY291bnQpIHsKKyAgICAgICAgLy8gTW92
ZSBhIHJhbmRvbSBwaWNrIGVpdGhlciB0byB0aGUgaGVhZCBvciB0aGUgdGFpbCBvZiB0aGUgZnJl
ZSBsaXN0LgorICAgICAgICB1aW50MzJfdCByYW5kb20gPSBtX3dlYWtSYW5kb20uZ2V0VWludDMy
KCk7CisgICAgICAgIHVpbnQzMl90IG5vZGVCZWZvcmUgPSBmaXJzdCArIChyYW5kb20gJSBzaXpl
KTsKKyAgICAgICAgdWludDMyX3QgcGljayA9IHRhYmxlKClbbm9kZUJlZm9yZV0ub2Zmc2V0Owor
ICAgICAgICBpZiAocGljaykgeworICAgICAgICAgICAgdWludDMyX3Qgbm9kZUFmdGVyID0gdGFi
bGUoKVtwaWNrXS5vZmZzZXQ7CisgICAgICAgICAgICB0YWJsZSgpW25vZGVCZWZvcmVdLm9mZnNl
dCA9IG5vZGVBZnRlcjsKKyAgICAgICAgICAgIGlmICgocmFuZG9tICYgMSkgfHwgIW5vZGVBZnRl
cikgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGhlYWQuCisgICAgICAgICAgICAg
ICAgdGFibGUoKVtwaWNrXS5vZmZzZXQgPSBoZWFkOworICAgICAgICAgICAgICAgIGhlYWQgPSBw
aWNrOworICAgICAgICAgICAgICAgIGlmICghbm9kZUFmdGVyKQorICAgICAgICAgICAgICAgICAg
ICB0YWlsID0gbm9kZUJlZm9yZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gTW92ZSB0byB0aGUgdGFpbC4KKyAgICAgICAgICAgICAgICB0YWJsZSgpW3BpY2tdLm9m
ZnNldCA9IDA7CisgICAgICAgICAgICAgICAgdGFibGUoKVt0YWlsXS5vZmZzZXQgPSBwaWNrOwor
ICAgICAgICAgICAgICAgIHRhaWwgPSBwaWNrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQ3V0IGxpc3QgaW4gaGFsZiBhbmQgc3dhcCBoYWx2ZXMuCisgICAgdWlu
dDMyX3QgY3V0ID0gZmlyc3QgKyAobV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICUgc2l6ZSk7Cisg
ICAgdWludDMyX3QgYWZ0ZXJDdXQgPSB0YWJsZSgpW2N1dF0ub2Zmc2V0OworICAgIGlmIChhZnRl
ckN1dCkgeworICAgICAgICB0YWJsZSgpW3RhaWxdLm9mZnNldCA9IGhlYWQ7CisgICAgICAgIHRh
aWwgPSBjdXQ7CisgICAgICAgIGhlYWQgPSBhZnRlckN1dDsKKyAgICAgICAgdGFibGUoKVtjdXRd
Lm9mZnNldCA9IDA7CisgICAgfQorCisgICAgbV9maXJzdEZyZWVPZmZzZXQgPSBoZWFkOworICAg
IG1fbGFzdEZyZWVPZmZzZXQgPSB0YWlsOworfQorCit2b2lkIFN0cnVjdHVyZUlEVGFibGU6OnJl
c2l6ZShzaXplX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgaWYgKG5ld0NhcGFjaXR5ID4gc19tYXhp
bXVtTnVtYmVyT2ZTdHJ1Y3R1cmVzKQorICAgICAgICBuZXdDYXBhY2l0eSA9IHNfbWF4aW11bU51
bWJlck9mU3RydWN0dXJlczsKKworICAgIC8vIElmIG1fc2l6ZSBpcyBhbHJlYWR5IHNfbWF4aW11
bU51bWJlck9mU3RydWN0dXJlcywgbmV3Q2FwYWNpdHkgYmVjb21lcyBzX21heGltdW1OdW1iZXJP
ZlN0cnVjdHVyZXMgaW4gdGhlIGFib3ZlIGNvZGUuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSBz
aG91bGQgY3Jhc2ggYmVjYXVzZSBvZiBleGhhdXN0IG9mIFN0cnVjdHVyZUlEcy4KKyAgICBSRUxF
QVNFX0FTU0VSVF9SRVNPVVJDRV9BVkFJTEFCTEUobV9zaXplIDwgbmV3Q2FwYWNpdHksIFN0cnVj
dHVyZUlERXhoYXVzdGlvbiwgIkNyYXNoIGludGVudGlvbmFsbHkgYmVjYXVzZSBvZiBleGhhdXN0
IG9mIFN0cnVjdHVyZUlEcy4iKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbmV3IHRhYmxlLgorICAg
IGF1dG8gbmV3VGFibGUgPSBtYWtlVW5pcXVlQXJyYXk8U3RydWN0dXJlT3JPZmZzZXQ+KG5ld0Nh
cGFjaXR5KTsKKworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBvbGQgdGFibGUgdG8g
dGhlIG5ldyB0YWJsZS4KKyAgICBtZW1jcHkobmV3VGFibGUuZ2V0KCksIHRhYmxlKCksIG1fY2Fw
YWNpdHkgKiBzaXplb2YoU3RydWN0dXJlT3JPZmZzZXQpKTsKKworICAgIC8vIFN0b3JlIGZlbmNl
IHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3BpZWQgZXZlcnl0aGluZyBiZWZvcmUgZG9pbmcgdGhlIHN3
YXAuCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKworICAgIC8vIFN3YXAgdGhlIG9sZCBh
bmQgbmV3IHRhYmxlcy4KKyAgICBzd2FwKG1fdGFibGUsIG5ld1RhYmxlKTsKKworICAgIC8vIFB1
dCB0aGUgb2xkIHRhYmxlIChub3cgbGFiZWxlZCBhcyBuZXcpIGludG8gdGhlIGxpc3Qgb2Ygb2xk
IHRhYmxlcy4KKyAgICBtX29sZFRhYmxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJsZSkpOworCisg
ICAgLy8gVXBkYXRlIHRoZSBjYXBhY2l0eS4KKyAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7
CisKKyAgICBtYWtlRnJlZUxpc3RGcm9tUmFuZ2UobV9zaXplLCBtX2NhcGFjaXR5IC0gMSk7Cit9
CisKK3ZvaWQgU3RydWN0dXJlSURUYWJsZTo6Zmx1c2hPbGRUYWJsZXMoKQoreworICAgIG1fb2xk
VGFibGVzLmNsZWFyKCk7Cit9CisKK1N0cnVjdHVyZUlEIFN0cnVjdHVyZUlEVGFibGU6OmFsbG9j
YXRlSUQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX2ZpcnN0
RnJlZU9mZnNldCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jYXBhY2l0eSA8PSBzX21h
eGltdW1OdW1iZXJPZlN0cnVjdHVyZXMpOworICAgICAgICBBU1NFUlQobV9zaXplID09IG1fY2Fw
YWNpdHkpOworICAgICAgICByZXNpemUobV9jYXBhY2l0eSAqIDIpOworICAgICAgICBBU1NFUlQo
bV9zaXplIDwgbV9jYXBhY2l0eSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZmlyc3RGcmVl
T2Zmc2V0KTsKKyAgICB9CisKKyAgICAvLyBlbnRyb3B5Qml0cyBtdXN0IG5vdCBiZSB6ZXJvLiBU
aGlzIGVuc3VyZXMgdGhhdCBpZiBhIGNvcnJ1cHRlZAorICAgIC8vIHN0cnVjdHVyZUlEIGlzIGVu
Y291bnRlcmVkICh3aXRoIGluY29ycmVjdCBlbnRyb3B5Qml0cyksIHRoZSBkZWNvZGVkCisgICAg
Ly8gc3RydWN0dXJlIHBvaW50ZXIgZm9yIHRoYXQgSUQgd2lsbCBiZSBhbHdheXMgYmUgYSBiYWQg
cG9pbnRlciB3aXRoCisgICAgLy8gaGlnaCBiaXRzIHNldC4KKyAgICBjb25zdGV4cHIgdWludDMy
X3QgZW50cm9weUJpdHNNYXNrID0gKDEgPDwgc19udW1iZXJPZkVudHJvcHlCaXRzKSAtIDE7Cisg
ICAgdWludDMyX3QgZW50cm9weUJpdHMgPSBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCkgJiBlbnRy
b3B5Qml0c01hc2s7CisgICAgaWYgKFVOTElLRUxZKCFlbnRyb3B5Qml0cykpIHsKKyAgICAgICAg
Y29uc3RleHByIHVpbnQzMl90IG51bWJlck9mVmFsdWVzVG9QaWNrRnJvbSA9IGVudHJvcHlCaXRz
TWFzazsKKyAgICAgICAgZW50cm9weUJpdHMgPSAobV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICUg
bnVtYmVyT2ZWYWx1ZXNUb1BpY2tGcm9tKSArIDE7CisgICAgfQorCisgICAgdWludDMyX3Qgc3Ry
dWN0dXJlSW5kZXggPSBtX2ZpcnN0RnJlZU9mZnNldDsKKyAgICBtX2ZpcnN0RnJlZU9mZnNldCA9
IHRhYmxlKClbbV9maXJzdEZyZWVPZmZzZXRdLm9mZnNldDsKKyAgICBpZiAoIW1fZmlyc3RGcmVl
T2Zmc2V0KQorICAgICAgICBtX2xhc3RGcmVlT2Zmc2V0ID0gMDsKKworICAgIFN0cnVjdHVyZUlE
IHJlc3VsdCA9IChzdHJ1Y3R1cmVJbmRleCA8PCBzX251bWJlck9mRW50cm9weUJpdHMpIHwgZW50
cm9weUJpdHM7CisgICAgdGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJp
dHMgPSBlbmNvZGUoc3RydWN0dXJlLCByZXN1bHQpOworICAgIG1fc2l6ZSsrOworICAgIEFTU0VS
VCghaXNOdWtlZChyZXN1bHQpKTsKKworICAgIGRhdGFMb2dMbklmKFN0cnVjdHVyZUlEVGFibGVJ
bnRlcm5hbDo6dmVyYm9zZSwgIkFsbG9jYXRlZCBTdHJ1Y3R1cmVJRCAiLCByZXN1bHQsICIgZm9y
IFN0cnVjdHVyZSAiLCBSYXdQb2ludGVyKHN0cnVjdHVyZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgU3RydWN0dXJlSURUYWJsZTo6ZGVhbGxvY2F0ZUlEKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAgICBkYXRhTG9nTG5JZihTdHJ1
Y3R1cmVJRFRhYmxlSW50ZXJuYWw6OnZlcmJvc2UsICJEZWFsbG9jYXRlZCBTdHJ1Y3R1cmVJRCAi
LCBzdHJ1Y3R1cmVJRCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZUlEICE9IHNfdW51c2VkSUQpOwor
ICAgIHVpbnQzMl90IHN0cnVjdHVyZUluZGV4ID0gc3RydWN0dXJlSUQgPj4gc19udW1iZXJPZkVu
dHJvcHlCaXRzOworICAgIEFTU0VSVChzdHJ1Y3R1cmVJbmRleCAmJiBzdHJ1Y3R1cmVJbmRleCA8
IHNfbWF4aW11bU51bWJlck9mU3RydWN0dXJlcyk7CisgICAgUkVMRUFTRV9BU1NFUlQodGFibGUo
KVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJpdHMgPT0gZW5jb2RlKHN0cnVjdHVy
ZSwgc3RydWN0dXJlSUQpKTsKKyAgICBtX3NpemUtLTsKKyAgICBpZiAoIW1fZmlyc3RGcmVlT2Zm
c2V0KSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLm9mZnNldCA9IDA7CisgICAg
ICAgIG1fZmlyc3RGcmVlT2Zmc2V0ID0gc3RydWN0dXJlSW5kZXg7CisgICAgICAgIG1fbGFzdEZy
ZWVPZmZzZXQgPSBzdHJ1Y3R1cmVJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJvb2wgaW5zZXJ0QXRIZWFkID0gbV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICYgMTsKKyAgICBp
ZiAoaW5zZXJ0QXRIZWFkKSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLm9mZnNl
dCA9IG1fZmlyc3RGcmVlT2Zmc2V0OworICAgICAgICBtX2ZpcnN0RnJlZU9mZnNldCA9IHN0cnVj
dHVyZUluZGV4OworICAgIH0gZWxzZSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhd
Lm9mZnNldCA9IDA7CisgICAgICAgIHRhYmxlKClbbV9sYXN0RnJlZU9mZnNldF0ub2Zmc2V0ID0g
c3RydWN0dXJlSW5kZXg7CisgICAgICAgIG1fbGFzdEZyZWVPZmZzZXQgPSBzdHJ1Y3R1cmVJbmRl
eDsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJRFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkVuc3VyZVN0aWxsQWxp
dmVIZXJlLmgiCisjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1Jh
bmRvbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlOworCisjaWYgVVNF
KEpTVkFMVUU2NCkKK3VzaW5nIFN0cnVjdHVyZUlEID0gdWludDMyX3Q7CisKK2lubGluZSBTdHJ1
Y3R1cmVJRCBudWtlZFN0cnVjdHVyZUlEQml0KCkKK3sKKyAgICByZXR1cm4gMHg4MDAwMDAwMHU7
Cit9CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBudWtlKFN0cnVjdHVyZUlEIGlkKQoreworICAgIHJl
dHVybiBpZCB8IG51a2VkU3RydWN0dXJlSURCaXQoKTsKK30KKworaW5saW5lIGJvb2wgaXNOdWtl
ZChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyAgICByZXR1cm4gISEoaWQgJiBudWtlZFN0cnVjdHVyZUlE
Qml0KCkpOworfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb250YW1pbmF0ZShTdHJ1Y3R1cmVJ
RCBpZCkKK3sKKyAgICByZXR1cm4gaWQgJiB+bnVrZWRTdHJ1Y3R1cmVJREJpdCgpOworfQorI2Vs
c2UgLy8gbm90IFVTRShKU1ZBTFVFNjQpCit1c2luZyBTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZSo7
CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBudWtlZFN0cnVjdHVyZUlEQml0KCkKK3sKKyAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlEPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsK
K30KKworaW5saW5lIFN0cnVjdHVyZUlEIG51a2UoU3RydWN0dXJlSUQgaWQpCit7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmVJRD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaWQp
IHwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSk7Cit9CisK
K2lubGluZSBib29sIGlzTnVrZWQoU3RydWN0dXJlSUQgaWQpCit7CisgICAgcmV0dXJuICEhKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlkKSAmIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG51a2Vk
U3RydWN0dXJlSURCaXQoKSkpOworfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb250YW1pbmF0
ZShTdHJ1Y3R1cmVJRCBpZCkKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlE
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpZCkgJiB+Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
bnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSk7Cit9CisjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVFNjQp
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCit1c2luZyBFbmNvZGVkU3RydWN0dXJlQml0cyA9IHVp
bnRwdHJfdDsKKworY2xhc3MgU3RydWN0dXJlSURUYWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVJRFRhYmxlKCk7CisK
KyAgICB2b2lkKiogYmFzZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV90
YWJsZSk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZShTdHJ1Y3R1cmVJRCk7
CisKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5MDM2ODg4OiByZW1vdmUgdGhpcyB3aGVuIG5vIGxv
bmdlciBuZWVkZWQuCisgICAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGEgc3BlY2lhbCBjYXNl
IG1pdGlnYXRpb24uIEl0IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UuCisgICAgU3RydWN0dXJlKiB0
cnlHZXQoU3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlKiBnZXQoU3RydWN0dXJlSUQpOwor
ICAgIHZvaWQgZGVhbGxvY2F0ZUlEKFN0cnVjdHVyZSosIFN0cnVjdHVyZUlEKTsKKyAgICBTdHJ1
Y3R1cmVJRCBhbGxvY2F0ZUlEKFN0cnVjdHVyZSopOworCisgICAgdm9pZCBmbHVzaE9sZFRhYmxl
cygpOworICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCByZXNpemUoc2l6ZV90IG5ld0NhcGFjaXR5KTsKKyAgICB2b2lk
IG1ha2VGcmVlTGlzdEZyb21SYW5nZSh1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgbGFzdCk7CisK
KyAgICB1bmlvbiBTdHJ1Y3R1cmVPck9mZnNldCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlZFN0cnVjdHVyZUJpdHMgZW5jb2Rl
ZFN0cnVjdHVyZUJpdHM7CisgICAgICAgIHVpbnRwdHJfdCBvZmZzZXQ7CisgICAgfTsKKworICAg
IFN0cnVjdHVyZU9yT2Zmc2V0KiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7
IH0KKyAgICBzdGF0aWMgU3RydWN0dXJlKiBkZWNvZGUoRW5jb2RlZFN0cnVjdHVyZUJpdHMsIFN0
cnVjdHVyZUlEKTsKKyAgICBzdGF0aWMgRW5jb2RlZFN0cnVjdHVyZUJpdHMgZW5jb2RlKFN0cnVj
dHVyZSosIFN0cnVjdHVyZUlEKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfaW5p
dGlhbFNpemUgPSA1MTI7CisKKyAgICBWZWN0b3I8VW5pcXVlQXJyYXk8U3RydWN0dXJlT3JPZmZz
ZXQ+PiBtX29sZFRhYmxlczsKKworICAgIHVpbnQzMl90IG1fZmlyc3RGcmVlT2Zmc2V0IHsgMCB9
OworICAgIHVpbnQzMl90IG1fbGFzdEZyZWVPZmZzZXQgeyAwIH07CisgICAgVW5pcXVlQXJyYXk8
U3RydWN0dXJlT3JPZmZzZXQ+IG1fdGFibGU7CisKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9Owor
ICAgIHNpemVfdCBtX2NhcGFjaXR5OworCisgICAgV2Vha1JhbmRvbSBtX3dlYWtSYW5kb207CisK
KyAgICBzdGF0aWMgY29uc3RleHByIFN0cnVjdHVyZUlEIHNfdW51c2VkSUQgPSAwOworCitwdWJs
aWM6CisgICAgLy8gMS4gU3RydWN0dXJlSUQgaXMgZW5jb2RlZCBhczoKKyAgICAvLworICAgIC8v
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyAgICB8IDEgTnVrZSBCaXQgfCAyNiBTdHJ1Y3R1cmVJRFRhYmxl
IGluZGV4IGJpdHMgfCA1IGVudHJvcHkgYml0cyB8CisgICAgLy8gICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
CisgICAgLy8gICAgVGhlIGVudHJvcHkgYml0cyBhcmUgY2hvc2VuIGF0IHJhbmRvbSBhbmQgYXNz
aWduZWQgd2hlbiBhIFN0cnVjdHVyZUlECisgICAgLy8gICAgaXMgYWxsb2NhdGVkLgorICAgIC8v
CisgICAgLy8gMi4gRm9yIGVhY2ggU3RydWN0dXJlSUQsIHRoZSBTdHJ1Y3R1cmVJRFRhYmxlIHN0
b3JlcyBlbmNvZGVkU3RydWN0dXJlQml0cworICAgIC8vICAgIHdoaWNoIGFyZSBlbmNvZGVkIGZy
b20gdGhlIHN0cnVjdHVyZSBwb2ludGVyIGFzIHN1Y2g6CisgICAgLy8KKyAgICAvLyAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyAgICB8IDExIGxvdyBpbmRleCBiaXRzIHwgNSBlbnRyb3B5IGJpdHMgfCA0
OCBzdHJ1Y3R1cmUgcG9pbnRlciBiaXRzIHwKKyAgICAvLyAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLwor
ICAgIC8vICAgIFRoZSBlbnRyb3B5IGJpdHMgaGVyZSBhcmUgdGhlIHNhbWUgNSBiaXRzIHVzZWQg
aW4gdGhlIGVuY29kaW5nIG9mIHRoZQorICAgIC8vICAgIFN0cnVjdHVyZUlEIGZvciB0aGlzIHN0
cnVjdHVyZSBlbnRyeSBpbiB0aGUgU3RydWN0dXJlSURUYWJsZS4KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDMyX3Qgc19udW1iZXJPZk51a2VCaXRzID0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IHNfbnVtYmVyT2ZFbnRyb3B5Qml0cyA9IDU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyID0gKHNp
emVvZihFbmNvZGVkU3RydWN0dXJlQml0cykgKiA4KSAtIDE2OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBzX21heGltdW1OdW1iZXJPZlN0cnVjdHVyZXMgPSAxIDw8ICgzMiAtIHNf
bnVtYmVyT2ZFbnRyb3B5Qml0cyAtIHNfbnVtYmVyT2ZOdWtlQml0cyk7Cit9OworCitBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogU3RydWN0dXJlSURUYWJsZTo6ZGVjb2RlKEVuY29kZWRTdHJ1Y3R1
cmVCaXRzIGJpdHMsIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQoreworICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RydWN0dXJlKj4oYml0cyBeIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHN0cnVj
dHVyZUlEKSA8PCBzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyKSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgRW5jb2RlZFN0cnVjdHVyZUJpdHMgU3RydWN0dXJlSURUYWJsZTo6ZW5j
b2RlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEVuY29kZWRTdHJ1Y3R1cmVCaXRzPihzdHJ1Y3R1cmUpIF4g
KHN0YXRpY19jYXN0PEVuY29kZWRTdHJ1Y3R1cmVCaXRzPihzdHJ1Y3R1cmVJRCkgPDwgc19lbnRy
b3B5Qml0c1NoaWZ0Rm9yU3RydWN0dXJlUG9pbnRlcik7Cit9CisKK2lubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZUlEVGFibGU6OmdldChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdHJ1Y3R1cmVJRCk7CisgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzTnVrZWQoc3RydWN0dXJlSUQpKTsKKyAgICB1
aW50MzJfdCBzdHJ1Y3R1cmVJbmRleCA9IHN0cnVjdHVyZUlEID4+IHNfbnVtYmVyT2ZFbnRyb3B5
Qml0czsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0cnVj
dHVyZUluZGV4IDwgbV9jYXBhY2l0eSk7CisgICAgcmV0dXJuIGRlY29kZSh0YWJsZSgpW3N0cnVj
dHVyZUluZGV4XS5lbmNvZGVkU3RydWN0dXJlQml0cywgc3RydWN0dXJlSUQpOworfQorCisvLyBG
SVhNRTogcmRhcjovLzY5MDM2ODg4OiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIG5vIGxvbmdl
ciBuZWVkZWQuCitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRFRhYmxlOjp0cnlHZXQoU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQpCit7CisgICAgdWludDMyX3Qgc3RydWN0dXJlSW5kZXggPSBz
dHJ1Y3R1cmVJRCA+PiBzX251bWJlck9mRW50cm9weUJpdHM7CisgICAgaWYgKHN0cnVjdHVyZUlu
ZGV4ID49IG1fY2FwYWNpdHkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBk
ZWNvZGUodGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJpdHMsIHN0cnVj
dHVyZUlEKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZUlEVGFibGU6OnZhbGlk
YXRlKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQoreworICAgIHVpbnQzMl90IHN0cnVjdHVyZUlu
ZGV4ID0gc3RydWN0dXJlSUQgPj4gc19udW1iZXJPZkVudHJvcHlCaXRzOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZGVjb2RlKHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLmVuY29kZWRTdHJ1
Y3R1cmVCaXRzLCBzdHJ1Y3R1cmVJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlSW5k
ZXggPCBtX2NhcGFjaXR5KTsKKyAgICAqYml0d2lzZV9jYXN0PHZvbGF0aWxlIHVpbnQ2NF90Kj4o
c3RydWN0dXJlKTsKK30KKworI2Vsc2UgLy8gbm90IFVTRShKU1ZBTFVFNjQpCisKK2NsYXNzIFN0
cnVjdHVyZUlEVGFibGUgeworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CitwdWJsaWM6CisgICAgU3RydWN0dXJlSURUYWJsZSgpID0gZGVmYXVsdDsKKworICAgIC8vIEZJ
WE1FOiByZGFyOi8vNjkwMzY4ODg6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbm8gbG9uZ2Vy
IG5lZWRlZC4KKyAgICBTdHJ1Y3R1cmUqIHRyeUdldChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkg
eyByZXR1cm4gc3RydWN0dXJlSUQ7IH0KKyAgICBTdHJ1Y3R1cmUqIGdldChTdHJ1Y3R1cmVJRCBz
dHJ1Y3R1cmVJRCkgeyByZXR1cm4gc3RydWN0dXJlSUQ7IH0KKyAgICB2b2lkIGRlYWxsb2NhdGVJ
RChTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVJRCkgeyB9CisgICAgU3RydWN0dXJlSUQgYWxsb2NhdGVJ
RChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNOdWtlZChz
dHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9OworCisgICAgdm9p
ZCBmbHVzaE9sZFRhYmxlcygpIHsgfQorICAgIHZvaWQgdmFsaWRhdGUoU3RydWN0dXJlSUQpIHsg
fQorfTsKKworI2VuZGlmIC8vIG5vdCBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAg
KzYwLDExIEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3koSlNDZWxsKiAKIAogU3Ry
dWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2
aW91cykKICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0
KCkpCi0gICAgLCBtX3ByZXZpb3VzKHZtLCB0aGlzLCBwcmV2aW91cywgV3JpdGVCYXJyaWVyU3Ry
dWN0dXJlSUQ6Ok1heUJlTnVsbCkKICAgICAsIG1fbWF4T2Zmc2V0KGludmFsaWRPZmZzZXQpCiAg
ICAgLCBtX3RyYW5zaXRpb25PZmZzZXQoaW52YWxpZE9mZnNldCkKIHsKKyAgICBpZiAocHJldmlv
dXMpCisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MCw2ICsxNDAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0cnlDYWNoZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3JWaWFXYXRjaHBvaW50KFZNJiwgU3RydWN0dXJlKiwgU3RydWN0
dXJlQ2hhaW4qKTsKIAorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgc3RvcnkgZm9yIGNsZWFyaW5nIHRoZXNl
IHByb3BlcnR5IG5hbWVzIGNhY2hlcyBpbiBHQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNjU5CiAgICAgdWludHB0cl90IG1fY2FjaGVkUHJvcGVy
dHlOYW1lRW51bWVyYXRvckFuZEZsYWcgeyAwIH07CkBAIC0xNTUsNyArMTU2LDYgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbFByb3BlcnR5Q2FjaGU+IG1fc3BlY2lhbFBy
b3BlcnR5Q2FjaGU7CiAgICAgQm94PElubGluZVdhdGNocG9pbnRTZXQ+IG1fcG9seVByb3RvV2F0
Y2hwb2ludDsKIAotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcHJldmlvdXM7CiAgICAg
UHJvcGVydHlPZmZzZXQgbV9tYXhPZmZzZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV90cmFuc2l0
aW9uT2Zmc2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVy
ZUNoYWluSW52YWxpZGF0aW9uV2EKICAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhckNhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKIH0KIAotaW5saW5lIGJvb2wgU3RydWN0dXJlUmFy
ZURhdGE6OnRyeUNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvclZpYVdhdGNocG9pbnQoVk0mLCBT
dHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK2lubGluZSBi
b29sIFN0cnVjdHVyZVJhcmVEYXRhOjp0cnlDYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3JWaWFX
YXRjaHBvaW50KFZNJiB2bSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4pCiB7CiAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODYsNyArMTg2LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlUmFyZURhdGE6OnRyeUNhY2hlUAogICAgIGZvciAoYXV0byogY3VycmVudCA9IGNoYWluLT5o
ZWFkKCk7ICpjdXJyZW50OyArK2N1cnJlbnQpIHsKICAgICAgICAgKytzaXplOwogICAgICAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9ICpjdXJyZW50OwotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU2hvdWxkV2F0Y2goKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xOTQsNyArMTk0LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlUmFyZURhdGE6OnRyeUNhY2hlUAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3Ig
KGF1dG8qIGN1cnJlbnQgPSBjaGFpbi0+aGVhZCgpOyAqY3VycmVudDsgKytjdXJyZW50KSB7CiAg
ICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJlbnQ7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgbV9j
YWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yV2F0Y2hwb2ludHNbaW5kZXhdLmluc3RhbGwodGhp
cywgc3RydWN0dXJlKTsKICAgICAgICAgKytpbmRleDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKHN5bWJvbFByb3RvR2V0dAogICAgIGlmICghc3ltYm9sKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBTeW1ib2xEZXNjcmlwdGlvblR5
cGVFcnJvcik7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRChzeW1ib2wtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh2bSwgc3ltYm9sLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBjb25zdCBhdXRvIGRlc2Ny
aXB0aW9uID0gc3ltYm9sLT5kZXNjcmlwdGlvbigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZGVzY3JpcHRpb24uaXNOdWxsKCkgPyBqc1VuZGVmaW5lZCgpIDoganNTdHJpbmcodm0sIGRl
c2NyaXB0aW9uKSk7CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKHN5bWJvbFByb3RvRnVuYwogICAgIFN5bWJvbCogc3ltYm9sID0gdHJ5RXh0cmFjdFN5bWJv
bCh2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbFRvU3Ry
aW5nVHlwZUVycm9yKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQoc3ltYm9sLT5z
dHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN5bWJv
bC0+c3RydWN0dXJlSUQoKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBzeW1ib2wtPmRlc2NyaXB0aXZlU3RyaW5n
KCkpKSk7CiB9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
c3ltYm9sUHJvdG9GdW5jCiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbFZhbHVlT2ZUeXBlRXJyb3IpOwog
Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHN5bWJvbC0+c3RydWN0dXJlSUQoKSk7
CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBzeW1ib2wtPnN0cnVjdHVyZUlE
KCkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHN5bWJv
bCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVzKAogICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7CiAgICAgICAgIGJvb2wgc2F3UG9seVBy
b3RvU3RydWN0dXJlID0gZmFsc2U7CiAgICAgICAgIGlmIChpZCkgewotICAgICAgICAgICAgc3Ry
dWN0dXJlID0gaWQuZGVjb2RlKCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBIZWFwOjpoZWFw
KHZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChpZCk7CiAgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBjYWNoZWRNb25vUHJvdG9TaGFwZXMuZmluZChzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gY2FjaGVkTW9ub1Byb3RvU2hhcGVzLmVuZCgpKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdHJ1Y3R1cmUsIHZhbHVlLmFz
Q2VsbCgpKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQo
QWJzdHJhY3RTbG90CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOyBl
bnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmVJ
RCBpZCA9IGVudHJ5LT5zdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBpZC5kZWNvZGUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmlzaXRvci5oZWFwKCktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoaWQpOyAKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoc3RydWN0dXJlKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzUw
LDYgKzc1MCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBnZXRTdHJ1Y3R1cmUoU3RydWN0dXJlSUQg
aWQpCisgICAgeworICAgICAgICByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRl
Y29udGFtaW5hdGUoaWQpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5MDM2ODg4
OiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgICAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIHRyeUdldFN0cnVjdHVyZShTdHJ1Y3R1cmVJRCBpZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBoZWFwLnN0cnVjdHVyZUlEVGFibGUoKS50cnlHZXQoZGVjb250YW1p
bmF0ZShpZCkpOworICAgIH0KKwogICAgIHZvaWQqIHN0YWNrUG9pbnRlckF0Vk1FbnRyeSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhY2tQb2ludGVyQXRWTUVudHJ5OyB9CiAgICAgdm9pZCBzZXRTdGFj
a1BvaW50ZXJBdFZNRW50cnkodm9pZCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Xcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkdDQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIkhhbmRs
ZVR5cGVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKICNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KICNpbmNsdWRlIDx3dGYvUmF3UHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1ZhbHVl
VHJhaXRzLmg+CkBAIC0yNDksMTA0ICsyNDgsNCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFdyaXRlQmFycmllCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMuZ2V0KCk7CiB9CiAK
LWNsYXNzIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIHsKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIg
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQoKSA9IGRlZmF1bHQ7Ci0KLSAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQoREZHOjpEZXNpcmVkV3JpdGVCYXJyaWVyJiwgU3RydWN0dXJl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgICAgICBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBlbnVt
IE1heUJlTnVsbFRhZyB7IE1heUJlTnVsbCB9OwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlE
KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiB2YWx1ZSwgTWF5QmVOdWxs
VGFnKQotICAgIHsKLSAgICAgICAgc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgdmFsdWUpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiB2
YWx1ZSk7Ci0KLSAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogdmFsdWUpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBieSBKU0Nl
bGwgZHVyaW5nIGVhcmx5IGluaXRpYWxpc2F0aW9uCi0gICAgLy8gd2hlbiBzb21lIGJhc2ljIHR5
cGVzIGFyZW4ndCB5ZXQgY29tcGxldGVseSBpbnN0YW50aWF0ZWQKLSAgICB2b2lkIHNldEVhcmx5
VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHZhbHVlKTsKLQotICAg
IFN0cnVjdHVyZSogZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIENvcHkgbV9zdHJ1Y3R1
cmVJRCB0byBhIGxvY2FsIHRvIGF2b2lkIG11bHRpcGxlLXJlYWQgaXNzdWVzLiAoU2VlIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzExMDg1ND4pCi0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
ID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOwotICAgICAgICAg
ICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3IqKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZUlEKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAg
fQotCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZUlEKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5k
ZWNvZGUoKTsKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
c3RydWN0dXJlKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotCi0gICAgdm9p
ZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9OwotICAgIH0KLQot
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
ICEhbV9zdHJ1Y3R1cmVJRDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlSUQ7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKFN0cnVjdHVyZSogdmFsdWUpCi0gICAgewotI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6
OnVzZXNXaXRob3V0QmFycmllckZyb21DcHAuY291bnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAo
IXZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9OwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6
ZW5jb2RlKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkR2V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1
cmVJRDsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlEKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVj
dHVyZUlELmRlY29kZSgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBT
dHJ1Y3R1cmVJRCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KLQotcHJp
dmF0ZToKLSAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOwotfTsKLQogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3Jp
dGVCYXJyaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDI5ICs2MSw0IEBAIGlubGluZSB2b2lkIFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmEKICAg
ICB2bS53cml0ZUJhcnJpZXIob3duZXIsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQ6OnNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBBU1NFUlQoIU9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICB2YWxp
ZGF0ZUNlbGwocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih2YWx1ZSkpOwotICAgIHNldEVhcmx5
VmFsdWUodm0sIG93bmVyLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIFdyaXRlQmFycmllclN0
cnVjdHVyZUlEOjpzZXRNYXlCZU51bGwoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJl
aW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4odmFsdWUpKTsKLSAgICBzZXRFYXJseVZhbHVlKHZtLCBv
d25lciwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6
c2V0RWFybHlWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6
ZW5jb2RlKHZhbHVlKTsKLSAgICB2bS53cml0ZUJhcnJpZXIob3duZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4odmFsdWUpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzAsMTAgKzIzMCwxNCBAQCBib29sIEhlYXBWZXJpZmllcjo6dmFs
aWRhdGVKU0NlbGwoVk0qIGV4CiAKICAgICAgICAgLy8gMi4gVmFsaWRhdGUgdGhlIGNlbGwncyBz
dHJ1Y3R1cmUKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRl
Y29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmICghc3RydWN0dXJlKSB7CiAgICAgICAgICAgICBwcmlu
dEhlYWRlckFuZENlbGwoKTsKLSAgICAgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUlEQXNVaW50
MzIgPSBzdHJ1Y3R1cmVJRC5iaXRzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IHVpbnQzMl90IHN0cnVjdHVyZUlEQXNVaW50MzIgPSBzdHJ1Y3R1cmVJRDsKKyNlbHNlCisgICAg
ICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVJREFzVWludDMyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oc3RydWN0dXJlSUQpOworI2VuZGlmCiAgICAgICAgICAgICBkYXRhTG9nKCIgd2l0
aCBzdHJ1Y3R1cmVJRCAiLCBzdHJ1Y3R1cmVJREFzVWludDMyLCAiIG1hcHMgdG8gYSBOVUxMIFN0
cnVjdHVyZSBwb2ludGVyXG4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtMjgxLDcgKzI4NSw3IEBAIGJvb2wgSGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbChW
TSogZXgKIAogICAgICAgICAvLyAzLiBWYWxpZGF0ZSB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0
cnVjdHVyZS4KICAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlU3RydWN0dXJl
ID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlU3Ry
dWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmVTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIHByaW50SGVhZGVyQW5kQ2VsbCgpOwogICAg
ICAgICAgICAgZGF0YUxvZygiIGhhcyBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUp
LCAiIHdob3NlIHN0cnVjdHVyZSBpcyBOVUxMXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogCkBAIC0xMDAs
NyArMTAwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbChWTSYgdm0sIEpTVgogICAg
ICAgICBhdWRpdENlbGw8YXVkaXRMZXZlbD4odm0sIHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSUQpOworQUxXQVlTX0lO
TElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSURUYWJsZSYsIFN0cnVjdHVyZUlE
KTsKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFZNJiwgU3RydWN0dXJlSUQp
OwogCiB9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0ludGVncml0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxMyArNzMsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbFJhbmRv
bWx5KFZNJgogICAgICAgICBhdWRpdENlbGxGdWxseSh2bSwgY2VsbCk7CiB9CiAKK0FMV0FZU19J
TkxJTkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEVGFibGUmIHRhYmxlLCBTdHJ1
Y3R1cmVJRCBpZCkKK3sKKyAgICB0YWJsZS52YWxpZGF0ZShpZCk7Cit9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQorQUxXQVlT
X0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoVk0mIHZtLCBTdHJ1Y3R1cmVJRCBpZCkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlSUQpOwotI2lmIENQVShBRERSRVNTNjQpCi0gICAg
QVNTRVJUKHN0cnVjdHVyZUlELmJpdHMoKSA8PSBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUgKyBT
dHJ1Y3R1cmVJRDo6bnVrZWRTdHJ1Y3R1cmVJREJpdCk7Ci0jZW5kaWYKKyAgICBhdWRpdFN0cnVj
dHVyZUlEKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLCBpZCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEludGVncml0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTg1LDcgKzM1ODUsNyBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25HZXRTdHJ1CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byogc3RydWN0
dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUoKSAtIGkgLSAxXTsKLSAgICAgICAgcmVz
dWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKSk7
CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5p
ZCgpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAg
IHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT50cmFuc2l0aW9u
T2Zmc2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAg
LTQwMTIsNyArNDAxMiw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogCiAgICAgYWRkRnVuY3Rpb24odm0sICJlbnN1cmVBcnJheVN0b3JhZ2UiLCBmdW5jdGlvbkVu
c3VyZUFycmF5U3RvcmFnZSwgMSk7CiAKLSAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlELnNldCh2bSwgdGhpcywgT2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKKyAgICBtX29iamVjdERvaW5nU2lkZUVmZmVj
dFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVj
dERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTTo6
YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBj
aGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpA
QCAtNDAzNCw3ICs0MDM0LDcgQEAgdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbAogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+
KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRX
aXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmVJRCk7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RT
dGF0dXNTdHJ1Y3R1cmUpOwogfQogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CiAgICAgfQogCi0gICAgU3RydWN0dXJlKiBvYmplY3REb2luZ1NpZGVFZmZlY3RQdXRX
aXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX29iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlELmdldCgpOyB9
CisgICAgU3RydWN0dXJlKiBvYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNs
b3RTdGF0dXNTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBKU0RvbGxhclZNKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03Niw3ICs3
Niw3IEBAIHByaXZhdGU6CiAKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29y
cmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVy
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYgogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3RDZWxsKHNjcmF0Y2hHUFIpKTsKIAogICAgICAgICAgICAgICAgIHN0
YWNrTGltaXRHUFJJc0Nsb2JiZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIHN0YWNr
TGltaXRHUFIpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CiAKICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNz
ZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxv
dyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTV2ViQXNzZW1ibHlHbG9iYWwKICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsICJleHBlY3RlZCB8dGhpc3wgdmFsdWUgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuR2xvYmFsIl9zKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQocmVzdWx0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHJlc3VsdC0+c3RydWN0dXJlSUQoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTIt
MTMgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUm9sbCBiYWNr
IHIyODYzNDUsIHIyODYzODcsIHIyODY0NzEsIHIyODY2NjcsIHIyODY4NDkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDI2OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICogd3RmL09TQWxsb2NhdG9yLmg6CisgICAg
ICAgICogd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwOgorICAgICAgICAoV1RGOjpPU0Fs
bG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkQWxpZ25lZCk6IERlbGV0ZWQuCisKIDIwMjEtMTIt
MTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIERlcGxveW1l
bnQgdGFyZ2V0IGZvciBtYWNPUyAxMSsgZG9lcyBub3QgZm9sbG93IG1pbm9yIHZlcnNpb24gYnVt
cHMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL1dU
Ri93dGYvT1NBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDExIEBAIHB1
YmxpYzoKICAgICAgICAgSlNKSVRDb2RlUGFnZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExP
Q0FUT1JfTUVNT1JZLAogICAgIH07CiAKLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzeW1tZXRy
aWM7IHJlc2VydmVVbmNvbW1pdHRlZChBbGlnbmVkKSBhbGxvY2F0ZXMgVk0gaW4gYW4gdW5jb21t
aXR0ZWQgc3RhdGUsCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgc3ltbWV0cmljOyByZXNlcnZl
VW5jb21taXR0ZWQgYWxsb2NhdGVzIFZNIGluIGFuIHVuY29tbWl0dGVkIHN0YXRlLAogICAgIC8v
IHJlbGVhc2VEZWNvbW1pdHRlZCBzaG91bGQgYmUgY2FsbGVkIG9uIGEgcmVnaW9uIG9mIFZNIGFs
bG9jYXRlZCBieSBhIHNpbmdsZSByZXNlcnZhdGlvbiwKLSAgICAvLyB0aGUgbWVtb3J5IG11c3Qg
YWxsIGN1cnJlbnRseSBiZSBpbiBhIGRlY29tbWl0dGVkIHN0YXRlLiByZXNlcnZlVW5jb21taXR0
ZWQoQWxpZ25lZCkgcmV0dXJucyB0bworICAgIC8vIHRoZSBtZW1vcnkgbXVzdCBhbGwgY3VycmVu
dGx5IGJlIGluIGEgZGVjb21taXR0ZWQgc3RhdGUuIHJlc2VydmVVbmNvbW1pdHRlZCByZXR1cm5z
IHRvCiAgICAgLy8geW91IG1lbW9yeSB0aGF0IGlzIHplcm9lZC4KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQqIHJlc2VydmVVbmNvbW1pdHRlZChzaXplX3QsIFVzYWdlID0gVW5r
bm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2Us
IGJvb2wgaml0Q2FnZUVuYWJsZWQgPSBmYWxzZSwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMgPSBm
YWxzZSk7Ci0gICAgLy8gVGhpcyBndWFyYW50ZWVzIHRoZSBtZW1vcnkgd2lsbCBiZSBhbGlnbmVk
IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiBUaGUgcmVxdWVzdGVkCi0gICAg
Ly8gc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGFuZCBncmVhdGVyIHRoYW4gdGhlIHN5c3Rl
bSBwYWdlIHNpemUuCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkKiByZXNlcnZl
VW5jb21taXR0ZWRBbGlnbmVkKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3Jp
dGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSwgYm9vbCBqaXRDYWdlRW5hYmxl
ZCA9IGZhbHNlLCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcyA9IGZhbHNlKTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcmVsZWFzZURlY29tbWl0dGVkKHZvaWQqLCBzaXplX3Qp
OwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgc3ltbWV0cmljOyB0aGV5IGNvbW1pdCBvciBk
ZWNvbW1pdCBhIHJlZ2lvbiBvZiBWTSAodW5jb21taXR0ZWQgVk0gc2hvdWxkCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAkocmV2aXNpb24gMjg2OTY1KQor
KysgU291cmNlL1dURi93dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KIAogI2lmIEVOQUJMRShKSVRfQ0FH
RSkKQEAgLTQ0LDEwICs0Myw2IEBACiAjZW5kaWYgLy8gT1MoREFSV0lOKQogI2VuZGlmIC8vIEVO
QUJMRShKSVRfQ0FHRSkKIAotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDx3dGYvc3BpL2NvY29h
L01hY2hWTVNQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkKiBPU0FsbG9j
YXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkKHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCBqaXRDYWdlRW5hYmxlZCwgYm9vbCBpbmNs
dWRlc0d1YXJkUGFnZXMpCkBAIC03Nyw1NiArNzIsNiBAQCB2b2lkKiBPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZVVuY29tbWl0dGVkKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogT1NBbGxv
Y2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZEFsaWduZWQoc2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGppdENhZ2VFbmFibGVkLCBi
b29sIGluY2x1ZGVzR3VhcmRQYWdlcykKLXsKLSAgICBBU1NFUlQoaGFzT25lQml0U2V0KGJ5dGVz
KSAmJiBieXRlcyA+PSBwYWdlU2l6ZSgpKTsKLQotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKLSAgICBVTlVTRURfUEFSQU0odXNhZ2UpOyAvLyBOb3Qgc3VwcG9y
dGVkIGZvciBtYWNoIEFQSS4KLSAgICBBU1NFUlRfVU5VU0VEKGluY2x1ZGVzR3VhcmRQYWdlcywg
IWluY2x1ZGVzR3VhcmRQYWdlcyk7Ci0gICAgQVNTRVJUX1VOVVNFRChqaXRDYWdlRW5hYmxlZCwg
IWppdENhZ2VFbmFibGVkKTsgLy8gTm90IHN1cHBvcnRlZCBmb3IgbWFjaCBBUEkuCi0gICAgdm1f
cHJvdF90IHByb3RlY3Rpb25zID0gVk1fUFJPVF9SRUFEOwotICAgIGlmICh3cml0YWJsZSkKLSAg
ICAgICAgcHJvdGVjdGlvbnMgfD0gVk1fUFJPVF9XUklURTsKLSAgICBpZiAoZXhlY3V0YWJsZSkK
LSAgICAgICAgcHJvdGVjdGlvbnMgfD0gVk1fUFJPVF9FWEVDVVRFOwotCi0gICAgY29uc3Qgdm1f
aW5oZXJpdF90IGNoaWxkUHJvY2Vzc0luaGVyaXRhbmNlID0gVk1fSU5IRVJJVF9ERUZBVUxUOwot
ICAgIGNvbnN0IGJvb2wgY29weSA9IGZhbHNlOwotICAgIGNvbnN0IGludCBmbGFncyA9IFZNX0ZM
QUdTX0FOWVdIRVJFOwotCi0gICAgdm9pZCogYWxpZ25lZCA9IG51bGxwdHI7Ci0gICAga2Vybl9y
ZXR1cm5fdCByZXN1bHQgPSBtYWNoX3ZtX21hcChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJl
dF9jYXN0PG1hY2hfdm1fYWRkcmVzc190Kj4oJmFsaWduZWQpLCBieXRlcywgYnl0ZXMgLSAxLCBm
bGFncywgTUVNT1JZX09CSkVDVF9OVUxMLCAwLCBjb3B5LCBwcm90ZWN0aW9ucywgcHJvdGVjdGlv
bnMsIGNoaWxkUHJvY2Vzc0luaGVyaXRhbmNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQg
PT0gS0VSTl9TVUNDRVNTLCByZXN1bHQsIGJ5dGVzKTsKLSNpZiBIQVZFKE1BRFZfRlJFRV9SRVVT
RSkKLSAgICBpZiAoYWxpZ25lZCkgewotICAgICAgICAvLyBUbyBzdXBwb3J0IHRoZSAicmVzZXJ2
ZSB0aGVuIGNvbW1pdCIgbW9kZWwsIHdlIGhhdmUgdG8gaW5pdGlhbGx5IGRlY29tbWl0LgotICAg
ICAgICB3aGlsZSAobWFkdmlzZShhbGlnbmVkLCBieXRlcywgTUFEVl9GUkVFX1JFVVNBQkxFKSA9
PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJu
IGFsaWduZWQ7Ci0jZWxzZQotICAgIC8vIERvdWJsZSB0aGUgc2l6ZSBzbyB3ZSBjYW4gZW5zdXJl
IGVub3VnaCBtYXBwZWQgbWVtb3J5IHRvIGdldCBhbiBhbGlnbmVkIHN0YXJ0LgotICAgIHNpemVf
dCBtYXBwZWRTaXplID0gYnl0ZXMgKiAyOwotICAgIGNoYXIqIG1hcHBlZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc2VydmVVbmNvbW1pdHRlZChtYXBwZWRTaXplLCB1c2FnZSwgd3JpdGFi
bGUsIGV4ZWN1dGFibGUsIGppdENhZ2VFbmFibGVkLCBpbmNsdWRlc0d1YXJkUGFnZXMpKTsKLSAg
ICBjaGFyKiBtYXBwZWRFbmQgPSBtYXBwZWQgKyBtYXBwZWRTaXplOwotCi0gICAgY2hhciogYWxp
Z25lZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJvdW5kVXBUb011bHRpcGxlT2YoYnl0ZXMs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtYXBwZWQpKSk7Ci0gICAgY2hhciogYWxpZ25l
ZEVuZCA9IGFsaWduZWQgKyBieXRlczsKLQotICAgIFJFTEVBU0VfQVNTRVJUKGFsaWduZWRFbmQg
PD0gbWFwcGVkRW5kKTsKLQotICAgIGlmIChzaXplX3QgbGVmdEV4dHJhID0gYWxpZ25lZCAtIG1h
cHBlZCkKLSAgICAgICAgcmVsZWFzZURlY29tbWl0dGVkKG1hcHBlZCwgbGVmdEV4dHJhKTsKLQot
ICAgIGlmIChzaXplX3QgcmlnaHRFeHRyYSA9IG1hcHBlZEVuZCAtIGFsaWduZWRFbmQpCi0gICAg
ICAgIHJlbGVhc2VEZWNvbW1pdHRlZChhbGlnbmVkRW5kLCByaWdodEV4dHJhKTsKLQotICAgIHJl
dHVybiBhbGlnbmVkOwotI2VuZGlmCi19Ci0KIHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5k
Q29tbWl0KHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhl
Y3V0YWJsZSwgYm9vbCBqaXRDYWdlRW5hYmxlZCwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMpCiB7
CiAgICAgLy8gQWxsIFBPU0lYIHJlc2VydmF0aW9ucyBzdGFydCBvdXQgbG9naWNhbGx5IGNvbW1p
dHRlZC4K
</data>
<flag name="commit-queue"
          id="472618"
          type_id="3"
          status="-"
          setter="fujii"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447081</attachid>
            <date>2021-12-13 16:25:34 -0800</date>
            <delta_ts>2021-12-13 16:29:05 -0800</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>263776</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzNCBA
QAorMjAyMS0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBSb2xsIGJhY2sgcjI4NjM0NSwgcjI4NjM4NywgcjI4NjQ3MSwgcjI4NjY2NywgcjI4Njg0OQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MjY4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0
ZVdpdGhHdWFyZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJlU2hhcmVkKToKKyAg
ICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnN0cnVjdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVy
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omhhc2ggY29uc3QpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRl
RmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmRldGVybWluZUxpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmds
eVZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVz
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVsZXRlQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dp
dGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkTWV0YWRh
dGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YTo6R2V0QnlJZE1vZGVNZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGE6OmNsZWFyVG9EZWZhdWx0
TW9kZVdpdGhvdXRDYWNoZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChK
U0M6OkdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFj
ayk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6Oklu
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAg
ICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Rh
bmNlT2ZTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpJbnN0YW5jZU9mU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6
OkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6Y3JlYXRlQWxsb2NhdGlvblN0cnVj
dHVyZUZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHA6CisgICAgICAgIChKU0M6OlBvbHlQcm90b0FjY2Vz
c0NoYWluOjpuZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50IGNvbnN0KToKKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
V2VhayBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeVN0YXR1czo6
Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHA6
CisgICAgICAgIChKU0M6OlNldFByaXZhdGVCcmFuZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
V2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2VsbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpkZXJl
Zik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphYm91dFRvRGllKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmFkZEFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRBZ2dyZWdhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6c3VtbWFyeSBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpjb250
YWluc1BDIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YnJhbmNoV2Vha1N0cnVj
dHVyZSk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsT3JVbmRl
ZmluZWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoTnVsbE9yVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVBy
b21pc2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3Jl
YXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGhlYXAvQWJzdHJhY3RT
bG90VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvQWJzdHJhY3RTbG90VmlzaXRvcklubGluZXMu
aDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6cnVuRW5kUGhhc2UpOgorICAgICAgICAqIGhlYXAvSGVhcC5o
OgorICAgICAgICAoSlNDOjpIZWFwOjpzdHJ1Y3R1cmVJRFRhYmxlKToKKyAgICAgICAgKiBoZWFw
L0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAgKEpT
Qzo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFs
aWduZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpm
cmVlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OnRyeU1hbGxvY0Jsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZnJlZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6Y29tbWl0QmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBoZWFw
L0lzb01lbW9yeUFsbG9jYXRvckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSXNv
TWVtb3J5QWxsb2NhdG9yQmFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAg
ICAoSlNDOjpJc29TdWJzcGFjZTo6dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKToKKyAgICAgICAg
KiBoZWFwL0lzb1N1YnNwYWNlLmg6CisgICAgICAgICogaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OlByZWNpc2VBbGxvY2F0aW9uOjpjcmVhdGVGb3JMb3dlclRpZXIp
OgorICAgICAgICAoSlNDOjpQcmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJUaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmg6CisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBl
bmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAg
ICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgICogaGVhcC9TdHJ1Y3R1
cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL1N0
cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRMb2FkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0TG9hZFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJh
bmRvbVRodW5rKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZh
bHVlVG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZh
bHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uTnVsbERlY29kZVN0
cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpudWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHkpOgor
ICAgICAgICAqIGppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0FjY2Vzc0pJVFN0dWJSb3V0aW5lOjpjb21wdXRlSGFzaCk6CisgICAgICAgICog
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVH
ZXRCeUlkSW5saW5lQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SklUUHV0QnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUSW5CeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191
bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpM
TElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpwZXJmb3JtTExJbnRH
ZXRCeUlEKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04pOgorICAgICAgICAqIHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Q
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRlRGF0ZUluc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRNZXNzYWdl
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTmFtZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAg
ICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSGFz
T3duUHJvcGVydHlDYWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
Q29uZmlnLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6ZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEZvckJhY2t0cmFjZSBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnRvT2JqZWN0U2xvdyBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpj
bGVhclN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6c3RydWN0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpzZXRTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5SW1wbCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Q3VzdG9tR2V0dGVyU2V0dGVy
V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Tm9u
SW5kZXhBY2Nlc3NvcldpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROb25JbmRleFByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbkltcGwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp0b1RoaXNOdW1i
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG90
eXBlVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6flN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvciBjb25zdCk6CisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppZCBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZUNoYWluOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVDaGFpbjo6
dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSUQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVJRFRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OlN0cnVjdHVyZUlEVGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpt
YWtlRnJlZUxpc3RGcm9tUmFuZ2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpy
ZXNpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRhYmxlcyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6OmFsbG9jYXRlSUQpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWFsbG9jYXRlSUQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSURUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6bnVrZWRTdHJ1Y3R1cmVJ
REJpdCk6CisgICAgICAgIChKU0M6Om51a2UpOgorICAgICAgICAoSlNDOjppc051a2VkKToKKyAg
ICAgICAgKEpTQzo6ZGVjb250YW1pbmF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OmJhc2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURUYWJsZTo6dGFibGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJ
RFRhYmxlOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpnZXQpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjp0cnlHZXQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJRFRhYmxlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFi
bGU6OmRlYWxsb2NhdGVJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEVGFibGU6OmFsbG9j
YXRlSUQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRFRhYmxlOjpmbHVzaE9sZFRhYmxlcyk6
CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjp0cnlDYWNoZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3JWaWFXYXRjaHBvaW50KToKKyAgICAgICAgKiBydW50aW1lL1N5
bWJvbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
Uik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICog
cnVudGltZS9UeXBlUHJvZmlsZXJMb2cuY3BwOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXJM
b2c6OnByb2Nlc3NMb2dFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyTG9nOjp2
aXNpdCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6Z2V0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6Vk06OnRyeUdldFN0cnVjdHVyZSk6CisgICAgICAgICog
cnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQ6OldyaXRlQmFycmllclN0cnVjdHVyZUlEKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpvcGVyYXRvciogY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6b3BlcmF0b3ItPiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpjbGVhcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpvcGVyYXRv
ciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQ6Om9wZXJhdG9yISBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFy
cmllclN0cnVjdHVyZUlEOjpzZXRXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnVudmFsaWRhdGVkR2V0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnZhbHVlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQ6OnNldCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldyaXRlQmFycmllclN0cnVjdHVyZUlEOjpzZXRNYXlCZU51bGwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6c2V0RWFybHlWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgICogdG9vbHMvSGVhcFZlcmlmaWVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbCk6CisgICAgICAgICogdG9vbHMvSW50
ZWdyaXR5LmNwcDoKKyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDoKKyAgICAgICAgKiB0b29s
cy9JbnRlZ3JpdHlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTTo6dmlzaXRDaGlsZHJlbklt
cGwpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
Ojpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUds
b2JhbFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldEdsb2JhbCk6CisKIDIwMjEtMTIt
MTMgIHdhZGRsZXNwbGFzaCAgPHdhZGRsZXNwbGFzaEBnbWFpbC5jb20+CiAKICAgICAgICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjogRG8gbm90IHN0b3JlIHRoaW5ncyBpbiBnX2NvbmZpZyB3aGVuIFVT
RShTWVNURU1fTUFMTE9DKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDExICs3NjIsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCiAg
ICAgaGVhcC9IZWFwU3Vic3BhY2VUeXBlcy5oCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
aAorICAgIGhlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCiAgICAgaGVhcC9Jc29DZWxs
U2V0LmgKICAgICBoZWFwL0lzb0hlYXBDZWxsVHlwZS5oCiAgICAgaGVhcC9Jc29JbmxpbmVkSGVh
cENlbGxUeXBlLmgKICAgICBoZWFwL0lzb0lubGluZWRIZWFwQ2VsbFR5cGVJbmxpbmVzLmgKLSAg
ICBoZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuaAogICAgIGhlYXAvSXNvU3Vic3BhY2UuaAog
ICAgIGhlYXAvSXNvU3Vic3BhY2VJbmxpbmVzLmgKICAgICBoZWFwL0lzb1N1YnNwYWNlUGVyVk0u
aApAQCAtNzkzLDcgKzc5Myw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUEKICAgICBoZWFwL1N0cm9uZy5oCiAgICAgaGVhcC9TdHJvbmdGb3J3YXJkLmgKICAgICBo
ZWFwL1N0cm9uZ0lubGluZXMuaAotICAgIGhlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oCiAgICAgaGVhcC9TdWJzcGFjZS5oCiAgICAgaGVhcC9TdWJzcGFjZUlubGluZXMuaAog
ICAgIGhlYXAvU3luY2hyb25vdXNuZXNzLmgKQEAgLTExODYsOCArMTE4NSw4IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBydW50aW1lL1N0cnVjdHVyZS5o
CiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDaGFp
bi5oCi0gICAgcnVudGltZS9TdHJ1Y3R1cmVJRC5oCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVJREJs
b2IuaAorICAgIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5oCiAgICAgcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgKICAgICBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKICAgICBydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzNyw3ICs1MzcsNiBAQCBoZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5jcHAKIGhlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKIGhlYXAvSXNvQ2Vs
bFNldC5jcHAKIGhlYXAvSXNvSGVhcENlbGxUeXBlLmNwcAotaGVhcC9Jc29NZW1vcnlBbGxvY2F0
b3JCYXNlLmNwcAogaGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSXNvU3Vic3BhY2VQZXJWTS5j
cHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCkBAIC01NTksNyArNTU4LDYgQEAgaGVhcC9T
bG90VmlzaXRvci5jcHAKIGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAv
U3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL1N0b3BJZk5lY2Vz
c2FyeVRpbWVyLmNwcAotaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAog
aGVhcC9TdWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCkBAIC0xMDA3LDYgKzEwMDUsNyBA
QCBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwCiBydW50aW1lL1N0cnVjdHVyZS5j
cHAKIHJ1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNw
cAorcnVudGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmNwcAogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAKIHJ1bnRpbWUvU3ltYm9sLmNwcAogcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODU3LDYgKzg1Nyw3IEBACiAJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUNFNjNCMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQyRURGQTE5
Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8q
IEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29w
ZS5oICovOyB9OworCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4
MkIxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURC
MjQgLyogU291cmNlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MjVCQTEzMzdFNDM0NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzMxMTFCOEIy
Mzk3MjU2NTAwQUEzNENFIC8qIFNjcmliYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMzExMUI4QTIzOTcyNTY1MDBBQTM0Q0UgLyogU2NyaWJibGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMzk1
QzcwNzIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NUM3MDUyMjU1NUY2RDAwQkRC
RkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKQEAgLTEwODksMTAgKzEwOTAsNiBA
QAogCQk1MzZCMzE5RTFGNzM1RjE2MDAzN0ZDMzMgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBDNzE0
QkJCMTY5MDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgKi87IH07CiAJCTUzNzA4
MDZCMUZFMjMyREYwMDI5OUU0NCAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IH07CiAJCTUzNzBCNEY2MUJGMjYyMDUwMDVDNDBG
QyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzcwQjRGNDFCRjI1RUEy
MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
ICovOyB9OwotCQk1MzdGRUVDOTI3NDJCREEzMDBDOUVGRUUgLyogU3RydWN0dXJlSUQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzN0ZFRUM4Mjc0MkJE
QTMwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUzN0ZFRUNFMjc0MkJERTEwMEM5RUZFRSAvKiBJc29NZW1v
cnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTM3RkVFQ0EyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9j
YXRvckJhc2VJbmxpbmVzLmggKi87IH07Ci0JCTUzN0ZFRUQwMjc0MkJERTEwMEM5RUZFRSAvKiBT
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzdGRUVDQzI3NDJCREUwMDBDOUVGRUUgLyogU3RydWN0
dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyB9OwotCQk1MzdGRUVEMTI3NDJCREUxMDBD
OUVGRUUgLyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3RkVFQ0QyNzQyQkRFMDAwQzlFRkVFIC8qIElzb01l
bW9yeUFsbG9jYXRvckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MzgxQjkzOTFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM4MUI5MzgxRTYwRTk3RDAwOTBGNzk0IC8qIFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzhGMTVFNzI2
OEZCQkI2MDBENjAxQzQgLyogVW5pZmllZFNvdXJjZTE0OC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzhGMTVERDI2OEZCQkIzMDBENjAxQzQgLyog
VW5pZmllZFNvdXJjZTE0OC5jcHAgKi87IH07CiAJCTUzOEYxNUU4MjY4RkJCQjYwMEQ2MDFDNCAv
KiBVbmlmaWVkU291cmNlMTUxLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzOEYxNURFMjY4RkJCQjMwMEQ2MDFDNCAvKiBVbmlmaWVkU291cmNlMTUx
LmNwcCAqLzsgfTsKQEAgLTM2MzksNiArMzYzNiw4IEBACiAJCTJBRDJFREZBMTk3OTlFMzgwMDRE
NjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5
MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0
cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBRjcz
ODJCMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzAzMjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NvdXJjZUNvZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWdu
YXR1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWdu
YXR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzMTExQjhBMjM5
NzI1NjUwMEFBMzRDRSAvKiBTY3JpYmJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpYmJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc0MSw3ICszNzQwLDYgQEAKIAkJNTMwRkIz
MDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzBGREU3MzIxRkFBRkM2MDAwNTlENjUgLyogdGVzdEluY2x1
ZGVzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IHRlc3RJbmNsdWRlcy5tOyBwYXRoID0gQVBJL3Rlc3Rz
L3Rlc3RJbmNsdWRlcy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzEwMTNGMzI3
NDQxOUY0MDAwOTAwOUMgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTMxMUJENDgxRUE1ODFFNTAwNTI1MjgxIC8q
IFdhc21PTUdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21PTUdQbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENDkxRUE1
ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21PTUdQbGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTM3
NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzkz
MCwxMSArMzkyOCw2IEBACiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM3M0I0RDMyMkFEOEJGNzAwODAzNTcy
IC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha09i
amVjdFJlZlByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNzNC
NEQ0MjJBREIzMTQwMDgwMzU3MiAvKiBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2Vha09iamVjdFJlZkNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTM3RkVFQzgyNzQyQkRBMzAwQzlFRkVFIC8qIFN0cnVjdHVyZUlE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzN0ZFRUNBMjc0MkJERTAwMEM5RUZFRSAvKiBJc29N
ZW1vcnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJc29NZW1vcnlBbGxvY2F0b3JCYXNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MzdGRUVDQjI3NDJCREUwMDBDOUVGRUUgLyogU3RydWN0dXJlQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTM3RkVFQ0MyNzQyQkRFMDAwQzlFRkVFIC8qIFN0cnVjdHVyZUFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MzdGRUVDRDI3NDJCREUwMDBDOUVGRUUgLyogSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzODFCOTM2MUU2MEU5NjYwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFsSGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzODNBQTJGMUU2NUU4QTEwMEE1
MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NzkwLDcgKzU3ODMsNiBAQAogCQkJCTVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0
LmR5bGliICovLAogCQkJCTkzMjJBMDAzMDZDMzQxRDMwMDkwNjdCQiAvKiBsaWJpY3Vjb3JlLmR5
bGliICovLAogCQkJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJvYmpjLmR5bGliICov
LAotCQkJCTUzMTAxM0YzMjc0NDE5RjQwMDA5MDA5QyAvKiBsaWJXVEYuYSAqLywKIAkJCQkxNDk4
Q0FEMzIxNDY1NkM0MDA3MTA4NzkgLyogbGliV1RGLmEgKi8sCiAJCQkJQThBNDc0OEQxNTFBODMw
NjAwNDEyM0ZGIC8qIGxpYldURi5hICovLAogCQkJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAv
KiBsaWJ6LmR5bGliICovLApAQCAtNjY3Miw4ICs2NjY0LDYgQEAKIAkJCQkxNDJFMzEzMjEzNEZG
MEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJQ0QxRjlCNEEyNzBDRkUwRjAwNjE3RUI2
IC8qIFN0cm9uZ0ZvcndhcmQuaCAqLywKIAkJCQkxNDU3MjI4NTE0MzdFMTQwMDA1RkRFMjYgLyog
U3Ryb25nSW5saW5lcy5oICovLAotCQkJCTUzN0ZFRUNCMjc0MkJERTAwMEM5RUZFRSAvKiBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKLQkJCQk1MzdGRUVDQzI3NDJCREUw
MDBDOUVGRUUgLyogU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBG
N0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEY3REYxMzIx
RTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggKi8sCiAJCQkJMEY3REYxMzMxRTI5NzBENTAw
OTU5NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oICovLApAQCAtODA3NSw4ICs4MDY1LDkgQEAKIAkJ
CQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLywKIAkJCQk3
RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCTdF
NEVFNzA4MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovLAotCQkJCTUzN0ZF
RUM4Mjc0MkJEQTMwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVJRC5oICovLAogCQkJCTJBQUFBMzEwMThC
RDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLywKKwkJCQkyQUY3MzgyQTE4QkJC
RjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgKi8sCisJCQkJMkFGNzM4MkIxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLywKIAkJCQkwRkQyQzkyMzE2RDAx
RUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovLAogCQkJCUMyRjBGMkQwMTZCQUVF
RTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8sCiAJCQkJQzJGRTE4QTMxNkJB
RUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8sCkBAIC0xMDI3Niw4ICsxMDI2
Nyw2IEBACiAJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0JGMUJBRTIzOEFBRURCMDAzQTFDMkIgLyogSXNvSGVh
cENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0M4RUQ0MzIzQTFEQkNCMDAxMzE5NTgg
LyogSXNvSW5saW5lZEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM3RkVFRDEy
NzQyQkRFMTAwQzlFRkVFIC8qIElzb01lbW9yeUFsbG9jYXRvckJhc2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUzN0ZFRUNFMjc0MkJERTEwMEM5RUZFRSAvKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8q
IElzb1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQyRkQ5NTIwQjUyQkUyMDBGMDk0
NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFMEZFNzIw
ODZBRDQ4MDA5N0YwREUgLyogSXNvU3Vic3BhY2VQZXJWTS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDgyOCwxMSArMTA4MTcsMTAgQEAKIAkJCQlDRDFGOUI0QjI3MENGRTBGMDA2MTdFQjYgLyogU3Ry
b25nRm9yd2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2
IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzN0ZFRUQwMjc0MkJE
RTEwMEM5RUZFRSAvKiBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVD
aGFpbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTM3RkVFQzkyNzQyQkRBMzAwQzlFRkVFIC8qIFN0
cnVjdHVyZUlELmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQUY3MzgyRDE4QkJCRjky
MDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkM5
MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVE
YXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogbwog
ICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWlu
KSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogewotICAgIG1fc3RydWN0dXJlSUQu
c2V0TWF5QmVOdWxsKHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZS5zZXRN
YXlCZU51bGwodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwogICAgIG1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OwogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7
CiB9CkBAIC01MzYsMTQgKzUzNiwxNCBAQCBib29sIEFjY2Vzc0Nhc2U6Om5lZWRzU2NyYXRjaEZQ
UigpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIEFjY2Vzc0Nh
c2U6OmZvckVhY2hEZXBlbmRlbnRDZWxsKFZNJiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKK3ZvaWQgQWNjZXNzQ2FzZTo6Zm9yRWFjaERlcGVuZGVudENlbGwoVk0mIHZtLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKSBjb25zdAogewogICAgIG1fY29uZGl0aW9uU2V0LmZvckVhY2hEZXBl
bmRlbnRDZWxsKGZ1bmN0b3IpOwotICAgIGlmIChtX3N0cnVjdHVyZUlEKQotICAgICAgICBmdW5j
dG9yKG1fc3RydWN0dXJlSUQuZ2V0KCkpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAg
ZnVuY3RvcihtX3N0cnVjdHVyZS5nZXQoKSk7CiAgICAgaWYgKG1fcG9seVByb3RvQWNjZXNzQ2hh
aW4pIHsKICAgICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IG1fcG9seVByb3Rv
QWNjZXNzQ2hhaW4tPmNoYWluKCkpCi0gICAgICAgICAgICBmdW5jdG9yKHN0cnVjdHVyZUlELmRl
Y29kZSgpKTsKKyAgICAgICAgICAgIGZ1bmN0b3Iodm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlE
KSk7CiAgICAgfQogCiAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAgLTg3NCw4ICs4NzQsOCBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgCiAgICAgICAgIGlmIChtX3R5
cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9PSBTZXRQcml2
YXRlQnJhbmQpCiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIiwgaW5kZW50LCAiZnJvbSBzdHJ1
Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUoKSksCiAgICAgICAgICAgICAgICAgIlxu
IiwgaW5kZW50LCAidG8gc3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkp
KTsKLSAgICAgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmVJRCkKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiXG4iLCBpbmRlbnQsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVyZUlE
LmdldCgpKSk7CisgICAgICAgIGVsc2UgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIsIGluZGVudCwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0
dXJlLmdldCgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkp
CkBAIC05MDQsMTkgKzkwNCwxOSBAQCBib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0p
IGNvbnN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBBY2Nlc3NDYXNlOjpwcm9w
YWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogewotICAgIGlmIChtX3N0
cnVjdHVyZUlEKQotICAgICAgICBtX3N0cnVjdHVyZUlELT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsK
KyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG1fc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2
aXNpdG9yKTsKIAogICAgIGlmIChtX3BvbHlQcm90b0FjY2Vzc0NoYWluKSB7CiAgICAgICAgIGZv
ciAoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgOiBtX3BvbHlQcm90b0FjY2Vzc0NoYWluLT5jaGFp
bigpKQotICAgICAgICAgICAgc3RydWN0dXJlSUQuZGVjb2RlKCktPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgICAgICAgICAgdmlzaXRvci52bSgpLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCkt
Pm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogICAgIH0KIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBUcmFuc2l0aW9uOgogICAgIGNhc2UgRGVsZXRlOgotICAgICAgICBpZiAodmlzaXRv
ci5pc01hcmtlZChtX3N0cnVjdHVyZUlELT5wcmV2aW91c0lEKCkpKQotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZUlELmdldCgpKTsKKyAgICAgICAgaWYg
KHZpc2l0b3IuaXNNYXJrZWQobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0xNzIwLDcgKzE3MjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSKTsKICNlbmRpZgogCi0gICAgICAg
IGppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSwgdmFsdWVHUFIsIHJlc3VsdFJlZ3MsIGZhaWxBbmRJ
Z25vcmUpOworICAgICAgICBqaXQuZW1pdExvYWRQcm90b3R5cGUodm0sIHZhbHVlR1BSLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBmYWlsQW5kSWdub3JlKTsKICAgICAgICAgaml0Lm1vdmUoc2Ny
YXRjaDJHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBpc0luc3RhbmNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCB2YWx1ZUdQ
UiwgcHJvdG90eXBlR1BSKTsKQEAgLTI2MTMsNyArMjYxMyw3IEBAIGJvb2wgQWNjZXNzQ2FzZTo6
Y2FuQmVTaGFyZWQoY29uc3QgQWNjZXMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChs
aHMubV92aWFQcm94eSAhPSByaHMubV92aWFQcm94eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChsaHMubV9zdHJ1Y3R1cmVJRC5nZXQoKSAhPSByaHMubV9zdHJ1Y3R1cmVJRC5nZXQo
KSkKKyAgICBpZiAobGhzLm1fc3RydWN0dXJlLmdldCgpICE9IHJocy5tX3N0cnVjdHVyZS5nZXQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChsaHMubV9pZGVudGlmaWVyICE9IHJo
cy5tX2lkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDE1ICsxODQsMTUgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5
cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9PSBTZXRQcml2YXRlQnJhbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmVJRC0+cHJldmlvdXNJRCgpOwotICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmVJRC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogICAgIGJvb2wg
Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soY29uc3QgU3RydWN0dXJlU3R1YkluZm8mKSBjb25zdDsK
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3R5cGUgPT0gVHJhbnNpdGlvbiB8fCBtX3R5cGUgPT0gRGVsZXRlIHx8IG1fdHlwZSA9
PSBTZXRQcml2YXRlQnJhbmQpOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVJRC5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwogICAgIH0KIAogICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZGl0
aW9uU2V0OyB9CkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2gobV9jb25kaXRpb25T
ZXQuaGFzaCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90eXBlKSwgbV92aWFQcm94eSwgbV9z
dHJ1Y3R1cmVJRC51bnZhbGlkYXRlZEdldCgpLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBj
b21wdXRlSGFzaChtX2NvbmRpdGlvblNldC5oYXNoKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3R5cGUpLCBtX3ZpYVByb3h5LCBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpLCBtX29mZnNl
dCk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgY2FuQmVTaGFyZWQoY29uc3QgQWNjZXNzQ2Fz
ZSYsIGNvbnN0IEFjY2Vzc0Nhc2UmKTsKQEAgLTI4NCw3ICsyODQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgICwgbV9zdGF0ZShXVEZNb3ZlKG90aGVyLm1fc3RhdGUpKQogICAgICAgICAsIG1fdmlh
UHJveHkoV1RGTW92ZShvdGhlci5tX3ZpYVByb3h5KSkKICAgICAgICAgLCBtX29mZnNldChXVEZN
b3ZlKG90aGVyLm1fb2Zmc2V0KSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUlEKFdURk1vdmUob3Ro
ZXIubV9zdHJ1Y3R1cmVJRCkpCisgICAgICAgICwgbV9zdHJ1Y3R1cmUoV1RGTW92ZShvdGhlci5t
X3N0cnVjdHVyZSkpCiAgICAgICAgICwgbV9jb25kaXRpb25TZXQoV1RGTW92ZShvdGhlci5tX2Nv
bmRpdGlvblNldCkpCiAgICAgICAgICwgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbihXVEZNb3ZlKG90
aGVyLm1fcG9seVByb3RvQWNjZXNzQ2hhaW4pKQogICAgICAgICAsIG1faWRlbnRpZmllcihXVEZN
b3ZlKG90aGVyLm1faWRlbnRpZmllcikpCkBAIC0yOTUsNyArMjk1LDcgQEAgcHJvdGVjdGVkOgog
ICAgICAgICAsIG1fc3RhdGUob3RoZXIubV9zdGF0ZSkKICAgICAgICAgLCBtX3ZpYVByb3h5KG90
aGVyLm1fdmlhUHJveHkpCiAgICAgICAgICwgbV9vZmZzZXQob3RoZXIubV9vZmZzZXQpCi0gICAg
ICAgICwgbV9zdHJ1Y3R1cmVJRChvdGhlci5tX3N0cnVjdHVyZUlEKQorICAgICAgICAsIG1fc3Ry
dWN0dXJlKG90aGVyLm1fc3RydWN0dXJlKQogICAgICAgICAsIG1fY29uZGl0aW9uU2V0KG90aGVy
Lm1fY29uZGl0aW9uU2V0KQogICAgICAgICAsIG1fcG9seVByb3RvQWNjZXNzQ2hhaW4ob3RoZXIu
bV9wb2x5UHJvdG9BY2Nlc3NDaGFpbikKICAgICAgICAgLCBtX2lkZW50aWZpZXIob3RoZXIubV9p
ZGVudGlmaWVyKQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXN1YWxseSB0
aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRvIGhh
dmUuIEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKICAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJhbnNp
dGlvbiBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZlcmVu
Y2UgdG8gdGhlIG9sZAogICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMgdGhl
IHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCi0gICAgV3JpdGVCYXJy
aWVyU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0
aW9uU2V0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMs
OSBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiAgICAgaWYgKCFt
X2xhc3RTZWVuU3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJ1Y3R1
cmUqIGxhc3RTZWVuU3RydWN0dXJlID0gbV9sYXN0U2VlblN0cnVjdHVyZUlELmRlY29kZSgpOwor
ICAgIFN0cnVjdHVyZSogbGFzdFNlZW5TdHJ1Y3R1cmUgPSBjb2RlQmxvY2stPmhlYXAoKS0+c3Ry
dWN0dXJlSURUYWJsZSgpLmdldChtX2xhc3RTZWVuU3RydWN0dXJlSUQpOwogICAgIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgbGFzdFNlZW5TdHJ1Y3R1cmUpOwot
ICAgIG1fbGFzdFNlZW5TdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgbV9sYXN0U2Vl
blN0cnVjdHVyZUlEID0gMDsKIH0KIAogdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlKiBsYXN0U2VlblN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogcG9seW1vcnBoaWNTdHJ1Y3R1cmUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmUq
PihyZWludGVycHJldF9jYXN0PHZvaWQqPigxKSk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVJRCBt
X2xhc3RTZWVuU3RydWN0dXJlSUQ7CisgICAgU3RydWN0dXJlSUQgbV9sYXN0U2VlblN0cnVjdHVy
ZUlEIHsgMCB9OwogICAgIGJvb2wgbV9tYXlTdG9yZVRvSG9sZSB7IGZhbHNlIH07IC8vIFRoaXMg
ZmxhZyBtYXkgYmVjb21lIG92ZXJsb2FkZWQgdG8gaW5kaWNhdGUgb3RoZXIgc3BlY2lhbCBjYXNl
cyB0aGF0IHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIGFycmF5IGFjY2VzcywgYXMgaXQgZGVwZW5k
cyBvbiBpbmRleGluZyB0eXBlLiBTaW5jZSB3ZSBjdXJyZW50bHkgaGF2ZSBiYXNpY2FsbHkganVz
dCBvbmUgaW5kZXhpbmcgdHlwZSAodHdvIHZhcmlhbnRzIG9mIEFycmF5U3RvcmFnZSksIHRoaXMg
ZmxhZyBmb3Igbm93IGp1c3QgbWVhbnMgZXhhY3RseSB3aGF0IGl0cyBuYW1lIGltcGxpZXMuCiAg
ICAgYm9vbCBtX291dE9mQm91bmRzIHsgZmFsc2UgfTsKICNpZiBVU0UoTEFSR0VfVFlQRURfQVJS
QVlTKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NoZWNrUHJpdmF0ZUJy
YW5kU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMg
Q2hlY2tQcml2YXRlQnJhbgogICAgICAgICByZXR1cm4gQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQ
b2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBvbHlt
b3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5k
ZXgpIHsKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxp
c3RJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTIsNiArMTE5Miw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgVmlzaXRvciYgdmlzaXRvcikKIHsKICAg
ICB0eXBlbmFtZSBWaXNpdG9yOjpTdXBwcmVzc0dDVmVyaWZpZXJTY29wZSBzdXBwcmVzc1Njb3Bl
KHZpc2l0b3IpOworICAgIFZNJiB2bSA9ICptX3ZtOwogCiAgICAgaWYgKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rKSB7CiAgICAgICAgIGlmIChtX21ldGFkYXRhKSB7CkBA
IC0xMjAxLDkgKzEyMDIsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
Y29uCiAgICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCAhbmV3U3RydWN0dXJl
SUQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUo
KS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmlzTWFy
a2VkKG9sZFN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
bmV3U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkKG5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CkBAIC0xMjE5LDkgKzEyMjAsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoY29uCiAgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLmlzTWFya2VkKHByb3BlcnR5KSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuaXNNYXJrZWQo
b2xkU3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IG5ld1N0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdT
dHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQobmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKQEAg
LTEyMzcsOSArMTIzOCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3IuaXNNYXJrZWQoYnJhbmQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0
cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5pc01hcmtlZChvbGRTdHJ1
Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
bmV3U3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVy
ZUlEKTsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtMTI2OCw3
ICsxMjY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbgogICAg
ICAgICBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMubWFya0lmQ2hlYXAodmlzaXRvcik7CiAg
ICAgICAgIAogICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9u
LT5tX3dlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKQotICAgICAgICAgICAgc3RydWN0dXJlSUQuZGVj
b2RlKCktPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgICAgICAgICAgdm0uZ2V0U3RydWN0dXJl
KHN0cnVjdHVyZUlEKS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICAgICAgZm9yIChhdXRv
JiB0cmFuc2l0aW9uIDogZGZnQ29tbW9uLT5tX3RyYW5zaXRpb25zKSB7CiAgICAgICAgICAgICBp
ZiAoc2hvdWxkTWFya1RyYW5zaXRpb24odmlzaXRvciwgdHJhbnNpdGlvbikpIHsKQEAgLTEzMDgs
NyArMTMwOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVzcyhjb25zdCAKICAg
ICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBWTSYgdm0gPSAqbV92bTsKLSAgICBVTlVTRURf
VkFSSUFCTEUodm0pOwogICAgIGlmICh2aXNpdG9yLmlzTWFya2VkKHRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJt
aW5lTGl2ZW5lc3MoY29uc3QgCiAgICAgfQogICAgIGlmIChhbGxBcmVMaXZlU29GYXIpIHsKICAg
ICAgICAgZm9yIChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IGRmZ0NvbW1vbi0+bV93ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcykgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIGlmICghdmlzaXRvci5p
c01hcmtlZChzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBpZiAobW9k
ZU1ldGFkYXRhLm1vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtb2RlTWV0
YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVj
dHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQob2xkU3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAg
ICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAu
c3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
IkNsZWFyaW5nICIsIG9wTmFtZSwgIiBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuIik7CiAgICAgICAg
ICAgICBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmNsZWFy
TExJbnRHZXRCeUlkQ2FjaGUobW9kZU1ldGFkYXRhKTsKQEAgLTEzODgsMTkgKzEzODgsMTkgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogCiAgICAgICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BUcnlHZXRCeUlkPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJl
SUQ7Ci0gICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQo
b2xkU3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRT
dHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIHRyeV9nZXRfYnlfaWQgTExJ
bnQgcHJvcGVydHkgYWNjZXNzLiIpOwotICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJ
RCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEID0g
MDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0ID0gMDsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEdldEJ5SWREaXJlY3Q+KFsmXSAoYXV0byYgbWV0
YWRhdGEpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisgICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgZ2V0
X2J5X2lkX2RpcmVjdCBMTEludCBwcm9wZXJ0eSBhY2Nlc3MuIik7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwog
ICAgICAgICB9KTsKIApAQCAtMTQwOCwxMSArMTQwOCwxMSBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBKU0NlbGwqIHByb3BlcnR5ID0gbWV0
YWRhdGEubV9wcm9wZXJ0eS5nZXQoKTsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRDsKIAotICAgICAgICAgICAgaWYgKCghcHJvcGVy
dHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpICYmICghc3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChzdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpKQorICAgICAgICAgICAgaWYgKCgh
cHJvcGVydHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpICYmICghc3RydWN0dXJlSUQg
fHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBMTEludCBwcml2YXRlIHByb3Bl
cnR5IGFjY2Vzcy4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1
Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAg
ICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX3By
b3BlcnR5LmNsZWFyKCk7CiAgICAgICAgIH0pOwpAQCAtMTQyMSwxNCArMTQyMSwxNCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZUNoYWluLmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQgfHwgdm0u
aGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCi0gICAgICAgICAgICAgICAg
JiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG5ld1N0cnVjdHVyZUlELmRl
Y29kZSgpKSkKKyAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNN
YXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCisg
ICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZt
LmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAg
ICAgICAgICYmICghY2hhaW4gfHwgdm0uaGVhcC5pc01hcmtlZChjaGFpbikpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIkNsZWFyaW5nIExMSW50IHB1dCB0cmFuc2l0aW9uLiIpOwotICAgICAgICAgICAgbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgICAgICBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gMDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJ
RCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAg
ICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgIH0pOwogCkBA
IC0xNDM2LDE1ICsxNDM2LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGUKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
bV9vbGRTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlE
ID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIEpTQ2VsbCogcHJvcGVy
dHkgPSBtZXRhZGF0YS5tX3Byb3BlcnR5LmdldCgpOwotICAgICAgICAgICAgaWYgKCghb2xkU3Ry
dWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZChvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpCisg
ICAgICAgICAgICBpZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAg
ICAgICYmICghcHJvcGVydHkgfHwgdm0uaGVhcC5pc01hcmtlZChwcm9wZXJ0eSkpCi0gICAgICAg
ICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKG5ld1N0cnVj
dHVyZUlELmRlY29kZSgpKSkpCisgICAgICAgICAgICAgICAgJiYgKCFuZXdTdHJ1Y3R1cmVJRCB8
fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1
Y3R1cmVJRCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IHB1dF9wcml2YXRl
X25hbWUgdHJhbnNpdGlvbi4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJl
SUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJ
RCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7Ci0gICAgICAgICAgICBt
ZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1l
dGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9wcm9w
ZXJ0eS5jbGVhcigpOwogICAgICAgICB9KTsKIApAQCAtMTQ1MiwzNyArMTQ1MiwzNyBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQ7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJl
SUQ7CiAgICAgICAgICAgICBKU0NlbGwqIGJyYW5kID0gbWV0YWRhdGEubV9icmFuZC5nZXQoKTsK
LSAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQob2xk
U3RydWN0dXJlSUQuZGVjb2RlKCkpKQorICAgICAgICAgICAgaWYgKCghb2xkU3RydWN0dXJlSUQg
fHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3Ry
dWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICAmJiAoIWJyYW5kIHx8IHZtLmhlYXAuaXNNYXJr
ZWQoYnJhbmQpKQotICAgICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVh
cC5pc01hcmtlZChuZXdTdHJ1Y3R1cmVJRC5kZWNvZGUoKSkpKQorICAgICAgICAgICAgICAgICYm
ICghbmV3U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmlu
ZyBMTEludCBzZXRfcHJpdmF0ZV9icmFuZCB0cmFuc2l0aW9uLiIpOwotICAgICAgICAgICAgbWV0
YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fb2xkU3RydWN0dXJlSUQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1
Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX2JyYW5kLmNsZWFyKCk7CiAgICAg
ICAgIH0pOwogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BDaGVja1ByaXZhdGVCcmFu
ZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwogICAgICAgICAgICAgSlNDZWxsKiBicmFu
ZCA9IG1ldGFkYXRhLm1fYnJhbmQuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoKCFzdHJ1Y3R1cmVJ
RCB8fCB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZUlELmRlY29kZSgpKSkKKyAgICAgICAgICAg
IGlmICgoIXN0cnVjdHVyZUlEIHx8IHZtLmhlYXAuaXNNYXJrZWQodm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgJiYgKCFicmFuZCB8
fCB2bS5oZWFwLmlzTWFya2VkKGJyYW5kKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBM
TEludCBjaGVja19wcml2YXRlX2JyYW5kIHRyYW5zaXRpb24uIik7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV9icmFuZC5jbGVhcigp
OwogICAgICAgICB9KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wVG9UaGlzPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQgfHwgdm0uaGVhcC5pc01hcmtlZChtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlELmRlY29kZSgpKSkKKyAgICAgICAgICAgIGlmICghbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1
cmVJRCB8fCB2bS5oZWFwLmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldCht
ZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRC5kZWNv
ZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVy
ZSAlcC5cbiIsIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZXRhZGF0
YS5tX2NhY2hlZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FjaGVkU3RydWN0dXJlSUQgPSAwOwogICAgICAgICAgICAgbWV0YWRhdGEubV90b1Ro
aXNTdGF0dXMgPSBtZXJnZShtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5
R0MpOwogICAgICAgICB9KTsKIApAQCAtMTU2OSw3ICsxNTY5LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH07CiAKLSAgICAgICAgaWYgKCF2bS5oZWFwLmlzTWFya2VkKHN0ZDo6Z2V0PDA+KHBhaXIu
a2V5KS5kZWNvZGUoKSkpCisgICAgICAgIGlmICghdm0uaGVhcC5pc01hcmtlZCh2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RkOjpnZXQ8MD4ocGFpci5rZXkpKSkpCiAgICAgICAgICAg
ICByZXR1cm4gY2xlYXIoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCA6IHBhaXIudmFsdWUpIHsK
QEAgLTE5MTcsNyArMTkxNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW4KICAgICAgICAgdmlzaXRvci5hcHBlbmQod2Vha1JlZmVyZW5jZSk7CiAKICAgICBmb3Ig
KFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDogZGZnQ29tbW9uLT5tX3dlYWtTdHJ1Y3R1cmVSZWZl
cmVuY2VzKQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHN0cnVjdHVyZUlELmRl
Y29kZSgpKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZCh2aXNpdG9yLnZtKCku
Z2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKSk7CiAjZW5kaWYgICAgCiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWxldGVCeVN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlbGV0ZUJ5
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBEZWxldGVCeVN0YXR1
cyBEZWxldGVCeVN0YXR1czo6Y29tcHV0ZUZvCiAgICAgICAgIHJldHVybiBEZWxldGVCeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7Ci0gICAgICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1YjsKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJ
bmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQo
bGlzdEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiB1bmlvbiBH
ZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhKCkKICAgICB7Ci0g
ICAgICAgIGRlZmF1bHRNb2RlLnN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
ZGVmYXVsdE1vZGUuc3RydWN0dXJlSUQgPSAwOwogICAgICAgICBkZWZhdWx0TW9kZS5jYWNoZWRP
ZmZzZXQgPSAwOwogICAgICAgICBkZWZhdWx0TW9kZS5wYWRkaW5nMSA9IDA7CiAgICAgICAgIG1v
ZGUgPSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0
YSB7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YSgpCiAgICAgewotICAgICAgICBkZWZhdWx0TW9k
ZS5zdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7CisgICAgICAgIGRlZmF1bHRNb2RlLnN0cnVj
dHVyZUlEID0gMDsKICAgICAgICAgZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKICAgICAg
ICAgZGVmYXVsdE1vZGUucGFkZGluZzEgPSAwOwogICAgICAgICBtb2RlID0gR2V0QnlJZE1vZGU6
OkRlZmF1bHQ7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogaW5saW5lIHZvaWQgR2V0QnlJZE1vZGVNZXRhZGF0YTo6Y2xlYXJUb0RlZmF1bHRNb2RlV2l0
aG91dENhY2hlKCkKIHsKICAgICBtb2RlID0gR2V0QnlJZE1vZGU6OkRlZmF1bHQ7Ci0gICAgZGVm
YXVsdE1vZGUuc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgIGRlZmF1bHRNb2RlLnN0
cnVjdHVyZUlEID0gMDsKICAgICBkZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXQgPSAwOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBHZXRCeVN0YXR1
cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQp
OwogCiAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVy
dHkoKSkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsK
QEAgLTIzNiw3ICsyMzYsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAg
ICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgaWYgKGxp
c3QtPnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3Mg
PSBsaXN0LT5hdCgwKTsKICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgSW5CeVN0YXR1cyBJbkJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgIH0KIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpT
dHViOiB7Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPm1fc3R1
YjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNp
emUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2Vz
cyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7CiAgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgIH0KIAogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7Ci0gICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7IC8vIENsZWFyIG91dCB0aGUgaW5saW5l
IGFjY2VzcyBjb2RlLgorICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNDY0LDcgKzQ2NCw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2UKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247Ci0gICAg
ICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7IC8vIENs
ZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBzdHViSW5mby5tX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3Mg
Y29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0YW5jZU9mU3RhdHVzLmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RhbmNlT2ZTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEluc3RhbmNlT2ZTdGF0dXMgSW5z
dGFuY2VPZlN0YXR1czo6Y29tcHUKICAgICBpZiAoc3R1YkluZm8tPmNhY2hlVHlwZSgpICE9IENh
Y2hlVHlwZTo6U3R1YikKICAgICAgICAgcmV0dXJuIFRha2VzU2xvd1BhdGg7IC8vIFRoaXMgaXMg
Y29uc2VydmF0aXZlLiBJdCBjb3VsZCBiZSB0aGF0IHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCiAg
ICAgCi0gICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+bV9zdHViOworICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICBJbnN0YW5j
ZU9mU3RhdHVzIHJlc3VsdDsKICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJ
bmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgY29uc3QgQWNjZXNz
Q2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMjEgKzMzLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUgewogcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mU3RydWN0dXJlSUQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZUlEKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSwgbV9z
dHJ1Y3R1cmUpOyB9CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlSUQuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJuIG1f
c3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjcmVhdGVBbGxvY2F0aW9uU3RydWN0
dXJlRnJvbUJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZSk7CiAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3N0
cnVjdHVyZUlELmNsZWFyKCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lk
IHZpc2l0QWdncmVnYXRlKFZpc2l0b3ImIHZpc2l0b3IpIHsgdmlzaXRvci5hcHBlbmQobV9zdHJ1
Y3R1cmVJRCk7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cnVjdHVyZS5jbGVhcigpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4gdm9pZCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdG9y
JiB2aXNpdG9yKSB7IHZpc2l0b3IuYXBwZW5kKG1fc3RydWN0dXJlKTsgfQogCiBwcml2YXRlOgot
ICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiB9OwogCiBpbmxpbmUgU3RydWN0dXJlKiBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVG
cm9tQmFzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBiYXNlR2xvYmFsT2JqZWN0LCBKU0NlbGwq
IG93bmVyLCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCiB7
Ci0gICAgQVNTRVJUKCFtX3N0cnVjdHVyZUlEIHx8IG1fc3RydWN0dXJlSUQuZ2V0KCktPmNsYXNz
SW5mbygpICE9IGJhc2VTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpIHx8IG1fc3RydWN0dXJlSUQtPmds
b2JhbE9iamVjdCgpICE9IGJhc2VTdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NF
UlQoIW1fc3RydWN0dXJlIHx8IG1fc3RydWN0dXJlLmdldCgpLT5jbGFzc0luZm8oKSAhPSBiYXNl
U3RydWN0dXJlLT5jbGFzc0luZm8oKSB8fCBtX3N0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkgIT0g
YmFzZVN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIEFTU0VSVChiYXNlU3RydWN0dXJl
LT5oYXNNb25vUHJvdG8oKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKQEAgLTYxLDgg
KzYxLDggQEAgaW5saW5lIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYQogICAgIC8v
IEVuc3VyZSB0aGF0IGlmIGFub3RoZXIgdGhyZWFkIHNlZXMgdGhlIHN0cnVjdHVyZSwgaXQgd2ls
bCBzZWUgaXQgcHJvcGVybHkgY3JlYXRlZC4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwog
Ci0gICAgbV9zdHJ1Y3R1cmVJRC5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVy
biBzdHJ1Y3R1cmU7CisgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsK
KyAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWlu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVBy
b3RvQWNjZXNzQ2hhaW4uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCwxMCArODAsMTAgQEAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBQb2x5UHJvdG9B
YwogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBvbHlQcm90b0FjY2Vzc0NoYWluKFdURk1vdmUo
Y2hhaW4pKSk7CiB9CiAKLWJvb2wgUG9seVByb3RvQWNjZXNzQ2hhaW46Om5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoVk0mKSBjb25zdAorYm9vbCBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChWTSYgdm0pIGNvbnN0CiB7CiAgICAgZm9yIChTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA6IG1fY2hhaW4pIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlE
LmRlY29kZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIGlmICh2
bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWlu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90
b0FjY2Vzc0NoYWluLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDx3
dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01NywyMCArNTcs
MjAgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChWTSYp
IGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmM+Ci0gICAgdm9pZCBmb3JFYWNo
KFZNJiwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBjb25zdCBGdW5jJiBmdW5jKSBjb25zdAor
ICAgIHZvaWQgZm9yRWFjaChWTSYgdm0sIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSwgY29uc3Qg
RnVuYyYgZnVuYykgY29uc3QKICAgICB7CiAgICAgICAgIGJvb2wgYXRFbmQgPSAhbV9jaGFpbi5z
aXplKCk7CiAgICAgICAgIGZ1bmMoYmFzZVN0cnVjdHVyZSwgYXRFbmQpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGFpbi5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
YXRFbmQgPSBpICsgMSA9PSBtX2NoYWluLnNpemUoKTsKLSAgICAgICAgICAgIGZ1bmMobV9jaGFp
bltpXS5kZWNvZGUoKSwgYXRFbmQpOworICAgICAgICAgICAgZnVuYyh2bS5nZXRTdHJ1Y3R1cmUo
bV9jaGFpbltpXSksIGF0RW5kKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0cnVjdHVyZSog
c2xvdEJhc2VTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpIGNvbnN0Cisg
ICAgU3RydWN0dXJlKiBzbG90QmFzZVN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogYmFzZVN0
cnVjdHVyZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2NoYWluLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX2NoYWluLmxhc3QoKS5kZWNvZGUoKTsKKyAgICAgICAgICAgIHJldHVy
biB2bS5nZXRTdHJ1Y3R1cmUobV9jaGFpbi5sYXN0KCkpOwogICAgICAgICByZXR1cm4gYmFzZVN0
cnVjdHVyZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgUG9seW1vcnBoaWNBY2Nlc3M6OnZpc2l0
V2VhayhWTSYgdm0KICAgICB9CiAgICAgaWYgKG1fc3R1YlJvdXRpbmUpIHsKICAgICAgICAgZm9y
IChTdHJ1Y3R1cmVJRCB3ZWFrUmVmZXJlbmNlIDogbV9zdHViUm91dGluZS0+d2Vha1N0cnVjdHVy
ZXMoKSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB3ZWFrUmVmZXJlbmNl
LmRlY29kZSgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1
Y3R1cmUod2Vha1JlZmVyZW5jZSk7CiAgICAgICAgICAgICBpZiAoIXZtLmhlYXAuaXNNYXJrZWQo
c3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJl
dmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
RmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJFQ01BTW9kZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZyb21MTEluCiAgICAgaWYg
KCFzdHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OwogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQoc3RydWN0dXJlSUQpOwogCiAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX25ld1N0cnVjdHVyZUlEOwogICAgIGlmICghbmV3U3RydWN0dXJlSUQpIHsKQEAgLTky
LDcgKzkyLDcgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGcm9tTExJbgogICAg
ICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKG51bGxwdHIsIHN0cnVjdHVyZSwgb2Zm
c2V0KTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKICAgICAKICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAg
ICAKQEAgLTE4OCw3ICsxODgsNyBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKICAgICAgICAgCiAg
ICAgICAgIFB1dEJ5U3RhdHVzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1w
bGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBTZXRQcml2YXRlQnJhbmRTdGF0dXMgU2V0UHJpdmF0
ZUJyYW5kU3RhCiAgICAgICAgIHJldHVybiBTZXRQcml2YXRlQnJhbmRTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjogewotICAgICAgICBQb2x5bW9ycGhp
Y0FjY2VzcyogbGlzdCA9IHN0dWJJbmZvLT5tX3N0dWI7CisgICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGxp
c3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAg
ICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Niw3ICs1OTYsMTMg
QEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2VsbChKU0NlbAogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBTcGVjU3RyaW5nOwogICAgIH0KLSAgICByZXR1cm4gc3BlY3VsYXRpb25G
cm9tU3RydWN0dXJlKGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5
MDM2ODg4OiB1bmRvIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICAgIGF1dG8qIHN0cnVj
dHVyZSA9IGNlbGwtPnZtKCkudHJ5R2V0U3RydWN0dXJlKGNlbGwtPnN0cnVjdHVyZUlEKCkpOwor
ICAgIGlmIChVTkxJS0VMWSghaXNTYW5lUG9pbnRlcihzdHJ1Y3R1cmUpKSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNOb25lOworICAgIH0KKyAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiB9CiAKIFNwZWN1
bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVChoYXNDb25z
dGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6R2V0
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlSUQuc2V0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUg
PSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOworICAgIGNvZGVCbG9jay0+dm0oKS53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0K
IApAQCAtNzAsNyArNzEsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJl
cGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNl
dENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRl
bnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQu
c2V0KGNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLCBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLT5pZCgpOworICAgIGNvZGVCbG9jay0+dm0oKS53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKICAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIApAQCAtNzksNyArODEsOCBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJUKG1fY2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRC5zZXQoY29kZUJsb2NrLT52bSgpLCBjb2Rl
QmxvY2ssIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CisgICAgY29kZUJs
b2NrLT52bSgpLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIGJ5SWRTZWxmT2Zmc2V0ID0g
b2Zmc2V0OwogfQogCkBAIC04Nyw3ICs5MCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKIHsKICAgICBzd2l0Y2ggKG1fY2FjaGVUeXBlKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6
OlN0dWI6Ci0gICAgICAgIGRlbGV0ZSBtX3N0dWI7CisgICAgICAgIGRlbGV0ZSB1LnN0dWI7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkdldEJ5SWRTZWxmOgpAQCAtMTA1LDcgKzEwOCw3IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmFib3V0VG9EaWUoKQogewogICAgIHN3aXRjaCAobV9jYWNoZVR5cGUpIHsKICAgICBj
YXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgbV9zdHViLT5hYm91dFRvRGllKCk7CisgICAg
ICAgIHUuc3R1Yi0+YWJvdXRUb0RpZSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYWNo
ZVR5cGU6OlVuc2V0OgogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKQEAgLTEzNiw3
ICsxMzksNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAg
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYg
KG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikgewotICAgICAgICAgICAgcmVzdWx0ID0g
bV9zdHViLT5hZGRDYXNlKGxvY2tlciwgdm0sIGNvZGVCbG9jaywgKnRoaXMsIGFjY2Vzc0Nhc2Uu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICByZXN1bHQgPSB1LnN0dWItPmFkZENhc2Uo
bG9ja2VyLCB2bSwgY29kZUJsb2NrLCAqdGhpcywgYWNjZXNzQ2FzZS5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFkIHN0dWIsIHJlc3VsdDog
IiwgcmVzdWx0LCAiXG4iKTsKQEAgLTE3Myw3ICsxNzYsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6U3R1Yik7Ci0gICAgICAgICAg
ICBtX3N0dWIgPSBhY2Nlc3MucmVsZWFzZSgpOworICAgICAgICAgICAgdS5zdHViID0gYWNjZXNz
LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1Yik7CkBAIC0xOTksNyArMjAyLDcgQEAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyBQb2x5bW9ycGhpY0FjY2Vz
cy4KICAgICAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICAgICAgCi0gICAgICAg
IHJlc3VsdCA9IG1fc3R1Yi0+cmVnZW5lcmF0ZShsb2NrZXIsIHZtLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgZWNtYU1vZGUsICp0aGlzKTsKKyAgICAgICAgcmVzdWx0ID0gdS5zdHViLT5yZWdl
bmVyYXRlKGxvY2tlciwgdm0sIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgKnRo
aXMpOwogICAgICAgICAKICAgICAgICAgaWYgKFN0cnVjdHVyZVN0dWJJbmZvSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJSZWdlbmVyYXRpb24gcmVzdWx0OiAiLCByZXN1
bHQsICJcbiIpOwpAQCAtMjEzLDExICsyMTYsMTEgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBT
dHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyBhY2Nlc3MgY29kZS4gVGhhdCdzIGJlY2F1c2Ug
d2hlbiB3ZSBmaXJzdCB0cmFuc2l0aW9uIHRvIGJlY29taW5nIGEgU3R1Yiwgd2UgbWF5CiAgICAg
ICAgIC8vIGJlIGJ1ZmZlcmVkLCBhbmQgd2UgaGF2ZSBub3QgeWV0IGdlbmVyYXRlZCBhbnkgY29k
ZS4gT25jZSB0aGUgU3R1YiBmaW5hbGx5IGdlbmVyYXRlcwogICAgICAgICAvLyBjb2RlLCB3ZSdy
ZSBubyBsb25nZXIgcnVubmluZyB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLCBzbyB3ZSBjYW4gdGhl
biBjbGVhciBvdXQKLSAgICAgICAgLy8gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQuIFRo
ZSByZWFzb24gd2UgZG9uJ3QgY2xlYXIgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQgd2hp
bGUKLSAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRv
IHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRAorICAgICAg
ICAvLyBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuIFRoZSByZWFzb24gd2UgZG9uJ3QgY2xl
YXIgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHdoaWxlCisgICAgICAgIC8vIHdlJ3JlIGJ1
ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAg
ICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlSUQuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3
ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdl
CiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yMzIsNyArMjM1LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVy
ZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRC5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzIwLDcgKzMyMyw3IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnZpc2l0QWdncmVnYXRlSW0KICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENhY2hlVHlwZTo6U3R1YjoKLSAgICAgICAgbV9zdHVi
LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdS5zdHViLT52aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM0NSw3ICszNDgs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCiAgICAg
ICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2Nh
Y2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCi0gICAgICAgIGlzVmFsaWQgJj0gbV9zdHViLT52
aXNpdFdlYWsodm0pOworICAgICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsK
IAogICAgIGlmIChpc1ZhbGlkKQogICAgICAgICByZXR1cm47CkBAIC0zNjEsNyArMzY0LDcgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdAogICAgICAgICBzdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikKLSAgICAgICAgbV9zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKKyAgICAgICAgdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKIH0KIAog
dGVtcGxhdGUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoQWJz
dHJhY3RTbG90VmlzaXRvciYpOwpAQCAtMzcyLDcgKzM3NSw3IEBAIFN0dWJJbmZvU3VtbWFyeSBT
dHJ1Y3R1cmVTdHViSW5mbzo6c3VtbWEKICAgICBTdHViSW5mb1N1bW1hcnkgdGFrZXNTbG93UGF0
aCA9IFN0dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aDsKICAgICBTdHViSW5mb1N1bW1hcnkg
c2ltcGxlID0gU3R1YkluZm9TdW1tYXJ5OjpTaW1wbGU7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6U3R1YikgewotICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlzdCA9IG1f
c3R1YjsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSB1LnN0dWI7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgY29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBp
ZiAoYWNjZXNzLmRvZXNDYWxscyh2bSkpIHsKQEAgLTQwNCw3ICs0MDcsNyBAQCBib29sIFN0cnVj
dHVyZVN0dWJJbmZvOjpjb250YWluc1BDKHZvaWQqCiB7CiAgICAgaWYgKG1fY2FjaGVUeXBlICE9
IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3N0
dWItPmNvbnRhaW5zUEMocGMpOworICAgIHJldHVybiB1LnN0dWItPmNvbnRhaW5zUEMocGMpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNldENhY2hlVHlwZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiwgQ2FjaGVUeXBlIG5ld0NhY2hlVHlwZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDE0ICsyMTEsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywg
c3RydWN0dXJlLCBpbXBsKTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUoVk0mKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZUlELmdldCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlSUQpOyB9Ci0KIHByaXZh
dGU6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGNvbnNpZGVyQ2FjaGluZyhWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpbXBsKQogICAgIHsKQEAgLTM1OSwxMCArMzUxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgUG9seW1vcnBoaWNBY2Nlc3MqIG1fc3R1
YiB7IG51bGxwdHIgfTsKICAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsKLSAgICBX
cml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmVJRDsKLQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7IH0KKyAgICB1bmlvbiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBz
dHViOworICAgIH0gdTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVj
dHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJ
RCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3Ry
dWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9s
eW1vcnBoaWNBY2Nlc3MuCkBAIC00MjEsMTEgKzQyMiwxMCBAQCBwdWJsaWM6CiAgICAgdWludDhf
dCBjb3VudGRvd24geyAxIH07CiAgICAgdWludDhfdCByZXBhdGNoQ291bnQgeyAwIH07CiAgICAg
dWludDhfdCBudW1iZXJPZkNvb2xEb3ducyB7IDAgfTsKLSAgICB1aW50OF90IGJ1ZmZlcmluZ0Nv
dW50ZG93bjsKLXByaXZhdGU6Ci0gICAgTG9jayBtX2J1ZmZlcmVkU3RydWN0dXJlc0xvY2s7Ci1w
dWJsaWM6CisKICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXg7CisKKyAgICB1aW50OF90
IGJ1ZmZlcmluZ0NvdW50ZG93bjsKICAgICBib29sIHJlc2V0QnlHQyA6IDE7CiAgICAgYm9vbCB0
b29rU2xvd1BhdGggOiAxOwogICAgIGJvb2wgZXZlckNvbnNpZGVyZWQgOiAxOwpAQCAtNDM1LDYg
KzQzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIHByb3BlcnR5SXNTdHJpbmcgOiAxOwogICAgIGJv
b2wgcHJvcGVydHlJc0ludDMyIDogMTsKICAgICBib29sIHByb3BlcnR5SXNTeW1ib2wgOiAxOwor
cHJpdmF0ZToKKyAgICBMb2NrIG1fYnVmZmVyZWRTdHJ1Y3R1cmVzTG9jazsKIH07CiAKIGlubGlu
ZSBDb2RlT3JpZ2luIGdldFN0cnVjdHVyZVN0dWJJbmZvQ29kZU9yaWdpbihTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMDEsNyArMjIwMSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBB
bmQgd2UgY2hlY2sgdGhlIGluZGV4aW5nIG1vZGUgb2YgdGhlIHN0cnVjdHVyZS4gSWYgdGhlIGlu
ZGV4aW5nIG1vZGUgaXMgQ29XLCB0aGUgYnV0dGVyZmx5IGlzCiAgICAgICAgICAgICAgICAgLy8g
ZGVmaW5pdGVseSBKU0ltbXV0YWJsZUJ1dHRlcmZseS4KICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJREVhcmx5ID0gYXJyYXktPnN0cnVjdHVyZUlEKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkuaXNOdWtlZCgpKQorICAgICAgICAgICAgICAgIGlm
IChpc051a2VkKHN0cnVjdHVyZUlERWFybHkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlDbGFz
cygpID09IEFycmF5OjpPcmlnaW5hbENvcHlPbldyaXRlQXJyYXkpIHsKQEAgLTIyMTUsNyArMjIx
NSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURMYXRlLmRlY29kZSgpOworICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fdm0uZ2V0U3RydWN0dXJlKHN0
cnVjdHVyZUlETGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgpAQCAtMjI3Myw3ICsy
MjczLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUlERWFybHkgIT0gc3RydWN0dXJlSURMYXRl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRExhdGUuZGVj
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
dm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlETGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
ODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUwNCw3ICs1NTA0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0dXJlSUQgY2FjaGVkU3Ry
dWN0dXJlSUQgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUgPSBudWxscHRyOwogICAgICAgICAgICAgaWYgKGNhY2hl
ZFN0cnVjdHVyZUlEKQotICAgICAgICAgICAgICAgIGNhY2hlZFN0cnVjdHVyZSA9IGNhY2hlZFN0
cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIGNhY2hlZFN0cnVjdHVyZSA9IG1f
dm0tPmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChjYWNoZWRTdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICBpZiAobWV0YWRhdGEubV90b1RoaXNTdGF0dXMgIT0gVG9UaGlzT0sKICAgICAgICAg
ICAgICAgICB8fCAhY2FjaGVkU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgfHwgY2FjaGVkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzICE9IEpTT2JqZWN0OjppbmZv
KCktPm1ldGhvZFRhYmxlLnRvVGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5oYXNUcmFuc2l0
aW9uKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChu
b2RlLT50cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBvdXQucHJpbnQoIiwgSUQ6Iiwgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5pZCgpLmJpdHMo
KSk7CisgICAgICAgIG91dC5wcmludCgiLCBJRDoiLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQt
PmlkKCkpOwogI2Vsc2UKICAgICAgICAgb3V0LnByaW50KCIsIElEOiIsIFJhd1BvaW50ZXIobm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0LmdldCgpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY4LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gd2Vha1N0cnVjdHVyZS5nZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1
cmUtPmlkKCkuYml0cygpKSk7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoY29uZCwg
bGVmdCwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgQ29tcGlsYXRpb25SZXN1
bHQgUGxhbjo6ZmluYWxpemUoKQogICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8SlNDZWxs
PiYgcmVmZXJlbmNlIDogbV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1fd2Vh
a1JlZmVyZW5jZXMpCiAgICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHJlZmVy
ZW5jZS5nZXQoKSk7CiAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEIDog
bV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1fd2Vha1N0cnVjdHVyZVJlZmVy
ZW5jZXMpCi0gICAgICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHN0cnVjdHVyZUlE
LmRlY29kZSgpKTsKKyAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQobV92bS0+
Z2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKSk7CiAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnQgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkpCiAgICAgICAg
ICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKGNvbnN0YW50LmdldCgpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiArMjQ0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAgICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCkBAIC0yNTgsNyArMjU5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJSZWcgbG9j
YWxHbG9iYWxPYmplY3RHUFIgPSBsb2NhbEdsb2JhbE9iamVjdC5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlbW90ZUdsb2JhbE9iamVjdEdQUiA9IHJlbW90ZUdsb2JhbE9iamVjdC5ncHIoKTsKICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgbG9jYWxHbG9iYWxPYmplY3RHUFIpOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCBhcmdHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIGFyZ0dQUiwgcmVzdWx0R1BSLCBzY3JhdGNoLmdwcigpKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZW1vdGVHbG9iYWxPYmplY3RHUFIpOwogICAgICAg
ICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgbG9jYWxHbG9iYWxPYmplY3RH
UFIsIHJlbW90ZUdsb2JhbE9iamVjdEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKQEAgLTI5OCw2ICsyOTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVtb3RlR2xv
YmFsT2JqZWN0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgICAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQubm9kZSgpKSkKQEAgLTMxMCw3ICszMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIEdQUlJlZyBsb2NhbEdsb2JhbE9iamVj
dEdQUiA9IGxvY2FsR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVtb3RlR2xv
YmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCksIG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsb2Nh
bEdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IGFyZ0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgYXJnR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2guZ3ByKCkpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIGJyYW5jaFB0cihK
SVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xvYmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmpl
Y3RHUFIsIHRha2VuKTsKIApAQCAtMTkwMyw2ICsxOTA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVRvQm9vbGVhbk9iagogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZTsKICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDsKKyAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQgPQogICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpOwpAQCAtMTkxMSw4ICsxOTE1LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmoKICAgICAgICAgLy8gVGhlIG1hc3F1ZXJhZGVz
IGFzIHVuZGVmaW5lZCBjYXNlIHdpbGwgdXNlIHRoZSBzdHJ1Y3R1cmUgcmVnaXN0ZXIsIHNvIGFs
bG9jYXRlIGl0IGhlcmUuCiAgICAgICAgIC8vIERvIHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZnVu
Y3Rpb24gdG8gYXZvaWQgYnJhbmNoaW5nIGFyb3VuZCBhIHJlZ2lzdGVyIGFsbG9jYXRpb24uCiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZWFsU3RydWN0dXJlKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVhbFNjcmF0Y2godGhpcyk7CiAgICAgICAgIHN0cnVjdHVyZS5hZG9wdChyZWFsU3Ry
dWN0dXJlKTsKKyAgICAgICAgc2NyYXRjaC5hZG9wdChyZWFsU2NyYXRjaCk7CiAgICAgICAgIHN0
cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwpAQCAtMTkyOSw3ICsx
OTM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iagogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCi0gICAgICAgIG1faml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICBtX2pp
dC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCB2YWx1ZUdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCkBAIC0yMDg0LDcgKzIwOTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCAKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAK
LSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHN0cnVjdHVy
ZUdQUik7CisgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlR1BSLCBz
dHJ1Y3R1cmVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIApAQCAtMjE3
OCw3ICsyMTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCcmFuY2goRQog
ICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9ICFtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSB7CiAgICAgICAgICAgICBicmFuY2hUZXN0
OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpLCB0YWtlbik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCB2YWx1ZUdQUiwgdGVtcDFHUFIpOworICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgdmFsdWVHUFIsIHRlbXAxR1BSLCB0ZW1wMkdQUik7CiAgICAgICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2Jq
ZWN0KSwgdGVtcDJHUFIpOwogICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcDFHUFIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCB0ZW1wMkdQUiwgdGFrZW4pOwpAQCAtNDQ0MCw3ICs0NDQ3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBBU1NF
UlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSk7
CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1N0cnVjdHVy
ZS0+aWQoKS5iaXRzKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG5ld1N0cnVjdHVyZS0+aWQoKSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgICAgICAK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDY1OSw2ICs0NjY2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9i
YWxPYmplY3QodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZW1vdGVHbG9iYWxPYmplY3Qo
dGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZS5qc1ZhbHVl
UmVncygpKTsKIApAQCAtNDY4Miw3ICs0NjkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGxvY2FsR2xvYmFsT2JqZWN0R1BS
ID0gbG9jYWxHbG9iYWxPYmplY3QuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVtb3RlR2xv
YmFsT2JqZWN0R1BSID0gcmVtb3RlR2xvYmFsT2JqZWN0LmdwcigpOwogICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxvY2FsR2xvYmFsT2JqZWN0
R1BSKTsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHZhbHVlLmdw
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlbW90ZUdsb2JhbE9iamVjdEdQUik7IAog
ICAgICAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIGxvY2FsR2xv
YmFsT2JqZWN0R1BSLCByZW1vdGVHbG9iYWxPYmplY3RHUFIsIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUzMyw3ICs4NTMzLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbE9iagogewogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBv
YmplY3QuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0LmdwcigpLCByZXN1
bHQuZ3ByKCksIHNjcmF0Y2guZ3ByKCkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVzdWx0LmdwcigpKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CkBA
IC0xMTA0MSw3ICsxMTA0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0pT
Q2FzdCgKICAgICAgICAgR1BSUmVnIG90aGVyR1BSID0gb3RoZXIuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzcGVjaWZpZWRHUFIgPSBzcGVjaWZpZWQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQuZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZUdQUiwgb3RoZXJHUFIpOworICAgICAgICBtX2ppdC5l
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBiYXNlR1BSLCBvdGhlckdQUiwgc3BlY2lmaWVkR1BSKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob3RoZXJHUFIsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBvdGhlckdQUik7CiAgICAgICAgIG1faml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG5vZGUtPmNsYXNzSW5mbygpKSwgc3BlY2lm
aWVkR1BSKTsKIApAQCAtMTEyNTIsNyArMTEyNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRnVuY3Rpb25Ub1N0CiAKICAgICBzcGVjdWxhdGVGdW5jdGlvbihub2RlLT5jaGlsZDEo
KSwgZnVuY3Rpb24uZ3ByKCkpOwogCi0gICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
ZnVuY3Rpb24uZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgZnVuY3Rpb24uZ3ByKCksIHJlc3VsdC5ncHIoKSwgZXhlY3V0YWJsZS5ncHIoKSk7
CiAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHQuZ3ByKCksIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19maW5hbF92PEpTQm91bmRGdW5jdGlvbj4sICJXZSBkb24ndCBoYW5kbGUg
c3ViY2xhc3NlcyB3aGVuIGNvbXBhcmluZyBjbGFzc0luZm8gYmVsb3ciKTsKICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW1QdHIoSlNCb3VuZEZ1bmN0aW9uOjppbmZvKCkpKSk7CkBAIC0xNDI2Nywx
MSArMTQyNjgsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RQog
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQ2VsbE9yT3RoZXJVc2UpIHsKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAKICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxk
MSgpKTsKIAogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3Mo
KTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmVDYXNlczsKQEAgLTE0MzIzLDcgKzE0MzI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3BlcnR5RQogICAgICAgICAgICAgaWYgKG9ubHlTdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG9ubHlTdHJ1Y3R1cmUpLCBzY3Jh
dGNoMUdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoMUdQUik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgYmFzZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDJHUFIpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaDFHUFIsIFN0cnVjdHVyZTo6cHJl
dmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3Jh
dGNoMUdQUikpOwogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZlN0
cnVjdHVyZShzY3JhdGNoMUdQUikpOwpAQCAtMTQzMzUsNyArMTQzMzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFCiAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKIAogICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoMUdQUik7CisgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CiAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgc2NyYXRjaDFHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CkBAIC0xNDYwMiw3ICsxNDYwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RLZXlzT3IKICAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGlsZDEo
KSwgb2JqZWN0R1BSKTsKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBvYmplY3RH
UFIsIHN0cnVjdHVyZUdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBvYmplY3RHUFIsIHN0cnVjdHVyZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVy
ZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVy
bywgc2NyYXRjaEdQUikpOwpAQCAtMTQ4MTksOSArMTQ4MjIsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlUHJvbWlzCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7Ci0gICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5j
dGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsKLSAgICBt
X2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0cnVjdHVyZUdQUiwgc3RydWN0dXJl
R1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BS
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0
cnVjdHVyZUdQUikpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVy
bmFsUHJvbWlzZSgpID8gSlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5m
bygpKSwgc2NyYXRjaDFHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkpOwogICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFs
T2JqZWN0KSwgc2NyYXRjaDFHUFIpOwpAQCAtMTQ4NjgsOSArMTQ4NzAsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwogICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7Ci0gICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZUlEKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZUdQUik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBzdHJ1Y3R1cmVHUFIpKTsK
LSAgICBtX2ppdC5lbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKHN0cnVjdHVyZUdQUiwgc3Ry
dWN0dXJlR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVE
YXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olpl
cm8sIHN0cnVjdHVyZUdQUikpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNz
OjppbmZvKCkpLCBzY3JhdGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBn
bG9iYWxPYmplY3QpLCBzY3JhdGNoMUdQUik7CkBAIC0xNTMzMSwxNCArMTUzMzIsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVdlYWtNYXBTZXQoTgogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiB7CiAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwogCiAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigp
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXBH
UFIpOwogI2Vsc2UKLSAgICBHUFJUZW1wb3JhcnkgdGVtcDIodGhpcyk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyh0ZW1wMi5ncHIoKSwgdGVtcEdQUik7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyh0ZW1wMkdQUiwgdGVtcEdQUik7CiAjZW5kaWYKIAogICAgIHN3aXRjaCAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0xNTM2Myw3ICsxNTM2NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BSLCB0
ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgb2JqZWN0R1BS
LCB0ZW1wR1BSLCB0ZW1wMkdQUik7CiAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoKHZhbHVlLm1fdHlw
ZSAmJiAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewpAQCAtMTU0MDIsNyArMTU0MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0UHJvdG90eXBlCiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGls
ZDEoKSwgb2JqZWN0R1BSKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBvYmplY3RHUFIsIHJl
c3VsdFJlZ3MsIHNsb3dDYXNlcyk7CisgICAgICAgIG1faml0LmVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIG9iamVjdEdQUiwgcmVzdWx0UmVncywgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LAogICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIG9iamVjdEdQUikpOwogCkBAIC0xNTQxOSw3ICsxNTQyMSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGUKICAgICAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZUdQUikpOwogCi0gICAgICAgIG1f
aml0LmVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlR1BSLCByZXN1bHRSZWdzLCBzbG93Q2Fz
ZXMpOworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgcmVz
dWx0UmVncywgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
LAogICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZh
bHVlUmVncykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDcgKzg0LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfcHJvdG90eXBlLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mUHJvdG90eXBlKCkpIFwKICAgICBtYWNybyhGdW5jdGlv
blJhcmVEYXRhX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSkgXAogICAgIG1hY3Jv
KEZ1bmN0aW9uUmFyZURhdGFfZXhlY3V0YWJsZSwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpIFwKLSAgICBtYWNybyhGdW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1cmVJRCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmVJRCgpKSBcCisgICAgbWFjcm8oRnVu
Y3Rpb25SYXJlRGF0YV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGVfc3RydWN0dXJl
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZSgpICsgSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpKSBcCisgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9ib3VuZEZ1bmN0aW9uU3RydWN0
dXJlLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoKSkg
XAorICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfYWxsb2NhdGlvblByb2ZpbGVDbGVhcmluZ1dh
dGNocG9pbnQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGVDbGVh
cmluZ1dhdGNocG9pbnQoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRl
clNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSkgXAogICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0
ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlC
dWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg3NywxMSArNzg3NywxMCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGFzUmFyZURhdGEs
IGhhc1N0cnVjdHVyZSk7CiAgICAgICAgIExWYWx1ZSByYXJlRGF0YSA9IG1fb3V0LnN1YihyYXJl
RGF0YVRhZ3MsIG1fb3V0LmNvbnN0SW50UHRyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Ci0g
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihyYXJlRGF0YSwgbV9oZWFw
cy5GdW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihzdHJ1Y3R1cmVJ
RCksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoaGFzU3RydWN0dXJlKSk7CisgICAgICAgIExW
YWx1ZSBzdHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKHJhcmVEYXRhLCBtX2hlYXBzLkZ1bmN0aW9u
UmFyZURhdGFfaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZSk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xv
d0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGhhc1N0cnVjdHVyZSwgY2hlY2tHbG9iYWxPYmplY3RDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0
cnVjdHVyZSA9IGRlY29kZU5vbk51bGxTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuZXF1YWwobV9vdXQubG9hZFB0cihzdHJ1Y3R1cmUsIG1faGVhcHMu
U3RydWN0dXJlX2NsYXNzSW5mbyksIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+aXNJbnRlcm5h
bFByb21pc2UoKSA/IEpTSW50ZXJuYWxQcm9taXNlOjppbmZvKCkgOiBKU1Byb21pc2U6OmluZm8o
KSkpLCB1c3VhbGx5KGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwog
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSwgZmFzdEFsbG9j
YXRpb25DYXNlKTsKQEAgLTc5MzMsMTEgKzc5MzIsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdT
X0VORAogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1JhcmVEYXRhLCBoYXNTdHJ1Y3R1cmUp
OwogICAgICAgICBMVmFsdWUgcmFyZURhdGEgPSBtX291dC5zdWIocmFyZURhdGFUYWdzLCBtX291
dC5jb25zdEludFB0cihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOwotICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIocmFyZURhdGEsIG1faGVhcHMuRnVuY3Rpb25SYXJl
RGF0YV9pbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGVfc3RydWN0dXJlSUQpOwotICAg
ICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIoc3RydWN0dXJlSUQpLCByYXJlbHkoc2xv
d0Nhc2UpLCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOworICAgICAgICBMVmFsdWUgc3RydWN0dXJl
ID0gbV9vdXQubG9hZFB0cihyYXJlRGF0YSwgbV9oZWFwcy5GdW5jdGlvblJhcmVEYXRhX2ludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1cmUpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxs
eShoYXNTdHJ1Y3R1cmUpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhoYXNTdHJ1Y3R1cmUs
IGNoZWNrR2xvYmFsT2JqZWN0Q2FzZSk7Ci0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBkZWNv
ZGVOb25OdWxsU3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9jbGFz
c0luZm8pLCBtX291dC5jb25zdEludFB0cihKU0NsYXNzOjppbmZvKCkpKSwgdXN1YWxseShjaGVj
a0dsb2JhbE9iamVjdENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0dsb2JhbE9iamVjdENhc2UsIGZhc3RBbGxvY2F0aW9uQ2FzZSk7CkBAIC0x
MzcxMiw3ICsxMzcxMCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZUlEOwogICAgICAgICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9k
ZShiYXNlRWRnZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAg
aWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQz
MihzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9v
dXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAKQEAgLTE2NzkxLDcgKzE2Nzg5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgIAogICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pZCgpLmJpdHMoKSksIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJl
LT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+b2Jq
ZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAogICAgICAgICAgICAgb2JqZWN0LCBtX2hlYXBzLkpT
Q2VsbF91c2VmdWxCeXRlcyk7CkBAIC0xOTU3Miw3ICsxOTU3MCw3IEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBt
X291dC5ub3RFcXVhbCgKICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3Ry
aW5nU3RydWN0dXJlLT5pZCgpLmJpdHMoKSkpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
Mih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUg
aXNTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkK
QEAgLTE5NTgxLDcgKzE5NTc5LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAg
ICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkuYml0
cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJl
LT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzUm9wZVN0cmluZyhMVmFsdWUgc3RyaW5n
LCBFZGdlIGVkZ2UgPSBFZGdlKCkpCkBAIC0xOTYyOCw3ICsxOTYyNiw3IEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVy
biBtX291dC5ub3RFcXVhbCgKICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCku
c3ltYm9sU3RydWN0dXJlLT5pZCgpLmJpdHMoKSkpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMih2bSgpLnN5bWJvbFN0cnVjdHVyZS0+aWQoKSkpOwogICAgIH0KICAgICAKICAgICBMVmFs
dWUgaXNTeW1ib2woTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKQEAgLTE5NjM3LDcgKzE5NjM1LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAogICAg
ICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xTdHJ1Y3R1cmUtPmlkKCku
Yml0cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3ltYm9sU3RydWN0
dXJlLT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzTm90SGVhcEJpZ0ludFVua25vd25X
aGV0aGVyQ2VsbChMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKQEAgLTE5NjY2LDcgKzE5NjY0LDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAog
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5iaWdJbnRTdHJ1Y3R1cmUtPmlk
KCkuYml0cygpKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuYmlnSW50U3Ry
dWN0dXJlLT5pZCgpKSk7CiAgICAgfQogCiAgICAgTFZhbHVlIGlzSGVhcEJpZ0ludChMVmFsdWUg
Y2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQpAQCAtMTk2NzUsNyArMTk2
NzMsNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCiAgICAgICAgICAgICBtX291dC5sb2Fk
MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMih2bSgpLmJpZ0ludFN0cnVjdHVyZS0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5iaWdJbnRTdHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9
CiAKICAgICBMVmFsdWUgaXNBcnJheVR5cGVGb3JBcnJheWlmeShMVmFsdWUgY2VsbCwgQXJyYXlN
b2RlIGFycmF5TW9kZSkKQEAgLTIwNDAyLDcgKzIwNDAwLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICBtX291
dC5iaXRPcigKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKFN0cnVjdHVyZUlEOjpudWtlZFN0cnVjdHVyZUlEQml0KSksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIobnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSksCiAgICAgICAgICAg
ICAgICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICBt
X291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgICAgIG1fb3V0LnN0
b3JlUHRyKGJ1dHRlcmZseSwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CkBA
IC0yMDQzMCw3ICsyMDQyOCw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
bV9vdXQuc3RvcmUzMigKICAgICAgICAgICAgIG1fb3V0LmJpdE9yKAogICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihvYmplY3QsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cnVjdHVyZUlEOjpudWtlZFN0cnVjdHVyZUlE
Qml0KSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudWtlZFN0cnVjdHVyZUlE
Qml0KCkpKSwKICAgICAgICAgICAgIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAg
bV9vdXQuc3RvcmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KTsKQEAgLTIwOTc1LDE2ICsyMDk3MywxNSBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5E
CiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVuY2VzKCkuYWRkTGF6aWx5KHRhcmdl
dCk7CiAgICAgfQogCi0gICAgTFZhbHVlIGRlY29kZU5vbk51bGxTdHJ1Y3R1cmUoTFZhbHVlIHN0
cnVjdHVyZUlEKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG1hc2tlZFN0cnVjdHVyZUlEID0gbV9v
dXQuYml0QW5kKHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZUlETWFzaykp
OwotICAgICAgICByZXR1cm4gbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKGdfanNjQ29uZmln
LnN0YXJ0T2ZTdHJ1Y3R1cmVIZWFwKSwgbV9vdXQuemVyb0V4dFB0cihtYXNrZWRTdHJ1Y3R1cmVJ
RCkpOwotICAgIH0KLQogICAgIExWYWx1ZSBsb2FkU3RydWN0dXJlKExWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICByZXR1cm4gZGVjb2RlTm9uTnVsbFN0
cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CisgICAgICAgIExWYWx1ZSB0YWJsZUJhc2UgPSBtX291dC5s
b2FkUHRyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYmFzZSgp
KSk7CisgICAgICAgIExWYWx1ZSB0YWJsZUluZGV4ID0gbV9vdXQuYVNocihzdHJ1Y3R1cmVJRCwg
bV9vdXQuY29uc3RJbnQzMihTdHJ1Y3R1cmVJRFRhYmxlOjpzX251bWJlck9mRW50cm9weUJpdHMp
KTsKKyAgICAgICAgTFZhbHVlIGVudHJvcHlCaXRzID0gbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHRQ
dHIoc3RydWN0dXJlSUQpLCBtX291dC5jb25zdEludDMyKFN0cnVjdHVyZUlEVGFibGU6OnNfZW50
cm9weUJpdHNTaGlmdEZvclN0cnVjdHVyZVBvaW50ZXIpKTsKKyAgICAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5zdHJ1Y3R1cmVUYWJsZSwgdGFibGVC
YXNlLCBtX291dC56ZXJvRXh0UHRyKHRhYmxlSW5kZXgpKTsKKyAgICAgICAgTFZhbHVlIGVuY29k
ZWRTdHJ1Y3R1cmVCaXRzID0gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJu
IG1fb3V0LmJpdFhvcihlbmNvZGVkU3RydWN0dXJlQml0cywgZW50cm9weUJpdHMpOwogICAgIH0K
IAogICAgIExWYWx1ZSB3ZWFrUG9pbnRlcihKU0NlbGwqIHBvaW50ZXIpCkBAIC0yMTAwMCw3ICsy
MDk5Nyw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKIAogICAgIExWYWx1ZSB3ZWFrU3Ry
dWN0dXJlSUQoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKTsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKICAgICB9CiAgICAgCiAg
ICAgTFZhbHVlIHdlYWtTdHJ1Y3R1cmUoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFjdFNsb3RWaXNpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWJzdHJhY3RTbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0
cmFjdFNsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgY2xhc3Mg
Vk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgV2VhazsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgV3Jp
dGVCYXJyaWVyQmFzZTsKLWNsYXNzIFdyaXRlQmFycmllclN0cnVjdHVyZUlEOwogCiBjbGFzcyBB
YnN0cmFjdFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBYnN0cmFjdFNs
b3RWaXNpdG9yKTsKQEAgLTE0NCw4ICsxNDMsNiBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VCwgVHJhaXRzPiYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRy
YWl0cz4gdm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+
Jik7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmKTsKLSAg
ICB2b2lkIGFwcGVuZEhpZGRlbihjb25zdCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCYpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZChJdGVyYXRvciBiZWdpbiAs
IEl0ZXJhdG9yIGVuZCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhjb25z
dCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+PiosIHNp
emVfdCBjb3VudCk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIFJhd1ZhbHVlVHJhaXRzPFVua25vd24+Pios
IHNpemVfdCBjb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BYnN0cmFj
dFNsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fic3RyYWN0U2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OCwxNiArMTU4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEFi
c3RyYWN0U2xvdFZpc2l0b3I6OgogICAgIGFwcGVuZEhpZGRlblVuYmFycmllcmVkKHNsb3QuZ2V0
KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5k
KGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVuZFVuYmFy
cmllcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKGNvbnN0IFdy
aXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVuZEhpZGRlblVuYmFycmll
cmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgQWJzdHJhY3RTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuVW5iYXJyaWVyZWQo
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAK
ICNpbmNsdWRlICJTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU3RvY2hh
c3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTdG9wSWZOZWNlc3Nh
cnlUaW1lci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJTd2VlcGluZ1Njb3BlLmgiCkBAIC0zODksOCArMzg4LDggQEAgSGVhcDo6SGVh
cChWTSYgdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgc3RyaW5nT2JqZWN0U3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFwQ2VsbFR5cGUsIFN0cmluZ09iamVjdCkKICAg
ICAsIHN0cnVjdHVyZUNoYWluU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoKnRoaXMsIGNlbGxIZWFw
Q2VsbFR5cGUsIFN0cnVjdHVyZUNoYWluKQogICAgICwgc3RydWN0dXJlUmFyZURhdGFTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3Ry
dWN0dXJlUmFyZURhdGEpIC8vIEhhc2g6MHhhY2E0ZTYyZAotICAgICwgc3RydWN0dXJlU3BhY2Uo
Iklzb2xhdGVkU3RydWN0dXJlU3BhY2UiLCAqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgc2l6ZW9mKFN0cnVjdHVyZSksIFN0cnVjdHVyZTo6bnVtYmVyT2ZMb3dlclRpZXJDZWxs
cywgbWFrZVVuaXF1ZTxTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigiU3RydWN0dXJl
IikpCi0gICAgLCBicmFuZGVkU3RydWN0dXJlU3BhY2UoIklzb2xhdGVkQnJhbmRlZFN0cnVjdHVy
ZVNwYWNlIiwgKnRoaXMsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIHNpemVvZihCcmFu
ZGVkU3RydWN0dXJlKSwgQnJhbmRlZFN0cnVjdHVyZTo6bnVtYmVyT2ZMb3dlclRpZXJDZWxscywg
bWFrZVVuaXF1ZTxTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigiU3RydWN0dXJlIikp
CisgICAgLCBzdHJ1Y3R1cmVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCgqdGhpcywgZGVzdHJ1Y3Rp
YmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3RydWN0dXJlKQorICAgICwgYnJhbmRlZFN0cnVjdHVyZVNw
YWNlIElTT19TVUJTUEFDRV9JTklUKCp0aGlzLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBl
LCBCcmFuZGVkU3RydWN0dXJlKQogICAgICwgc3ltYm9sVGFibGVTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVCgqdGhpcywgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU3ltYm9sVGFibGUpIC8v
IEhhc2g6MHhjNTIxNWFmZAogICAgICwgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZXNXaXRoQ29u
c3RyYWludHMoZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVNwYWNlKQogICAgICwgZXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZXNXaXRoRmluYWxpemVycyhleGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
U3BhY2UpCkBAIC0xNjA2LDYgKzE2MDUsOCBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIGlmICh2bSgpLnR5cGVQcm9maWxlcigpKQogICAgICAgICAg
ICAgdm0oKS50eXBlUHJvZmlsZXIoKS0+aW52YWxpZGF0ZVR5cGVTZXRDYWNoZSh2bSgpKTsKIAor
ICAgICAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKKwogICAgICAgICBy
ZWFwV2Vha0hhbmRsZXMoKTsKICAgICAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFz
aFRhYmxlcygpOwogICAgICAgICBzd2VlcEFycmF5QnVmZmVycygpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVk
ZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJ
RFRhYmxlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNuZXNzLmgiCiAjaW5jbHVkZSAiV2Vha0hh
bmRsZU93bmVyLmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgpAQCAtMjc1LDYg
KzI3NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJl
dHVybiAhIW1fZGVmZXJyYWxEZXB0aDsgfQogCisgICAgU3RydWN0dXJlSURUYWJsZSYgc3RydWN0
dXJlSURUYWJsZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlSURUYWJsZTsgfQorCiAgICAgQ29kZUJs
b2NrU2V0JiBjb2RlQmxvY2tTZXQoKSB7IHJldHVybiAqbV9jb2RlQmxvY2tzOyB9CiAKICNpZiBV
U0UoRk9VTkRBVElPTikKQEAgLTU5NCw2ICs1OTYsNyBAQCBwcml2YXRlOgogICAgIE1hcmthYmxl
PENvbGxlY3Rpb25TY29wZSwgRW51bU1hcmthYmxlVHJhaXRzPENvbGxlY3Rpb25TY29wZT4+IG1f
bGFzdENvbGxlY3Rpb25TY29wZTsKICAgICBMb2NrIG1fcmFjZU1hcmtTdGFja0xvY2s7CiAKKyAg
ICBTdHJ1Y3R1cmVJRFRhYmxlIG1fc3RydWN0dXJlSURUYWJsZTsKICAgICBNYXJrZWRTcGFjZSBt
X29iamVjdFNwYWNlOwogICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBt
X2FycmF5QnVmZmVyczsKICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVNpemUgeyAwIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDEzICszMCw3MiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoQ1N0cmluZyBuYW1lKQotICAgIDogQmFz
ZShuYW1lKQorI2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgOiBtX2RlYnVn
SGVhcChuYW1lLmRhdGEoKSkKKyNlbmRpZgogeworICAgIFVOVVNFRF9QQVJBTShuYW1lKTsKIH0K
IAogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KQogewotICAgIHJlbGVhc2VNZW1vcnlGcm9tU3ViY2xhc3NEZXN0cnVjdG9yKCk7CisjaWYgIUVO
QUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHZvaWQqIGJsb2NrID0gbV9ibG9ja3Nb
aV07CisgICAgICAgIGlmICghbV9jb21taXR0ZWQucXVpY2tHZXQoaSkpCisgICAgICAgICAgICBX
VEY6OmZhc3RDb21taXRBbGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
KTsKKyAgICAgICAgZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIC8vIFNpbmNlIHRoaXMgaXMg
ZGVzaWduZWQgc3BlY2lhbGx5IGZvciBJc29TdWJzcGFjZSwgd2Uga25vdyB0aGF0IHdlIHdpbGwg
b25seSBiZSBhc2tlZCB0bworICAgIC8vIGFsbG9jYXRlIE1hcmtlZEJsb2Nrcy4KKyAgICBSRUxF
QVNFX0FTU0VSVChhbGlnbm1lbnQgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoc2l6ZSA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKworI2lmIEVOQUJM
RShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgcmV0dXJuIG1fZGVidWdIZWFwLm1lbWFsaWdu
KE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIHRydWUpOwor
I2Vsc2UKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgCisgICAgbV9maXJzdFVu
Y29tbWl0dGVkID0gbV9jb21taXR0ZWQuZmluZEJpdChtX2ZpcnN0VW5jb21taXR0ZWQsIGZhbHNl
KTsKKyAgICBpZiAobV9maXJzdFVuY29tbWl0dGVkIDwgbV9ibG9ja3Muc2l6ZSgpKSB7CisgICAg
ICAgIG1fY29tbWl0dGVkLnF1aWNrU2V0KG1fZmlyc3RVbmNvbW1pdHRlZCk7CisgICAgICAgIHZv
aWQqIHJlc3VsdCA9IG1fYmxvY2tzW21fZmlyc3RVbmNvbW1pdHRlZF07CisgICAgICAgIFdURjo6
ZmFzdENvbW1pdEFsaWduZWRNZW1vcnkocmVzdWx0LCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5RmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6
OmJsb2NrU2l6ZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOworICAgIG1fYmxvY2tzLmFwcGVu
ZChyZXN1bHQpOworICAgIG1fYmxvY2tJbmRpY2VzLmFkZChyZXN1bHQsIGluZGV4KTsKKyAgICBp
ZiAobV9ibG9ja3MuY2FwYWNpdHkoKSAhPSBtX2NvbW1pdHRlZC5zaXplKCkpCisgICAgICAgIG1f
Y29tbWl0dGVkLnJlc2l6ZShtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsKKyAgICBtX2NvbW1pdHRlZC5x
dWlja1NldChpbmRleCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCit2b2lkIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqIGJhc2VQdHIp
Cit7CisjaWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKKyAgICBtX2RlYnVnSGVhcC5m
cmVlKGJhc2VQdHIpOworI2Vsc2UKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAg
CisgICAgYXV0byBpdGVyID0gbV9ibG9ja0luZGljZXMuZmluZChiYXNlUHRyKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChpdGVyICE9IG1fYmxvY2tJbmRpY2VzLmVuZCgpKTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGl0ZXItPnZhbHVlOworICAgIG1fY29tbWl0dGVkLnF1aWNrQ2xlYXIoaW5kZXgpOwor
ICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IHN0ZDo6bWluKGluZGV4LCBtX2ZpcnN0VW5jb21taXR0
ZWQpOworICAgIFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1lbW9yeShiYXNlUHRyLCBNYXJrZWRC
bG9jazo6YmxvY2tTaXplKTsKKyNlbmRpZgogfQogCiB2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTY4LDI1ICsxMjcsNSBAQCB2
b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlSZWFsCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5TWFsbG9jQmxvY2soKQotewotICAgIHJldHVybiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhNYXJr
ZWRCbG9jazo6YmxvY2tTaXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLX0KLQotdm9pZCBJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQmxvY2sodm9pZCogYmxvY2spCi17Ci0gICAg
ZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKLX0KLQotdm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBXVEY6OmZhc3RDb21taXRBbGln
bmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKLX0KLQotdm9pZCBJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNvbW1pdEJsb2NrKHZvaWQqIGJsb2NrKQotewotICAg
IFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1lbW9yeShibG9jaywgTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZp
c2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJJc29NZW1vcnlBbGxvY2F0b3JCYXNlLmgiCisjaW5jbHVkZSAi
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM0
LDI0ICszNCwzMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBJc29NZW1vcnlBbGxvY2F0b3JCYXNlIHsKK2NsYXNz
IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IElzb01lbW9yeUFsbG9jYXRvckJh
c2U7Ci0KICAgICBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKENTdHJpbmcpOwogICAgIH5Jc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgZmluYWw7CiAKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUFs
aWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIGZpbmFsOworICAgIHZv
aWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIGZpbmFsOworCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkKiB0cnlBbGxvY2F0ZU1lbW9yeShzaXpl
X3QpIGZpbmFsOwogICAgIHZvaWQgZnJlZU1lbW9yeSh2b2lkKikgZmluYWw7CiAgICAgdm9pZCog
dHJ5UmVhbGxvY2F0ZU1lbW9yeSh2b2lkKiwgc2l6ZV90KSBmaW5hbDsKIAotcHJvdGVjdGVkOgot
ICAgIHZvaWQqIHRyeU1hbGxvY0Jsb2NrKCkgZmluYWw7Ci0gICAgdm9pZCBmcmVlQmxvY2sodm9p
ZCogYmxvY2spIGZpbmFsOwotICAgIHZvaWQgY29tbWl0QmxvY2sodm9pZCogYmxvY2spIGZpbmFs
OwotICAgIHZvaWQgZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykgZmluYWw7Citwcml2YXRlOgor
I2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04pCisgICAgLy8gSWYgYnJlYWtkb3duIGlz
IGVuYWJsZWQsIHdlIGRvIG5vdCBlbnN1cmUgSXNvLWZlYXR1cmUuIFRoaXMgaXMgdG90YWxseSBP
SyBzaW5jZSBicmVha2Rvd24gaXMgbWVtb3J5IGJsb2F0IGRlYnVnZ2luZyBmZWF0dXJlLgorICAg
IFdURjo6RGVidWdIZWFwIG1fZGVidWdIZWFwOworI2Vsc2UKKyAgICBWZWN0b3I8dm9pZCo+IG1f
YmxvY2tzOworICAgIEhhc2hNYXA8dm9pZCosIHVuc2lnbmVkPiBtX2Jsb2NrSW5kaWNlczsKKyAg
ICBCaXRWZWN0b3IgbV9jb21taXR0ZWQ7CisgICAgdW5zaWduZWQgbV9maXJzdFVuY29tbWl0dGVk
IHsgMCB9OworICAgIExvY2sgbV9sb2NrOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9yeUFsbG9jYXRvckJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9y
eUFsbG9jYXRvckJhc2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29NZW1vcnlBbGxvY2F0b3JCYXNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklzb01lbW9yeUFsbG9jYXRv
ckJhc2UuaCIKLQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1Jc29NZW1vcnlBbGxvY2F0b3JCYXNlOjpJc29NZW1vcnlBbGxvY2F0b3JCYXNlKENTdHJpbmcg
bmFtZSkKLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotICAgIDogbV9kZWJ1Z0hl
YXAobmFtZS5kYXRhKCkpCi0jZW5kaWYKLXsKLSAgICBVTlVTRURfUEFSQU0obmFtZSk7Ci19Ci0K
LUlzb01lbW9yeUFsbG9jYXRvckJhc2U6On5Jc29NZW1vcnlBbGxvY2F0b3JCYXNlKCkKLXsKLX0K
LQotLy8gV2UgbmVlZCB0byBjYWxsIHRoaXMgZnJvbSB0aGUgZGVyaXZlZCBjbGFzcydzIGRlc3Ry
dWN0b3IgYmVjYXVzZSBpdCdzIHVuZGVmaW5lZCBiZWhhdmlvciB0byBjYWxsIHB1cmUgdmlydHVh
bCBtZXRob2RzIGZyb20gd2l0aGluIGEgZGVzdHJ1Y3Rvci4KLXZvaWQgSXNvTWVtb3J5QWxsb2Nh
dG9yQmFzZTo6cmVsZWFzZU1lbW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKQotewotI2lmICFF
TkFCTEUoTUFMTE9DX0hFQVBfQlJFQUtET1dOKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICB2b2lkKiBibG9jayA9IG1fYmxvY2tz
W2ldOwotICAgICAgICBpZiAoIW1fY29tbWl0dGVkLnF1aWNrR2V0KGkpKQotICAgICAgICAgICAg
Y29tbWl0QmxvY2soYmxvY2spOwotICAgICAgICBmcmVlQmxvY2soYmxvY2spOwotICAgIH0KLSNl
bmRpZgotfQotCi12b2lkKiBJc29NZW1vcnlBbGxvY2F0b3JCYXNlOjp0cnlBbGxvY2F0ZUFsaWdu
ZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAgLy8gU2luY2Ug
dGhpcyBpcyBkZXNpZ25lZCBzcGVjaWFsbHkgZm9yIElzb1N1YnNwYWNlLCB3ZSBrbm93IHRoYXQg
d2Ugd2lsbCBvbmx5IGJlIGFza2VkIHRvCi0gICAgLy8gYWxsb2NhdGUgTWFya2VkQmxvY2tzLgot
ICAgIFJFTEVBU0VfQVNTRVJUKGFsaWdubWVudCA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotCi0j
aWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKLSAgICByZXR1cm4gbV9kZWJ1Z0hlYXAu
bWVtYWxpZ24oTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwg
dHJ1ZSk7Ci0jZWxzZQotICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAKLSAgICBt
X2ZpcnN0VW5jb21taXR0ZWQgPSBtX2NvbW1pdHRlZC5maW5kQml0KG1fZmlyc3RVbmNvbW1pdHRl
ZCwgZmFsc2UpOwotICAgIGlmIChtX2ZpcnN0VW5jb21taXR0ZWQgPCBtX2Jsb2Nrcy5zaXplKCkp
IHsKLSAgICAgICAgbV9jb21taXR0ZWQucXVpY2tTZXQobV9maXJzdFVuY29tbWl0dGVkKTsKLSAg
ICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsKLSAgICAg
ICAgY29tbWl0QmxvY2socmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5TWFsbG9jQmxvY2soKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nr
cy5zaXplKCk7Ci0gICAgbV9ibG9ja3MuYXBwZW5kKHJlc3VsdCk7Ci0gICAgbV9ibG9ja0luZGlj
ZXMuYWRkKHJlc3VsdCwgaW5kZXgpOwotICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1f
Y29tbWl0dGVkLnNpemUoKSkKLSAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNh
cGFjaXR5KCkpOwotICAgIG1fY29tbWl0dGVkLnF1aWNrU2V0KGluZGV4KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotI2VuZGlmCi19Ci0KLXZvaWQgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZTo6ZnJlZUFs
aWduZWRNZW1vcnkodm9pZCogYmFzZVB0cikKLXsKLSNpZiBFTkFCTEUoTUFMTE9DX0hFQVBfQlJF
QUtET1dOKQotICAgIG1fZGVidWdIZWFwLmZyZWUoYmFzZVB0cik7Ci0jZWxzZQotICAgIExvY2tl
ciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAKLSAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNl
cy5maW5kKGJhc2VQdHIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGlj
ZXMuZW5kKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7Ci0gICAgbV9jb21t
aXR0ZWQucXVpY2tDbGVhcihpbmRleCk7Ci0gICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjpt
aW4oaW5kZXgsIG1fZmlyc3RVbmNvbW1pdHRlZCk7Ci0gICAgZGVjb21taXRCbG9jayhiYXNlUHRy
KTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxsb2NhdG9yQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb01lbW9yeUFsbG9jYXRvckJhc2UuaAkocmV2aXNp
b24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvTWVtb3J5QWxsb2Nh
dG9yQmFzZS5oCShub25leGlzdGVudCkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIElz
b01lbW9yeUFsbG9jYXRvckJhc2UgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7Ci1w
dWJsaWM6Ci0gICAgSXNvTWVtb3J5QWxsb2NhdG9yQmFzZShDU3RyaW5nKTsKLSAgICB+SXNvTWVt
b3J5QWxsb2NhdG9yQmFzZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCogdHJ5QWxsb2NhdGVBbGln
bmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBmaW5hbDsKLSAgICB2b2lk
IGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBmaW5hbDsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
cmVsZWFzZU1lbW9yeUZyb21TdWJjbGFzc0Rlc3RydWN0b3IoKTsKLSAgICB2aXJ0dWFsIHZvaWQq
IHRyeU1hbGxvY0Jsb2NrKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcmVlQmxvY2sodm9pZCog
YmxvY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmxvY2sodm9pZCogYmxvY2spID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykgPSAwOwotCi0j
aWYgRU5BQkxFKE1BTExPQ19IRUFQX0JSRUFLRE9XTikKLXByb3RlY3RlZDoKLSAgICAvLyBJZiBi
cmVha2Rvd24gaXMgZW5hYmxlZCwgd2UgZG8gbm90IGVuc3VyZSBJc28tZmVhdHVyZS4gVGhpcyBp
cyB0b3RhbGx5IE9LIHNpbmNlIGJyZWFrZG93biBpcyBtZW1vcnkgYmxvYXQgZGVidWdnaW5nIGZl
YXR1cmUuCi0gICAgV1RGOjpEZWJ1Z0hlYXAgbV9kZWJ1Z0hlYXA7Ci0jZWxzZQotcHJpdmF0ZToK
LSAgICBWZWN0b3I8dm9pZCo+IG1fYmxvY2tzOwotICAgIEhhc2hNYXA8dm9pZCosIHVuc2lnbmVk
PiBtX2Jsb2NrSW5kaWNlczsKLSAgICBCaXRWZWN0b3IgbV9jb21taXR0ZWQ7Ci0gICAgdW5zaWdu
ZWQgbV9maXJzdFVuY29tbWl0dGVkIHsgMCB9OwotICAgIExvY2sgbV9sb2NrOwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMs
MTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUlzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmIGhlYXAsIGNvbnN0IEhlYXBDZWxsVHlwZSYgaGVhcENlbGxUeXBlLCBz
aXplX3Qgc2l6ZSwgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzLCBzdGQ6OnVuaXF1ZV9w
dHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4mJiBhbGxvY2F0b3IpCitJc29TdWJzcGFjZTo6SXNv
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBjb25zdCBIZWFwQ2VsbFR5cGUmIGhl
YXBDZWxsVHlwZSwgc2l6ZV90IHNpemUsIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJDZWxscykK
ICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAgLCBtX2RpcmVjdG9yeShXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKICAgICAsIG1fbG9j
YWxBbGxvY2F0b3IoJm1fZGlyZWN0b3J5KQotICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKGFsbG9jYXRvciA/IFdURk1vdmUoYWxsb2NhdG9yKSA6IG1ha2VVbmlxdWU8SXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcj4obmFtZSkpCisgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IobWFrZVVuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihuYW1lKSkKIHsKICAgICBt
X3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3VudCA9IG51bWJlck9mTG93ZXJUaWVyQ2VsbHM7CiAg
ICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KHNpemUpID09IGNlbGxTaXplKCkpOwpAQCAtOTksOSArOTksOCBAQCB2b2lkKiBJc29TdWJzcGFj
ZTo6dHJ5QWxsb2NhdGVGcm9tTG93ZXJUCiAgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlv
bik7CiAgICAgfQogICAgIGlmIChtX3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3VudCkgewotICAg
ICAgICBQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IFByZWNpc2VBbGxvY2F0aW9uOjp0
cnlDcmVhdGVGb3JMb3dlclRpZXIobV9zcGFjZS5oZWFwKCksIGNlbGxTaXplKCksIHRoaXMsIC0t
bV9yZW1haW5pbmdMb3dlclRpZXJDZWxsQ291bnQpOwotICAgICAgICBpZiAoYWxsb2NhdGlvbikK
LSAgICAgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlvbik7CisgICAgICAgIFByZWNpc2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gUHJlY2lzZUFsbG9jYXRpb246OmNyZWF0ZUZvckxvd2Vy
VGllcihtX3NwYWNlLmhlYXAoKSwgY2VsbFNpemUoKSwgdGhpcywgLS1tX3JlbWFpbmluZ0xvd2Vy
VGllckNlbGxDb3VudCk7CisgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlvbik7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxOCArMjYsMTggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKLSNpbmNsdWRlICJJ
c29NZW1vcnlBbGxvY2F0b3JCYXNlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKICNpbmNsdWRl
ICJTdWJzcGFjZUFjY2Vzcy5oIgogI2luY2x1ZGUgPHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRh
aWwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I7CiBjbGFzcyBJc29DZWxsU2V0OwogCiBjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJz
cGFjZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBlJiwgc2l6ZV90IHNpemUsIHVpbnQ4X3Qg
bnVtYmVyT2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9jYXRv
ckJhc2U+JiYgPSBudWxscHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmLCBjb25zdCBIZWFwQ2VsbFR5cGUmLCBzaXplX3QsIHVpbnQ4X3Qg
bnVtYmVyT2ZMb3dlclRpZXJDZWxscyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfklzb1N1YnNw
YWNlKCkgb3ZlcnJpZGU7CiAKICAgICBzaXplX3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2RpcmVj
dG9yeS5jZWxsU2l6ZSgpOyB9CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
QmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7CiAgICAgTG9jYWxBbGxvY2F0b3IgbV9sb2NhbEFs
bG9jYXRvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvTWVtb3J5QWxsb2NhdG9yQmFzZT4gbV9p
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0PFByZWNpc2VBbGxvY2F0aW9uLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UHJl
Y2lzZUFsbG9jYXRpb24+PiBtX2xvd2VyVGllckZyZWVMaXN0OwogICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxJc29DZWxsU2V0LCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2Vs
bFNldHM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9j
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNp
c2VBbGxvY2F0aW9uLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyAr
MTIwLDcgQEAgUHJlY2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0aW9uOjp0cgogfQogCiAK
LVByZWNpc2VBbGxvY2F0aW9uKiBQcmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJU
aWVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBTdWJzcGFjZSogc3Vic3BhY2UsIHVpbnQ4X3Qg
bG93ZXJUaWVySW5kZXgpCitQcmVjaXNlQWxsb2NhdGlvbiogUHJlY2lzZUFsbG9jYXRpb246OmNy
ZWF0ZUZvckxvd2VyVGllcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgU3Vic3BhY2UqIHN1YnNw
YWNlLCB1aW50OF90IGxvd2VyVGllckluZGV4KQogewogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRh
dGVERkdEb2VzR0MpCiAgICAgICAgIGhlYXAudm0oKS52ZXJpZnlDYW5HQygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBQcmVjaXNlQWxsb2NhdGlvbiogdHJ5Q3JlYXRlKEhlYXAmLCBzaXplX3QsIFN1YnNwYWNlKiwg
dW5zaWduZWQgaW5kZXhJblNwYWNlKTsKIAotICAgIHN0YXRpYyBQcmVjaXNlQWxsb2NhdGlvbiog
dHJ5Q3JlYXRlRm9yTG93ZXJUaWVyKEhlYXAmLCBzaXplX3QsIFN1YnNwYWNlKiwgdWludDhfdCBs
b3dlclRpZXJJbmRleCk7CisgICAgc3RhdGljIFByZWNpc2VBbGxvY2F0aW9uKiBjcmVhdGVGb3JM
b3dlclRpZXIoSGVhcCYsIHNpemVfdCwgU3Vic3BhY2UqLCB1aW50OF90IGxvd2VyVGllckluZGV4
KTsKICAgICBQcmVjaXNlQWxsb2NhdGlvbiogcmV1c2VGb3JMb3dlclRpZXIoKTsKIAogICAgIFBy
ZWNpc2VBbGxvY2F0aW9uKiB0cnlSZWFsbG9jYXRlKHNpemVfdCwgU3Vic3BhY2UqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDkgKzE1MiwxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRK
U0NlbGxPckF1eGlsaWFyCiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiR0MgdHlwZTog
IiwgaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludCgiT2JqZWN0IGF0OiAiLCBSYXdQb2ludGVyKGpzQ2VsbCksICJcbiIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJl
IElEOiAiLCBzdHJ1Y3R1cmVJRC5iaXRzKCksICIgKCIsIFJhd1BvaW50ZXIoc3RydWN0dXJlSUQu
ZGVjb2RlKCkpLCAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0
dXJlIElEOiAiLCBzdHJ1Y3R1cmVJRCwgIiAoMHgiLCBmb3JtYXQoIiV4Iiwgc3RydWN0dXJlSUQp
LCAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJlIElEIHRh
YmxlIHNpemU6ICIsIGhlYXAoKS0+c3RydWN0dXJlSURUYWJsZSgpLnNpemUoKSwgIlxuIik7CiAj
ZWxzZQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZTogIiwgUmF3UG9p
bnRlcihzdHJ1Y3R1cmVJRC5kZWNvZGUoKSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIlN0cnVjdHVyZTogIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmVJRCksICJcbiIpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiT2JqZWN0IGNvbnRlbnRzOiIp
OwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKQpA
QCAtMTg1LDEzICsxODYsMTMgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhp
bGlhcgogICAgICAgICAgICAgZGllKCJHQyBzY2FuIGZvdW5kIGNvcnJ1cHQgb2JqZWN0OiBzdHJ1
Y3R1cmVJRCBpcyB6ZXJvIVxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBJdCdzIG5vdCBPSyBm
b3IgdGhlIHN0cnVjdHVyZSB0byBiZSBudWtlZCBhdCBhbnkgR0Mgc2NhbiBwb2ludC4KLSAgICAg
ICAgaWYgKHN0cnVjdHVyZUlELmlzTnVrZWQoKSkKKyAgICAgICAgaWYgKGlzTnVrZWQoc3RydWN0
dXJlSUQpKQogICAgICAgICAgICAgZGllKCJHQyBzY2FuIGZvdW5kIG9iamVjdCBpbiBiYWQgc3Rh
dGU6IHN0cnVjdHVyZUlEIGlzIG51a2VkIVxuIik7Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFRo
aXMgZGV0ZWN0cyB0aGUgd29yc3Qgb2YgdGhlIGJhZG5lc3MuCi0gICAgICAgIEludGVncml0eTo6
YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCk7CisgICAgICAgIEludGVncml0eTo6YXVkaXRT
dHJ1Y3R1cmVJRChoZWFwKCktPnN0cnVjdHVyZUlEVGFibGUoKSwgc3RydWN0dXJlSUQpOwogICAg
IH07Ci0KKyAgICAKICAgICAvLyBJbiBkZWJ1ZyBtb2RlLCB3ZSB2YWxpZGF0ZSBiZWZvcmUgbWFy
a2luZyBzaW5jZSB0aGlzIG1ha2VzIGl0IGNsZWFyZXIgd2hhdCB0aGUgcHJvYmxlbQogICAgIC8v
IHdhcy4gSXQncyBhbHNvIHNsb3dlciwgc28gd2UgZG9uJ3QgZG8gaXQgbm9ybWFsbHkuCiAgICAg
aWYgKEFTU0VSVF9FTkFCTEVEICYmIGlzSlNDZWxsS2luZChoZWFwQ2VsbC0+Y2VsbEtpbmQoKSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDggKzkyLDYgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPiB2b2lkIGFwcGVuZChjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFQsIFRyYWl0cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFp
dHM+IHZvaWQgYXBwZW5kSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYp
OwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJik7Ci0gICAg
dm9pZCBhcHBlbmRIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9pZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJ
dGVyYXRvciBlbmQpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXpl
X3QgY291bnQpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXNIaWRkZW4oY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBSYXdWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBz
aXplX3QgY291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTYg
KzExNiw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGkKICAgICBh
cHBlbmRIaWRkZW5VbmJhcnJpZXJlZChzbG90LmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoY29uc3QgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQmIHNs
b3QpCi17Ci0gICAgYXBwZW5kVW5iYXJyaWVyZWQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihz
bG90LmdldCgpKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuKGNvbnN0IFdyaXRlQmFycmllclN0cnVjdHVyZUlEJiBzbG90KQotewotICAgIGFwcGVu
ZEhpZGRlblVuYmFycmllcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc2xvdC5nZXQoKSkp
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdHJ1Y3R1
cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCi0KLSNpbmNsdWRlICJKU0NDb25m
aWcuaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgotCi0jaW5jbHVkZSA8d3RmL09TQWxsb2Nh
dG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1TdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKENTdHJpbmcgbmFtZSkKLSAgICA6
IEJhc2UobmFtZSkKLXsKLX0KLQotU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6flN0
cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQotewotICAgIHJlbGVhc2VNZW1vcnlGcm9t
U3ViY2xhc3NEZXN0cnVjdG9yKCk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgi
U3RydWN0dXJlKCIsIFJhd1BvaW50ZXIodGhpcyksICIpIik7Ci19Ci0KLXZvaWQqIFN0cnVjdHVy
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlTWVtb3J5KHNpemVfdCkKLXsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpmcmVlTWVtb3J5KHZvaWQqKQotewotICAgIC8vIFN0cnVjdHVyZXMgZG8gbm90IHN1cHBv
cnQgUHJlY2lzZSBhbGxvY2F0aW9ucyByaWdodCBub3cuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCogU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5UmVhbGxvY2F0ZU1lbW9yeSh2b2lkKiwgc2l6ZV90KQotewotICAgIC8vIFN0cnVjdHVyZXMg
ZG8gbm90IHN1cHBvcnQgUHJlY2lzZSBhbGxvY2F0aW9ucyByaWdodCBub3cuCi0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2lmIENQVShBRERSRVNTNjQpCi0KLWNsYXNz
IFN0cnVjdHVyZU1lbW9yeU1hbmFnZXIgewotcHVibGljOgotICAgIFN0cnVjdHVyZU1lbW9yeU1h
bmFnZXIoKQotICAgIHsKLSAgICAgICAgLy8gRG9uJ3QgdXNlIHRoZSBmaXJzdCBwYWdlIGJlY2F1
c2UgemVybyBpcyB1c2VkIGFzIHRoZSBlbXB0eSBTdHJ1Y3R1cmVJRCBhbmQgdGhlIGZpcnN0IGFs
bG9jYXRpb24gd2lsbCBjb25mbGljdC4KLSAgICAgICAgbV91c2VkQmxvY2tzLnNldCgwKTsKLSAg
ICB9Ci0KLSAgICB2b2lkKiB0cnlNYWxsb2NTdHJ1Y3R1cmVCbG9jaygpCi0gICAgewotICAgICAg
ICBzaXplX3QgZnJlZUluZGV4OwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgICAgICAgICBjb25zdGV4cHIgc2l6ZV90IHN0YXJ0SW5kZXggPSAwOwot
ICAgICAgICAgICAgZnJlZUluZGV4ID0gbV91c2VkQmxvY2tzLmZpbmRCaXQoc3RhcnRJbmRleCwg
MCk7Ci0gICAgICAgICAgICBBU1NFUlQoZnJlZUluZGV4IDw9IG1fdXNlZEJsb2Nrcy5iaXRDb3Vu
dCgpKTsKLSAgICAgICAgICAgIGlmIChmcmVlSW5kZXggKiBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
ID49IHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIG1fdXNlZEJsb2Nrcy5zZXQoZnJlZUluZGV4KTsKLSAgICAgICAg
fQotCi0gICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2Vk
QmxvY2sqPihnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVhcCkgKyBmcmVlSW5kZXggKiBN
YXJrZWRCbG9jazo6YmxvY2tTaXplOwotICAgICAgICBjb25zdGV4cHIgYm9vbCB3cml0YWJsZSA9
IHRydWU7Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGV4ZWN1dGFibGUgPSBmYWxzZTsKLSAgICAg
ICAgT1NBbGxvY2F0b3I6OmNvbW1pdChibG9jaywgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgd3Jp
dGFibGUsIGV4ZWN1dGFibGUpOwotICAgICAgICByZXR1cm4gYmxvY2s7Ci0gICAgfQotCi0gICAg
dm9pZCBmcmVlU3RydWN0dXJlQmxvY2sodm9pZCogYmxvY2tQdHIpCi0gICAgewotICAgICAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXQoYmxvY2tQdHIsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwot
ICAgICAgICB1aW50cHRyX3QgYmxvY2sgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmxv
Y2tQdHIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0
dXJlSGVhcCA8PSBibG9jayAmJiBibG9jayA8IGdfanNjQ29uZmlnLnN0YXJ0T2ZTdHJ1Y3R1cmVI
ZWFwICsgc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YmxvY2tTaXplPihibG9jaykgPT0gYmxv
Y2spOwotCi0gICAgICAgIExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgbV91c2VkQmxv
Y2tzLnF1aWNrQ2xlYXIoKGJsb2NrIC0gZ19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXAp
IC8gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExvY2sg
bV9sb2NrOwotICAgIEJpdFZlY3RvciBtX3VzZWRCbG9ja3M7Ci19OwotCi1zdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPFN0cnVjdHVyZU1lbW9yeU1hbmFnZXI+IHNfc3RydWN0dXJlTWVtb3J5TWFu
YWdlcjsKLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjppbml0aWFsaXpl
U3RydWN0dXJlQWRkcmVzc1NwYWNlKCkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KGhhc09uZUJpdFNl
dChzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUpKTsKLQotICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZT
dHJ1Y3R1cmVIZWFwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KE9TQWxsb2NhdG9yOjpy
ZXNlcnZlVW5jb21taXR0ZWRBbGlnbmVkKHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSwgT1NBbGxv
Y2F0b3I6OkZhc3RNYWxsb2NQYWdlcykpOwotICAgIHNfc3RydWN0dXJlTWVtb3J5TWFuYWdlci5j
b25zdHJ1Y3QoKTsKLQotICAgIEFTU0VSVCgoZ19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhl
YXAgJiB+c3RydWN0dXJlSURNYXNrKSA9PSBnX2pzY0NvbmZpZy5zdGFydE9mU3RydWN0dXJlSGVh
cCk7Ci19Ci0KLXZvaWQqIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeU1hbGxv
Y0Jsb2NrKCkKLXsKLSAgICByZXR1cm4gc19zdHJ1Y3R1cmVNZW1vcnlNYW5hZ2VyLT50cnlNYWxs
b2NTdHJ1Y3R1cmVCbG9jaygpOwotfQotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmZyZWVCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBzX3N0cnVjdHVyZU1lbW9yeU1h
bmFnZXItPmZyZWVTdHJ1Y3R1cmVCbG9jayhibG9jayk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6Y29tbWl0QmxvY2sodm9pZCogYmxvY2spCi17Ci0gICAgY29u
c3RleHByIGJvb2wgd3JpdGFibGUgPSB0cnVlOwotICAgIGNvbnN0ZXhwciBib29sIGV4ZWN1dGFi
bGUgPSBmYWxzZTsKLSAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KGJsb2NrLCBNYXJrZWRCbG9jazo6
YmxvY2tTaXplLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6ZGVjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsKLSAgICBP
U0FsbG9jYXRvcjo6ZGVjb21taXQoYmxvY2ssIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwotfQot
Ci0jZWxzZSAvLyBub3QgQ1BVKEFERFJFU1M2NCkKLQotLy8gRklYTUU6IFRoaXMgaXMgdGhlIHNh
bWUgYXMgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBtYXliZSB3ZSBzaG91bGQganVzdCB1c2Ug
dGhhdCBmb3IgMzItYml0LgotCi12b2lkIFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OmluaXRpYWxpemVTdHJ1Y3R1cmVBZGRyZXNzU3BhY2UoKQotewotICAgIGdfanNjQ29uZmlnLnN0
YXJ0T2ZTdHJ1Y3R1cmVIZWFwID0gMDsKLX0KLQotdm9pZCogU3RydWN0dXJlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6dHJ5TWFsbG9jQmxvY2soKQotewotICAgIHJldHVybiB0cnlGYXN0QWxpZ25l
ZE1hbGxvYyhNYXJrZWRCbG9jazo6YmxvY2tTaXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsK
LX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQmxvY2sodm9p
ZCogYmxvY2spCi17Ci0gICAgZmFzdEFsaWduZWRGcmVlKGJsb2NrKTsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpjb21taXRCbG9jayh2b2lkKiBibG9jaykKLXsK
LSAgICBXVEY6OmZhc3RDb21taXRBbGlnbmVkTWVtb3J5KGJsb2NrLCBNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplKTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkZWNv
bW1pdEJsb2NrKHZvaWQqIGJsb2NrKQotewotICAgIFdURjo6ZmFzdERlY29tbWl0QWxpZ25lZE1l
bW9yeShibG9jaywgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7Ci19Ci0KLSNlbmRpZiAvLyBDUFUo
QUREUkVTUzY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklzb01lbW9yeUFsbG9jYXRvckJhc2UuaCIKLSNpbmNs
dWRlIDx3dGYvR2lnYWNhZ2UuaD4KLQotI2lmIEVOQUJMRShNQUxMT0NfSEVBUF9CUkVBS0RPV04p
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBTdHJ1Y3R1cmVBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIGZpbmFsIDogcHVibGljIElz
b01lbW9yeUFsbG9jYXRvckJhc2UgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBJc29NZW1v
cnlBbGxvY2F0b3JCYXNlOwotCi0gICAgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihD
U3RyaW5nKTsKLSAgICB+U3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGZpbmFsOwot
ICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9p
ZCogdHJ5QWxsb2NhdGVNZW1vcnkoc2l6ZV90KSBmaW5hbDsKLSAgICB2b2lkIGZyZWVNZW1vcnko
dm9pZCopIGZpbmFsOwotICAgIHZvaWQqIHRyeVJlYWxsb2NhdGVNZW1vcnkodm9pZCosIHNpemVf
dCkgZmluYWw7Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3RydWN0dXJlQWRkcmVzc1Nw
YWNlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkKiB0cnlNYWxsb2NCbG9jaygpIGZpbmFsOwot
ICAgIHZvaWQgZnJlZUJsb2NrKHZvaWQqIGJsb2NrKSBmaW5hbDsKLSAgICB2b2lkIGNvbW1pdEJs
b2NrKHZvaWQqIGJsb2NrKSBmaW5hbDsKLSAgICB2b2lkIGRlY29tbWl0QmxvY2sodm9pZCogYmxv
Y2spIGZpbmFsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4Njk2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3Rv
cmVTdHJ1Y3R1cmUKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5zdG9yZTY0KFRydXN0ZWRJ
bW02NChzdHJ1Y3R1cmVQdHItPmlkQmxvYigpKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVz
dCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7Ci0gICAgICAgIEp1bXAgY29ycmVjdFN0cnVjdHVyZSA9IGppdC5icmFuY2gzMihFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aWQoKS5iaXRzKCkpKTsKKyAgICAgICAgSnVt
cCBjb3JyZWN0U3RydWN0dXJlID0gaml0LmJyYW5jaDMyKEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
c3RydWN0dXJlUHRyLT5pZCgpKSk7CiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1
Y3R1cmVJRElzVmFsaWQpOwogICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmppdCk7CiAK
QEAgLTM4OSwyOSArMzg5LDQ0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5
KEpTVmEKICAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAK
LXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKFJlZ2lz
dGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgbW92ZShzb3VyY2UsIGRlc3QpOwotI2lmIENQ
VShBRERSRVNTNjQpCi0gICAgLy8gVGhpcyBjb3VsZCB1c2UgQkZJIG9uIGFybTY0IGJ1dCB0aGF0
IG9ubHkgaGVscHMgaWYgdGhlIHN0YXJ0IG9mIHN0cnVjdHVyZSBoZWFwIGlzIGVuY29kYWJsZSBh
cyBhIG1vdiBhbmQgbm90IGFzIGFuIGltbWVkaWF0ZSBpbiB0aGUgYWRkIHNvIGl0J3MgcHJvYmFi
bHkgbm90IHN1cGVyIGltcG9ydGFudC4KLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJl
SURNYXNrKSwgZGVzdCk7Ci0gICAgYWRkNjQoVHJ1c3RlZEltbTY0KGdfanNjQ29uZmlnLnN0YXJ0
T2ZTdHJ1Y3R1cmVIZWFwKSwgZGVzdCk7Ci0jZW5kaWYgLy8gbm90IENQVShBRERSRVNTNjQpCi19
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBDUFUoQVJNNjQpCisgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoMiA9IGRhdGFUZW1wUmVnaXN0ZXI7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9y
dGVkIGNwdSIKKyNlbmRpZgogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1
cmUoVk0mLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0KQotewotICAgIGxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIGRlc3QpOwotICAgIGVtaXROb25OdWxsRGVjb2RlU3RydWN0dXJlSUQoZGVzdCwgZGVz
dCk7CisgICAgQVNTRVJUKGRlc3QgIT0gc2NyYXRjaCk7CisgICAgQVNTRVJUKGRlc3QgIT0gc2Ny
YXRjaDIpOworICAgIEFTU0VSVChzY3JhdGNoICE9IHNjcmF0Y2gyKTsKKworICAgIGxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzb3VyY2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2gyKTsKKyAgICBsb2FkUHRyKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmJh
c2UoKSwgc2NyYXRjaCk7CisgICAgcnNoaWZ0MzIoc2NyYXRjaDIsIFRydXN0ZWRJbW0zMihTdHJ1
Y3R1cmVJRFRhYmxlOjpzX251bWJlck9mRW50cm9weUJpdHMpLCBkZXN0KTsKKyAgICBsb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaCwgZGVzdCwgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyKSwgZGVzdCk7CisgICAgbHNoaWZ0UHRyKFRydXN0ZWRJbW0zMihTdHJ1Y3R1cmVJ
RFRhYmxlOjpzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyKSwgc2NyYXRjaDIp
OworICAgIHhvclB0cihzY3JhdGNoMiwgZGVzdCk7CisjZWxzZSAvLyBub3QgVVNFKEpTVkFMVUU2
NCkKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAg
ICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNvdXJjZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgZGVzdCk7CisjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVFNjQpCiB9CiAK
LXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFByb3RvdHlwZShWTSYgdm0sIEdQUlJlZyBv
YmplY3RHUFIsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFByb3RvdHlwZShWTSYgdm0sIEdQUlJlZyBvYmpl
Y3RHUFIsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlz
dCYgc2xvd1BhdGgpCiB7CiAgICAgQVNTRVJUKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpICE9IG9i
amVjdEdQUik7CisgICAgQVNTRVJUKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpICE9IHNjcmF0Y2hH
UFIpOworICAgIEFTU0VSVChvYmplY3RHUFIgIT0gc2NyYXRjaEdQUik7CiAKLSAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSwgb2JqZWN0R1BSLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0sIG9iamVjdEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHNjcmF0Y2hHUFIpOwogCi0gICAgYXV0byBvdmVycmlkZXNHZXRQcm90b3R5cGUgPSBicmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpLCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc0dldFByb3RvdHlwZU91dE9mTGluZSkpOworICAg
IGxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
U3RydWN0dXJlOjpvdXRPZkxpbmVUeXBlRmxhZ3NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
IGF1dG8gb3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBl
T3V0T2ZMaW5lKSk7CiAgICAgc2xvd1BhdGguYXBwZW5kKG92ZXJyaWRlc0dldFByb3RvdHlwZSk7
CiAKICAgICBsb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZXN1bHRSZWdzKTsKQEAg
LTUxMCw3ICs1MjUsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKEpT
CiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNj
cmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gz
LCBGUFJSZWcgcmVzdWx0KQogewogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgc2NyYXRjaDMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
LCBzY3JhdGNoMywgc2NyYXRjaDMpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCBzY3JhdGNo
Mywgc2NyYXRjaDMsIHNjcmF0Y2gwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDMsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBzY3JhdGNoMyk7CiAgICAgLy8gTm93LCBz
Y3JhdGNoMyBob2xkcyBKU0dsb2JhbE9iamVjdCouCiAKQEAgLTgyMyw3ICs4MzgsNyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvCiAgICAgICAgIEFTU0VSVChzY3Jh
dGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKICAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgcmVzdWx0KTsKKyAgICAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgcmVzdWx0LCBzY3JhdGNoSWZTaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVzdWx0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAg
LTkxNCw3ICs5MjksNyBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVy
CiAgICAgICAgIEFTU0VSVChzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZDsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
KTsKLSAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgc2Ny
YXRjaCk7CisgICAgICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZS5wYXlsb2FkR1BSKCks
IHNjcmF0Y2gsIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CiAg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdGQ6OmdldDxKU0dsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMjMs
NyArMTEyMyw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUtPmlkKCkuYml0cygp
KSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1
c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
ICNlbmRpZgpAQCAtMTU3Nyw5ICsxNTc3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXJn
dW1lbnRDb3VudChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBlbWl0Tm9uTnVsbERlY29kZVN0cnVjdHVyZUlEKFJlZ2lzdGVySUQgc291cmNlLCBS
ZWdpc3RlcklEIGRlc3QpOwotICAgIHZvaWQgZW1pdExvYWRTdHJ1Y3R1cmUoVk0mLCBSZWdpc3Rl
cklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0KTsKLSAgICB2b2lkIGVtaXRMb2FkUHJvdG90eXBl
KFZNJiwgR1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgSnVtcExpc3Qm
IHNsb3dQYXRoKTsKKyAgICB2b2lkIGVtaXRMb2FkU3RydWN0dXJlKFZNJiwgUmVnaXN0ZXJJRCBz
b3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKKyAgICB2b2lkIGVt
aXRMb2FkUHJvdG90eXBlKFZNJiwgR1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAKICAgICB2b2lk
IGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwg
UmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEKQogICAgIHsKQEAgLTE2NjQsMTMgKzE2NjMsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgbnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5KFZNJiB2
bSwgR1BSUmVnIGJ1dHRlcmZseSwgR1BSUmVnIG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmIChp
c1g4NigpKSB7Ci0gICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oU3RydWN0dXJlSUQ6Om51a2VkU3RydWN0dXJlSURCaXQpKSwgQWRkcmVzcyhvYmplY3Qs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoYml0d2lzZV9jYXN0PGludDMyX3Q+KG51a2VkU3RydWN0dXJlSURCaXQoKSkpLCBBZGRy
ZXNzKG9iamVjdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgICAgICAgICBz
dG9yZVB0cihidXR0ZXJmbHksIEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEp1bXAg
b2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQodm0pOwotICAgICAgICBvcjMyKFRydXN0
ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oU3RydWN0dXJlSUQ6Om51a2VkU3RydWN0dXJl
SURCaXQpKSwgQWRkcmVzcyhvYmplY3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwor
ICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obnVrZWRTdHJ1
Y3R1cmVJREJpdCgpKSksIEFkZHJlc3Mob2JqZWN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKICAgICAgICAgc3RvcmVGZW5jZSgpOwogICAgICAgICBzdG9yZVB0cihidXR0ZXJmbHks
IEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAg
c3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklU
U3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw3IEBAIHVuc2lnbmVkIFBvbHltb3JwaGljQWNjZXNzSklUU3R1YlJvdXRp
bmUKICAgICBmb3IgKGF1dG8mIGtleSA6IGNhc2VzKQogICAgICAgICBXVEY6OmFkZChoYXNoZXIs
IGtleS0+aGFzaCgpKTsKICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUlEIDogd2Vha1N0cnVjdHVy
ZXMpCi0gICAgICAgIFdURjo6YWRkKGhhc2hlciwgc3RydWN0dXJlSUQuYml0cygpKTsKKyAgICAg
ICAgV1RGOjphZGQoaGFzaGVyLCBzdHJ1Y3R1cmVJRCk7CiAgICAgcmV0dXJuIGhhc2hlci5oYXNo
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGEKIHN0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBKU1ZhbHVlUmVncyBiYXNlSlNSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSKQogewogICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBhdXRvIGRvSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZUlEKCkpKTsKKyAgICBhdXRvIGRvSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6RXF1YWwsIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSgpKSk7CiAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgZG9JbmxpbmVBY2Nlc3MubGluaygmaml0KTsKICAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpAQCAtMjIxLDcgKzIyMSw3IEBA
IHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGkKICAgICB1c2luZyBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCiAgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlSUQoKSkpOworICAgIGF1dG8gZG9JbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKICAgICBkb0lubGluZUFjY2Vzcy5saW5rKCZqaXQpOwogICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkBAIC00MTIsNyAr
NDEyLDcgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbgogICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKIAogICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlSUQoKSkpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFu
Y2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUoKSkpOwogICAgIGppdC5ib3hCb29sZWFuKHRydWUsIHJlc3VsdEpTUik7
CiAgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcg
KzI1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICBK
dW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QxLCByZWdUMik7CiAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBK
dW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMik7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydQogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCBy
ZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigp
LCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qy
KTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTEyMjgs
NyArMTIyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKICAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTk1OSw3ICsxOTU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGpzUmVnVDEwKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKIAotICAgIGVtaXRMb2FkUHJvdG90eXBlKHZt
KCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIsIHNsb3dDYXNlcyk7CisgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMiwgcmVn
VDQsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDMyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODY5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjczMSw3ICsyNzMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0bwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1R5cGVN
YXNrKSwgcmVnVDEpOwogICAgIGdlbmVyaWNDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoVW5kZWNpZGVkKSkpOwogCi0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6cHJldmlvdXNPclJhcmVEYXRhT2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgZ2VuZXJpY0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CiAgICAgZ2VuZXJpY0Nhc2Vz
LmFwcGVuZChicmFuY2hJZlN0cnVjdHVyZShyZWdUMSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMyArMjksMTggQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBWTTsK
IAorI2lmIFVTRShKU1ZBTFVFNjQpCit1c2luZyBTdHJ1Y3R1cmVJRCA9IHVpbnQzMl90OworI2Vs
c2UKK3VzaW5nIFN0cnVjdHVyZUlEID0gU3RydWN0dXJlKjsKKyNlbmRpZgorCiBjbGFzcyBBY2Nl
c3NDYXNlOwogCiAvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0dWIgcm91dGluZXMs
IGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NzIsNyArNjcyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RyeV9n
ZXRfYgogICAgICAgICB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlSUQ7CiAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQp
IHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUo
KTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFi
bGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9
IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKIAogICAgICAgICAgICAgICAgIGlm
IChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byhhLCBiKSkgewpAQCAtNjg2LDcg
KzY4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90cnlfZ2V0X2IKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHNsb3QuaXNWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
ICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4K
LSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAg
ICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkpIHsKQEAgLTcyMSw3ICs3MjEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRDsKICAgICAgICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IG9sZFN0cnVjdHVy
ZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3Ry
dWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogCiAgICAgICAg
ICAgICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7
CkBAIC03MzUsNyArNzM1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9i
eV9pZAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUo
dm0pOwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFN0YXJ0
IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4KLSAgICAgICAgICAgIG1ldGFkYXRh
Lm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9z
dHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAKICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKQEAgLTg0OCwx
MCArODQ4LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1MTEludEdldEJ5SUQoY29uc3QKICAg
ICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLnByb3RvTG9hZE1vZGUuc3Ry
dWN0dXJlSUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAob2xkU3RydWN0dXJlSUQpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSBvbGRT
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5o
ZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKIAog
ICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRUb1BvbHlQcm90byhh
LCBiKSkgewpAQCAtOTg2LDcgKzk4Niw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9wdXRfYnlfaWQKICAgICAgICAgewogICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0
dXJlSUQgPSBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEOwogICAgICAgICAgICAgaWYgKG9sZFN0
cnVjdHVyZUlEKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gb2xkU3RydWN0dXJl
SUQuZGVjb2RlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBhID0gdm0uaGVhcC5zdHJ1
Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIGIgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpCiAg
ICAgICAgICAgICAgICAgICAgIGIgPSBiLT5wcmV2aW91c0lEKCk7CkBAIC05OTksOSArOTk5LDkg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICB9CiAK
ICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAg
ICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIG1ldGFkYXRhLm1fb2Zmc2V0
ID0gMDsKLSAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZUlEKCk7
CisgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwogICAgICAgICBtZXRhZGF0
YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGJh
c2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wcml2YQogICAgICAgICB7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlSUQ7CiAg
ICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGEgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpOwog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKTsKIAogICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmU6OnNob3VsZENvbnZlcnRU
b1BvbHlQcm90byhhLCBiKSkgewpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9wcml2YQogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsK
ICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4K
LSAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAg
ICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgICAgICBtZXRhZGF0
YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKSB7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X3ByaXZhCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVy
ZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRDsKICAgICAgICAg
ICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9
IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBiID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0p
OwogICAgICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBiID0gYi0+cHJldmlvdXNJRCgpOwpAQCAt
MTMyMSw5ICsxMzIxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9wcml2
YQogICAgICAgICB9CiAKICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUg
b2xkIGNhY2hlLgotICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gU3RydWN0dXJl
SUQoKTsKKyAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CiAgICAgICAgIG1l
dGFkYXRhLm1fb2Zmc2V0ID0gMDsKLSAgICAgICAgbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmVJRCA9
IFN0cnVjdHVyZUlEKCk7CisgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlSUQgPSAwOwog
ICAgICAgICBtZXRhZGF0YS5tX3Byb3BlcnR5LmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwpAQCAtMTM5Nyw4ICsxMzk3LDgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NldF9wcml2YQogICAgICAgICBBU1NF
UlQob2xkU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKIAogICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcgb3V0IHRoZSBvbGQgY2Fj
aGUuCi0gICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOwot
ICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZUlEID0gU3RydWN0dXJlSUQoKTsKKyAgICAg
ICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmVJRCA9IDA7CisgICAgICAgIG1ldGFkYXRhLm1fbmV3
U3RydWN0dXJlSUQgPSAwOwogICAgICAgICBtZXRhZGF0YS5tX2JyYW5kLmNsZWFyKCk7CiAKICAg
ICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTY5NCwxNiArNjk0LDIwIEBA
IG1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb24KICAgICAgICAgZW5kKQog
ZW5kCiAKLW1hY3JvIHN0cnVjdHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaChzdHJ1Y3R1cmVJ
RFRoZW5TdHJ1Y3R1cmUsIHNjcmF0Y2gpCi0gICAgYW5kcSBjb25zdGV4cHIgc3RydWN0dXJlSURN
YXNrLCBzdHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUKLSAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnU3RhcnRPZlN0cnVjdHVyZUhlYXAsIHNjcmF0Y2gK
LSAgICBsb2FkcCBbc2NyYXRjaF0sIHNjcmF0Y2gKLSAgICBhZGRwIHNjcmF0Y2gsIHN0cnVjdHVy
ZUlEVGhlblN0cnVjdHVyZQorbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNo
KHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZSwgc2NyYXRjaCwgc2NyYXRjaDIpCisgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHNjcmF0Y2gKKyAgICBtb3ZlIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVy
ZSwgc2NyYXRjaDIKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fdm1bc2NyYXRjaF0sIHNjcmF0Y2gK
KyAgICByc2hpZnRpIE51bWJlck9mU3RydWN0dXJlSURFbnRyb3B5Qml0cywgc2NyYXRjaDIKKyAg
ICBsb2FkcCBWTTo6aGVhcCArIEhlYXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlE
VGFibGU6Om1fdGFibGVbc2NyYXRjaF0sIHNjcmF0Y2gKKyAgICBsb2FkcCBbc2NyYXRjaCwgc2Ny
YXRjaDIsIFB0clNpemVdLCBzY3JhdGNoMgorICAgIGxzaGlmdHAgU3RydWN0dXJlRW50cm9weUJp
dHNTaGlmdCwgc3RydWN0dXJlSURUaGVuU3RydWN0dXJlCisgICAgeG9ycCBzY3JhdGNoMiwgc3Ry
dWN0dXJlSURUaGVuU3RydWN0dXJlCiBlbmQKIAotbWFjcm8gbG9hZFN0cnVjdHVyZVdpdGhTY3Jh
dGNoKGNlbGwsIHN0cnVjdHVyZSwgc2NyYXRjaCkKK21hY3JvIGxvYWRTdHJ1Y3R1cmVXaXRoU2Ny
YXRjaChjZWxsLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKQogICAgIGxvYWRpIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc3RydWN0dXJlCi0gICAgc3RydWN0dXJlSURUb1N0cnVj
dHVyZVdpdGhTY3JhdGNoKHN0cnVjdHVyZSwgc2NyYXRjaCkKKyAgICBzdHJ1Y3R1cmVJRFRvU3Ry
dWN0dXJlV2l0aFNjcmF0Y2goc3RydWN0dXJlLCBzY3JhdGNoLCBzY3JhdGNoMikKIGVuZAogCiAj
IEVudHJ5cG9pbnRzIGludG8gdGhlIGludGVycHJldGVyLgpAQCAtOTI2LDcgKzkzMCw3IEBAIG1h
Y3JvIGVxdWFsTnVsbENvbXBhcmlzb25PcChvcGNvZGVOYW1lLCAKICAgICAgICAgbW92ZSAwLCB0
MAogICAgICAgICBqbXAgLmRvbmUKICAgICAubWFzcXVlcmFkZXNBc1VuZGVmaW5lZDoKLSAgICAg
ICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEpCisgICAgICAgIGxvYWRTdHJ1
Y3R1cmVXaXRoU2NyYXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQwCiAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0
MAogICAgICAgICBjcGVxIFN0cnVjdHVyZTo6bV9nbG9iYWxPYmplY3RbdDJdLCB0MCwgdDAKQEAg
LTE0MjgsNyArMTQzMiw3IEBAIGxsaW50T3BXaXRoUmV0dXJuKG9wX3R5cGVvZl9pc191bmRlZmlu
ZWQKICAgICBtb3ZlIFZhbHVlRmFsc2UsIHQxCiAgICAgcmV0dXJuKHQxKQogLm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQ6Ci0gICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MywgdDEpCisg
ICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MywgdDEsIHQyKQogICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDFd
LCB0MQogICAgIGNwZXEgU3RydWN0dXJlOjptX2dsb2JhbE9iamVjdFt0M10sIHQxLCB0MApAQCAt
MTY0MCw3ICsxNjQ0LDcgQEAgbGxpbnRPcFdpdGhQcm9maWxlKG9wX2dldF9wcm90b3R5cGVfb2Ys
IAogICAgIGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLm9wR2V0UHJvdG90eXBlT2ZTbG93CiAgICAg
YmJiIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9wR2V0UHJvdG90eXBlT2ZTbG93
CiAKLSAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICBsb2FkU3Ry
dWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMpCiAgICAgbG9hZGggU3RydWN0dXJlOjpt
X291dE9mTGluZVR5cGVGbGFnc1t0Ml0sIHQzCiAgICAgYnRpbnogdDMsIE92ZXJyaWRlc0dldFBy
b3RvdHlwZU91dE9mTGluZSwgLm9wR2V0UHJvdG90eXBlT2ZTbG93CiAKQEAgLTE2ODAsNyArMTY4
NCwxOSBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCCiAgICAgbG9h
ZHAgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCiAgICAgYnRw
eiB0MywgLm9wUHV0QnlJZFRyYW5zaXRpb25EaXJlY3QKIAotICAgIHN0cnVjdHVyZUlEVG9TdHJ1
Y3R1cmVXaXRoU2NyYXRjaCh0MiwgdDEpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICBsb2FkcCBWTTo6aGVhcCArIEhl
YXA6Om1fc3RydWN0dXJlSURUYWJsZSArIFN0cnVjdHVyZUlEVGFibGU6Om1fdGFibGVbdDFdLCB0
MQorCisgICAgbWFjcm8gc3RydWN0dXJlSURUb1N0cnVjdHVyZVdpdGhTY3JhdGNoQW5kVGFibGUo
c3RydWN0dXJlSURUaGVuU3RydWN0dXJlLCB0YWJsZSwgc2NyYXRjaCkKKyAgICAgICAgbW92ZSBz
dHJ1Y3R1cmVJRFRoZW5TdHJ1Y3R1cmUsIHNjcmF0Y2gKKyAgICAgICAgcnNoaWZ0aSBOdW1iZXJP
ZlN0cnVjdHVyZUlERW50cm9weUJpdHMsIHNjcmF0Y2gKKyAgICAgICAgbG9hZHAgW3RhYmxlLCBz
Y3JhdGNoLCBQdHJTaXplXSwgc2NyYXRjaAorICAgICAgICBsc2hpZnRwIFN0cnVjdHVyZUVudHJv
cHlCaXRzU2hpZnQsIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZQorICAgICAgICB4b3JwIHNjcmF0
Y2gsIHN0cnVjdHVyZUlEVGhlblN0cnVjdHVyZQorICAgIGVuZAorCisgICAgc3RydWN0dXJlSURU
b1N0cnVjdHVyZVdpdGhTY3JhdGNoQW5kVGFibGUodDIsIHQxLCB0MCkKIAogICAgIGxvYWRwIFN0
cnVjdHVyZUNoYWluOjptX3ZlY3Rvclt0M10sIHQzCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnRw
bnogdDMsIG9rIGVuZCkKQEAgLTE2OTEsNyArMTcwNyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDJd
LCB0MgogICAgIGJpbmVxIHQyLCBbdDNdLCAub3BQdXRCeUlkU2xvdwogICAgIGFkZHAgNCwgdDMK
LSAgICBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2godDIsIHQxKQorICAgIHN0cnVj
dHVyZUlEVG9TdHJ1Y3R1cmVXaXRoU2NyYXRjaEFuZFRhYmxlKHQyLCB0MSwgdDApCiAgICAgbG9h
ZHEgU3RydWN0dXJlOjptX3Byb3RvdHlwZVt0Ml0sIHQyCiAgICAgYnFuZXEgdDIsIFZhbHVlTnVs
bCwgLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkxvb3AKIApAQCAtMjA2Niw3ICsyMDgyLDcgQEAg
bWFjcm8gZXF1YWxOdWxsSnVtcE9wKG9wY29kZU5hbWUsIG9wY29kZQogICAgICAgICBhc3NlcnRO
b3RDb25zdGFudChzaXplLCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAogICAg
ICAgICBidHFueiB0MCwgbm90Q2VsbE1hc2ssIC5pbW1lZGlhdGUKLSAgICAgICAgbG9hZFN0cnVj
dHVyZVdpdGhTY3JhdGNoKHQwLCB0MiwgdDEpCisgICAgICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2Ny
YXRjaCh0MCwgdDIsIHQxLCB0MykKICAgICAgICAgY2VsbEhhbmRsZXIodDIsIEpTQ2VsbDo6bV9m
bGFnc1t0MF0sIC50YXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIApAQCAtMjc4NSw3ICsyODAx
LDcgQEAgZW5kKQogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGNvZGVTdHJ1Y3QsIGdl
dCwgc2xvd1BhdGgpCiAgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDAKLSAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSkKKyAgICBsb2Fk
U3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMpCiAgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZVt0NV0sIHQxCiAgICAgYnBuZXEgdDIsIHQxLCBz
bG93UGF0aAogZW5kCkBAIC0zMjM2LDcgKzMyNTIsNyBAQCBsbGludE9wV2l0aFJldHVybihvcF9n
ZXRfcHJvcGVydHlfZW51bWVyCiAgICAgYW5kaSBJbmRleGluZ1R5cGVNYXNrLCB0MQogICAgIGJp
YSB0MSwgQXJyYXlXaXRoVW5kZWNpZGVkLCAuc2xvd1BhdGgKIAotICAgIGxvYWRTdHJ1Y3R1cmVX
aXRoU2NyYXRjaCh0MCwgdDEsIHQyKQorICAgIGxvYWRTdHJ1Y3R1cmVXaXRoU2NyYXRjaCh0MCwg
dDEsIHQyLCB0MykKICAgICBsb2FkcCBTdHJ1Y3R1cmU6Om1fcHJldmlvdXNPclJhcmVEYXRhW3Qx
XSwgdDEKICAgICBidHB6IHQxLCAuc2xvd1BhdGgKICAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3Qx
XSwgU3RydWN0dXJlVHlwZSwgLnNsb3dQYXRoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsMTEgQEAgZWxzZQogICAgIGNvbnN0IExvd2Vz
dFRhZyA9IGNvbnN0ZXhwciBKU1ZhbHVlOjpMb3dlc3RUYWcKIGVuZAogCitpZiBKU1ZBTFVFNjQK
KyAgICBjb25zdCBOdW1iZXJPZlN0cnVjdHVyZUlERW50cm9weUJpdHMgPSBjb25zdGV4cHIgU3Ry
dWN0dXJlSURUYWJsZTo6c19udW1iZXJPZkVudHJvcHlCaXRzCisgICAgY29uc3QgU3RydWN0dXJl
RW50cm9weUJpdHNTaGlmdCA9IGNvbnN0ZXhwciBTdHJ1Y3R1cmVJRFRhYmxlOjpzX2VudHJvcHlC
aXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyCitlbmQKKwogaWYgTEFSR0VfVFlQRURfQVJSQVlT
CiAgICAgY29uc3QgU21hbGxUeXBlZEFycmF5TWF4TGVuZ3RoID0gY29uc3RleHByIEFycmF5UHJv
ZmlsZTo6c19zbWFsbFR5cGVkQXJyYXlNYXhMZW5ndGgKIGVuZApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGFycmF5UHJvdG9GdW5jVAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVl
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhp
c09iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHZtLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBpZiAoIWNhblVzZURlZmF1bHRB
cnJheUpvaW5Gb3JUb1N0cmluZyh2bSwgdGhpc09iamVjdCkpIHsKICAgICAgICAgLy8gMi4gTGV0
IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICAgICAgSlNWYWx1ZSBmdW5jdGlv
biA9IHRoaXNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmpvaW4p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGJpZ0ludFByb3RvRnVuYwogCiAgICAgQVNTRVJU
KHZhbHVlKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2YWx1ZS0+c3RydWN0
dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB2YWx1ZS0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgaW50MzJfdCByYWRpeCA9IGV4dHJhY3RUb1N0cmluZ1JhZGl4QXJn
dW1lbnQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBzY29wZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihiaWdJbnRQcm90b0Z1bmMKICAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBJbnRlZ3Jp
dHk6OmF1ZGl0U3RydWN0dXJlSUQodmFsdWUtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0
eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGJvb2xlYW5Qcm90b0Z1bgogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgSW50
ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAg
IEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQo
KSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFs
c2UpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5mYWxz
ZVN0cmluZygpKTsKIApAQCAtOTYsNyArOTYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Ym9vbGVhblByb3RvRnVuCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBJbnRl
Z3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAg
SW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDEx
ICszNTUsMTEgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogICAg
ICAgICAgICAgaWYgKG90aGVyU3RydWN0dXJlSUQpCiAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV90b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVkOwogICAgICAgICAgICAgbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRCA9IG15U3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICB2bS53cml0
ZUJhcnJpZXIoY29kZUJsb2NrLCBteVN0cnVjdHVyZUlELmRlY29kZSgpKTsKKyAgICAgICAgICAg
IHZtLndyaXRlQmFycmllcihjb2RlQmxvY2ssIHZtLmdldFN0cnVjdHVyZShteVN0cnVjdHVyZUlE
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtZXRhZGF0YS5tX3RvVGhpc1N0
YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7Ci0gICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0
dXJlSUQgPSBTdHJ1Y3R1cmVJRCgpOworICAgICAgICBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEID0gMDsKICAgICB9CiAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgdmFs
dWUgcHJvZmlsaW5nIGhlcmUgb24gdGhlIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aAogICAgIC8v
IGp1c3QgcmV0dXJucyB0aGUgaW5wdXQgdG8gdG9fdGhpcyBpZiB0aGUgc3RydWN0dXJlIGNoZWNr
IHN1Y2NlZWRzLiBJZiB0aGUgc3RydWN0dXJlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5z
dGFuYwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIEludGVncml0eTo6YXVk
aXRTdHJ1Y3R1cmVJRCh0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5
OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gYXNVVENWYXJpYW50
CiAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhY2hlKQogICAg
ICAgICA6IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWNoZSk7CkBAIC0zMTUsNyAr
MzE1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGRhdGVQcm90b0Z1bmNUbwogICAgIGlm
IChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJ
RCh0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVj
dHVyZUlEKHZtLCB0aGlzRGF0ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9i
amVjdCwgIkludmFsaWQgRGF0ZSJfcykpOwogCkBAIC0zNjMsNyArMzYzLDcgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGRhdGVQcm90b0Z1bmNUbwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJEYXRlLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdIGV4cGVjdGVkIHx0aGlzfCB0
byBiZSBhbiBvYmplY3QuIik7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPih0aGlzVmFsdWUpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQo
dm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkRhdGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQg
YSBmaXJzdCBhcmd1bWVudC4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw3IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRNZXNzYWdlU3QK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChz
dHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVj
dHVyZUlEKCkpOwogCiAgICAgSlNWYWx1ZSBtZXNzYWdlVmFsdWU7CiAgICAgYXV0byBtZXNzYWdl
UHJvcGVydE5hbWUgPSB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlOwpAQCAtMTcyLDcgKzE3Miw3
IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWROYW1lU3RyaW4KIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCgp
KTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVjdHVyZUlEKCkpOwog
CiAgICAgSlNWYWx1ZSBuYW1lVmFsdWU7CiAgICAgYXV0byBuYW1lUHJvcGVydE5hbWUgPSB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lOwpAQCAtMjAzLDcgKzIwMyw3IEBAIFN0cmluZyBFcnJvckluc3Rh
bmNlOjpzYW5pdGl6ZWRUb1N0cmluZygKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEludGVn
cml0eTo6YXVkaXRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1
ZGl0U3RydWN0dXJlSUQodm0sIHN0cnVjdHVyZUlEKCkpOwogCiAgICAgU3RyaW5nIG5hbWVTdHJp
bmcgPSBzYW5pdGl6ZWROYW1lU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihlcnJvclByb3Rv
RnVuY1QKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICBKU09iamVjdCogdGhpc09i
aiA9IGFzT2JqZWN0KHRoaXNWYWx1ZSk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHRoaXNPYmotPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJ
RCh2bSwgdGhpc09iai0+c3RydWN0dXJlSUQoKSk7CiAKICAgICAvLyBHdWFyZCBhZ2FpbnN0IHJl
Y3Vyc2lvbiEKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZ2xvYmFsT2JqZWN0
LCB0aGlzT2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bkltCiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxl
KTsKICAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpc09iamVjdC0+bV9yYXJlRGF0YS5n
ZXQoKSkgewotICAgICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9jYWNoZWRQb2x5UHJv
dG9TdHJ1Y3R1cmVJRCk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hl
ZFBvbHlQcm90b1N0cnVjdHVyZSk7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHJhcmVEYXRhLT5t
X2FzU3RyaW5nKTsKICAgICAgICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSByYXJlRGF0
YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkgewogICAgICAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IHRoaXNPYmplY3QtPmNlbGxMb2NrKCkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU3LDEyICsyNTcsMTIgQEAgcHVibGljOgogICAgIFN0cnVjdHVy
ZSogY2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VM
WShtX3JhcmVEYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NhY2hlZFBv
bHlQcm90b1N0cnVjdHVyZUlELmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlLmdldCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgdm9pZCBzZXRDYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9j
YWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmVJRC5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CisgICAg
ICAgIGVuc3VyZVJhcmVEYXRhKCkubV9jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIGVuc3Vy
ZVBvbHlQcm90b1dhdGNocG9pbnQoKQpAQCAtMzEwLDggKzMxMCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0IHsgMCB9OwogICAgICAgICB1bnNp
Z25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVu
c2lnbmVkIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCB7IFVJTlRfTUFYIH07Ci0gICAgICAgIFdy
aXRlQmFycmllclN0cnVjdHVyZUlEIG1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlSUQ7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9iamVjdE1hcD4gbV90ZW1wbGF0ZU9iamVjdE1h
cDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWNoZWRQb2x5UHJvdG9TdHJ1
Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9hc1N0cmluZzsKICAgICB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE5
ICs4MSwxOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Qcm90b0Z1CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICh0aGlz
VmFsdWUuaW5oZXJpdHM8SlNGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih0aGlzVmFsdWUpOwotICAgICAgICBJbnRlZ3Jp
dHk6OmF1ZGl0U3RydWN0dXJlSUQoZnVuY3Rpb24tPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIGZ1bmN0aW9uLT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZnVuY3Rp
b24tPnRvU3RyaW5nKGdsb2JhbE9iamVjdCkpKTsKICAgICB9CiAKICAgICBpZiAodGhpc1ZhbHVl
LmluaGVyaXRzPEludGVybmFsRnVuY3Rpb24+KHZtKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odGhpc1ZhbHVlKTsKLSAg
ICAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKGZ1bmN0aW9uLT5zdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBmdW5jdGlvbi0+c3Ry
dWN0dXJlSUQoKSk7CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZ2xvYmFsT2JqZWN0LCAiZnVuY3Rpb24gIiwg
ZnVuY3Rpb24tPm5hbWUoKSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59IikpKTsKICAgICB9
CiAKICAgICBpZiAodGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KHRoaXNWYWx1ZSk7Ci0gICAgICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBJbnRlZ3JpdHk6OmF1ZGl0
U3RydWN0dXJlSUQodm0sIG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChvYmpl
Y3QtPmlzQ2FsbGFibGUodm0pKQogICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJm
dW5jdGlvbiAiLCBvYmplY3QtPmNsYXNzSW5mbyh2bSktPmNsYXNzTmFtZSwgIigpIHtcbiAgICBb
bmF0aXZlIGNvZGVdXG59IikpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkocmV2aXNpb24gMjg2OTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNp
dENoaWxkcmVuSW1wbAogCiAgICAgcmFyZURhdGEtPm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgcmFyZURhdGEtPm1faW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKHJhcmVEYXRhLT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmVJRCk7CisgICAgdmlzaXRv
ci5hcHBlbmQocmFyZURhdGEtPm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQocmFyZURhdGEtPm1fZXhlY3V0YWJsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGlu
bGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdGlvblBy
b2ZpbGVXYXRjaHBvaW50U2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFy
ZURhdGEsIG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1faW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90
IG9mZnNldE9mQm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvblJhcmVEYXRhLCBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUpOyB9CiAgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZFeGVjdXRhYmxlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fZXhlY3V0YWJsZSk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBv
aW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fYWxsb2Nh
dGlvblByb2ZpbGVDbGVhcmluZ1dhdGNocG9pbnQpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKICAgICB7CkBA
IC0xMTEsOCArMTEzLDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9hbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnRTZXQuc3RhcnRXYXRjaGluZygpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSog
Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fYm91bmRGdW5jdGlvblN0cnVj
dHVyZUlELmdldCgpOyB9Ci0gICAgdm9pZCBzZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlSUQuc2V0
KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOyB9CisgICAgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIHsgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJl
KTsgfQogCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2V4ZWN1dGFibGUuZ2V0KCk7IH0KIApAQCAtMTU4LDcgKzE2MCw3IEBAIHByaXZhdGU6CiAgICAg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlIG1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU7CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludFNldDsKICAgICBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUgbV9pbnRlcm5h
bEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQg
bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFz
ZT4gbV9leGVjdXRhYmxlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBbGxvY2F0aW9uUHJvZmlsZUNs
ZWFyaW5nV2F0Y2hwb2ludD4gbV9hbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludDsK
ICAgICBib29sIG1faGFzUmVpZmllZExlbmd0aCA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNPd25Qcm9wZXJ0eUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzT3duUHJvcGVydHlDYWNoZS5oCShyZXZpc2lvbiAy
ODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNPd25Qcm9wZXJ0eUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVzdWx0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEVudHJ5LCByZXN1bHQpOyB9CiAKICAgICAgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiBp
bXBsOwotICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgeyAwIH07CiAgICAgICAgIGJvb2wgcmVzdWx0IHsgZmFsc2UgfTsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2lnaWxsQ3Jhc2hBbmFseXplci5oIgotI2luY2x1ZGUgIlN0cnVj
dHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJWTVRyYXBzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCkBA
IC02Niw3ICs2NSw2IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAjZW5kaWYKICAgICAgICAgewogICAg
ICAgICAgICAgT3B0aW9uczo6QWxsb3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlIHNjb3BlOwotICAg
ICAgICAgICAgU3RydWN0dXJlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVN0cnVj
dHVyZUFkZHJlc3NTcGFjZSgpOwogICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6aW5pdGlh
bGl6ZSgpOwogICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZSgpOwog
ICAgICAgICAgICAgVk06OmNvbXB1dGVDYW5Vc2VKSVQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQw
LDEyICs0MCw2IEBAIGNsYXNzIFZNOwogdXNpbmcgSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rp
b24gPSB2b2lkICgqKShvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmIENQVShBUk02NCkgJiYgIUNQVShBUk02NEUpCi1jb25z
dGV4cHIgdWludHB0cl90IHN0cnVjdHVyZUhlYXBBZGRyZXNzU2l6ZSA9IDUxMiAqIE1COwotI2Vs
c2UKLWNvbnN0ZXhwciB1aW50cHRyX3Qgc3RydWN0dXJlSGVhcEFkZHJlc3NTaXplID0gMSAqIEdC
OwotI2VuZGlmCi0KIHN0cnVjdCBDb25maWcgewogICAgIHN0YXRpYyBDb25maWcmIHNpbmdsZXRv
bigpOwogCkBAIC04Nyw3ICs4MSw2IEBAIHN0cnVjdCBDb25maWcgewogICAgIHZvaWQqIHN0YXJ0
RXhlY3V0YWJsZU1lbW9yeTsKICAgICB2b2lkKiBlbmRFeGVjdXRhYmxlTWVtb3J5OwogICAgIHVp
bnRwdHJfdCBzdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2w7Ci0gICAgdWludHB0cl90IHN0
YXJ0T2ZTdHJ1Y3R1cmVIZWFwOwogCiAjaWYgRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQogICAg
IEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwczsKQEAg
LTEyNSw3ICsxMTgsNiBAQCBleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIENvbmZpZyBnX2pz
CiAKIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZKU0NDb25maWdJbml0aWFsaXplSGFzQmVlbkNh
bGxlZCA9IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBpbml0aWFsaXplSGFzQmVlbkNhbGxlZCk7CiBj
b25zdGV4cHIgc2l6ZV90IG9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCA9IG9mZnNldG9mKEpTQzo6
Q29uZmlnLCBsbGludC5nYXRlTWFwKTsKLWNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZKU0NDb25m
aWdTdGFydE9mU3RydWN0dXJlSGVhcCA9IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBzdGFydE9mU3Ry
dWN0dXJlSGVhcCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHRBc3N1bWlu
Z1N0cnVjCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCpzdHJ1Y3R1cmUs
IGNvbnRleHQpLCAiKSIpOwogICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
b3V0LnByaW50KCIsIFN0cnVjdHVyZUlEOiAiLCBhc0NlbGwoKS0+c3RydWN0dXJlSUQoKS5iaXRz
KCkpOworICAgICAgICBvdXQucHJpbnQoIiwgU3RydWN0dXJlSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1
Y3R1cmVJRCgpKTsKICNlbmRpZgogICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIG91
dC5wcmludCgiVHJ1ZSIpOwpAQCAtMzU3LDkgKzM1NywxNSBAQCB2b2lkIEpTVmFsdWU6OmR1bXBG
b3JCYWNrdHJhY2UoUHJpbnRTdHJlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIodW5yZXNv
bHZlZCBzdHJpbmcpIik7CiAgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzPFN0
cnVjdHVyZT4odm0pKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZVsgIiwgYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgb3V0LnByaW50KCIgSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1
cmVJRCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgb3V0LnByaW50KCJdOiAiLCBSYXdQb2ludGVy
KGFzQ2VsbCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNl
bGxbIiwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgb3V0LnByaW50KCIgSUQ6ICIsIGFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKKyNlbmRpZgogICAgICAgICAgICAgb3V0LnByaW50KCJdOiAiLCBS
YXdQb2ludGVyKGFzQ2VsbCgpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGlzVHJ1ZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgZG91YmxlIEpTQ2VsbDo6dG9OdW1iZXIo
SlNHbG9iYWxPYmplY3QqIAogCiBKU09iamVjdCogSlNDZWxsOjp0b09iamVjdFNsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3Ry
dWN0dXJlSUQoc3RydWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlSUQoKSk7CiAgICAgQVNTRVJUKCFpc09iamVj
dCgpKTsKICAgICBpZiAoaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IEpTU3RyaW5nKj4odGhpcyktPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoVk0mKSBjb25z
dDsKICAgICB2b2lkIHNldFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0
U3RydWN0dXJlSUREaXJlY3RseShTdHJ1Y3R1cmVJRCBpZCkgeyBtX3N0cnVjdHVyZUlEID0gaWQ7
IH0KLSAgICB2b2lkIGNsZWFyU3RydWN0dXJlKCkgeyBtX3N0cnVjdHVyZUlEID0gU3RydWN0dXJl
SUQoKTsgfQorICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQgPSAwOyB9
CiAKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0
IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMzLDEzICsxMzMsMTIgQEAgaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nTW9k
ZQogCiBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3N0cnVjdHVyZUlELmRlY29kZSgpOworICAgIHJldHVybiBzdHJ1Y3R1
cmUodm0oKSk7CiB9CiAKLS8vIEZJWE1FOiBEZWxldGUgdGhpcyBpbiBhIGNsZWFudXAgZml4dXAu
Ci1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoVk0mKSBjb25zdAor
QUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKFZNJiB2bSkgY29uc3QK
IHsKLSAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZSht
X3N0cnVjdHVyZUlEKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMwNSw3
ICszMDQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoCiAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gdGhpcy0+c3RydWN0dXJlKHZtKS0+Y2xh
c3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKHZtKQogICAgICAgICB8fCB0
aGlzLT5zdHJ1Y3R1cmUodm0pLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpCi0gICAgICAgIHx8IHN0cnVjdHVyZS0+aWQoKS5kZWNvZGUoKSA9PSBzdHJ1Y3R1cmUp
OworICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0
cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0
dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBUeXBlSW5mbzo6bWVyZ2VJbmxpbmVUeXBlRmxhZ3Mo
c3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpLCBtX2ZsYWdzKTsKICAgICBt
X3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjg2
OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjgxLDE2ICsyMjgxLDEzIEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEoKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogdGhpc09i
amVjdC0+bV9saW5rVGltZUNvbnN0YW50cykKICAgICAgICAgcHJvcGVydHkudmlzaXQodmlzaXRv
cik7CiAKLSNkZWZpbmUgVklTSVRfU0lNUExFX1RZUEVfUFJPVE9UWVBFKENhcGl0YWxOYW1lLCBs
b3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNl
LCBmZWF0dXJlRmxhZykgaWYgKGZlYXR1cmVGbGFnKSBcCisjZGVmaW5lIFZJU0lUX1NJTVBMRV9U
WVBFKENhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNO
YW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykgaWYgKGZlYXR1cmVGbGFnKSB7IFwKICAg
ICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV8gIyMgbG93ZXJOYW1lICMjIFByb3Rv
dHlwZSk7IFwKLQotI2RlZmluZSBWSVNJVF9TSU1QTEVfVFlQRV9TVFJVQ1RVUkUoQ2FwaXRhbE5h
bWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUsIHByb3RvdHlw
ZUJhc2UsIGZlYXR1cmVGbGFnKSBpZiAoZmVhdHVyZUZsYWcpIFwKICAgICAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUpOyBcCisgICAg
fQogCi0gICAgRk9SX0VBQ0hfU0lNUExFX0JVSUxUSU5fVFlQRShWSVNJVF9TSU1QTEVfVFlQRV9T
VFJVQ1RVUkUpCi0gICAgRk9SX0VBQ0hfQlVJTFRJTl9ERVJJVkVEX0lURVJBVE9SX1RZUEUoVklT
SVRfU0lNUExFX1RZUEVfU1RSVUNUVVJFKQotICAgIEZPUl9FQUNIX1NJTVBMRV9CVUlMVElOX1RZ
UEUoVklTSVRfU0lNUExFX1RZUEVfUFJPVE9UWVBFKQotICAgIEZPUl9FQUNIX0JVSUxUSU5fREVS
SVZFRF9JVEVSQVRPUl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFX1BST1RPVFlQRSkKKyAgICBGT1Jf
RUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFKQorICAgIEZPUl9FQUNI
X0JVSUxUSU5fREVSSVZFRF9JVEVSQVRPUl9UWVBFKFZJU0lUX1NJTVBMRV9UWVBFKQogCiAjZGVm
aW5lIFZJU0lUX0xBWllfVFlQRShDYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJOYW1lLCBp
bnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIGlmIChmZWF0
dXJlRmxhZykgXAogICAgICAgICB0aGlzT2JqZWN0LT5tXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzc2
LDcgKzM3NiwyMCBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV93aXRoU2NvcGVTdHJ1Y3R1cmU7CiAgICAgTGF6eVBy
b3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fc3RyaWN0RXZhbEFjdGl2YXRpb25T
dHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9sZXhpY2FsRW52aXJvbm1l
bnRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fbW9kdWxlRW52aXJvbm1lbnRTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmU7CisKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX29iamVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yOworICAgICAgICAKKyAg
ICAvLyBMaXN0cyB0aGUgYWN0dWFsIHN0cnVjdHVyZXMgdXNlZCBmb3IgaGF2aW5nIHRoZXNlIHBh
cnRpY3VsYXIgaW5kZXhpbmcgc2hhcGVzLgorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVbTnVtYmVyT2ZBcnJheUluZGV4
aW5nTW9kZXNdOworICAgIC8vIExpc3RzIHRoZSBzdHJ1Y3R1cmVzIHdlIHNob3VsZCB1c2UgZHVy
aW5nIGFsbG9jYXRpb24gZm9yIHRoZXNlIHBhcnRpY3VsYXIgaW5kZXhpbmcgc2hhcGVzLgorICAg
IC8vIFRoZXNlIHN0cnVjdHVyZXMgd2lsbCBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWxzIGxpc3Qg
YWJvdmUgd2hlbiB3ZSBhcmUgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nU2hhcGVEdXJpbmdBbGxvY2F0aW9u
W051bWJlck9mQXJyYXlJbmRleGluZ01vZGVzXTsKKwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZTsKQEAgLTM4OCw1NyArNDAxLDQyIEBAIHB1YmxpYzoK
ICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9nbGliQ2FsbGJh
Y2tGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0
cnVjdHVyZT4gbV9nbGliV3JhcHBlck9iamVjdFN0cnVjdHVyZTsKICNlbmRpZgorICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKKyAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxlZVN0cnVjdHVyZTsKIAotICAgIFdyaXRlQmFy
cmllclN0cnVjdHVyZUlEIG1fbGV4aWNhbEVudmlyb25tZW50U3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fc2NvcGVkQXJndW1lbnRzU3RydWN0dXJlOwotICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fY2xvbmVkQXJndW1lbnRzU3RydWN0dXJlOwotCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3Rv
cjsKLQotICAgIC8vIExpc3RzIHRoZSBhY3R1YWwgc3RydWN0dXJlcyB1c2VkIGZvciBoYXZpbmcg
dGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFwZXMuCi0gICAgV3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQgbV9vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZVtOdW1iZXJPZkFy
cmF5SW5kZXhpbmdNb2Rlc107Ci0gICAgLy8gTGlzdHMgdGhlIHN0cnVjdHVyZXMgd2Ugc2hvdWxk
IHVzZSBkdXJpbmcgYWxsb2NhdGlvbiBmb3IgdGhlc2UgcGFydGljdWxhciBpbmRleGluZyBzaGFw
ZXMuCi0gICAgLy8gVGhlc2Ugc3RydWN0dXJlcyB3aWxsIGRpZmZlciBmcm9tIHRoZSBvcmlnaW5h
bHMgbGlzdCBhYm92ZSB3aGVuIHdlIGFyZSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICBXcml0ZUJh
cnJpZXJTdHJ1Y3R1cmVJRCBtX2FycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdTaGFwZUR1cmluZ0Fs
bG9jYXRpb25bTnVtYmVyT2ZBcnJheUluZGV4aW5nTW9kZXNdOwotCi0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlOwotICAgIFdyaXRlQmFy
cmllclN0cnVjdHVyZUlEIG1fY2FsbGVlU3RydWN0dXJlOwotCi0gICAgV3JpdGVCYXJyaWVyU3Ry
dWN0dXJlSUQgbV9ob3N0RnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9ob3N0RnVuY3Rpb25TdHJ1Y3R1cmU7CiAKICAgICBzdHJ1Y3QgRnVuY3Rpb25TdHJ1
Y3R1cmVzIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgYXJyb3dGdW5jdGlvblN0
cnVjdHVyZTsKLSAgICAgICAgV3JpdGVCYXJyaWVyU3RydWN0dXJlSUQgc2xvcHB5RnVuY3Rpb25T
dHJ1Y3R1cmU7Ci0gICAgICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIHN0cmljdEZ1bmN0aW9u
U3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBhcnJvd0Z1bmN0aW9u
U3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzbG9wcHlGdW5jdGlv
blN0cnVjdHVyZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RyaWN0RnVuY3Rp
b25TdHJ1Y3R1cmU7CiAgICAgfTsKICAgICBGdW5jdGlvblN0cnVjdHVyZXMgbV9idWlsdGluRnVu
Y3Rpb25zOwogICAgIEZ1bmN0aW9uU3RydWN0dXJlcyBtX29yZGluYXJ5RnVuY3Rpb25zOwogCi0g
ICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJp
ZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1
cmVJRCBtX2FzeW5jRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJl
SUQgbV9hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0
cnVjdHVyZUlEIG1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9nZW5lcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0
dXJlSUQgbV9hc3luY0dlbmVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1
cmVJRCBtX2FycmF5SXRlcmF0b3JTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVyU3RydWN0dXJl
SUQgbV9tYXBJdGVyYXRvclN0cnVjdHVyZTsKLSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBt
X3NldEl0ZXJhdG9yU3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlOwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1f
cmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVCYXJyaWVy
U3RydWN0dXJlSUQgbV9yZWdFeHBNYXRjaGVzSW5kaWNlc0FycmF5U3RydWN0dXJlOwotCiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fYm91bmRGdW5jdGlvblN0
cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9j
dXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlv
blN0cnVjdHVyZTsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKKyAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwor
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxBc3luY0Z1bmN0aW9uUHJvdG90eXBlPiBtX2FzeW5jRnVuY3Rpb25Qcm90b3R5cGU7
CiAgICAgV3JpdGVCYXJyaWVyPEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5
bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FzeW5jRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9hc3luY0dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9nZW5lcmF0b3JTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9hc3luY0dlbmVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FycmF5SXRlcmF0b3JTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9tYXBJdGVyYXRvclN0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Nl
dEl0ZXJhdG9yU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0
eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2RhdGFQcm9wZXJ0eURlc2NyaXB0b3JPYmpl
Y3RTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fYWNjZXNzb3JQcm9wZXJ0eURlc2NyaXB0b3JPYmplY3RTdHJ1Y3R1cmU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7CisgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVj
dHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2Vz
QXJyYXlTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmU+IG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9i
amVjdCwgU3RydWN0dXJlPiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZTsKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9wcm94eU9iamVjdFN0cnVj
dHVyZTsKQEAgLTQ0NiwxOSArNDQ0LDE1IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9wcm94eVJldm9rZVN0cnVjdHVyZTsKICAgICBMYXp5
Q2xhc3NTdHJ1Y3R1cmUgbV9zaGFyZWRBcnJheUJ1ZmZlclN0cnVjdHVyZTsKIAotI2RlZmluZSBE
RUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfUFJPVE9UWVBFKGNhcGl0YWxOYW1lLCBsb3dl
ck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBm
ZWF0dXJlRmxhZykgXAotICAgIFdyaXRlQmFycmllcjxjYXBpdGFsTmFtZSAjIyBQcm90b3R5cGU+
IG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGU7Ci0KLSNkZWZpbmUgREVGSU5FX1NUT1JBR0Vf
Rk9SX1NJTVBMRV9UWVBFX1NUUlVDVFVSRShjYXBpdGFsTmFtZSwgbG93ZXJOYW1lLCBwcm9wZXJO
YW1lLCBpbnN0YW5jZVR5cGUsIGpzTmFtZSwgcHJvdG90eXBlQmFzZSwgZmVhdHVyZUZsYWcpIFwK
LSAgICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVy
ZTsKKyNkZWZpbmUgREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKGNhcGl0YWxOYW1lLCBs
b3dlck5hbWUsIHByb3Blck5hbWUsIGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNl
LCBmZWF0dXJlRmxhZykgXAorICAgIFdyaXRlQmFycmllcjxjYXBpdGFsTmFtZSAjIyBQcm90b3R5
cGU+IG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGU7IFwKKyAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZTsKIAogI2RlZmluZSBERUZJTkVf
U1RPUkFHRV9GT1JfTEFaWV9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUs
IGluc3RhbmNlVHlwZSwganNOYW1lLCBwcm90b3R5cGVCYXNlLCBmZWF0dXJlRmxhZykgXAogICAg
IExhenlDbGFzc1N0cnVjdHVyZSBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVjdHVyZTsKIAotICAg
IEZPUl9FQUNIX1NJTVBMRV9CVUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9U
WVBFX1NUUlVDVFVSRSkKLSAgICBGT1JfRUFDSF9CVUlMVElOX0RFUklWRURfSVRFUkFUT1JfVFlQ
RShERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfU1RSVUNUVVJFKQotICAgIEZPUl9FQUNI
X1NJTVBMRV9CVUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFX1BST1RP
VFlQRSkKLSAgICBGT1JfRUFDSF9CVUlMVElOX0RFUklWRURfSVRFUkFUT1JfVFlQRShERUZJTkVf
U1RPUkFHRV9GT1JfU0lNUExFX1RZUEVfUFJPVE9UWVBFKQorICAgIEZPUl9FQUNIX1NJTVBMRV9C
VUlMVElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQorICAgIEZPUl9FQUNI
X0JVSUxUSU5fREVSSVZFRF9JVEVSQVRPUl9UWVBFKERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVf
VFlQRSkKICAgICAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgTGF6eVByb3BlcnR5PEpT
R2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1
cmU7CkBAIC00NzAsOCArNDY0LDcgQEAgcHVibGljOgogCiAgICAgRk9SX0VBQ0hfTEFaWV9CVUlM
VElOX1RZUEUoREVGSU5FX1NUT1JBR0VfRk9SX0xBWllfVFlQRSkKIAotI3VuZGVmIERFRklORV9T
VE9SQUdFX0ZPUl9TSU1QTEVfVFlQRV9QUk9UT1RZUEUKLSN1bmRlZiBERUZJTkVfU1RPUkFHRV9G
T1JfU0lNUExFX1RZUEVfU1RSVUNUVVJFCisjdW5kZWYgREVGSU5FX1NUT1JBR0VfRk9SX1NJTVBM
RV9UWVBFCiAjdW5kZWYgREVGSU5FX1NUT1JBR0VfRk9SX0xBWllfVFlQRQogCiAgICAgV3JpdGVC
YXJyaWVyPEdldHRlclNldHRlcj4gbV9zcGVjaWVzR2V0dGVyU2V0dGVyOwpAQCAtNTgxLDcgKzU3
NCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9ldmFsRW5hYmxlZCB7IHRydWUgfTsKICAgICBi
b29sIG1fd2ViQXNzZW1ibHlFbmFibGVkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9uZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgbV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoIHsgMSB9OwogICAgIFN0cmluZyBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsK
ICAgICBTdHJpbmcgbV93ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlOwpAQCAtMTIwMiw2
ICsxMTk0LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAKKyAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MgeyBmYWxzZSB9OwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRy
PEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2OSw5ICszNjksOSBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
CiAgICAgLy8gaHR0cHM6Ly9wZGZzLnNlbWFudGljc2Nob2xhci5vcmcvMzQzZi83MTgyY2RlNzY2
OWNhMmE3ZGUzZGMwMTEyNzkyN2YzODRlZjcucGRmCiAgICAgCiAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAgIGlmIChzdHJ1Y3R1cmVJRC5pc051
a2VkKCkpCisgICAgaWYgKGlzTnVrZWQoc3RydWN0dXJlSUQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBzdHJ1Y3R1
cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJlSUQpOwogICAgIG1heE9mZnNldCA9IHN0cnVj
dHVyZS0+bWF4T2Zmc2V0KCk7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZTsKICAgICBE
ZXBlbmRlbmN5IGluZGV4aW5nTW9kZURlcGVuZGVuY3kgPSBzdHJ1Y3R1cmUtPmZlbmNlZEluZGV4
aW5nTW9kZShpbmRleGluZ01vZGUpOwpAQCAtMTE2OSw3ICsxMTY5LDcgQEAgQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIERlZmVyR0MgZGVmZXJHQyh2bSk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uo
dm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1
Y3R1cmVJRCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlSUQu
ZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUo
b2xkU3RydWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6
OkFsbG9jYXRlVW5kZWNpZGVkKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZt
LCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7CkBAIC0xMTgzLDcgKzExODMsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCku
YXQodGhpcywgaSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVj
dHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUludDMyKTsKICAgICBu
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVy
Zmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xMTk3LDcgKzEx
OTcsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSkgPSBQTmFOOwog
ICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlE
KTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZURvdWJs
ZSk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQs
IG5ld0J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwpAQCAt
MTIxMSw3ICsxMjExLDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmF0KHRoaXMsIGkpLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJl
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKTsKICAgICBudWtlU3RydWN0dXJl
QW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiB7CiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVy
ZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmVJRC5kZWNv
ZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShvbGRT
dHJ1Y3R1cmVJRCk7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUoKTsK
ICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBl
KSk7CiAKQEAgLTEzMzEsNyArMTMzMSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRVbmRlY2lkZWQKICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlE
ID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG9s
ZFN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0u
Z2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIHRy
YW5zaXRpb24pOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVj
dHVyZUlELCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSBvbGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9
IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJl
LCB0cmFuc2l0aW9uKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRT
dHJ1Y3R1cmVJRCwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwogICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlSUQgb2xk
U3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwotICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gb2xkU3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0
cnVjdHVyZSwgdHJhbnNpdGlvbik7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2
bSwgb2xkU3RydWN0dXJlSUQsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKICAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CkBAIC0xNTIyLDcgKzE1MjIsNyBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAKICAgICBBU1NFUlQobmV3U3RvcmFnZS0+
YnV0dGVyZmx5KCkgIT0gYnV0dGVyZmx5KTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBv
bGRTdHJ1Y3R1cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IHZt
LmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCB0
cmFuc2l0aW9uKTsKIAogICAgIC8vIEVuc3VyZSBuZXcgQnV0dGVyZmx5IGluaXRpYWxpemF0aW9u
IGlzIGNvcnJlY3RseSBkb25lIGJlZm9yZSBleHBvc2luZyBpdCB0byB0aGUgY29uY3VycmVudCB0
aHJlYWRzLgpAQCAtMjAyNCw3ICsyMDI0LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Q3Vz
dG9tR2V0dGVyU2V0dAogICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSk7CiAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gcHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3RydWN0dXJlSUQsIHN0cnVjdHVyZSk7CiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKIApAQCAtMjA1MSw3ICsyMDUxLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcgogewogICAgIEFTU0VSVChhdHRyaWJ1dGVzICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHRo
aXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJ
RC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3RydWN0dXJlSUQsIHN0cnVjdHVyZSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZz
ZXQsIGFjY2Vzc29yKTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdgogaW5saW5lIHZvaWQgSlNPYmplY3Q6Om51a2VTdHJ1
Y3R1cmVBbmRTZXRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgaWYgKGlzWDg2KCkgfHwgdm0uaGVhcC5tdXRh
dG9yU2hvdWxkQmVGZW5jZWQoKSkgewotICAgICAgICBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KG9s
ZFN0cnVjdHVyZUlELm51a2UoKSk7CisgICAgICAgIHNldFN0cnVjdHVyZUlERGlyZWN0bHkobnVr
ZShvbGRTdHJ1Y3R1cmVJRCkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAg
ICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC0xNTAwLDYgKzE1MDAsNyBAQCB0ZW1wbGF0ZTxib29sIGNo
ZWNrTnVsbFN0cnVjdHVyZT4KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxP
YmplY3QpOworICAgIGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBpZiAoVU5MSUtFTFkoVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdChvYmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKQEAgLTE1MTQsMTAgKzE1MTUsMTAg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICAgICAg
cmV0dXJuIG9iamVjdC0+Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUo
KSAhPSBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlSUQoKS5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChjaGVja051bGxTdHJ1Y3R1cmUgJiYgVU5MSUtFTFko
IXN0cnVjdHVyZSkpCi0gICAgICAgICAgICBDUkFTSF9XSVRIX0lORk8ob2JqZWN0LT50eXBlKCks
IG9iamVjdC0+c3RydWN0dXJlSUQoKS5iaXRzKCkpOworICAgICAgICAgICAgQ1JBU0hfV0lUSF9J
TkZPKG9iamVjdC0+dHlwZSgpLCBvYmplY3QtPnN0cnVjdHVyZUlEKCksIHN0cnVjdHVyZUlEVGFi
bGUuc2l6ZSgpKTsKICNlbmRpZgogICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFBy
b3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5
ICsxMTAsMTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogewog
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3Ry
dWN0dXJlSUQoKS5kZWNvZGUoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBib29sIGhh
c1Nsb3QgPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICho
YXNTbG90KQpAQCAtMTUwLDkgKzE1MSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldE5vbkluZGV4CiAKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBzdHJ1Y3R1cmVJ
RFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmplY3QtPnN0cnVjdHVyZUlEKCkuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICAgICAgaWYgKExJS0VMWSghVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dChvYmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKICAgICAgICAgICAgIGlmIChvYmplY3Qt
PmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTcsNyArMjE5LDcgQEAg
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEFTU0VSVCghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwog
ICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlE
KTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmVJRCwgc3Ry
dWN0dXJlKTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQpAQCAtMzI2LDcgKzMyOCw3IEBA
IEFMV0FZU19JTkxJTkUgQVNDSUlMaXRlcmFsIEpTT2JqZWN0OjpwdXQKICAgICBBU1NFUlQoIXBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9
IHRoaXMtPnN0cnVjdHVyZUlEKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVJRC5kZWNvZGUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmVJRCk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKGluZGV4aW5nTW9kZSgp
KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogSlNQcm9wZXJ0eU5hbWUKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90
IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRl
QmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3Ry
dWN0dXJlLmdldCgpKQogICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5h
bWVzQnVmZmVyKQotICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCh2bSwgdGhpcywgc3RydWN0dXJl
LCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6TWF5QmVOdWxsKQorICAgICwgbV9jYWNoZWRTdHJ1
Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVk
TGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgo
bnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXgocHJvcGVydHlOYW1lc1NpemUpCkBAIC04Niw3ICs4NiwxMSBAQCB2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsCiAgICAgICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeShw
cm9wZXJ0eU5hbWVzKTsKICAgICAgICAgdmlzaXRvci5hcHBlbmQocHJvcGVydHlOYW1lcywgcHJv
cGVydHlOYW1lcyArIHRoaXNPYmplY3QtPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CiAgICAgfQot
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fY2FjaGVkU3RydWN0dXJlSUQpOworCisg
ICAgaWYgKHRoaXNPYmplY3QtPmNhY2hlZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgVk0mIHZt
ID0gdmlzaXRvci52bSgpOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKHZtLmdl
dFN0cnVjdHVyZSh0aGlzT2JqZWN0LT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSk7CisgICAgfQogfQog
CiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzIsMTAgKzcyLDExIEBAIHB1YmxpYzoKIAogICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJl
KFZNJiB2bSkgY29uc3QKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgICAg
IHJldHVybiBtX2NhY2hlZFN0cnVjdHVyZUlELmdldCgpOworICAgICAgICBpZiAoIW1fY2FjaGVk
U3RydWN0dXJlSUQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChtX2NhY2hlZFN0cnVjdHVyZUlEKTsKICAg
ICB9Ci0gICAgU3RydWN0dXJlSUQgY2FjaGVkU3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZFN0cnVjdHVyZUlELnZhbHVlKCk7IH0KKyAgICBTdHJ1Y3R1cmVJRCBjYWNoZWRTdHJ1
Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQ7IH0KICAgICB1aW50
MzJfdCBpbmRleGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkTGVuZ3RoOyB9CiAg
ICAgdWludDMyX3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsgfQogICAgIHVpbnQzMl90IGVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsgfQpA
QCAtMTA2LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yIGlzIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggYWxsb3dzIFZNIHRvIGNhY2hl
IHRoZSBlbXB0eSBvbmUuCiAgICAgLy8gQWZ0ZXIgaW5zdGFudGlhdGluZyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIHdlIG11c3Qgbm90IGNoYW5nZSBhbnkgZmllbGRzLgogICAgIEF1eGlsaWFy
eUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKLSAgICBX
cml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOworICAgIFN0cnVjdHVy
ZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9pbmRleGVkTGVuZ3RoOwog
ICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBt
X2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9UaGlz
TnVtYmVyKFYKICAgICB9CiAKICAgICBpZiAoYXV0byogbnVtYmVyT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxOdW1iZXJPYmplY3QqPih2bSwgdGhpc1ZhbHVlKSkgewotICAgICAgICBJbnRlZ3JpdHk6
OmF1ZGl0U3RydWN0dXJlSUQobnVtYmVyT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
SW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBudW1iZXJPYmplY3QtPnN0cnVjdHVyZUlE
KCkpOwogICAgICAgICB4ID0gbnVtYmVyT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCkuYXNOdW1iZXIo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihv
YmplY3RQcm90b0Z1bmMKICAgICBKU09iamVjdCogdmFsdWVPYmogPSB0aGlzVmFsdWUudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlT2JqKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlE
KHZhbHVlT2JqLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJl
SUQoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZU9iai0+c3RydWN0dXJlSUQoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9iaik7CiB9CiAKQEAgLTM2MSw3ICszNjEsNyBAQCBK
U1N0cmluZyogb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcoSlNHbG9iCiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0
U3RydWN0dXJlSUQodm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgIGF1dG8gcmVz
dWx0ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENh
Y2hlZFNwZWNpYWxQcm9wZXJ0eUtleTo6VG9TdHJpbmdUYWcpOwogICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBhc1N0cmluZyhyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyODY5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KHJlZ0V4cFByb3RvRnVuYwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QodGhp
c1ZhbHVlKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSk7CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tl
cihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYwLDcgKzk2MCw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihzdHJpbmdQcm90b0Z1bmMKICAgICAvLyBBbHNvIHVzZWQgZm9yIHZhbHVl
T2YuCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSW50ZWdyaXR5
OjphdWRpdFN0cnVjdHVyZUlEKHRoaXNWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc1ZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpOwogICAgIH0KIApAQCAtOTY4LDcgKzk2OCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihzdHJpbmdQcm90b0Z1bmMKICAgICBpZiAoIXN0cmluZ09iamVjdCkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBJbnRlZ3JpdHk6
OmF1ZGl0U3RydWN0dXJlSUQoc3RyaW5nT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRl
Z3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN0cmluZ09iamVjdC0+c3RydWN0dXJlSUQoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdPYmplY3QtPmludGVybmFsVmFsdWUo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpIHsKIAogU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAgOiBK
U0NlbGwodm0sIHZtLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fYmxvYihTdHJ1
Y3R1cmVJRDo6ZW5jb2RlKHRoaXMpLCBpbmRleGluZ1R5cGUsIHR5cGVJbmZvKQorICAgICwgbV9i
bG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQodGhpcyksIGluZGV4aW5n
VHlwZSwgdHlwZUluZm8pCiAgICAgLCBtX291dE9mTGluZVR5cGVGbGFncyh0eXBlSW5mby5vdXRP
ZkxpbmVUeXBlRmxhZ3MoKSkKICAgICAsIG1faW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkp
CiAgICAgLCBtX2JpdEZpZWxkKDApCkBAIC0yNjQsNyArMjY0LDcgQEAgU3RydWN0dXJlOjpTdHJ1
Y3R1cmUoVk0mIHZtLCBDcmVhdGluZ0VhcgogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBUeXBlSW5mbyhTdHJ1Y3R1cmVUeXBl
LCBTdHJ1Y3R1cmVGbGFncyk7Ci0gICAgbV9ibG9iID0gU3RydWN0dXJlSURCbG9iKFN0cnVjdHVy
ZUlEOjplbmNvZGUodGhpcyksIDAsIHR5cGVJbmZvKTsKKyAgICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJ
REJsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJRCh0aGlzKSwgMCwgdHlw
ZUluZm8pOwogICAgIG1fb3V0T2ZMaW5lVHlwZUZsYWdzID0gdHlwZUluZm8ub3V0T2ZMaW5lVHlw
ZUZsYWdzKCk7CiAKICAgICBBU1NFUlQoaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bygpIHx8ICFtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSk7CkBAIC0zMDEsNyArMzAxLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1
cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNl
dCk7CiAgCiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91cy0+dHlwZUluZm8oKTsKLSAg
ICBtX2Jsb2IgPSBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQ6OmVuY29kZSh0aGlzKSwgcHJl
dmlvdXMtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUluZm8pOworICAgIG1f
YmxvYiA9IFN0cnVjdHVyZUlEQmxvYih2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5hbGxvY2F0
ZUlEKHRoaXMpLCBwcmV2aW91cy0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0eXBl
SW5mbyk7CiAgICAgbV9vdXRPZkxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5vdXRPZkxpbmVUeXBl
RmxhZ3MoKTsKIAogICAgIEFTU0VSVCghcHJldmlvdXMtPnR5cGVJbmZvKCkuc3RydWN0dXJlSXNJ
bW1vcnRhbCgpKTsKQEAgLTMyNiw2ICszMjYsNyBAQCBTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKQog
CiAgICAgaWYgKGlzQnJhbmRlZFN0cnVjdHVyZSgpKQogICAgICAgICBzdGF0aWNfY2FzdDxCcmFu
ZGVkU3RydWN0dXJlKj4odGhpcyktPmRlc3RydWN0KCk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+
c3RydWN0dXJlSURUYWJsZSgpLmRlYWxsb2NhdGVJRCh0aGlzLCBtX2Jsb2Iuc3RydWN0dXJlSUQo
KSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTkwOSw3
ICs5MTAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAg
CiAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtKTsKICAgICAK
LSAgICBvYmplY3QtPnNldFN0cnVjdHVyZUlERGlyZWN0bHkoaWQoKS5udWtlKCkpOworICAgIG9i
amVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShudWtlKGlkKCkpKTsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKQEAgLTEzNjksNyArMTM3MCw3IEBAIFJlZjxTdHJ1Y3R1
cmVTaGFwZT4gU3RydWN0dXJlOjp0b1N0cnVjdHUKIAogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBhdXRvKiBzdHJ1Y3R1cmVJRCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGlkKCkuYml0cygpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmVJRCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGlkKCkpOwogICAgIG91dC5wcmludChSYXdQb2ludGVyKHRo
aXMpLCAiOlsiLCBSYXdQb2ludGVyKHN0cnVjdHVyZUlEKSwKICAgICAgICAgIi8iLCAodWludDMy
X3QpKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVJRCkpLCAiLCAiLAogICAg
ICAgICBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lLCAiLCAoIiwgaW5saW5lU2l6ZSgpLCAiLyIsIGlu
bGluZUNhcGFjaXR5KCksICIsICIsCkBAIC0xNDY5LDcgKzE0NzAsNyBAQCB1aW50cHRyX3QgU3Ry
dWN0dXJlOjpjYWNoZWRQcm9wZXJ0eU5hbWVFCiAgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3JBbmRGbGFnKCk7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpj
YW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6
OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pIGNvbnN0CiB7CiAgICAgaWYg
KCF0aGlzLT5jYW5DYWNoZU93blByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTQ4MSw3ICsxNDgyLDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlO
YW1lRW51bQogICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9ICpjdXJyZW50U3RydWN0
dXJlSUQ7CiAgICAgICAgIGlmICghc3RydWN0dXJlSUQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5kZWNvZGUoKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUoc3RydWN0dXJl
SUQpOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+Y2FuQ2FjaGVPd25Qcm9wZXJ0eU5hbWVzKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmVJRCsr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBudW1iZXJPZkxvd2VyVGllckNlbGxzID0gMDsKICAgICAK
ICAgICBlbnVtIFBvbHlQcm90b1RhZyB7IFBvbHlQcm90byB9OwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gTm9uQXJyYXksIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMCk7CkBAIC0xNjUsNyArMTY0LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHZhbGlkYXRlRmxhZ3MoKTsKIAogcHVibGljOgotICAgIFN0cnVjdHVyZUlEIGlk
KCkgY29uc3QgeyBBU1NFUlQobV9ibG9iLnN0cnVjdHVyZUlEKCkgPT0gU3RydWN0dXJlSUQ6OmVu
Y29kZSh0aGlzKSk7IHJldHVybiBtX2Jsb2Iuc3RydWN0dXJlSUQoKTsgfQorICAgIFN0cnVjdHVy
ZUlEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLnN0cnVjdHVyZUlEKCk7IH0KICAgICBpbnQz
Ml90IG9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5ibG9i
RXhjbHVkaW5nU3RydWN0dXJlSUQoKTsgfQogICAgIGludDY0X3QgaWRCbG9iKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmJsb2IoKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDYgQEAgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZUNoYWluOjpjcmVh
dGUoVgogICAgICsrc2l6ZTsgLy8gU2VudGluZWwgbnVsbHB0ci4KICAgICBzaXplX3QgYnl0ZXMg
PSBDaGVja2VkPHNpemVfdD4oc2l6ZSkgKiBzaXplb2YoU3RydWN0dXJlSUQpOwogICAgIHZvaWQq
IHZlY3RvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCkuYWxsb2NhdGUodm0s
IGJ5dGVzLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7Ci0gICAgc3Rh
dGljX2Fzc2VydCghU3RydWN0dXJlSUQoKS5iaXRzKCksICJNYWtlIHN1cmUgdGhlIHZhbHVlIHdl
J3JlIGdvaW5nIHRvIG1lbWNweSBiZWxvdyBtYXRjaGVzIHRoZSBkZWZhdWx0IFN0cnVjdHVyZUlE
Iik7CiAgICAgbWVtc2V0KHZlY3RvciwgMCwgYnl0ZXMpOwogICAgIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPih2bSkpIFN0
cnVjdHVyZUNoYWluKHZtLCB2bS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8U3RydWN0dXJlSUQqPih2ZWN0b3IpKTsKICAgICBjaGFpbi0+ZmluaXNoQ3JlYXRpb24o
dm0sIGhlYWQpOwpAQCAtNzQsOSArNzMsMTAgQEAgdm9pZCBTdHJ1Y3R1cmVDaGFpbjo6dmlzaXRD
aGlsZHJlbkltcGwoSgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
ICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7Cisg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOwogICAgIGZvciAoYXV0byogY3VycmVudCA9IHRoaXNP
YmplY3QtPm1fdmVjdG9yLmdldCgpOyAqY3VycmVudDsgKytjdXJyZW50KSB7CiAgICAgICAgIFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJlbnQ7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChzdHJ1Y3R1cmUpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSUQuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSUQuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkpTQ0NvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZEludEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgU3RydWN0dXJl
OwotCi1jb25zdGV4cHIgQ1BVUmVnaXN0ZXIgc3RydWN0dXJlSURNYXNrID0gc3RydWN0dXJlSGVh
cEFkZHJlc3NTaXplIC0gMTsKLQotY2xhc3MgU3RydWN0dXJlSUQgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVrZWRTdHJ1Y3R1cmVJREJpdCA9IDE7Ci0KLSAgICBT
dHJ1Y3R1cmVJRCgpID0gZGVmYXVsdDsKLSAgICBTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBjb25z
dCYpID0gZGVmYXVsdDsKLSAgICBTdHJ1Y3R1cmVJRCYgb3BlcmF0b3I9KFN0cnVjdHVyZUlEIGNv
bnN0JikgPSBkZWZhdWx0OwotCi0gICAgU3RydWN0dXJlSUQgbnVrZSgpIGNvbnN0IHsgcmV0dXJu
IFN0cnVjdHVyZUlEKG1fYml0cyB8IG51a2VkU3RydWN0dXJlSURCaXQpOyB9Ci0gICAgYm9vbCBp
c051a2VkKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICYgbnVrZWRTdHJ1Y3R1cmVJREJpdDsgfQot
ICAgIFN0cnVjdHVyZUlEIGRlY29udGFtaW5hdGUoKSBjb25zdCB7IHJldHVybiBTdHJ1Y3R1cmVJ
RChtX2JpdHMgJiB+bnVrZWRTdHJ1Y3R1cmVJREJpdCk7IH0KLQotICAgIGlubGluZSBTdHJ1Y3R1
cmUqIGRlY29kZSgpIGNvbnN0OwotICAgIHN0YXRpYyBTdHJ1Y3R1cmVJRCBlbmNvZGUoY29uc3Qg
U3RydWN0dXJlKik7Ci0KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX2JpdHM7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oU3RydWN0dXJlSUQgY29uc3QmIG90
aGVyKSBjb25zdCAgeyByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShTdHJ1Y3R1cmVJRCBjb25zdCYgb3RoZXIpIGNvbnN0ICB7IHJldHVybiBtX2Jp
dHMgIT0gb3RoZXIubV9iaXRzOyB9Ci0gICAgY29uc3RleHByIHVpbnQzMl90IGJpdHMoKSBjb25z
dCB7IHJldHVybiBtX2JpdHM7IH0KLQotICAgIFN0cnVjdHVyZUlEKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBtX2JpdHMobnVrZWRTdHJ1Y3R1cmVJREJpdCkgeyB9Ci0gICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IFN0cnVj
dHVyZUlEKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFN0cnVjdHVyZUlEKHVpbnQzMl90IGJpdHMpIDogbV9iaXRzKGJpdHMpIHsgfQotCi0g
ICAgdWludDMyX3QgbV9iaXRzIHsgMCB9OwotfTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFN0cnVj
dHVyZUlEKSA9PSBzaXplb2YodWludDMyX3QpKTsKLQotI2lmIENQVShBRERSRVNTNjQpCi0KLUFM
V0FZU19JTkxJTkUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRDo6ZGVjb2RlKCkgY29uc3QKLXsKLSAg
ICAvLyBUYWtlIGNhcmUgdG8gb25seSB1c2UgdGhlIGJpdHMgZnJvbSBtX2JpdHMgaW4gdGhlIHN0
cnVjdHVyZSdzIGFkZHJlc3MgcmVzZXJ2YXRpb24uCi0gICAgQVNTRVJUKGRlY29udGFtaW5hdGUo
KSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oZGVjb250YW1pbmF0ZSgpLm1fYml0cykgJiBzdHJ1Y3R1cmVJRE1hc2spICsg
Z19qc2NDb25maWcuc3RhcnRPZlN0cnVjdHVyZUhlYXApOwotfQotCi1BTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZUlEIFN0cnVjdHVyZUlEOjplbmNvZGUoY29uc3QgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKGdfanNjQ29uZmlnLnN0YXJ0
T2ZTdHJ1Y3R1cmVIZWFwIDw9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUp
ICYmIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpIDwgZ19qc2NDb25maWcu
c3RhcnRPZlN0cnVjdHVyZUhlYXAgKyBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUpOwotICAgIGF1
dG8gcmVzdWx0ID0gU3RydWN0dXJlSUQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0cnVj
dHVyZSkgJiBzdHJ1Y3R1cmVJRE1hc2spOwotICAgIEFTU0VSVChyZXN1bHQuZGVjb2RlKCkgPT0g
c3RydWN0dXJlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZWxzZSAvLyBDUFUoQUREUkVT
UzY0KQotCi1BTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogU3RydWN0dXJlSUQ6OmRlY29kZSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGRlY29udGFtaW5hdGUoKSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8U3RydWN0dXJlKj4obV9iaXRzKTsKLX0KLQotQUxXQVlTX0lOTElORSBTdHJ1Y3R1
cmVJRCBTdHJ1Y3R1cmVJRDo6ZW5jb2RlKGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJlKQotewot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBTdHJ1Y3R1cmVJRChyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKLX0KLQotI2VuZGlmCi0KLXN0cnVjdCBTdHJ1
Y3R1cmVJREhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cnVjdHVyZUlE
JiBrZXkpIHsgcmV0dXJuIGtleS5iaXRzKCk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJ1Y3R1cmVJRCYgYSwgY29uc3QgU3RydWN0dXJlSUQmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6U3RydWN0dXJlSUQ+IDogSlNDOjpTdHJ1Y3R1cmVJREhhc2gg
eyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKLXRlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpTdHJ1Y3R1cmVJRD4gOiBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8SlNDOjpTdHJ1Y3R1cmVJRD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTQgKzI4LDE3IEBACiAjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZUlELmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgU3RydWN0dXJlSURCbG9iIHsKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogcHVibGljOgotICAgIFN0cnVjdHVyZUlEQmxvYigpID0gZGVmYXVs
dDsKKyAgICBTdHJ1Y3R1cmVJREJsb2IoKQorICAgIHsKKyAgICAgICAgdS5kb3VibGVXb3JkID0g
MHhiYmFkYmVlZjsKKyAgICB9CiAKICAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5LCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewpAQCAtNzQsOSArNzcsOCBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHVuaW9uIERhdGEgeworICAgIHVuaW9uIHsKICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgc2lu
Y2UgdGhlIHN0cnVjdHVyZUlEIGNhbiBiZSBkaXJlY3RseSBjb21wdXRlZCBmcm9tIHRoZSBTdHJ1
Y3R1cmUqCiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKICAgICAgICAgICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAg
SlNUeXBlIHR5cGU7CkBAIC04OCwxMSArOTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW50
MzJfdCB3b3JkMjsKICAgICAgICAgfSB3b3JkczsKICAgICAgICAgaW50NjRfdCBkb3VibGVXb3Jk
OwotCi0gICAgICAgIERhdGEoKSB7IGRvdWJsZVdvcmQgPSAweGJiYWRiZWVmOyB9Ci0gICAgfTsK
LQotICAgIERhdGEgdTsKKyAgICB9IHU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFibGUu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlEVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VFeGhhdXN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9SYXdQb2lu
dGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgVVNFKEpTVkFMVUU2NCkKKworbmFtZXNw
YWNlIFN0cnVjdHVyZUlEVGFibGVJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOworfQorCitTdHJ1Y3R1cmVJRFRhYmxlOjpTdHJ1Y3R1cmVJRFRhYmxlKCkK
KyAgICA6IG1fdGFibGUobWFrZVVuaXF1ZUFycmF5PFN0cnVjdHVyZU9yT2Zmc2V0PihzX2luaXRp
YWxTaXplKSkKKyAgICAsIG1fc2l6ZSgxKQorICAgICwgbV9jYXBhY2l0eShzX2luaXRpYWxTaXpl
KQoreworICAgIC8vIFdlIHByZS1hbGxvY2F0ZSB0aGUgZmlyc3Qgb2Zmc2V0IHNvIHRoYXQgdGhl
IG51bGwgU3RydWN0dXJlCisgICAgLy8gY2FuIHN0aWxsIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBT
dHJ1Y3R1cmVJRCAnMCcuCisgICAgdGFibGUoKVswXS5lbmNvZGVkU3RydWN0dXJlQml0cyA9IDA7
CisKKyAgICBtYWtlRnJlZUxpc3RGcm9tUmFuZ2UoMSwgbV9jYXBhY2l0eSAtIDEpOworfQorCit2
b2lkIFN0cnVjdHVyZUlEVGFibGU6Om1ha2VGcmVlTGlzdEZyb21SYW5nZSh1aW50MzJfdCBmaXJz
dCwgdWludDMyX3QgbGFzdCkKK3sKKyAgICBBU1NFUlQoIW1fZmlyc3RGcmVlT2Zmc2V0KTsKKyAg
ICBBU1NFUlQoIW1fbGFzdEZyZWVPZmZzZXQpOworCisgICAgLy8gUHV0IGFsbCB0aGUgbmV3IElE
cyBvbiB0aGUgZnJlZSBsaXN0IHNlcXVlbnRpYWxseS4KKyAgICB1aW50MzJfdCBoZWFkID0gZmly
c3Q7CisgICAgdWludDMyX3QgdGFpbCA9IGxhc3Q7CisgICAgZm9yICh1aW50MzJfdCBpID0gZmly
c3Q7IGkgPCBsYXN0OyArK2kpCisgICAgICAgIHRhYmxlKClbaV0ub2Zmc2V0ID0gaSArIDE7Cisg
ICAgdGFibGUoKVtsYXN0XS5vZmZzZXQgPSAwOworCisgICAgLy8gUmFuZG9taXplIHRoZSBmcmVl
IGxpc3QuCisgICAgdWludDMyX3Qgc2l6ZSA9IGxhc3QgLSBmaXJzdCArIDE7CisgICAgdWludDMy
X3QgbWF4SXRlcmF0aW9ucyA9IChzaXplICogMikgLyAzOworICAgIGZvciAodWludDMyX3QgY291
bnQgPSAwOyBjb3VudCA8IG1heEl0ZXJhdGlvbnM7ICsrY291bnQpIHsKKyAgICAgICAgLy8gTW92
ZSBhIHJhbmRvbSBwaWNrIGVpdGhlciB0byB0aGUgaGVhZCBvciB0aGUgdGFpbCBvZiB0aGUgZnJl
ZSBsaXN0LgorICAgICAgICB1aW50MzJfdCByYW5kb20gPSBtX3dlYWtSYW5kb20uZ2V0VWludDMy
KCk7CisgICAgICAgIHVpbnQzMl90IG5vZGVCZWZvcmUgPSBmaXJzdCArIChyYW5kb20gJSBzaXpl
KTsKKyAgICAgICAgdWludDMyX3QgcGljayA9IHRhYmxlKClbbm9kZUJlZm9yZV0ub2Zmc2V0Owor
ICAgICAgICBpZiAocGljaykgeworICAgICAgICAgICAgdWludDMyX3Qgbm9kZUFmdGVyID0gdGFi
bGUoKVtwaWNrXS5vZmZzZXQ7CisgICAgICAgICAgICB0YWJsZSgpW25vZGVCZWZvcmVdLm9mZnNl
dCA9IG5vZGVBZnRlcjsKKyAgICAgICAgICAgIGlmICgocmFuZG9tICYgMSkgfHwgIW5vZGVBZnRl
cikgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGhlYWQuCisgICAgICAgICAgICAg
ICAgdGFibGUoKVtwaWNrXS5vZmZzZXQgPSBoZWFkOworICAgICAgICAgICAgICAgIGhlYWQgPSBw
aWNrOworICAgICAgICAgICAgICAgIGlmICghbm9kZUFmdGVyKQorICAgICAgICAgICAgICAgICAg
ICB0YWlsID0gbm9kZUJlZm9yZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gTW92ZSB0byB0aGUgdGFpbC4KKyAgICAgICAgICAgICAgICB0YWJsZSgpW3BpY2tdLm9m
ZnNldCA9IDA7CisgICAgICAgICAgICAgICAgdGFibGUoKVt0YWlsXS5vZmZzZXQgPSBwaWNrOwor
ICAgICAgICAgICAgICAgIHRhaWwgPSBwaWNrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQ3V0IGxpc3QgaW4gaGFsZiBhbmQgc3dhcCBoYWx2ZXMuCisgICAgdWlu
dDMyX3QgY3V0ID0gZmlyc3QgKyAobV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICUgc2l6ZSk7Cisg
ICAgdWludDMyX3QgYWZ0ZXJDdXQgPSB0YWJsZSgpW2N1dF0ub2Zmc2V0OworICAgIGlmIChhZnRl
ckN1dCkgeworICAgICAgICB0YWJsZSgpW3RhaWxdLm9mZnNldCA9IGhlYWQ7CisgICAgICAgIHRh
aWwgPSBjdXQ7CisgICAgICAgIGhlYWQgPSBhZnRlckN1dDsKKyAgICAgICAgdGFibGUoKVtjdXRd
Lm9mZnNldCA9IDA7CisgICAgfQorCisgICAgbV9maXJzdEZyZWVPZmZzZXQgPSBoZWFkOworICAg
IG1fbGFzdEZyZWVPZmZzZXQgPSB0YWlsOworfQorCit2b2lkIFN0cnVjdHVyZUlEVGFibGU6OnJl
c2l6ZShzaXplX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgaWYgKG5ld0NhcGFjaXR5ID4gc19tYXhp
bXVtTnVtYmVyT2ZTdHJ1Y3R1cmVzKQorICAgICAgICBuZXdDYXBhY2l0eSA9IHNfbWF4aW11bU51
bWJlck9mU3RydWN0dXJlczsKKworICAgIC8vIElmIG1fc2l6ZSBpcyBhbHJlYWR5IHNfbWF4aW11
bU51bWJlck9mU3RydWN0dXJlcywgbmV3Q2FwYWNpdHkgYmVjb21lcyBzX21heGltdW1OdW1iZXJP
ZlN0cnVjdHVyZXMgaW4gdGhlIGFib3ZlIGNvZGUuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSBz
aG91bGQgY3Jhc2ggYmVjYXVzZSBvZiBleGhhdXN0IG9mIFN0cnVjdHVyZUlEcy4KKyAgICBSRUxF
QVNFX0FTU0VSVF9SRVNPVVJDRV9BVkFJTEFCTEUobV9zaXplIDwgbmV3Q2FwYWNpdHksIFN0cnVj
dHVyZUlERXhoYXVzdGlvbiwgIkNyYXNoIGludGVudGlvbmFsbHkgYmVjYXVzZSBvZiBleGhhdXN0
IG9mIFN0cnVjdHVyZUlEcy4iKTsKKworICAgIC8vIENyZWF0ZSB0aGUgbmV3IHRhYmxlLgorICAg
IGF1dG8gbmV3VGFibGUgPSBtYWtlVW5pcXVlQXJyYXk8U3RydWN0dXJlT3JPZmZzZXQ+KG5ld0Nh
cGFjaXR5KTsKKworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBvbGQgdGFibGUgdG8g
dGhlIG5ldyB0YWJsZS4KKyAgICBtZW1jcHkobmV3VGFibGUuZ2V0KCksIHRhYmxlKCksIG1fY2Fw
YWNpdHkgKiBzaXplb2YoU3RydWN0dXJlT3JPZmZzZXQpKTsKKworICAgIC8vIFN0b3JlIGZlbmNl
IHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3BpZWQgZXZlcnl0aGluZyBiZWZvcmUgZG9pbmcgdGhlIHN3
YXAuCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKworICAgIC8vIFN3YXAgdGhlIG9sZCBh
bmQgbmV3IHRhYmxlcy4KKyAgICBzd2FwKG1fdGFibGUsIG5ld1RhYmxlKTsKKworICAgIC8vIFB1
dCB0aGUgb2xkIHRhYmxlIChub3cgbGFiZWxlZCBhcyBuZXcpIGludG8gdGhlIGxpc3Qgb2Ygb2xk
IHRhYmxlcy4KKyAgICBtX29sZFRhYmxlcy5hcHBlbmQoV1RGTW92ZShuZXdUYWJsZSkpOworCisg
ICAgLy8gVXBkYXRlIHRoZSBjYXBhY2l0eS4KKyAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7
CisKKyAgICBtYWtlRnJlZUxpc3RGcm9tUmFuZ2UobV9zaXplLCBtX2NhcGFjaXR5IC0gMSk7Cit9
CisKK3ZvaWQgU3RydWN0dXJlSURUYWJsZTo6Zmx1c2hPbGRUYWJsZXMoKQoreworICAgIG1fb2xk
VGFibGVzLmNsZWFyKCk7Cit9CisKK1N0cnVjdHVyZUlEIFN0cnVjdHVyZUlEVGFibGU6OmFsbG9j
YXRlSUQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX2ZpcnN0
RnJlZU9mZnNldCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jYXBhY2l0eSA8PSBzX21h
eGltdW1OdW1iZXJPZlN0cnVjdHVyZXMpOworICAgICAgICBBU1NFUlQobV9zaXplID09IG1fY2Fw
YWNpdHkpOworICAgICAgICByZXNpemUobV9jYXBhY2l0eSAqIDIpOworICAgICAgICBBU1NFUlQo
bV9zaXplIDwgbV9jYXBhY2l0eSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZmlyc3RGcmVl
T2Zmc2V0KTsKKyAgICB9CisKKyAgICAvLyBlbnRyb3B5Qml0cyBtdXN0IG5vdCBiZSB6ZXJvLiBU
aGlzIGVuc3VyZXMgdGhhdCBpZiBhIGNvcnJ1cHRlZAorICAgIC8vIHN0cnVjdHVyZUlEIGlzIGVu
Y291bnRlcmVkICh3aXRoIGluY29ycmVjdCBlbnRyb3B5Qml0cyksIHRoZSBkZWNvZGVkCisgICAg
Ly8gc3RydWN0dXJlIHBvaW50ZXIgZm9yIHRoYXQgSUQgd2lsbCBiZSBhbHdheXMgYmUgYSBiYWQg
cG9pbnRlciB3aXRoCisgICAgLy8gaGlnaCBiaXRzIHNldC4KKyAgICBjb25zdGV4cHIgdWludDMy
X3QgZW50cm9weUJpdHNNYXNrID0gKDEgPDwgc19udW1iZXJPZkVudHJvcHlCaXRzKSAtIDE7Cisg
ICAgdWludDMyX3QgZW50cm9weUJpdHMgPSBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCkgJiBlbnRy
b3B5Qml0c01hc2s7CisgICAgaWYgKFVOTElLRUxZKCFlbnRyb3B5Qml0cykpIHsKKyAgICAgICAg
Y29uc3RleHByIHVpbnQzMl90IG51bWJlck9mVmFsdWVzVG9QaWNrRnJvbSA9IGVudHJvcHlCaXRz
TWFzazsKKyAgICAgICAgZW50cm9weUJpdHMgPSAobV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICUg
bnVtYmVyT2ZWYWx1ZXNUb1BpY2tGcm9tKSArIDE7CisgICAgfQorCisgICAgdWludDMyX3Qgc3Ry
dWN0dXJlSW5kZXggPSBtX2ZpcnN0RnJlZU9mZnNldDsKKyAgICBtX2ZpcnN0RnJlZU9mZnNldCA9
IHRhYmxlKClbbV9maXJzdEZyZWVPZmZzZXRdLm9mZnNldDsKKyAgICBpZiAoIW1fZmlyc3RGcmVl
T2Zmc2V0KQorICAgICAgICBtX2xhc3RGcmVlT2Zmc2V0ID0gMDsKKworICAgIFN0cnVjdHVyZUlE
IHJlc3VsdCA9IChzdHJ1Y3R1cmVJbmRleCA8PCBzX251bWJlck9mRW50cm9weUJpdHMpIHwgZW50
cm9weUJpdHM7CisgICAgdGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJp
dHMgPSBlbmNvZGUoc3RydWN0dXJlLCByZXN1bHQpOworICAgIG1fc2l6ZSsrOworICAgIEFTU0VS
VCghaXNOdWtlZChyZXN1bHQpKTsKKworICAgIGRhdGFMb2dMbklmKFN0cnVjdHVyZUlEVGFibGVJ
bnRlcm5hbDo6dmVyYm9zZSwgIkFsbG9jYXRlZCBTdHJ1Y3R1cmVJRCAiLCByZXN1bHQsICIgZm9y
IFN0cnVjdHVyZSAiLCBSYXdQb2ludGVyKHN0cnVjdHVyZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgU3RydWN0dXJlSURUYWJsZTo6ZGVhbGxvY2F0ZUlEKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAgICBkYXRhTG9nTG5JZihTdHJ1
Y3R1cmVJRFRhYmxlSW50ZXJuYWw6OnZlcmJvc2UsICJEZWFsbG9jYXRlZCBTdHJ1Y3R1cmVJRCAi
LCBzdHJ1Y3R1cmVJRCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZUlEICE9IHNfdW51c2VkSUQpOwor
ICAgIHVpbnQzMl90IHN0cnVjdHVyZUluZGV4ID0gc3RydWN0dXJlSUQgPj4gc19udW1iZXJPZkVu
dHJvcHlCaXRzOworICAgIEFTU0VSVChzdHJ1Y3R1cmVJbmRleCAmJiBzdHJ1Y3R1cmVJbmRleCA8
IHNfbWF4aW11bU51bWJlck9mU3RydWN0dXJlcyk7CisgICAgUkVMRUFTRV9BU1NFUlQodGFibGUo
KVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJpdHMgPT0gZW5jb2RlKHN0cnVjdHVy
ZSwgc3RydWN0dXJlSUQpKTsKKyAgICBtX3NpemUtLTsKKyAgICBpZiAoIW1fZmlyc3RGcmVlT2Zm
c2V0KSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLm9mZnNldCA9IDA7CisgICAg
ICAgIG1fZmlyc3RGcmVlT2Zmc2V0ID0gc3RydWN0dXJlSW5kZXg7CisgICAgICAgIG1fbGFzdEZy
ZWVPZmZzZXQgPSBzdHJ1Y3R1cmVJbmRleDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJvb2wgaW5zZXJ0QXRIZWFkID0gbV93ZWFrUmFuZG9tLmdldFVpbnQzMigpICYgMTsKKyAgICBp
ZiAoaW5zZXJ0QXRIZWFkKSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLm9mZnNl
dCA9IG1fZmlyc3RGcmVlT2Zmc2V0OworICAgICAgICBtX2ZpcnN0RnJlZU9mZnNldCA9IHN0cnVj
dHVyZUluZGV4OworICAgIH0gZWxzZSB7CisgICAgICAgIHRhYmxlKClbc3RydWN0dXJlSW5kZXhd
Lm9mZnNldCA9IDA7CisgICAgICAgIHRhYmxlKClbbV9sYXN0RnJlZU9mZnNldF0ub2Zmc2V0ID0g
c3RydWN0dXJlSW5kZXg7CisgICAgICAgIG1fbGFzdEZyZWVPZmZzZXQgPSBzdHJ1Y3R1cmVJbmRl
eDsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJRFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkVuc3VyZVN0aWxsQWxp
dmVIZXJlLmgiCisjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1Jh
bmRvbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlOworCisjaWYgVVNF
KEpTVkFMVUU2NCkKK3VzaW5nIFN0cnVjdHVyZUlEID0gdWludDMyX3Q7CisKK2lubGluZSBTdHJ1
Y3R1cmVJRCBudWtlZFN0cnVjdHVyZUlEQml0KCkKK3sKKyAgICByZXR1cm4gMHg4MDAwMDAwMHU7
Cit9CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBudWtlKFN0cnVjdHVyZUlEIGlkKQoreworICAgIHJl
dHVybiBpZCB8IG51a2VkU3RydWN0dXJlSURCaXQoKTsKK30KKworaW5saW5lIGJvb2wgaXNOdWtl
ZChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyAgICByZXR1cm4gISEoaWQgJiBudWtlZFN0cnVjdHVyZUlE
Qml0KCkpOworfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb250YW1pbmF0ZShTdHJ1Y3R1cmVJ
RCBpZCkKK3sKKyAgICByZXR1cm4gaWQgJiB+bnVrZWRTdHJ1Y3R1cmVJREJpdCgpOworfQorI2Vs
c2UgLy8gbm90IFVTRShKU1ZBTFVFNjQpCit1c2luZyBTdHJ1Y3R1cmVJRCA9IFN0cnVjdHVyZSo7
CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBudWtlZFN0cnVjdHVyZUlEQml0KCkKK3sKKyAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlEPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsK
K30KKworaW5saW5lIFN0cnVjdHVyZUlEIG51a2UoU3RydWN0dXJlSUQgaWQpCit7CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmVJRD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaWQp
IHwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSk7Cit9CisK
K2lubGluZSBib29sIGlzTnVrZWQoU3RydWN0dXJlSUQgaWQpCit7CisgICAgcmV0dXJuICEhKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGlkKSAmIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG51a2Vk
U3RydWN0dXJlSURCaXQoKSkpOworfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb250YW1pbmF0
ZShTdHJ1Y3R1cmVJRCBpZCkKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlE
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpZCkgJiB+Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
bnVrZWRTdHJ1Y3R1cmVJREJpdCgpKSk7Cit9CisjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVFNjQp
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCit1c2luZyBFbmNvZGVkU3RydWN0dXJlQml0cyA9IHVp
bnRwdHJfdDsKKworY2xhc3MgU3RydWN0dXJlSURUYWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVJRFRhYmxlKCk7CisK
KyAgICB2b2lkKiogYmFzZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV90
YWJsZSk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB2YWxpZGF0ZShTdHJ1Y3R1cmVJRCk7
CisKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5MDM2ODg4OiByZW1vdmUgdGhpcyB3aGVuIG5vIGxv
bmdlciBuZWVkZWQuCisgICAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGEgc3BlY2lhbCBjYXNl
IG1pdGlnYXRpb24uIEl0IGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UuCisgICAgU3RydWN0dXJlKiB0
cnlHZXQoU3RydWN0dXJlSUQpOworCisgICAgU3RydWN0dXJlKiBnZXQoU3RydWN0dXJlSUQpOwor
ICAgIHZvaWQgZGVhbGxvY2F0ZUlEKFN0cnVjdHVyZSosIFN0cnVjdHVyZUlEKTsKKyAgICBTdHJ1
Y3R1cmVJRCBhbGxvY2F0ZUlEKFN0cnVjdHVyZSopOworCisgICAgdm9pZCBmbHVzaE9sZFRhYmxl
cygpOworICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCByZXNpemUoc2l6ZV90IG5ld0NhcGFjaXR5KTsKKyAgICB2b2lk
IG1ha2VGcmVlTGlzdEZyb21SYW5nZSh1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgbGFzdCk7CisK
KyAgICB1bmlvbiBTdHJ1Y3R1cmVPck9mZnNldCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlZFN0cnVjdHVyZUJpdHMgZW5jb2Rl
ZFN0cnVjdHVyZUJpdHM7CisgICAgICAgIHVpbnRwdHJfdCBvZmZzZXQ7CisgICAgfTsKKworICAg
IFN0cnVjdHVyZU9yT2Zmc2V0KiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7
IH0KKyAgICBzdGF0aWMgU3RydWN0dXJlKiBkZWNvZGUoRW5jb2RlZFN0cnVjdHVyZUJpdHMsIFN0
cnVjdHVyZUlEKTsKKyAgICBzdGF0aWMgRW5jb2RlZFN0cnVjdHVyZUJpdHMgZW5jb2RlKFN0cnVj
dHVyZSosIFN0cnVjdHVyZUlEKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfaW5p
dGlhbFNpemUgPSA1MTI7CisKKyAgICBWZWN0b3I8VW5pcXVlQXJyYXk8U3RydWN0dXJlT3JPZmZz
ZXQ+PiBtX29sZFRhYmxlczsKKworICAgIHVpbnQzMl90IG1fZmlyc3RGcmVlT2Zmc2V0IHsgMCB9
OworICAgIHVpbnQzMl90IG1fbGFzdEZyZWVPZmZzZXQgeyAwIH07CisgICAgVW5pcXVlQXJyYXk8
U3RydWN0dXJlT3JPZmZzZXQ+IG1fdGFibGU7CisKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9Owor
ICAgIHNpemVfdCBtX2NhcGFjaXR5OworCisgICAgV2Vha1JhbmRvbSBtX3dlYWtSYW5kb207CisK
KyAgICBzdGF0aWMgY29uc3RleHByIFN0cnVjdHVyZUlEIHNfdW51c2VkSUQgPSAwOworCitwdWJs
aWM6CisgICAgLy8gMS4gU3RydWN0dXJlSUQgaXMgZW5jb2RlZCBhczoKKyAgICAvLworICAgIC8v
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyAgICB8IDEgTnVrZSBCaXQgfCAyNiBTdHJ1Y3R1cmVJRFRhYmxl
IGluZGV4IGJpdHMgfCA1IGVudHJvcHkgYml0cyB8CisgICAgLy8gICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
CisgICAgLy8gICAgVGhlIGVudHJvcHkgYml0cyBhcmUgY2hvc2VuIGF0IHJhbmRvbSBhbmQgYXNz
aWduZWQgd2hlbiBhIFN0cnVjdHVyZUlECisgICAgLy8gICAgaXMgYWxsb2NhdGVkLgorICAgIC8v
CisgICAgLy8gMi4gRm9yIGVhY2ggU3RydWN0dXJlSUQsIHRoZSBTdHJ1Y3R1cmVJRFRhYmxlIHN0
b3JlcyBlbmNvZGVkU3RydWN0dXJlQml0cworICAgIC8vICAgIHdoaWNoIGFyZSBlbmNvZGVkIGZy
b20gdGhlIHN0cnVjdHVyZSBwb2ludGVyIGFzIHN1Y2g6CisgICAgLy8KKyAgICAvLyAgICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyAgICB8IDExIGxvdyBpbmRleCBiaXRzIHwgNSBlbnRyb3B5IGJpdHMgfCA0
OCBzdHJ1Y3R1cmUgcG9pbnRlciBiaXRzIHwKKyAgICAvLyAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLwor
ICAgIC8vICAgIFRoZSBlbnRyb3B5IGJpdHMgaGVyZSBhcmUgdGhlIHNhbWUgNSBiaXRzIHVzZWQg
aW4gdGhlIGVuY29kaW5nIG9mIHRoZQorICAgIC8vICAgIFN0cnVjdHVyZUlEIGZvciB0aGlzIHN0
cnVjdHVyZSBlbnRyeSBpbiB0aGUgU3RydWN0dXJlSURUYWJsZS4KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDMyX3Qgc19udW1iZXJPZk51a2VCaXRzID0gMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IHNfbnVtYmVyT2ZFbnRyb3B5Qml0cyA9IDU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyID0gKHNp
emVvZihFbmNvZGVkU3RydWN0dXJlQml0cykgKiA4KSAtIDE2OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBzX21heGltdW1OdW1iZXJPZlN0cnVjdHVyZXMgPSAxIDw8ICgzMiAtIHNf
bnVtYmVyT2ZFbnRyb3B5Qml0cyAtIHNfbnVtYmVyT2ZOdWtlQml0cyk7Cit9OworCitBTFdBWVNf
SU5MSU5FIFN0cnVjdHVyZSogU3RydWN0dXJlSURUYWJsZTo6ZGVjb2RlKEVuY29kZWRTdHJ1Y3R1
cmVCaXRzIGJpdHMsIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQoreworICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RydWN0dXJlKj4oYml0cyBeIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHN0cnVj
dHVyZUlEKSA8PCBzX2VudHJvcHlCaXRzU2hpZnRGb3JTdHJ1Y3R1cmVQb2ludGVyKSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgRW5jb2RlZFN0cnVjdHVyZUJpdHMgU3RydWN0dXJlSURUYWJsZTo6ZW5j
b2RlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEVuY29kZWRTdHJ1Y3R1cmVCaXRzPihzdHJ1Y3R1cmUpIF4g
KHN0YXRpY19jYXN0PEVuY29kZWRTdHJ1Y3R1cmVCaXRzPihzdHJ1Y3R1cmVJRCkgPDwgc19lbnRy
b3B5Qml0c1NoaWZ0Rm9yU3RydWN0dXJlUG9pbnRlcik7Cit9CisKK2lubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZUlEVGFibGU6OmdldChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkKK3sKKyAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdHJ1Y3R1cmVJRCk7CisgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzTnVrZWQoc3RydWN0dXJlSUQpKTsKKyAgICB1
aW50MzJfdCBzdHJ1Y3R1cmVJbmRleCA9IHN0cnVjdHVyZUlEID4+IHNfbnVtYmVyT2ZFbnRyb3B5
Qml0czsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0cnVj
dHVyZUluZGV4IDwgbV9jYXBhY2l0eSk7CisgICAgcmV0dXJuIGRlY29kZSh0YWJsZSgpW3N0cnVj
dHVyZUluZGV4XS5lbmNvZGVkU3RydWN0dXJlQml0cywgc3RydWN0dXJlSUQpOworfQorCisvLyBG
SVhNRTogcmRhcjovLzY5MDM2ODg4OiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIG5vIGxvbmdl
ciBuZWVkZWQuCitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVJRFRhYmxlOjp0cnlHZXQoU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQpCit7CisgICAgdWludDMyX3Qgc3RydWN0dXJlSW5kZXggPSBz
dHJ1Y3R1cmVJRCA+PiBzX251bWJlck9mRW50cm9weUJpdHM7CisgICAgaWYgKHN0cnVjdHVyZUlu
ZGV4ID49IG1fY2FwYWNpdHkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBk
ZWNvZGUodGFibGUoKVtzdHJ1Y3R1cmVJbmRleF0uZW5jb2RlZFN0cnVjdHVyZUJpdHMsIHN0cnVj
dHVyZUlEKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZUlEVGFibGU6OnZhbGlk
YXRlKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQoreworICAgIHVpbnQzMl90IHN0cnVjdHVyZUlu
ZGV4ID0gc3RydWN0dXJlSUQgPj4gc19udW1iZXJPZkVudHJvcHlCaXRzOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZGVjb2RlKHRhYmxlKClbc3RydWN0dXJlSW5kZXhdLmVuY29kZWRTdHJ1
Y3R1cmVCaXRzLCBzdHJ1Y3R1cmVJRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlSW5k
ZXggPCBtX2NhcGFjaXR5KTsKKyAgICAqYml0d2lzZV9jYXN0PHZvbGF0aWxlIHVpbnQ2NF90Kj4o
c3RydWN0dXJlKTsKK30KKworI2Vsc2UgLy8gbm90IFVTRShKU1ZBTFVFNjQpCisKK2NsYXNzIFN0
cnVjdHVyZUlEVGFibGUgeworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CitwdWJsaWM6CisgICAgU3RydWN0dXJlSURUYWJsZSgpID0gZGVmYXVsdDsKKworICAgIC8vIEZJ
WE1FOiByZGFyOi8vNjkwMzY4ODg6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbm8gbG9uZ2Vy
IG5lZWRlZC4KKyAgICBTdHJ1Y3R1cmUqIHRyeUdldChTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCkg
eyByZXR1cm4gc3RydWN0dXJlSUQ7IH0KKyAgICBTdHJ1Y3R1cmUqIGdldChTdHJ1Y3R1cmVJRCBz
dHJ1Y3R1cmVJRCkgeyByZXR1cm4gc3RydWN0dXJlSUQ7IH0KKyAgICB2b2lkIGRlYWxsb2NhdGVJ
RChTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVJRCkgeyB9CisgICAgU3RydWN0dXJlSUQgYWxsb2NhdGVJ
RChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNOdWtlZChz
dHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9OworCisgICAgdm9p
ZCBmbHVzaE9sZFRhYmxlcygpIHsgfQorICAgIHZvaWQgdmFsaWRhdGUoU3RydWN0dXJlSUQpIHsg
fQorfTsKKworI2VuZGlmIC8vIG5vdCBVU0UoSlNWQUxVRTY0KQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAg
KzYwLDExIEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3koSlNDZWxsKiAKIAogU3Ry
dWN0dXJlUmFyZURhdGE6OlN0cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2
aW91cykKICAgICA6IEpTQ2VsbCh2bSwgdm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0
KCkpCi0gICAgLCBtX3ByZXZpb3VzKHZtLCB0aGlzLCBwcmV2aW91cywgV3JpdGVCYXJyaWVyU3Ry
dWN0dXJlSUQ6Ok1heUJlTnVsbCkKICAgICAsIG1fbWF4T2Zmc2V0KGludmFsaWRPZmZzZXQpCiAg
ICAgLCBtX3RyYW5zaXRpb25PZmZzZXQoaW52YWxpZE9mZnNldCkKIHsKKyAgICBpZiAocHJldmlv
dXMpCisgICAgICAgIG1fcHJldmlvdXMuc2V0KHZtLCB0aGlzLCBwcmV2aW91cyk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MCw2ICsxNDAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB0cnlDYWNoZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3JWaWFXYXRjaHBvaW50KFZNJiwgU3RydWN0dXJlKiwgU3RydWN0
dXJlQ2hhaW4qKTsKIAorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgc3RvcnkgZm9yIGNsZWFyaW5nIHRoZXNl
IHByb3BlcnR5IG5hbWVzIGNhY2hlcyBpbiBHQy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyNjU5CiAgICAgdWludHB0cl90IG1fY2FjaGVkUHJvcGVy
dHlOYW1lRW51bWVyYXRvckFuZEZsYWcgeyAwIH07CkBAIC0xNTUsNyArMTU2LDYgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbFByb3BlcnR5Q2FjaGU+IG1fc3BlY2lhbFBy
b3BlcnR5Q2FjaGU7CiAgICAgQm94PElubGluZVdhdGNocG9pbnRTZXQ+IG1fcG9seVByb3RvV2F0
Y2hwb2ludDsKIAotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcHJldmlvdXM7CiAgICAg
UHJvcGVydHlPZmZzZXQgbV9tYXhPZmZzZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV90cmFuc2l0
aW9uT2Zmc2V0OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVy
ZUNoYWluSW52YWxpZGF0aW9uV2EKICAgICBtX3N0cnVjdHVyZVJhcmVEYXRhLT5jbGVhckNhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKIH0KIAotaW5saW5lIGJvb2wgU3RydWN0dXJlUmFy
ZURhdGE6OnRyeUNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvclZpYVdhdGNocG9pbnQoVk0mLCBT
dHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbikKK2lubGluZSBi
b29sIFN0cnVjdHVyZVJhcmVEYXRhOjp0cnlDYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3JWaWFX
YXRjaHBvaW50KFZNJiB2bSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4pCiB7CiAgICAgaWYgKGJhc2VTdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODYsNyArMTg2LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlUmFyZURhdGE6OnRyeUNhY2hlUAogICAgIGZvciAoYXV0byogY3VycmVudCA9IGNoYWluLT5o
ZWFkKCk7ICpjdXJyZW50OyArK2N1cnJlbnQpIHsKICAgICAgICAgKytzaXplOwogICAgICAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9ICpjdXJyZW50OwotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZtLmdldFN0cnVjdHVyZShzdHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU2hvdWxkV2F0Y2goKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xOTQsNyArMTk0LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlUmFyZURhdGE6OnRyeUNhY2hlUAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3Ig
KGF1dG8qIGN1cnJlbnQgPSBjaGFpbi0+aGVhZCgpOyAqY3VycmVudDsgKytjdXJyZW50KSB7CiAg
ICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gKmN1cnJlbnQ7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgbV9j
YWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yV2F0Y2hwb2ludHNbaW5kZXhdLmluc3RhbGwodGhp
cywgc3RydWN0dXJlKTsKICAgICAgICAgKytpbmRleDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKHN5bWJvbFByb3RvR2V0dAogICAgIGlmICghc3ltYm9sKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBTeW1ib2xEZXNjcmlwdGlvblR5
cGVFcnJvcik7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRChzeW1ib2wtPnN0cnVjdHVyZUlEKCkpOworICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh2bSwgc3ltYm9sLT5zdHJ1Y3R1cmVJRCgpKTsKICAgICBjb25zdCBhdXRvIGRlc2Ny
aXB0aW9uID0gc3ltYm9sLT5kZXNjcmlwdGlvbigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZGVzY3JpcHRpb24uaXNOdWxsKCkgPyBqc1VuZGVmaW5lZCgpIDoganNTdHJpbmcodm0sIGRl
c2NyaXB0aW9uKSk7CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKHN5bWJvbFByb3RvRnVuYwogICAgIFN5bWJvbCogc3ltYm9sID0gdHJ5RXh0cmFjdFN5bWJv
bCh2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbFRvU3Ry
aW5nVHlwZUVycm9yKTsKLSAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQoc3ltYm9sLT5z
dHJ1Y3R1cmVJRCgpKTsKKyAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHN5bWJv
bC0+c3RydWN0dXJlSUQoKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBzeW1ib2wtPmRlc2NyaXB0aXZlU3RyaW5n
KCkpKSk7CiB9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
c3ltYm9sUHJvdG9GdW5jCiAgICAgaWYgKCFzeW1ib2wpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbFZhbHVlT2ZUeXBlRXJyb3IpOwog
Ci0gICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHN5bWJvbC0+c3RydWN0dXJlSUQoKSk7
CisgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVyZUlEKHZtLCBzeW1ib2wtPnN0cnVjdHVyZUlE
KCkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHN5bWJv
bCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXJMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVQcm9maWxlckxvZy5jcHAJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDcgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVzKAogICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7CiAgICAgICAgIGJvb2wgc2F3UG9seVBy
b3RvU3RydWN0dXJlID0gZmFsc2U7CiAgICAgICAgIGlmIChpZCkgewotICAgICAgICAgICAgc3Ry
dWN0dXJlID0gaWQuZGVjb2RlKCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBIZWFwOjpoZWFw
KHZhbHVlLmFzQ2VsbCgpKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChpZCk7CiAgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBjYWNoZWRNb25vUHJvdG9TaGFwZXMuZmluZChzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gY2FjaGVkTW9ub1Byb3RvU2hhcGVzLmVuZCgpKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdHJ1Y3R1cmUsIHZhbHVlLmFz
Q2VsbCgpKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFR5cGVQcm9maWxlckxvZzo6dmlzaXQo
QWJzdHJhY3RTbG90CiAgICAgZm9yIChMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOyBl
bnRyeSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cjsgKytlbnRyeSkgewogICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKGVudHJ5LT52YWx1ZSk7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmVJ
RCBpZCA9IGVudHJ5LT5zdHJ1Y3R1cmVJRCkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBpZC5kZWNvZGUoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmlzaXRvci5oZWFwKCktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoaWQpOyAKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQoc3RydWN0dXJlKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzUw
LDYgKzc1MCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBnZXRTdHJ1Y3R1cmUoU3RydWN0dXJlSUQg
aWQpCisgICAgeworICAgICAgICByZXR1cm4gaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRl
Y29udGFtaW5hdGUoaWQpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogcmRhcjovLzY5MDM2ODg4
OiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgICAgQUxXQVlT
X0lOTElORSBTdHJ1Y3R1cmUqIHRyeUdldFN0cnVjdHVyZShTdHJ1Y3R1cmVJRCBpZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBoZWFwLnN0cnVjdHVyZUlEVGFibGUoKS50cnlHZXQoZGVjb250YW1p
bmF0ZShpZCkpOworICAgIH0KKwogICAgIHZvaWQqIHN0YWNrUG9pbnRlckF0Vk1FbnRyeSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhY2tQb2ludGVyQXRWTUVudHJ5OyB9CiAgICAgdm9pZCBzZXRTdGFj
a1BvaW50ZXJBdFZNRW50cnkodm9pZCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Xcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkdDQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIkhhbmRs
ZVR5cGVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSUQuaCIKICNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KICNpbmNsdWRlIDx3dGYvUmF3UHRyVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1ZhbHVl
VHJhaXRzLmg+CkBAIC0yNDksMTA0ICsyNDgsNCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFdyaXRlQmFycmllCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMuZ2V0KCk7CiB9CiAK
LWNsYXNzIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIHsKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIg
V3JpdGVCYXJyaWVyU3RydWN0dXJlSUQoKSA9IGRlZmF1bHQ7Ci0KLSAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQoREZHOjpEZXNpcmVkV3JpdGVCYXJyaWVyJiwgU3RydWN0dXJl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgICAgICBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBlbnVt
IE1heUJlTnVsbFRhZyB7IE1heUJlTnVsbCB9OwotICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlE
KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiB2YWx1ZSwgTWF5QmVOdWxs
VGFnKQotICAgIHsKLSAgICAgICAgc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgdmFsdWUpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0KFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiB2
YWx1ZSk7Ci0KLSAgICB2b2lkIHNldE1heUJlTnVsbChWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSogdmFsdWUpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBieSBKU0Nl
bGwgZHVyaW5nIGVhcmx5IGluaXRpYWxpc2F0aW9uCi0gICAgLy8gd2hlbiBzb21lIGJhc2ljIHR5
cGVzIGFyZW4ndCB5ZXQgY29tcGxldGVseSBpbnN0YW50aWF0ZWQKLSAgICB2b2lkIHNldEVhcmx5
VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHZhbHVlKTsKLQotICAg
IFN0cnVjdHVyZSogZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIENvcHkgbV9zdHJ1Y3R1
cmVJRCB0byBhIGxvY2FsIHRvIGF2b2lkIG11bHRpcGxlLXJlYWQgaXNzdWVzLiAoU2VlIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzExMDg1ND4pCi0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
ID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlEKSB7Ci0gICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRlY29kZSgpOwotICAgICAgICAg
ICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIFN0cnVjdHVyZSogb3BlcmF0b3IqKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZUlEKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRC5kZWNvZGUoKTsKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4oc3RydWN0dXJlKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAg
fQotCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvci0+KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1cmVJRDsKLSAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZUlEKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRC5k
ZWNvZGUoKTsKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
c3RydWN0dXJlKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgfQotCi0gICAgdm9p
ZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9OwotICAgIH0KLQot
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
ICEhbV9zdHJ1Y3R1cmVJRDsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlSUQ7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKFN0cnVjdHVyZSogdmFsdWUpCi0gICAgewotI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6
OnVzZXNXaXRob3V0QmFycmllckZyb21DcHAuY291bnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAo
IXZhbHVlKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9OwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6
ZW5jb2RlKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkR2V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbV9zdHJ1Y3R1
cmVJRDsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlEKQotICAgICAgICAgICAgcmV0dXJuIHN0cnVj
dHVyZUlELmRlY29kZSgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBT
dHJ1Y3R1cmVJRCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KLQotcHJp
dmF0ZToKLSAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOwotfTsKLQogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3Jp
dGVCYXJyaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDI5ICs2MSw0IEBAIGlubGluZSB2b2lkIFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgUmEKICAg
ICB2bS53cml0ZUJhcnJpZXIob3duZXIsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQ6OnNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVj
dHVyZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBBU1NFUlQoIU9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICB2YWxp
ZGF0ZUNlbGwocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih2YWx1ZSkpOwotICAgIHNldEVhcmx5
VmFsdWUodm0sIG93bmVyLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIFdyaXRlQmFycmllclN0
cnVjdHVyZUlEOjpzZXRNYXlCZU51bGwoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBTdHJ1
Y3R1cmUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgdmFsaWRhdGVDZWxsKHJl
aW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4odmFsdWUpKTsKLSAgICBzZXRFYXJseVZhbHVlKHZtLCBv
d25lciwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRDo6
c2V0RWFybHlWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICBtX3N0cnVjdHVyZUlEID0geyB9Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fc3RydWN0dXJlSUQgPSBTdHJ1Y3R1cmVJRDo6
ZW5jb2RlKHZhbHVlKTsKLSAgICB2bS53cml0ZUJhcnJpZXIob3duZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4odmFsdWUpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzAsMTAgKzIzMCwxNCBAQCBib29sIEhlYXBWZXJpZmllcjo6dmFs
aWRhdGVKU0NlbGwoVk0qIGV4CiAKICAgICAgICAgLy8gMi4gVmFsaWRhdGUgdGhlIGNlbGwncyBz
dHJ1Y3R1cmUKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlELmRl
Y29kZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShz
dHJ1Y3R1cmVJRCk7CiAgICAgICAgIGlmICghc3RydWN0dXJlKSB7CiAgICAgICAgICAgICBwcmlu
dEhlYWRlckFuZENlbGwoKTsKLSAgICAgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUlEQXNVaW50
MzIgPSBzdHJ1Y3R1cmVJRC5iaXRzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IHVpbnQzMl90IHN0cnVjdHVyZUlEQXNVaW50MzIgPSBzdHJ1Y3R1cmVJRDsKKyNlbHNlCisgICAg
ICAgICAgICB1aW50MzJfdCBzdHJ1Y3R1cmVJREFzVWludDMyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oc3RydWN0dXJlSUQpOworI2VuZGlmCiAgICAgICAgICAgICBkYXRhTG9nKCIgd2l0
aCBzdHJ1Y3R1cmVJRCAiLCBzdHJ1Y3R1cmVJREFzVWludDMyLCAiIG1hcHMgdG8gYSBOVUxMIFN0
cnVjdHVyZSBwb2ludGVyXG4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtMjgxLDcgKzI4NSw3IEBAIGJvb2wgSGVhcFZlcmlmaWVyOjp2YWxpZGF0ZUpTQ2VsbChW
TSogZXgKIAogICAgICAgICAvLyAzLiBWYWxpZGF0ZSB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0
cnVjdHVyZS4KICAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlU3RydWN0dXJl
ID0gc3RydWN0dXJlSUQuZGVjb2RlKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlU3Ry
dWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKHN0cnVjdHVyZUlEKTsKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmVTdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIHByaW50SGVhZGVyQW5kQ2VsbCgpOwogICAg
ICAgICAgICAgZGF0YUxvZygiIGhhcyBzdHJ1Y3R1cmUgIiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUp
LCAiIHdob3NlIHN0cnVjdHVyZSBpcyBOVUxMXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuY3BwCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJRC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNp
bmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogCkBAIC0xMDAs
NyArMTAwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbChWTSYgdm0sIEpTVgogICAg
ICAgICBhdWRpdENlbGw8YXVkaXRMZXZlbD4odm0sIHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSUQpOworQUxXQVlTX0lO
TElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoU3RydWN0dXJlSURUYWJsZSYsIFN0cnVjdHVyZUlE
KTsKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFZNJiwgU3RydWN0dXJlSUQp
OwogCiB9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0ludGVncml0eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCShyZXZpc2lvbiAyODY5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxMyArNzMsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbFJhbmRv
bWx5KFZNJgogICAgICAgICBhdWRpdENlbGxGdWxseSh2bSwgY2VsbCk7CiB9CiAKK0FMV0FZU19J
TkxJTkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEVGFibGUmIHRhYmxlLCBTdHJ1
Y3R1cmVJRCBpZCkKK3sKKyAgICB0YWJsZS52YWxpZGF0ZShpZCk7Cit9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBhdWRpdFN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKQorQUxXQVlT
X0lOTElORSB2b2lkIGF1ZGl0U3RydWN0dXJlSUQoVk0mIHZtLCBTdHJ1Y3R1cmVJRCBpZCkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RydWN0dXJlSUQpOwotI2lmIENQVShBRERSRVNTNjQpCi0gICAg
QVNTRVJUKHN0cnVjdHVyZUlELmJpdHMoKSA8PSBzdHJ1Y3R1cmVIZWFwQWRkcmVzc1NpemUgKyBT
dHJ1Y3R1cmVJRDo6bnVrZWRTdHJ1Y3R1cmVJREJpdCk7Ci0jZW5kaWYKKyAgICBhdWRpdFN0cnVj
dHVyZUlEKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLCBpZCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEludGVncml0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTg1LDcgKzM1ODUsNyBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25HZXRTdHJ1CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byogc3RydWN0
dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUoKSAtIGkgLSAxXTsKLSAgICAgICAgcmVz
dWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlkKCkuYml0cygpKSk7
CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5p
ZCgpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAg
IHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT50cmFuc2l0aW9u
T2Zmc2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKQEAg
LTQwMTIsNyArNDAxMiw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogCiAgICAgYWRkRnVuY3Rpb24odm0sICJlbnN1cmVBcnJheVN0b3JhZ2UiLCBmdW5jdGlvbkVu
c3VyZUFycmF5U3RvcmFnZSwgMSk7CiAKLSAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlELnNldCh2bSwgdGhpcywgT2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKKyAgICBtX29iamVjdERvaW5nU2lkZUVmZmVj
dFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVj
dERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTTo6
YWRkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBj
aGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpA
QCAtNDAzNCw3ICs0MDM0LDcgQEAgdm9pZCBKU0RvbGxhclZNOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbAogewogICAgIEpTRG9sbGFyVk0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEb2xsYXJWTSo+
KGNlbGwpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRX
aXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmVJRCk7CisgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RT
dGF0dXNTdHJ1Y3R1cmUpOwogfQogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNEb2xsYXJWTSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHJldmlzaW9u
IDI4Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CiAgICAgfQogCi0gICAgU3RydWN0dXJlKiBvYmplY3REb2luZ1NpZGVFZmZlY3RQdXRX
aXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX29iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZUlELmdldCgpOyB9
CisgICAgU3RydWN0dXJlKiBvYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNs
b3RTdGF0dXNTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBKU0RvbGxhclZNKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03Niw3ICs3
Niw3IEBAIHByaXZhdGU6CiAKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCi0gICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9vYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29y
cmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVy
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI4
Njk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYgogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3RDZWxsKHNjcmF0Y2hHUFIpKTsKIAogICAgICAgICAgICAgICAgIHN0
YWNrTGltaXRHUFJJc0Nsb2JiZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRM
b2FkU3RydWN0dXJlKHZtLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIHN0YWNr
TGltaXRHUFIpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CiAKICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNz
ZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiV2UgZG8gbm90IGNoZWNrIGZvciBzdWJ0eXBlcyBiZWxv
dyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjg2OTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTV2ViQXNzZW1ibHlHbG9iYWwKICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsICJleHBlY3RlZCB8dGhpc3wgdmFsdWUgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2ViQXNz
ZW1ibHkuR2xvYmFsIl9zKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQocmVzdWx0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICBJ
bnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHJlc3VsdC0+c3RydWN0dXJlSUQoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4Njk2NSkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTIt
MTMgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUm9sbCBiYWNr
IHIyODYzNDUsIHIyODYzODcsIHIyODY0NzEsIHIyODY2NjcsIHIyODY4NDkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDI2OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICogd3RmL09TQWxsb2NhdG9yLmg6CisgICAg
ICAgICogd3RmL3Bvc2l4L09TQWxsb2NhdG9yUE9TSVguY3BwOgorICAgICAgICAoV1RGOjpPU0Fs
bG9jYXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkQWxpZ25lZCk6IERlbGV0ZWQuCisKIDIwMjEtMTIt
MTMgIEVsbGlvdHQgV2lsbGlhbXMgIDxlbXdAYXBwbGUuY29tPgogCiAgICAgICAgIERlcGxveW1l
bnQgdGFyZ2V0IGZvciBtYWNPUyAxMSsgZG9lcyBub3QgZm9sbG93IG1pbm9yIHZlcnNpb24gYnVt
cHMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL09TQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvT1NBbGxvY2F0b3IuaAkocmV2aXNpb24gMjg2OTY1KQorKysgU291cmNlL1dU
Ri93dGYvT1NBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQgKzM5LDExIEBAIHB1
YmxpYzoKICAgICAgICAgSlNKSVRDb2RlUGFnZXMgPSBWTV9UQUdfRk9SX0VYRUNVVEFCTEVBTExP
Q0FUT1JfTUVNT1JZLAogICAgIH07CiAKLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzeW1tZXRy
aWM7IHJlc2VydmVVbmNvbW1pdHRlZChBbGlnbmVkKSBhbGxvY2F0ZXMgVk0gaW4gYW4gdW5jb21t
aXR0ZWQgc3RhdGUsCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgc3ltbWV0cmljOyByZXNlcnZl
VW5jb21taXR0ZWQgYWxsb2NhdGVzIFZNIGluIGFuIHVuY29tbWl0dGVkIHN0YXRlLAogICAgIC8v
IHJlbGVhc2VEZWNvbW1pdHRlZCBzaG91bGQgYmUgY2FsbGVkIG9uIGEgcmVnaW9uIG9mIFZNIGFs
bG9jYXRlZCBieSBhIHNpbmdsZSByZXNlcnZhdGlvbiwKLSAgICAvLyB0aGUgbWVtb3J5IG11c3Qg
YWxsIGN1cnJlbnRseSBiZSBpbiBhIGRlY29tbWl0dGVkIHN0YXRlLiByZXNlcnZlVW5jb21taXR0
ZWQoQWxpZ25lZCkgcmV0dXJucyB0bworICAgIC8vIHRoZSBtZW1vcnkgbXVzdCBhbGwgY3VycmVu
dGx5IGJlIGluIGEgZGVjb21taXR0ZWQgc3RhdGUuIHJlc2VydmVVbmNvbW1pdHRlZCByZXR1cm5z
IHRvCiAgICAgLy8geW91IG1lbW9yeSB0aGF0IGlzIHplcm9lZC4KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQqIHJlc2VydmVVbmNvbW1pdHRlZChzaXplX3QsIFVzYWdlID0gVW5r
bm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2Us
IGJvb2wgaml0Q2FnZUVuYWJsZWQgPSBmYWxzZSwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMgPSBm
YWxzZSk7Ci0gICAgLy8gVGhpcyBndWFyYW50ZWVzIHRoZSBtZW1vcnkgd2lsbCBiZSBhbGlnbmVk
IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiBUaGUgcmVxdWVzdGVkCi0gICAg
Ly8gc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGFuZCBncmVhdGVyIHRoYW4gdGhlIHN5c3Rl
bSBwYWdlIHNpemUuCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkKiByZXNlcnZl
VW5jb21taXR0ZWRBbGlnbmVkKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3Jp
dGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSwgYm9vbCBqaXRDYWdlRW5hYmxl
ZCA9IGZhbHNlLCBib29sIGluY2x1ZGVzR3VhcmRQYWdlcyA9IGZhbHNlKTsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcmVsZWFzZURlY29tbWl0dGVkKHZvaWQqLCBzaXplX3Qp
OwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgc3ltbWV0cmljOyB0aGV5IGNvbW1pdCBvciBk
ZWNvbW1pdCBhIHJlZ2lvbiBvZiBWTSAodW5jb21taXR0ZWQgVk0gc2hvdWxkCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9wb3NpeC9PU0FsbG9jYXRvclBPU0lYLmNwcAkocmV2aXNpb24gMjg2OTY1KQor
KysgU291cmNlL1dURi93dGYvcG9zaXgvT1NBbGxvY2F0b3JQT1NJWC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KIAogI2lmIEVOQUJMRShKSVRfQ0FH
RSkKQEAgLTQ0LDEwICs0Myw2IEBACiAjZW5kaWYgLy8gT1MoREFSV0lOKQogI2VuZGlmIC8vIEVO
QUJMRShKSVRfQ0FHRSkKIAotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDx3dGYvc3BpL2NvY29h
L01hY2hWTVNQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkKiBPU0FsbG9j
YXRvcjo6cmVzZXJ2ZVVuY29tbWl0dGVkKHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCBqaXRDYWdlRW5hYmxlZCwgYm9vbCBpbmNs
dWRlc0d1YXJkUGFnZXMpCkBAIC03Nyw1NiArNzIsNiBAQCB2b2lkKiBPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZVVuY29tbWl0dGVkKHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogT1NBbGxv
Y2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZEFsaWduZWQoc2l6ZV90IGJ5dGVzLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sIGppdENhZ2VFbmFibGVkLCBi
b29sIGluY2x1ZGVzR3VhcmRQYWdlcykKLXsKLSAgICBBU1NFUlQoaGFzT25lQml0U2V0KGJ5dGVz
KSAmJiBieXRlcyA+PSBwYWdlU2l6ZSgpKTsKLQotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKLSAgICBVTlVTRURfUEFSQU0odXNhZ2UpOyAvLyBOb3Qgc3VwcG9y
dGVkIGZvciBtYWNoIEFQSS4KLSAgICBBU1NFUlRfVU5VU0VEKGluY2x1ZGVzR3VhcmRQYWdlcywg
IWluY2x1ZGVzR3VhcmRQYWdlcyk7Ci0gICAgQVNTRVJUX1VOVVNFRChqaXRDYWdlRW5hYmxlZCwg
IWppdENhZ2VFbmFibGVkKTsgLy8gTm90IHN1cHBvcnRlZCBmb3IgbWFjaCBBUEkuCi0gICAgdm1f
cHJvdF90IHByb3RlY3Rpb25zID0gVk1fUFJPVF9SRUFEOwotICAgIGlmICh3cml0YWJsZSkKLSAg
ICAgICAgcHJvdGVjdGlvbnMgfD0gVk1fUFJPVF9XUklURTsKLSAgICBpZiAoZXhlY3V0YWJsZSkK
LSAgICAgICAgcHJvdGVjdGlvbnMgfD0gVk1fUFJPVF9FWEVDVVRFOwotCi0gICAgY29uc3Qgdm1f
aW5oZXJpdF90IGNoaWxkUHJvY2Vzc0luaGVyaXRhbmNlID0gVk1fSU5IRVJJVF9ERUZBVUxUOwot
ICAgIGNvbnN0IGJvb2wgY29weSA9IGZhbHNlOwotICAgIGNvbnN0IGludCBmbGFncyA9IFZNX0ZM
QUdTX0FOWVdIRVJFOwotCi0gICAgdm9pZCogYWxpZ25lZCA9IG51bGxwdHI7Ci0gICAga2Vybl9y
ZXR1cm5fdCByZXN1bHQgPSBtYWNoX3ZtX21hcChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJl
dF9jYXN0PG1hY2hfdm1fYWRkcmVzc190Kj4oJmFsaWduZWQpLCBieXRlcywgYnl0ZXMgLSAxLCBm
bGFncywgTUVNT1JZX09CSkVDVF9OVUxMLCAwLCBjb3B5LCBwcm90ZWN0aW9ucywgcHJvdGVjdGlv
bnMsIGNoaWxkUHJvY2Vzc0luaGVyaXRhbmNlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQg
PT0gS0VSTl9TVUNDRVNTLCByZXN1bHQsIGJ5dGVzKTsKLSNpZiBIQVZFKE1BRFZfRlJFRV9SRVVT
RSkKLSAgICBpZiAoYWxpZ25lZCkgewotICAgICAgICAvLyBUbyBzdXBwb3J0IHRoZSAicmVzZXJ2
ZSB0aGVuIGNvbW1pdCIgbW9kZWwsIHdlIGhhdmUgdG8gaW5pdGlhbGx5IGRlY29tbWl0LgotICAg
ICAgICB3aGlsZSAobWFkdmlzZShhbGlnbmVkLCBieXRlcywgTUFEVl9GUkVFX1JFVVNBQkxFKSA9
PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJu
IGFsaWduZWQ7Ci0jZWxzZQotICAgIC8vIERvdWJsZSB0aGUgc2l6ZSBzbyB3ZSBjYW4gZW5zdXJl
IGVub3VnaCBtYXBwZWQgbWVtb3J5IHRvIGdldCBhbiBhbGlnbmVkIHN0YXJ0LgotICAgIHNpemVf
dCBtYXBwZWRTaXplID0gYnl0ZXMgKiAyOwotICAgIGNoYXIqIG1hcHBlZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc2VydmVVbmNvbW1pdHRlZChtYXBwZWRTaXplLCB1c2FnZSwgd3JpdGFi
bGUsIGV4ZWN1dGFibGUsIGppdENhZ2VFbmFibGVkLCBpbmNsdWRlc0d1YXJkUGFnZXMpKTsKLSAg
ICBjaGFyKiBtYXBwZWRFbmQgPSBtYXBwZWQgKyBtYXBwZWRTaXplOwotCi0gICAgY2hhciogYWxp
Z25lZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJvdW5kVXBUb011bHRpcGxlT2YoYnl0ZXMs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtYXBwZWQpKSk7Ci0gICAgY2hhciogYWxpZ25l
ZEVuZCA9IGFsaWduZWQgKyBieXRlczsKLQotICAgIFJFTEVBU0VfQVNTRVJUKGFsaWduZWRFbmQg
PD0gbWFwcGVkRW5kKTsKLQotICAgIGlmIChzaXplX3QgbGVmdEV4dHJhID0gYWxpZ25lZCAtIG1h
cHBlZCkKLSAgICAgICAgcmVsZWFzZURlY29tbWl0dGVkKG1hcHBlZCwgbGVmdEV4dHJhKTsKLQot
ICAgIGlmIChzaXplX3QgcmlnaHRFeHRyYSA9IG1hcHBlZEVuZCAtIGFsaWduZWRFbmQpCi0gICAg
ICAgIHJlbGVhc2VEZWNvbW1pdHRlZChhbGlnbmVkRW5kLCByaWdodEV4dHJhKTsKLQotICAgIHJl
dHVybiBhbGlnbmVkOwotI2VuZGlmCi19Ci0KIHZvaWQqIE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5k
Q29tbWl0KHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhl
Y3V0YWJsZSwgYm9vbCBqaXRDYWdlRW5hYmxlZCwgYm9vbCBpbmNsdWRlc0d1YXJkUGFnZXMpCiB7
CiAgICAgLy8gQWxsIFBPU0lYIHJlc2VydmF0aW9ucyBzdGFydCBvdXQgbG9naWNhbGx5IGNvbW1p
dHRlZC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3dpbi9PU0FsbG9jYXRvcldpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcAkocmV2aXNpb24g
Mjg2OTY1KQorKysgU291cmNlL1dURi93dGYvd2luL09TQWxsb2NhdG9yV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMjYgKzUyLDYgQEAgdm9pZCogT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNv
bW1pdHRlZChzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIE9TQWxsb2NhdG9yOjpy
ZXNlcnZlVW5jb21taXR0ZWRBbGlnbmVkKHNpemVfdCBieXRlcywgVXNhZ2UgdXNhZ2UsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSwgYm9vbCwgYm9vbCkKLXsKLSAgICBBU1NFUlQoaGFz
T25lQml0U2V0KGJ5dGVzKSAmJiBieXRlcyA+PSBwYWdlU2l6ZSgpKTsKLSAgICBpZiAoVmlydHVh
bEFsbG9jMlB0cigpKSB7Ci0gICAgICAgIE1FTV9BRERSRVNTX1JFUVVJUkVNRU5UUyBhZGRyZXNz
UmVxcyA9IHsgfTsKLSAgICAgICAgTUVNX0VYVEVOREVEX1BBUkFNRVRFUiBwYXJhbSA9IHsgfTsK
LSAgICAgICAgYWRkcmVzc1JlcXMuQWxpZ25tZW50ID0gYnl0ZXM7Ci0gICAgICAgIHBhcmFtLlR5
cGUgPSBNZW1FeHRlbmRlZFBhcmFtZXRlckFkZHJlc3NSZXF1aXJlbWVudHM7Ci0gICAgICAgIHBh
cmFtLlBvaW50ZXIgPSAmYWRkcmVzc1JlcXM7Ci0gICAgICAgIHZvaWQqIHJlc3VsdCA9IFZpcnR1
YWxBbGxvYzJQdHIoKShudWxscHRyLCBudWxscHRyLCBieXRlcywgTUVNX1JFU0VSVkUsIHByb3Rl
Y3Rpb24od3JpdGFibGUsIGV4ZWN1dGFibGUpLCAmcGFyYW0sIDEpOwotICAgICAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHZvaWQqIHJlc3VsdCA9IHJlc2VydmVVbmNvbW1pdHRlZCgyICogYnl0ZXMsIHVzYWdl
LCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci0KLSAgICBjaGFyKiBhbGlnbmVkID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocm91bmRVcFRvTXVsdGlwbGVPZihieXRlcywgcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHJlc3VsdCkpKTsKLSAgICByZXR1cm4gYWxpZ25lZDsKLX0KLQogdm9pZCog
T1NBbGxvY2F0b3I6OnJlc2VydmVBbmRDb21taXQoc2l6ZV90IGJ5dGVzLCBVc2FnZSwgYm9vbCB3
cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlLCBib29sLCBib29sKQogewogICAgIHZvaWQqIHJlc3Vs
dCA9IFZpcnR1YWxBbGxvYyhudWxscHRyLCBieXRlcywgTUVNX1JFU0VSVkUgfCBNRU1fQ09NTUlU
LCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>