<?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>205582</bug_id>
          
          <creation_ts>2019-12-24 11:11:21 -0800</creation_ts>
          <short_desc>REGRESSION(r253896): Broke ARM build (Requested by ap on #webkit).</short_desc>
          <delta_ts>2019-12-24 12:46:17 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>205232</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>keith_miller</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1601412</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-24 11:11:21 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/253896 broke the build:
Broke ARM build (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601414</commentid>
    <comment_count>1</comment_count>
      <attachid>386391</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-24 11:12:00 -0800</bug_when>
    <thetext>Created attachment 386391
ROLLOUT of r253896

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601420</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-12-24 12:45:47 -0800</bug_when>
    <thetext>Keith fixed the build in https://trac.webkit.org/r253903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601421</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-24 12:46:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/58184860&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386391</attachid>
            <date>2019-12-24 11:12:00 -0800</date>
            <delta_ts>2019-12-24 12:45:55 -0800</delta_ts>
            <desc>ROLLOUT of r253896</desc>
            <filename>bug-205582-20191224111159.patch</filename>
            <type>text/plain</type>
            <size>631831</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzOTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MzkxZDI2MGNjZjg2YmVmYzg5NGM2YTAxM2JhNjg0MzU3OTg0OTI3Li4zYzkzNjIxZWU2NzIxZmM1
NWM5YTM0OTdlY2EwNDczOGY2NGQ4YjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxOS0xMi0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1Mzg5Ni4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU4MgorCisgICAg
ICAgIEJyb2tlIEFSTSBidWlsZCAoUmVxdWVzdGVkIGJ5IGFwIG9uICN3ZWJraXQpLgorCisgICAg
ICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiREZHL0ZUTCBzaG91bGQgYmUgYWJs
ZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorICAgICAgICBodHRwczovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjUzODk2CisKIDIwMTktMTItMjMgIEtlaXRoIE1pbGxl
ciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUg
YWJsZSB0byBleGl0IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA0YmZkZjA1ZTg0
MmQ5YTU2OTk5MDI5YjYxM2JjMTEzOTljOTM1OTdkLi4xZWFjMGY0ZDc1ZmQ4NDU5NmI2NWZiZTE4
N2M3ODJmMzdlOTI1ZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTEyLTI0ICBDb21taXQg
UXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMjUzODk2LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1NTgyCisKKyAgICAgICAgQnJva2UgQVJNIGJ1aWxkIChSZXF1ZXN0ZWQg
YnkgYXAgb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0OgorCisgICAg
ICAgICJERkcvRlRMIHNob3VsZCBiZSBhYmxlIHRvIGV4aXQgdG8gdGhlIG1pZGRsZSBvZiBhIGJ5
dGVjb2RlIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA1MjMyCisgICAgICAgIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yNTM4OTYK
KwogMjAxOS0xMi0yNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWVkaWEgaW4gR1BVIHByb2Nlc3NdIEVuYWJsZSBtZWRpYSBwbGF5ZXIgcHJveHkg
bG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjZWYxYWZkNDVk
YTE5MzAxYzg2YTlmNzU3MjJiYWRhMzdjODMxMGEuLjNkY2NlMGY4MWVkNDRjNzRkNjBlYTVhMGM2
MjhkOGJmYWQ5MzMwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTUy
NSw3ICs1MjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKICAgICBieXRlY29kZS9P
cGNvZGUuaAogICAgIGJ5dGVjb2RlL09wY29kZVNpemUuaAotICAgIGJ5dGVjb2RlL09wZXJhbmRz
LmgKICAgICBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCiAgICAgYnl0ZWNvZGUvUHV0QnlJ
ZEZsYWdzLmgKICAgICBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDll
YWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQuLmY4YzFiNGFlNTU2YjUzNGMy
YWIxMDFhYzM5MGJhNzExYjQ1Y2JhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC02NCw3ICs2NCw2IEBAICQo
UFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJsZS54bWwKICQoUFJPSkVDVF9E
SVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfaXRhYi5weQogJChQUk9KRUNUX0RJUikvZ2VuZXJh
dG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQXNzZXJ0aW9uLnJiCi0k
KFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKICQoUFJPSkVDVF9ESVIpL2dl
bmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9GaXRzLnJiCiAkKFBST0pF
Q1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVkRmlsZS5yYgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBiMjY0ZjRlZGQzOTYyNjkwNWUxYjIyYTgyZTFlNDE1MjM1NTY3NGRhLi5kYmNl
NWJhY2VkYzA1YzNkYzBlYThiMDQzMzQ2ZDE1MWQwZGVmNDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtOTMxLDggKzkzMSw2IEBACiAJCTUzMzNCQkRCMjExMEY3RDIwMDc2MThF
QyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJNTMzM0JCREMyMTEwRjdEOTAwNzYxOEVDIC8q
IERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjExMEY3RTEwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLzsg
fTsKLQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzM4
RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MzM4RUJBMzIz
QUIwNEI4MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFQkEyMjNBQjA0QTMwMDM4MjY2
MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovOyB9OwogCQk1MzQxRkM3MjFEQUMzNDND
MDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZDNzExREFDMzQzQzAwRTdFNEQ3IC8qIEIz
V2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKIAkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMx
IC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MzQ2Mzg3
NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFFNzBEREVDMDBGMTJBQzEgLyogUHJv
bWlzZVRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM1OTksOCArMzU5Nyw2IEBACiAJCTUzMTgwNDVEMjJFQUFGMEYwMDRBNzM0MiAvKiBC
M0V4dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0V4dHJhY3RWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM0V4dHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0ZXN0YXBpLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IHRlc3RhcGkuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI2MzFCMzIxODc3N0E1MDA3QjgxOTEgLyogSmF2YVNj
cmlwdENvcmUubW9kdWxlbWFwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNvdXJjZWNvZGUubW9kdWxlLW1hcCI7IHBh
dGggPSBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzM4RUJBMjIzQUIwNEEz
MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDsgcGF0aCA9IGZ0bC9GVExT
ZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzNC
MTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFG
QzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1ZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuY3Bw
OyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVj
a1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzV2FzbUJvdW5kc0No
ZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTUsOSArMzYxMSw2IEBACiAJCTUzNEM0NTdBMUJDNzAz
REMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5Q29uc3RydWN0b3IuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTM0RDlC
RjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0SXRlcmF0b3JQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzNEQ5QkY5MjM2M0M1NUQwMDU0NTI0RCAvKiBJ
dGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGgg
PSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzNEQ5
QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyog
QWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NDYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2
NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM1MzFF
NTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTI4LDcgKzU1MjEsNiBAQAogCQkJCTBGNDg1MzI2
MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICovLAogCQkJCTBGQ0VGQUE5
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCiAJCQkJMEZDRUZBQUEx
ODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCi0JCQkJNTMzOEVCQTIyM0FC
MDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5LmggKi8sCiAJCQkJMEYyNUYx
QUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgKi8sCiAJCQkJMEYyNUYx
QUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovLAogCQkJCTBGMjVGMUFD
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwICovLApAQCAtNTk1NSw3
ICs1OTQ3LDYgQEAKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmgg
Ki8sCiAJCQkJQTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxGcmFtZUNsb3N1cmUuaCAq
LywKIAkJCQlGRUEzQkJBNzIxMkI2NTU4MDBFOTNBRDEgLyogQ2FsbEZyYW1lSW5saW5lcy5oICov
LAotCQkJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oICovLAogCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAvKiBDTG9vcFN0YWNrLmNw
cCAqLywKIAkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovLAog
CQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oICovLApA
QCAtODU4NSw5ICs4NTc2LDcgQEAKIAkJCQlBNTI3MDQ4NTFEMDI3Qzg4MDAzNTRDMzcgLyogR2xv
YmFsT3BlcmF0aW9ucy5qcyAqLywKIAkJCQlFMzVFMDM2MTFCN0FCNDg1MDA3M0FEMkEgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJCUUzM0Y1MDg4MUI4NDRBMUEw
MDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKLQkJCQk1MzREOUJG
OTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICovLAogCQkJCTdDRjlCQzVC
MUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKLQkJCQk1MzREOUJG
QTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAz
NTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2Nzc5
NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAogCQkJCUE1MjcwNDg2MUQw
MjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKQEAgLTg1OTgsNyArODU4
Nyw2IEBACiAJCQkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJlZmxlY3RPYmplY3QuanMg
Ki8sCiAJCQkJNjU0Nzg4NDIxQzkzN0QyQzAwMDc4MUEwIC8qIFJlZ0V4cFByb3RvdHlwZS5qcyAq
LywKIAkJCQk4NDkyNUE5QzIyQjMwQ0M4MDBEMURGRkYgLyogUmVnRXhwU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuanMgKi8sCi0JCQkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJh
dG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdEMUM0MTg0MTkwMDRCRDdCRiAvKiBTZXRQ
cm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0Nv
bnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5qcyAqLywKQEAgLTkwOTksNyArOTA4Nyw2IEBACiAJCQkJRkUxQkQw
MjExRTcyMDI3OTAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RUMxNjAzMjIzMzlFOUY5MDBBMDRDQjggLyogQ2VsbFNpemUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMUMzRERBMUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNz
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjYxQUE5MDk1NjAwRDMzQjMzIC8qIENs
b25lZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0
NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTQ0NSw3ICs5NDMyLDYgQEAK
IAkJCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMkExODdERkRFQzAwODNCNjg3IC8qIEZU
TFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFBQzE4MDRDMTNFMDA0
NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMzhFQkEzMjNB
QjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2Fs
bEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRBODAwNkU3NzA5IC8qIEZU
TFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggNjg4NDA4
M2UwZmMxNzZhMjEzY2Q2NjgyNzY0YjJmNGViMzBjNmY2Yy4uNTZkOGEwN2RiZmNkZWZkZWM3NjA4
OWExM2RmYjUwMTFiNjRiMjVkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC0yMzksNiArMjM5LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIGV4cGxpY2l0IFJldHVybkFkZHJl
c3NQdHIoRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3ZhbHVlKHVudGFn
Q29kZVB0cjx0YWc+KGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAgICB9CisKICAgICBjb25z
dCB2b2lkKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV92YWx1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVGcmFtZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgKaW5kZXggNDIyOWEw
ZDA5OTdhNGIwZjU4M2FjYWVhM2EwZjE2NTcyOWY0NmUwNS4uY2FiMzY4ZGM3Y2QwZjNiNGY4NWI3
NjliNzg4ZDQwZDYzZWE1NjM3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Qcm9iZUZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Qcm9iZUZyYW1lLmgKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBnZXQ8VD4oQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCkgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0gICAg
VCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFQgb3BlcmFuZChpbnQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0gICAgVCBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAgIFQgb3BlcmFuZChpbnQg
b3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4o
b3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgpAQCAtNjIsMTQgKzYyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNl
dDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAqIHNpemVvZihSZWdpc3Rl
ciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNl
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUpCisgICAgdm9pZCBzZXRP
cGVyYW5kKGludCBvcGVyYW5kLCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgc2V0PFQ+KG9wZXJh
bmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7CisgICAgICAgIHNldDxUPihz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCwg
VCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZz
ZXQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0PFQ+KHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpT
VmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggNDFiYzk2MWExNTMwODVmYmE4
NTUwNjVjMzliNmM2ZGE2ZmIyYTgwZC4uMzVkMDE3NTZkNTMyYTcxZWMwN2ZlNDAzZWY3YTUyNTBi
NWZjNmY2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtMjYzLDIwICsyNjMsMjAg
QEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29tcGlsYXRpb24mIGNv
bXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
LXN0cnVjdCBCM09wZXJhbmQgeworc3RydWN0IE9wZXJhbmQgewogICAgIGNvbnN0IGNoYXIqIG5h
bWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgQjNPcGVyYW5kPGludDY0X3Q+IElu
dDY0T3BlcmFuZDsKLXR5cGVkZWYgQjNPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKLXR5
cGVkZWYgQjNPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5cGVkZWYgQjNPcGVyYW5k
PGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIE9wZXJhbmQ8aW50NjRfdD4gSW50NjRPcGVy
YW5kOwordHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFuZDsKK3R5cGVkZWYgT3Bl
cmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIE9wZXJhbmQ8aW50OF90PiBJbnQ4
T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIEIzT3BlcmFuZDxkZWNsdHlw
ZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0VfT1BFUkFORCh2YWx1ZSkg
T3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVj
dG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lkIHBvcHVsYXRlV2l0aElu
dGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKIHsK
ICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuKSB9
KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigt
MC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdW
YWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxCM09wZXJhbmQ8RmxvYXRUeXBlPj4gZmxv
YXRpbmdQb2ludE9wZXJhbmRzKCkKK1ZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+IGZsb2F0aW5n
UG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVy
YW5kczsKKyAgICBWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKICAgICBwb3B1
bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAgcmV0dXJuIG9wZXJhbmRz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcApp
bmRleCA1NTQ4NWIwZjlhMDZmYjdjMDIzYzQ2YWUzOTkzZGY3OWIxNTQyMmVlLi5kZDlhY2NhOWFk
YzkwMjlhMGFlMWJjYWU5YjIwNjI2YWRkNjUyNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTA4LDcgKzE1MDgsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogCiAg
ICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJp
dHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8
fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5h
czxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jYWxsU2l0
ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgICAgICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlw
cGV0UGFyYW1zLmNwcAppbmRleCA2OWI1ZWUxMDZiMmU4MTc1NTc3Nzk3MWJlMjcxNGM0YTFhOThj
YmJjLi5iMWQ0MDRhMTQ1YmQyMTQxYjNhMGE5YzQzMTkxOGE1OGY5YWYxODlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBl
dFBhcmFtcy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zdG9y
ZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNp
dGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpKTsKIAogICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCmlu
ZGV4IDgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUzZTEuLjYwNThmYjA2MjAz
OTQ2YzRjZDU2ZWY2YTk4Mzg3OWQyZDZjODFmYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lk
IEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFsdWUo
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJO
YW1lKHJlZykuZGF0YSgpKTsKKyAgICBtX291dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHJl
Zy5vZmZzZXQoKSkuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAt
ODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0ZWNvZGVEdW1wZXJCYXNlOjpkdW1wVmFs
dWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLUNTdHJpbmcgQnl0ZWNvZGVE
dW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVyIHIpIGNvbnN0CitDU3Ry
aW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGludCByKSBjb25zdAogewot
ICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKKyAgICBpZiAoaXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
cikpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CiAKLSAgICByZXR1cm4gdG9DU3Ry
aW5nKHIpOworICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVhbFJlZ2lzdGVyKHIpKTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAgKzk4LDEwIEBAIGludCBCeXRlY29kZUR1
bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0cmluZyBCeXRlY29kZUR1
bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorQ1N0
cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0
CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7Ci0gICAgcmV0
dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7CisgICAgYXV0byB2YWx1ZSA9IGJs
b2NrKCktPmdldENvbnN0YW50KGluZGV4KTsKKyAgICByZXR1cm4gdG9DU3RyaW5nKHZhbHVlLCAi
KCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJs
b2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBDb25zdGFu
dHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6Y29uc3RhbnROYW1lKFZp
cnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNvZGVEdW1wZXI6OmNvbnN0
YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJsb2Nr
ID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVlID0gZm9ybWF0Q29uc3RhbnQoYmxvY2st
PmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5nZXRDb25zdGFudChpbmRleCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAppbmRleCBl
ZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5Li4wZDcxNjc1MDM5NGIxNWQ0
ZWI1ZTg3YzVhODgyNTEwNzVlZmUwM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50KHYpOyB9CiAKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBlckJhc2UoUHJpbnRTdHJlYW0mIG91dCkK
QEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZShj
b25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNTdGF0dXNNYXAmKTsKIAot
ICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92ZXJyaWRlOwogICAgIGlu
dCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KSBj
b25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIENTdHJpbmcgY29uc3RhbnRO
YW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CisgICAgdmlydHVhbCBDU3RyaW5nIGNvbnN0YW50
TmFtZShpbnQgaW5kZXgpIGNvbnN0OwogCiAgICAgQmxvY2sqIG1fYmxvY2s7CiB9OwpAQCAtMTM1
LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgSlNDOjpCeXRlY29kZUR1bXBlcjxGdW5j
dGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwogCiAgICAgdm9pZCBkdW1wQ29uc3RhbnRz
KCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lzdGVyIGluZGV4KSBjb25z
dCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpIGNvbnN0
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5k
ZXguY3BwCmluZGV4IGEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4N2M1MDg3MjIyNGYuLjE1
ZDYxYmE5MDQwMWE3MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAKQEAgLTI1LDcgKzI1LDYg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKLQog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMzLDgg
KzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEJ5dGVjb2RlSW5kZXg6OmR1bXAoV1RGOjpQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgiYmMjIiwgb2Zmc2V0KCkp
OwotICAgIGlmIChjaGVja3BvaW50KCkpCi0gICAgICAgIG91dC5wcmludCgiY3AjIiwgY2hlY2tw
b2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAppbmRleCAxMGZiYTQ0MDU4ZWM5ZGZlZDI1NDgw
OWE2ZDc4MzM3ZDAxMWE0YjYxLi41Mjk1YzI5YjEyMjgxMzFmNzJhYzIwNzMxYzFkM2JjZTkzNTE1
OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4
LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzgsMzMgKzM3LDI0IEBAIGNsYXNzIEJ5dGVjb2RlSW5k
ZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1bHQ7CiAgICAgQnl0ZWNv
ZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9wYWNr
ZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQorICAgICAgICA6IG1fb2Zmc2V0KGRlbGV0
ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAgICB9CisgICAgZXhwbGljaXQgQnl0ZWNvZGVJ
bmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChieXRlY29k
ZU9mZnNldCkKKyAgICB7IH0KIAotICAgIGV4cGxpY2l0IEJ5dGVjb2RlSW5kZXgodWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3QgY2hlY2twb2ludCA9IDApCi0gICAgICAgIDogbV9wYWNr
ZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IG51
bWJlck9mQ2hlY2twb2ludHMgPSA0OwotICAgIHN0YXRpY19hc3NlcnQoaGFzT25lQml0U2V0KG51
bWJlck9mQ2hlY2twb2ludHMpLCAibnVtYmVyT2ZDaGVja3BvaW50cyBzaG91bGQgYmUgYSBwb3dl
ciBvZiAyIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBjaGVja3BvaW50TWFzayA9
IG51bWJlck9mQ2hlY2twb2ludHMgLSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
Y2hlY2twb2ludFNoaWZ0ID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobnVtYmVyT2ZDaGVja3Bv
aW50cyk7Ci0KLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJp
dHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9Ci0gICAgdWludDhfdCBjaGVja3BvaW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2twb2ludE1hc2s7IH0KLSAgICB1aW50MzJfdCBh
c0JpdHMoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHM7IH0KKyAgICB1aW50MzJfdCBvZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHVpbnQzMl90IGFzQml0cygpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsgfQogICAgIHN0YXRpYyBCeXRl
Y29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGZyb21CaXRzKGludmFsaWRPZmZzZXQg
LSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQogCiAgICAgc3RhdGljIEJ5dGVjb2RlSW5kZXgg
ZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4K
LSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
ICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNl
dCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQgJiYgbV9vZmZzZXQgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0
KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNvbnN0IEJ5dGVjb2RlSW5kZXgmIG90aGVyKSBj
b25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhlci5hc0JpdHMoKTsgfQogICAgIGJvb2wgb3Bl
cmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9CiAKQEAgLTc5LDIyICs2OSwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW52YWxpZE9mZnNldCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAotICAgIHN0YXRpYyB1aW50MzJfdCBwYWNrKHVp
bnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7Ci0KLSAgICB1aW50MzJf
dCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CisgICAgdWludDMyX3QgbV9vZmZzZXQg
eyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCi1pbmxpbmUgdWludDMyX3QgQnl0ZWNvZGVJbmRleDo6
cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNrcG9pbnQpCi17Ci0gICAg
QVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNoZWNrcG9pbnRzKTsKLSAgICBBU1NFUlQoKGJ5
dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0KSA+PiBjaGVja3BvaW50U2hpZnQgPT0gYnl0
ZWNvZGVJbmRleCk7Ci0gICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0
IHwgY2hlY2twb2ludDsKLX0KLQogaW5saW5lIEJ5dGVjb2RlSW5kZXggQnl0ZWNvZGVJbmRleDo6
ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAgICBCeXRlY29kZUluZGV4IHJlc3VsdDsKLSAg
ICByZXN1bHQubV9wYWNrZWRCaXRzID0gYml0czsKKyAgICByZXN1bHQubV9vZmZzZXQgPSBiaXRz
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDYwZDk4Y2ZiMTYyODYzNmZjZWYzNzY3OTJiOWMy
MTRmY2M0YWEzNDcuLmE5YmQ0ODM3MWI0ZTMwZGFmNjA0NGQwOTQ5YTA3MWQxNGExYWQwNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAt
NTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldhdGNocG9pbnRTZXQsCiAKICAgICA6VmFsdWVQ
cm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIsCisgICAg
OlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCiAgICAgOlVuYXJ5QXJpdGhQcm9maWxlLAog
ICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkFycmF5UHJvZmlsZSwKQEAgLTc5NiwxMyAr
Nzk2LDYgQEAgb3AgOmNhbGxfdmFyYXJncywKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAot
ICAgIH0sCi0gICAgdG1wczogewotICAgICAgICBhcmdDb3VudEluY2x1ZGluZ1RoaXM6IHVuc2ln
bmVkLAotICAgIH0sCi0gICAgY2hlY2twb2ludHM6IHsKLSAgICAgICAgZGV0ZXJtaW5pbmdBcmdD
b3VudDogbmlsLAotICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2Fs
bF92YXJhcmdzLApAQCAtODE3LDEzICs4MTAsNiBAQCBvcCA6dGFpbF9jYWxsX3ZhcmFyZ3MsCiAg
ICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICB9LAotICAgIHRtcHM6IHsKLSAgICAgICAg
YXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZAotICAgIH0sCi0gICAgY2hlY2twb2ludHM6
IHsKLSAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAotICAgICAgICBtYWtlQ2FsbDog
bmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywKQEAgLTg2NCwx
MyArODUwLDYgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVBy
b2ZpbGUsCi0gICAgfSwKLSAgICB0bXBzOiB7Ci0gICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhp
czogdW5zaWduZWQKLSAgICB9LAotICAgIGNoZWNrcG9pbnRzOiB7Ci0gICAgICAgIGRldGVybWlu
aW5nQXJnQ291bnQ6IG5pbCwKLSAgICAgICAgbWFrZUNhbGw6IG5pbCwKICAgICB9CiAKIG9wIDpy
ZXQsCkBAIC0xMDE4LDcgKzk5Nyw3IEBAIG9wIDpjYXRjaCwKICAgICAgICAgdGhyb3duVmFsdWU6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLiosCisgICAgICAgIGJ1ZmZl
cjogVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAogICAgIH0KIAogb3AgOnRocm93LApA
QCAtMTI2NCw4ICsxMjQzLDYgQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZQotb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGxfdHJhbXBvbGluZQotb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOmhh
bmRsZVVuY2F1Z2h0RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCmluZGV4IDc5
NzVmZWYzYzg4MTQzMTgxNTdhNTlkYmU4YmU1NTQ4Mzg4ZmUzNjUuLjkxOGUxZDIxMzRhNjBiNmNm
ZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCkBAIC0yMDEs
MzkgKzIwMSw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVudW1U
eXBlMSwgdHlwZW5hbWUgRW51bVR5cGUyPgotY29uc3RleHByIGJvb2wgZW51bVZhbHVlc0VxdWFs
QXNJbnRlZ3JhbChFbnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKLXsKLSAgICB1c2luZyBJbnRU
eXBlMSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1UeXBlMT46OnR5cGU7Ci0g
ICAgdXNpbmcgSW50VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFbnVtVHlw
ZTI+Ojp0eXBlOwotICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5cGUxKSA+IHNpemVvZihJ
bnRUeXBlMikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlMT4odjEpID09IHN0
YXRpY19jYXN0PEludFR5cGUxPih2Mik7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBlMj4odjIpOwotfQotCi1C
aXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludChjb25z
dCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewot
ICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0OwotICAgIHVpbnQ4X3QgY2hl
Y2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotCi0gICAgaWYgKCFjaGVja3Bv
aW50KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgc3dpdGNoIChjb2RlQmxvY2suaW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkpIHsKLSAgICBjYXNlIG9w
X2NhbGxfdmFyYXJnczoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgotICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChlbnVtVmFsdWVz
RXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBPcFRhaWxDYWxsVmFyYXJn
czo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwoT3BDYWxsVmFyYXJnczo6
YXJnQ291bnRJbmNsdWRpbmdUaGlzLCBPcFRhaWxDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRp
bmdUaGlzKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3Jh
bChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJhcmdzOjptYWtlQ2FsbCkg
JiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1
ZGluZ1RoaXMsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7Ci0g
ICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsKQotICAgICAg
ICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3VudEluY2x1ZGluZ1RoaXMpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggM2U1ZWRjMGE2OGFlNDRkZjY1MTVj
ZGJmZDRiNDI3ZWY2OWVlZjE4MC4uNzM3OWIzYzliYzcyMzI1OTEwOWM2MWU3YWRhNTMzZDllN2Qy
ZjJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkJ5
dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR3JhcGguaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OCw4ICs5Nyw2IEBAIHByaXZh
dGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogfTsKIAotQml0bWFwPG1heE51bUNoZWNr
cG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3QgQ29kZUJsb2NrJiwgQnl0
ZWNvZGVJbmRleCk7Ci0KIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJh
bmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUoY29uc3Qg
RmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CiBpbmxpbmUgYm9vbCBvcGVyYW5kSXNM
aXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggZGU2Y2E4ZGM5MTA5Yjc4OTY3ZjEwNTUwMDlkYTMwZTg5
OTg0ODI4Mi4uM2QxMmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNkYWVkNzJjMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0zMywyMiArMzMsMjIgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWlubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQWx3YXlzTGl2ZShWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3YXlzTGl2ZShpbnQgb3Bl
cmFuZCkKIHsKLSAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CisgICAgcmV0dXJuICFWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOwogfQogCi1pbmxpbmUgYm9vbCB2aXJ0dWFsUmVn
aXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGluZSBib29sIG9wZXJhbmRUaGF0SXNOb3RBbHdheXNM
aXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQpCiB7Ci0gICAg
dW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOworICAgIHVuc2lnbmVkIGxvY2FsID0gVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKICAgICBpZiAobG9jYWwgPj0gb3V0Lm51
bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBvdXRbbG9jYWxdOwog
fQogCi1pbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3Rv
ciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKK2lubGluZSBib29sIG9wZXJhbmRJc0xp
dmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZpcnR1YWxSZWdpc3RlclRo
YXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAgICByZXR1cm4gb3BlcmFu
ZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2
ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNjAyZGQ1MjVhMWJkMmMxNjNkYjhjZjEzYjM1Y2M2
MzZlYTFlYjVjZS4uODY5ZjUzZjNmY2QwZDA3NjEwOWExZmRhNWY5NDdmNTIwZmU1MTRkZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTM4LDcg
KzM4LDYgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJCeXRlY29k
ZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0jaW5jbHVkZSAiQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCkBA
IC00MDgsNyArNDA3LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAg
ICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2Vy
KTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyKHVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRhYmxlKTsKKyAgICAgICAg
cmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52
aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSwgY2xvbmVkU3ltYm9s
VGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aFR5cGVQcm9maWxlck9wY29k
ZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29udHJvbEZsb3dQcm9maWxl
ck9wY29kZXMoKTsKQEAgLTY0Miw3ICs2NDEsNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
ICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYg
dGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255bW91cy4KICAgICAgICAg
ICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oZ2V0
Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2Fz
dDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3Bl
RGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChs
b2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MTAsNyArNzA5LDggQEAgYm9vbCBDb2RlQmxvY2s6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDogewotICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUo
KSkpOworICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV9z
eW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNldCgpOworICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdl
dENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2sp
OwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hp
bGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3Ig
cHJvZmlsaW5nIHlldC4KQEAgLTEwODYsMTUgKzEwODYsNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRN
YXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24mIHRyYW5z
aXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQotCi1CeXRlY29kZUluZGV4IENvZGVCbG9j
azo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCBleGl0SW5kZXgpIGNvbnN0Ci17
Ci0gICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYg
aW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChleGl0SW5kZXgpOwotICAgICAgICBleGl0
SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4
aXRJbmRleDsKLX0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogdm9pZCBDb2RlQmxvY2s6
OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQpAQCAtMTgyMCwxMCArMTgxMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4U2xvdyhjb25zdCBPcENh
dGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1ldGVycygpOyArK2kpCiAgICAg
ICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOwog
Ci0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBhdXRvIHByb2ZpbGVzID0g
bWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6
ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXplID09IGxpdmVPcGVyYW5k
cy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlcy0+bV9zaXpl
OyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29wZXJhbmQgPSBs
aXZlT3BlcmFuZHNbaV07CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtpXS5tX29w
ZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CiAKICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7CiAKQEAgLTI3MjIsNyArMjcxMyw3IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRh
dGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3ModW5zaWduZWQmIG51
bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7CiAgICAg
ICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5tX2NhdGNoUHJvZmlsZXMp
IHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKaW5kZXggMjUwNjcyNjNlMjQ3NmRhMWIyZGY2ZDVkMmY4ZTgwNDMxNWYzMDNjMy4u
MTQ2NzQyZWIwNDhhMWQxNjZmMDE3OTFkNTZjZTU4MTUwZjUzNDI2NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTYxLDcgKzE2MSw2IEBAIHB1Ymxp
YzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVM
b2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9
Ci0gICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hl
Y2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICBpbnQqIGFkZHJlc3NP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC0yMzAsMjAgKzIyOSwyMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0Owog
ICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBp
c0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgaW5saW5lIGJvb2wg
aXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgewotICAgICAgICBpZiAocmVnID09
IHRoaXNSZWdpc3RlcigpICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAgICAgaWYgKGluZGV4ID09
IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYmICFpc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7CisgICAgICAgIGlmIChpc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQo
aW5kZXgpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoaW50IGlu
ZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBtX251bVZhcnM7Cisg
ICAgICAgIHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7CiAgICAgfQogCiAgICAgSGFuZGxlcklu
Zm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxl
ciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CkBAIC01ODIsOSArNTgxLDEwIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJldHVybiBpbmRleCA+PSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
aW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CiAKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNzc0LDcgKzc3NCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAKLSAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXgpIGNvbnN0OwogICAgIHVpbnQz
Ml90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQog
CiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50ZXIrKzsgfQpAQCAtODc1
LDcgKzg3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNoUHJvZmlsZXM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcj4+
IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJlY3RFdmFsQ29kZUNhY2hlIG1fZGlyZWN0
RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTQyLDEwICs5NDEsMTAgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSog
dG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50
IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZy5pc0NvbnN0
YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Db25zdGFudEluZGV4KCkpIDwgbV9j
b25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFT
U0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3Rl
cnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKICAg
ICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAppbmRleCBmOTgyOWEy
ODZmOGFhYmY0ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhLi4yMTA2ODEzZjBhMWVhYTUxMzRkMGYz
OWJkNzUxYzczMThlYmMwNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgKQEAgLTE2MCw5ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXBw
cm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwgPSBudWxscHRyKSBjb25zdDsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIHdhbGtVcElubGlu
ZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7Ci0KLSAgICBpbmxpbmUgYm9vbCBpbmxpbmVT
dGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OworICAgIHZvaWQgd2Fsa1VwSW5s
aW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBz
dGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5Lgog
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAppbmRl
eCA0N2M2NTdjOGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3Li5lNGE1NzViMDNhN2Qx
YjU5OWFkMGQ1NmNlZGRkYWY0YmEwNTAyZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApAQCAtMjYsMTYgKzI2LDEy
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
IgotI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKLWNs
YXNzIENvZGVCbG9jazsKIAotLy8gTm90ZTogRnVsbCBieXRlY29kZSBsaXZlbmVzcyBkb2VzIG5v
dCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHRlbXBzLgotLy8g
SWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQgYXNrIHRtcExpdmVuZXNz
Rm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTUxLDE1ICs0NywxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIGJv
b2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKFZpcnR1YWxSZWdpc3RlciByZWcsIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50IHBvaW50KSBjb25zdAor
ICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJlZykgfHwgdmlydHVhbFJl
Z2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVzcyhieXRlY29kZUluZGV4
LCBwb2ludCksIHJlZyk7CisgICAgICAgIHJldHVybiBvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJh
bmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdldExpdmVuZXNzKGJ5dGVj
b2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIC8vIEZJWE1F
OiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1ha2UgdGhlbSBjb21wYWN0
LgorICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuc2ltIHRvIG1h
a2UgdGhlbSBjb21wYWN0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBWZWN0b3I8RmFzdEJpdFZl
Y3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VWZWN0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggZTI5
ZjM4NGQxZDA2NzJmZWVhMDcxMjA1YmNhYTI4MWE2NDliMjIyOS4uOTc1MDhiYmYwYzQ1Y2I5N2E0
Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMTc5LDggKzE3OSw3IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IGJhc2VsaW5lQ29kZUJs
b2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAgdW5zaWduZWQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1ZGUgZml4dXBzLgotICAg
IHVuc2lnbmVkIHRtcE9mZnNldCA6IDEwOworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIHsgMCB9OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMuCiAgICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93
IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQg
dGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxs
eS4KQEAgLTE5Miw5ICsxOTEsNyBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAvLyBJ
bmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRv
IHJlZHVjZSBjb25mdXNpb24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBs
aWNpdGx5LgogICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDogYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoMCkKLSAgICAgICAgLCB0bXBPZmZzZXQoMCkKLSAgICAgICAgLCBzdGFja09m
ZnNldCgwKQorICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCiAgICAgICAgICwga2luZChDYWxsKQog
ICAgICAgICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAtMjIyLDEyICsyMTksNiBA
QCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGlj
X2Nhc3Q8c2lnbmVkPihzdGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAgICB9CiAKLSAgICB2b2lk
IHNldFRtcE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCi0gICAgewotICAgICAgICB0bXBPZmZzZXQg
PSBvZmZzZXQ7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
bXBPZmZzZXQpID09IG9mZnNldCk7Ci0gICAgfQotCiAgICAgcHRyZGlmZl90IGNhbGxlckZyYW1l
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRyZGlmZl90IHJldHVyblBD
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
Q2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI1Niw5ICsyNDcsOSBAQCBpbmxp
bmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvbnN0IENvZGVPcmlnaQogICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKIH0KIAot
Ly8gVGhlc2UgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gQ29kZU9yaWdpbiBi
ZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVyIGZpZWxkIGluIElubGlu
ZUNhbGxGcmFtZQorLy8gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBD
b2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBkaXJlY3RDYWxsZXIgZmll
bGQgaW4gSW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci1pbmxp
bmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVu
Y3Rpb24pIGNvbnN0CitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhj
b25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiB7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
KnRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI3MCwzOCArMjYxLDExIEBAIGlubGluZSB2
b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlv
bikgY29uc3QKICAgICB9CiB9CiAKLWlubGluZSBib29sIENvZGVPcmlnaW46OmlubGluZVN0YWNr
Q29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3QKLXsKLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgIHdhbGtVcElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdpbiBvcmlnaW4pIHsKLSAg
ICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKQotICAgICAgICAg
ICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1BTFdB
WVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCi17Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVl
KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5kLnZpcnR1YWxSZWdpc3Rl
cigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICByZXR1cm4gb3BlcmFuZDsK
LX0KLQotQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICByZXR1cm4gcmVt
YXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsKLX0KLQotQUxXQVlTX0lO
TElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSwgT3BlcmFuZCBvcGVyYW5kKQorQUxXQVlTX0lOTElORSBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBP
cGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiBvcGVyYW5k
LmlzVG1wKCkgPyBPcGVyYW5kOjp0bXAob3BlcmFuZC52YWx1ZSgpIC0gaW5saW5lQ2FsbEZyYW1l
LT50bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIG9wZXJhbmQ7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgcmV0dXJuIHVubWFwT3BlcmFuZChp
bmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CisgICAg
cmV0dXJuIHJlZzsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCmluZGV4
IDgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2MmQ3MmQ5ZTk4NjQ2ZDcuLmJmYjk0YjM1ZmNkNjM5
YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCkBAIC0yNiw3ICsy
Niw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKLSNp
bmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
IlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC01MCw3ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3BlcmFuZCBvcGVyYW5kKQor
ICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtNzAs
NyArNjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC52YWx1
ZSgpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BlcmFuZC5raW5kKCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICB9
CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QKQEAgLTc5LDcg
Kzc4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OwogICAgIH0K
IAotICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwogICAgICAgICByZXR1
cm4gbV9vcGVyYW5kOwpAQCAtOTEsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgfQogcHJpdmF0ZTog
CiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgT3BlcmFuZCBtX29wZXJh
bmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAKIHN0cnVjdCBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCmlu
ZGV4IDcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2NzA0NzIuLjJiNjlmMzZjN2Zi
ZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCiAgICAgcmVzdWx0Lm1f
a2luZCA9IExhenlPcGVyYW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVyYW5kLmNvZGVCbG9jayA9
IGNvZGVCbG9jazsKICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCA9IGtl
eS5ieXRlY29kZUluZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtl
eS5vcGVyYW5kKCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3BlcmFuZCA9IGtleS5vcGVy
YW5kKCkub2Zmc2V0KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2Fs
bEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkg
a2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQub3BlcmFuZCk7
CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7CiAg
ICAgICAgIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQu
Y29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fz
ZSBMYXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXko
dS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVyYW5kKTsKKyAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNv
ZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9wZXJhbmQpKTsKIAogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5t
X2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCAzNmQzNjlmMGMwMGZiZDQ0Yzg1NWEzODllMDY1MDg0
YmM3OGU1ODE1Li41ZDgxYzRjOTAwYjA4YTRkZWQ4M2E3NGRmYTVhMmRjZjMzNWVjODhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogICAg
ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAgICAgICAgT3BlcmFuZCBv
cGVyYW5kOworICAgICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAgICAgIH0gbGF6eU9wZXJhbmQ7
CiAgICAgfSB1OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgK
aW5kZXggZDQ3YTY4ZjY0MDM4ZTNiMWRjNTU3YTQ0ZDcwODUwNDAyNzQyMGJmZS4uZjI5ZmY5Zjk3
MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwyMjcgKzM1LDExMSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKIAot
Y29uc3RleHByIHVuc2lnbmVkIG1heE51bUNoZWNrcG9pbnRUbXBzID0gNDsKLQotLy8gQSBPcGVy
YW5kS2luZDo6VG1wIGlzIG9uZSB0aGF0IGV4aXN0cyBmb3IgZXhpdGluZyB0byBhIGNoZWNrcG9p
bnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0ZWNvZGVzLgotZW51bSBjbGFzcyBPcGVy
YW5kS2luZCB7IEFyZ3VtZW50LCBMb2NhbCwgVG1wIH07Ci0KLWNsYXNzIE9wZXJhbmQgewotcHVi
bGljOgotICAgIE9wZXJhbmQoKSA9IGRlZmF1bHQ7Ci0gICAgT3BlcmFuZChjb25zdCBPcGVyYW5k
JikgPSBkZWZhdWx0OwotCi0gICAgT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKLSAg
ICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2FsKCkgPyBPcGVyYW5kS2luZDo6TG9jYWwgOiBP
cGVyYW5kS2luZDo6QXJndW1lbnQpCi0gICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQub2Zmc2V0
KCkpCi0gICAgeyB9Ci0KLSAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtpbmQsIGludCBvcGVyYW5k
KQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQot
ICAgIHsgCi0gICAgICAgIEFTU0VSVChraW5kID09IE9wZXJhbmRLaW5kOjpUbXAgfHwgVmlydHVh
bFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2luZCA9PSBPcGVyYW5kS2luZDo6TG9j
YWwpKTsKLSAgICB9Ci0gICAgc3RhdGljIE9wZXJhbmQgdG1wKHVpbnQzMl90IGluZGV4KSB7IHJl
dHVybiBPcGVyYW5kKE9wZXJhbmRLaW5kOjpUbXAsIGluZGV4KTsgfQotCi0gICAgT3BlcmFuZEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIGludCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCAhPSBPcGVyYW5kS2luZDo6
VG1wKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29wZXJhbmQpOwotICAgIH0K
LSAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KCp0aGlzKTsgfQotICAgIHN0YXRpYyBPcGVyYW5kIGZyb21CaXRzKHVpbnQ2NF90IHZhbHVl
KTsKLQotICAgIGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gT3BlcmFuZEtp
bmQ6OlRtcDsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBPcGVyYW5kS2luZDo6QXJndW1lbnQ7IH0KLSAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gT3BlcmFuZEtpbmQ6OkxvY2FsICYmIHZpcnR1YWxSZWdpc3RlcigpLmlz
TG9jYWwoKTsgfQotICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0g
T3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0hlYWRlcigpOyB9Ci0gICAg
Ym9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IE9wZXJhbmRLaW5kOjpU
bXAgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpOyB9Ci0KLSAgICBpbnQgdG9Bcmd1
bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXIoKS50b0FyZ3VtZW50KCk7IH0KLSAgICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlz
TG9jYWwoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCk7IH0KLQotICAgIGlu
bGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKLQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT3BlcmFuZCYpIGNvbnN0OwotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgT3BlcmFuZEtpbmQgbV9raW5kIHsgT3BlcmFuZEtpbmQ6OkFy
Z3VtZW50IH07Ci0gICAgaW50IG1fb3BlcmFuZCB7IFZpcnR1YWxSZWdpc3Rlcjo6aW52YWxpZFZp
cnR1YWxSZWdpc3RlciB9OwotfTsKLQotQUxXQVlTX0lOTElORSBib29sIE9wZXJhbmQ6Om9wZXJh
dG9yPT0oY29uc3QgT3BlcmFuZCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGtpbmQoKSAhPSBv
dGhlci5raW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXNUbXAoKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKTsKLSAgICByZXR1cm4gdmlydHVh
bFJlZ2lzdGVyKCkgPT0gb3RoZXIudmlydHVhbFJlZ2lzdGVyKCk7Ci19Ci0KLWlubGluZSBib29s
IE9wZXJhbmQ6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGlmIChpc1RtcCgpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUoKSA+PSAwOwotICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc1ZhbGlk
KCk7Ci19Ci0KLWlubGluZSBPcGVyYW5kIE9wZXJhbmQ6OmZyb21CaXRzKHVpbnQ2NF90IHZhbHVl
KQotewotICAgIE9wZXJhbmQgcmVzdWx0ID0gYml0d2lzZV9jYXN0PE9wZXJhbmQ+KHZhbHVlKTsK
LSAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIk9wZXJh
bmQ6OmFzQml0cygpIHJlbGllcyBvbiB0aGlzLiIpOworZW51bSBPcGVyYW5kS2luZCB7IEFyZ3Vt
ZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CiAKIGVudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3Bl
cmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBPcGVyYW5kcyB7CiBw
dWJsaWM6Ci0gICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3Nh
bWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93Pj47Ci0gICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6Omlz
X3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+OwotICAgIHVzaW5nIENvbnN0
UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgYm9v
bCwgY29uc3QgVCY+OwotCi0gICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7Ci0KLSAgICBleHBsaWNp
dCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3Qg
bnVtVG1wcykKKyAgICBPcGVyYW5kcygpCisgICAgICAgIDogbV9udW1Bcmd1bWVudHMoMCkgeyB9
CisgICAgCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90
IG51bUxvY2FscykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAg
ICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOwotICAgICAgICBtX3ZhbHVlcy5n
cm93KHNpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRp
YWxpemF0aW9uKQotICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkpOworICAgICAgICBpZiAo
V1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKKyAgICAgICAgICAg
IG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG51bUFyZ3VtZW50cyArIG51bUxv
Y2Fscyk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3Qg
bnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVtVG1wcywgY29uc3QgVCYg
aW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMs
IHNpemVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkKICAgICAgICAgOiBtX251
bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxz
KQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMg
KyBudW1UbXBzKTsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOworICAgICAg
ICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRzICsgbnVtTG9jYWxzKTsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBleHBsaWNpdCBPcGVy
YW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBvdGhlciwgY29uc3QgVCYg
aW5pdGlhbFZhbHVlID0gVCgpKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRzTGlrZVRh
ZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQogICAgICAgICA6IG1fbnVtQXJndW1lbnRzKG90
aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICwgbV9udW1Mb2NhbHMob3RoZXIubnVt
YmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdyb3cob3RoZXIuc2l6ZSgp
KTsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOworICAgICAgICBtX3ZhbHVl
cy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSArIG90aGVyLm51bWJlck9mTG9j
YWxzKCkpOwogICAgIH0KLQorICAgIAogICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZUbXBz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVyT2ZBcmd1bWVudHMoKSAt
IG51bWJlck9mTG9jYWxzKCk7IH0KLQotICAgIHNpemVfdCB0bXBJbmRleChzaXplX3QgaWR4KSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9mVG1wcygpKTsKLSAgICAg
ICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOwot
ICAgIH0KKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQorICAgIAogICAgIHNpemVfdCBhcmd1bWVudElu
ZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVy
T2ZBcmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVChpZHggPCBtX251bUFyZ3VtZW50cyk7CiAg
ICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBsb2NhbEluZGV4KHNp
emVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4IDwgbnVtYmVyT2ZMb2Nh
bHMoKSk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgaWR4OworICAgICAg
ICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CiAgICAgfQotCi0gICAgUmVmVHlwZSB0bXAo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4KV07IH0KLSAgICBDb25z
dFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW3RtcEluZGV4
KGlkeCldOyB9CiAgICAgCi0gICAgUmVmVHlwZSBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9Ci0gICAgQ29uc3RSZWZUeXBlIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4
KV07IH0KKyAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07CisgICAgfQorICAgIGNvbnN0IFQmIGFyZ3Vt
ZW50KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZXNbYXJn
dW1lbnRJbmRleChpZHgpXTsKKyAgICB9CiAgICAgCi0gICAgUmVmVHlwZSBsb2NhbChzaXplX3Qg
aWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9Ci0gICAgQ29uc3RSZWZU
eXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2xvY2FsSW5kZXgo
aWR4KV07IH0KKyAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2Nh
bEluZGV4KGlkeCldOyB9CisgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAogICAgIHRlbXBsYXRlPE9w
ZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2lu
ZDo6VG1wOgotICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygpOwotICAgICAgICBjYXNl
IE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3Vt
ZW50T3BlcmFuZCkKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpOwotICAg
ICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkxvY2FscygpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsK
ICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgUmVmVHlw
ZSBhdEZvcihzaXplX3QgaWR4KQorICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCiAgICAgewotICAg
ICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7Ci0gICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRt
cDoKLSAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2lu
ZDo6QXJndW1lbnQ6CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQp
CiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAgICAgY2FzZSBPcGVyYW5k
S2luZDo6TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdG1w
KDApOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3Bl
cmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgQ29uc3RSZWZUeXBlIGF0Rm9yKHNpemVfdCBpZHgp
IGNvbnN0CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1w
OgotICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOwotICAgICAgICBjYXNlIE9wZXJhbmRLaW5k
OjpBcmd1bWVudDoKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkK
ICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAgICBjYXNlIE9wZXJhbmRL
aW5kOjpMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgpOwotICAgICAgICB9Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0bXAo
MCk7CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOwogICAgIH0KLQotICAgIHZvaWQgZW5zdXJl
TG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCisgICAgCisg
ICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBpZiAoc2l6
ZSA8PSBudW1iZXJPZkxvY2FscygpKQorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7
CisgICAgICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZU
bXBzKCkgKyBzaXplOwotICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2Nh
bHMoKTsKLSAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKICAgICAg
ICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvbGROdW1UbXBzOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAtIGld
ID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07Ci0KLSAgICAgICAgbV9u
dW1Mb2NhbHMgPSBzaXplOwotICAgICAgICBpZiAoZW5zdXJlZFZhbHVlICE9IFQoKSB8fCAhV1RG
OjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2FsczsgKytpKQotICAgICAgICAg
ICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsgaSldID0gZW5zdXJlZFZh
bHVlOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0
aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fdmFsdWVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gVCgpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHNpemVfdCBzaXplLCBjb25zdCBUJiBl
bnN1cmVkVmFsdWUgPSBUKCkpCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUsIGNv
bnN0IFQmIGVuc3VyZWRWYWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChzaXplIDw9IG51bWJlck9m
VG1wcygpKQorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKKyAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7CisgICAgICAgIGlmIChu
ZXdTaXplIDw9IG9sZFNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVt
YmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXplOwogICAgICAgICBtX3Zh
bHVlcy5ncm93KG5ld1NpemUpOwotCi0gICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8
ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgewotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kpCi0gICAgICAgICAg
ICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7Ci0gICAgICAgIH0KKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgIH0KICAgICAKICAgICB2b2lkIHNl
dExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQpAQCAtMjgwLDc2ICsxNjQsODQgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49IG51bWJlck9mTG9jYWxzKCkgfHwgbG9jYWwo
aWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVlKTsKICAgICB9Ci0KLSAg
ICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFs
dWVzW2luZGV4XTsgfQotICAgIENvbnN0UmVmVHlwZSBnZXRGb3JPcGVyYW5kSW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPmdldEZv
ck9wZXJhbmRJbmRleChpbmRleCk7IH0KLQotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgCisgICAgc2l6ZV90IG9wZXJhbmRJbmRleChp
bnQgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJhbmQudG9Bcmd1bWVudCgp
KTsKLSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xvY2FsKCkpOworICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1bWVudCgpKTsKKyAgICAg
ICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7
CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3BlcmFuZCBvcCkgY29uc3QK
KyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
IGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW9wLmlzVG1wKCkpCi0gICAgICAgICAgICByZXR1
cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgcmV0dXJuIHRt
cEluZGV4KG9wLnZhbHVlKCkpOworICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KHZpcnR1YWxS
ZWdpc3Rlci5vZmZzZXQoKSk7CiAgICAgfQogICAgIAotICAgIFJlZlR5cGUgb3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQogICAgIHsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsKG9wZXJh
bmQudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0Fy
Z3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgUmVmVHlwZSBvcGVyYW5kKE9wZXJhbmQgb3ApCisg
ICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKLSAg
ICAgICAgaWYgKCFvcC5pc1RtcCgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQob3Audmly
dHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm4gdG1wKG9wLnZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkpOwogICAgIH0KIAotICAg
IENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCk7IH0KLSAg
ICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKTsgfQorICAgIGNvbnN0
IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3Qg
VCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KKyAg
ICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJh
bmQob3BlcmFuZCkpOyB9CiAgICAgCi0gICAgYm9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9Mb2NhbCgpKSA8IG51bWJl
ck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2NhbHMoKTsKICAgICB9Ci0g
ICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CisgICAgYm9vbCBoYXNPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAob3AuaXNUbXAo
KSkgewotICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51bWJlck9mVG1wcygpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZpcnR1YWxSZWdpc3Rlcigp
KTsKKyAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgpKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisg
ICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkgPSB2YWx1ZTsKICAgICB9CisgICAgCisgICAg
dm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IFQm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0
KCksIHZhbHVlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLnNpemUoKTsgfQotICAgIENvbnN0UmVmVHlwZSBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIFJlZlR5cGUgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBDb25zdFJlZlR5cGUgb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgIFJlZlR5cGUg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAgT3Bl
cmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIGNvbnN0IFQmIGF0
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVCYg
YXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Cisg
ICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisg
ICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBt
X251bUFyZ3VtZW50czsgfQorICAgIGJvb2wgaXNMb2NhbChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBvcGVyYW5kRm9ySW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1
bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
bmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZMb2NhbHMoKSArIG51bWJl
ck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgcmV0dXJuIE9wZXJhbmQ6
OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZBcmd1bWVudHMoKSkpOwor
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KS5vZmZz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7CiAgICAgfQotCisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlckZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZEZvckluZGV4KGluZGV4KSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZEZpcnN0VGltZShpbnQgb3BlcmFuZCwgY29uc3Qg
VCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKKyAgICAgICAgICAgIHNldEFyZ3VtZW50Rmlyc3RUaW1lKFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kKS50b0FyZ3VtZW50KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWxGaXJzdFRpbWUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLnRvTG9jYWwoKSwgdmFsdWUpOworICAgIH0KKyAgICAKICAgICB2b2lkIGZpbGwoVCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6
ZSgpOyArK2kpCkBAIC0zNjUsNyArMjU3LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNT
RVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAg
ICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51bWJlck9mTG9jYWxzKCkp
OwotICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIubnVtYmVyT2ZUbXBzKCkp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90aGVyLm1fdmFsdWVzOwog
ICAgIH0KQEAgLTM3NCwxMCArMjY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8gVGhlIGZpcnN0IG1fbnVt
QXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBuZXh0IG1fbnVtTG9jYWxz
IGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KLSAgICBTdG9yYWdlIG1fdmFsdWVz
OwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fbnVt
TG9jYWxzIHsgMCB9OworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3VtZW50cyBvZiBtX3ZhbHVl
cyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgorICAgIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7CisgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVu
dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCAwYjFjYzFmMmQxOTdhZDA4MzY1YThm
Nzg1NjFmZGY2N2E3ZDllZGRkLi42NWZlZGRhMDczMGE4MzkxZjgzMTU2M2RiZGViODE2YWY5MjU2
NmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5s
aW5lcy5oCkBAIC0zMCwxNCArMzAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIHZv
aWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmIChpc1Rt
cCgpKQotICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC01MiwxMSArNDQsNiBAQCB2b2lkIE9wZXJh
bmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2FsSW5kZXgpLCBj
b250ZXh0KSk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsgdG1wSW5kZXgg
PCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgewotICAgICAgICBpZiAoIXRtcCh0bXBJbmRl
eCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAidG1w
IiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCksIGNvbnRleHQpKTsKLSAg
ICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC03MywxMSArNjAsNiBAQCB2b2lkIE9w
ZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBs
b2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IHRtcEluZGV4ID0gMDsg
dG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgewotICAgICAgICBpZiAoIXRt
cCh0bXBJbmRleCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7Ci0gICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDdlOTMyNjJkZmIwOTU5ZGVjMmE5MjQxZmY4
YzYxMWYzM2I5MmI0NDcuLmQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFjY2NjYzA1MDJjMTI2NTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcApAQCAtNzIsNyArNzIsNiBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZVR5cGUgY29kZQogICAg
ICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5cGUpKQogICAgICwgbV9k
aWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlTdGF0ZSkpCiAgICAgLCBt
X2FnZSgwKQotICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAgICAsIG1fcGFyc2VNb2Rl
KGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJh
dGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRhdGFUYWJsZTo6Y3JlYXRl
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCmluZGV4IDMwODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEyMzIwZGM1MGI0MTcuLmFk
MWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC0xNDEsOSAr
MTQxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBt
X2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CiAK
LSAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3BvaW50
czsgfQotICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFzQ2hlY2twb2ludHMgPSB0
cnVlOyB9Ci0KICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZvaWQgc2V0VGhpc1JlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlzUmVnaXN0ZXIgPSB0aGlz
UmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdpc3RlcjsgfQpAQCAtMjAx
LDggKzE5OCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBjb25zdCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KQEAgLTQy
MSw3ICs0MTksNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlkT3B0aW1pemUgOiAyOwog
ICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0KCgoMVUgPDwgMykgLSAx
KSA+PSBtYXhBZ2UpOwotICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6IDE7CiBwdWJsaWM6CiAg
ICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IGViOTE3OTQ1MzBkZjFhMzI5MmRj
ZGJlZDMxNjRlOWM3OTA5YTY5ZjEuLmJiYjhhNGIyNDUzMTA0MDNhN2ZjZWYyYjIxZTExODMzZWZi
OTAzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxl
LmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUluZGV4IGdldFJhcmVDYXNl
UHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByCiAgICAgcmV0
dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQogCi1zdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kIDog
cHVibGljIFZhbHVlUHJvZmlsZSB7CisgICAgaW50IG1fb3BlcmFuZDsKIH07CiAKLXN0cnVjdCBW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIgeworc3RydWN0IFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
IAotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcih1bnNpZ25lZCBzaXpl
KQorICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWduZWQgc2l6ZSkKICAgICAg
ICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBWYWx1ZVByb2ZpbGUg
aGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRpbWl6ZSB0aGVzZSB2YWx1
ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVmZmljaWVudC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQxMwotICAg
ICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXI+
OjptYWxsb2MobV9zaXplICogc2l6ZW9mKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3Rlcikp
OworICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPjo6
bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKLSAgICAgICAgICAgIG5ldyAo
Jm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICAgICAgICAgIG5ldyAoJm1fYnVmZmVyLmdldCgpW2ldKSBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
KCk7CiAgICAgfQogCi0gICAgflZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlcigp
CisgICAgflZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIoKQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbV9idWZmZXIu
Z2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAg
bV9idWZmZXIuZ2V0KClbaV0uflZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciB7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgbV9zaXplOwotICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXI+IG1fYnVmZmVyOworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kPiBtX2J1
ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmluZGV4IGIxMzk0N2YwZTE4ZGYwNjNhODhi
M2YyMjdjZGNkYmZlZmZlZGMzMDguLmM1Y2E0ZGUxZTRiMzYxMTIxNGMzNWFiMWVhMzJkYzFjYmY0
NWYzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5jcHAKQEAgLTM1LDIyICszNSwyMiBAQCBKU1ZhbHVlIFZhbHVlUmVjb3Zlcnk6OnJlY292
ZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0ZWNobmlxdWUo
KSkgewogICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSk7CisgICAgICAgIHJldHVy
biBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRJbnQzMigpKTsKICAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50
NTIoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1MigpKTsKICAgICBjYXNlIFN0cmljdEludDUyRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZp
cnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBq
c051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRT
dHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVy
KCkpLnVuYm94ZWREb3VibGUoKSkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIocHVyaWZ5TmFO
KGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZERvdWJsZSgp
KSk7CiAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpOworICAgICAgICByZXR1
cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkQ2VsbCgp
OwogICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVl
KCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1l
LT5yKHZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRCb29sZWFuKCkpOwogI2VuZGlmCiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJu
IGNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuaAppbmRleCA1ZTQzYmM3MmJiY2M0ZmY5N2E2OGY4M2RhODMwOTRlNThkYTNiMzE0Li5k
OGYxOGMzZmU4NTU5NGYzMmEyOTNhZmQ4OTA5MjIzNjEzNjJlYTYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCmluZGV4IGZkMTcw
MDcxN2MzYmZmM2JhZjBjM2IwMDMxNzZmZTY2NTkyNGRmNGIuLjM2MTk1Mjk0MmQyYjg2YmFiMTJm
NmNjYzdjYzFiYTAyMWY1YWQwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKQEAgLTMxLDEyICszMSwxMiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotaW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMb2NhbChpbnQgb3BlcmFuZCkK
K2lubGluZSBib29sIG9wZXJhbmRJc0xvY2FsKGludCBvcGVyYW5kKQogewogICAgIHJldHVybiBv
cGVyYW5kIDwgMDsKIH0KIAotaW5saW5lIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChp
bnQgb3BlcmFuZCkKK2lubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKQog
ewogICAgIHJldHVybiBvcGVyYW5kID49IDA7CiB9CkBAIC00OSwzMiArNDksMjUgQEAgcHVibGlj
OgogICAgIGZyaWVuZCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW50
KTsKICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGludCwgaW50KTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIgPSAweDNmZmZmZmZmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0KICAgICBWaXJ0
dWFsUmVnaXN0ZXIoUmVnaXN0ZXJJRCopOwogICAgIFZpcnR1YWxSZWdpc3RlcihSZWZQdHI8UmVn
aXN0ZXJJRD4pOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyKCkKLSAgICAgICAgOiBtX3ZpcnR1YWxS
ZWdpc3RlcihpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICA6IG1fdmlydHVhbFJlZ2lz
dGVyKHNfaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IFZp
cnR1YWxSZWdpc3RlcihpbnQgdmlydHVhbFJlZ2lzdGVyKQogICAgICAgICA6IG1fdmlydHVhbFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlcikKICAgICB7IH0KIAotICAgIFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90IHNsb3QpCi0gICAgICAgIDogbV92aXJ0dWFsUmVnaXN0ZXIoc3RhdGljX2Nh
c3Q8aW50PihzbG90KSkKLSAgICB7IH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIChtX3ZpcnR1YWxSZWdpc3RlciAhPSBpbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQotICAg
IGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbFJlZ2lzdGVySXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9w
ZXJhbmRJc0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQog
ICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAw
ICYmIG1fdmlydHVhbFJlZ2lzdGVyIDwgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50OyB9Ci0g
ICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0g
Zmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OyB9CiAgICAgaW50IHRvTG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1
cm4gb3BlcmFuZFRvTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgaW50IHRvQXJndW1l
bnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1l
bnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9Ci0gICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0
IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIGZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgaW50IHRvQ29uc3RhbnRJbmRleCgpIGNvbnN0
IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAtIHNfZmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KICAgICBpbnQgb2Zmc2V0SW5CeXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKTsgfQogCkBAIC0xMTMs
NiArMTA2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIgPSAweDNmZmZmZmZmOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfZmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggPSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKKwogICAg
IHN0YXRpYyBpbnQgbG9jYWxUb09wZXJhbmQoaW50IGxvY2FsKSB7IHJldHVybiAtMSAtIGxvY2Fs
OyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Mb2NhbChpbnQgb3BlcmFuZCkgeyByZXR1cm4g
LTEgLSBvcGVyYW5kOyB9CiAgICAgc3RhdGljIGludCBvcGVyYW5kVG9Bcmd1bWVudChpbnQgb3Bl
cmFuZCkgeyByZXR1cm4gb3BlcmFuZCAtIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKaW5kZXggY2M4MTQzZTE5OWY2NGY5Y2I3NmM2ZTgwNTQzODg4YmJl
OWFkM2JmNy4uYjUyZmM2MjM1NDNiNGMxYzM3ZjIxNGU3MjE3NGI5MmUyOWE1NDU0YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKQEAgLTExODcsNyArMTE4Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcigpCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpOwogICAgIG1fcGFyYW1ldGVycy5ncm93KG1fcGFyYW1ldGVycy5zaXplKCkgKyAxKTsKICAg
ICBhdXRvJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihyZWcpOwotICAgIHBhcmFtZXRlci5zZXRJ
bmRleChyZWcpOworICAgIHBhcmFtZXRlci5zZXRJbmRleChyZWcub2Zmc2V0KCkpOwogICAgIG1f
Y29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKICAgICByZXR1cm4gJnBhcmFtZXRlcjsKIH0KQEAg
LTExOTYsNyArMTE5Niw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVQYXJh
bWV0ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICAvLyBNYWtlIHN1
cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQg
bWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8vIG5lZWRpbmcgZGVzdHJ1Y3R1cmluZyBh
cmUgbm90ZWQuCi0gICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyKGlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpKTsgLy8gdGhpcworICAgIG1fdGhpc1Jl
Z2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0
aGlzCiAKICAgICBib29sIG5vblNpbXBsZUFyZ3VtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CkBAIC0xNjM3LDExICsx
NjM3LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbGl0eU9wSW1wbChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlCiAKICAgICBpZiAobV9sYXN0SW5zdHJ1
Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3AgPSBtX2xhc3RJbnN0cnVj
dGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT52aXJ0dWFsUmVnaXN0ZXIo
KSA9PSBvcC5tX2RzdAorICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZz
ZXQoKQogICAgICAgICAgICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQotICAgICAgICAgICAgJiYg
c3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpCi0gICAgICAgICAgICAmJiBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0KCku
aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5n
KG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPnZpcnR1YWxSZWdpc3RlcigpKS5n
ZXQoKSktPnRyeUdldFZhbHVlKCk7CisgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjMi0+aW5kZXgoKSkKKyAgICAgICAgICAgICYmIG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdldCgpLmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyhtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKSktPnRyeUdldFZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICBy
ZXdpbmQoKTsKICAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjplbWl0KHRoaXMsIGRzdCwg
b3AubV92YWx1ZSk7CkBAIC0zMjM1LDggKzMyMzUsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVu
YwogICAgIC8vIEVtaXQgY2FsbC4KICAgICBBU1NFUlQoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7
CiAgICAgVmFyYXJnc09wOjplbWl0KHRoaXMsIGRzdCwgZnVuYywgdGhpc1JlZ2lzdGVyLCBhcmd1
bWVudHMgPyBhcmd1bWVudHMgOiBWaXJ0dWFsUmVnaXN0ZXIoMCksIGZpcnN0RnJlZVJlZ2lzdGVy
LCBmaXJzdFZhckFyZ09mZnNldCk7Ci0gICAgaWYgKFZhcmFyZ3NPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRl
eCBiYzViYmFlOTdjMjMyZDJiNzg5ZTI3M2I5N2VhYzk5MzVhOGNkNDNmLi5lMTRhYTE2NTYyODEw
ZmQ5NjM3ZTAwYWVlN2NlYmZlZDQ1NjEwNDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC0xMDA4LDcgKzEw
MDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaG91bGRFbWl0Q29udHJvbEZs
b3dQcm9maWxlckhvb2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlR2VuZXJhdGlvbk1vZGUuY29u
dGFpbnMoQ29kZUdlbmVyYXRpb25Nb2RlOjpDb250cm9sRmxvd1Byb2ZpbGVyKTsgfQogICAgICAg
ICAKICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCk7IH0KLSAgICAgICAgdm9pZCBzZXRVc2VzQ2hlY2twb2ludHMoKSB7
IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygpOyB9CiAKICAgICAgICAgU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5wYXJzZU1vZGUo
KTsgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvUmVnaXN0ZXJJRC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9S
ZWdpc3RlcklELmgKaW5kZXggZjgxOWIxMjNkNGQ4OWJhMDU5OTA4YWFhZGM1MGY2MjlkYjNlNDky
OS4uMzU2MjBhMTExNjExYzVlMGI4MTAxY2Q0NTU0YzA2YmM4MDMwMzc4MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKQEAgLTY5LDEyICs2
OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZXRJbmRleChWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgpCisgICAgICAgIHZvaWQgc2V0SW5k
ZXgoaW50IGluZGV4KQogICAgICAgICB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgbV9k
aWRTZXRJbmRleCA9IHRydWU7CiAjZW5kaWYKLSAgICAgICAgICAgIG1fdmlydHVhbFJlZ2lzdGVy
ID0gaW5kZXg7CisgICAgICAgICAgICBtX3ZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rl
cihpbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldFRlbXBvcmFyeSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKaW5kZXggZTY0MDcx
YjFhYTBlMzQ4OTQ0MzQzOWZmMjhmY2EyNTFiNjJiOTY1Yy4uYjgzZmVlMGQzYzA5ZDE0OTdhYTdl
YTFkZTNlMDQ5MDYyZjIyNmMxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RIZWFwLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAgdm9pZCBBYnN0cmFjdEhlYXA6OlBh
eWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgb3V0LnByaW50KHZh
bHVlKCkpOwogfQogCi12b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcEFzT3BlcmFuZChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmIChpc1RvcCgpKQotICAgICAgICBvdXQu
cHJpbnQoIlRPUCIpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50KE9wZXJhbmQ6OmZyb21C
aXRzKHZhbHVlKCkpKTsKLX0KLQogdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoa2luZCgpKTsKQEAgLTU3LDEzICs0OSw2IEBA
IHZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAg
IG91dC5wcmludCgiKCIsIERPTUpJVDo6SGVhcFJhbmdlOjpmcm9tUmF3KHBheWxvYWQoKS52YWx1
ZTMyKCkpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChraW5kKCkgPT0g
U3RhY2spIHsKLSAgICAgICAgb3V0LnByaW50KCIoIik7Ci0gICAgICAgIHBheWxvYWQoKS5kdW1w
QXNPcGVyYW5kKG91dCk7Ci0gICAgICAgIG91dC5wcmludCgiKSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgb3V0LnByaW50KCIoIiwgcGF5bG9hZCgpLCAiKSIpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAppbmRleCAzYzRjZTNkNWQw
MmRjM2E4MWYzYWE0MjRjZmMzZmQxYzQ0N2M1MjkwLi5iZjk5Mzc3OTcwNDcwMmQ4ZDViMjBiNmMy
ZjZmNzM5NWFmZTZiODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1
ZGUgIkRPTUpJVEhlYXBSYW5nZS5oIgotI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC0xMjQsMTUgKzEyMywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKICAg
ICAgICAgewogICAgICAgICB9Ci0KLSAgICAgICAgUGF5bG9hZChPcGVyYW5kIG9wZXJhbmQpCi0g
ICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCi0gICAgICAgICAgICAsIG1fdmFsdWUob3BlcmFu
ZC5hc0JpdHMoKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgICAgICAgICA6IFBheWxvYWQoT3Bl
cmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAg
ICwgbV92YWx1ZShvcGVyYW5kLm9mZnNldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0xODksNyArMTgzLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICAgICAgdm9pZCBkdW1wQXNP
cGVyYW5kKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgbV9pc1RvcDsKQEAgLTIxMSw3ICsyMDQsNiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQoa2luZCAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQg
JiYga2luZCAhPSBIZWFwICYmIGtpbmQgIT0gU2lkZVN0YXRlKTsKICAgICAgICAgbV92YWx1ZSA9
IGVuY29kZShraW5kLCBwYXlsb2FkKTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBr
aW5kICYmIHRoaXMtPnBheWxvYWQoKSA9PSBwYXlsb2FkKTsKICAgICB9CiAgICAgCiAgICAgQWJz
dHJhY3RIZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTIyNywxMSArMjE5
LDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAh
PSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CiAg
ICAgfQotICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQo
a2luZCgpID09IFN0YWNrICYmICFwYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgIHJldHVybiBP
cGVyYW5kOjpmcm9tQml0cyhwYXlsb2FkKCkudmFsdWUoKSk7Ci0gICAgfQogICAgIAogICAgIEFi
c3RyYWN0SGVhcCBzdXBlcnR5cGUoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRl
eCBlZDI1MDdjZDA0OGQyM2UwZmI4MzNmYTZjMDZmZDQ1NmQ4OWM4OWMzLi5kYzFjNjRlZTRlNzZl
OGYxMWIzNjE2YTU5YjUzNzJjMTc0YTY3ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zODEs
NyArMzgxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIAogICAgIGNh
c2UgR2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1
ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQodmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpLm9mZnNldCgpKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRo
ZSBsb2NhbCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKHZhcmlhYmxlQWNjZXNzRGF0
YS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC0zOTIs
NyArMzkyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRTdGFjazogewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFu
ZChkYXRhLT5vcGVyYW5kKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUu
b3BlcmFuZChkYXRhLT5sb2NhbCk7CiAgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwg
c2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CiAgICAgICAg
IGlmICh2YWx1ZS52YWx1ZSgpKQpAQCAtNDAyLDEyICs0MDIsMTIgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
bV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQ
dXRTdGFjazogewotICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCktPm9wZXJhbmQpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjksNyArNDI5
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhl
IHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuIFNldEFyZ3VtZW50RGVmaW5pdGVseS9T
ZXRBcmd1bWVudE1heWJlIG1lYW5zCiAgICAgICAgIC8vIHRoYXQgc29tZW9uZSBzZXQgdGhlIGFy
Z3VtZW50IHZhbHVlcyBvdXQtb2YtYmFuZCwgYW5kIGN1cnJlbnRseSB0aGlzIGFsd2F5cyBtZWFu
cyBzZXR0aW5nIHRvIGEKICAgICAgICAgLy8gbm9uLWNsZWFyIHZhbHVlLgotICAgICAgICBBU1NF
UlQoIW1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpLmlzQ2xlYXIoKSk7CisgICAgICAg
IEFTU0VSVCghbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLmlzQ2xlYXIoKSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBJbml0aWFsaXplRW50cnlwb2ludEFyZ3VtZW50czogewpA
QCAtNDU4LDEyICs0NTgsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKLSAgICAgICAgY2xvYmJlcldv
cmxkKCk7Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgRm9y
d2FyZFZhcmFyZ3M6IHsKICAgICAgICAgLy8gRklYTUU6IEZvcndhcmRWYXJhcmdzIHNob3VsZCBj
aGVjayBpZiB0aGUgY291bnQgYmVjb21lcyBrbm93biwgYW5kIGlmIGl0IGRvZXMsIGl0IHNob3Vs
ZCB0dXJuCkBAIC00ODIsNyArNDc2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAg
ICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5jb3VudCkuc2V0Tm9uQ2VsbFR5cGUoU3BlY0ludDMy
T25seSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0IC0gMTsgaS0tOykK
LSAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydCArIGkpLm1ha2VIZWFwVG9w
KCk7CisgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBp
KS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNjQsNyArMjM1
OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudEluZGV4OwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXhDaGVja2VkLnNhZmVHZXQo
YXJndW1lbnRJbmRleCkgIT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykgewogICAgICAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudEluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgbV9zdGF0
ZS5vcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50SW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3Rh
bnRGb2xkaW5nKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudFBvc2l0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50UG9zaXRpb24uaAppbmRleCA4OWMwOGZhMDgwY2VhMzJmZDljNTkxZjMwZjFlN2RkNDZmMWQx
MjVlLi5kNzMyNDdiOTNjNWRjNzg2YjYxN2FhNWFhZGMyYjBmNjE1Mjg2YjVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50UG9zaXRpb24uaApAQCAtMTIwLDcg
KzEyMCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVzW2ldLT5maW5kKCk7Ci0gICAgICAgICAgICBPcGVy
YW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKIAogICAgICAgICAgICAgaWYgKGkp
CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAppbmRl
eCAxZmUyMGZlZjdkNTVmZTE3N2VmZTM5YzRlNjlhZmMzNjZmOGM0MTNjLi43MTNlNzk5OWE3YmZj
YTIxZGRjZWE4ZTM0NjI2MGYzNDMxZTRkOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKQEAgLTM1
OCwxMiArMzU4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLQogICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2FkVmFyYXJnc0RhdGEoKS0+b2Zmc2V0ICYmIChub2RlLT5hcmd1
bWVudHNDaGlsZCgpLT5vcCgpID09IE5ld0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5hcmd1bWVu
dHNDaGlsZCgpLT5vcCgpID09IFNwcmVhZCB8fCBub2RlLT5hcmd1bWVudHNDaGlsZCgpLT5vcCgp
ID09IE5ld0FycmF5QnVmZmVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2Rl
LT5hcmd1bWVudHNDaGlsZCgpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IE5l
d0FycmF5V2l0aFNwcmVhZCB8fCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTcHJlYWQgfHwgbm9k
ZS0+Y2hpbGQxKCktPm9wKCkgPT0gTmV3QXJyYXlCdWZmZXIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CkBAIC00OTYsMTAgKzQ5MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBoZWFwLm9wZXJhbmQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUz
MigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBtYXkgbm90IHBv
aW50IHRvIGFuIGFyZ3VtZW50IG9yIGxvY2FsLCBmb3IgZXhhbXBsZSBpZiB3ZSBhcmUgbG9va2lu
ZyBhdCBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghb3BlcmFuZC5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyZWcuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9iYmVyZWRCeVRoaXNCbG9jay5vcGVyYW5kKHJlZykgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsK
ICAgICAgICAgICAgIH0KQEAgLTU2MywxNiArNTYwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNDbG9iYmVyZWRCeUJsb2NrIHw9IGNsb2JiZXJlZEJ5VGhp
c0Jsb2NrLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9iYmVyZWRCeUJsb2Nr
IHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlUaGlzQmxvY2su
b3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xvYmJl
cmVkQnlCbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSk7CkBAIC02MzAsNyArNjI3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2Ji
ZXJpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhl
YXAgaGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXAu
a2luZCgpID09IFN0YWNrICYmICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Ns
b3QoaW5saW5lQ2FsbEZyYW1lLCBoZWFwLm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoaW5saW5l
Q2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC04MDksNyArODA2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzYWZlVG9HZXRTdGFjayA9IGluZGV4ID49IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRvR2V0U3RhY2sgJj0gaW5kZXggPCBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVUb0dl
dFN0YWNrICY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpIC0gMTsKQEAgLTg0
OCwyMyArODQ1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvSWRlbnRpdHlPbihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUt
PmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWxp
bWluYXRlZEFsbG9jYXRpb24oY2FuZGlkYXRlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFZhcmFyZ3NMZW5ndGggY2FuIGV4aXQsIHNv
IGl0IGJldHRlciBiZSBleGl0T0suCi0gICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luLndpdGhFeGl0T0sodHJ1ZSk7Ci0KLQotICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKGVtaXRDb2RlVG9HZXRB
cmd1bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGNhbmRpZGF0ZSwgbm9kZUluZGV4LCBv
cmlnaW4sIC8qIGFkZFRoaXMgPSAqLyB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRp
ZGF0ZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNFbGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtODc5LDEwICs4
NjIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNv
dW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5j
b3VudC5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9u
ZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudCksIEVkZ2UoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHZhcmFyZ3NEYXRhLT5jb3VudC5vZmZzZXQoKSksIEVkZ2UoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNw
ZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEu
YWRkKHZhcmFyZ3NEYXRhLT5jb3VudCwgRmx1c2hlZEludDMyKSksCkBAIC04OTEsMTUgKzg3NCwx
NCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RvcmVWYWx1ZSA9IFsm
XSAoTm9kZSogdmFsdWUsIHVuc2lnbmVkIHN0b3JlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2YXJhcmdzRGF0YS0+c3RhcnQgKyBzdG9yZUlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZy5pc0xvY2FsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4
aXQoY2FuRXhpdCksIE9wSW5mbyhyZWcub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0
KGNhbkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhyZWcpLCBFZGdl
KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQo
KSksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKQEAgLTk1Myw3
ICs5MzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21DcmVhdGVSZXN0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjYW5k
aWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lQXJndW1lbnRDb3Vu
dCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVBcmd1bWVudENvdW50ID49IG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEwMDEsNyArOTgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
YW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRp
ZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZy
YW1lQXJndW1lbnRDb3VudCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBsb2FkSW5kZXggPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgbG9hZEluZGV4IDwgZnJh
bWVBcmd1bWVudENvdW50OyArK2xvYWRJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChsb2FkSW5kZXggKyAxKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQocmVnLCBGbHVzaGVkSlNWYWx1ZSk7
CkBAIC0xMDM3LDcgKzEwMTksOSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNhbmRpZGF0ZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPiB2YXJh
cmdzRGF0YS0+b2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAtPSB2YXJhcmdzRGF0YS0+b2Zmc2V0OwpAQCAtMTA0Niw2ICsx
MDMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+PSAxKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSB2YXJhcmdzRGF0
YS0+bGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2
YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSwgdmFyYXJnc0RhdGEtPmxpbWl0LCB2YXJhcmdz
RGF0YS0+bWFuZGF0b3J5TWluaW11bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5jcHAKaW5kZXggMWZkYzMwOTk0ODhmYTk5NmVmYTJj
YzBhNjk4MzU4YzBhNDkxNWM2Yi4uZmYxZDU2ODBmYWUwYTIwMDE0ZDFmMWUxM2RjM2U0OGQ4YzU0
MzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
VXRpbGl0aWVzLmNwcApAQCAtMzIsMTUgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCitib29sIGFyZ3VtZW50c0lu
dm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxS
ZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiAocmVnLmlz
QXJndW1lbnQoKSAmJiByZWcudG9Bcmd1bWVudCgpKSB8fCByZWcuaXNIZWFkZXIoKTsKLQorICAg
IAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgJiYgcmVn
ID09IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MCwxOSArNDYsMTkg
QEAgYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAg
ICAgLy8gV2UgZG8gbm90IGluY2x1ZGUgZml4dXBzIGhlcmUgc2luY2UgaXQgaXMgbm90IHJlbGF0
ZWQgdG8gfGFyZ3VtZW50c3wsIHJlc3QgcGFyYW1ldGVycywgYW5kIHZhcmFyZ3MuCi0gICAgdW5z
aWduZWQgbnVtQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICB1bnNpZ25lZCBudW1Bcmd1
bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRTdGFydCA9CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoMCk7CiAgICAgcmV0dXJuIHJlZyA+PSBhcmd1bWVudFN0YXJ0ICYmIHJlZyA8IGFyZ3Vt
ZW50U3RhcnQgKyBudW1Bcmd1bWVudHM7CiB9CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChOb2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQgb3BlcmFuZCkKK2Jvb2wgYXJndW1lbnRzSW52
b2x2ZVN0YWNrU2xvdChOb2RlKiBjYW5kaWRhdGUsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgcmV0dXJuIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lKCksIG9wZXJhbmQpOworICAgIHJldHVybiBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpLCByZWcpOwogfQogCiBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
Ci0gICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBhZGRUaGlzKQorICAgIEluc2Vy
dGlvblNldCYgaW5zZXJ0aW9uU2V0LCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZU9yaWdpbiBvcmlnaW4pCiB7CiAgICAgR3JhcGgmIGdyYXBoID0gaW5zZXJ0aW9uU2V0
LmdyYXBoKCk7CiAKQEAgLTczLDE0ICs2OSwxMSBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBOZXdBcnJheUJ1
ZmZlcgogICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbURpcmVjdEFyZ3VtZW50
cyB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNsb25lZEFyZ3VtZW50cwogICAgICAgICB8
fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QgfHwgYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcgotICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0g
UGhhbnRvbU5ld0FycmF5V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbVNw
cmVhZCwKKyAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhT
cHJlYWQsCiAgICAgICAgIGFyZ3VtZW50cy0+b3AoKSk7CiAKLSAgICBpZiAoYXJndW1lbnRzLT5v
cCgpID09IFBoYW50b21TcHJlYWQpCi0gICAgICAgIHJldHVybiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoaW5zZXJ0aW9uU2V0LCBhcmd1bWVudHMtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZUluZGV4LCBvcmlnaW4sIGFkZFRoaXMpOwotCiAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Tm9uU3ByZWFkQXJndW1lbnRzID0gYWRkVGhpczsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZO
b25TcHJlYWRBcmd1bWVudHMgPSAwOwogICAgICAgICBCaXRWZWN0b3IqIGJpdFZlY3RvciA9IGFy
Z3VtZW50cy0+Yml0VmVjdG9yKCk7CiAgICAgICAgIE5vZGUqIGN1cnJlbnRTdW0gPSBudWxscHRy
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLT5udW1DaGlsZHJl
bigpOyBpKyspIHsKQEAgLTExMCw3ICsxMDMsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAKICAgICBpZiAoYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5QnVm
ZmVyIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAg
ICAgcmV0dXJuIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgIG5vZGVJ
bmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkgKyBhZGRUaGlzKSk7CisgICAgICAgICAgICBub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoYXJndW1lbnRzLT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1
dHRlcmZseSo+KCktPmxlbmd0aCgpKSk7CiAgICAgfQogICAgIAogICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gYXJndW1lbnRzLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2Fs
bEZyYW1lKCk7CkBAIC0xMjAsNyArMTEzLDcgQEAgTm9kZSogZW1pdENvZGVUb0dldEFyZ3VtZW50
c0FycmF5TGVuZ3RoKAogICAgICAgICBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGFyZ3VtZW50
cy0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAKICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50c1NpemUgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gIWFkZFRoaXM7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c1NpemUgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsKICAgICAgICAgaWYgKGFy
Z3VtZW50c1NpemUgPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICBhcmd1
bWVudHNTaXplIC09IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogICAgICAgICBlbHNlCkBAIC0x
MzYsMTQgKzEyOSwxNCBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgo
CiAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25seSwgQXJpdGhTdWIsIG9yaWdpbiwgT3BJ
bmZvKEFyaXRoOjpVbmNoZWNrZWQpLAogICAgICAgICBFZGdlKGFyZ3VtZW50Q291bnQsIEludDMy
VXNlKSwKICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAg
ICAgICAgbm9kZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ICsgIWFkZFRoaXMpLCBJbnQzMlVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBvcmlnaW4s
IGpzTnVtYmVyKDEgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksIEludDMyVXNlKSk7CiAKICAg
ICBpZiAobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApIHsKICAgICAgICAgLy8gVGhlIGFib3ZlIHN1
YnRyYWN0aW9uIG1heSBwcm9kdWNlIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoaXMgbnVtYmVyIGlz
IG5vbi16ZXJvLiBXZSBjb3JyZWN0IHRoYXQgaGVyZS4KICAgICAgICAgcmVzdWx0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNJbnQzMk9ubHks
IEFyaXRoTWF4LCBvcmlnaW4sIAogICAgICAgICAgICAgRWRnZShyZXN1bHQsIEludDMyVXNlKSwg
Ci0gICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9kZUluZGV4
LCBvcmlnaW4sIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhZGRUaGlzKSksIEludDMy
VXNlKSk7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2Uobm9k
ZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKDApLCBJbnQzMlVzZSkpOwogICAgICAgICByZXN1bHQt
PnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmgKaW5kZXggNzRmOTM5ZTgxNjIy
ZDQwMjQ2ZTIzNTVkNTA5OGE5ZWQyYTg1MjEwZC4uOWE3NzE4ZmJiZjU0N2IyZjZhZTEwMWRhZjM3
NGEwNmEyYzNkZGYxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1V0aWxpdGllcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5l
Q2FsbEZyYW1lKiwgT3BlcmFuZCk7Ci1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoTm9k
ZSogY2FuZGlkYXRlLCBPcGVyYW5kKTsKK2Jvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJ
bmxpbmVDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIpOworYm9vbCBhcmd1bWVudHNJbnZvbHZl
U3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyKTsKIAogTm9kZSogZW1p
dENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKAotICAgIEluc2VydGlvblNldCYsIE5vZGUq
IGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBib29sIGFkZFRoaXMg
PSBmYWxzZSk7CisgICAgSW5zZXJ0aW9uU2V0JiwgTm9kZSogYXJndW1lbnRzLCB1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGVPcmlnaW4pOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgK
aW5kZXggODk3YzcwZGZmYmEwNjZiNjQ5Y2FmZGNjMWVmMDkzMzc2ODEwNGQxMy4uOTZkYWMzOWE0
NDRmZmJkM2NlNTQzZjU3ZjM2Y2Q2MWRlY2MyOGJkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKQEAgLTEzOSw3ICsxMzksOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7
IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgfQogICAg
IHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCk7IH0KLSAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKE9w
ZXJhbmQgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3Bl
cmFuZCk7IH0KKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGludCBvcGVyYW5kKSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsgfQorICAgIEFic3RyYWN0
VmFsdWUmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2st
PnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9j
YWwoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaW5k
ZXgpOyB9CiAgICAgQWJzdHJhY3RWYWx1ZSYgYXJndW1lbnQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOyB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKaW5kZXggYzJi
NTVhYTVjNGE1MjI5YjFiMWE0NDMxYzE4N2FkZWY0NmMzZGIyNS4uNzc0M2U3ZDAxZjFjYWQ3ODFk
ODRhYjAzZDNjMDljNzdmODAyOWJhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIHZvaWQgQXZhaWxh
YmlsaXR5TWFwOjpwcnVuZUhlYXAoKQogCiB2b2lkIEF2YWlsYWJpbGl0eU1hcDo6cHJ1bmVCeUxp
dmVuZXNzKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiB3aGVyZSkKIHsKLSAgICBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+IGxvY2Fsc0NvcHkoT3BlcmFuZHNMaWtlLCBtX2xvY2FscywgQXZhaWxhYmls
aXR5Ojp1bmF2YWlsYWJsZSgpKTsKKyAgICBPcGVyYW5kczxBdmFpbGFiaWxpdHk+IGxvY2Fsc0Nv
cHkobV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMo
KSwgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJsZSgpKTsKICAgICBncmFwaC5mb3JBbGxMaXZlSW5C
eXRlY29kZSgKICAgICAgICAgd2hlcmUsCi0gICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKKyAg
ICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICBsb2NhbHNDb3B5
Lm9wZXJhbmQocmVnKSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgfSk7CiAgICAg
bV9sb2NhbHMgPSBXVEZNb3ZlKGxvY2Fsc0NvcHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmgKaW5kZXggODBjMTJiZjE4MDI1YTU2MTA1OTZkYTI0
ZTIzYzAyNWYyYWJlNGYyMC4uNTM1NTI1NjAyM2RkY2YyODBkYzU5NWIzM2E3YzdmZGVjNTRlNjRm
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5o
CkBAIC02Niw5ICs2Niw5IEBAIHN0cnVjdCBBdmFpbGFiaWxpdHlNYXAgewogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNGdW5jdG9yLCB0eXBlbmFtZSBBZGRGdW5jdG9yPgot
ICAgIHZvaWQgY2xvc2VTdGFydGluZ1dpdGhMb2NhbChPcGVyYW5kIG9wLCBjb25zdCBIYXNGdW5j
dG9yJiBoYXMsIGNvbnN0IEFkZEZ1bmN0b3ImIGFkZCkKKyAgICB2b2lkIGNsb3NlU3RhcnRpbmdX
aXRoTG9jYWwoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSGFzRnVuY3RvciYgaGFzLCBjb25z
dCBBZGRGdW5jdG9yJiBhZGQpCiAgICAgewotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5ID0gbV9sb2NhbHMub3BlcmFuZChvcCk7CisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKHJlZyk7CiAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5
Lmhhc05vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCBlMjFiMjhiNTIyMWYxNTYxOGI4
MDY0YTNhN2IyZDc4NjkxMzg0MjFlLi4wNTg0NDk2M2U2MTBlZDI5M2M1NjBmYWJmZDM4OWE5ZjM5
NzgwYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1C
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWdu
ZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIHVuc2lnbmVkIG51bVRtcHMsIGZs
b2F0IGV4ZWN1dGlvbkNvdW50KQorQmFzaWNCbG9jazo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4
IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxz
LCBmbG9hdCBleGVjdXRpb25Db3VudCkKICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdp
bikKICAgICAsIGluZGV4KE5vQmxvY2spCiAgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVB
dEhlYWQoU3RydWN0dXJlc0FyZVdhdGNoZWQpCkBAIC00OCwxMSArNDgsMTEgQEAgQmFzaWNCbG9j
azo6QmFzaWNCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFy
Z3VtZW50cywgdW5zaWcKICAgICAsIGlzTGlua2VkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBpc1Jl
YWNoYWJsZShmYWxzZSkKLSAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKLSAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscywgbnVtVG1wcykKLSAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cywgbnVtVG1wcykKLSAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2Fscywg
bnVtVG1wcykKLSAgICAsIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscywgbnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKQorICAgICwg
dmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFyaWFibGVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQorICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50
cywgbnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCiAgICAgLCBleGVjdXRpb25D
b3VudChleGVjdXRpb25Db3VudCkKIHsKIH0KQEAgLTcwLDE1ICs3MCw2IEBAIHZvaWQgQmFzaWNC
bG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKICAgICBpbnRlcnNlY3Rp
b25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2FscywgQWJzdHJhY3RW
YWx1ZTo6ZnVsbFRvcCgpKTsKIH0KIAotdm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVUbXBzKHVuc2ln
bmVkIG5ld051bVRtcHMpCi17Ci0gICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVt
VG1wcyk7Ci0gICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Ci0gICAg
dmFsdWVzQXRIZWFkLmVuc3VyZVRtcHMobmV3TnVtVG1wcyk7Ci0gICAgdmFsdWVzQXRUYWlsLmVu
c3VyZVRtcHMobmV3TnVtVG1wcyk7Ci0gICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFk
LmVuc3VyZVRtcHMobmV3TnVtVG1wcywgQWJzdHJhY3RWYWx1ZTo6ZnVsbFRvcCgpKTsKLX0KLQog
dm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlVGVybWluYWwoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogewogICAgIE5vZGVBbmRJbmRleCByZXN1bHQgPSBmaW5kVGVybWluYWwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggMWRkMzhjNzkwOGRjNmY0ZDFi
MDg1YmM4ZTA2MjU0ODBkYjQ0OTdjZi4uYjVhZGYwOTEyZDA5NDJiZTk3ZTk4N2NkYzg5ZjRhZTM0
ZDBjMGJjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKQEAg
LTQ2LDEyICs0NiwxMSBAQCB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgOD4gQmxvY2tOb2RlTGlzdDsK
IAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAgICBCYXNp
Y0Jsb2NrKAotICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51
bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzLCB1bnNpZ25lZCBudW1UbXBzLAorICAgICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5z
aWduZWQgbnVtTG9jYWxzLAogICAgICAgICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJh
c2ljQmxvY2soKTsKICAgICAKICAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1M
b2NhbHMpOwotICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAppbmRleCAwMDhjZjUy
MjY5NTdjOWE4MzU4NWM1ZTVlMmMxMjVmMmY4Y2U0YjJlLi43NTA4ZTIxOWRjN2M1ODNkYjllYThm
Y2U2NDY4NTg5OTllMDQ2MGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcApAQCAtNTEsNyArNTEsNyBAQCB2b2lkIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBSZWY8QmFzaWNCbG9jaz4mJiBibG9jaykK
IAogQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIGZs
b2F0IGV4ZWN1dGlvbkNvdW50KQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0
UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mVG1wcygpLCBleGVjdXRpb25Db3VudCkpOworICAgIFJlZjxCYXNpY0Js
b2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1f
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSwgZXhlY3V0aW9u
Q291bnQpKTsKICAgICBibG9jay0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIGF1dG8qIHJlc3Vs
dCA9IGJsb2NrLnB0cigpOwogICAgIGluc2VydChpbmRleCwgV1RGTW92ZShibG9jaykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBl
YmI0NmRhYWY2ZTE4NTJmOTRjYTM5ZTZjNjZhNmRiMGFkYzEyZTgzLi4wMzBmYWJmYTMwN2YxOWEy
NjdjMGNkNWZjM2FlNTk4M2NkYWNhN2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTExLDcgKzExMSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAgICAg
ICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAgICAg
LCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCi0gICAgICAgICwg
bV9udW1UbXBzKG1fY29kZUJsb2NrLT5udW1UbXBzKCkpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJT
bG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1faW5s
aW5lU3RhY2tUb3AoMCkKQEAgLTE0MCwxNyArMTM5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KIAot
ICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQotICAgIHsKLSAgICAgICAg
VkVSQk9TRV9MT0coIiAgIGVuc3VyZVRtcHM6IHRyeWluZyB0byByYWlzZSBtX251bVRtcHMgZnJv
bSAiLCBtX251bVRtcHMsICIgdG8gIiwgbmV3TnVtVG1wcywgIlxuIik7Ci0gICAgICAgIGlmIChu
ZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9u
dW1UbXBzID0gbmV3TnVtVG1wczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2kpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1
cmVUbXBzKG5ld051bVRtcHMpOwotICAgIH0KLQotCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5k
IG1heC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFu
ZGxlTWluTWF4KFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgY29uc3QgQ2hlY2tzRnVu
Y3RvciYgaW5zZXJ0Q2hlY2tzKTsKQEAgLTI4MiwxNyArMjcwLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVU
YXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJhc2ljQmxvY2sqPiYgdW5saW5r
ZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgCi0g
ICAgdm9pZCBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKQotICAgIHsKLSAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJl
bnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQn
cyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KLSAgICAgICAgbV9leGl0T0sgPSB0cnVlOwotICAgICAg
ICBhZGRUb0dyYXBoKEV4aXRPSyk7Ci0KLSAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsK
LSAgICB9Ci0KLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShP
cGVyYW5kIG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCkBAIC0zMDEsMTQgKzI3OSwxNiBAQCBwcml2
YXRlOgogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2Yg
YSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlKiBnZXREaXJlY3QoT3BlcmFuZCBvcGVy
YW5kKQorICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogCisgICAgICAgIC8vIElz
IHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudChvcGVyYW5kKTsKIAotICAgICAgICByZXR1
cm4gZ2V0TG9jYWxPclRtcChvcGVyYW5kKTsKKyAgICAgICAgLy8gTXVzdCBiZSBhIGxvY2FsLgor
ICAgICAgICByZXR1cm4gZ2V0TG9jYWwob3BlcmFuZCk7CiAgICAgfQogCiAgICAgTm9kZSogZ2V0
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQpAQCAtMzE4LDggKzI5OCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9jb25zdGFudHMuc2l6ZSgpOwogICAgICAg
ICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6ZSB8fCAhbV9jb25zdGFudHNbY29uc3Rh
bnRJbmRleF0pIHsKICAgICAgICAgICAgICAgICBjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jayA9
ICptX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gY29kZUJsb2NrLmdldENvbnN0YW50KG9wZXJhbmQpOwotICAgICAgICAgICAgICAg
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb2Rl
QmxvY2suY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5kLm9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKG9wZXJhbmQub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdGFudElu
ZGV4ID49IG9sZFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb25zdGFudHMuZ3Jvdyhj
b25zdGFudEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG9sZFNpemU7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTM3OCwxMCArMzU4LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIGxvY2FscyBhdCB0aGUgdG9wIG9m
IGEgZnVuY3Rpb24uCiAgICAgICAgIEltbWVkaWF0ZU5ha2VkU2V0CiAgICAgfTsKLQotICAgIE5v
ZGUqIHNldERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1v
ZGUgPSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKLSAg
ICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKKyAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsK
IAogICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQg
c3RhdGUgaGFzIGNoYW5nZWQuCiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CkBAIC0zOTUsNyAr
Mzc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBkZWxheWVkLmV4ZWN1
dGUodGhpcyk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVl
LnNpemUoKTsgKytpKQpAQCAtNDEzLDE3ICszOTIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOwogICAgICAgICBBU1NFUlQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSA9PSBtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJy
ZW50SW5kZXgsIG5vZGUtPm9wZXJhbmQoKSk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5IGtleShtX2N1cnJlbnRJbmRleCwgbm9kZS0+bG9jYWwoKSk7CiAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5w
cmVkaWN0aW9uKGxvY2tlciwga2V5KTsKICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAog
ICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3Bl
cmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgotICAgIE5vZGUqIGdldExvY2FsT3JUbXAoT3BlcmFu
ZCBvcGVyYW5kKQorICAgIE5vZGUqIGdldExvY2FsKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBvcGVyYW5kLmlzTG9jYWwo
KSk7Ci0gICAgICAgIE5vZGUqJiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9M
b2NhbCgpOworCisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBn
b2FsczogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQogICAg
ICAgICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlz
IHJlcXVpcmVkIGZvcgpAQCAtNDQ4LDI2ICs0MjgsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwogICAgICAgICAKICAg
ICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRM
b2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAg
IH0KLSAgICBOb2RlKiBzZXRMb2NhbE9yVG1wKGNvbnN0IENvZGVPcmlnaW4mIHNlbWFudGljT3Jp
Z2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3Jt
YWxTZXQpCisgICAgTm9kZSogc2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmln
aW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2Rl
ID0gTm9ybWFsU2V0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNUbXAoKSB8fCBv
cGVyYW5kLmlzTG9jYWwoKSk7CiAgICAgICAgIFNldEZvclNjb3BlPENvZGVPcmlnaW4+IG9yaWdp
bkNoYW5nZShtX2N1cnJlbnRTZW1hbnRpY09yaWdpbiwgc2VtYW50aWNPcmlnaW4pOwogCi0gICAg
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wZXJhbmQu
dmFsdWUoKSkgPj0gbV9udW1UbXBzKSB7Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCppbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAg
ICAgICAgICBkYXRhTG9nTG4oIkJhZCBvcGVyYW5kOiAiLCBvcGVyYW5kLCAiIGJ1dCBjdXJyZW50
IG51bWJlciBvZiB0bXBzIGlzOiAiLCBtX251bVRtcHMsICIgY29kZSBibG9jayBoYXM6ICIsIG1f
cHJvZmlsZWRCbG9jay0+bnVtVG1wcygpLCAiIHRtcHMuIik7Ci0gICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQg
JiYgIW9wZXJhbmQuaXNUbXAoKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9u
KiBhcmd1bWVudFBvc2l0aW9uID0gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChyZWcpOwor
ICAgICAgICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHNldE1vZGUgIT0gSW1tZWRpYXRlTmFrZWRTZXQpIHsKKyAgICAgICAgICAgIEFy
Z3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24gPSBmaW5kQXJndW1lbnRQb3NpdGlvbkZv
ckxvY2FsKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgYXJndW1lbnRQb3NpdGlvbik7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpICYmIHJlZyA9PSBt
X2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSAmJiBvcGVyYW5kID09IG1fY29kZUJsb2NrLT5zY29wZVJl
Z2lzdGVyKCkpCiAgICAgICAgICAgICAgICAgZmx1c2gob3BlcmFuZCk7CiAgICAgICAgIH0KIApA
QCAtNDc3LDcgKzQ1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VDaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKHNlbWFudGljT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKSwgQmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBo
KFNldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5v
ZGU7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtNTA5LDIxICs0ODMsMjAgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9k
ZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2VtYW50aWNPcmlnaW4sIE9wZXJhbmQg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKKyAgICBO
b2RlKiBzZXRBcmd1bWVudChjb25zdCBDb2RlT3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxT
ZXQpCiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2Uo
bV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFudGljT3JpZ2luKTsKIAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgdW5z
aWduZWQgYXJndW1lbnQgPSByZWcudG9Bcmd1bWVudCgpOworICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQudG9Bcmd1bWVudCgpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBt
X251bUFyZ3VtZW50cyk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShyZWcpOworICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShvcGVyYW5kKTsKIAogICAgICAgICAvLyBBbHdheXMgZmx1c2ggYXJndW1lbnRzLCBleGNl
cHQgZm9yICd0aGlzJy4gSWYgJ3RoaXMnIGlzIGNyZWF0ZWQgYnkgdXMsCiAgICAgICAgIC8vIHRo
ZW4gbWFrZSBzdXJlIHRoYXQgaXQncyBuZXZlciB1bmJveGVkLgogICAgICAgICBpZiAoYXJndW1l
bnQgfHwgbV9ncmFwaC5uZWVkc0ZsdXNoZWRUaGlzKCkpIHsKICAgICAgICAgICAgIGlmIChzZXRN
b2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0KQotICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KHJl
Zyk7CisgICAgICAgICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmICghYXJndW1lbnQgJiYgbV9jb2RlQmxvY2stPnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCkBAIC01NTksMTYgKzUzMiwxNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQu
b2Zmc2V0KCkgLSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0FyZ3VtZW50KCk7CiAg
ICAgICAgICAgICByZXR1cm4gc3RhY2stPm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRdOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgCi0gICAgQXJndW1lbnRQb3NpdGlvbiogZmluZEFyZ3VtZW50UG9zaXRpb24oT3Bl
cmFuZCBvcGVyYW5kKQorICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRBcmd1bWVudFBvc2l0aW9u
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNU
bXAoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAob3BlcmFuZC5p
c0FyZ3VtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JB
cmd1bWVudChvcGVyYW5kLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBmaW5kQXJndW1l
bnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBy
ZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGRGbHVzaERpcmVjdEZ1bmM+CkBAIC01NzksOSArNTUwLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9ncmFwaC5oYXNEZWJ1Z2dlckVuYWJs
ZWQoKSk7CiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50c1dpdGhGaXh1cC5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5p
c0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxG
cmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSk7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1h
cE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkp
Ci0gICAgICAgICAgICAgICAgYWRkRmx1c2hEaXJlY3QoaW5saW5lQ2FsbEZyYW1lLCByZW1hcE9w
ZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGluZUNhbGxGcmFt
ZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG51bUFyZ3VtZW50cyA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lKS0+bnVtUGFyYW1ldGVycygpOwogCkBAIC02MDQsNyArNTc1LDYgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBtX2dyYXBoLmxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgbmVlZCB0byBoYW5k
bGUgdG1wcyBoZXJlIGJlY2F1c2UgdG1wcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGZsdXNoZWQg
dG8gdGhlIHN0YWNrLgogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVuZXNzQXRCeXRl
Y29kZSA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhieXRlY29kZUluZGV4LCBtX2dyYXBoLmFw
cHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KG9yaWdpbiwgaXNDYWxsZXJPcmlnaW4p
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpdmVu
ZXNzQXRCeXRlY29kZVtsb2NhbF0pCkBAIC02MTQsMjcgKzU4NCwyNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaChPcGVyYW5kIG9wZXJhbmQpCisg
ICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIGZs
dXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5kKQorICAgIHZvaWQg
Zmx1c2hEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBmbHVz
aERpcmVjdChvcGVyYW5kLCBmaW5kQXJndW1lbnRQb3NpdGlvbihvcGVyYW5kKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBmbHVzaERpcmVjdChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24q
IGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBmbHVzaERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAg
ICAgIGFkZEZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG9wZXJhbmQsIGFyZ3VtZW50UG9zaXRp
b24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgotICAgIHZvaWQg
YWRkRmx1c2hPclBoYW50b21Mb2NhbChPcGVyYW5kIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24q
IGFyZ3VtZW50UG9zaXRpb24pCisgICAgdm9pZCBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIAot
ICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIApAQCAtNjQ0LDI1ICs2MTQsMjYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpOwogICAgICAgICAKICAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5m
byh2YXJpYWJsZSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAg
ICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9
CiAKLSAgICB2b2lkIHBoYW50b21Mb2NhbERpcmVjdChPcGVyYW5kIG9wZXJhbmQpCisgICAgdm9p
ZCBwaGFudG9tTG9jYWxEaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAg
ICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b21Mb2NhbD4ob3BlcmFuZCwgZmluZEFy
Z3VtZW50UG9zaXRpb24ob3BlcmFuZCkpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goSW5saW5l
U3RhY2tFbnRyeSogaW5saW5lU3RhY2tFbnRyeSkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1
c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVz
aERpcmVjdChvcGVyYW5kKTsgfTsKKyAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAo
SW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcp
OyB9OwogICAgICAgICBmbHVzaEltcGwoaW5saW5lU3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJh
bWUsIGFkZEZsdXNoRGlyZWN0KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoRm9yVGVybWluYWwo
KQogICAgIHsKLSAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZy
YW1lKiwgT3BlcmFuZCBvcGVyYW5kKSB7IGZsdXNoRGlyZWN0KG9wZXJhbmQpOyB9OwotICAgICAg
ICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgT3Bl
cmFuZCBvcGVyYW5kKSB7IHBoYW50b21Mb2NhbERpcmVjdChvcGVyYW5kKTsgfTsKKyAgICAgICAg
YXV0byBhZGRGbHVzaERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lz
dGVyIHJlZykgeyBmbHVzaERpcmVjdChyZWcpOyB9OworICAgICAgICBhdXRvIGFkZFBoYW50b21M
b2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIHJlZykg
eyBwaGFudG9tTG9jYWxEaXJlY3QocmVnKTsgfTsKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbElt
cGwoY3VycmVudENvZGVPcmlnaW4oKSwgYWRkRmx1c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERp
cmVjdCk7CiAgICAgfQogCkBAIC03OTAsMTEgKzc2MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgcmV0
dXJuIGFkZFRvR3JhcGgocmVzdWx0KTsKICAgICB9Ci0gICAgTm9kZSogYWRkVG9HcmFwaChOb2Rl
VHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiBjaGlsZDEpCi0gICAgewotICAgICAgICBB
U1NFUlQob3AgPT0gTW92SGludCk7Ci0gICAgICAgIHJldHVybiBhZGRUb0dyYXBoKG9wLCBPcElu
Zm8ob3BlcmFuZC5raW5kKCkpLCBPcEluZm8ob3BlcmFuZC52YWx1ZSgpKSwgY2hpbGQxKTsKLSAg
ICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcElu
Zm8gaW5mbzIsIEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMg
PSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUo
CkBAIC0xMTI1LDEwICsxMDkxLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBudW1iZXIgb2Yg
YXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1
bWVudHM7Ci0gICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3Jhcmllcykg
dXNlZCBieSB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KKyAgICAvLyBUaGUgbnVtYmVy
IG9mIGxvY2FscyAodmFycyArIHRlbXBvcmFyaWVzKSB1c2VkIGluIHRoZSBmdW5jdGlvbi4KICAg
ICB1bnNpZ25lZCBtX251bUxvY2FsczsKLSAgICAvLyBUaGUgbWF4IG51bWJlciBvZiB0ZW1wcyB1
c2VkIGZvciBmb3J3YXJkaW5nIGRhdGEgdG8gYW4gT1NSIGV4aXQgY2hlY2twb2ludC4KLSAgICB1
bnNpZ25lZCBtX251bVRtcHM7CiAgICAgLy8gVGhlIG51bWJlciBvZiBzbG90cyAoaW4gdW5pdHMg
b2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvCiAgICAgLy8gcHJlYWxsb2NhdGUg
Zm9yIGFyZ3VtZW50cyB0byBvdXRnb2luZyBjYWxscyBmcm9tIHRoaXMgZnJhbWUuIFRoaXMKICAg
ICAvLyBudW1iZXIgaW5jbHVkZXMgdGhlIENhbGxGcmFtZSBzbG90cyB0aGF0IHdlIGluaXRpYWxp
emUgZm9yIHRoZSBjYWxsZWUKQEAgLTExOTUsMTcgKzExNTksMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCk7CiAgICAgICAgIAotICAgICAgICBPcGVy
YW5kIHJlbWFwT3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNvbnN0CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE9wZXJhbmQ6OnRtcChvcGVyYW5kLnZhbHVlKCkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+dG1wT2Zmc2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKCFvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKIAotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBt
X2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpOwogICAgICAgICB9CiAgICAgfTsKICAgICAK
QEAgLTEyMTQsOCArMTE3NSwxMyBAQCBwcml2YXRlOgogICAgIElDU3RhdHVzQ29udGV4dFN0YWNr
IG1faWNDb250ZXh0U3RhY2s7CiAgICAgCiAgICAgc3RydWN0IERlbGF5ZWRTZXRMb2NhbCB7Cisg
ICAgICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX29w
ZXJhbmQ7CisgICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgICAgIFNldE1vZGUgbV9zZXRNb2Rl
OworICAgICAgICAKICAgICAgICAgRGVsYXllZFNldExvY2FsKCkgeyB9Ci0gICAgICAgIERlbGF5
ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIE9wZXJhbmQgb3BlcmFuZCwgTm9k
ZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSkKKyAgICAgICAgRGVsYXllZFNldExvY2FsKGNvbnN0
IENvZGVPcmlnaW4mIG9yaWdpbiwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHZhbHVl
LCBTZXRNb2RlIHNldE1vZGUpCiAgICAgICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAg
ICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CkBAIC0xMjI4LDEzICsxMTk0LDggQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKG1fb3BlcmFuZC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci0+c2V0QXJndW1lbnQobV9vcmlnaW4sIG1fb3BlcmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsK
LSAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNldExvY2FsT3JUbXAobV9vcmlnaW4sIG1fb3Bl
cmFuZCwgbV92YWx1ZSwgbV9zZXRNb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXItPnNl
dExvY2FsKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CiAgICAgICAg
IH0KLQotICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBPcGVyYW5kIG1fb3Bl
cmFuZDsKLSAgICAgICAgTm9kZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKLSAgICAgICAgU2V0TW9k
ZSBtX3NldE1vZGU7CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8RGVsYXllZFNldExvY2FsLCAy
PiBtX3NldExvY2FsUXVldWU7CkBAIC0xMjQ3LDcgKzEyMDgsNyBAQCBwcml2YXRlOgogQmFzaWNC
bG9jayogQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVGFyZ2V0YWJsZUJsb2NrKEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5k
ZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7CisgICAgUmVm
PEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNpY0Jsb2NrKGJ5dGVjb2RlSW5k
ZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJhc2ljQmxvY2sqIGJs
b2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgLy8gbV9ibG9ja0xpbmtpbmdUYXJnZXRzIG11c3Qg
YWx3YXlzIGJlIHNvcnRlZCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIGJ5dGVjb2RlQmVnaW4KICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLnNpemUoKSkKQEAg
LTEyNTksNyArMTIyMCw3IEBAIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRh
cmdldGFibGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiAKIEJhc2ljQmxvY2sq
IEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCkKIHsKLSAgICBSZWY8
QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRl
eCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcywgMSkpOworICAgIFJl
ZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUlu
ZGV4KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgMSkpOwogICAgIEJhc2ljQmxvY2sq
IGJsb2NrUHRyID0gYmxvY2sucHRyKCk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3Zl
KGJsb2NrKSk7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwpAQCAtMTQ2Miw3ICsxNDIzLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdl
dE5vZGUsIENhbGxWYXJpYW50IGMKICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYg
dGhlIHRhcmdldCBJbmxpbmVDYWxsRnJhbWUgaXMgVmFyYXJncywgd2UgZG8gbm90IGtub3cgaG93
IG1hbnkgYXJndW1lbnRzIGFyZSBhY3R1YWxseSBmaWxsZWQgYnkgTG9hZFZhcmFyZ3MuIFZhcmFy
Z3MgSW5saW5lQ2FsbEZyYW1lJ3MKLSAgICAgICAgICAgIC8vIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIGlzIG1heGltdW0gbnVtYmVyIG9mIHBvdGVudGlhbGx5IGZpbGxlZCBhcmd1bWVudHMg
YnkgeGtMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hpY2gg
bWF5IGJlCisgICAgICAgICAgICAvLyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhp
bXVtIG51bWJlciBvZiBwb3RlbnRpYWxseSBmaWxsZWQgYXJndW1lbnRzIGJ5IExvYWRWYXJhcmdz
LiBXZSAiY29udGludWUiIHRvIHRoZSB1cHBlciBmcmFtZSB3aGljaCBtYXkgYmUKICAgICAgICAg
ICAgIC8vIGEgZ29vZCB0YXJnZXQgdG8ganVtcCBpbnRvLgogICAgICAgICAgICAgaWYgKGNhbGxG
cmFtZS0+aXNWYXJhcmdzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDg4LDcg
KzE0NDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgQ2FsbFZhcmlhbnQgYwogICAgICAgICAvLyBXZSBtdXN0IHNl
dCB0aGUgY2FsbGVlIHRvIHRoZSByaWdodCB2YWx1ZQogICAgICAgICBpZiAoc3RhY2tFbnRyeS0+
bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGlmIChzdGFja0VudHJ5LT5tX2lubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBzZXREaXJlY3QocmVt
YXBPcGVyYW5kKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgTm9ybWFsU2V0KTsKKyAgICAgICAgICAgICAgICBzZXRE
aXJlY3Qoc3RhY2tFbnRyeS0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXROb2RlKTsKIApA
QCAtMTY1MywxOCArMTYxNCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5v
ZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgIEFTU0VS
VCghKG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
KSk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCA9IHJlZ2lzdGVyT2Zmc2V0IC0g
bnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90czsKICAgICAKLSAgICBPcGVyYW5kIGlubGluZUNhbGxG
cmFtZVN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXRBZnRlckZpeHVwKSkudmFsdWUoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKTsKKyAgICBpbnQgaW5saW5lQ2FsbEZyYW1l
U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLm9mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnM7CiAgICAgCiAgICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBpbmxpbmVDYWxs
RnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZVN0YXJ0KS50b0xvY2FsKCkgKyAxICsKICAgICAgICAgQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKICAgICAK
LSAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1f
aW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMo
KSk7Ci0KICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3Vt
ZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIGlmIChyZXN1bHQuaXNWYWxpZCgpKQotICAgICAg
ICByZXN1bHQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0KS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKHJlc3VsdCk7CiAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlhYmxlID0g
bnVsbHB0cjsKICAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTY3Nyw3ICsx
NjM2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQ2EKIAogICAgIElubGluZVN0YWNrRW50cnkq
IGNhbGxlclN0YWNrVG9wID0gbV9pbmxpbmVTdGFja1RvcDsKICAgICBJbmxpbmVTdGFja0VudHJ5
IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIGNhbGxlZS5mdW5j
dGlvbigpLCByZXN1bHQsCi0gICAgICAgIGlubGluZUNhbGxGcmFtZVN0YXJ0LnZpcnR1YWxSZWdp
c3RlcigpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxv
Y2spOworICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCwgY29udGludWF0aW9uQmxvY2spOwogCiAgICAg
Ly8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgogICAg
IEJ5dGVjb2RlSW5kZXggb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKQEAgLTE3MTIsOSArMTY3
MSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4g
d2UgYmVnaW4gZXhlY3V0aW5nIHRoZSBjYWxsZWUsIHdlIG5lZWQgT1NSIGV4aXQgdG8gYmUgYXdh
cmUgb2Ygd2hlcmUgaXQgY2FuIHJlY292ZXIgdGhlIGFyZ3VtZW50cyB0byB0aGUgc2V0dGVyLCBs
b2M5IGFuZCBsb2MxMC4gVGhlIE1vdkhpbnRzIGluIHRoZSBpbmxpbmVkCiAgICAgICAgIC8vIGNh
bGxlZSBtYWtlIGl0IHNvIHRoYXQgaWYgd2UgZXhpdCBhdCA8SEVSRT4sIHdlIGNhbiByZWNvdmVy
IGxvYzkgYW5kIGxvYzEwLgogICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIE9wZXJhbmQg
YXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9HZXQpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvR2V0Lm9mZnNl
dCgpKSwgdmFsdWUpOwogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVuZChEZWxheWVk
U2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvR2V0LCB2YWx1ZSwgSW1t
ZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xNzU4LDE2
ICsxNzE3LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAgICAgICAgIC8vIEluIHN1Y2gg
Y2FzZXMsIHdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgZnJhbWVzLgogICAgICAgICBpZiAocmVnaXN0
ZXJPZmZzZXRBZnRlckZpeHVwICE9IHJlZ2lzdGVyT2Zmc2V0KSB7CiAgICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFRv
R2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IGdldERpcmVjdChhcmd1bWVudFRvR2V0KTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kIGFy
Z3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhp
bnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0KSwgdmFsdWUpOworICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7CisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldC5vZmZzZXQoKSksIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBwZW5kKERlbGF5ZWRTZXRMb2NhbCB7
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQsIHZhbHVlLCBJbW1lZGlhdGVOYWtl
ZFNldCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgYXJpdHlGaXh1cENvdW50OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBP
cGVyYW5kIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRl
eCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1Nl
dCksIHVuZGVmaW5lZCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1Nl
dCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIGluZGV4KSk7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVudFRvU2V0Lm9mZnNldCgpKSwgdW5kZWZp
bmVkKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2Fs
IHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1lbnRUb1NldCwgdW5kZWZpbmVkLCBJbW1lZGlh
dGVOYWtlZFNldCB9KTsKICAgICAgICAgfQogCkBAIC0xOTM0LDEyICsxODkzLDEyIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsVmFyaWFu
dCwgY2FsbFRhcmdldE5vZGUsIHRoaXNBcmd1bWVudCk7CiAgICAgICAgIAogICAgICAgICBpbnQg
cmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9Ci0gICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFw
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKTsKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLm9mZnNldCgpOwogICAgICAgICAKICAgICAgICAg
ZW5zdXJlTG9jYWxzKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xv
Y2FsKCkpOwogICAgICAgICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwotICAgICAgICBpbnQgcmVt
YXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7Cisg
ICAgICAgIGludCByZW1hcHBlZEFyZ3VtZW50U3RhcnQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpKS5vZmZzZXQoKTsKICAgICAg
ICAgCiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9sb2FkVmFyYXJn
c0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnN0YXJ0ID0gVmlydHVhbFJlZ2lzdGVyKHJlbWFw
cGVkQXJndW1lbnRTdGFydCArIDEpOwpAQCAtMTk0NywyNCArMTkwNiwxMSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZp
cnR1YWxSZWdpc3RlcgogICAgICAgICBkYXRhLT5vZmZzZXQgPSBhcmd1bWVudHNPZmZzZXQ7CiAg
ICAgICAgIGRhdGEtPmxpbWl0ID0gbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAg
ICAgIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0gPSBtYW5kYXRvcnlNaW5pbXVtOwotCi0gICAgICAg
IGlmIChjYWxsT3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgewotICAgICAgICAgICAgTm9k
ZSogYXJndW1lbnRDb3VudDsKLSAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpCi0g
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOwotICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lQ2FsbEZyYW1lKCkt
PmlzVmFyYXJncygpKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBnZXREaXJlY3Qo
cmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSgpLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpOwotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBh
cmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVl
emUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lKCktPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yd2FyZFZhcmFyZ3MsIE9wSW5mbyhkYXRh
KSwgYXJndW1lbnRDb3VudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiBh
cmd1bWVudHMgPSBnZXQoYXJndW1lbnRzQXJndW1lbnQpOwotICAgICAgICAgICAgYXV0byBhcmdD
b3VudFRtcCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChPcGVyYW5kOjp0bXAoT3BD
YWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7Ci0gICAgICAgICAgICBzZXREaXJl
Y3QoYXJnQ291bnRUbXAsIGFkZFRvR3JhcGgoVmFyYXJnc0xlbmd0aCwgT3BJbmZvKGRhdGEpLCBh
cmd1bWVudHMpKTsKLSAgICAgICAgICAgIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpOwotCi0g
ICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldExvY2Fs
T3JUbXAoYXJnQ291bnRUbXApLCBhcmd1bWVudHMpOwotICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEZvcndhcmRWYXJhcmdzLCBPcEluZm8oZGF0YSkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRUb0dyYXBoKExvYWRWYXJhcmdzLCBPcEluZm8oZGF0YSksIGdldChhcmd1
bWVudHNBcmd1bWVudCkpOwogICAgICAgICAKICAgICAgICAgLy8gTG9hZFZhcmFyZ3MgbWF5IE9T
UiBleGl0LiBIZW5jZSwgd2UgbmVlZCB0byBrZWVwIGFsaXZlIGNhbGxUYXJnZXROb2RlLCB0aGlz
QXJndW1lbnQKICAgICAgICAgLy8gYW5kIGFyZ3VtZW50c0FyZ3VtZW50IGZvciB0aGUgYmFzZWxp
bmUgSklULiBIb3dldmVyLCB3ZSBvbmx5IG5lZWQgYSBQaGFudG9tIGZvcgpAQCAtMTk3NiwxNCAr
MTkyMiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICAvLyBTU0EuIEZvcnR1
bmF0ZWx5LCB3ZSBhbHNvIGhhdmUgb3RoZXIgcmVhc29ucyBmb3Igbm90IGluc2VydGluZyBjb250
cm9sIGZsb3cKICAgICAgICAgLy8gYmVmb3JlIFNTQS4KICAgICAgICAgCi0gICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShkYXRh
LT5jb3VudCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY291bnRWYXJpYWJsZSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAg
IC8vIFRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCBpdCB3aWxsIGZvcmNlIHRoZSBjb3VudCB0byBi
ZSBmbHVzaGVkIGFzIGFuIGludC4gVGhpcyBkb2Vzbid0CiAgICAgICAgIC8vIG1hdHRlciB2ZXJ5
IG11Y2gsIHNpbmNlIG91ciB1c2Ugb2YgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgYW5kIEZsdXNo
ZXMgZm9yIHRoaXMgbG9jYWwgc2xvdCBpcwogICAgICAgICAvLyBtb3N0bHkganVzdCBhIGZvcm1h
bGl0eS4KICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJlZGljdChTcGVjSW50MzJPbmx5KTsKICAg
ICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2ZpdGFibGVUb1VuYm94KHRydWUpOwogICAg
ICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudERlZmlu
aXRlbHksIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFy
Z3VtZW50Q291bnQpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNl
dE9wZXJhbmQoY291bnRWYXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnRDb3VudCk7CiAgICAg
ICAgIAogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50U3RhcnQpLCBnZXQodGhp
c0FyZ3VtZW50KSwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICB1bnNpZ25lZCBudW1TZXRB
cmd1bWVudHMgPSAwOwpAQCAtMjAwNyw3ICsxOTUzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0
ZXIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0QXJn
dW1lbnQgPSBhZGRUb0dyYXBoKG51bVNldEFyZ3VtZW50cyA+PSBtYW5kYXRvcnlNaW5pbXVtID8g
U2V0QXJndW1lbnRNYXliZSA6IFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKHZhcmlhYmxl
KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPm9wZXJhbmQoKSwgc2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBz
ZXRBcmd1bWVudCk7CiAgICAgICAgICAgICArK251bVNldEFyZ3VtZW50czsKICAgICAgICAgfQog
ICAgIH07CkBAIC0yMTA3LDcgKzIwNTMsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXph
dGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgLy8geWV0Lgog
ICAgIFZFUkJPU0VfTE9HKCJSZWdpc3RlciBvZmZzZXQ6ICIsIHJlZ2lzdGVyT2Zmc2V0KTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlUmVnKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKTsKLSAgICBjYWxsZWVSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoY2FsbGVlUmVnKS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBjYWxsZWVSZWcgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbGVlUmVnKTsKICAgICBWRVJCT1NFX0xPRygiQ2Fs
bGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxuIik7CiAgICAgc2V0RGlyZWN0KGNh
bGxlZVJlZywgY2FsbFRhcmdldE5vZGUsIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CiAKQEAgLTUx
NTYsNyArNTEwMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgICAg
ICAgICBBU1NFUlQoYnl0ZWNvZGUubV9yZWdleHAuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAg
IEZyb3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHApKTsK
KyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUu
bV9yZWdleHAub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhmcm96ZW5SZWdFeHApLCBqc0NvbnN0YW50KGpzTnVt
YmVyKDApKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAg
ICAgIH0KQEAgLTYyMzIsNyArNjE3OCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJl
bnRCbG9jay0+c2l6ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50Qmxv
Y2stPnNpemUoKSA9PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4
ZWN1dGlvbikpOwogCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9idWZmZXI7Cisg
ICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZl
cikgewogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRj
aCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5vdGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRo
ZSBtYWluIHRocmVhZC4KQEAgLTYyNDksNyArNjE5NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7CiAKLSAgICAgICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKHByb2ZpbGUubV9v
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSkKQEAgLTYyNzcsMTQgKzYyMjMsMTQgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
IG1fZXhpdE9LID0gZmFsc2U7IAogCiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fs
cyA9IDA7Ci0gICAgICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQuaXNMb2NhbCgpKTsKICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGFkZFRvR3JhcGgoRXh0cmFjdENhdGNoTG9jYWwsIE9wSW5mbyhu
dW1iZXJPZkxvY2FscyksIE9wSW5mbyhsb2NhbFByZWRpY3Rpb25zW251bWJlck9mTG9jYWxzXSkp
OwogICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZMb2NhbHM7Ci0gICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhwcm9maWxlLm1fb3BlcmFuZCksIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICBsb2NhbHNUb1NldC51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3Bh
aXIob3BlcmFuZCwgdmFsdWUpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG51
bWJlck9mTG9jYWxzKQpAQCAtNjQxMiw3ICs2MzU4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9w
X2puZXFfcHRyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9p
bnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKSk7CisgICAgICAgICAgICBG
cm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyLm9mZnNldCgpKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1
bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIGlmIChieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CkBAIC02ODgwLDggKzY4MjYsOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4o
KTsKICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQo
KSAmJiBieXRlY29kZS5tX2luaXRpYWxWYWx1ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAg
RnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUp
KTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6
ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNv
ZGUubV9pbml0aWFsVmFsdWUpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJs
ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChieXRlY29kZS5tX3N5bWJvbFRhYmxlLm9mZnNldCgpKSk7CisgICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZh
bHVlLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5t
X3Njb3BlKTsKICAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRvR3Jh
cGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgT3BJbmZvKGluaXRpYWxW
YWx1ZSksIHNjb3BlKTsKICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVu
dmlyb25tZW50KTsKQEAgLTY5MTEsNyArNjg1Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAvLyBsb2FkcyBmcm9tIHRoZSBz
Y29wZSByZWdpc3RlciBsYXRlciwgYXMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBERkcgZnJvbSB0
cmFja2luZyB0aGUKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlLWxldmVsIGxpdmVuZXNzIG9mIHRo
ZSBzY29wZSByZWdpc3Rlci4KICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBn
ZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgICAgICBO
b2RlKiByZXN1bHQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxs
ZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCptX3ZtKSkKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CkBAIC03MzM2
LDEwICs3MjgyLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkoCiAgICAgICAgIC8vIFRoZSBvd25lciBpcyB0aGUgbWFjaGluZSBjb2RlIGJsb2Nr
LCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgYmFycmllciBvbiB0aGF0IHdoZW4gdGhlCiAgICAgICAg
IC8vIHBsYW4gZmluaXNoZXMuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNv
ZGVCbG9jay5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCkpOwotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+c2V0VG1wT2Zmc2V0KChtX2NhbGxlci0+
bV9pbmxpbmVDYWxsRnJhbWUgPyBtX2NhbGxlci0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNl
dCA6IDApICsgbV9jYWxsZXItPm1fY29kZUJsb2NrLT5udW1UbXBzKCkpOwogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+c2V0U3RhY2tPZmZzZXQoaW5saW5lQ2FsbEZyYW1lU3RhcnQub2Zmc2V0
KCkgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwog
ICAgICAgICBpZiAoY2FsbGVlKSB7CiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlUmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChjYWxsZWUpOwogICAgICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKQEAgLTc3MDEsNyAr
NzY0NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03NzIxLDI0ICs3NjY1LDI0IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRMaXZlbmVzc1ByZXNl
cnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE5vZGVUeXBl
IG9wLCBPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNlcnRM
aXZlbmVzc1ByZXNlcnZpbmdPcCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUsIE5vZGVUeXBlIG9wLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQo
b3BlcmFuZCkgPSB2YXJpYWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudCA9IHVubWFwT3BlcmFuZChpbmxpbmVD
YWxsRnJhbWUsIG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50ID0gb3BlcmFuZCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnQuaXNBcmd1bWVudCgpICYmICFhcmd1bWVudC5pc0hlYWRlcigpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24qPiYgYXJndW1lbnRz
ID0gbV9pbmxpbmVDYWxsRnJhbWVUb0FyZ3VtZW50UG9zaXRpb25zLmdldChpbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudC50b0Fy
Z3VtZW50KCldLT5hZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2Rl
SW5kZXgsIFNwZWNOb25lLCBvcCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERpcmVjdCA9
IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydExpdmVuZXNzUHJlc2VydmluZ09wKGlubGluZUNh
bGxGcmFtZSwgRmx1c2gsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGFkZFBoYW50b21Mb2NhbERpcmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRMaXZlbmVzc1ByZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUs
IFBoYW50b21Mb2NhbCwgb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICAgICAgIGZsdXNoRm9yVGVybWluYWxJbXBsKG9yaWdpbi5zZW1hbnRpYywgYWRkRmx1
c2hEaXJlY3QsIGFkZFBoYW50b21Mb2NhbERpcmVjdCk7CkBAIC03ODAzLDcgKzc3NDcsNiBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIH0KIAotICAgIG1fZ3JhcGgubV90
bXBzID0gbV9udW1UbXBzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsK
ICAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCAzZGM3NTY4ZjFlZTJj
Njk3NzIyNjhjYzk2ZGVhNGEwNWM2MjM2MjUzLi44ZTliYjRhY2JlNTUwMmRkYTdiMzc0Nzg0YjVh
ODVmZmRlNzAzYmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
QVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cApAQCAtMTcwLDIyICsxNzAsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgbXVzdEhh
bmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChp
KTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11c3RIYW5k
bGVWYWx1ZXNbaV07CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUg
aW4gYnl0ZWNvZGU6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICBOb3QgbGl2ZSBpbiBieXRlY29kZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQp
LCAiXG4iKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV92ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBOb3QgbGl2ZTogIiwgb3BlcmFu
ZCwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE5vdCBsaXZlOiAiLCBW
aXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICJcbiIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFdpZGVuaW5nICIsIG9wZXJhbmQsICIgd2l0
aCAiLCB2YWx1ZS52YWx1ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBX
aWRlbmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIgd2l0aCAiLCB2YWx1ZS52YWx1
ZSgpLCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFy
Z2V0ID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAg
Y2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZhbHVlLnZhbHVl
KCksIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCmluZGV4IDg3M2Zh
MDQzMDU4YTBmZDE4ZTRkZjEyMzNkZTZmOTY3NmEyYmRlMDAuLmQ5OGZkNGFmNDQwZjA3Y2JjMTZi
NjdkNjAyYmE2NDI2YWYwZjIzODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcApAQCAtNTQsOSArNTQsOCBAQCBwdWJsaWM6
CiAgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAgY2Fub25pY2Fs
aXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgc3BlY2lhbENhc2VBcmd1bWVudHMoKTsKLSAg
ICAgICAgcHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7Ci0gICAgICAgIHByb3Bh
Z2F0ZVBoaXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50PigpOwotICAgICAgICBwcm9wYWdhdGVQaGlz
PE9wZXJhbmRLaW5kOjpUbXA+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5k
PigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3BlcmFuZD4oKTsKICAgICAgICAg
Y29tcHV0ZUlzRmx1c2hlZCgpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBU
aHJlYWRlZENQUzsKQEAgLTIxMiwyMCArMjExLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYW5v
bmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBz
d2l0Y2ggKHZhcmlhYmxlLT5vcGVyYW5kKCkua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgT3BlcmFu
ZEtpbmQ6OkFyZ3VtZW50OiB7Ci0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxP
cGVyYW5kS2luZDo6QXJndW1lbnQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIE9wZXJhbmRLaW5kOjpMb2NhbDogewotICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9j
YWxGb3I8T3BlcmFuZEtpbmQ6OkxvY2FsPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJh
bmQoKS50b0xvY2FsKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7Ci0gICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2Nh
bEZvcjxPcGVyYW5kS2luZDo6VG1wPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQo
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIGNh
bm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZh
cmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPE5v
ZGVUeXBlIG5vZGVUeXBlLCBPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KQEAgLTI0MCw3ICsyMjks
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAg
ICBBU1NFUlQob3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG90
aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI4MiwyNSArMjcwLDE1IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCiAg
ICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHN3aXRjaCAodmFyaWFibGUtPm9wZXJhbmQoKS5raW5k
KCkpIHsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6IHsKLSAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIE9wZXJhbmRLaW5k
OjpBcmd1bWVudD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Bcmd1bWVu
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgT3BlcmFu
ZEtpbmQ6OkxvY2FsOiB7Ci0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yPG5vZGVUeXBlLCBPcGVyYW5kS2luZDo6TG9jYWw+KG5vZGUsIHZhcmlhYmxlLCB2YXJp
YWJsZS0+b3BlcmFuZCgpLnRvTG9jYWwoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpUbXA6IHsKLSAgICAgICAgICAgIGNhbm9uaWNh
bGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIE9wZXJhbmRLaW5kOjpUbXA+KG5v
ZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+b3BlcmFuZCgpLnZhbHVlKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAodmFyaWFibGUtPmxvY2Fs
KCkuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFi
bGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2Fu
b25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjYW5vbmljYWxpemVTZXQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIG1f
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSwgbm9kZSk7
CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2Fs
KCksIG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxv
Y2soKQpAQCAtMzA5LDkgKzI4Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIEFTU0VSVChtX2Jsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIAotICAgICAgICBj
bGVhclZhcmlhYmxlczxPcGVyYW5kS2luZDo6QXJndW1lbnQ+KCk7Ci0gICAgICAgIGNsZWFyVmFy
aWFibGVzPE9wZXJhbmRLaW5kOjpMb2NhbD4oKTsKLSAgICAgICAgY2xlYXJWYXJpYWJsZXM8T3Bl
cmFuZEtpbmQ6OlRtcD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8QXJndW1lbnRPcGVyYW5k
PigpOworICAgICAgICBjbGVhclZhcmlhYmxlczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1v
dmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKICAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUg
aGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJl
ZgpAQCAtNDExLDcgKzM4OCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQg
b3BlcmFuZEtpbmQ+CiAgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKICAgICB7Ci0gICAgICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IHBoaVN0YWNrRm9yPG9wZXJhbmRL
aW5kPigpOworICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBv
cGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xv
Y2FsUGhpU3RhY2s7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0
byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9jayA9IDA7CkBAIC00ODks
MTIgKzQ2Niw5IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrRm9yKCkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2lu
ZDo6QXJndW1lbnQ6IHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Ci0gICAgICAgIGNhc2UgT3Bl
cmFuZEtpbmQ6OkxvY2FsOiByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOwotICAgICAgICBjYXNlIE9w
ZXJhbmRLaW5kOjpUbXA6IHJldHVybiBtX3RtcFBoaVN0YWNrOwotICAgICAgICB9Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9
PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNr
OworICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXB1dGVJc0ZsdXNoZWQoKQpAQCAtNTQ3LDcgKzUyMSw2IEBAIHByaXZhdGU6CiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3Vt
ZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0
YWNrOwotICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fdG1wUGhpU3RhY2s7CiAgICAg
VmVjdG9yPE5vZGUqLCAxMjg+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggNGNjZTE3NDg4M2UyMDQx
MGQ2MjIzYTZmNDE3MmVkZGU2OThhYWViZi4uMjM4MWM2YjhmOGY0YmE3NjM0YmI2NmIxMjM5NDcx
YjVhNjE2NjdjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAK
QEAgLTE0Nyw3ICsxNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTdGFjazogewogICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KTsKLSAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9h
ZCgpLnZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkg
PT0gaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAucmVtb3ZlKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CiAgICAgICAgICAgICBp
ZiAoY2xvYmJlckNvbnNlcnZhdGl2ZWx5KQogICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tTdGFj
a01hcC5jbGVhcigpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTcxLDcgKzE3Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHBhaXIua2V5LmhlYXAoKS5r
aW5kKCkgPT0gU3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
YWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgpLnZhbHVl
KCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBT
dGFja01hcC5maW5kKHBhaXIua2V5LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5k
KCkgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gcGFpci5rZXkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjI1LDcgKzIyNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJz
dHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOwogICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJh
Y2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOwotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVl
KCksIG51bGxwdHIpOworICAgICAgICAgICAgQVNTRVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCku
dmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHtsb2NhdGlvbiwgbm9kZSwgMH0pOwogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjQ3LDcgKzI0OSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgU2lkZVN0YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgY2FzZSBTdGFjazogewotICAgICAgICAgICAgYXV0byBpdGVyYXRv
ciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCku
dmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9u
LmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvciAh
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpCiAgICAgICAgICAgICAgICAgJiYgaXRlcmF0
b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZS0+dmFsdWU7CkBAIC0yOTUsNyArMjk4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBh
IGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBtX2ZhbGxiYWNrU3Rh
Y2tNYXAuCiAgICAgLy8KICAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMgZ29lcyBpbnRvIG1f
ZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5pcXVlIHZhbHVlLgot
ICAgIEhhc2hNYXA8aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVm
YXVsdEhhc2g8aW50NjRfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PGludDY0X3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIEhhc2hNYXA8aW50MzJfdCwg
c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhh
c2gsIFdURjo6U2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwOwogICAgIE1hcCBtX2ZhbGxiYWNrU3RhY2tNYXA7CiAKICAgICBNYXAgbV9o
ZWFwTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CmluZGV4IGFhMjIyYjg3YzI3Y2M0YWVhZGNmYWVlMmNhYWExMzdhY2M0MmZlZWEuLjI0NzdhZjBl
NTdmNGRlZmFmMjliMmY4MGMwNDc1ZjUzZWUxMTVmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTMwNyw4ICszMDcsNiBAQCBDYXBhYmls
aXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9s
aW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgog
ICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6Ci0g
ICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6
Ci0gICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBoYW5k
bGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgog
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggZDZhNDYzNWFjNmRmMzJkZWUwZTdiM2MzZTZk
MzZiM2Y0Y2I3MTFmMS4uNWYwMmFjMGRmOTNhMmFmOGQ3NDNlMWYyZTc4ZDFhZGM5MzkyZTdhOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTExMSw5ICsx
MTEsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIC8vIHNjYW4gd291bGQgcmVhZC4g
VGhhdCdzIHdoYXQgdGhpcyBkb2VzLgogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7IGlubGlu
ZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxs
ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpKTsKKyAgICAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzcGVjaWZpY2FsbHkgYWNjb3VudCB3aGljaCBub2Rl
cyBjYW4gcmVhZCBmcm9tIHRoZSBzY29wZQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBj
b25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgS2lsbFN0YWNrOgotICAg
ICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7
CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+dW5saW5rZWRMb2NhbCgp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKQEAgLTQ5
Nyw3ICs0OTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAK
ICAgICBjYXNlIEZsdXNoOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+
b3BlcmFuZCgpKSk7CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2Nh
bCgpKSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApAQCAt
NzY1LDEyICs3NjUsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7Ci0gICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgTGF6eU5vZGUobm9kZSkpOworICAg
ICAgICByZWFkKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBTZXRDYWxsZWU6Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywg
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgd3JpdGUo
QWJzdHJhY3RIZWFwKFN0YWNrLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOiB7
CkBAIC03ODEsNyArNzgxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICB9CiAKICAg
ICBjYXNlIFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOgotICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgICAgICByZXR1
cm47CiAKICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CkBAIC03ODksNDIgKzc4OSwzNiBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0TG9jYWw6Ci0gICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5vcGVyYW5k
KCkpKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0
YWNrLCBub2RlLT5vcGVyYW5kKCkpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKSwgTGF6eU5v
ZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6
Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7Ci0g
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9k
ZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2NhbCgp
KSksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAo
U3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKKyAgICAgICAgQWJzdHJh
Y3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CiAgICAg
ICAgIHJlYWQoaGVhcCk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIGhlYXAp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUHV0U3RhY2s6IHsKLSAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAoU3RhY2ssIG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5vcGVyYW5kKTsKKyAgICAgICAgQWJzdHJhY3RIZWFwIGhlYXAo
U3RhY2ssIG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCk7CiAgICAgICAgIHdyaXRlKGhl
YXApOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IAotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewotICAgICAgICByZWFkKFdvcmxkKTsKLSAgICAg
ICAgd3JpdGUoSGVhcCk7Ci0gICAgICAgIHJldHVybjsgIAotICAgIH0KLQogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6IHsKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwog
ICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsK
LSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3VudCkpOworICAgICAg
ICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50Lm9mZnNldCgpKSk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KQotICAgICAgICAgICAgd3Jp
dGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkp
KTsKKyAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQub2Zm
c2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgICAgIApAQCAtODMzLDkgKzgyNyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgIHJlYWQoU3RhY2spOwogICAgICAgICAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChT
dGFjaywgZGF0YS0+Y291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBk
YXRhLT5jb3VudC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5s
aW1pdDsgaS0tOykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+
c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCmluZGV4IDE1NzQ2YzA1NGYwZGYz
M2JhMzJkMzlmYWZlMDJkYmJkN2QyOTE0Y2IuLjk1ODY2YTdmOTFhNzE0NDJkYTFjNGY3ZTQ3MDBk
MDljZDJhYzMwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
YmluZWRMaXZlbmVzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21i
aW5lZExpdmVuZXNzLmNwcApAQCAtMzksNyArMzksNyBAQCBzdGF0aWMgdm9pZCBhZGRCeXRlY29k
ZUxpdmVuZXNzKEdyYXBoJiBncmFwaCwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAs
CiB7CiAgICAgZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIG5vZGUtPm9yaWdp
bi5mb3JFeGl0LAotICAgICAgICBbJl0gKE9wZXJhbmQgcmVnKSB7CisgICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgewogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3NlU3Rh
cnRpbmdXaXRoTG9jYWwoCiAgICAgICAgICAgICAgICAgcmVnLAogICAgICAgICAgICAgICAgIFsm
XSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAppbmRleCA3YzgwNzUwYWVkZGQ3YzAwMzhiOWE1OWIzOTUzZDYwZmNiMGFh
NGZhLi43OTg3Yjg3MGZkNTA5ZjkzMDAwN2UzNTZhYzA1NWVhNjZiZmU3YWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAg
Q2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9yaWdp
bnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4
KTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CiB9CiAK
IENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCkBAIC02NCwxMyArNjQsMTMgQEAgQ2FsbFNpdGVJbmRleCBDb21tb25E
YXRhOjphZGRVbmlxdWVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICBj
b2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CiAgICAgdW5zaWduZWQgaW5kZXggPSBjb2Rl
T3JpZ2lucy5zaXplKCkgLSAxOwogICAgIEFTU0VSVChjb2RlT3JpZ2luc1tpbmRleF0gPT0gY29k
ZU9yaWdpbik7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoaW5kZXgpOworICAgIHJldHVybiBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoaW5kZXgpKTsKIH0KIAogQ2FsbFNpdGVJbmRleCBD
b21tb25EYXRhOjpsYXN0Q2FsbFNpdGUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKGNv
ZGVPcmlnaW5zLnNpemUoKSk7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbnMu
c2l6ZSgpIC0gMSk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjb2Rl
T3JpZ2lucy5zaXplKCkgLSAxKSk7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvbW1v
bkRhdGE6OmFkZERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4KENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAKaW5kZXggMTg1MzY2ZDA0ZTI2M2VlOWVkOTY0Yzg2YTdlZDk1MjRhOTViYjlkOS4u
M2IxNjVmMmM0MDIxMDAzZDA0MWNjYTZkOWFlMGNmZTdhZTgyNzEzZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAg
LTM4Myw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1l
bnRCeVZhbCBpbiBzdWNoIHN0YXRpY2FsbHktb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlczsgd2UganVz
dCBsb3NlIENGQSB1bmxlc3MKICAgICAgICAgICAgICAgICAvLyBHQ1NFIHJlbW92ZXMgdGhlIGFj
Y2VzcyBlbnRpcmVseS4KICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zdGF0
ZS5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgg
KyAxKSwgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKSkgeworICAgICAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkg
JiYgaW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSkgewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRTdGFjayhkYXRhKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IGY1
YmQxZjU5MTJmY2M5YzhhZDkyYTNlYjBhMzhjMTYwZjNlY2EyNTYuLjhiNTM5NDNlMjRhMzM2YmRl
MTA5Y2E2YzM0MDI5NGY2MmFhYTdmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKQEAgLTI5NSw3ICsyOTUsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBj
YXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeDoKICAgICBjYXNl
IE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAppbmRleCA0NWZiYzQzOWQ1M2JhOTUwZTdhOGQ4OWFjOWVjMTk3
MmJhMDkzOWI0Li4xN2IzNzA3NThjMDUzODcwM2I3ZDc5ZWU2MjI3MmQ0Nzk5OThiNTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCkBAIC05MCw2ICs5MCw3IEBAIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQu
IFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlv
biBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1
Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKKyAgICB2bS5nZXRDVElTdHViKG9zckV4aXRUaHVua0dl
bmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDc2NDkyNDI0
MjNiYjE0N2Y4ZjExYjIxYzMyZDFiOTViOGI1NjY0NjAuLjhhYjg4Y2M3ZjE2NmNjNDdiN2I0ODg3
MGRjYWM3MjVmNjJjOGZhMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcApAQCAtMjQzMiwxNCArMjQzMiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAg
IGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotCi0KICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVy
ZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBv
cGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKQEAgLTI0NzIsNyAr
MjQ2NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6
CiAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOgorICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICBjYXNlIEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOZXdP
YmplY3Q6CiAgICAgICAgIGNhc2UgTmV3UHJvbWlzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRm9yQWxsS2lsbHMuaAppbmRleCBiZjQzNTBjNGNkMTdlM2Q1MDA2NjM4ZjU1YWFjMzVh
NTY1Mjk5NGExLi4wYmYxYzNmYmJhYzRhNjYyOThjZjkyOWZlZjUwYTYwZGNmZGUyOGI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCkBAIC0zMiwxMCArMzIs
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLW5hbWVzcGFjZSBGb3JB
bGxLaWxsc0ludGVybmFsIHsKLWNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKLX0KLQog
Ly8gVXRpbGl0aWVzIGZvciBmaW5kaW5nIHRoZSBsYXN0IHBvaW50cyB3aGVyZSBhIG5vZGUgaXMg
bGl2ZSBpbiBERkcgU1NBLiBUaGlzIGFjY291bnRzIGZvciBsaXZlbmVzcyBkdWUKIC8vIHRvIE9T
UiBleGl0LiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgZW51bWVyYXRpbmcgb3ZlciBhbGwgb2Yg
dGhlIHByb2dyYW0gcG9pbnRzIHdoZXJlIGEgbm9kZSBpcyBsaXZlLAogLy8gYnkgZXhwbG9yaW5n
IGFsbCBibG9ja3Mgd2hlcmUgdGhlIG5vZGUgaXMgbGl2ZSBhdCB0YWlsIGFuZCB0aGVuIGV4cGxv
cmluZyBhbGwgcHJvZ3JhbSBwb2ludHMgd2hlcmUgdGhlCkBAIC01NywxMyArNTMsMTMgQEAgdm9p
ZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGVCZWZvcmUsIE5v
ZGUqIG5vZGVBZnRlciwgY29uc3QKICAgICAKICAgICBDb2RlT3JpZ2luIGFmdGVyID0gbm9kZUFm
dGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKLSAgICBPcGVyYW5kIGFscmVhZHlOb3RlZDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYWxyZWFkeU5vdGVkOwogICAgIC8vIElmIHdlIE1vdkhpbnQgc29t
ZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxsIHRoZSBvbGQgdmFs
dWUuCiAgICAgaWYgKG5vZGVBZnRlci0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gbm9kZUFmdGVyLT51bmxpbmtlZE9wZXJhbmQoKTsKLSAgICAgICAgaWYg
KGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgYWZ0ZXIpKSB7Ci0gICAgICAgICAgICBm
dW5jdG9yKG9wZXJhbmQpOwotICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gb3BlcmFuZDsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRlci0+dW5saW5rZWRMb2NhbCgpOwor
ICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFmdGVyKSkgeworICAgICAg
ICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgYWxyZWFkeU5vdGVkID0gcmVnOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtNzQsNDggKzcwLDI5IEBAIHZvaWQgZm9yQWxsS2lsbGVk
T3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIs
IGNvbnN0CiAgICAgLy8gb3RoZXIgbG9vcCwgYmVsb3cuCiAgICAgYXV0byogYmVmb3JlSW5saW5l
Q2FsbEZyYW1lID0gYmVmb3JlLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGlmIChiZWZvcmVJbmxp
bmVDYWxsRnJhbWUgPT0gYWZ0ZXIuaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgaW50IHN0
YWNrT2Zmc2V0ID0gYmVmb3JlSW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlSW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCA6IDA7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoYmVmb3JlSW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgaWYg
KGFmdGVyLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChiZWZvcmUuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSAhPSBhZnRlci5ieXRlY29kZUlu
ZGV4KCkuY2hlY2twb2ludCgpKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmVm
b3JlLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSA9PSBhZnRlci5ieXRlY29kZUluZGV4KCkub2Zm
c2V0KCksICJXaGVuIHRoZSBERkcgZG9lcyBjb2RlIG1vdGlvbiBpdCBzaG91bGQgY2hhbmdlIHRo
ZSBmb3JFeGl0IG9yaWdpbiB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgYnl0ZWNvZGVzLiIpOwot
Ci0gICAgICAgICAgICBhdXRvIGxpdmVCZWZvcmUgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQo
KmNvZGVCbG9jaywgYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICBhdXRvIGxp
dmVBZnRlciA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBhZnRlci5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICAgICAgbGl2ZUFmdGVyLmludmVydCgpOwotICAgICAgICAg
ICAgbGl2ZUJlZm9yZS5maWx0ZXIobGl2ZUFmdGVyKTsKLQotICAgICAgICAgICAgbGl2ZUJlZm9y
ZS5mb3JFYWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgewotICAgICAgICAgICAgICAgIGZ1bmN0
b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkp
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgLy8gTm8gbG9jYWxzIGNhbiBkaWUgYXQg
YSBjaGVja3BvaW50LgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7CiAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxs
TGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxj
dWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBs
aXZlQWZ0ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCgp
LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQ6OkJlZm9yZVVzZSk7CiAgICAgICAgIAogICAgICAg
ICAobGl2ZUJlZm9yZSAmIH5saXZlQWZ0ZXIpLmZvckVhY2hTZXRCaXQoCiAgICAgICAgICAgICBb
Jl0gKHNpemVfdCByZWxhdGl2ZUxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgZnVuY3RvcihyZW1h
cE9wZXJhbmQoYmVmb3JlSW5saW5lQ2FsbEZyYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChy
ZWxhdGl2ZUxvY2FsKSkpOworICAgICAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwocmVsYXRpdmVMb2NhbCkgKyBzdGFja09mZnNldCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFmdGVy
LmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCksICJUcmFuc2l0aW9uaW5nIGFjcm9zcyBhIGNo
ZWNrcG9pbnQgYnV0IGJlZm9yZSBhbmQgYWZ0ZXIgZG9uJ3Qgc2hhcmUgYW4gaW5saW5lQ2FsbEZy
YW1lLiIpOwotCisgICAgCiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBjb25zZXJ2YXRp
dmUgd2F5OiBpdCBpcyBraWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBkZWFkIGFmdGVy
LgotICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNBbmRUbXBzTGl2ZUluQnl0
ZWNvZGUoYWZ0ZXIpOwotICAgIHVuc2lnbmVkIG51bUxvY2FscyA9IGdyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsKLSAgICBncmFwaC5mb3JBbGxMb2NhbHNB
bmRUbXBzTGl2ZUluQnl0ZWNvZGUoCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdyYXBoLmxv
Y2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5C
eXRlY29kZSgKICAgICAgICAgYmVmb3JlLAotICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
ewotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPT0gYWxyZWFkeU5vdGVkKQorICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5v
dGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IG9wZXJhbmQuaXNUbXAoKSA/IG51bUxvY2FscyArIG9wZXJhbmQudmFsdWUoKSA6IG9wZXJh
bmQudG9Mb2NhbCgpOwotICAgICAgICAgICAgaWYgKGxpdmVBZnRlci5nZXQob2Zmc2V0KSkKKyAg
ICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xvY2FsKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGZ1bmN0b3Iob3BlcmFuZCk7CisgICAgICAgICAgICBm
dW5jdG9yKHJlZyk7CiAgICAgICAgIH0pOwogfQogICAgIApAQCAtMTI4LDggKzEwNSw3IEBAIHZv
aWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHNlZW5JbkNsb3N1cmVGbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNhbGxlZEZ1bmN0b3JGbGFnID0gMjsKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
ZmxhZ3M7Ci0KLSAgICBBU1NFUlQobm9kZUluZGV4KTsKKyAgICAKICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgCiAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKApAQCAt
MTQ0LDEzICsxMjAsMTUgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAg
ICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgIE5vZGUqIGJlZm9yZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXggLSAxKTsKKyAgICBOb2RlKiBiZWZvcmUgPSBudWxscHRyOworICAgIGlmIChub2Rl
SW5kZXgpCisgICAgICAgIGJlZm9yZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAg
IGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLAotICAg
ICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExv
Y2FsKAotICAgICAgICAgICAgICAgIG9wZXJhbmQsCisgICAgICAgICAgICAgICAgcmVnLAogICAg
ICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmbGFncy5nZXQobm9kZSkgJiBzZWVuSW5DbG9zdXJlRmxhZzsKICAgICAgICAg
ICAgICAgICB9LApAQCAtMTgxLDcgKzE1OSw2IEBAIHZvaWQgZm9yQWxsS2lsbHNJbkJsb2NrKAog
ICAgIC8vIFN0YXJ0IGF0IHRoZSBzZWNvbmQgbm9kZSwgYmVjYXVzZSB0aGUgZnVuY3RvciBpcyBl
eHBlY3RlZCB0byBvbmx5IGluc3BlY3Qgbm9kZXMgZnJvbSB0aGUgc3RhcnQgb2YKICAgICAvLyB0
aGUgYmxvY2sgdXAgdG8gbm9kZUluZGV4IChleGNsdXNpdmUpLCBzbyBpZiBub2RlSW5kZXggaXMg
emVybyB0aGVuIHRoZSBmdW5jdG9yIGhhcyBub3RoaW5nIHRvIGRvLgogICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMTsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoRm9yQWxsS2lsbHNJbnRlcm5hbDo6dmVyYm9zZSwgImxv
Y2FsIGF2YWlsYWJpbGl0eSBhdCBpbmRleDogIiwgbm9kZUluZGV4LCAiICIsIGxvY2FsQXZhaWxh
YmlsaXR5Lm1fYXZhaWxhYmlsaXR5KTsKICAgICAgICAgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJ
bmRleCgKICAgICAgICAgICAgIGdyYXBoLCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0
eSwgYmxvY2ssIG5vZGVJbmRleCwKICAgICAgICAgICAgIFsmXSAoTm9kZSogbm9kZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA0MTg2OTZhOTMxMzY5NTg1ZmQw
MjNkMzllNzljYzE0MGViYjgzMzdkLi43ZDBmYTM2NGQ1YmJlM2MyMjAzMzkzODhjZmE1NWFkNjhj
YTlmZDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzA4LDgg
KzMwOCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciog
cHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgaWYgKG5vZGUtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5k
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLCAiKCIsIFZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIpIik7CisgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpLCAi
KCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZhcmlhYmxlQWNjZXNzRGF0YSksICIp
Iik7CiAgICAgICAgICAgICBvcGVyYW5kID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWNoaW5lTG9j
YWwoKTsKICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJtYWNoaW5lOiIsIG9wZXJhbmQpOwpAQCAtMzE3LDEzICszMTcs
MTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0
YWNrQWNjZXNzRGF0YSgpKSB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPm9wZXJh
bmQpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmxvY2FsKTsKICAgICAgICAgaWYg
KGRhdGEtPm1hY2hpbmVMb2NhbC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJtYWNoaW5lOiIsIGRhdGEtPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgIG91dC5wcmludChj
b21tYSwgZGF0YS0+Zm9ybWF0KTsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmhhc1VubGlua2VkT3Bl
cmFuZCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KTsKKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOwogICAgIGlmIChub2RlLT5oYXNWZWN0b3JM
ZW5ndGhIaW50KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgInZlY3Rvckxlbmd0aEhpbnQg
PSAiLCBub2RlLT52ZWN0b3JMZW5ndGhIaW50KCkpOwogICAgIGlmIChub2RlLT5oYXNMYXp5SlNW
YWx1ZSgpKQpAQCAtNTE1LDEwICs1MTUsOSBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Jsb2NrKgogICAg
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgICAgIEFTU0VSVChwaGlOb2Rl
LT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRl
KCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgo
KSwgIjwiLCBwaGlOb2RlLT5vcGVyYW5kKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4t
PigiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIs
IHBoaU5vZGUtPmxvY2FsKCksICIsIiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKICAg
ICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKQEAgLTg4NSw3ICs4ODQsNyBAQCB2b2lkIEdyYXBoOjpz
dWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJ
bkJsb2NrLCBWYQogICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcGVyYW5kKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCkpCiAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTQsOSArODkzLDkgQEAgdm9pZCBHcmFwaDo6c3Vi
c3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5C
bG9jaywgVmEKICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2
YXJpYWJsZUFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBzdWJzdGl0dXRlKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUsIG5ld0dldExvY2FsKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQodmFyaWFibGVBY2Nlc3NEYXRhLT5vcGVyYW5kKCkpOworICAgICAgICAgICAgTm9kZSogb2xk
VGFpbE5vZGUgPSBibG9jay52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkpOwogICAgICAgICAgICAgaWYgKG9sZFRhaWxOb2RlID09IG5vZGUpCi0gICAg
ICAgICAgICAgICAgYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NE
YXRhLT5vcGVyYW5kKCkpID0gbmV3R2V0TG9jYWw7CisgICAgICAgICAgICAgICAgYmxvY2sudmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9IG5ld0dl
dExvY2FsOwogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0xMTM0LDU2ICsxMTMzLDM2IEBAIEJ5dGVjb2RlS2lsbHMm
IEdyYXBoOjpraWxsc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICBy
ZXR1cm4ga2lsbHNGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKSk7CiB9
CiAKLWJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCitib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZygiQ2hlY2tpbmcgb2Ygb3BlcmFuZCBpcyBsaXZlOiAiLCBvcGVyYW5kLCAiXG4i
KTsKICAgICBib29sIGlzQ2FsbGVyT3JpZ2luID0gZmFsc2U7Ci0KICAgICBDb2RlT3JpZ2luKiBj
b2RlT3JpZ2luUHRyID0gJmNvZGVPcmlnaW47Ci0gICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgLy8gV2UgbmVlZCB0byBoYW5k
bGUgdGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQotICAg
IC8vIHRoZSByZXR1cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCi0gICAgZm9y
ICg7IGNvZGVPcmlnaW5QdHI7IGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUgPyAmaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgOiBudWxscHRyKSB7Ci0gICAgICAgIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0bXBPZmZzZXQgPSBpbmxp
bmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDA7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3BlcmFuZC52
YWx1ZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQudmFsdWUoKSA+PSAwKTsKLSAg
ICAgICAgICAgIC8vIFRoaXMgdG1wIHNob3VsZCBoYXZlIGJlbG9uZ2VkIHRvIHNvbWVvbmUgd2Ug
aW5saW5lZC4KLSAgICAgICAgICAgIGlmIChvcGVyYW5kSW5kZXggPiB0bXBPZmZzZXQgKyBtYXhO
dW1DaGVja3BvaW50VG1wcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5l
Q2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5udW1UbXBzKCkgfHwgb3Bl
cmFuZEluZGV4IDwgdG1wT2Zmc2V0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBhdXRvIGJpdE1hcCA9IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2Nr
LCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGJp
dE1hcC5nZXQob3BlcmFuZEluZGV4IC0gdG1wT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpIC0gY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAgICAgICBvcGVyYW5kLm9mZnNl
dCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coInJlZyA9ICIsIHJlZywgIlxuIik7CiAK
LSAgICAgICAgaWYgKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkgPCBjb2RlT3Jp
Z2luUHRyLT5zdGFja09mZnNldCgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMp
IHsKKyAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5l
Q2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9yaWdpblB0
ci0+c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSB7CiAg
ICAgICAgICAgICBpZiAocmVnLmlzQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlZy5vZmZzZXQoKSA8IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KTsKIAogCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2Fs
bAotICAgICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSB7
CisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJMb29rcyBsaWtlIGEgY2FsbGVlLlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQotICAg
ICAgICAgICAgICAgICAgICAmJiByZWcgPT0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9v
a3MgbGlrZSB0aGUgYXJndW1lbnQgY291bnQuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTk3LDM5ICsxMTc2LDQyIEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUoT3BlcmFuZCBvcGVyYW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZSk7CiAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0g
bGl2ZW5lc3NGb3IoY29kZUJsb2NrKTsKICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHJl
dHVybiBmdWxsTGl2ZW5lc3MudmlydHVhbFJlZ2lzdGVySXNMaXZlKHJlZywgYnl0ZWNvZGVJbmRl
eCwgYXBwcm9wcmlhdGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlz
Q2FsbGVyT3JpZ2luKSk7CisgICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLm9wZXJhbmRJ
c0xpdmUocmVnLm9mZnNldCgpLCBieXRlY29kZUluZGV4LCBhcHByb3ByaWF0ZUxpdmVuZXNzQ2Fs
Y3VsYXRpb25Qb2ludCgqY29kZU9yaWdpblB0ciwgaXNDYWxsZXJPcmlnaW4pKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIHN0YWNrLCByZXR1cm5p
bmcgdHJ1ZS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFu
dCBpZiBpdCB3YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5saW5p
bmcuCi0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgcmVnLmlzQXJndW1lbnQoKQorICAg
ICAgICBpZiAocmVnLmlzQXJndW1lbnQoKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6
ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZp
eHVwLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiQXJndW1lbnQgaXMgbGl2ZS5cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0YWlsIGNhbGxlcnMg
YmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIGV4aXQgdG8gdGhlCisgICAgICAgIC8vIHRoZSByZXR1
cm4gYnl0ZWNvZGUgZm9sbG93aW5nIHRoZSB0YWlsIGNhbGwuCisgICAgICAgIGNvZGVPcmlnaW5Q
dHIgPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIGlzQ2FsbGVyT3Jp
Z2luID0gdHJ1ZTsKICAgICB9Ci0KLSAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmFuIG91
dCBvZiBzdGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKLSAgICByZXR1cm4gdHJ1ZTsgICAgCisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotQml0VmVjdG9yIEdy
YXBoOjpsb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQor
Qml0VmVjdG9yIEdyYXBoOjpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiB7CiAgICAgQml0VmVjdG9yIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBi
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7Ci0gICAgcmVzdWx0LmVu
c3VyZVNpemUobnVtTG9jYWxzICsgYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRt
cHMoKSk7Ci0gICAgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAorICAgIHJlc3Vs
dC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGNvZGVPcmlnaW4sCi0g
ICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZhbHVlKCkgOiBvcGVy
YW5kLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChvZmZzZXQpOworICAg
ICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcu
aXNMb2NhbCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsK
ICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2NTMsOCArMTYzNSw4IEBA
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBvcGVyYW5k
Tm9kZTsgbm9kZTspIHsKICAgICAgICAgaWYgKG5vZGUtPmFjY2Vzc2VzU3RhY2soKnRoaXMpKSB7
Ci0gICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5vcGVyYW5kKCkuaXNBcmd1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9kZS0+b3BlcmFuZCgp
LnRvQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gbm9k
ZS0+bG9jYWwoKS50b0FyZ3VtZW50KCk7CiAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRO
b2RlID0gbV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50RGVm
aW5pdGVseSBub2RlcyBhdCBvdGhlciBlbnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKQEAg
LTE2NzQsNyArMTY1Niw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoTm9kZSogY3VycmVuCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJh
bmQoCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLAogICAgICAgICAgICAg
ICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+
b3BlcmFuZCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKSwgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4
IGQ0MzNkODVkOTc4OWE1YmU5YjVjZTY4MzhkOWIxZTIzNDFhN2E0Y2EuLmVjNGYyMmJlZTU1ZjFi
MjkwNDJiZmIyM2UxMjY0ZmEyMDNjYWRkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKQEAgLTg0MCwxMyArODQwLDEzIEBAIHB1YmxpYzoKICAgICAvLyBRdWlja2x5IHF1ZXJ5
IGlmIGEgc2luZ2xlIGxvY2FsIGlzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBUaGlzIGlzIGZh
c3RlciB0aGFuIGNhbGxpbmcKICAgICAvLyBmb3JBbGxMaXZlSW5CeXRlY29kZSgpIGlmIHlvdSB3
aWxsIG9ubHkgcXVlcnkgb25lIGxvY2FsLiBCdXQsIGlmIHlvdSB3YW50IHRvIGtub3cgYWxsIG9m
IHRoZQogICAgIC8vIGxvY2FscyBsaXZlLCB0aGVuIGNhbGxpbmcgdGhpcyBmb3IgZWFjaCBsb2Nh
bCBpcyBtdWNoIHNsb3dlciB0aGFuIGZvckFsbExpdmVJbkJ5dGVjb2RlKCkuCi0gICAgYm9vbCBp
c0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQsIENvZGVPcmlnaW4pOworICAgIGJvb2wgaXNMaXZlSW5C
eXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIsIENvZGVPcmlnaW4pOwogICAgIAotICAgIC8vIFF1aWNr
bHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBhbmQgdG1wcyBsaXZlIGF0IHRo
ZSBnaXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CisgICAgLy8gUXVpY2tseSBnZXQg
YWxsIG9mIHRoZSBub24tYXJndW1lbnQgbG9jYWxzIGxpdmUgYXQgdGhlIGdpdmVuIHBvaW50LiBU
aGlzIGRvZXNuJ3QgZ2l2ZSB5b3UKICAgICAvLyBhbnkgYXJndW1lbnRzIGJlY2F1c2UgdGhvc2Ug
YXJlIGFsbCBwcmVzdW1lZCBsaXZlLiBZb3UgY2FuIGNhbGwgZm9yQWxsTGl2ZUluQnl0ZWNvZGUo
KSB0bwogICAgIC8vIGFsc28gZ2V0IHRoZSBhcmd1bWVudHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIg
dGhhbiBjYWxsaW5nIGlzTGl2ZUluQnl0ZWNvZGUoKSBmb3IgZWFjaCBsb2NhbC4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJ
bkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB2b2lkIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIC8vIFN1cHBvcnQgZm9y
IG5vdCByZWR1bmRhbnRseSByZXBvcnRpbmcgYXJndW1lbnRzLiBOZWNlc3NhcnkgYmVjYXVzZSBp
biBjYXNlIG9mIGEgdmFyYXJncwogICAgICAgICAvLyBjYWxsLCBvbmx5IHRoZSBjYWxsZWUga25v
d3MgdGhhdCBhcmd1bWVudHMgYXJlIGxpdmUgd2hpbGUgaW4gdGhlIGNhc2Ugb2YgYSBub24tdmFy
YXJncwpAQCAtODgxLDE0ICs4ODEsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKGxp
dmVuZXNzQXRCeXRlY29kZVtyZWxhdGl2ZUxvY2FsXSkKICAgICAgICAgICAgICAgICAgICAgZnVu
Y3RvcihyZWcpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0
ci0+Ynl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2stPm51bVRtcHMoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBsaXZlVG1wcyA9
IHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludCgqY29kZUJsb2NrLCBjb2RlT3JpZ2luUHRyLT5ieXRl
Y29kZUluZGV4KCkpOwotICAgICAgICAgICAgICAgIGxpdmVUbXBzLmZvckVhY2hTZXRCaXQoWyZd
IChzaXplX3QgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVtYXBPcGVyYW5k
KGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZDo6dG1wKHRtcCkpKTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MTIsOSArOTA0LDkgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBh
bGwgb2YgdGhlIGxvY2FscyBhbmQgdG1wcyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkg
dXNlZnVsIGlmCisgICAgLy8gR2V0IGEgQml0VmVjdG9yIG9mIGFsbCBvZiB0aGUgbm9uLWFyZ3Vt
ZW50IGxvY2FscyBsaXZlIHJpZ2h0IG5vdy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlmCiAgICAg
Ly8geW91IHdhbnQgdG8gY29tcGFyZSB0d28gc2V0cyBvZiBsaXZlIGxvY2FscyBmcm9tIHR3byBk
aWZmZXJlbnQgQ29kZU9yaWdpbnMuCi0gICAgQml0VmVjdG9yIGxvY2Fsc0FuZFRtcHNMaXZlSW5C
eXRlY29kZShDb2RlT3JpZ2luKTsKKyAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNvZGUo
Q29kZU9yaWdpbik7CiAKICAgICBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgYXBwcm9wcmlhdGVM
aXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoQ29kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNDYWxsZXJP
cmlnaW4pCiAgICAgewpAQCAtOTQ2LDEyICs5MzgsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2U7CiAgICAgfQogICAgIAotICAg
IC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG9wZXJhbmRzIGxpdmUgYXQgdGhlIGdpdmVuIENvZGVP
cmlnaW4uIFRoaXMgaXMgYSBzbWFsbAotICAgIC8vIGV4dGVuc2lvbiB0byBmb3JBbGxMb2NhbHNP
clRtcHNMaXZlSW5CeXRlY29kZSgpLCBzaW5jZSBhbGwgYXJndW1lbnRzIGFyZSBhbHdheXMgcHJl
c3VtZWQgbGl2ZS4KKyAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBhcmd1bWVudHMgYW5kIGxv
Y2FscyBsaXZlIGF0IHRoZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKKyAgICAv
LyBleHRlbnNpb24gdG8gZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFy
Z3VtZW50cyBhcmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KICAgICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2luLCBmdW5jdG9yKTsKKyAgICAgICAgZm9y
QWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7CiAgICAgICAgIAog
ICAgICAgICAvLyBSZXBvcnQgYWxsIGFyZ3VtZW50cyBhcyBiZWluZyBsaXZlLgogICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykKQEAgLTExMjIsNyArMTExNCw2IEBAIHB1YmxpYzoK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3YXJkc0NGRzsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3Jz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKLSAgICB1bnNpZ25lZCBtX3RtcHM7CiAgICAgdW5zaWdu
ZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVu
c2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCmluZGV4IDIwMmQyMjUwNTNmYTlkZmJl
NWMyM2M2NGJjZjhiZTM4NGUzZTc2NTQuLjk5YWVmZmNkYzA1YTExYzQ1YjA1NzQxMjUwZjRkMmFl
YjRlMjI4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3Ry
YWN0U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fYWJz
dHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKLSAgICAsIG1fdmFyaWFi
bGVzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAs
IG1fYmxvY2sobnVsbHB0cikKKyAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAppbmRleCAxODY1ZTZhMWVmZmMzZGFhZWZlNTg0Y2E4NjJjNDliYzM2ODU4NTAw
Li5iZjVlYWQxOGVjMTY0N2VlMTY3NjY4ODM1NzQwMWZhN2ZlYzcxMjk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCkBAIC0x
NjcsMTEgKzE2NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYXN0Rm9yd2FyZChtX3Zh
cmlhYmxlc1tpbmRleF0pOwogICAgIH0KIAotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoT3Bl
cmFuZCBvcGVyYW5kKQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpCiAg
ICAgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBdChtX3ZhcmlhYmxlcy5vcGVyYW5kSW5kZXgo
b3BlcmFuZCkpOwogICAgIH0KICAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKSB7IHJldHVybiB0aGlzLT5vcGVyYW5kKG9wZXJhbmQub2Zmc2V0
KCkpOyB9CisgICAgCiAgICAgQWJzdHJhY3RWYWx1ZSYgbG9jYWwoc2l6ZV90IGluZGV4KQogICAg
IHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMubG9jYWxJbmRleChpbmRl
eCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRl
eCBjNTU0NGJiYzVjOTgwNTY2OWY5ZTdmNmZmODBiOWFjMTk2ZjRkZjA5Li43MGVlZjg4NmI0YThm
ZTI5NDNmNDZiYWU3NmVjNmI2MzcwZTQ1MmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcApAQCAtODUsNiArODUsOCBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMoKQogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rID0gdm0oKS5nZXRDVElTdHVi
KG9zckV4aXRUaHVua0dlbmVyYXRvcik7CisgICAgYXV0byBvc3JFeGl0VGh1bmtMYWJlbCA9IENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPihvc3JFeGl0VGh1bmsuY29kZSgpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytp
KSB7CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxh
dGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZvLm1fZmFp
bHVyZUp1bXBzOwpAQCAtOTUsNyArOTcsMTMgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4
aXRzKCkKIAogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJnZtKCkub3NyRXhpdEluZGV4KTsKLSAgICAgICAgaW5m
by5tX3BhdGNoYWJsZUp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CisgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VQcm9iZU9TUkV4aXQoKSkgeworICAgICAgICAgICAgSnVtcCB0YXJnZXQgPSBqdW1wKCk7
CisgICAgICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
dGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBpbmZvLm1fcGF0Y2hhYmxlSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsK
ICAgICB9CiB9CiAKQEAgLTU4NywxMiArNTk1LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9j
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5vcGVyYW5kKCkuaXNUbXAoKSk7
Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSAh
PSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewogICAg
ICAgICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5sb2NhbCgpLm9mZnNldCgpLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkub2Zmc2V0KCkpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAppbmRleCA0ODgwODc0YzI4NWFiN2Q0NDdlYjg5M2E2ZThiNGJi
ZjAxMDczMWQ0Li5kMWJkN2RhOWRmZmRjMzZjMjYwZTYzNWNiNjAwYTliMmYxOTE5ZDM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCkBAIC0xMzUsNyArMTM1
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBlbWl0U3RvcmVDYWxsU2l0ZUluZGV4KENhbGxTaXRl
SW5kZXggY2FsbFNpdGUpCiAgICAgewotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZS5iaXRzKCkpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwg
dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQg
ZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9u
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmNwcAppbmRleCA1YzM1ZTUzNWU1ZGQ2NjFkMzFkZDUxMzBkN2Mx
MmJhY2JhZGIyYzBmLi40MmY2OGFkYTMyNDc4YTExNzFjZWFkMGY5M2UwOGFjMjVjYTYzMTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxl
UHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWRG
bHVzaExvY2F0aW9uKEJhc2ljQmxvY2sqIHN0YXJ0aW5nQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBP
cGVyYW5kIG9wZXJhbmQpCisgICAgYm9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2Nr
KiBzdGFydGluZ0Jsb2NrLCB1bnNpZ25lZCBpbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CiAgICAgewogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IG1lYW50IHRvIGJlIGZhc3QuIFdl
IGp1c3QgdXNlIGl0IGZvciBhc3NlcnRpb25zLiBJZiB3ZSBnb3QgbGl2ZW5lc3Mgd3JvbmcsCiAg
ICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIGZhbHNlIGZvciBhIEZsdXNoIHRo
YXQgd2UgaW5zZXJ0LgpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gZmx1
c2hJc0RlZmluaXRlbHlJbnZhbGlkID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5kZXgpIHsKICAgICAgICAgICAgIGJvb2wgYWxsR29vZCA9IGZhbHNlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gaW5kZXg7IGktLTsgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT5hdChpKS0+YWNjZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPm9wZXJh
bmQoKSA9PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChpKS0+YWNj
ZXNzZXNTdGFjayhtX2dyYXBoKSAmJiBibG9jay0+YXQoaSktPmxvY2FsKCkgPT0gb3BlcmFuZCkg
ewogICAgICAgICAgICAgICAgICAgICBhbGxHb29kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDcgKzExNSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGhhbmRsZUJsb2NrRm9yVHJ5Q2F0Y2goQmFzaWNCbG9jayogYmxvY2ssIEluc2Vy
dGlvblNldCYgaW5zZXJ0aW9uU2V0KQogICAgIHsKICAgICAgICAgSGFuZGxlckluZm8qIGN1cnJl
bnRFeGNlcHRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2
ZUF0Q2F0Y2hIZWFkKDAsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZUbXBz
KCkpOworICAgICAgICBGYXN0Qml0VmVjdG9yIGxpdmVBdENhdGNoSGVhZDsKKyAgICAgICAgbGl2
ZUF0Q2F0Y2hIZWFkLnJlc2l6ZShtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKSk7CiAKICAgICAgICAgSGFuZGxlckluZm8qIGNhY2hlZEhhbmRsZXJSZXN1
bHQ7CiAgICAgICAgIENvZGVPcmlnaW4gY2FjaGVkQ29kZU9yaWdpbjsKQEAgLTEzMiwxMSArMTMz
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2Rl
QmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewot
ICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuZmlsbChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgIGxpdmVBdENhdGNoSGVhZC5jbGVhckFsbCgpOwogCiAgICAgICAgICAgICAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggY2F0Y2hCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCho
YW5kbGVyLT50YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luKGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5s
aW5lQ2FsbEZyYW1lKSwgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2lu
KGNhdGNoQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lKSwgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkW29w
ZXJhbmQudG9Mb2NhbCgpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlZEhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyOwpAQCAtMTU1LDEy
ICsxNTYsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhhbmRsZXJSZXN1
bHQ7CiAgICAgICAgIH07CiAKLSAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4g
Y3VycmVudEJsb2NrQWNjZXNzRGF0YShPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwsIG51bGxwdHIpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBjdXJy
ZW50QmxvY2tBY2Nlc3NEYXRhKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpLCBudWxscHRyKTsK
IAogICAgICAgICBhdXRvIGZsdXNoRXZlcnl0aGluZyA9IFsmXSAoTm9kZU9yaWdpbiBvcmlnaW4s
IHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50RXhj
ZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICBhdXRvIGZsdXNoID0gWyZdIChPcGVyYW5kIG9w
ZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkgfHwgbGl2
ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGF1dG8gZmx1c2gg
PSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2FsKCldKSB8
fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgewogCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChp
c1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgaW5kZXgsIG9wZXJhbmQpKTsKIApAQCAtMTc3LDgg
KzE3OCw2IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IDA7
IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyBsb2NhbCsr
KQogICAgICAgICAgICAgICAgIGZsdXNoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGxvY2FsKSk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcCA9IDA7IHRtcCA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZUbXBzKCk7ICsrdG1wKQotICAgICAgICAgICAgICAgIGZsdXNoKE9w
ZXJhbmQ6OnRtcCh0bXApKTsKICAgICAgICAgICAgIGZsdXNoKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSk7CiAgICAgICAgIH07CiAKQEAgLTE5Myw4ICsx
OTIsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChjdXJyZW50
RXhjZXB0aW9uSGFuZGxlciAmJiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50RGVmaW5pdGVseSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50TWF5
YmUpKSB7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgp
OwotICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSB8fCBsaXZlQXRDYXRj
aEhlYWQub3BlcmFuZChvcGVyYW5kKSkgeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICBpZiAoKG9wZXJhbmQu
aXNMb2NhbCgpICYmIGxpdmVBdENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0pIHx8IG9wZXJh
bmQuaXNBcmd1bWVudCgpKSB7CisKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRG
bHVzaExvY2F0aW9uKGJsb2NrLCBub2RlSW5kZXgsIG9wZXJhbmQpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGN1cnJlbnRC
bG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KG1fZ3JhcGgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3Vy
cmVudEV4Y2VwdGlvbkhhbmRsZXIpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShPcGVyYW5kIG9wZXJhbmQpCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NF
UlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAppbmRleCBmZmY5NmJm
Y2Y2MjllYjRkMDUyZTdiMTQyN2IyYjY3YjA1NGMxYTAzLi43M2EzZDc1Yjc2MGI1MmI5Njc2Mzcx
MzNkNmEwZmVmYjAwZWJlZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9zdGF0ZS5maWxsKEVwb2NoKCkpOwogICAgICAgICBtX2dyYXBoLmZvckFsbExp
dmVJbkJ5dGVjb2RlKAogICAgICAgICAgICAgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JF
eGl0LAotICAgICAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgeworICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKHJl
ZykgPSBjdXJyZW50RXBvY2g7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC05OSw3ICs5
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IE1vdkhp
bnQpIHsKLSAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVwb2NoID0gbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKKyAgICAgICAgICAgICAgICBFcG9jaCBsb2NhbEVw
b2NoID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0ICIsIG5vZGUsICI6IGN1cnJlbnQgPSAiLCBj
dXJyZW50RXBvY2gsICIsIGxvY2FsID0gIiwgbG9jYWxFcG9jaCwgIlxuIik7CiAgICAgICAgICAg
ICAgICAgaWYgKCFsb2NhbEVwb2NoIHx8IGxvY2FsRXBvY2ggPT0gY3VycmVudEVwb2NoKSB7CkBA
IC0xMDcsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51
bmxpbmtlZE9wZXJhbmQoKSkgPSBFcG9jaCgpOworICAgICAgICAgICAgICAgIG1fc3RhdGUub3Bl
cmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9l
c05vdEV4aXQpCkBAIC0xMTYsMTUgKzExNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKAogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4IC0gMSksIG5vZGUs
Ci0gICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBzbG9wcHkgLSBpdCBtaWdodCBjbGFpbSB0
byBraWxsIGEgbG9jYWwgZXZlbiBpZgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBz
dGlsbCBsaXZlIGFmdGVyLiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhbV9zdGF0ZS5vcGVyYW5kKHJlZykpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHTW92SGludFJlbW92YWxQaGFzZUludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBLaWxsZWQg
b3BlcmFuZCBhdCAiLCBub2RlLCAiOiAiLCBvcGVyYW5kLCAiXG4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChvcGVyYW5kKSA9IGN1cnJlbnRFcG9jaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwg
bm9kZSwgIjogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
b3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRl
eCBiODAxNTVlOTM1NjI5ZGYyY2RlMzlhYjY0NjM0NDAwNDcwYzc4YzhkLi4zOTE1OTM3MjI5ZjI4
YTdhYTJlNjU1ZjUyNTFmOTZmNDA0ZTMzYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RydWN0IFN0YWNrQWNjZXNzRGF0YSB7CiAgICAg
ewogICAgIH0KICAgICAKLSAgICBTdGFja0FjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kLCBGbHVz
aEZvcm1hdCBmb3JtYXQpCi0gICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQorICAgIFN0YWNrQWNj
ZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAg
ICAgOiBsb2NhbChsb2NhbCkKICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQogICAgIHsKICAgICB9
CiAgICAgCi0gICAgT3BlcmFuZCBvcGVyYW5kOworICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZUxvY2FsOwogICAgIEZsdXNoRm9ybWF0IGZvcm1h
dDsKICAgICAKQEAgLTkwMiw3ICs5MDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAob3Ao
KSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKLSAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgog
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgog
ICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgpAQCAtOTI0LDExICs5MjMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kczoKLSAgICAgICAgY2Fz
ZSBWYXJhcmdzTGVuZ3RoOgotICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAgICAgICBj
YXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkMigpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOwogICAgICAg
ICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgpAQCAtOTc2LDkgKzk3Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFZhcmlhYmxlQWNjZXNzRGF0YSo+KCktPmZpbmQo
KTsKICAgICB9CiAgICAgCi0gICAgT3BlcmFuZCBvcGVyYW5kKCkKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5v
cGVyYW5kKCk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbCgpCkBAIC05ODYs
NyArOTgzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCkt
Pm1hY2hpbmVMb2NhbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1VubGlua2VkT3BlcmFu
ZCgpCisgICAgYm9vbCBoYXNVbmxpbmtlZExvY2FsKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
b3AoKSkgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgpAQCAtOTk5LDEwICs5
OTYsMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIE9wZXJhbmQgdW5s
aW5rZWRPcGVyYW5kKCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOwotICAgICAgICByZXR1cm4g
T3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkpOworICAgICAgICBBU1NF
UlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlciht
X29wSW5mby5hczxpbnQzMl90PigpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdGFja0Fj
Y2Vzc0RhdGEoKQpAQCAtMTM1Myw3ICsxMzUwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IExvYWRW
YXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9PSBWYXJhcmdzTGVuZ3Ro
OworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBvcCgpID09IEZvcndhcmRW
YXJhcmdzOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEqIGxvYWRWYXJhcmdzRGF0
YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggYzM4NjhjMDg1
ZjNiMWQ5ZjUyNTlhOTc3ZWFjOGY2OTQyZjRjMDMzZS4uODE5MTNlZDA1YzhjYTI2OTM0MGFmNTE4
N2ZhYTY3YzQxNzVmMjg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aApAQCAtNzQsNyArNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKLSAgICAvKiBUaGVzZSBhcmUgdXNlZCBpbiBTU0Eg
Zm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0yMDMsNyArMjAyLDYgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5VmFsV2l0aFRo
aXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFy
Z3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggZDBhOTQwNmYwMjAyMzM1ZmIyMDk0ZmFj
OWI0MTcxNzI4NTI5NTcwZC4uNzliYzc5NjgzMTEzMGMwMzdkNTQ3MGMwZTc5ZDViMGQ5OTU2MjYz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSw5ICszNSwxMSBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFt
ZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRlcm5hbCB7CitzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQogCiBjbGFzcyBPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJp
bGl0eSBhbmFseXNpcyIpCkBAIC03Myw4ICs3NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRh
dGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29k
ZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5mb3JFeGl0LAotICAgICAg
ICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2cob3BlcmFuZCwgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhyZWcsICIgIik7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwogICAgICAgICB9OwpAQCAt
ODksNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+aW5kZXgpOwogICAgICAg
ICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMDQsNyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkg
eworICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJBZnRlciBj
aGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZHVt
cEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE4LDcgKzEyMCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0g
YmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN1
Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxpdmVuZXNzKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgwKS0+b3JpZ2luLmZvckV4
aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3Nl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFmdGVyIHBydW5pbmcgQmxv
Y2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEF2
YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEJ5dGVj
b2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwNiwyOCArMjA4LDI4IEBAIHZvaWQg
TG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3RhY2s6IHsKICAgICAgICAg
U3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
IG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkuc2V0Rmx1c2go
ZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgbV9h
dmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkuc2V0
Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldEZsdXNoKEZsdXNo
ZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQo
ZGF0YS0+b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+Zmx1c2hlZEF0KCkpOwor
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKSA9IEF2
YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2Rl
VW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChu
b2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI0MCwxOCArMjQyLDE1IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxp
dHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLQotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewotICAgICAgICBicmVh
azsKLSAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIEZv
cndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxv
YWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KGRhdGEtPmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEludDMyLCBkYXRh
LT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFu
ZChkYXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVz
aGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2Nh
bHMub3BlcmFuZChkYXRhLT5zdGFydCArIGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5lU3RhcnQgKyBpKSk7Cisg
ICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9CisgICAgICAgICAgICAgICAgQXZhaWxhYmls
aXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm1hY2hp
bmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMjczLDIwICsyNzIsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0
b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93IHRvIHJlYWQgZWFjaCBh
cmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAgICAgQXZhaWxhYmlsaXR5
IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAg
ICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFyZ3VtZW50Q291bnQpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1
cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVlID0gbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwgY2FsbGVlKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKAotICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldChpKSkpOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFwLnNldChQcm9tb3RlZEhl
YXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVudCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKaW5kZXggZWU1ZjdmM2Q2
OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOS4uNDQ5NzMwODM5Yzk0NDUwNzI1NzFhNWIw
YzdjOTRiODQzZTg5MGRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjbwogICAgIAog
ICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSByaWdodCBjb2RlIGJsb2Nr
LgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBpdm90IC0gKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKKyAgICAqYml0d2lzZV9jYXN0PENv
ZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spID0gY29kZUJs
b2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFM
b2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIsIHNjcmF0Y2gpOwpAQCAt
MzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYKIAogICAgIGF1dG8gaW5z
dHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY2FsbEZyYW1l
LT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvbi0+aXM8T3BDYXRjaD4o
KSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGluZUNvZGVCbG9jaykubV9i
dWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2RlQmxvY2spLm1fYnVmZmVy
OwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihk
ZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0
ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocHJvZmlsZS5t
X29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKaW5kZXggNjA5Njg2NjNi
NjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNS4uZGM3NmJjYmFlZDQxZWVlMDYzZGZkYmVh
ODQ1MDY2NTUzZDBjYjRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKQEAgLTEwMiwxMCArMTAy
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgbG9jYWxz
W2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
dmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIG9yaWdpbiwKLSAg
ICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIo
KSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmlnaW4sIE9wSW5mbyh2YXJp
YWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFyaWFibGUtPmxvY2FsKCku
b2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IDIzOWRm
NTJhODI5MmEyYjM1Y2U2Zjc3MjU2OGZlN2NjOWM2ZDNhODMuLjZmZWRiMTliMWFlYmY0NTM0YTA0
ZGJmMDA4ZWE4ZDQ5MjlkMjg5MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKLSNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDgsNiArNDcsODk1IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorLy8gUHJvYmUgYmFzZWQgT1NSIEV4
aXQuCisKK3VzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwordXNpbmcgQ29udGV4dCA9
IFByb2JlOjpDb250ZXh0OwordXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJhbWU7CisKK3N0YXRpYyB2
b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQmLCBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOworc3RhdGljIHZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7CitzdGF0aWMgdm9pZCBwcmludE9TUkV4
aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYpOworCitz
dGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpTVmFsdWVTb3VyY2Ugc291
cmNlKQoreworICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQ7CisgICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5ncHI8dWludDhfdCo+KHNv
dXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291cmNlLmdwcigpKSk7Cisj
ZWxzZQorICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5wYXlsb2FkR1BSKCkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS50YWdHUFIoKSksIGNw
dS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOworI2VuZGlmCit9CisKKyNpZiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKworLy8gQmFzZWQgb24gQXNzZW1i
bHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCitzdGF0aWMgdm9pZCByZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit7CisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisKKyAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKKyAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKKworICAgIFVDUFVSZWdp
c3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BVUmVnaXN0ZXIqPigpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAg
aWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1ZXMgY29tZSBmcm9tIHRo
ZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2suCisgICAgICAgIC8vIEhl
bmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcGh5c2ljYWwgc3RhY2sg
bWVtb3J5IGluc3RlYWQgb2YKKyAgICAgICAgLy8gZ29pbmcgdGhyb3VnaCBjb250ZXh0LnN0YWNr
KCkuCisgICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6ZW9mKFVDUFVSZWdpc3Rl
cikpKTsKKyAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gcGh5c2ljYWxT
dGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3RlcildOworICAgIH0K
K30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
KCkuCitzdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byYgc3RhY2sgPSBjb250ZXh0LnN0YWNrKCk7
CisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisKKyAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICBS
ZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsKKyAgICB1bnNpZ25lZCBy
ZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAgaWYgKGRvbnRTYXZlUmVnaXN0
ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3Rh
Y2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdp
c3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKKyAgICB9Cit9CisKKy8vIEJhc2VkIG9uIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCkuCitzdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWTSYgdm0gPSAqY29u
dGV4dC5hcmc8Vk0qPigpOworCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgIFJl
Z2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7CisgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXpl
KCk7CisKKyAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZtRW50cnlSZWNvcmQodm0u
dG9wRW50cnlGcmFtZSk7CisgICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVTYXZlQnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lz
dGVyc0J1ZmZlcik7CisKKyAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUgc2F2ZXMuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykgeworICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkpOworICAgICAgICBpZiAo
ZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5Lm9mZnNldCgpIC8gc2l6
ZW9mKFVDUFVSZWdpc3Rlcik7CisgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQorICAg
ICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0gY2FsbGVlU2F2ZUJ1ZmZl
clt1aW50cHRyT2Zmc2V0XTsKKyAgICAgICAgZWxzZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9IGJpdHdpc2VfY2FzdDxk
b3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOworI2Vsc2UKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxl
ZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAg
ICAgfQorICAgIH0KK30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCitzdGF0aWMgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKKyAgICBhdXRvJiBzdGFj
ayA9IGNvbnRleHQuc3RhY2soKTsKKworICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0g
dm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKKyAgICB2b2lkKiBjYWxsZWVTYXZlQnVm
ZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXI7CisKKyAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVT
YXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJz
LmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVu
dHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZl
ciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCku
Z3ByKCkpKTsKKyAgICAgICAgZWxzZSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAg
IHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQoKSwgY29udGV4dC5mcHI8
VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBwb3J0IGNhbGxlZS1zYXZl
ZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQor
ICAgIH0KK30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZU9yQ29weUNh
bGxlZVNhdmVzRm9yKCkuCitzdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZz
ZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENhbGwpCit7CisgICAgRnJh
bWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOworICAgIEFTU0VSVChjb2Rl
QmxvY2spOworCisgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVnaXN0ZXJTZXQgZG9udFNh
dmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwg
UmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CisgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNh
bGxlZVNhdmVzLT5zaXplKCk7CisKKyAgICBSZWdpc3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVz
ID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7CisgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7CisgICAgICAgIGlm
IChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1ZTsKKworICAgICAgICBp
ZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVTYXZlcy5nZXQoZW50cnku
cmVnKCkpKQorICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0gZnJhbWUuZ2V0PHVpbnRw
dHJfdD4oZW50cnkub2Zmc2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzYXZlZFJl
Z2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIoKSk7CisKKyAgICAgICAg
ZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5v
ZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKKyAgICB9Cit9CisjZWxzZSAvLyBub3QgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisKK3N0YXRpYyB2b2lkIHJlc3RvcmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9CitzdGF0aWMgdm9pZCBzYXZl
Q2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQorc3RhdGljIHZvaWQgcmVz
dG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQm
KSB7IH0KK3N0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQorc3RhdGljIHZvaWQgc2F2ZU9yQ29weUNhbGxlZVNhdmVz
Rm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wpIHsgfQorCisj
ZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisKK3N0YXRpYyBK
U0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkKK3sKKyAgICBWTSYgdm0g
PSAqY29udGV4dC5hcmc8Vk0qPigpOworCisgICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgp
KTsKKworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNvZGVCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKKyAgICB1bnNpZ25lZCBjYXBhY2l0
eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpIC0gMSkpOworICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0
QXJndW1lbnRzOjpjcmVhdGUoCisgICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7CisKKyAgICBy
ZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKKworICAgIHZvaWQqIGZyYW1lQmFzZSA9IGNv
bnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRleHQu
c3RhY2soKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBy
ZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1lbnQoaSkpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpTQ2VsbCogY3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBh
cmd1bWVudENvdW50KQoreworICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7CisKKyAg
ICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOworCisgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJh
bWUoaW5saW5lQ2FsbEZyYW1lKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFyZ3Vt
ZW50Q291bnQgLSAxOworICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJndW1l
bnRzOjpjcmVhdGVFbXB0eSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1l
bnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKKworICAgIHZvaWQqIGZyYW1lQmFzZSA9
IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICBGcmFtZSBmcmFtZShmcmFtZUJhc2UsIGNvbnRl
eHQuc3RhY2soKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgZnJhbWUuYXJndW1lbnQo
aSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJn
dW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJsb2NrLCBERkc6OkpJVENv
ZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykK
K3sKKyAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7CisKKyAg
ICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50czsgLy8g
TWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAg
ICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworCisgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5v
dENyZWF0ZWQKKyAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKKyAgICAgICAgYXV0byBpdGVy
ID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKKyAgICAgICAgaWYgKGl0ZXIg
IT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgeworICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZhbHVlKSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0KKyAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLmF0KGlk
KS0+aW5saW5lQ2FsbEZyYW1lKCk7CisKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0OworICAgICAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGFja09m
ZnNldCA9IDA7CisKKyAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOworICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCisgICAgICAg
ICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9wZXJhbmQoc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOworCisgICAgICAgIGludDMyX3QgYXJn
dW1lbnRDb3VudDsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBmcmFtZS5vcGVy
YW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBh
cmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKworICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRX
ZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9IGNyZWF0ZURpcmVj
dEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUs
IGNhbGxlZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09iamVjdCkpOworCisgICAg
ICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsKKyAgICB9Cit9
CisKKy8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGluaXRpYWxpemF0aW9ucyB0
aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgorLy8gb2YgbW9zdCBsaWtlbHkgbmVlZGVkIChs
b3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkIChoaWdoZXIgZW51bSB2YWx1
ZSkuCisvLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBwcmV2aW91cyBs
b3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQorLy8gZXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsIHZhbHVlIGJlbG93KS4KK2VudW0gY2xhc3MgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIHsK
KyAgICBOb25lLAorICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCisgICAgVmFsdWVQcm9maWxlVXBk
YXRlLAorICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKKyAgICBPdGhlcgorfTsKKwordm9pZCBPU1JF
eGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQoreworICAgIFZNJiB2bSA9ICpj
b250ZXh0LmFyZzxWTSo+KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+
KCk7CisgICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpID09ICZ2bSk7CisgICAg
YXV0byYgY3B1ID0gY29udGV4dC5jcHU7CisKKyAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpIHsK
KyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4gU28sIHRoZXJl
J3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKKyAgICAgICAgLy8gY29kZSBydW5uaW5nIHRoYXQg
ZXhwZWN0cyBubyBHQy4KKyAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3REb2VzR0ModHJ1ZSk7Cisg
ICAgfQorCisgICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7CisgICAgICAgIGNhbGxGcmFt
ZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOworICAgICAgICBjb250ZXh0LmZwKCkgPSBjYWxsRnJh
bWU7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworCisgICAgLy8gSXQncyBzb3J0IG9mIHByZWZl
cmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3
b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKKworICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4
aXRJbmRleDsKKyAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCk7CisgICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhp
dEluZGV4XTsKKworICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tp
bmQgPT0gR2VuZXJpY1Vud2luZCk7CisgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUs
ICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOworCisg
ICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKKyAgICAgICAgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbDo6Tm9uZTsKKworICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhlY3V0ZSB0aGlz
IGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRlZAorICAgICAg
ICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUgcmVjb3JkIGZv
ciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIC8vIGV4aXQgcmFtcCBjb2RlLgorCisg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgICAgICBTcGVjdWxhdGlvblJlY292
ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7CisgICAgICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRl
eCAhPSBVSU5UX01BWCkgeworICAgICAgICAgICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3Bl
Y3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07CisgICAgICAgICAgICBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWws
IEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNvdmVyeSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkp
CisgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6T3RoZXIpOworCisg
ICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0cjsKKyAgICAgICAgaWYg
KCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKKyAgICAgICAgICAgIGlmIChleGl0Lm1fdmFsdWVQ
cm9maWxlKQorICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6
bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpW
YWx1ZVByb2ZpbGVVcGRhdGUpOworICAgICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENh
Y2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7
CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxp
bmVDb2RlQmxvY2spOworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29k
ZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAg
ICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIGV4dHJh
SW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwg
RXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNl
bGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9y
T3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7CisgICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVz
aG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRo
cmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJl
c2hvbGQgPiAwKTsKKyAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRq
dXN0ZWRUaHJlc2hvbGQpOworCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2Nv
ZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgYm9vbCBleGl0VG9MTEludCA9
IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxvY2tGb3JFeGl0LT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKKyAgICAgICAgdm9pZCoganVtcFRh
cmdldDsKKyAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7CisgICAgICAgICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwor
ICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2Rl
QmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9mZnNldCkucHRyKCk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgSklUQ29kZU1hcCYg
Y29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsKKyAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVNYXAuZmlu
ZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICAgICAgQVNTRVJU
KGNvZGVMb2NhdGlvbik7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wdXRlIHRoZSB2
YWx1ZSByZWNvdmVyaWVzLgorICAgICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5k
czsKKyAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1bmRlZmluZWRPcGVyYW5k
U3BhbnM7CisgICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1
Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcs
IGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRPcGVyYW5kU3BhbnMpOwor
ICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVy
Q291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7CisKKyAgICAgICAgZXhpdC5leGl0U3Rh
dGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVCbG9jaywgYmFzZWxpbmVD
b2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJhbmRTcGFucyksIHJlY292
ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwgYWRqdXN0ZWRUaHJlc2hv
bGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQpKTsKKworICAgICAgICBp
ZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7CisgICAgICAgICAgICBQcm9maWxlcjo6
RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworCisgICAgICAgICAgICBQcm9m
aWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCisg
ICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2Us
IGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAorICAgICAgICAgICAgICAgIGV4aXQubV9r
aW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7CisgICAgICAgICAg
ICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJFeGl0OworICAgICAgICAg
ICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXphdGlv
bkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JFeGl0KCkpKQorICAgICAg
ICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsKKworICAgICAgICBl
eGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gZXh0cmFJbml0aWFsaXph
dGlvbkxldmVsOworCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkg
fHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dG
KCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlc1xu
IiwKKyAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdp
bikuZGF0YSgpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQp
LCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSkuZGF0YSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRlID0gKmV4aXQuZXhpdFN0
YXRlLmdldCgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBleGl0U3RhdGUu
YmFzZWxpbmVDb2RlQmxvY2s7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKKyAgICBWZWN0b3I8VW5kZWZpbmVk
T3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0U3RhdGUudW5kZWZpbmVk
T3BlcmFuZFNwYW5zOworCisgICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4o
KSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7CisKKyAgICAvLyBUaGUgb25seSByZWFz
b24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1p
ZHdheSB3aGVuIGFwcHJvcHJpYXRlLgorICAgIGRvIHsKKyAgICAgICAgYXV0byBleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw+KGV4
aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOworCisgICAgICAgIGlmIChleHRyYUlu
aXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpOb25lKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBs
ZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQorCisgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gc3Bl
Y3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9maWxpbmcgYW5kIHZhbHVl
IHByb2ZpbGluZworICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVlIHRoYXQgaXQgcmVjb3Zl
cnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMgbGlrZWx5CisgICAgICAg
IC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRlY29yYXRlIGl0IGFzIFVO
TElLRUxZLgorICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IGV4aXRTdGF0
ZS5yZWNvdmVyeTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5KSkgeworICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIFNwZWN1bGF0
aXZlQWRkOgorICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUu
Z3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMyX3Q+KHJlY292
ZXJ5LT5zcmMoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7CisgICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZFNl
bGY6CisgICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpID4+IDEpIF4g
MHg4MDAwMDAwMFU7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7CisgICAgICAgICAgICAgICAgY3B1
LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJUYWc7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZElt
bWVkaWF0ZToKKyAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID0gKGNw
dS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3ZlcnktPmltbWVkaWF0ZSgp
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIo
cmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKKyAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVlOjpWYWx1ZUZhbHNlOwor
I2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6
OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBC
ZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2ZpbGVVcGRhdGUKKyAgICAg
ICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOworICAgICAgICBpZiAoISFleGl0Lm1fanNWYWx1ZVNv
dXJjZSkgeworICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFsdWVGb3IoY3B1LCBleGl0
Lm1fanNWYWx1ZVNvdXJjZSk7CisgICAgICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKKyAgICAgICAgICAgICAgICBw
cm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlm
IChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpW
YWx1ZVByb2ZpbGVVcGRhdGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCZWdp
biBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVVcGRhdGUKKyAgICAgICAg
aWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRlLmFycmF5UHJvZmlsZSkg
eworICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpOworICAgICAgICAg
ICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZElu
ZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4
KCkpLnB0cigpOworICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAhaW5zdHJ1Y3Rpb24tPmlz
PE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpLm1ldGFkYXRhKHBy
b2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aDsKKyAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2
bSk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBPdGhlcgorICAgICAg
ICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2UgYXJy
aXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCisgICAgICAgICAgICAvLyBTbywgd2UgbXVz
dCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgorICAgICAgICAgICAg
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRl
eHQpOworICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2bS5jYWxsRnJhbWVGb3JD
YXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhpdFN0YXRlLnByb2ZpbGVyRXhpdCkK
KyAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7CisKKyAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQoKSkpCisgICAgICAgICAg
ICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBleGl0KTsKKworICAgIH0g
d2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9uLgorCisgICAgRnJhbWUg
ZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7CisgICAgQVNTRVJUKCEoY29udGV4dC5m
cDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgQVNTRVJU
KGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpID09IEpTVmFsdWU6
Ok51bWJlclRhZyk7CisgICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bm90Q2Vs
bE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOworI2VuZGlmCisKKyAgICAv
LyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGlu
dG8gdGhlIHN0YWNrLgorICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVm
b3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKKyAgICAvLyBiZWNhdXNl
IHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSBy
ZWdpc3RlcnMuCisKKyAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzID0g
c3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJhbmRzID0gb3BlcmFuZHMu
c2l6ZSgpOworICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3BhbnMgPSB1bmRlZmluZWRP
cGVyYW5kU3BhbnMuc2l6ZSgpOworCisgICAgc2l6ZV90IG5leHRVbmRlZmluZWRTcGFuSW5kZXgg
PSAwOworICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVy
YW5kczsKKyAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQorICAgICAgICBuZXh0VW5k
ZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW25leHRVbmRlZmluZWRT
cGFuSW5kZXhdLmZpcnN0SW5kZXg7CisKKyAgICBKU1ZhbHVlIHVuZGVmaW5lZCA9IGpzVW5kZWZp
bmVkKCk7CisgICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbnVtVW5k
ZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgeworICAgICAgICBhdXRvJiBzcGFuID0g
dW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07CisgICAgICAgIGludCBmaXJzdE9mZnNl
dCA9IHNwYW4ubWluT2Zmc2V0OworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGZpcnN0T2Zmc2V0
ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKKworICAgICAgICBmb3IgKGludCBvZmZzZXQgPSBm
aXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQpCisgICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsgKytpbmRleCkgeworICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvcklu
ZGV4KGluZGV4KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXggPT0gbmV4dFVuZGVmaW5l
ZE9wZXJhbmRJbmRleCkpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IHVuZGVmaW5lZE9wZXJhbmRT
cGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVnaXN0ZXJzIC0gMTsKKyAg
ICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFu
ZFNwYW5zKQorICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVyYW5kSW5kZXggPSB1bmRl
ZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0uZmlyc3RJbmRleDsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4
ID0gbnVtYmVyT2ZPcGVyYW5kczsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworCisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVy
YW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7CisgICAgICAgICAgICBicmVh
azsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZ3By
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgY2FzZSBJblBhaXI6Cisg
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQz
Ml90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9h
ZEdQUigpKSkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICBjYXNlIFVu
Ym94ZWRDZWxsSW5HUFI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAg
IGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNhc2UgVW5ib3hlZEJv
b2xlYW5JbkdQUjoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29s
ZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7CisgICAgICAgICAgICBicmVhazsK
KyNlbmRpZgorCisgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjYWxs
RnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCkp
OworI2Vsc2UKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29sZWFu
KGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFs
dWUoKS5wYXlsb2FkKCkpKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LmdwcigpKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJhbWUtPnIo
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkSW50MzIoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQ1MkluR1BSOgorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+IEpTVmFsdWU6OmludDUy
U2hpZnRBbW91bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW50NTJE
aXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZEludDUyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9w
ZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5ncHIoKSkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZy
YW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZFN0cmlj
dEludDUyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgY2FzZSBV
bmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5hTihjcHUuZnByKHJlY292
ZXJ5LmZwcigpKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5k
LCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6
CisgICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVz
dG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNl
bGluZSBKSVQgdXNlcy4KKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgY29kZUJs
b2NrKTsKKyAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2sp
OworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjcHUuZ3ByKEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihKU1ZhbHVlOjpOdW1iZXJU
YWcpOworICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPSBzdGF0aWNf
Y2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOworI2VuZGlmCisK
KyAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKKyAgICAgICAgY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0KTsKKworICAgIC8vIE5v
dyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwgZG8gdGhlIGFyZ3VtZW50
cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCisgICAgLy8gcmVjb3ZlcmllcyBk
b24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQsIHdlIGRvbid0IHRyeSB0
byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKKyAgICAvLyByZWZlciB0byBjZXJ0YWluIHJhbmdlcyBv
ZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb25jZSB0aGUgc3Rh
Y2sgaXMgc2Vuc2libGUuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFsc28gcm91Z2hseSBhc3N1bWUg
dGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFsaXplZCBvdXRzaWRlIG9m
IGl0cworICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0IGZvciBub3cgdGhlIERG
RyB3b3VsZG4ndCBkbyB0aGF0LgorCisgICAgREZHOjplbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250
ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKKworICAgIC8vIEFkanVzdCB0
aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3
ZSBrbm93CisgICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28g
dG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCisgICAgLy8gY291bnRlciBvbmx5IGFmZmVj
dHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCisg
ICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBv
ZiBhbm90aGVyIGNhbGwgZnJhbWUncworICAgIC8vIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3Vy
ZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAgIC8vIChhKSBDb2RlIHRo
ZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVk
CisgICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFz
dGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRv
byBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgorICAgIC8vCisgICAgLy8gKGIpIElmIHRo
ZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBv
bGQKKyAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNo
b3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0
ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLworICAgIC8vIChjKSBDb2RlIHRo
ZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgor
ICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4g
T1NSIGVudHJ5IGlzCisgICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAgLy8K
KyAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90
IHJlc3VsdCBpbiB0aGUgY29kZQorICAgIC8vICAgICBydW5uaW5nIGluIGEgaG90IGxvb3AsIHJl
c3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCisgICAgLy8g
VG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCisg
ICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKKyAgICAvLyAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVy
eSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gZXZlcnkg
Y2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0
IGhhcHBlbnMKKyAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29w
cywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gYmVjb21lIG5vbi1uZWdhdGl2
ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKKyAgICAv
LyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hp
Y2ggZG9lcyBhIHByZXR0eQorICAgIC8vIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQgKGIp
LiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAgLy8gc2luY2UgZWFjaCBz
cGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCisgICAg
Ly8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVz
IGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nl
c3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCisgICAgLy8gdGhlcmUgaGF2
ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0
aGUKKyAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8K
KyAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisKKyAgICBpZiAo
VU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFuZENoZWNrSWZOZWVkVG9S
ZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6ZUFjdGlvbjo6UmVvcHRp
bWl6ZU5vdykpCisgICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhiYXNlbGluZUNvZGVC
bG9jaywgY29kZUJsb2NrLCAmZXhpdCk7CisKKyAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNv
bnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOworfQor
CitzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENv
ZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQoreworICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OworICAgIEZyYW1lIGZyYW1lKGNw
dS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBs
ZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0CisgICAg
Ly8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKKyAgICBBU1NFUlQoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
ICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
LCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7CisKKyAgICBjb25zdCBDb2RlT3JpZ2luKiBj
b2RlT3JpZ2luOworICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29k
ZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygp
KSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCpjb2Rl
T3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgIElubGluZUNhbGxG
cmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7CisgICAgICAgIENvZGVPcmlnaW4qIHRydWVD
YWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCZ0cnVl
Q2FsbGVyQ2FsbEtpbmQpOworICAgICAgICB2b2lkKiBjYWxsZXJGcmFtZSA9IGNwdS5mcCgpOwor
CisgICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOworCisgICAgICAgIGlmICghdHJ1
ZUNhbGxlcikgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkp
OworICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSk7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHZvaWQq
IG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBiaXR3aXNlX2Nhc3Q8UHRy
VGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOworI2Vu
ZGlmCisgICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJu
UENPZmZzZXQoKSwgcmV0dXJuUEMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBmcmFtZS5n
ZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNhbGxl
ciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAg
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJDYWxsS2luZCwgY2FsbGVy
SXNMTEludCk7CisKKyAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUo
KSkKKyAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHRy
dWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSgpLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgdm9pZCogbmV3RW50cnlT
UCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQo
KSArIHNpemVvZih2b2lkKik7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihq
dW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CisjZW5kaWYKKyAg
ICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNl
dCgpLCBqdW1wVGFyZ2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8
dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrKTsKKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbmxp
bmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gSWYgdGhp
cyBpbmxpbmVkIGZyYW1lIGlzIGEgdGFpbCBjYWxsIHRoYXQgd2lsbCByZXR1cm4gYmFjayB0byB0
aGUgb3JpZ2luYWwgY2FsbGVyLCB3ZSBuZWVkIHRvCisgICAgICAgIC8vIGNvcHkgdGhlIHByaW9y
IGNvbnRlbnRzIG9mIHRoZSB0YWcgcmVnaXN0ZXJzIGFscmVhZHkgc2F2ZWQgZm9yIHRoZSBvdXRl
ciBmcmFtZSB0byB0aGlzIGZyYW1lLgorICAgICAgICBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3Io
Y29udGV4dCwgYmFzZWxpbmVDb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KSwgIXRydWVDYWxsZXIpOworCisgICAgICAgIGlmIChjYWxsZXJJc0xM
SW50KSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygqdHJ1ZUNh
bGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgZnJhbWUuc2V0
PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29k
ZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKS5vZmZzZXQsIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgICAgICBmcmFtZS5zZXQ8Y29uc3Qgdm9pZCo+KGNhbGxlZVNhdmVTbG90KGlu
bGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BS
KS5vZmZzZXQsIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKCkpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOworICAgICAg
ICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSwg
Y2FsbGVyRnJhbWUpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRz
KCk7CisgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
VGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKKyNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8v
IHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pihp
bnN0cnVjdGlvbikpKS5iaXRzKCk7CisgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOworICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1Zh
bHVlOjpDZWxsVGFnKSk7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKQorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVu
ZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0
CisgICAgfQorCisgICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3Jp
Z2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCisgICAgaWYgKGNvZGVPcmlnaW4p
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOworI2Vsc2UK
KyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxp
bmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgo
KSkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uKSkpLmJpdHMo
KTsKKyNlbmRpZgorICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleHQm
IGNvbnRleHQsIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2ssIE9TUkV4aXQmIGV4aXQpCit7CisgICAgT1NSRXhpdFN0YXRlKiBleGl0U3Rh
dGUgPSBleGl0LmV4aXRTdGF0ZS5nZXQoKTsKKworICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsg
Ly8gVGhlIG9wdGltaXppbmcgY29tcGlsZXIgZXhwZWN0cyB0aGF0IHRoZSBPU1IgZXhpdCBtZWNo
YW5pc20gd2lsbCBleGVjdXRlIHRoaXMgZmVuY2UuCisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIo
YmFzZWxpbmVDb2RlQmxvY2spOworCisgICAgLy8gV2UgYmFycmllciBhbGwgaW5saW5lZCBmcmFt
ZXMgLS0gYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGlubGluZSBzdGFjayAtLQorICAgIC8vIGJl
Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGljaCBpbmxpbmVkIGZ1bmN0aW9uIG93bnMgdGhlIHZhbHVl
IHByb2ZpbGUgdGhhdAorICAgIC8vIHdlJ2xsIHVwZGF0ZSB3aGVuIHdlIGV4aXQuIEluIHRoZSBj
YXNlIG9mICJmKCkgeyBhKCk7IGIoKTsgfSIsIGlmIGJvdGgKKyAgICAvLyBhIGFuZCBiIGFyZSBp
bmxpbmVkLCB3ZSBtaWdodCBleGl0IGluc2lkZSBiIGR1ZSB0byBhIGJhZCB2YWx1ZSBsb2FkZWQK
KyAgICAvLyBmcm9tIGEuCisgICAgLy8gRklYTUU6IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgc2hvdWxkIHJlbWVtYmVyIHdoaWNoIENvZGVCbG9jayBvd25zCisgICAgLy8gdGhlIHZhbHVl
IHByb2ZpbGUuCisgICAgSW5saW5lQ2FsbEZyYW1lU2V0KiBpbmxpbmVDYWxsRnJhbWVzID0gY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpOwor
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7CisgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykKKyAgICAgICAgICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCkp
OworICAgIH0KKworICAgIGF1dG8qIGV4aXRJbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKKyAgICBpZiAoZXhpdElubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgY29udGV4dC5mcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRJbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAgIHZv
aWQqIGp1bXBUYXJnZXQgPSBleGl0U3RhdGUtPmp1bXBUYXJnZXQ7CisgICAgQVNTRVJUKGp1bXBU
YXJnZXQpOworCisgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAg
Ly8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZy
YW1lRm9yQ2F0Y2guCisgICAgICAgIHZtLmNhbGxGcmFtZUZvckNhdGNoID0gY29udGV4dC5mcDxD
YWxsRnJhbWUqPigpOworICAgIH0KKworICAgIHZtLnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8
Q2FsbEZyYW1lKj4oKTsKKworICAgIGlmIChleGl0U3RhdGUtPmlzSnVtcFRvTExJbnQpIHsKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JFeGl0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhleGl0Lm1fY29kZU9yaWdpbiwgYmFzZWxpbmVDb2Rl
QmxvY2spOworICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uJiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhpdC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0
ZWNvZGVJbmRleCkucHRyKCk7CisKKyAgICAgICAgY29udGV4dC5ncHIoTExJbnQ6OlJlZ2lzdGVy
czo6bWV0YWRhdGFUYWJsZUdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tG
b3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNv
bnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSk7CisgICAgICAg
IGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpKTsKKyNlbHNl
CisgICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KCZjdXJyZW50SW5zdHJ1Y3Rpb24pOworI2VuZGlmCisKKyAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCisgICAgICAgICAgICB2bS50YXJnZXRJbnRl
cnByZXRlclBDRm9yVGhyb3cgPSAmY3VycmVudEluc3RydWN0aW9uOworICAgIH0KKworICAgIGNv
bnRleHQucGMoKSA9IHVudGFnQ29kZVB0cjxKU0VudHJ5UHRyVGFnPihqdW1wVGFyZ2V0KTsKK30K
Kworc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IG9z
ckV4aXRJbmRleCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tp
bmQ7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKKworICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4g
IiwgKmNvZGVCbG9jayk7CisgICAgZGF0YUxvZygiIEAgZXhpdCAjIiwgb3NyRXhpdEluZGV4LCAi
ICgiLCBieXRlY29kZU9mZnNldCwgIiwgIiwgZXhpdEtpbmRUb1N0cmluZyhraW5kKSwgIikgd2l0
aCAiKTsKKyAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigp
LAorICAgICAgICAgICAgIiwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAiLCBhbHRlcm5h
dGl2ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwKKyAgICAgICAgICAgICIsIG9wdGlt
aXphdGlvbkRlbGF5Q291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFMb2coIm5vIGFsdGVybmF0aXZlIGNv
ZGUgYmxvY2sgKGkuZS4gd2UndmUgYmVlbiBqZXR0aXNvbmVkKSIpOworICAgIGRhdGFMb2coIiwg
b3NyRXhpdENvdW50ZXIgPSAiLCBjb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCksICJcbiIpOwor
ICAgIGRhdGFMb2coIiAgICBHUFJzIGF0IHRpbWUgb2YgZXhpdDoiKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAg
ICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgZGF0YUxvZygi
ICIsIGNvbnRleHQuZ3ByTmFtZShncHIpLCAiOiIsIFJhd1BvaW50ZXIoY29udGV4dC5ncHI8dm9p
ZCo+KGdwcikpKTsKKyAgICB9CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCIgICAg
RlBScyBhdCB0aW1lIG9mIGV4aXQ6Iik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgRlBSUmVnIGZwciA9IEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0LmZwck5h
bWUoZnByKSwgIjoiKTsKKyAgICAgICAgdWludDY0X3QgYml0cyA9IGNvbnRleHQuZnByPHVpbnQ2
NF90PihmcHIpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBjb250ZXh0LmZwcihmcHIpOworICAg
ICAgICBkYXRhTG9nRigiJWxseDolbGYiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGJpdHMpLCB2
YWx1ZSk7CisgICAgfQorICAgIGRhdGFMb2coIlxuIik7Cit9CisKKy8vIEpJVCBiYXNlZCBPU1Ig
RXhpdC4KKwogT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3Zl
cnlJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9vcmlnaW4uZm9yRXhpdCwg
aml0LT5tX29yaWdpbi5zZW1hbnRpYywgaml0LT5tX29yaWdpbi53YXNIb2lzdGVkKQogICAgICwg
bV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCkBAIC03MCwxOCArOTU4LDE1IEBAIENvZGVM
b2NhdGlvbkp1bXA8SlNJbnRlcm5hbFB0clRhZz4gT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVw
YXRjaCgpIGNvbnN0CiAKIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJh
bmRzKQogewotICAgIEhhc2hNYXA8TWluaWZpZWRJRCwgVmlydHVhbFJlZ2lzdGVyPiBhbHJlYWR5
QWxsb2NhdGVkQXJndW1lbnRzOyAvLyBNYXBzIHBoYW50b20gYXJndW1lbnRzIG5vZGUgSUQgdG8g
b3BlcmFuZC4KKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRlZEFy
Z3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCiAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpOwogCiAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQKICAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCk7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQogICAgICAgICBNaW5pZmllZElEIGlkID0gcmVjb3Zlcnkubm9kZUlEKCk7CiAgICAg
ICAgIGF1dG8gaXRlciA9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZmluZChpZCk7CiAgICAg
ICAgIGlmIChpdGVyICE9IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuZW5kKCkpIHsKQEAgLTEw
Miw3ICs5ODcsNyBAQCB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVs
cGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbAogCiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lIHx8IGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAg
ICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0Lm1vdmUoCkBAIC0xMTIs
NyArOTk3LDcgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBl
cnMmIGppdCwgVk0mIHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAg
ICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihWaXJ0dWFsUmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBqaXQubW92ZSgKQEAgLTEzOCw3ICsxMDIzLDcgQEAgdm9pZCBPU1JF
eGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25z
dCBPcGVyYW5kczxWYWwKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAotICAgICAgICBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVyYW5kKTsK
ICAgICB9CiB9CiAKQEAgLTU4MSw4MCArMTQ2NiwxNyBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVF
eGl0KENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCiAgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsK
IAotICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hl
Y2twb2ludCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGRuJ3QgdXNlIGEg
cHJvYmUgYnV0IGZpbGxpbmcgYWxsIHRoZSBzaWRlIHN0YXRlIG9iamVjdHMgaXMgdHJpY2t5IG90
aGVyd2lzZS4uLgotICAgICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gdmFsdWVzKG9wZXJhbmRz
Lm51bWJlck9mVG1wcygpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYW5k
cy5udW1iZXJPZlRtcHMoKTsgKytpKQotICAgICAgICAgICAgdmFsdWVzW2ldID0gb3BlcmFuZHMu
dG1wKGkpOwotCi0gICAgICAgIFZNKiB2bVB0ciA9ICZ2bTsKLSAgICAgICAgYXV0byogdG1wU2Ny
YXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKLSAgICAgICAgaml0LnByb2Jl
KFs9LCB2YWx1ZXMgPSBXVEZNb3ZlKHZhbHVlcyldIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkg
ewotICAgICAgICAgICAgYXV0byBhZGRTaWRlU3RhdGUgPSBbJl0gKENhbGxGcmFtZSogZnJhbWUs
IEJ5dGVjb2RlSW5kZXggaW5kZXgsIHNpemVfdCB0bXBPZmZzZXQpIHsKLSAgICAgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9
IFdURjo6bWFrZVVuaXF1ZTxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4oKTsKLQotICAgICAg
ICAgICAgICAgIHNpZGVTdGF0ZS0+Ynl0ZWNvZGVJbmRleCA9IGluZGV4OwotICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4TnVtQ2hlY2twb2ludFRtcHM7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvJiByZWNvdmVyeSA9IHZhbHVlc1tpICsgdG1wT2Zmc2V0
XTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHRoZSBG
VEwgZG9lcyBhbmQgbWF0ZXJpYWxpemUgYWxsIHRoZSBKU1ZhbHVlcyBpbnRvIHRoZSBzY3JhdGNo
IGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0YW50OgotICAgICAgICAgICAgICAg
ICAgICAgICAgc2lkZVN0YXRlLT50bXBzW2ldID0gcmVjb3ZlcnkuY29uc3RhbnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJ
bkpTU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9
IGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KHRtcFNjcmF0Y2hbaSArIHRtcE9mZnNldF0p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJbkdQUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVTdGF0ZS0+dG1wc1tpXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SlNWYWx1ZSo+KHRtcFNjcmF0Y2gpW2kgKyB0bXBPZmZzZXRdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2bVB0
ci0+YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShmcmFtZSwgV1RGTW92ZShzaWRlU3RhdGUpKTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmln
aW47Ci0gICAgICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZ3ByPENhbGxG
cmFtZSo+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGZvciAoY29k
ZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5p
bmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7Ci0gICAgICAgICAgICAgICAgQnl0
ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBhdXRvKiBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAg
ICAgICAgICBhZGRTaWRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihyZWludGVy
cHJldF9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09m
ZnNldCgpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSksIGNhbGxCeXRlY29kZUluZGV4LCBpbmxpbmVD
YWxsRnJhbWUtPnRtcE9mZnNldCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
Y29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7
IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQotICAgICAgICAgICAgICAgIGFkZFNpZGVTdGF0
ZShjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIDApOwotICAgICAgICB9KTsKLSAgICB9Ci0KICAg
ICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRz
IGludG8gdGhlIHN0YWNrLgogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9w
ZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0g
b3BlcmFuZHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOwogCi0gICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpKSkKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRp
Y19jYXN0PGludD4oaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIGludCBv
cGVyYW5kID0gcmVnLm9mZnNldCgpOworCiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgIGNhc2Ug
SW5GUFI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCmluZGV4IDllOWJjZWE0
ODFjMWQ2ODc3OTcyZjI1OWQ2MmMxYTIzMDBiMmIxNjEuLmE3ZTU4NzhjMDcxNzA4YTFkYTc2YzBi
MGViNTRkNTRmMWEwNGViOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5o
CkBAIC0xNTAsNiArMTUwLDggQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2Ug
ewogCiAgICAgZnJpZW5kIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21waWxlT1NSRXhp
dChDYWxsRnJhbWUqKTsKIAorICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVPU1JFeGl0KFByb2JlOjpD
b250ZXh0Jik7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Bh
dGNoYWJsZUp1bXBMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8T1NSRXhpdFB0
clRhZz4gbV9jb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNl
LmgKaW5kZXggMDAzYjYxOGNkNDQwZTQwMGFiYWFjZWMwYWZiYzNjMTI0MzVkYjk2ZS4uMzEwOTYz
ZDg0NDM2YzUzMzI3ODRmMGEyOTJhNDljYmUxYjgyYTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaApAQCAtNzAsMTEgKzcwLDYgQEAgc3RydWN0IE9TUkV4
aXRCYXNlIHsKICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmljVW53aW5kOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0V4aXRpbmdUb0NoZWNrcG9pbnRIYW5kbGVyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
LmNoZWNrcG9pbnQoKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICB2b2lkIGNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRp
bmdKSVRUeXBlIGppdFR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDc5NWU4ZGQxN2E1NDRh
NDcxN2VmM2FlZDc1OTBjNWVmMzRmYTBlZGYuLjliMDIxYmI3MTFiYTAyZDliYzEwMDNkNzc0MTQz
MTcyYTViNjMxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTI5LDE1ICsyOSwxMiBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiQnl0ZWNvZGVzLmgiCi0jaW5jbHVkZSAiQ2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5o
IgotI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCi0jaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtMTQ2LDkgKzE0Myw2IEBAIHZvaWQqIGNhbGxlclJldHVyblBDKENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5CiB7CiAg
ICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVy
VGh1bms7CiAKLSAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQotICAgICAg
ICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3Jf
ZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKS5leGVjdXRhYmxlQWRkcmVzcygpOwot
CiAgICAgdm9pZCoganVtcFRhcmdldDsKIAogICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CkBAIC0y
NDQsNyArMjM4LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxp
bmVkIHRhaWwgY2FsbHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXQuYmFz
ZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQu
c3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVC
bG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CiAKICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOwogICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
biAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpKSB7CkBA
IC0zMTEsMzQgKzMwNSwzMyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgaml0LnN0b3Jl
MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0
LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRl
T2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJhc2VsaW5lQ29kZUJsb2NrLT5i
eXRlY29kZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpKS5iaXRzKCk7
Ci0gICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CisgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5
SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBq
aXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0
aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVH
UFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCkpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KCkuYml0cygpOwotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICBqaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KGluc3RydWN0aW9uKSkpLmJpdHMoKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOworICAgICAgICBqaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3Rh
bnQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRo
ZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9
CiAKICAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYg
d2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2FsbHMKICAgICBpZiAoY29kZU9yaWdpbikgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkp
KS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleEZv
ckV4aXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9u
cyhieXRlY29kZUluZGV4KS5hdCgpLnB0cigpOwotICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKS5i
aXRzKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNl
bGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCkpLnB0cigpOworICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5i
aXRzKCk7CiAjZW5kaWYKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgaml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKSk7CiAgICAgfQogfQogCkBAIC0zOTMsMTEgKzM4Niw3IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9T
UkV4aXRCYXNlJiBleGl0KQogICAgIGlmIChleGl0VG9MTEludCkgewogICAgICAgICBhdXRvIGJ5
dGVjb2RlSW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAg
IGNvbnN0IEluc3RydWN0aW9uJiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAqY29kZUJsb2NrRm9yRXhp
dC0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKLSAgICAgICAgaWYg
KGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBM
TEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X3RyYW1w
b2xpbmUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAg
IGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CiAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmN1cnJlbnRJbnN0cnVjdGlvbiksIEdQUkluZm86
OnJlZ1QyKTsKQEAgLTQxMywxOCArNDAyLDEwIEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogI2Vu
ZGlmCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQnl0ZWNv
ZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsK
LSAgICAgICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4
aXRfdHJhbXBvbGluZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGNvZGVC
bG9ja0ZvckV4aXQtPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGV4aXRJbmRleCkgPT0gZXhpdEluZGV4
KTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gY29kZUJsb2NrRm9yRXhpdC0+aml0Q29kZU1h
cCgpLmZpbmQoZXhpdEluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBjb2RlTG9jYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2Rl
TWFwKCkuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBB
U1NFUlQoY29kZUxvY2F0aW9uKTsKIAotICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24pOwotCi0g
ICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIGp1bXBUYXJnZXQgPSBjb2RlTG9jYXRpb24u
cmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAog
ICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKaW5kZXggN2RhNmFmZDVjMjIxYzk3ZmY5
M2Y0MDBjYjM0OTQ0NTRkNGQ0OTI0MS4uMjE2YzViYWExNGQ5NmIyOWI1ZGQzNjlhNzNiZmVjYjRi
MDNkYzE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCkBAIC0yMTA3LDcgKzIxMDcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1faGVhcC5mb2xsb3coYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzW2ldLm5vZGUoKSkgIT0gZXNjYXBlZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGlu
dCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAg
ICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BJbmZvLmgKaW5kZXggNzdlZmNmYjI0ODAwMmE0YmY1ZWE2MGE2ZTY2NTIw
ZmUwNTE0NGJjYy4uZjM5YzE0YjlmMGE0NDg3ODlkNzcyZGMyN2RmMTU4ODFlNTA4Njg5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCkBAIC00NCw3ICs0NCw3IEBAIHN0cnVj
dCBPcEluZm8gewogICAgIGV4cGxpY2l0IE9wSW5mbyhJbnRlZ3JhbFR5cGUgdmFsdWUpCiAgICAg
ICAgIDogbV92YWx1ZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpKSB7IH0KICAgICBleHBs
aWNpdCBPcEluZm8oUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIDogbV92YWx1ZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKSkpIHsg
fQotICAgIGV4cGxpY2l0IE9wSW5mbyhPcGVyYW5kIG9wKSA6IG1fdmFsdWUob3AuYXNCaXRzKCkp
IHsgfQorCiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBleHBsaWNpdCBPcEluZm8o
VCogcHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5k
ZXggNjQ4MWE3OTNmYTRkNjNiYzczOGQwOTg5OWJiMjRmNzQ0M2VhNmEwYS4uYjRhMDgwZDgyN2Ey
YjZlNjhiNTc1YmU3ODAzOGYzNmVmNzlkZTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yOTYxLDE4ICsyOTYxLDE3IEBAIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBm
aXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJf
dCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aEluY2x1ZGluZ1RoaXMsIHVpbnQzMl90IG1hbmRhdG9y
eU1pbmltdW0pCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0
aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZmly
c3RFbGVtZW50IHsgZmlyc3RFbGVtZW50RGVzdCB9OwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRBcmd1bWVudHMpOwogICAgIAotICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudCkpLCBhcmd1bWVudHMs
IG9mZnNldCwgbGVuZ3RoSW5jbHVkaW5nVGhpcyAtIDEpOworICAgIGxvYWRWYXJhcmdzKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFy
Z3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwogICAgIAotICAgIGZvciAodWludDMyX3QgaSA9IGxl
bmd0aEluY2x1ZGluZ1RoaXMgLSAxOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytpKQotICAgICAg
ICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50ICsgaSkgPSBqc1VuZGVmaW5lZCgpOworICAgIGZv
ciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07ICsraSkKKyAgICAg
ICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CiB9
CiAKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBp
bnQzMl90IGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5jcHAKaW5kZXggMmIxMDViMmNhZGU3YjdkNTU4OWZhZGVhZmIwMmJj
MDk2NDVlMDliYy4uY2JjMmM4YmZhZTRlOTRkMDk1ZGRjOTE1N2RiMzZhYjVhMGM2YWRjMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlv
blBoYXNlLmNwcApAQCAtNDMsOCArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBuYW1lc3BhY2UgewogCituYW1lc3BhY2UgREZHUGhhbnRvbUluc2VydGlvblBoYXNl
SW50ZXJuYWwgeworc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30KKwog
Y2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIFBoYW50b21JbnNl
cnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9t
IGluc2VydGlvbiIpCkBAIC01OSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU2V0TG9j
YWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2Vy
dCB0b28gZmV3IFBoYW50b21zLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIs
IG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFz
ZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUg
UGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAg
ICAgICB9CkBAIC02OSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKICAgICAgICAgICAgIGhh
bmRsZUJsb2NrKGJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgewogICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC0xMDAsMjIgKzEwMywyMiBA
QCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0gMDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOwotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBpZiAoREZHUGhh
bnRvbUluc2VydGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgotICAg
ICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQo
bm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnRE
ZWZpbml0ZWx5OgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgotICAgICAgICAg
ICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51bGxwdHI7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMTMxLDQxICsxMzQsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgu
ZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZd
IChFZGdlIGVkZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IlVwZGF0aW5nIGVwb2NoIGZvciAiLCBlZGdlLCAiIHRvICIsIGN1cnJlbnRFcG9jaCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVkZ2UtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJl
bnRFcG9jaCk7CiAKLSAgICAgICAgICAgIE9wZXJhbmQgYWxyZWFkeUtpbGxlZDsKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5S2lsbGVkOwogCi0gICAgICAgICAgICBhdXRvIHBy
b2Nlc3NLaWxsZWRPcGVyYW5kID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCBvcGVyYW5k
KTsKKyAgICAgICAgICAgIGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoREZHUGhhbnRvbUluc2VydGlvblBo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBL
aWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgIC8vIEFscmVh
ZHkgaGFuZGxlZCBmcm9tIFNldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kID09
IGFscmVhZHlLaWxsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9z
ZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgYWxyZWFkeSBraWxsZWQgYnkgc2V0IGxvY2Fs
Iik7CisgICAgICAgICAgICAgICAgaWYgKHJlZyA9PSBhbHJlYWR5S2lsbGVkKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJh
bmQpOyAKLSAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBPcGVyYW5kICIsIG9wZXJhbmQsICIgd2Fz
IG5vdCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIik7CisgICAgICAgICAgICAgICAgTm9kZSoga2ls
bGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgICAgICAgICBpZiAoIWtp
bGxlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKHJlZykgPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBpbnNlcnQgYSBQ
aGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3QKICAgICAg
ICAgICAgICAgICAvLyBleGl0LCBhbmQgd2FzIGJvcm4gYmVmb3JlIHRoZSBsYXN0IGV4aXQuCi0g
ICAgICAgICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgT3BlcmFuZCAi
LCBvcGVyYW5kLCAiIGhhcyBjdXJyZW50IGVwb2NoICIsIGN1cnJlbnRFcG9jaCk7CisgICAgICAg
ICAgICAgICAgaWYgKGtpbGxlZE5vZGUtPmVwb2NoKCkgPT0gY3VycmVudEVwb2NoKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsCi0gICAgICAgICAgICAgICAg
ICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAot
ICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCkpOworICAgICAg
ICAgICAgICAgIGlmIChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkg
eworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCksICJcbiIpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0
IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIHJlZiBjb3VudC4K
QEAgLTE4MCwxNCArMTc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGlmIChub2RlTWF5
RXhpdCkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgU2V0TG9jYWwgZG9lcyBleGl0
LCB3ZSBuZWVkIHRoZSBNb3ZIaW50IG9mIGl0cyBsb2NhbAogICAgICAgICAgICAgICAgICAgICAv
LyB0byBiZSBsaXZlIHVudGlsIHRoZSBTZXRMb2NhbCBpcyBkb25lLgotICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzS2lsbGVkT3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUtpbGxlZCA9IG9wZXJhbmQ7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLaWxs
ZWRPcGVyYW5kKGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUtpbGxlZCA9IGxv
Y2FsOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5k
KG9wZXJhbmQpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKGxv
Y2FsKSA9IG51bGxwdHI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIGJsb2NrLT50cnlBdChub2RlSW5kZXggKyAxKSwgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAppbmRleCAyYTZhMDJmMmJiZGYwMWZhODkyMDMw
YzljZGQxYTM5Njc5Njk2ZmMyLi4xMjhjODQxZjBhYzdmOWRlYjYyZjdlNmZjNDYzYTUyODczNGM3
NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxs
SWZBcHByb3ByaWF0ZShtX3JlYWQsIGhlYXAub3BlcmFuZCgpKTsKKyAgICAgICAgICAgIGNhbGxJ
ZkFwcHJvcHJpYXRlKG1fcmVhZCwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVl
MzIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8g
YWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVyaXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4K
ICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHBy
b3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgaGVhcC5vcGVyYW5kKCkpOworICAgICAgICAg
ICAgY2FsbElmQXBwcm9wcmlhdGUobV91bmNvbmRpdGlvbmFsV3JpdGUsIFZpcnR1YWxSZWdpc3Rl
cihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTg3LDEyICs4NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFN0YWNrKTsKICAg
ICAgICAgCi0gICAgICAgIG1fZGVmKGxvY2F0aW9uLmhlYXAoKS5vcGVyYW5kKCksIG5vZGUpOwor
ICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52
YWx1ZTMyKCkpLCBub2RlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBPcGVyYW5kIG9wZXJhbmQpCisgICAgdm9pZCBjYWxsSWZBcHByb3ByaWF0ZShj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3Bl
cmFuZC50b0xvY2FsKCkpID49IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4
IDViNGY5OTI5MzQxMTc5YzIwNDk5NTJiZGMzODY5NjUyOWYwZmMzMTEuLjQ0N2UyNGUyYTExNjMz
N2M4M2UzYmFhMzEyNzM1NzkyYjkwNDcyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBPcHRpb25hbDxKU1ZhbHVlPiB2YWx1ZSA9IG11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGJiYzU1MWQ4
OTIwMGQ4OTc3YTVmNDUwNmYxZWE3MGM1ZDI2YTliZDYuLmVjZTk0NzA2ZWU4NGMyNmUxOWExOThl
MjM1Y2E3NGZiNzg1MTkzMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xMzcwLDcgKzEz
NzAsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9t
YmllSGludDoKICAgICAgICAgY2FzZSBFeGl0T0s6Ci0gICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0
aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgY2FzZSBQdXREeW5hbWljVmFyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAppbmRleCBjOTc5MzM1YTMw
MWVmNDZiOTkyM2VkZmY1NTZiZTczZDU3ZjU4ZjMxLi44NzI3NzYwYzZlY2JkYjMyZWFlNjAzYmFj
YmQxMDAzNzRkODE0ZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcApAQCAtNDIsOCArNDIsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCituYW1lc3BhY2UgREZHUHV0
U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworfQorCiBjbGFzcyBQdXRTdGFja1NpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHB1YmxpYzoK
ICAgICBQdXRTdGFja1NpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRTdGFjayBzaW5raW5nIikKQEAgLTcwLDcgKzczLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGUgc3RhY2suIEl0J3Mgbm90IGNsZWFyIHRvIG1lIGlmIHRoaXMgaXMgaW1wb3J0
YW50IG9yIG5vdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTI5NgogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAg
aWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODUsOCArODgsMTEgQEAgcHVibGlj
OgogICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7
Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRz
TGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgZmFsc2UpOworICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQpOworICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29s
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxp
dmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBib29sIGNoYW5nZWQ7CkBAIC0xMDEsMzQgKzEwNywzMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Ym9vbD4gbGl2ZSA9IGxpdmVBdFRhaWxbYmxvY2tdOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFZlY3RvcjxP
cGVyYW5kLCA0PiByZWFkczsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPE9wZXJhbmQsIDQ+
IHdyaXRlczsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChP
cGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdp
c3RlciwgND4gcmVhZHM7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXIsIDQ+IHdyaXRlczsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5h
cHBlbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBvcCA9IG5vZGUtPm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChvcCA9PSBQdXRTdGFjayB8fCBvcCA9PSBMb2FkVmFyYXJncyB8fCBvcCA9PSBG
b3J3YXJkVmFyYXJncyB8fCBvcCA9PSBLaWxsU3RhY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayB8fCBub2RlLT5vcCgpID09
IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBLaWxsU3RhY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVzLmFwcGVuZChv
cGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgICAgICBw
cmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKIAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHdyaXRlcykKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA6IHdyaXRlcykKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKE9wZXJhbmQgb3BlcmFuZCA6IHJlYWRzKQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogcmVhZHMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTIyOSw3ICsyMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVy
cmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEdldFN0YWNrKSB7CkBAIC0yNTYsNyArMjYxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDM5OAogCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQ29uZmxp
Y3RpbmcgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpID09IENvbmZsaWN0aW5nRmx1c2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKS0+bG9jYWwpID09IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWlz
Q29uZmxpY3RpbmcpOwpAQCAtMjcwLDIwICsyNzUsMTcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZnJvbS4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
dmVyYm9zZSwgIlNldHRpbmcgZmx1c2ggZm9ybWF0IGZvciAiLCBub2RlLCAiIGF0IG9wZXJhbmQg
Iiwgb3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KS0+Zm9ybWF0OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3RhY2spIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2luayBhIFB1dFN0YWNrIHBhc3Qg
YSBLaWxsU3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIktpbGxpbmcgc3RhY2sgZm9yICIsIG5v
ZGUtPnVubGlua2VkT3BlcmFuZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5h
bDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwg
bm9kZSwgIiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjkxLDE4ICsyOTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9w
ZXJhbmQuaXNUbXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0g
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09
IFZhcmFyZ3NMZW5ndGggfHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgp
ID09IEZvcndhcmRWYXJhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJXcml0aW5nIGRlYWQgZmx1c2ggZm9yICIsIG5vZGUsICIgYXQgb3BlcmFuZCAi
LCBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZs
dXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChk
ZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCkBAIC0zMTMsMTMgKzMxMywxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkNvbnNpZGVyaW5nICIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBhdCAiLCBw
b2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRl
ZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdl
cyB0byAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5k
ZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3Vj
Y2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJl
ZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTM1MiwxMCArMzUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFi
bGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCk7Ci0gICAgICAgIFZlY3RvcjxPcGVyYW5kPiBpbmRleFRvT3BlcmFuZDsKKyAgICAg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwotCisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZv
ckluZGV4KGkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwogICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwogICAgICAg
ICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CkBAIC0zNzAsMTIgKzM3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRT
dGFjazoKICAgICAgICAgICAgICAgICAgICAgcHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICAgICAgICAg
ICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ss
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMzg2LDcgKzM4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNzYUNh
bGN1bGF0b3IuY29tcHV0ZVBoaXMoCiAgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKLSAgICAgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3Bl
cmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1hdCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIg
YXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQ
aGksIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpKTsKQEAgLTQxMSw3ICs0
MTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJ
bmRleChpKSk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGlu
Zy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYg
PSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CkBAIC00
MjEsMTUgKzQyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1Npbmtp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmcgYXQgdG9wIG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbWFwcGluZywgIlxuIik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAi
LCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOwogICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTQzNywxNSAr
NDM3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRb
YmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9k
ZSwgIjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazog
ewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gZGF0
YS0+b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBkYXRhLT5sb2NhbDsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVy
YW5kKSA9IGRhdGEtPmZvcm1hdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBv
cGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1MywxNiAr
NDUzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRh
dGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWQub3BlcmFuZChkYXRhLT5s
b2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChkYXRhLT5vcGVyYW5kKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5v
cGVyYW5kKGRhdGEtPm9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKGRhdGEtPmxvY2FsKSAhPSBDb25mbGljdGluZ0ZsdXNoLCBkZWZlcnJlZC5v
cGVyYW5kKGRhdGEtPmxvY2FsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gZGVmZXJyYWwuIE5vIGRl
ZmVycmFsIG1lYW5zIHRoYXQgdGhlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1
dGhvcml0YXRpdmUgdmFsdWUgZm9yIHRoaXMgc3RhY2sgc2xvdCBpcyB3aGF0IGlzIHN0b3JlZCBp
biB0aGUgc3RhY2suIFNvLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGUgR2V0
U3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKGRh
dGEtPmxvY2FsKSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ3MiwyMCArNDcyLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBzdG9yZWQgYW5kIGdldCBy
aWQgb2YgdGhlIEdldFN0YWNrLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIGZvcm1hdCA9PSBkYXRhLT5mb3JtYXQsIGZvcm1hdCwgZGF0YS0+Zm9ybWF0KTsK
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5n
ID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChkYXRhLT5sb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gaW5jb21pbmctPmRlZmF1bHRFZGdlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2Ug
S2lsbFN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+
dW5saW5rZWRPcGVyYW5kKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdG
bHVzaDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBhdXRv
IGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3IgIiwgbm9kZSwg
IiBlc2NhcGluZyAiLCBvcGVyYW5kLCAiXG4iKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0U3RhY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRT
dGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWlu
ZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVh
ZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gd3JpdGVIYW5kbGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IExvYWRWYXJhcmdzIGFuZCBGb3J3YXJkVmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMg
dG8gdGhlIHN0YWNrCkBAIC01MjEsMTMgKzUyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9zZSBz
dGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJl
Zm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3VsZCBu
ZXZlciBzaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQgdG8g
dGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZv
cndhcmRWYXJhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCwgTGF6eU5vZGUpIHsgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAg
fQpAQCAtNTM5LDggKzUzOSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBmb3IgKFNTQUNh
bGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vz
c29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYt
PnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3Ig
Iiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1w
KHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0
IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQp
OwogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29u
Y3JldGUoZm9ybWF0KSwgZm9ybWF0KTsKQEAgLTU4NSw3ICs1ODUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCmluZGV4IDA0ZjJjMGNk
Mzk5OGIxODFiOWU5OGJiYTQyNzA0ODgzYjQwZDJkOGMuLjQzNmU1ZDM5MTRiMzIzNWEwMjQ3ZmM0
MTg0NzE2MzExZDY3Njg2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGFjaywg
bm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5vcGVyYW5kKCksIHZhcmlhYmxlLT5mbHVzaEZv
cm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KSkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50R2V0dGVycy5hZGQoY2hpbGROb2RlKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNoaWxkTm9kZSk7CkBA
IC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4
KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFBydW5lIGJ5IGxpdmVu
ZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIgdGhhbiBjb21waWxlIHRpbWVzLgot
ICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGhlYWRO
b2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWhlYWROb2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZEZvcklu
ZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
Rm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICB2
YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTMxMywxMSArMzEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFy
aWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5k
KCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIE1vdkhpbnQsIGJsb2Nr
LT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLAotICAgICAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2Uo
KSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQo
KSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9yaWdpbi5leGl0T0spCkBAIC0zMzcsNyArMzM3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDogewogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAv
LyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzQ5LDE5ICszNDksMTkgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdGFjaygKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3JhcGgpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJsZS0+b3Bl
cmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAi
IC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9h
cmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgICAgICAgICB2YWx1
ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPSBu
b2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5z
dGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM3MSw4ICsz
NzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9k
ZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkp
LCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQodmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIsIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zODUsNyArMzg1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2
YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVsdEVkZ2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNDI1LDEyICs0MjUsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgogICAgICAgICAgICAgICAgICAgICBVc2VL
aW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZvciAiLCB2
YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9yICIsIHZh
cmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNp
bG9uLCB1cHNpbG9uT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5v
ZGUpLCBFZGdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRl
eCA4ODMwYzY4NmIwMjE3ZDUyNjIzMmVhYTIyNzZiZTIyYzI0Y2VmMDUwLi5iOWE0NmJlYjAyNTgx
NjI0ODg4ZGQxODEwMmIyYzZkMThiYTZkZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzIyLDcgKzMyMiw2IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Ym9vbCBpZ25vCiAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNh
c2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2Fy
ZFZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCmluZGV4IGU4NmJmNWQ1ZDc3OTU1MzI1OGFkMzYwYjY1YTU4NDA0MDE2NDU0NDUuLjA4
YjNhZTdjZDhiOGZiYTk0YmYzMWE5OTIzZmJkMTllZmUzNzc2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNzc1LDcgKzE3NzUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlKiBub2RlKQogICAg
IE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgIG5vdGljZU9TUkJpcnRo
KGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKSk7Cisg
ICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1pbmlmaWVk
SUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6YmFpbChBYm9ydFJlYXNvbiByZWFzb24pCkBAIC0xODI1LDcgKzE4MjUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICBtX3N0YXRlLmJlZ2lu
QmFzaWNCbG9jayhtX2Jsb2NrKTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICBp
bnQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CiAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29y
ZCBkZWFkIFNldExvY2FsJ3MuCkBAIC0xODM1LDggKzE4MzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiAgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExv
Y2FsJ3MuCiAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9y
bWF0KCkpOwotICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFvcGVyYW5k
LmlzQXJndW1lbnQoKSB8fCBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLnRvQXJndW1lbnQoKSA+
PSAwKTsKLSAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRM
b2NhbChvcGVyYW5kLCB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksIGZvcm1hdCkpOworICAgICAg
ICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKAorICAgICAgICAgICAgVmFyaWFibGVFdmVudDo6c2V0
TG9jYWwoCisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKKyAgICAgICAgICAgICAgICBmb3Jt
YXQpKTsKICAgICB9CiAKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKQEAgLTE5MTYsOCAr
MTkxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gRmx1c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgQVNT
RVJUKHZpcnR1YWxSZWdpc3Rlci5pc0FyZ3VtZW50KCkpOworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwogCiAgICAg
ICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKQEAgLTczMzgsNTUgKzcz
NDAsNTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2Rl
KiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFyYXJnc0xlbmd0aChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRh
ID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAKICAgICBKU1ZhbHVlUmVncyBhcmd1bWVudHNS
ZWdzOwotICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgIEpTVmFsdWVPcGVy
YW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKLSAgICBhcmd1bWVu
dHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7Ci0gICAgZmx1c2hSZWdpc3RlcnMoKTsK
LSAgICB1bmxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgYXJn
dW1lbnRzUmVncyA9IGFyZ3VtZW50cy5qc1ZhbHVlUmVncygpOworICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZU9mVmFyYXJn
cywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBh
cmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICBsb2NrKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICBHUFJUZW1wb3Jhcnkg
YXJnQ291bnRJbmNsdWRpbmdUaGlzKHRoaXMpOwotICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGlu
Z1RoaXNHUFIgPSBhcmdDb3VudEluY2x1ZGluZ1RoaXMuZ3ByKCk7CisgICAgeworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBh
cmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgfQogICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAK
LSAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOworICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHByb3BlcnR5IHR3aWNl
LiBUaGlzIGlzIHNhZmUKKyAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGlu
dGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAg
ICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2Ug
Y2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAvLyBwYXN0IHRo
ZSBzaXppbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTQ0OAogCi0gICAgaW50MzJSZXN1bHQoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBub2Rl
KTsgIAotfQorICAgIEdQUlJlZyBhcmdDb3VudEluY2x1ZGluZ1RoaXNHUFIgPQorICAgICAgICBK
SVRDb21waWxlcjo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJn
dW1lbnRzUmVncyk7CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhO
b2RlKiBub2RlKQotewotICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJh
cmdzRGF0YSgpOwotCi0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291
bnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOyAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVu
dHModGhpcywgbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7Ci0gICAgR1BSUmVnIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudC5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyBh
cmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJnQ291bnRJbmNsdWRp
bmdUaGlzR1BSKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgIFZhcmFyZ3NPdmVy
ZmxvdywgSlNWYWx1ZVNvdXJjZSgpLCBFZGdlKCksIG1faml0LmJyYW5jaFRlc3QzMigKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCks
IEVkZ2UoKSwgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsCisgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUikpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsCi0gICAgICAgICAgICBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICAgICAgICAgIGFyZ0NvdW50SW5jbHVkaW5nVGhp
c0dQUiwKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihkYXRhLT5saW1pdCkpKTsKIAotICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICBtX2ppdC5zdG9yZTMyKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAg
ICBtX2ppdC5zdG9yZTMyKGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUiwgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7CiAKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0YS0+bWFjaGlu
ZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZGF0
YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpLCBhcmd1bWVudHNSZWdzLCBkYXRhLT5vZmZzZXQsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC03Mzk2LDE5ICs3
Mzk3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2Rl
KiBub2RlKQogewogICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdz
RGF0YSgpOwogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgIGlmIChu
b2RlLT5hcmd1bWVudHNDaGlsZCgpKQotICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5h
cmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CisgICAg
aWYgKG5vZGUtPmNoaWxkMSgpKQorICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5jaGls
ZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogICAgIGVsc2UKICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSgpOwogCi0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFyZ3VtZW50Q291bnQodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CiAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICBHUFJSZWcgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOwotICAgIEdQUlJlZyBsZW5ndGhH
UFIgPSBhcmd1bWVudENvdW50LmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGgu
Z3ByKCk7CiAgICAgSlNWYWx1ZVJlZ3MgdGVtcFJlZ3MgPSB0ZW1wLnJlZ3MoKTsKLSAgICAKLSAg
ICBtX2ppdC5tb3ZlKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBsZW5ndGhHUFIpOworICAg
ICAgICAKKyAgICBlbWl0R2V0TGVuZ3RoKGlubGluZUNhbGxGcmFtZSwgbGVuZ3RoR1BSLCAvKiBp
bmNsdWRlVGhpcyA9ICovIHRydWUpOwogICAgIGlmIChkYXRhLT5vZmZzZXQpCiAgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMihkYXRhLT5vZmZzZXQpLCBsZW5ndGhHUFIpOwogICAgICAg
ICAKQEAgLTc1NjcsNyArNzU2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVEaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZQogICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewot
ICAgICAgICBrbm93bkxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgICAgIGtub3duTGVuZ3Ro
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CiAgICAg
ICAgIGxlbmd0aElzS25vd24gPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGtub3duTGVu
Z3RoID0gVUlOVF9NQVg7CkBAIC0xMjQ2OSw3ICsxMjQ2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKiBub2RlKQogICAg
IGlmIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmFyZ3VtZW50c0lu
bGluZUNhbGxGcmFtZSgpKQogICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKICAgICBlbHNlCi0gICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzOworICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpLCByZXN1bHQu
Z3ByKCkpOwogICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggMzU2ZjFlMWEw
OWRhNDJmZDg5NmU5YTQ3NWUwMTNkNzNkNTNlZDUyNS4uMjJhZDQ2ZjkwNWY5NzdiOTBmODViOTFh
YzkzY2RmY2RmNjAwZWY0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaApAQCAtMTM5Myw3ICsxMzkzLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29t
cGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3UmVnZXhwKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJncyhOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlVmFyYXJnc0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3Mo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKik7CkBAIC0xNjcxLDE2ICsxNjcw
LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQ
UlJlZyk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKLSAgICAgICAgT3BlcmFuZCBi
eXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0
KQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcsIFZpcnR1YWxSZWdpc3RlciBt
YWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghYnl0
ZWNvZGVSZWcuaXNBcmd1bWVudCgpIHx8IGJ5dGVjb2RlUmVnLnZpcnR1YWxSZWdpc3RlcigpLnRv
QXJndW1lbnQoKSA+PSAwKTsKICAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChieXRlY29kZVJlZywgbWFjaGluZVJlZywgZm9ybWF0KSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdCBmb3JtYXQpCiAgICAg
ewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9jdXJyZW50Tm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKHZhcmlhYmxlLT5v
cGVyYW5kKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9ybWF0KTsKKyAgICAgICAgcmVj
b3JkU2V0TG9jYWwodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwg
Zm9ybWF0KTsKICAgICB9CiAKICAgICBHZW5lcmF0aW9uSW5mbyYgZ2VuZXJhdGlvbkluZm9Gcm9t
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApp
bmRleCA4MDYyNmIwMTYxMGY5NjA1YWFlYzAyNjhmNDViYTVkNGY3MzEwYThmLi44Yzg1NmM4Nzll
NmYzYTFkN2RiMjkxMTVhYjhkMzUzY2FmMWJlMTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTE4MjgsNyArMTgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwogCiAgICAgICAg
IC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQgdGhh
dCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhl
biBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+
dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7Cisg
ICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUtPnVubGlua2VkTG9jYWwoKSwgVmly
dHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4MjQsMTEgKzM4MjQsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewotICAgICAgICBjb21w
aWxlVmFyYXJnc0xlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2Fz
ZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3Mobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKaW5kZXggY2Q1ZTVkYTU0NWY1YmZjZWU1MjliYWZiNmMyNTExOWVhY2FiYmQy
NC4uMTc3YTgxMzJhYzNiM2YzN2M5NjE2NWEzNzYxNWUzMDdjYWQyNDQzMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0xOTM2
LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZv
dW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgpAQCAtMjAwNyw3ICsyMDA3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBab21iaWVIaW50OiB7Ci0gICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVu
dE5vZGUtPnVubGlua2VkT3BlcmFuZCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERl
YWQpOworICAgICAgICByZWNvcmRTZXRMb2NhbChtX2N1cnJlbnROb2RlLT51bmxpbmtlZExvY2Fs
KCksIFZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RGVhZCk7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDY0LDExICs0NDY0LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKLSAgICAg
ICAgY29tcGlsZVZhcmFyZ3NMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQog
ICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKG5vZGUp
OwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwCmluZGV4IDZlMDk0OWIwZmE4YzA4NzExNzUzYmIxYzZhN2YyYTMy
NmQwMmExOTAuLjE2OGIzZGY0MzM0NjU3ZTZhYWRiNjRiYmY2MzNlZWM1YWZhMWIwNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRyZWF0IGEgdmFyaWFibGUgYXMg
YmVpbmcgInVzZWQiIGlmIHRoZXJlIGV4aXN0cyBhbiBhY2Nlc3MgdG8gaXQgKFNldExvY2FsLCBH
ZXRMb2NhbCwKICAgICAgICAgLy8gRmx1c2gsIFBoYW50b21Mb2NhbCkuCiAgICAgICAgIAotICAg
ICAgICBPcGVyYW5kczxib29sPiB1c2VkT3BlcmFuZHMoMCwgZ3JhcGgoKS5tX2xvY2FsVmFycywg
Z3JhcGgoKS5tX3RtcHMsIGZhbHNlKTsKKyAgICAgICAgQml0VmVjdG9yIHVzZWRMb2NhbHM7CiAg
ICAgICAgIAogICAgICAgICAvLyBDb2xsZWN0IHRob3NlIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2Vk
IGZyb20gSVIuCiAgICAgICAgIGJvb2wgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gZmFsc2U7CkBA
IC02NywyMiArNjcsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
dXNlZE9wZXJhbmRzLnNldE9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChkYXRhLT5jb3VudCwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jb3VudC5pc0xvY2FsKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChkYXRhLT5jb3VudC50b0xvY2FsKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+c3RhcnQuaXNMb2NhbCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHBhcnQgcmVhbGx5IHJlbGllcyBvbiB0aGUgY29udGlndWl0
eSBvZiBzdGFjayBsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnRz
LgogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5z
dGFydC5vZmZzZXQoKSArIGRhdGEtPmxpbWl0IC0gMSkuaXNMb2NhbCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmxpbWl0OyBpLS07KSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKGRhdGEtPnN0YXJ0Lm9m
ZnNldCgpICsgaSkudG9Mb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSAvLyB0aGUgZWxz
ZSBjYXNlIHNob3VsZG4ndCBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgIGhhc05vZGVzVGhh
dE5lZWRGaXh1cCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTEsOSAr
OTIsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogc3RhY2sgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YWNrLT5vcGVyYW5kLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrLT5sb2NhbC5pc0FyZ3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoc3RhY2st
Pm9wZXJhbmQsIHRydWUpOworICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChzdGFj
ay0+bG9jYWwudG9Mb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNywyMSArMTA4LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0
ZXI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7Ci0gICAgICAgICAgICAgICAgdXNlZE9wZXJhbmRzLnNldE9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIoCisgICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKLSAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCisg
ICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQoVmlydHVhbFJlZ2lzdGVyKAogICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkg
KwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLnRv
TG9jYWwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRMb2NhbHMuc2l6ZSgpKTsKICAgICAgICAg
bV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkT3BlcmFuZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdXNlZE9wZXJhbmRz
LmdldEZvck9wZXJhbmRJbmRleChpKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXNlZExvY2Fscy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCF1c2VkTG9jYWxz
LmdldChpKSkgewogICAgICAgICAgICAgICAgIGFsbG9jYXRpb25baV0gPSBVSU5UX01BWDsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTEzNCw1MCArMTM1LDQ5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPm9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
bWFjaGluZUxvY2FsKCkgPSB2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpOwor
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5sb2NhbCgpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOwotICAgICAg
ICAgICAgc2l6ZV90IGluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVyYW5kKTsK
LSAgICAgICAgICAgIGlmIChpbmRleCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAg
IHNpemVfdCBsb2NhbCA9IHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9jYWwoKTsKKyAgICAgICAgICAg
IGlmIChsb2NhbCA+PSBhbGxvY2F0aW9uLnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25baW5kZXhdID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25bbG9jYWxdID09IFVJTlRfTUFYKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXJp
YWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCB2
YXJpYWJsZS0+b3BlcmFuZCgpKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRhKiBkYXRhIDogbV9ncmFwaC5tX3N0
YWNrQWNjZXNzRGF0YSkgewotICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNBcmd1bWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+b3BlcmFu
ZC52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIGlmICghZGF0YS0+bG9jYWwuaXNMb2Nh
bCgpKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gZGF0YS0+bG9jYWw7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChkYXRhLT5vcGVyYW5kLmlzTG9jYWwoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPm9wZXJhbmQudG9Mb2NhbCgpKSA+PSBh
bGxvY2F0aW9uLnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFsbG9jYXRpb25bZGF0YS0+b3BlcmFuZC50b0xvY2FsKCldID09IFVJTlRf
TUFYKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxvY2FsLnRvTG9jYWwoKSkgPj0g
YWxsb2NhdGlvbi5zaXplKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoYWxsb2NhdGlvbltkYXRhLT5sb2NhbC50b0xvY2FsKCldID09IFVJTlRfTUFYKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhLT5t
YWNoaW5lTG9jYWwgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBkYXRhLT5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbihhbGxvY2F0aW9u
LCBkYXRhLT5sb2NhbCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFw
aC5uZWVkc1Njb3BlUmVnaXN0ZXIoKSkKICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5zZXRTY29w
ZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y29kZUJsb2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgY29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgY29kZUJs
b2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoYXNzaWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5z
Y29wZVJlZ2lzdGVyKCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgSW5saW5lVmFy
aWFibGVEYXRhIGRhdGEgPSBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldOwogICAgICAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBkYXRhLmlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkpCi0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50
UmVnaXN0ZXIgPSBhc3NpZ24odXNlZE9wZXJhbmRzLCBhbGxvY2F0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSk7Ci0KKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50UmVnaXN0ZXIgPSBhc3NpZ24oCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24s
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzV2l0aEZpeHVwLnNpemUoKTsgYXJndW1lbnQtLTspIHsKICAgICAgICAg
ICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBwb3NpdGlvbiA9IG1fZ3JhcGgubV9hcmd1bWVudFBv
c2l0aW9uc1sKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQg
KyBhcmd1bWVudF07CkBAIC0yMTUsOCArMjE1LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEg
PSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEt
Pm1hY2hpbmVDb3VudCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPmNv
dW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVTdGFydCA9IGFzc2ln
bih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24sIGRhdGEtPnN0YXJ0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm1hY2hpbmVDb3VudCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5j
b3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lU3RhcnQgPSBhc3Np
Z24oYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAt
MjMxLDE2ICsyMzEsMTcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXNzaWduKGNvbnN0IE9wZXJhbmRzPGJvb2w+JiB1c2VkT3BlcmFuZHMsIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIE9wZXJhbmQgb3BlcmFuZCkKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXNzaWduKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGFsbG9jYXRpb24sIFZp
cnR1YWxSZWdpc3RlciBzcmMpCiAgICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKTsKLQotICAg
ICAgICBzaXplX3Qgb3BlcmFuZEluZGV4ID0gdXNlZE9wZXJhbmRzLm9wZXJhbmRJbmRleChvcGVy
YW5kKTsKLSAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltvcGVyYW5k
SW5kZXhdOwotICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwobXlBbGxvY2F0aW9uKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IHNyYzsKKyAgICAgICAgaWYgKHJlc3VsdC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG15QWxsb2NhdGlvbiA9IGFsbG9jYXRpb25bcmVzdWx0LnRvTG9jYWwoKV07CisgICAg
ICAgICAgICBpZiAobXlBbGxvY2F0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG15QWxsb2NhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApp
bmRleCBiNDhjNmY3ZjE5MDk3NzVkNzI3OTc5OTFmM2ZiOTgzZGU2MzhhNzI0Li5lYjNkZGJkNzE4
NDNkNDlmNjViMzJjZTk2MWZmOWEwNzEyYTFhMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTI4NSwx
NyArMjg1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIHNldExvY2FsID0gbnVsbHB0cjsKLSAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZCA9IG1fbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsID0gbV9ub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX25vZGVJbmRleDsgaS0tOykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2Jsb2NrLT5hdChpKTsKIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFNldExvY2FsICYmIG5vZGUtPm9wZXJhbmQoKSA9PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+bG9jYWwoKSA9PSBsb2NhbCkg
ewogICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbCA9IG5vZGU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChhY2Nl
c3Nlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgQWJzdHJhY3RIZWFwKFN0YWNrLCBvcGVyYW5kKSkp
CisgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIGxvY2FsKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ro
dW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKaW5kZXgg
ZjFiMWZmNjRkZGE1M2NmNDU5NjcwNGVlYjgzMTVmMTZiZmJlOTA5ZS4uNmFjYWZiZjNiZjUzNWM5
Njk2YmU2NDhhMjA3MGI2ZWU2ZjRmOGJmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcApAQCAtNDAsNiArNDAsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRU
aHVua0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdChudWxscHRyKTsK
KyAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsICZ2bSk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiREZHIE9TUiBleGl0IHRodW5r
Iik7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdChu
dWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCmluZGV4IDhiNWMzZjAx
YTQ4NTIwYjdhYWFhYWViYWZmOTNjM2IyNmNjZDk4NGYuLjA1YTUwYTU0YjI1ZDUxZGJjYjE4NThm
ZTdhYWRjYTQ4NjgyMDVkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaApA
QCAtMzUsNiArMzUsNyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJik7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCA3OTY2
NWY4YWI4NWZjMTExNmQ2MzlmYjNkOGI1NWY2ZWQ5MDI2OGRiLi42MGZiZjg5OTVmZGFkNzgyNTZh
MDY3Yjg5YzRlYzVmNTcxM2YxZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVy
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjaGVja09wID0gQ2hlY2tTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3BlY0NlbGxDaGVjayAmIFNwZWNFbXB0
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5vcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobG9jYWwgLSAo
aW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApKSA9PSB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB8dGhpc3wgY2FuIGJlIHRoZSBURFogdmFsdWUuIFRoZSBjYWxsIGVudHJ5cG9p
bnQgd29uJ3QgaGF2ZSB8dGhpc3wgYXMgVERaLApAQCAtMTY4LDggKzE2OCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPT0gbm9kZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZS0+b3BlcmFuZCgpKSA9IGdldExvY2FsOworICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWJzdGl0dXRlR2V0TG9jYWwoKmJsb2NrLCBpbmRl
eEluQmxvY2ssIHZhcmlhYmxlLCBnZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
NDQ2LDcgKzQ0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpKTsKKyAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggYTJkNmNmYzI0OTM0ZTNkYzNjNDZjMGUyNGQ0ZGEx
Y2UxYjBjZjViNy4uOWVlNWUwMDc0MDlkZjUyOTRiZmNmNTFiNzc2ZWI4Y2ZjZjQ3YzUwZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTQ4Myw3ICs0ODMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+cGhpc1tp
XTsKICAgICAgICAgICAgICAgICBBU1NFUlQocGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKG5vZGUp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsK
LSAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihu
b2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2Fk
U3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKQEAgLTUxOSwxMCAr
NTE5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2td
OwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUg
PSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKGxvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVk
ZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2Fs
IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBi
bG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10p
LCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTUzMywxMSArNTMzLDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChvcGVyYW5kLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZXJhbmQsIGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50RGVmaW5pdGVs
eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50TWF5YmUKQEAgLTU0NywxNSArNTQ3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRo
aXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgob3BlcmFuZCwgYmxv
Y2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRn
ZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxv
Y2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRn
ZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBP
cGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9z
aXRpb25zKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAg
ICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAorICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAg
T3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKKyAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIFZBTElEQVRFKCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5h
Y2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKQEAgLTY2NCwyNCArNjY4LDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJhbmQo
KSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksICEhbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrKSwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnREZWZpbml0ZWx5IHx8IG5v
ZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRo
ZSBmaXJzdCBTZXRMb2NhbC4gVGhlcmUgbWF5IGJlIG11bHRpcGxlIFNldExvY2FscwogICAgICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIGZsdXNoaW5nLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpICE9IG5vdFNl
dCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgIT0gbm90U2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFu
ZCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBhY3RzIGxpa2UgYSByZXNldC4gSXQncyBvayB0byBoYXZlIGEgc2Vjb25kIEdldExv
Y2FsIGZvciBhIGxvY2FsIGluIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2Nr
IGlmIHdlIGhhZCBhIFNldEFyZ3VtZW50RGVmaW5pdGVseSBmb3IgdGhhdCBsb2NhbC4KLSAgICAg
ICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm90U2V0OwotICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2Fs
UG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7CisgICAgICAgICAgICAg
ICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub3RTZXQ7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnRNYXliZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NjQsMjYgKzk2OCwy
NiBAQCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoT3BlcmFuZCBvcGVyYW5k
LCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBp
ZiAoIWJsb2NrKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gbnVsbCBCbG9j
ayAiKTsKKyAgICAgICAgICAgIGRhdGFMb2cobG9jYWwsICIgaW4gbnVsbCBCbG9jayAiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBCbG9jayAiLCAqYmxvY2spOworICAgICAgICBkYXRhTG9nKGxvY2FsLCAiIGluIEJsb2Nr
ICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoCi0gICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2spCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2Nh
bCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2sp
CiAgICAgewotICAgICAgICBkYXRhTG9nKG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJs
b2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKKyAgICAgICAgZGF0YUxvZyhsb2NhbCwg
IiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBP
cGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywg
Tm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciAi
LCBvcGVyYW5kLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CisgICAgICAgIGRhdGFMb2co
cHJldk5vZGUsICIgZm9yICIsIGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
QmFzaWNCbG9jayogYmxvY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCA5NWNkYzkyZTJjMjQxMGEzNWMw
MTMxMzFmZGMzYjdjY2MyODI5ZWY4Li4yNmYwMzI5ZDU0MzA0MTU3MjA1ZTc4MTQ5OGM2NGUwYmU5
OTMyMTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTQxLDkgKzQxLDExIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAorbmFtZXNwYWNlIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2VJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworfQogCiBjbGFzcyBWYXJhcmdzRm9yd2FyZGluZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgog
ICAgIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNl
KGdyYXBoLCAidmFyYXJncyBmb3J3YXJkaW5nIikKQEAgLTU0LDcgKzU2LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9y
bSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIHZhcmFyZ3MgZm9yd2FyZGluZzpcbiIpOwogICAgICAg
ICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTg2LDcgKzg4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gV2UgZXhwZWN0IGNhbGxzIGludG8gdGhpcyBmdW5jdGlvbiB0byBiZSBy
YXJlLiBTbywgdGhpcyBpcyB3cml0dGVuIGluIGEgc2ltcGxlIE8obikgbWFubmVyLgogICAgICAg
ICAKICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gYmxvY2stPmF0KGNhbmRpZGF0ZU5vZGVJbmRl
eCk7Ci0gICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRp
bmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcg
Y2FuZGlkYXRlICIsIGNhbmRpZGF0ZSwgIlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBl
bGltaW5hdGUgR2V0QnV0dGVyZmx5IG92ZXIgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzIGlmIHRoZSBi
dXR0ZXJmbHkgaXMgb25seQpAQCAtMTAzLDcgKzEwNSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIGF1dG8gZGVmYXVsdEVzY2FwZSA9IFsmXSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVz
Y2FwZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE1LDEwICsxMTcsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAh
PSBjYW5kaWRhdGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIW5vZGUtPnVubGlua2VkT3BlcmFuZCgpLmlzVG1wKCksICJX
ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBhIHRtcCByZWZlcnJpbmcgdG8gYW4gYXJndW1lbnRz
IG9iamVjdC4iKTsKICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4Owot
ICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+dW5saW5r
ZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkpKQotICAgICAgICAgICAgICAgICAgICByZWxl
dmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICAgICAgICAgIGlmICghcmVsZXZhbnRMb2NhbHMuY29udGFpbnMobm9kZS0+
dW5saW5rZWRMb2NhbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMuYXBw
ZW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrVmFyYXJnczoKQEAgLTEzOSwxNCAr
MTQwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzYXdFc2NhcGUgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBpZiAoc2F3RXNj
YXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhub2RlLCBjYW5kaWRhdGUpKQogICAg
ICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAtMTU3LDcgKzE1
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAg
ICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUtPmNoaWxkMigpID09IGNh
bmRpZGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwg
IlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNjcsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNh
bmRpZGF0ZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNMb2FkZWRGcm9tKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlm
IChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjI2LDcgKzIy
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXZhbGlkR2V0QnlPZmZzZXQpIHsKICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIGJ1dHRlcmZseSA6IGNhbmRpZGF0ZUJ1dHRlcmZsaWVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVzZXMobm9kZSwgYnV0dGVyZmx5
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBCdXR0ZXJmbHkgZXNj
YXBlZCBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCArIDEpLAotICAgICAgICAgICAgICAgIFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwgb3BlcmFuZCwg
IiB3aGlsZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAiLCBsaXN0RHVtcChyZWxldmFudExvY2Fscyks
ICJcbiIpOworICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxpbmcgIiwg
cmVnLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJlbGV2YW50TG9j
YWxzKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWxldmFudExvY2Fscy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQgPT0gcmVsZXZhbnRMb2NhbHNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZWxldmFudExvY2Fsc1tpXSA9PSByZWcpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxldmFudExvY2Fsc1tpLS1dID0gcmVsZXZhbnRMb2NhbHMubGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzLnJlbW92ZUxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlckluZGV4ID0gbm9kZUluZGV4OwpAQCAt
MjQ3LDcgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgaWYg
KERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIlNlbGVjdGVkIGxhc3RVc2VySW5kZXggPSAiLCBsYXN0VXNlckluZGV4LCAiLCAi
LCBibG9jay0+YXQobGFzdFVzZXJJbmRleCksICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8g
V2UncmUgc3RpbGwgaW4gYnVzaW5lc3MuIERldGVybWluZSBpZiBiZXR3ZWVuIHRoZSBjYW5kaWRh
dGUgYW5kIHRoZSBsYXN0IHVzZXIgdGhlcmUgaXMgYW55CkBAIC0yNjMsMTYgKzI2MywxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtlZE9wZXJh
bmQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGlu
Z1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5vcGVyYW5kKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0y
ODAsOCArMjgwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+b3BlcmFuZCgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUtPmxvY2FsKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJl
bmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMjk3LDEyICsyOTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlk
YXRlLCBoZWFwLm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIHJlZykpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9lc0ludGVyZmVyZSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAg
ICAgICAgICAgICAgIGlmIChkb2VzSW50ZXJmZXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQ
aGFzZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEludGVyZmVyZW5jZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTMxMCw3ICszMTEsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gbWFrZSB0aGlzIHdvcmsuCi0g
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIFdpbGwgZG8gZm9y
d2FyZGluZyFcbiIpOwogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAKQEAgLTM0
MCwxNiArMzQxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGNoYW5nZSBhbnl0aGluZyB3aXRoIHRoZXNlLgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkgIT0gY2FuZGlkYXRlKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0lkZW50aXR5T24oZW1pdENvZGVUb0dldEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNl
dCwgY2FuZGlkYXRlLCBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRy
dWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAg
ICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRz
Q2hpbGQoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
ICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDJhYzJlZTM5YjRjY2FkMzA4MTI1YjRlNmVjYzg4YTg3
YzdkMTc5ZDguLjhlYmZmYjQzNWVkNGRiZjYwMmJkNjJhZWQ0YzM0MzJlYTVhODI5MDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAKQEAgLTMxLDcgKzMxLDggQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgIDogbV9wcmVkaWN0
aW9uKFNwZWNOb25lKQorICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQorICAgICwgbV9wcmVkaWN0aW9uKFNw
ZWNOb25lKQogICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAs
IG1fZmxhZ3MoMCkKICAgICAsIG1fc2hvdWxkTmV2ZXJVbmJveChmYWxzZSkKQEAgLTQ0LDEwICs0
NSwxMCBAQCBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgY2xl
YXJWb3RlcygpOwogfQogCi1WYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShP
cGVyYW5kIG9wZXJhbmQpCi0gICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCitWYXJpYWJsZUFj
Y2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCisgICAg
OiBtX2xvY2FsKGxvY2FsKQorICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICwgbV9h
cmd1bWVudEF3YXJlUHJlZGljdGlvbihTcGVjTm9uZSkKLSAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNlKQogICAg
ICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQpAQCAtODYsNyArODcsNyBA
QCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5n
VG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFy
Z3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRz
LgotICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChsb2NhbCgpLmlzQXJn
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBJZiB0aGUg
dmFyaWFibGUgaXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CkBA
IC0xMjAsNyArMTIxLDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnRhbGx5Vm90ZXNGb3JT
aG91bGRVc2VEb3VibGVGb3JtYXQoKQogewogICAgIEFTU0VSVChpc1Jvb3QoKSk7CiAgICAgICAg
IAotICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVyVW5ib3goKQor
ICAgIGlmIChsb2NhbCgpLmlzQXJndW1lbnQoKSB8fCBzaG91bGROZXZlclVuYm94KCkKICAgICAg
ICAgfHwgKGZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUluZGV4KSkKICAgICAgICAg
cmV0dXJuIERGRzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShtX2RvdWJsZUZvcm1hdFN0YXRlLCBO
b3RVc2luZ0RvdWJsZUZvcm1hdCk7CiAgICAgCkBAIC0xNzUsNyArMTc2LDcgQEAgYm9vbCBWYXJp
YWJsZUFjY2Vzc0RhdGE6OmNvdWxkUmVwcmVzZW50SW50NTJJbXBsKCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIC8vIFdlIHB1bnQgZm9yIG1hY2hpbmUgYXJndW1lbnRzLgotICAg
IGlmIChvcGVyYW5kKCkuaXNBcmd1bWVudCgpKQorICAgIGlmIChtX2xvY2FsLmlzQXJndW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRoZSBhcmd1bWVudC1hd2Fy
ZSBwcmVkaWN0aW9uIC0tIHdoaWNoIG1lcmdlcyBhbGwgb2YgYW4gKGlubGluZWQgb3IgbWFjaGlu
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCmluZGV4IGJlMmZiNTQwMTM1MjY1NWI5YzdhY2IxM2JkYWVhNzU1NzNmY2VmZjkuLjFkMzg5
MmY5ZWMwOWNiYTIwNDNmYTI1NGU2MDk0MjMyMDE0YTI4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaApAQCAtNDgsMTIgKzQ4LDEy
IEBAIGNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YSA6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVB
Y2Nlc3NEYXRhPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFyaWFibGVBY2Nlc3NEYXRh
KTsKIHB1YmxpYzoKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoT3BlcmFuZCk7CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBs
b2NhbCk7CiAgICAgCi0gICAgT3BlcmFuZCBvcGVyYW5kKCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3BlcmFuZCA9PSBmaW5kKCktPm1fb3Bl
cmFuZCk7Ci0gICAgICAgIHJldHVybiBtX29wZXJhbmQ7CisgICAgICAgIEFTU0VSVChtX2xvY2Fs
ID09IGZpbmQoKS0+bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xvY2FsOwogICAgIH0KICAg
ICAKICAgICBWaXJ0dWFsUmVnaXN0ZXImIG1hY2hpbmVMb2NhbCgpCkBAIC0yMDgsMTAgKzIwOCwx
MCBAQCBwcml2YXRlOgogICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNv
ZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCiAgICAgLy8gdXNhZ2UgZm9yIHZhcmlh
YmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KIAorICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX2xvY2FsOworICAgIFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb247CiAgICAgU3BlY3VsYXRlZFR5cGUgbV9hcmd1bWVudEF3
YXJlUHJlZGljdGlvbjsKLSAgICBPcGVyYW5kIG1fb3BlcmFuZDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9tYWNoaW5lTG9jYWw7CiAgICAgTm9kZUZsYWdzIG1fZmxhZ3M7CiAKICAgICBib29sIG1f
c2hvdWxkTmV2ZXJVbmJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCmluZGV4IDViMmMxZWU5MDliNTQ4ZjM5ODI3MGM0M2JkMzZlZDcyZTNmOWNm
YmIuLjI4ZTQzN2ZkNTFmZWE0OTY5ZWI0OGVjZjBjMDUwOGYwYTM3ZGY4MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcApAQCAtNTksMTEgKzU5
LDExIEBAIHZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICBvdXQucHJpbnQoIkRlYXRoKCIsIGlkKCksICIpIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwgaWQo
KSwgIiwgIiwgb3BlcmFuZCgpLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIk1vdkhpbnQoIiwg
aWQoKSwgIiwgIiwgYnl0ZWNvZGVSZWdpc3RlcigpLCAiKSIpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFNldExvY2FsRXZlbnQ6CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICJT
ZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3RlcigpLCAiIC0+IGJ5dGVjb2RlOiIsIG9w
ZXJhbmQoKSwKKyAgICAgICAgICAgICJTZXRMb2NhbChtYWNoaW5lOiIsIG1hY2hpbmVSZWdpc3Rl
cigpLCAiIC0+IGJ5dGVjb2RlOiIsIGJ5dGVjb2RlUmVnaXN0ZXIoKSwKICAgICAgICAgICAgICIs
ICIsIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpLCAiKSIpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnQuaAppbmRleCBjMWY1NGJhNGZiZGNhYWE1YTFkOWE1ZWRjMWFjNDgxMzhkMzRlM2ZmLi4y
MDYwZDRhMmZkMjcyMjNkZDZmNjk5YzZkYmFkNmQyMjQ2N2M5ODM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaApAQCAtNjgsMTAgKzY4LDYgQEAgZW51
bSBWYXJpYWJsZUV2ZW50S2luZCA6IHVpbnQ4X3QgewogfTsKIAogdW5pb24gVmFyaWFibGVSZXBy
ZXNlbnRhdGlvbiB7Ci0gICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbigpIAotICAgICAgICA6IG9w
ZXJhbmQoKSAKLSAgICB7IH0KLQogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcjsKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQpAQCAtODAsNyArNzYsNyBAQCB1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKICAgICB9IHBhaXI7
CiAjZW5kaWYKLSAgICBPcGVyYW5kIG9wZXJhbmQ7CisgICAgaW50MzJfdCB2aXJ0dWFsUmVnOwog
fTsKIAogY2xhc3MgVmFyaWFibGVFdmVudCB7CkBAIC0xNjYsNyArMTYyLDcgQEAgcHVibGljOgog
ICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlkID0gaWQuYml0cygpOwog
ICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uOwotICAgICAgICBy
ZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyOworICAgICAgICByZXByZXNl
bnRhdGlvbi52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpOwogICAgICAgICBl
dmVudC5tX2tpbmQgPSBraW5kOwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE4NSwxMyArMTgx
LDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc2V0
TG9jYWwoCi0gICAgICAgIE9wZXJhbmQgYnl0ZWNvZGVPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
bWFjaGluZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBi
eXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKICAgICAgICAgV2hpY2hUeXBl
IHdoaWNoOwogICAgICAgICB3aGljaC52aXJ0dWFsUmVnID0gbWFjaGluZVJlZy5vZmZzZXQoKTsK
ICAgICAgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbjsKLSAgICAgICAg
cmVwcmVzZW50YXRpb24ub3BlcmFuZCA9IGJ5dGVjb2RlT3BlcmFuZDsKKyAgICAgICAgcmVwcmVz
ZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVnLm9mZnNldCgpOwogICAgICAgICBldmVu
dC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50OwogICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBm
b3JtYXQ7CiAgICAgICAgIGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKQEAgLTE5OSwx
MyArMTk1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE1pbmlmaWVkSUQgaWQsIE9wZXJhbmQg
Ynl0ZWNvZGVSZWcpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChNaW5pZmllZElE
IGlkLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWcpCiAgICAgewogICAgICAgICBWYXJpYWJs
ZUV2ZW50IGV2ZW50OwogICAgICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLmlk
ID0gaWQuYml0cygpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVSZWc7CisgICAg
ICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSBieXRlY29kZVJlZy5vZmZzZXQoKTsKICAg
ICAgICAgZXZlbnQubV9raW5kID0gTW92SGludEV2ZW50OwogICAgICAgICBldmVudC5tX3doaWNo
ID0gV1RGTW92ZSh3aGljaCk7CiAgICAgICAgIGV2ZW50Lm1fcmVwcmVzZW50YXRpb24gPSBXVEZN
b3ZlKHJlcHJlc2VudGF0aW9uKTsKQEAgLTI2OSwxMyArMjY1LDEzIEBAIHB1YmxpYzoKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3BpbGxSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOwotICAgICAgICBy
ZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5nZXQoKS5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwor
ICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG1fcmVwcmVzZW50YXRpb24uZ2V0KCkudmly
dHVhbFJlZyk7CiAgICAgfQotCi0gICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKKyAgICAKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVSZWdpc3RlcigpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQobV9raW5kID09IFNldExvY2FsRXZlbnQgfHwgbV9raW5kID09IE1vdkhpbnRFdmVu
dCk7Ci0gICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQ7CisgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRhdGlvbi5nZXQoKS52aXJ0dWFs
UmVnKTsKICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWdpc3Rlcigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcAppbmRleCA4Y2Y3MDgwNDAzYThlZmZkOWIyMjFhMzVhZjhkMjFkZTMyYjVk
ZGExLi40NTI2ZDM5YmIwOTRjNGI4NjZlNjdlZDNlMmVlMWI0ODk2YWJiNzI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAK
QEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25z
dCBWYXJpYWJsZUV2ZW50JiBldmVudCkKIHsKICAgICBkYXRhTG9nRigic2VxIyV1OiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzaXplKCkpKTsKICAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUo
KSk7Ci0gICAgZGF0YUxvZ0xuKCIgIik7CisgICAgZGF0YUxvZ0YoIiAiKTsKIH0KIAogbmFtZXNw
YWNlIHsKQEAgLTExOSwxMiArMTE5LDEwIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OnJlY29uc3RydWN0KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBoLAogICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVyaWVzLCBWZWN0b3I8VW5kZWZpbmVkT3BlcmFu
ZFNwYW4+KiB1bmRlZmluZWRPcGVyYW5kU3BhbnMpIGNvbnN0CiB7Ci0gICAgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpERkdKSVQpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOwogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOwot
ICAgIHVuc2lnbmVkIG51bVRtcHM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnZh
bGlkSW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgdW5z
aWduZWQgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgYm9vbCBmaXJzdFVuZGVm
aW5lZElzQXJndW1lbnQgPSBmYWxzZTsKQEAgLTEzMiw0MiArMTMwLDM3IEBAIHVuc2lnbmVkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgIGF1dG8gZmx1c2hVbmRlZmluZWRP
cGVyYW5kU3BhbiA9IFsmXSAodW5zaWduZWQgaSkgewogICAgICAgICBpZiAoZmlyc3RVbmRlZmlu
ZWQgPT0gaW52YWxpZEluZGV4KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgZmly
c3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGZpcnN0VW5kZWZpbmVk
KS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKLSAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB2
YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkgLSAxKS52aXJ0dWFsUmVnaXN0ZXIoKS5v
ZmZzZXQoKTsKKyAgICAgICAgaW50IGZpcnN0T2Zmc2V0ID0gdmFsdWVSZWNvdmVyaWVzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGZpcnN0VW5kZWZpbmVkKS5vZmZzZXQoKTsKKyAgICAgICAgaW50
IGxhc3RPZmZzZXQgPSB2YWx1ZVJlY292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSAt
IDEpLm9mZnNldCgpOwogICAgICAgICBpbnQgbWluT2Zmc2V0ID0gc3RkOjptaW4oZmlyc3RPZmZz
ZXQsIGxhc3RPZmZzZXQpOwogICAgICAgICB1bmRlZmluZWRPcGVyYW5kU3BhbnMtPmFwcGVuZCh7
IGZpcnN0VW5kZWZpbmVkLCBtaW5PZmZzZXQsIGkgLSBmaXJzdFVuZGVmaW5lZCB9KTsKICAgICAg
ICAgZmlyc3RVbmRlZmluZWQgPSBpbnZhbGlkSW5kZXg7CiAgICAgfTsKICAgICBhdXRvIHJlY29y
ZFVuZGVmaW5lZE9wZXJhbmQgPSBbJl0gKHVuc2lnbmVkIGkpIHsKICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBzZXBhcmF0ZSB0aGUgc3BhbiBvZiBhcmd1bWVudHMgZnJvbSB0aGUgc3BhbiBvZiBsb2Nh
bHMgZXZlbiBpZiB0aGV5IGhhdmUgYWRqYWNlbnQgb3BlcmFuZHMgaW5kZXhlcy4KLSAgICAgICAg
aWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRleCAmJiBmaXJzdFVuZGVmaW5lZElzQXJn
dW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS5pc0FyZ3VtZW50KCkp
CisgICAgICAgIGlmIChmaXJzdFVuZGVmaW5lZCAhPSBpbnZhbGlkSW5kZXggJiYgZmlyc3RVbmRl
ZmluZWRJc0FyZ3VtZW50ICE9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpKQogICAgICAg
ICAgICAgZmx1c2hVbmRlZmluZWRPcGVyYW5kU3BhbihpKTsKIAogICAgICAgICBpZiAoZmlyc3RV
bmRlZmluZWQgPT0gaW52YWxpZEluZGV4KSB7CiAgICAgICAgICAgICBmaXJzdFVuZGVmaW5lZCA9
IGk7Ci0gICAgICAgICAgICBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgPSB2YWx1ZVJlY292ZXJp
ZXMub3BlcmFuZEZvckluZGV4KGkpLmlzQXJndW1lbnQoKTsKKyAgICAgICAgICAgIGZpcnN0VW5k
ZWZpbmVkSXNBcmd1bWVudCA9IHZhbHVlUmVjb3Zlcmllcy5pc0FyZ3VtZW50KGkpOwogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKCk7Ci0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlu
bGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG51bVZhcmlhYmxlcyA9IGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkgKyBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkudG9Mb2NhbCgpICsgMTsKLSAgICAgICAgbnVtVG1wcyA9IGNvZGVCbG9jay0+bnVtVG1wcygp
ICsgaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQ7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
cklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpLT5udW1DYWxsZWVMb2NhbHMoKSArIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAx
OworICAgIGVsc2UKICAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOwotICAgICAgICBudW1UbXBzID0gYmFzZWxpbmVDb2RlQmxvY2stPm51
bVRtcHMoKTsKLSAgICB9CiAgICAgCiAgICAgLy8gQ3Jhenkgc3BlY2lhbCBjYXNlOiBpZiB3ZSdy
ZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFyZ3VtZW50IGNoZWNrCiAgICAg
Ly8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVzIGFyZSBhbHJlYWR5IHNldCB1
cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCiAgICAgLy8gcmVmbGVjdCB0aGlzLgogICAgIGlmICgh
aW5kZXgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0bXBzIGhlcmUgYmVjYXVzZSB0
aGV5IGNhbid0IGJlIHVzZWQgeWV0LgotICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVz
LCAwKTsKKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soCi0gICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKS52
aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIodmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSksIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bVZhcmlhYmxlczsKICAgICB9CkBAIC0x
NzgsMTMgKzE3MSwxMiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVj
dCgKICAgICAgICAgc3RhcnRJbmRleC0tOwogICAgIAogICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEg
bW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KLSAgICBP
cGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIG51bVZhcmlhYmxlcywgbnVtVG1wcyk7CisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+
IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgaS0tOykKICAg
ICAgICAgb3BlcmFuZFNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAg
IEhhc2hNYXA8TWluaWZpZWRJRCwgTWluaWZpZWRHZW5lcmF0aW9uSW5mbz4gZ2VuZXJhdGlvbklu
Zm9zOwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7
CiAgICAgICAgIGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50ID0gYXQoaSk7Ci0gICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGV2ZW50ICIsIGV2ZW50KTsKICAgICAgICAg
c3dpdGNoIChldmVudC5raW5kKCkpIHsKICAgICAgICAgY2FzZSBSZXNldDoKICAgICAgICAgICAg
IC8vIG5vdGhpbmcgdG8gZG8uCkBAIC0yMDYsMjMgKzE5OCwyMSBAQCB1bnNpZ25lZCBWYXJpYWJs
ZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgTW92SGludEV2ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3Vy
Y2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5k
U291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQo
KSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0
ZWNvZGVSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVy
YW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFsdWVTb3VyY2UoZXZlbnQuaWQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCi0gICAg
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZh
bHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5k
YXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5oYXNPcGVyYW5k
KGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJj
ZXMuc2V0T3BlcmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCksIFZhbHVlU291cmNlOjpmb3JE
YXRhRm9ybWF0KGV2ZW50Lm1hY2hpbmVSZWdpc3RlcigpLCBldmVudC5kYXRhRm9ybWF0KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgc291cmNlczogIiwgb3Bl
cmFuZFNvdXJjZXMpOwogICAgIAogICAgIC8vIFN0ZXAgMzogQ29tcHV0ZSB2YWx1ZSByZWNvdmVy
aWVzIQotICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KE9wZXJh
bmRzTGlrZSwgb3BlcmFuZFNvdXJjZXMpOworICAgIHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsr
aSkgewogICAgICAgICBWYWx1ZVNvdXJjZSYgc291cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CiAg
ICAgICAgIGlmIChzb3VyY2UuaXNUcml2aWFsbHlSZWNvdmVyYWJsZSgpKSB7CkBAIC0yNDAsNyAr
MjMwLDYgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAg
ICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5pZCgpKTsKICAgICAgICAg
TWluaWZpZWRHZW5lcmF0aW9uSW5mbyBpbmZvID0gZ2VuZXJhdGlvbkluZm9zLmdldChzb3VyY2Uu
aWQoKSk7CiAgICAgICAgIGlmICghaW5mby5hbGl2ZSkgewotICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFsdWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChp
KSwgIiBpcyBkZWFkLiIpOwogICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUg
PT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICAgICAgICAgIHJlY29y
ZFVuZGVmaW5lZE9wZXJhbmQoaSk7CkBAIC0yNDgsNyArMjM3LDYgQEAgdW5zaWduZWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KIAogICAgICAgICBpZiAodHJ5
VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgbm9kZSkpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJPcGVyYW5kICIsIHZhbHVlUmVjb3Zlcmllcy5v
cGVyYW5kRm9ySW5kZXgoaSksICIgaXMgY29uc3RhbnQuIik7CiAgICAgICAgICAgICBpZiAoc3R5
bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgbm9kZS0+Y29uc3RhbnQoKSA9PSBqc1VuZGVmaW5l
ZCgpKQogICAgICAgICAgICAgICAgICAgICByZWNvcmRVbmRlZmluZWRPcGVyYW5kKGkpOwpAQCAt
Mjc4LDcgKzI2Niw3IEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0
KAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQotICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKGluZm8udS5vcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpLCBpbmZvLmZvcm1hdCk7CisgICAgICAgICAgICBWYWx1ZVJlY292
ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZv
LnUudmlydHVhbFJlZyksIGluZm8uZm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHN0eWxlID09IFJl
Y29uc3RydWN0aW9uU3R5bGU6OlNlcGFyYXRlZCkKICAgICAgICAgZmx1c2hVbmRlZmluZWRPcGVy
YW5kU3BhbihvcGVyYW5kU291cmNlcy5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAppbmRleCBlOWU0M2FiZmVjNDg1ZmVj
N2U2NjMxNTFjMWMyMmVjNTE4OTc0MTNjLi4wMTU3MzAwN2VkZGRkNzBmMzFkMTdhYzBkOTlmNzhl
YmY1ZWE2ZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaApAQCAtNDIsMTIgKzQyLDkgQEAgc3RydWN0IFVuZGVmaW5lZE9wZXJh
bmRTcGFuIHsKIH07CiAKIGNsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9y
PFZhcmlhYmxlRXZlbnQ+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwogcHVibGljOgogICAgIHZvaWQgYXBwZW5kQW5kTG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50KQogICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBsb2dFdmVu
dChldmVudCk7CiAgICAgICAgIGFwcGVuZChldmVudCk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDdjYTgyNWQ5NTlk
NTdkODM0NWI0NTQyOGIxNTVhYmVjODYwNWMzMGMuLmMxNTFmMjE3ZGVlYzE4NjdlNjhmNTVlMmNi
NGEwN2Y5NTE5NjIwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKQEAgLTE5Miw3ICsxOTIsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAg
ICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENv
bnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgIGNhc2UgQnJhbmNoOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
Y3BwCmluZGV4IGMwMDRmYWNjYzFhZDA1ZDM2Y2VkYmVkZjk2NzgyYWFiN2RjYjk4MzMuLjMwODBk
YzM0NTA5YzczMzMyNGI4MTQzZDJhOTU0ZjA4ZWRhZjEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKQEAgLTMxLDcgKzMx
LDggQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogRm9yT1NSRW50cnlKSVRD
b2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQotICAgIDogbV9lbnRyeUZhaWx1cmVDb3VudCgwKQor
ICAgIDogbV9ieXRlY29kZUluZGV4KFVJTlRfTUFYKQorICAgICwgbV9lbnRyeUZhaWx1cmVDb3Vu
dCgwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKaW5kZXggYjdjYjEwMzI2ZDcwNjQ0NWU1Mzg3MDYxYmM3NWE2OGQ4N2NiZTE1Yi4uMGU0
YjM0YTFiNzk3ZDQ4YTcwMmQ0YWVmMjI0NGU3YWQ5ZjM0YjQ4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jbGVhclN0YWNrRnJhbWUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwLCBjb2RlLmZyYW1lU2l6ZSgpKTsKIAogICAgICAgICAgICAgICAgICAg
ICBqaXQuZW1pdFNhdmUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2Nr
LCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY29kZUJsb2NrLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNhdGNoRW50cnlwb2ludEluZGV4IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRJ
bmRleFRvQ2F0Y2hCeXRlY29kZUluZGV4LmtleXMoKSkgewpAQCAtMjc0LDcgKzI3NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIENvZGVCbG9jayB0
byBoYXZlIGEgd2VhayBwb2ludGVyIHRvIGl0c2VsZiBiZWNhdXNlCiAgICAgICAgIC8vIHRoYXQg
d291bGQgY2F1c2UgaXQgdG8gYWx3YXlzIGdldCBjb2xsZWN0ZWQuCi0gICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2Nr
KCkpKSwgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSkpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGNvZGVCbG9jaygpKSksIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSk7CiAKICAgICAgICAgLy8gU3RhY2sgT3ZlcmZsb3cgQ2hlY2suCiAgICAgICAgIHVu
c2lnbmVkIGV4aXRGcmFtZVNpemUgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4
aXQoKSAqIHNpemVvZihSZWdpc3Rlcik7CkBAIC0zNTUsNyArMzU1LDcgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICAvLyBDaGVjayBBcmd1bWVudHMuCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5jbGVhcigpOwotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBP
cGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDAsIDAp
OworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxBdmFp
bGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewog
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0K
ICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1
ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKQEAgLTEyODQsOSArMTI4NCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbEV2YWw6CiAgICAgICAgICAgICBjb21waWxlQ2Fs
bEV2YWwoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6
Ci0gICAgICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFy
Z3MoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1OSw3ICsxOTU2LDcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KAogICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JF
bnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOwotICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkT3Bl
cmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpLnRvTG9jYWwoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExv
Y2FsKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRj
aExvY2FsKCkKQEAgLTE5NzgsNyArMTk3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxl
R2V0U3RhY2soKQogICAgIHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2Rl
LT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0
YXRlLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKICAgICAgICAgCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCksIGRhdGEtPmZv
cm1hdCk7CiAgICAgICAgIApAQCAtNzkzOCwxMyArNzkzNSwxMyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVNldENhbGxl
ZSgpCiAgICAgewogICAgICAgICBhdXRvIGNhbGxlZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihWaXJ0dWFsUmVn
aXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICBtX291dC5zdG9yZVB0cihj
YWxsZWUsIHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTc5NTks
NyArNzk1Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0
SW50MzIobV9ub2RlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcGF5bG9hZEZvcihW
aXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KSk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdl
dFNjb3BlKCkKQEAgLTk1NTQsNTEgKzk1NTEsNTEgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNW
YWx1ZShwYXRjaHBvaW50KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlVmFyYXJnc0xl
bmd0aCgpCisgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9u
b2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93
SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOwotCisgICAgICAgIExWYWx1ZSBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAogICAgICAg
ICBMVmFsdWUgbGVuZ3RoID0gdm1DYWxsKAogICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNp
emVPZlZhcmFyZ3MsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGpzQXJndW1lbnRzLAogICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKLQorICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVm
ZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAvLyBm
cm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3VidGx5
IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4gVGhl
IGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0aGUg
b3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAorICAg
ICAgICAKICAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVu
Z3RoLCBtX291dC5pbnQzMk9uZSk7CiAKLSAgICAgICAgc2V0SW50MzIobGVuZ3RoSW5jbHVkaW5n
VGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQotICAgIHsKLSAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAgICAgICAgTFZhbHVlIGpzQXJndW1l
bnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmFyZ3VtZW50c0NoaWxkKCkpOwotICAgICAgICBMVmFs
dWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAKICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBu
b1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5iaXRPcihtX291dC5pc1plcm8z
MihsZW5ndGhJbmNsdWRpbmdUaGlzKSwgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywg
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKSk7IAorICAgICAgICAgICAgbV9vdXQuYWJv
dmUobGVuZ3RoLCBsZW5ndGhJbmNsdWRpbmdUaGlzKSk7CiAKKyAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAg
ICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRh
dGEtPmxpbWl0KSkpOworICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNs
dWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICAKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVy
YXRpb25Mb2FkVmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgY29tcHV0YXRpb24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9k
VmFyYXJncyBqdXN0IHRvb2sgYSBwb2ludGVyIGluc3RlYWQKICAgICAgICAgLy8gb2YgYSBWaXJ0
dWFsUmVnaXN0ZXIsIHdlIHdvdWxkbid0IGhhdmUgdG8gZG8gdGhpcy4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTY2MAogICAgICAgICBMVmFs
dWUgbWFjaGluZVN0YXJ0ID0gbV9vdXQubFNocigKLSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAorICAgICAg
ICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0Lm9mZnNldCgpKS52
YWx1ZSgpLCBtX2NhbGxGcmFtZSksCiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7
CiAgICAgICAgIAogICAgICAgICB2bUNhbGwoCiAgICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25M
b2FkVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0
LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMy
KGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5j
b25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAgICAgICAgICAgIGxlbmd0aCwg
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX25v
ZGUtPmFyZ3VtZW50c0NoaWxkKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1f
bm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxk
MSgpKSB7CisgICAgICAgICAgICBOb2RlKiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5
V2l0aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8
IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKSB7CiAgICAgICAgICAgICAgICAgY29t
cGlsZUZvcndhcmRWYXJhcmdzV2l0aFNwcmVhZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTk2MDcsMjEgKzk2MDQsNTAgQEAgcHJpdmF0ZToKIAogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hp
bGQoKSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+YXJndW1lbnRzQ2hp
bGQoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAobV9u
b2RlLT5jaGlsZDEoKSkKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hp
bGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBkYXRhLT5vZmZzZXQ7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBudWxs
cHRyOyAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBudWxscHRyOworICAg
ICAgICBBcmd1bWVudHNMZW5ndGggYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3Ro
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGguaXNLbm93bikg
eworICAgICAgICAgICAgdW5zaWduZWQga25vd25MZW5ndGggPSBhcmd1bWVudHNMZW5ndGgua25v
d247CisgICAgICAgICAgICBpZiAoa25vd25MZW5ndGggPj0gZGF0YS0+b2Zmc2V0KQorICAgICAg
ICAgICAgICAgIGtub3duTGVuZ3RoID0ga25vd25MZW5ndGggLSBkYXRhLT5vZmZzZXQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSAwOworICAgICAgICAg
ICAgbGVuZ3RoID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCk7CisgICAgICAgICAgICBs
ZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuY29uc3RJbnQzMihrbm93bkxlbmd0aCArIDEpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBz
YW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFzIHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5h
bWljIG9wZXJhdGlvbnMuCisgICAgICAgICAgICBpZiAoIWRhdGEtPm9mZnNldCkKKyAgICAgICAg
ICAgICAgICBsZW5ndGggPSBhcmd1bWVudHNMZW5ndGgudmFsdWU7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3
QmxvY2soKTsKKworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxsZXJPckVxdWFs
TGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUo
YXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpLCB1
bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0xhcmdlciwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5vZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbV9vdXQucGhpKEludDMyLCBz
bWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2VyTGVuZ3RoUmVzdWx0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3Ro
LCBtX291dC5jb25zdEludDMyKDEpKTsKKyAgICAgICAgfQogCi0gICAgICAgIExWYWx1ZSBsZW5n
dGggPSBtX291dC5zdWIobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuaW50MzJPbmUpOwogICAg
ICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwKICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5z
dG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50
KSk7CiAgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IGRhdGEtPm9mZnNldDsKICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRz
U3RhcnQoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7CiAgICAgICAg
IExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1
ZSgpOwogCkBAIC05NjgwLDIwICs5NzA2LDY1IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gcGVyZm9ybSB0aGUgc2FtZSBsb2dpY2FsIG9wZXJhdGlvbiBhcyB0aGUgY29kZSBhYm92
ZSwgYnV0IHRocm91Z2ggZHluYW1pYyBvcGVyYXRpb25zLgogICAgICAgICBpZiAoIW51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c0xlbmd0aC52YWx1
ZTsKLSAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mQXJndW1lbnRzVG9T
a2lwIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVDMyX01JTikpOwogCi0gICAgICAgIExWYWx1
ZSBmaXhlZExlbmd0aCA9IG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
aXNMYXJnZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNtYWxs
ZXJPckVxdWFsTGVuZ3RoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShhcmd1bWVu
dHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
KSwgdW5zdXJlKGlzTGFyZ2VyKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFyZ2VyLCBjb250aW51YXRpb24p
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZXJMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCi0gICAgICAgIHJldHVybiBtX291dC5zZWxlY3QobV9vdXQuZ3JlYXRlclRoYW5PckVxdWFs
KGZpeGVkTGVuZ3RoLCBtX291dC5pbnQzMlplcm8pLCBmaXhlZExlbmd0aCwgbV9vdXQuaW50MzJa
ZXJvLCBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6UHJlZGljdGFibGUpOworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBo
aShJbnQzMiwgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQsIGxhcmdlckxlbmd0aFJlc3VsdCk7
CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCkKICAg
ICB7Ci0gICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5u
b2RlKCk7CisgICAgICAgIEhhc2hNYXA8SW5saW5lQ2FsbEZyYW1lKiwgTFZhbHVlLCBXVEY6OkRl
ZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLCBXVEY6Ok51bGxhYmxlSGFzaFRyYWl0
czxJbmxpbmVDYWxsRnJhbWUqPj4gY2FjaGVkU3ByZWFkTGVuZ3RoczsKKworICAgICAgICBOb2Rl
KiBhcmd1bWVudHMgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQgfHwgYXJn
dW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlciB8fCBhcmd1bWVudHMtPm9wKCkg
PT0gUGhhbnRvbVNwcmVhZCk7CiAKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZT
dGF0aWNBcmd1bWVudHMgPSAwOworICAgICAgICBWZWN0b3I8TFZhbHVlLCAyPiBzcHJlYWRMZW5n
dGhzOworCisgICAgICAgIGF1dG8gY29sbGVjdEFyZ3VtZW50Q291bnQgPSByZWN1cnNhYmxlTGFt
YmRhKFsmXShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCkgLT4gdm9pZCB7CisgICAgICAgICAgICBp
ZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKKyAgICAgICAgICAgICAgICBzZWxm
KHRhcmdldC0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbU5ld0Fy
cmF5V2l0aFNwcmVhZCkgeworICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0g
dGFyZ2V0LT5iaXRWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGFyZ2V0LT5udW1DaGlsZHJlbigpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJpdFZlY3Rvci0+Z2V0KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZihtX2dy
YXBoLnZhckFyZ0NoaWxkKHRhcmdldCwgaSkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZlN0YXRpY0FyZ3VtZW50czsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZl
cikgeworICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGljQXJndW1lbnRzICs9IHRhcmdldC0+
Y2FzdE9wZXJhbmQ8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVCh0YXJn
ZXQtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0YXJnZXQtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0g
dGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgc3ByZWFkTGVu
Z3Rocy5hcHBlbmQoY2FjaGVkU3ByZWFkTGVuZ3Rocy5lbnN1cmUoaW5saW5lQ2FsbEZyYW1lLCBb
Jl0gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXRTcHJlYWRMZW5ndGhGcm9t
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
OworICAgICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgY29sbGVjdEFyZ3VtZW50Q291bnQoYXJndW1lbnRzKTsKKyAgICAgICAgTFZhbHVlIGxlbmd0
aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKDEgKyBudW1iZXJPZlN0YXRpY0FyZ3Vt
ZW50cyk7CisgICAgICAgIGZvciAoTFZhbHVlIGxlbmd0aCA6IHNwcmVhZExlbmd0aHMpCisgICAg
ICAgICAgICBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aEluY2x1ZGluZ1Ro
aXMsIGxlbmd0aCk7CiAKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5s
b2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgc3BlY3VsYXRlKApAQCAtOTcwNCw3ICs5Nzc1LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKIAotICAgICAgICBhdXRvIGZvcndhcmRTcHJlYWQg
PSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmdGFyZ2V0U3RhcnRdKGF1dG8gc2VsZiwgTm9kZSog
dGFyZ2V0LCBMVmFsdWUgc3RvcmVJbmRleCkgLT4gTFZhbHVlIHsKKyAgICAgICAgYXV0byBmb3J3
YXJkU3ByZWFkID0gcmVjdXJzYWJsZUxhbWJkYShbdGhpcywgJmNhY2hlZFNwcmVhZExlbmd0aHMs
ICZ0YXJnZXRTdGFydF0oYXV0byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4
KSAtPiBMVmFsdWUgewogICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tU3By
ZWFkKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmKHRhcmdldC0+Y2hpbGQxKCkubm9kZSgp
LCBzdG9yZUluZGV4KTsKIApAQCAtOTczNiw5ICs5ODA3LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAg
ICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwogCi0gICAgICAgICAgICBhdXRvIG51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwID0gdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwot
ICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gdGhpcy0+Z2V0QXJndW1lbnRzU3RhcnQo
aW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk7Ci0gICAgICAgICAgICBM
VmFsdWUgc3ByZWFkTGVuZ3RoID0gbV9vdXQuemVyb0V4dFB0cihnZXRTcHJlYWRMZW5ndGhGcm9t
SW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAp
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IHRoaXMtPmdldEFyZ3VtZW50c1N0
YXJ0KGlubGluZUNhbGxGcmFtZSwgdGFyZ2V0LT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsK
KyAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGNhY2hl
ZFNwcmVhZExlbmd0aHMuZ2V0KGlubGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBsb29wID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjE5Myw4ICsxMjI2Myw4IEBA
IHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIHBhY2tldCwgbV9oZWFw
cy5TaGFkb3dDaGlja2VuX1BhY2tldF9mcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoMCkpKSwgcGFja2V0LCBtX2hl
YXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3Rv
cmVQdHIobV9vdXQubG9hZFB0cihwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxs
ZWUpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoMCkp
LCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOworICAg
ICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxsZWUp
OwogICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0No
aWNrZW5fUGFja2V0X3Njb3BlKTsKICAgICB9CiAgICAgCkBAIC0xMjI1NSw3ICsxMjMyNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGg7CiAKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgbGVuZ3RoLmtub3duID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICAgICAgICAgIGxlbmd0
aC5rbm93biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OwogICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0cnVlOwogICAgICAgICAgICAgbGVuZ3Ro
LnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgua25vd24pOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTIyODUsNyArMTIzNTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVy
biBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoZnJhbWUtPmNhbGxl
ZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGdldEFyZ3VtZW50
c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCB1bnNpZ25lZCBvZmZzZXQg
PSAwKQpAQCAtMTc1NTAsNyArMTc2MjAsNyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pOwogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0gICAgICAgICAgICB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpOworICAgICAgICAgICAgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8ICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29s
dXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzY1OCw4ICsxNzcyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVz
Y3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZUbXBz
KCkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2Nh
bHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAtMTc3NjQsMTUgKzE3
ODMzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3Zh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXRE
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9s
b2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4u
bW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAgICAgICAgaWYgKGF2
YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwg
ZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxhYmxlOiBvcGVyYW5k
ID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmln
aW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFi
aWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxh
YmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiLCBhdmFpbGFiaWxp
dHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmlnaW4pLmRhdGEoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOwogICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKQEAgLTE4
MDcyLDM5ICsxODE0MSwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYWxyZWFk
eVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIH0K
ICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgT3BlcmFuZCBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNbb3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7CisgICAgICAgIHJldHVy
biBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJhbmRdLCBvZmZzZXQp
OwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgT3BlcmFu
ZCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQg
b3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQs
IFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKExWYWx1ZSBi
YXNlLCBPcGVyYW5kIG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0ZvcihMVmFsdWUgYmFz
ZSwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihiYXNlLCBv
cGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihP
cGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5cGVkUG9pbnRlciBh
ZGRyZXNzRm9yKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIG9mZnNldCk7
CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zm
c2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJh
bmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwg
b3BlcmFuZCwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYWxsRnJhbWUs
IG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1
cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKICAgICB9Ci0gICAgVHlw
ZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRGb3Io
b3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiBwYXlsb2FkRm9yKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZHJl
c3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5cGVkUG9pbnRlciB0
YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoaW50IG9wZXJh
bmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CiAg
ICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAppbmRleCAwOTFl
N2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2Li45MzMxNzcxMGY2ZDA2ODYwOTE5
YmMwMDI1MzEzYTEzMjE5MDQ0OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAg
ICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywgIlxuIik7CiAgICAg
CiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJn
dW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBjYWxsRnJhbWUtPnIo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5zYWZlSlNWYWx1ZSgp
OworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNhZmVKU1ZhbHVlKCk7
CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1ZSA9IHZhbHVlcy5h
cmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3RlZFZhbHVlICYmIHZh
bHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwgIWFyZ3VtZW50KQog
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAppbmRleCAwNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZmZGFiYTRmLi4wOTk1
OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYxOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCiAgICAgRGF0
YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2
YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51
bWJlck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQogICAgIDogbV9wcm9maWxlRGF0
YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJv
ZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2Fscywg
bnVtYmVyT2ZUbXBzKQorICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9m
TG9jYWxzKQogewogfQogCkBAIC0xMTcsMyArMTE3LDUgQEAgQ29kZUxvY2F0aW9uSnVtcDxKU0lu
dGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayog
ZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5kZXggZmQ3ZjlmMDVi
YzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMi4uZGE4N2NjZjMyNzNmZTRiZTM2MDY4M2I4
YWYzYmJmNTE2ZDYyMjVlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgK
QEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0IHBy
b2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAotICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMsIHVuc2ln
bmVkIG51bWJlck9mVG1wcyk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CiAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8g
dGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8g
SWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdl
J2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuY3BwCmluZGV4IDIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5NTI4NGY1ZTAzOTQu
LjY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI5LDcgKzI5
LDYgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5o
IgotI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM4LDExICszNywxMCBAQAogI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUg
IkZUTFNhdmVSZXN0b3JlLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCkBAIC00NzYsNTIgKzQ3NCwxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0s
IHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAg
c2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCi0gICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKLSAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1
ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1wSW5kZXgoMCkpOwot
ICAgICAgICBWTSogdm1QdHIgPSAmdm07Ci0gICAgICAgIGppdC5wcm9iZShbPV0gKFByb2JlOjpD
b250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBhdXRvIGFkZFNpZGVTdGF0ZSA9IFsmXSAo
Q2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90IHRtcE9mZnNldCkg
ewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlPigpOwotCi0gICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4ID0gaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhOdW1DaGVja3Bv
aW50VG1wczsgKytpKQotICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSB0
bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOwotCi0gICAgICAgICAgICAgICAgdm1QdHItPmFkZENo
ZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7Ci0gICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAg
ICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4g
PSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2Fs
bEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0
Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2Fs
bEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAg
YWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAt
IHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1l
LT50bXBPZmZzZXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWNvZGVPcmln
aW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkKLSAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZy
YW1lLCBieXRlY29kZUluZGV4LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCiAgICAgLy8gTm93
IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGlu
dG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBzbyB3
ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rlc2Ny
aXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgT3BlcmFuZCBvcGVy
YW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7
Ci0KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVz
LnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKIAotICAgICAgICBpZiAob3BlcmFuZC5p
c0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VsaW5l
VmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAgICAgaWYgKHJlZy5pc0xvY2Fs
KCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVn
aXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
aml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVy
YW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7CiAgICAgfQogICAgIAogICAg
IGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCAxMDJjMWU2YTFiZDllYjNiNDcxMzM3NDRmODQz
ZWM2NGQ2M2ExOGY3Li43ZjdjZDM4MzI0OTYxYThmZjRlNDcyNTlhODg0ZGU4NmQ1NjRiMTE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTUwNSw3
ICs1MDUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRl
cmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgLy8gV2UgYWxz
byBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFk
cyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAgICAgICAgICAg
Ly8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVm
ZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0
dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJh
eUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ss
IGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRl
eCBkNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyLi43NDkzM2RjNjA1MTVj
NWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjU1LDM3ICs2NTUsMTUgQEAgTFZhbHVlIE91dHB1dDo6bm90WmVy
bzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0K
IAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCwgU2VsZWN0UHJlZGljdGFiaWxpdHkgcHJlZGljdGFiaWxpdHkpCitMVmFsdWUgT3V0
cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikK
IHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5hc0lu
dDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAgICAgICAgICAgIHJldHVybiB0YWtl
bjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OworICAgICAgICAgICAg
cmV0dXJuIG5vdFRha2VuOwogICAgIH0KLQotICAgIGlmIChwcmVkaWN0YWJpbGl0eSA9PSBTZWxl
Y3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpCi0gICAgICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1
ZSwgbGVmdCwgcmlnaHQpOwotCi0gICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbmV3Qmxv
Y2soKTsKLSAgICBMQmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9IG5ld0Jsb2NrKCk7Ci0gICAg
TEJhc2ljQmxvY2sgcmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKLQotICAgIG1fYmxvY2st
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKLSAgICAgICAgbV9wcm9jLCBCMzo6QnJhbmNoLCBvcmln
aW4oKSwgdmFsdWUsCi0gICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsZWZ0VGFrZW5CbG9jaywgcHJl
ZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJpZ2h0TGlrZWx5ID8gRnJlcXVl
bmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKLSAgICAgICAgRnJlcXVl
bnRlZEJsb2NrKHJpZ2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGlj
dGFiaWxpdHk6OkxlZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsIDogRnJlcXVlbmN5
Q2xhc3M6OlJhcmUpKTsKLQotICAgIExWYWx1ZSBwaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4oKSk7Ci0K
LSAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGxlZnQsIHBoaSk7Ci0gICAgbGVmdFRha2VuQmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhj
b250aW51YXRpb24pKTsKLQotICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNp
bG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkpOwotICAgIHJpZ2h0VGFrZW5C
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBC
Mzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwotCi0gICAgbV9ibG9jayA9IGNvbnRp
bnVhdGlvbjsKLSAgICByZXR1cm4gcGhpOworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5v
dFRha2VuKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChMVmFsdWUgb3BlcmFu
ZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgKaW5kZXggNGMwMmIzNDA4NTE0NmY3ZGYwMjU2MjdkNWZmMzFjNzgxMGQ4
ZmI3Ni4uYzU2YjRlZjdlMDYwZjkzNjJiM2JkY2EwZmQ0NmEwM2FhNTcwY2EyZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
RlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKLSNpbmNsdWRlICJGVExTZWxlY3RQ
cmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMU3dp
dGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpAQCAtMzY2LDcgKzM2NSw3
IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1
ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFs
dWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90
TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNlbGVjdChMVmFsdWUg
dmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuLCBTZWxlY3RQcmVkaWN0YWJpbGl0
eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSk7CisgICAgTFZhbHVlIHNl
bGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKTsKICAgICAK
ICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1bHQuIFVzZSBBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdpdGggYQogICAgIC8vIG5v
bi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3NjAyYWNmZmU0MDQ0NTU1MTAwZWI0NWQ4ZjZhMDMwOWYzNTgx
MWQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotbmFtZXNw
YWNlIEpTQzo6RlRMIHsKLQotZW51bSBjbGFzcyBTZWxlY3RQcmVkaWN0YWJpbGl0eSA6IHVpbnQ4
X3QgewotICAgIC8vIFVzZSB0aGlzIHdoZW4gd2UgZXhwZWN0IGl0IHRvIGJlIHZlcnkgdW5saWtl
bHkgdGhlIGJyYW5jaCBwcmVkaWN0b3Igd2lsbCBiZSBhYmxlIHRvIGd1ZXNzIHdoaWNoIHNpZGUg
b2YgdGhlIHNlbGVjdCB3aWxsIGJlIGNob3Nlbi4gVGhpcyB0ZWxscyBCMyB0byB0cnkgdG8gZW1p
dCB0aGUgc2VsZWN0IGFzIGEgY29uZGl0aW9uYWwgbW92ZSwgd2hpY2ggKHVzdWFsbHkpIGlzIG5v
dCBzcGVjdWxhdGVkIGJ5IHRoZSBDUFUuCi0gICAgTm90UHJlZGljdGFibGUsCi0gICAgLy8gVXNl
IHRoaXMgd2hlbiBpdCdzIHBvc3NpYmxlIGEgYnJhbmNoIHByZWRpY3RvciB3aWxsIGRvIGEgZ29v
ZCBqb2IgZ3Vlc3NpbmcgdGhlIHNlbGVjdGVkIHZhbHVlIGJ1dCB3ZSBkb24ndCBrbm93IGEgcHJp
b3JpIHdoaWNoIHNpZGUgaXMgbW9yZSBsaWtlbHkuCi0gICAgUHJlZGljdGFibGUsCi0gICAgLy8g
VXNlIHRoZXNlIHdoZW4gd2UgYXJlIHZlcnkgc3VyZSBvbmUgb2YgdGhlIHR3byBzaWRlcyBpcyBz
dWJzdGFudGlhbGx5IG1vcmUgbGlrZWx5IHRoYW4gdGhlIG90aGVyLgotICAgIExlZnRMaWtlbHks
Ci0gICAgUmlnaHRMaWtlbHksCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuaAppbmRleCA3MGQyODhlMDNmMWQ4ZDgxZjI3N2Y2YjgyMTdhYzlmM2ZhODBjMTJh
Li5mZTJhNGVjNzI2Y2VjZWQzNDEzMDkzOTk0OTRlYTllYjdlNmI0YjVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBT
bG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJbmRleCkgewogICAg
ICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogICAgIHJldHVybiBjYWxsT3BlcmF0
aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJl
c3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0NoZWNrcG9pbnRzLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmE1
ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvQ2hlY2twb2ludHMucmIKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0j
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1jbGFzcyBDaGVja3BvaW50Ci0gICAgYXR0
cl9yZWFkZXIgOnVzZXMKLSAgICBhdHRyX3JlYWRlciA6ZGVmcwotICAgIGF0dHJfcmVhZGVyIDpu
YW1lCi0gICAgYXR0cl9yZWFkZXIgOmluZGV4Ci0KLSAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBp
bmRleCwgdG1wcykKLSAgICAgICAgQG5hbWUgPSBuYW1lCi0gICAgICAgIEBpbmRleCA9IGluZGV4
Ci0gICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVmKXwgdXNlRGVmID09
IDp1c2UgfQotICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAsIHVzZURlZil8IHVz
ZURlZiA9PSA6ZGVmaW5lIH0KLSAgICBlbmQKLQotICAgIGRlZiBsaXZlbmVzcyhuYW1lc3BhY2Up
Ci0gICAgICAgIEVPRjwtLQotICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25hbWV9OgotRU9GCi0g
ICAgZW5kCi1lbmQKLQotY2xhc3MgQ2hlY2twb2ludHMKLSAgICBkZWYgaW5pdGlhbGl6ZShvcGNv
ZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQotICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCi0gICAgICAg
IEB0bXBzID0gdG1wcwotICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3BvaW50cy5tYXBfd2l0
aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5ldyhuYW1lLCBpbmRl
eCwgdG1wcykgfQotICAgIGVuZAotCi0gICAgZGVmIGxpdmVuZXNzCi0gICAgICAgIEBjaGVja3Bv
aW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAotCi0gICAgICAgIGVuZAotICAgICAgICBFT0Y8LS0K
LUJpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5jYXBpdGFsaXplZF9u
YW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCi17Ci0gICAgc3dpdGNoIChjaGVja3BvaW50KSB7Ci0K
LSAgICB9Ci19Ci1FT0YKLSAgICBlbmQKLWVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL09wY29kZS5yYgppbmRleCBjZmQ5ZGYxNTExNDdhODZkYTRiYzc1YmU0NmE2NzgyNWUyNTM3
NWYzLi5kYWI4Njg2Y2EzM2ExMDJjOWJmYTFkZjE4MDNlYmI0ZjBhYjI0NDg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNyArMzAsNiBAQCBjbGFz
cyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVhZGVyIDptZXRhZGF0
YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKLSAgICBhdHRyX3JlYWRlciA6Y2hlY2twb2ludHMK
IAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVTaXplOjpOYXJyb3ci
CkBAIC00NiwxNCArNDUsMTIgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRpZAogICAgIGVuZAog
Ci0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBhcmdzLCBtZXRhZGF0
YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykKKyAgICBkZWYgaW5p
dGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRhLCBtZXRhZGF0YV9p
bml0aWFsaXplcnMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAgICAgICBAbmFtZSA9
IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAgICBAbWV0YWRhdGEg
PSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVycwogICAgICAgICBA
YXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBlKSwgaW5kZXh8IEFy
Z3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggKyAxIH0gdW5sZXNzIGFyZ3MubmlsPwot
ICAgICAgICBAdG1wcyA9IHRtcHMKLSAgICAgICAgQGNoZWNrcG9pbnRzID0gY2hlY2twb2ludHMu
bWFwIHsgfChjaGVja3BvaW50LCBfKXwgY2hlY2twb2ludCB9IHVubGVzcyBjaGVja3BvaW50cy5u
aWw/CiAgICAgZW5kCiAKICAgICBkZWYgY3JlYXRlX2lkIQpAQCAtMTIxLDggKzExOCw2IEBAIGNs
YXNzIE9wY29kZQogICAgICAgICA8PC1FT0YKIHN0cnVjdCAje2NhcGl0YWxpemVkX25hbWV9IDog
cHVibGljIEluc3RydWN0aW9uIHsKICAgICAje29wY29kZUlEfQotICAgICN7dGVtcHN9Ci0gICAg
I3tjaGVja3BvaW50VmFsdWVzfQogCiAje2VtaXR0ZXJ9CiAje2R1bXBlcn0KQEAgLTEzNywxOCAr
MTMyLDYgQEAgRU9GCiAgICAgICAgICJzdGF0aWMgY29uc3RleHByICN7b3Bjb2RlSURUeXBlfSBv
cGNvZGVJRCA9ICN7bmFtZX07IgogICAgIGVuZAogCi0gICAgZGVmIGNoZWNrcG9pbnRWYWx1ZXMK
LSAgICAgICAgcmV0dXJuIGlmIEBjaGVja3BvaW50cy5uaWw/Ci0KLSAgICAgICAgWyJlbnVtIENo
ZWNrcG9pbnRzIDogdWludDhfdCB7Il0uY29uY2F0KGNoZWNrcG9pbnRzLm1hcHsgfGNoZWNrcG9p
bnR8ICIgICAgICAgICN7Y2hlY2twb2ludH0sIiB9KS5jb25jYXQoWyIgICAgICAgIG51bWJlck9m
Q2hlY2twb2ludHMsIiwgIiAgICB9OyJdKS5qb2luKCJcbiIpCi0gICAgZW5kCi0KLSAgICBkZWYg
dGVtcHMKLSAgICAgICAgcmV0dXJuIGlmIEB0bXBzLm5pbD8KLQotICAgICAgICBbImVudW0gVG1w
cyA6IHVpbnQ4X3QgeyJdLmNvbmNhdChAdG1wcy5tYXAge3wodG1wLCB0eXBlKXwgIiAgICAgICAg
I3t0bXB9LCJ9KS5wdXNoKCIgICAgfTsiKS5qb2luKCJcbiIpCi0gICAgZW5kCi0KICAgICBkZWYg
ZW1pdHRlcgogICAgICAgICBvcF93aWRlMTYgPSBBcmd1bWVudC5uZXcod2lkZTE2LCBvcGNvZGVJ
RFR5cGUsIDApCiAgICAgICAgIG9wX3dpZGUzMiA9IEFyZ3VtZW50Lm5ldyh3aWRlMzIsIG9wY29k
ZUlEVHlwZSwgMCkKQEAgLTIxNyw3ICsyMDAsNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9w
Y29kZVNpemUgX19zaXplLCBib29sIHJlY29yZE9wY29kZSwgdHlwZW5hbWUgQnl0ZWNvZGVHZW5l
cmF0b3I+CiAgICAgc3RhdGljIGJvb2wgZW1pdEltcGwoQnl0ZWNvZGVHZW5lcmF0b3IqIGdlbiN7
dHlwZWRfYXJnc30je21ldGFkYXRhX3BhcmFtfSkKICAgICB7Ci0gICAgICAgICN7IUBjaGVja3Bv
aW50cy5uaWw/ID8gImdlbi0+c2V0VXNlc0NoZWNrcG9pbnRzKCk7IiA6ICIifQogICAgICAgICBp
ZiAoX19zaXplID09IE9wY29kZVNpemU6OldpZGUxNikKICAgICAgICAgICAgIGdlbi0+YWxpZ25X
aWRlT3Bjb2RlMTYoKTsKICAgICAgICAgZWxzZSBpZiAoX19zaXplID09IE9wY29kZVNpemU6Oldp
ZGUzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlv
bi5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgppbmRleCA2
Njg1NWJhNjUwMDgwZTRjMjNjYzBlYmVjMTBlNzk0OWNkZTc2OGI5Li4yMDRhYzc1OWUxM2VmZjE1
MWY4Y2QxNzdmM2JmMWI3MGUwNzc5Y2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVy
YXRvci9TZWN0aW9uLnJiCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFNlY3Rpb24KICAgZW5kCiAK
ICAgZGVmIGNyZWF0ZV9vcGNvZGUobmFtZSwgY29uZmlnKQotICAgICAgT3Bjb2RlLm5ldyhzZWxm
LCBuYW1lLCBjb25maWdbOmV4dHJhc10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFd
LCBjb25maWdbOm1ldGFkYXRhX2luaXRpYWxpemVyc10sIGNvbmZpZ1s6dG1wc10sIGNvbmZpZ1s6
Y2hlY2twb2ludHNdKQorICAgICAgT3Bjb2RlLm5ldyhzZWxmLCBuYW1lLCBjb25maWdbOmV4dHJh
c10sIGNvbmZpZ1s6YXJnc10sIGNvbmZpZ1s6bWV0YWRhdGFdLCBjb25maWdbOm1ldGFkYXRhX2lu
aXRpYWxpemVyc10pCiAgIGVuZAogCiAgIGRlZiBhZGRfb3Bjb2RlX2dyb3VwKG5hbWUsIG9wY29k
ZXMsIGNvbmZpZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMWFkY2IyMTZl
ZTJkZTgyOWRiZmMxZDgwYmYzYTRmZTIyOGU4ZTVhYi4uZTdkMzk1OGJjYTlmOGY5YmM4ZmE3ZDYx
NTEzM2RlMTFjODRlNWEwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTcy
MSw3ICs3MjEsNiBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2
YXRpdmVSb290cyYgcm9vdHMpCiAgICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX3ZtLmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7Ci0gICAgbV92
bS5zY2FuU2lkZVN0YXRlKHJvb3RzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJvb3RzKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmNwcAppbmRleCBiN2VmMjU5ODQzNjNkM2JiOWJmNTBkZDBhZDEzNmVmZTI1MDk5ZmE4Li4xYTRk
ZTNmOTM2MjkwZTYyZjYzODllZjVmZmEwN2Y4OTczNmNlNTU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtOTAsMjIgKzkwLDIyIEBA
IGJvb2wgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJpdHNBcmVDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAog
CiB1bnNpZ25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQXNSYXdCaXRzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKV0udGFnKCk7CisgICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnRhZygpOwogfQogCiBTVVBQUkVTU19BU0FOIHVuc2ln
bmVkIENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAogewotICAgIHJl
dHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpXS51bnNhZmVUYWcoKTsKKyAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udW5zYWZlVGFnKCk7CiB9CiAKIENhbGxTaXRl
SW5kZXggQ2FsbEZyYW1lOjpjYWxsU2l0ZUluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2Fs
bFNpdGVJbmRleDo6ZnJvbUJpdHMoY2FsbFNpdGVBc1Jhd0JpdHMoKSk7CisgICAgcmV0dXJuIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChjYWxsU2l0ZUFzUmF3Qml0cygpKSk7CiB9CiAKIFNV
UFBSRVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OnVuc2FmZUNhbGxTaXRlSW5kZXgo
KSBjb25zdAogewotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyh1bnNhZmVDYWxs
U2l0ZUFzUmF3Qml0cygpKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KHVuc2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CkBAIC0xMTYsOCArMTE2LDggQEAgY29uc3QgSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVu
dFZQQygpIGNvbnN0CiAKIHZvaWQgQ2FsbEZyYW1lOjpzZXRDdXJyZW50VlBDKGNvbnN0IEluc3Ry
dWN0aW9uKiB2cGMpCiB7Ci0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSgqdnBjKTsKLSAgICB0
aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpXS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlKEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2cGMpKSk7CisgICAgdGhp
c1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCkgPSBjYWxs
U2l0ZS5iaXRzKCk7CiB9CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVCaXRzQXNCeXRl
Y29kZU9mZnNldCgpIGNvbnN0CkBAIC0xMzcsOCArMTM3LDcgQEAgY29uc3QgSW5zdHJ1Y3Rpb24q
IENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNvbnN0CiB2b2lkIENhbGxGcmFtZTo6c2V0Q3VycmVu
dFZQQyhjb25zdCBJbnN0cnVjdGlvbiogdnBjKQogewogICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUoY29kZUJsb2NrKCktPmJ5dGVjb2RlSW5kZXgodnBjKSk7Ci0gICAgdGhpc1tzdGF0aWNfY2Fz
dDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0udGFnKCkg
PSBjYWxsU2l0ZS5iaXRzKCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRWUEMoKSA9PSB2cGMpOworICAg
IHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnRhZygpID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oY2FsbFNpdGUuYml0cygpKTsKIH0KIAogdW5zaWduZWQgQ2Fs
bEZyYW1lOjpjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKQEAgLTE2Nyw3ICsx
NjYsNyBAQCBCeXRlY29kZUluZGV4IENhbGxGcmFtZTo6Ynl0ZWNvZGVJbmRleCgpCiAgICAgfQog
I2VuZGlmCiAgICAgQVNTRVJUKGNhbGxTaXRlQml0c0FyZUJ5dGVjb2RlT2Zmc2V0KCkpOwotICAg
IHJldHVybiBjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpOworICAgIHJldHVybiBCeXRl
Y29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSk7CiB9CiAKIENvZGVPcmln
aW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKQEAgLTE4MSw3ICsxODAsNyBAQCBDb2RlT3JpZ2lu
IENhbGxGcmFtZTo6Y29kZU9yaWdpbigpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+Y29k
ZU9yaWdpbihpbmRleCk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIENvZGVPcmlnaW4oY2Fs
bFNpdGVJbmRleCgpLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgcmV0dXJuIENvZGVPcmlnaW4oQnl0
ZWNvZGVJbmRleChjYWxsU2l0ZUJpdHNBc0J5dGVjb2RlT2Zmc2V0KCkpKTsKIH0KIAogUmVnaXN0
ZXIqIENhbGxGcmFtZTo6dG9wT2ZGcmFtZUludGVybmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCAyZmRhMjQ2YjlhMGFjNDZiMDkxMGYy
OWQxNmVjMTFhMWRkYzcwNTgxLi44YWJkZGI4MTA2YjQxYjFhZTAzZDc1NzZhODAxZDdiZjkxZjIx
NmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiU3RhY2tWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCi0jaW5jbHVkZSA8d3RmL0VudW1DbGFz
c09wZXJhdG9yT3ZlcmxvYWRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgIHsKIApAQCAtNDYsMzEgKzQ1
LDE5IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhbGxTaXRlSW5k
ZXgoKSA9IGRlZmF1bHQ7CiAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGV4
cGxpY2l0IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotICAgICAg
ICAgICAgOiBtX2JpdHMoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkKLSAgICAgICAgeyAKLSAgICAg
ICAgICAgIEFTU0VSVCghYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOwotICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICBleHBsaWNpdCBDYWxsU2l0ZUluZGV4KGNvbnN0IEluc3RydWN0aW9uJiBp
bnN0cnVjdGlvbikKLSAgICAgICAgICAgIDogbV9iaXRzKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KCZpbnN0cnVjdGlvbikpCi0gICAgICAgIHsgfQotI2VuZGlmCi0gICAgICAgIGV4cGxpY2l0
IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAgICAgICAgICAgIDogbV9iaXRzKGJpdHMp
CisgICAgICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQogICAgICAgICB7
IH0KIAotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X2JpdHM7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGxTaXRlSW5kZXgmIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX2JpdHMgPT0gb3RoZXIubV9iaXRzOyB9CisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fYnl0ZWNvZGVJbmRleDsg
fQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJbmRleCYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5tX2J5dGVjb2RlSW5kZXg7IH0K
IAotICAgICAgICB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9Ci0gICAg
ICAgIHN0YXRpYyBDYWxsU2l0ZUluZGV4IGZyb21CaXRzKHVpbnQzMl90IGJpdHMpIHsgcmV0dXJu
IENhbGxTaXRlSW5kZXgoYml0cyk7IH0KKyAgICAgICAgdWludDMyX3QgYml0cygpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKTsgfQogCi0gICAgICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgoYml0cygpKTsg
fQorICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVjb2RlSW5kZXg7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQzMl90IG1fYml0
cyB7IEJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSB9OworICAgICAgICBCeXRlY29kZUluZGV4IG1f
Ynl0ZWNvZGVJbmRleDsKICAgICB9OwogCiAgICAgY2xhc3MgRGlzcG9zYWJsZUNhbGxTaXRlSW5k
ZXggOiBwdWJsaWMgQ2FsbFNpdGVJbmRleCB7CkBAIC03OCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBK
U0MgIHsKICAgICAgICAgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CiAKICAg
ICAgICAgZXhwbGljaXQgRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKLSAg
ICAgICAgICAgIDogQ2FsbFNpdGVJbmRleChiaXRzKQorICAgICAgICAgICAgOiBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXg6OmZyb21CaXRzKGJpdHMpKQogICAgICAgICB7CiAgICAgICAgIH0K
IApAQCAtOTEsMjcgKzc4LDI0IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAvLyBhcm02NF8zMiBl
eHBlY3RzIGNhbGxlciBmcmFtZSBhbmQgcmV0dXJuIHBjIHRvIHVzZSA4IGJ5dGVzIAogICAgIHN0
cnVjdCBDYWxsZXJGcmFtZUFuZFBDIHsKICAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZTsKLSAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3Rlcikgdm9pZCog
cmV0dXJuUEM7CisgICAgICAgIGFsaWduYXMoQ1BVUmVnaXN0ZXIpIGNvbnN0IEluc3RydWN0aW9u
KiByZXR1cm5QQzsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc2l6ZUluUmVnaXN0ZXJz
ID0gMiAqIHNpemVvZihDUFVSZWdpc3RlcikgLyBzaXplb2YoUmVnaXN0ZXIpOwogICAgIH07CiAg
ICAgc3RhdGljX2Fzc2VydChDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgPT0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwgIkNhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVycyBpcyBpbmNvcnJlY3QuIik7CiAKLSAgICBlbnVtIGNsYXNzIENh
bGxGcmFtZVNsb3QgOiBpbnQgewotICAgICAgICBjb2RlQmxvY2sgPSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMsCi0gICAgICAgIGNhbGxlZSA9IGNvZGVCbG9jayArIDEsCi0gICAg
ICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY2FsbGVlICsgMSwKLSAgICAgICAgdGhp
c0FyZ3VtZW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyAxLAotICAgICAgICBmaXJz
dEFyZ3VtZW50ID0gdGhpc0FyZ3VtZW50ICsgMSwKKyAgICBzdHJ1Y3QgQ2FsbEZyYW1lU2xvdCB7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNvZGVCbG9jayA9IENhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY2FsbGVl
ID0gY29kZUJsb2NrICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDE7CisgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAx
OwogICAgIH07CiAKLSAgICBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19X
SVRIX0lOVEVHUkFMUyhDYWxsRnJhbWVTbG90KQotICAgIE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCi0KICAg
ICAvLyBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcmlwdCBleGVjdXRpb24uCiAg
ICAgLy8gUGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBtb3N0IGZ1bmN0aW9ucy4KICAg
ICBjbGFzcyBDYWxsRnJhbWUgOiBwcml2YXRlIFJlZ2lzdGVyIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGhlYWRlclNpemVJblJlZ2lzdGVycyA9IHN0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpICsgMTsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0gQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyAxOwogCiAgICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHZlcnkgc3BlY2lmaWMgY2ly
Y3Vtc3RhbmNlcwogICAgICAgICAvLyB3aGVuIHlvdSd2ZSBndWFyYW50ZWVkIHRoZSBjYWxsZWUg
Y2FuJ3QgYmUgYSBXYXNtIGNhbGxlZSwgYW5kIGNhbgpAQCAtMTIyLDEwICsxMDYsMTAgQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgICAgICAvLyB0byBzZWUgaWYgaXQncyBhIGNlbGwsIGFuZCBpZiBp
dCdzIG5vdCwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBn
dWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNPYmplY3Qq
IGpzQ2FsbGVlKCkgY29uc3Q7Ci0gICAgICAgIENhbGxlZUJpdHMgY2FsbGVlKCkgY29uc3QgeyBy
ZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKV0ucG9pbnRlcigpKTsgfQotICAgICAgICBTVVBQUkVTU19BU0FOIENhbGxlZUJpdHMgdW5z
YWZlQ2FsbGVlKCkgY29uc3QgeyByZXR1cm4gQ2FsbGVlQml0cyh0aGlzW3N0YXRpY19jYXN0PGlu
dD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0uYXNhblVuc2FmZVBvaW50ZXIoKSk7IH0KKyAgICAg
ICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlXS5wb2ludGVyKCkpOyB9CisgICAgICAgIFNVUFBSRVNTX0FTQU4g
Q2FsbGVlQml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsgfQogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0OwotICAgICAgICBDb2RlQmxvY2sqKiBhZGRyZXNz
T2ZDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHRo
aXMgKyBzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOyB9CisgICAg
ICAgIENvZGVCbG9jayoqIGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdp
c2VfY2FzdDxDb2RlQmxvY2sqKj4odGhpcyArIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7IH0K
ICAgICAgICAgaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiB1bnNhZmVDb2RlQmxvY2so
KSBjb25zdDsKICAgICAgICAgaW5saW5lIEpTU2NvcGUqIHNjb3BlKGludCBzY29wZVJlZ2lzdGVy
T2Zmc2V0KSBjb25zdDsKIApAQCAtMTk4LDEzICsxODIsMTUgQEAgbmFtZXNwYWNlIEpTQyAgewog
ICAgICAgICBzdGF0aWMgdm9pZCBpbml0RGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKENh
bGxGcmFtZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSk7CiAKICAgICAgICAg
Ly8gUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGNvZGVmcmFtZSAob3IgY29uc3RhbnQgZnJvbSB0
aGUgQ29kZUJsb2NrKS4KKyAgICAgICAgUmVnaXN0ZXImIHIoaW50KTsKICAgICAgICAgUmVnaXN0
ZXImIHIoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgLy8gUmVhZCBhIHJlZ2lzdGVyIGZvciBh
IGtub3duIG5vbi1jb25zdGFudAorICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZm9yIGEgbm9u
LWNvbnN0YW50CisgICAgICAgIFJlZ2lzdGVyJiB1bmNoZWNrZWRSKGludCk7CiAgICAgICAgIFJl
Z2lzdGVyJiB1bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rlcik7CiAKICAgICAgICAgLy8gQWNjZXNz
IHRvIGFyZ3VtZW50cyBhcyBwYXNzZWQuIChBZnRlciBjYXB0dXJlLCBhcmd1bWVudHMgbWF5IG1v
dmUgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uKQogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgLSAxOyB9Ci0g
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJu
IHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyldLnBheWxvYWQoKTsgfQorICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSBjb25zdCB7IHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzXS5wYXlsb2FkKCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVu
dE9mZnNldChpbnQgYXJndW1lbnQpIHsgcmV0dXJuIChDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3Vt
ZW50ICsgYXJndW1lbnQpOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCArIGFyZ3VtZW50KTsgfQogCkBAIC0yNTMsNyArMjM5LDcgQEAgbmFtZXNwYWNlIEpTQyAg
ewogCiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRBZnRlckNhcHR1cmUoc2l6ZV90IGFyZ3VtZW50
KTsKIAotICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZvcihzaXplX3QgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpIHsgcmV0dXJuIENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQorICAgICAgICBzdGF0aWMgaW50IG9mZnNldEZv
cihzaXplX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsgcmV0dXJuIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsgfQogCiAg
ICAgICAgIHN0YXRpYyBDYWxsRnJhbWUqIG5vQ2FsbGVyKCkgeyByZXR1cm4gbnVsbHB0cjsgfQog
ICAgICAgICBib29sIGlzRGVwcmVjYXRlZENhbGxGcmFtZUZvckRlYnVnZ2VyKCkgY29uc3QKQEAg
LTI2NSwxMCArMjUxLDEwIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgYm9vbCBpc1N0YWNr
T3ZlcmZsb3dGcmFtZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzV2FzbUZyYW1lKCkgY29uc3Q7
CiAKLSAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQp
IHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKV0ucGF5bG9hZCgpID0gY291bnQ7IH0K
KyAgICAgICAgdm9pZCBzZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhpbnQgY291bnQpIHsg
c3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpc10ucGF5bG9hZCgpID0gY291bnQ7IH0KICAgICAgICAgaW5saW5lIHZvaWQg
c2V0Q2FsbGVlKEpTT2JqZWN0Kik7CiAgICAgICAgIGlubGluZSB2b2lkIHNldENvZGVCbG9jayhD
b2RlQmxvY2sqKTsKLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBjYWxs
ZXJGcmFtZUFuZFBDKCkucmV0dXJuUEMgPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFJldHVy
blBDKHZvaWQqIHZhbHVlKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPih2YWx1ZSk7IH0KIAogICAgICAgICBTdHJpbmcg
ZnJpZW5kbHlGdW5jdGlvbk5hbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKaW5kZXggZWU3ZWMyYWIxMDRhN2EzNGQ5
OGIwZjQzOGY2NDRjMmRjYTFjNTE2OC4uYTk3ZGVjYTUzYmNlMTc5Mjg5YjBjMzgwZDA0ZThmMmE4
NjA0NzdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lSW5saW5lcy5oCkBAIC0zMiwzOSArMzIsNTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2lubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkKK3sKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4oJmNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCkp
OworICAgIHJldHVybiB0aGlzW2luZGV4XTsKK30KKwogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJh
bWU6OnIoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJnRoaXMtPmNvZGVC
bG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKHJlZykpOwotICAgIHJldHVybiB0aGlzW3JlZy5vZmZz
ZXQoKV07CisgICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKK30KKworaW5saW5lIFJlZ2lzdGVy
JiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgIHJldHVybiB0aGlzW2lu
ZGV4XTsKIH0KIAogaW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBBU1NFUlQoIXJlZy5pc0NvbnN0YW50KCkpOwotICAgIHJl
dHVybiB0aGlzW3JlZy5vZmZzZXQoKV07CisgICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNl
dCgpKTsKIH0KIAogaW5saW5lIEpTVmFsdWUgQ2FsbEZyYW1lOjpndWFyYW50ZWVkSlNWYWx1ZUNh
bGxlZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0
dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5qc1ZhbHVl
KCk7CisgICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXS5qc1ZhbHVlKCk7CiB9
CiAKIGlubGluZSBKU09iamVjdCogQ2FsbEZyYW1lOjpqc0NhbGxlZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFjYWxsZWUoKS5pc1dhc20oKSk7Ci0gICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8
aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5vYmplY3QoKTsKKyAgICByZXR1cm4gdGhpc1tD
YWxsRnJhbWVTbG90OjpjYWxsZWVdLm9iamVjdCgpOwogfQogCiBpbmxpbmUgQ29kZUJsb2NrKiBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7
CisgICAgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrXS5SZWdpc3Rlcjo6Y29k
ZUJsb2NrKCk7CiB9CiAKIGlubGluZSBTVVBQUkVTU19BU0FOIENvZGVCbG9jayogQ2FsbEZyYW1l
Ojp1bnNhZmVDb2RlQmxvY2soKSBjb25zdAogewotICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0
PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKV0uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2Rl
QmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lz
dGVyOjphc2FuVW5zYWZlQ29kZUJsb2NrKCk7CiB9CiAKIGlubGluZSBKU0dsb2JhbE9iamVjdCog
Q2FsbEZyYW1lOjpsZXhpY2FsR2xvYmFsT2JqZWN0KFZNJiB2bSkgY29uc3QKQEAgLTkxLDEyICsx
MDIsMTIgQEAgaW5saW5lIGJvb2wgQ2FsbEZyYW1lOjppc1dhc21GcmFtZSgpIGNvbnN0CiAKIGlu
bGluZSB2b2lkIENhbGxGcmFtZTo6c2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpCiB7Ci0gICAg
c3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSldID0gY2FsbGVlOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGNhbGxlZTsKIH0KIAogaW5saW5lIHZvaWQgQ2FsbEZy
YW1lOjpzZXRDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc3RhdGljX2Nh
c3Q8UmVnaXN0ZXIqPih0aGlzKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayldID0gY29kZUJsb2NrOworICAgIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrXSA9IGNvZGVCbG9jazsKIH0KIAogaW5saW5lIHZvaWQgQ2Fs
bEZyYW1lOjpzZXRTY29wZShpbnQgc2NvcGVSZWdpc3Rlck9mZnNldCwgSlNTY29wZSogc2NvcGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhYjdkYjc1OTc0NWEzMDUxNGUwOTNmYjI2M2M0ZmFiYjU0MmMwZjFjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkJ5dGVjb2RlSW5kZXguaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLXN0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0KLSAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7Ci0gICAgSlNWYWx1ZSB0bXBzW21heE51bUNoZWNrcG9pbnRUbXBzXTsKLX07Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCmluZGV4IDhlZjFjM2Q4NTBjMmM4YTAxNTQ2ZjJjOGE5ZGViM2Q4NTQ3YTViMzcuLmRhYTk0
Yzg5ZjkwMDVhOTk3MmZjMGUzYjAyZWI4OTNkMjExY2RkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZUNsb3N1cmUuaCIK
ICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCi0jaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
ICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKQEAgLTEyNCw3ICsxMjMsNyBAQCBKU1ZhbHVl
IGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxlckNhbGxTaXRlSW5kZXggPSBjYWxsZXJGcmFtZS0+Y2Fs
bFNpdGVJbmRleCgpOwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIGNhbGxlclNjb3BlQ2hhaW4gPSBjYWxsZXJG
cmFtZS0+dW5jaGVja2VkUihjYWxsZXJDb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1l
LT51bmNoZWNrZWRSKGNhbGxlckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpLm9mZnNldCgpKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBVbmxpbmtlZENvZGVCbG9jayogY2FsbGVyVW5saW5rZWRD
b2RlQmxvY2sgPSBjYWxsZXJDb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiAKICAgICBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQgPSBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uKCkgfHwgY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bkNvbnRleHQoKTsKQEAgLTIxNCw5ICsyMTMsNiBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdAog
ICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAgICAKLSAgICBpZiAo
bGVuZ3RoID4gbWF4QXJndW1lbnRzKQotICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKLQogICAgIGlmIChsZW5ndGggPj0gZmlyc3RWYXJBcmdPZmZz
ZXQpCiAgICAgICAgIGxlbmd0aCAtPSBmaXJzdFZhckFyZ09mZnNldDsKICAgICBlbHNlCkBAIC0y
NTMsNyArMjQ5LDcgQEAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICByZXR1cm4gbGVuZ3Ro
OwogfQogCi12b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFhcmd1bWVudHMuaXNDZWxsKCkpIHx8ICFsZW5n
dGgpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NSwzMSArMjYxLDMxIEBAIHZvaWQgbG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVz
dCwgSlNWYWx1CiAgICAgc3dpdGNoIChjZWxsLT50eXBlKCkpIHsKICAgICBjYXNlIERpcmVjdEFy
Z3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAganNDYXN0PERp
cmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJz
dEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2FzdDxEaXJlY3RBcmd1
bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBm
aXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFNjb3BlZEFyZ3VtZW50c1R5cGU6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2Fz
dDxTY29wZWRBcmd1bWVudHMqPihjZWxsKS0+Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZToKICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+
Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgICAgICBqc0Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihjZWxsKS0+Y29w
eVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybjsgCiAgICAgZGVmYXVsdDogewogICAgICAg
ICBBU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0
KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAganNDYXN0PEpT
QXJyYXkqPihvYmplY3QpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBmaXJzdEVsZW1l
bnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9i
amVjdCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggJiYg
b2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7ICsraSkKLSAgICAgICAgICAg
IGZpcnN0RWxlbWVudERlc3RbaV0gPSBvYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBvYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZm9yICg7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGdsb2Jh
bE9iamVjdCwgaSArIG9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IHZhbHVlOwor
ICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHZhbHVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9IH0KQEAgLTMwMSw3ICsyOTcsOCBAQCB2
b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsRgogICAgIAogICAgIGxvYWRWYXJhcmdzKAogICAgICAgICBn
bG9iYWxPYmplY3QsCi0gICAgICAgIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJmNhbGxGcmFtZS0+
cihjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCkpKSwKKyAg
ICAgICAgY2FsbEZyYW1lLAorICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoMCksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwog
ICAgIAogICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMobGVu
Z3RoICsgMSk7CkBAIC01NDEsMTMgKzUzOCw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxv
Y2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKIAogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRy
OwotICAgICAgICBpZiAobV9jb2RlQmxvY2spIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgc3VwcG9ydCBleGNlcHRpb24gaGFuZGxpbmcgaW4gY2hlY2twb2ludHMuCi0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgICAgICAgICBpZiAobV9yZXR1cm5QQyA9PSBMTEludDo6Z2V0Q29k
ZVB0cjxKU0VudHJ5UHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxs
X3RyYW1wb2xpbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpCi0gICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPnZtKCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJhbWUpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgeworICAgICAgICBpZiAoIW1f
aXNUZXJtaW5hdGlvbikgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgbV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2Rl
QmxvY2ssIFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYg
KG1faGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9u
ZTsKQEAgLTU2OSw3ICs1NjEsNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53
aW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAotICAgICAg
ICBtX3JldHVyblBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC02MDYsNyArNTk3LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBt
X2NvZGVCbG9jazsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKLSAgICBtdXRhYmxlIGNv
bnN0IHZvaWQqIG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJh
bWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpAQCAtODc2LDcgKzg2Niw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU09iamVjdCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8
fCBhcmdzLnNpemUoKSA+IG1heEFyZ3VtZW50cykpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1Nh
ZmVUb1JlY3Vyc2VTb2Z0KCkpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpKTsKIAogICAgIGlmIChp
c0pTQ2FsbCkgewpAQCAtOTQ1LDcgKzkzNSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAg
ICAgfQogCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkg
PiBtYXhBcmd1bWVudHMpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VT
b2Z0KCkpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggZmYxYjRlODYx
MDRjOTYyNTk3NzllMjUyNzkyMmFmMzM0N2NmMjk0Ny4uODZjMzI0NjkyMDRlOWFlNTkxMWZlY2Vh
OTAyYWU5N2NhYjU1ZDNhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAg
dW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSos
IFZNJiwgSlNWYWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVt
VXNlZFN0YWNrU2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0
LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAg
IHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWND
YWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90
IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJh
cmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVy
LCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3Vt
ZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAg
dm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNw
cAppbmRleCA3NWRkZDIwM2Y3M2JlMDU3NmQ2ZGQ3NDhiNjVjYmFhOWFiYmZjNzMyLi5kNzFhNTk3
MWRkYzhmMGY1ZWE2NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3
IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUg
PSBjYWxsRnJhbWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVD
YWxsRnJhbWU7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdp
c3Rlci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgPSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVn
aXN0ZXIpLnVuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudFJlZ2lzdGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2Nv
ZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyNDI3N2JkMjAw
ZjAyMWYzYWIwNzgyMDUyNWNhNzhlOGRlZWY0MzUxLi4zNGQ5MGM4YTFhY2Q4ZWFjMmZmYjZlMGU2
YmY5ZGFhMjhkZTUxZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAot
ICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
CisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJl
ZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCB0byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVv
ZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyMzIoaW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRy
eS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVh
bFJlZ2lzdGVyIGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KGludCBl
bnRyeSwgR1BSUmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQogICAgIHsKLSAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRy
eSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCi0gICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJS
ZWcgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZv
aWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGlu
dCBlbnRyeSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAg
IC8vIGNhbGxlcidzIGZyYW1lIHBvaW50ZXIuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVl
IGlzIHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIHRoZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBj
b250YWluaW5nIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9y
ZVByb2xvZ3VlKEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCisgICAgdm9pZCBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVu
dHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihS
ZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CisgICAgICAgIHN0b3Jl
UHRyKGZyb20sIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSkpOwogICAgIH0KICNlbHNlCi0gICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1l
SGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkK
KyAgICB2b2lkIGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShH
UFJSZWcgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9s
b2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFn
VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZv
cmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCiAgICAgewotICAgICAgICBz
dG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgp
ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3Rh
Y2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApA
QCAtMTE0OCwxMCArMTE0OCw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdp
c3Rlci5pc1ZhbGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7
CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQor
ICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9w
ZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
QWRkcmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJh
c2VHUFIpCkBAIC0xMTY0LDEwICsxMTYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgVGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9w
ZXJhbmQgb3BlcmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCiAg
ICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7Ci0gICAgICAgIHJldHVybiB0
YWdGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEFkZHJlc3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBH
UFJSZWcgYmFzZUdQUikKQEAgLTExODAsMzEgKzExNzgsMzAgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHBheWxv
YWRGb3IoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAo
KSk7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkp
OworICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpKTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBD
YWxsRnJhbWUuCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdp
c3RlciBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChzbG90Lm9mZnNldCgpID49IENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnMpLm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJh
bWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVycykpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4
ZWQgY2FsbGVlIENhbGxGcmFtZS4KICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNs
b3QoaW50IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICByZXR1cm4gY2Fs
bGVlRnJhbWVTbG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1
YWxSZWdpc3RlciBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChp
bnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0
aE9mZnNldChUYWdPZmZzZXQpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZy
YW1lUGF5bG9hZFNsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3Mg
Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBj
YWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBA
IC0xMjIxLDcgKzEyMTgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVG
cmFtZUNhbGxlckZyYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qo
VmlydHVhbFJlZ2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0aE9mZnNldChDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcg
c2VsZWN0U2NyYXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCkBAIC0xNTMwLDcgKzE1Mjcs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUpCi0gICAgICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgcmV0dXJuIGlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCBhMmVhNDYyNmVjYTNm
YTUwNDRmZWRmMzQ5ZTJlNTI1MzZlOWE1YTBiLi5iZjQzZDdiODNiOWE5OTA5ZTg1MjI1OWMzMDhi
MDg4MzZkNzlmNzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZy
YW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQog
I2VuZGlmCiAKICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5j
YWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBkYXRhLmNhbGxlZSk7CisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEu
YXJnc1tpXS5pc0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5p
c0xvY2FsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oCmluZGV4IDRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIuLjYyNDM5
YmRmMzQ0M2I4N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VS
VCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRS
ZWNvdmVyeSB7IGdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpIH07CisgICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAg
ICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAg
ICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlz
Q2VsbCgpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292
ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KTsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgIHN3aXRj
aCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAg
ICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKaW5kZXggODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0Yy4u
MjgwMzJhMjFhYWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBO
RXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3Rlciwg
RlBSZWdpc3RlcklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91
YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRl
QmFycmllck1vZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNl
LCBTaG91bGRGaWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAg
IC8vIHZhbHVlIHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNj
cmF0Y2ggcmVnaXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMg
ZWl0aGVyIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRo
YXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZh
aWxhYmxlIGZvcgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAK
LSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMs
IEpTVmFsdWVSZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9p
ZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAg
ICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7
Ci0gICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IHNyYyk7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOwor
ICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOwogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYg
Y29uc3RhbnQpOworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBp
bnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0
TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBl
bWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAg
ICB2b2lkIGVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAK
ICAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAgICAgdm9pZCBl
bWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0TG9h
ZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQg
aW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAg
IHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAg
ICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJl
Z2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3Rv
cmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNv
bnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3Jl
SW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0
U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29s
ID0gZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCwgUmVnaXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQ
YXRoKGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDEwICs0MzgsMTcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9u
ICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50
MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVy
cyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB2b2lkIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lk
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICB2
b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVn
VDApOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNl
bGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkg
dXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKGludCBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNW
YWx1ZTMyXzY0ICovID0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRT
dG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgICAg
ICB7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAg
ICAgICAgIH0KQEAgLTQ0OSwyOSArNDU2LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
dW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0
dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChS
ZWdpc3RlcklELCBpbnQgVlJlZyk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdp
c3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFi
bGVKdW1wIGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVJlZywgY29uc3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVH
ZXRCeUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0
aW9uYWxDb25kaXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21w
YXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRp
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGlu
dCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAg
ICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25T
aXplLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShK
U0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52
ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsK
IApAQCAtNjc4LDggKzY4NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBz
Y29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAg
ICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVn
KTsKQEAgLTY4NywyMCArNjk0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFn
LCBHUFJSZWcgcGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpT
VmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1Zh
bHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAg
ICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50
IGRzdCk7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CiAKLSAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudElu
dChpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7
CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAg
ICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNv
bnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7
CkBAIC03MjcsNyArNzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQo
IWl0ZXItPmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJ
bmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0
KTsKIApAQCAtNzQ3LDEzICs3NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJl
dHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiwgaW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4sIGludCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9u
VHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgot
ICAgICAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewog
ICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwpAQCAtNzk3LDcgKzgwNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKICAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04
NTcsNyArODY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBz
cmMxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9w
ZXJhbmRUeXBlcyhpbnQgc3JjMSwgaW50IHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfRkxBR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAppbmRleCAzYTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0Li4zNDU4NzQ0
ZmJjZGQ1M2FjZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFVuc2lnbmVkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3
MiwxMyArMTcyLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IG9wMSA9IGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwg
dGFyZ2V0LCBjb25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIs
IHRhcmdldCwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
QW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVk
IHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QwKTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9m
ZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKICAgICBlbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwg
aW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJn
ZXQsIGluc3RydWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0
ZXIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEs
IGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZl
cnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBX
ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xv
dyBwYXRoOgpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKIHZvaWQg
SklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBpbnQg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQx
NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNb2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICAvLyBNYWtl
IHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAg
ICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQg
SklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHJvZmlsaQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7
CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5
OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlm
dEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBOCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmls
ZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcGVyYW5kID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBB
cml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBh
bmQgZHN0LgpAQCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0g
Ynl0ZWNvZGUubV9yaHM7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKQEAgLTg0NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Cisg
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBi
eXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Cisg
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDhkZDc5NmZhOTU2NGFjNTQwYWMwYTUx
NGRjZmZkOGZhYjNjMTFiZTEuLmMzZjhhYTBjN2ZhZjRlYWQ0MzQ2N2Q1NDI3MjZhZThhYzkyNTg3
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2
KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygw
KSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CiAg
ICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAg
ICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9m
aWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0
aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVy
ID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBh
IHZpcnR1YWwgcmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFzIG9uZS4uLgorICAgIGludCB0
aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJlZVJl
Z2lzdGVyID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CiAgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBpbnQgY2FsbGVlID0gYnl0
ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAg
ICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGUwN2E4MzNkNGM4
NTNiOWM3YTAyZGU4Yjc0NjAxZGYzMDY2YmFlMmYuLmI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYx
NmQ5Y2I4NDhmZmY1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRp
b25zLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxG
cmFtZSksICIgZm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgV1RG
QnJlYWtwb2ludFRyYXAoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KGF1dG8qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDljMTE3MzQzNDBjMzY0NzIxYjM1OGI5NTE2ZjY4
NzA5MzM0YzVhMDQuLmZjZThiYjc0NzY2Mzc4Mzc5OGM5OTc1NmU4ZGY3Zjg5ZTA5YmI4NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwyMCArNDgsMTkgQEAg
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFy
cmF5TW9kZShjb25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudERvdWJsZShpbnQgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpCiB7Ci0gICAgQVNTRVJUKHNyYy5pc0Nv
bnN0YW50KCkpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5k
ZXgoc3JjKSk7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50
cnkpCiB7Ci0gICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3Io
ZW50cnkpKTsKICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0NCw3
ICsxNDMsNyBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQog
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBp
bnQgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU2LDcg
KzE1NSw3IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhKTsKQEAgLTE2OCw5ICsxNjcsOSBAQCBBTFdBWVNfSU5MSU5F
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgaW50IHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZShyZWcpKQorICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykp
CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg1LDkgKzI4NCw5IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKICNlbmRpZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjQs
MjYgKzM2MywyNiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxX
QVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoaW50IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQz
MigpOwogfQogCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgdGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgdGFnKQogewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKICAgICAgICAgbW92
ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM5MSw5ICszOTAsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogICAgIGxvYWQzMih0
YWdGb3IoaW5kZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9h
ZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKIHsKLSAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRP
cGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTQwNywxMzMgKzQwNiwxMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChjb25z
dCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIG1v
dmUoSW1tMzIodi50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXQoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCiB7CiAgICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7
CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFnICE9IHBh
eWxvYWQpOwogCiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXlsb2Fk
KHJlZywgcGF5bG9hZCk7Ci0gICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKKyAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcoaW5k
ZXgsIHRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGFyZ2V0IHsgaW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0
b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwotICAg
ICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9h
ZDMyKHRhZ0Zvcih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZv
cih0YXJnZXQsIGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdG
b3IocmVnLCBiYXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2Up
LCBwYXlsb2FkKTsKKyAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3Rl
cklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdp
c3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkMihpbnQgaW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGlu
dCBpbmRleDIsIFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBl
bWl0TG9hZChyZWcyLCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQocmVnMSwgdGFnMSwg
cGF5bG9hZDEpOworICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVt
aXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1f
Y29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJs
ZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkSW50MzJUb0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKIHsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIocmVnKTsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwogICAgICAgICBj
aGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9v
bCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRlUG9p
bnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVl
KTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihy
ZWcpLCB2YWx1ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5k
ZXgpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9y
KHJlZywgYmFzZSkpOworICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OworICAg
IHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMy
KHRhZywgdGFnRm9yKHRhcmdldCwgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRT
dG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBp
bmRleElzSW50MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KGluZGV4KSk7CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOwogfQogCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0
ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElz
SW50MzIpCiB7Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOworICAgIHN0
b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOwogICAgIGlmICghaW5kZXhJc0ludDMy
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihyZWcpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoaW5kZXgpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRG
b3IocmVnKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CiAgICAg
aWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihpbmRleCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNCb29sKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBpbmRleCwg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
aW5kZXgpKTsKICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBp
bmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRy
ZXNzRm9yKHJlZykpOworICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNv
bnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBi
YXNlKQogewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9y
KHJlZywgYmFzZSkpOworICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OworICAg
IHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0YXJnZXQsIGJh
c2UpKTsKKyAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHRhcmdldCwg
YmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KQogewogICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAg
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQorICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0
SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7CiAgICAgfQogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBSZWdpc3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiB7CiAg
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkpIHsKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAgIH0KIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMp
CiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
K0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBp
bnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFu
ZChvcDEpLmFzSW50MzIoKTsKQEAgLTU1MywxMSArNTU1LDExIEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4g
YXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCi0gICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSwgZHN0KTsKQEAgLTU2OSwzMiArNTcxLDQ3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkCiAg
ICAgbG9hZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVl
UmVncyBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGludCBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgZHN0LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRz
dDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJl
Z2lzdGVySUQgZHN0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLm9mZnNldCgp
LCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3Qy
KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMx
LCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
Cit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMS5vZmZzZXQoKSwgZHN0MSwgc3Jj
Mi5vZmZzZXQoKSwgZHN0Mik7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KGludCBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklE
IGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qub2Zm
c2V0KCksIGZyb20pOworfQorCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1w
SWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MTIsMjggKzYyOSwy
OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJl
ZykKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQog
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdp
c3RlcklEIHZhbHVlKQogewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihyZWcpOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CiAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CisgICAgICAg
IGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGlu
ZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
LSAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOwotICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkp
LCB2YWx1ZSk7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChp
bmRleCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7Cisg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRl
eCkuYXNJbnQzMigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6
OlBhdGNoYWJsZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQg
cmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggMjRkMzhi
NThlMjg2MTMxNTZlMjNkZTE3MDBhYzg2ZmJkMGNhMTQyZi4uOGUzOTFjNTY5ZTZlMWM1NzE1MDY0
MDYwNGJiZDExNDQ1YTczNTE1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1p
dF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAKLSAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoc3JjKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9y
KGRzdCkpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5W
YWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAg
ICAgcmV0KCk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9y
KSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2Ny
YXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCkpOwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0o
KSksIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
QEAgLTEyOSw5ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVt
aXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBi
eXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iu
b2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3Rh
bmNlVmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8s
IGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNl
b2Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIAogICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9m
SW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
ZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSks
IHJlZ1QwKTsKQEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQu
b2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2
MSw4ICsyNjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Ym9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAg
eG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBAIC0yNzQs
OCArMjc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChOb25aZXJv
LCByZWdUMCwgbnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgaW50IHR5
cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93
aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmpl
Y3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMzMiw3
ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1
cm5WYWx1ZUdQUik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9Q
cmltaXRpdmU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9m
ZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAK
QEAgLTM2MCwxNSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZz
ZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
Lm9mZnNldCgpLCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlv
bk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X29wZXJhbmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKSwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1
ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwg
Yml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2gg
d2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBA
IC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkw
LDE0ICszOTAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVl
KTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNp
YWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIp
OworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEpTVmFsdWUg
c3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9p
bnRlci5vZmZzZXQoKSk7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29k
ZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZz
ZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYgKzUxMCwy
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9u
LCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlv
bi5vZmZzZXQoKSwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2Rl
Lm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdU
MCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSgpKTsKIH0KQEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xo
czsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwog
ICAgIApAQCAtNTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHNyYzEgPSBieXRl
Y29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJl
Z1QxKTsKIApAQCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAg
aW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
QEAgLTY4NCwyMCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0
cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IHNyY1ZS
ZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJl
ZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBA
IC03MjgsMTAgKzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwg
cmVnVDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkp
LCByZWdUMCk7CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKIAogICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOwogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5n
IHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03MzksNyArNzM5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZl
ciA9IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVt
aXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAg
LTc0OSw3ICs3NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlm
IChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAg
ICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxl
KSB7CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9m
aWxlKSk7CkBAIC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Bh
cmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CisgICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVt
aXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc3Nyw3
ICs3NzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29k
ZS5tX3RhYmxlSW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKKyAgICB1bnNpZ25l
ZCBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dp
dGNoQ2hhcj4oKTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRl
eDsKICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
ICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4o
KTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLm1fc2NydXRpbmVlOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJp
bmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQo
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAg
aXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2Nyw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgogICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CiAgICAg
Zm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zmc2V0KCkpOwogCiAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmVnVDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCog
Y2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOwog
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3LDcgKzkz
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRl
Y29kZS5tX2NhbGxlZTsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0
KCk7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRh
ZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1LDEzIEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6
aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5ODUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWU7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKKyAgICBpbnQg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzExMDQsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQpAQCAtMTExNSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1w
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOwogI2Vsc2UKLSAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAjZW5kaWYKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9m
ZnNldCgpLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
QEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0g
Ynl0ZWNvZGUubV9hcmd2OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CiAgICAgaW50
IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCByZWdUMCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzaXplSW5kZXgg
PSBieXRlY29kZS5tX2xlbmd0aC5vZmZzZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwor
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwogICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM0OSwx
MCArMTM0OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0
UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwor
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CiAKICAgICAvLyBDaGVjayB0
aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CkBAIC0xMzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGkKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0
KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmls
ZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5t
X3R5cGVMb2NhdGlvbjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRl
Y29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3ICsxNTA5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBu
b25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAg
R1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tl
dCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CiAg
ICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11
c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0g
cmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRS
ZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQog
CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xf
Zmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3Vt
ZW50Q291bnQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBsb2FkMzIocGF5bG9h
ZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsK
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1
bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKQEAg
LTE1NTYsNyArMTU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1Nr
aXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7CiAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRP
dXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJl
c3VsdFJlZ3MpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAppbmRleCBjNDYzNzlhOWY5ZWNjYWU3NDRhOGU3YWM4MDg1NTFmZWJmMmZhNTcz
Li5hZTViNmFkNTRjYTgxMzZlY2FjMWI2NDExYzk1NzM0MzBlNWMxZjdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05MzMsNyArOTMzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1
ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk0
Myw3ICs5NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDhjYjU1ZmI1
YjdlZjg1ZjBhYzExOWYyMmVlMmFkMTkxYWMxOTA0NGIuLjNiNDg1MGZhYjhkNmZhZTkzMGU5ZTg2
OTNjNDRiYmY0YTFlNDM5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtMTY1NCwxOCArMTY1NCwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRl
YwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAg
ICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICJcbiIpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsK
KyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CiAgICAgICAgIGlmIChieXRlY29k
ZUluZGV4KQogICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpOwotCi0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0
SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVl
cywgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsK
KyAgICAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICAgICAgaW50
IGxvY2Fsc1VzZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpOwotCi0gICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFu
ZC50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAg
ICAgaWYgKG9wZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5k
KS50b0xvY2FsKCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICAgICAg
ICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCku
anNWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODMsNyArMTc4Myw3
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFs
dWVQcm9maWxlKFZNKiB2bVBvaW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExp
dmVuZXNzSXNDb21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0
byBieXRlY29kZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCkt
PmFzPE9wQ2F0Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAgICAg
IHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwNyw4
ICsxOTA3LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgYXV0byYgc2NvcGVT
bG90ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOwot
ICAgIHNjb3BlU2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUt
Pm5leHQoKTsKIH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU09iamVjdCogY29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJ
bnN0YW5jZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFy
KTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogc2Nv
cGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1
bGVWYXIgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29w
ZS4KQEAgLTI0NTksOCArMjQ1OSw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRU
b1Njb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIp
OwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBjYWxsRnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOworICAgIEpTT2JqZWN0
KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxs
RnJhbWUtPnIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOwogICAgIEdldFB1
dEluZm8mIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1
bGVWYXIgZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZH
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApp
bmRleCBlNzI5ZmMwNThlYzY4ZWMxMWYzMmQ1NzA3ODliNzdhMDk3NWQyNmYxLi5hYjk5ZmQ5ODdi
MDYxZjJlNzZhMTdjMjhiZThjNGU3MjY1YTJkODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7
CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCAr
MTE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Cisg
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFi
bGVKdW1wJiBiYWQKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0
b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1Qz
LCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBq
dW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBK
SVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBPcCBieXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNj
cmF0Y2g6IHJlZ1QyCiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChyZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJl
Z1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQg
QEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlOworICAgIGludCBiYXNlOworICAgIGludCBwcm9wZXJ0eTsKKyAg
ICBpbnQgdmFsdWU7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAg
ICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3
LDM2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1Qw
KTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCks
IHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgp
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OwpAQCAtMzc1LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRT
ZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpLCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eUlkSlNSZXN1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBA
IC0zOTUsOSArMzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKQEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
bwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCAr
NDg1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBA
IC01MTMsOSArNTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlz
VmFsdWUub2Zmc2V0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsK
KyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAgICAgYm9vbCBkaXJlY3QgPSAh
IShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVy
IHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBv
ZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7CiAgICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApA
QCAtNzcwLDcgKzc3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjpl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
aW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3Ry
dWN0dXJlU2xvdCwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcs
IHJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGlu
dCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHJlZ1QwKTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwog
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNl
dCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKIH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFs
dWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRj
aHBvaW50U2V0LCByZWdUMSk7CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFs
UmVnaXMKICAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4
ICs5NTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsx
MDg2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3Vt
ZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUu
bV9hcmd1bWVudHM7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9m
ZnNldCgpOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OwpAQCAtMTExMCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUp
CiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyAr
MTEzMyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhCiAgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0
LDggKzExNjQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxG
aWVsZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzEx
NzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAot
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0x
MTk5LDcgKzExOTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYQogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQu
aAppbmRleCA1ODI3MTNlNjQwODdhNTFmNTkzOWI5MGI5ODU0NWRmMTMzZDBjNmFhLi4yY2Y5MTk4
ZjQwZWRhYWY1M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2Fk
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsK
LSAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICBpbmxpbmUgSnVtcCBl
bWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBw
YXlsb2FkKTsKKyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBl
bWl0TG9hZERvdWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklE
IGRzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIGlubGluZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJ
RCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVn
aXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZv
aWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpOworICAg
ICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBp
bnQgZW50cnkpOwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApA
QCAtNjQsMzYgKzY0LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBwYXlsb2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwo
dmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlckluZGV4KSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxs
KHZpcnR1YWxSZWdpc3RlckluZGV4KTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
SW5kZXgpCiAgICAgewotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwor
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1w
IEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVy
IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKE5vdEVxdWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVy
SUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lz
dGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2Fk
UHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCks
IHNjcmF0Y2gpOwogICAgICAgICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0
Y2gsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJ
bnQgPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBz
Y3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgc2NyYXRjaCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7
CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlz
KTsKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7
CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRz
dCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAg
ICB9CkBAIC0xMDEsMjMgKzEwMSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZHN0KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5k
ZXgpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQog
ICAgIAotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRz
dCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsK
KyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwog
ICAgICAgICBKdW1wIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6
ZXJvRXh0ZW5kMzJUb1B0cihkc3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAg
ICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rl
ckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAg
ICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKICAg
ICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAg
ICAgSnVtcCBub3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJ
bnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3Rl
ciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50
IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
dG8pOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgdG8pOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lz
dGVyIGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5KSk7CkBAIC0xNDMsMTIgKzE0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
IH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
dm9pZCogdmFsdWUsIGludCBlbnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIodmFsdWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIGludCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFt
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApp
bmRleCA0OWY1NGM1ZGE1NjcyNTAzYTFlMDc2ZjIyZDlkMzgwMjliYjA5ZmNhLi4wOTUyNTkxZWU5
ZjdkNWQ0ZmMyMTcwYzcxNjkzY2ViNjY5Nzc0YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
ZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIG51bVVzZWRTbG90CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVh
bFJlZ2lzdGVyKDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVy
eSA9IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBEYXRhRm9ybWF0SW50MzIpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgRGF0YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJl
ZyA9IFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9
CiAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3Rz
R1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50
UmVjb3ZlcnksIGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtK
SVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmlu
ZGV4IGUxNTYwMzBlNDE0Mzc4YWNiMzU1ZGFhNzJjZTVjNDUyMGVkYzFlZjEuLmExMTYyMmVlYmRi
ZTQ3ODVlZjA2YWRjMzkzNDcxZjVjMjFmNzI0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQg
YXJndW1lbnQsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAg
ewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQo
ZW1pdExvYWREb3VibGUoc3JjLCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBsb2FkQ2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMg
PSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFp
bHVyZXMuYXBwZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
dm9pZCBsb2FkSW50MzJBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1w
JiBmYWlsVGFyZ2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgdW5z
aWduZWQgc3JjID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CiAgICAgICAg
ICAgICBmYWlsVGFyZ2V0ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAg
ICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAK
aW5kZXggM2U1NjkwOWVkZjRmNTBkNWE1YzQ5MWEzYjMyOTRhYTVkNzMxNWI4YS4uZTZkMzI2NjBi
NjYyN2ZiZDJmNDNhNTZmMDYxYzMwMjU5YWIwNDNkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMTAzMiw4ICsxMDMyLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0p
CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICB1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoMCk7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2Vy
ID0gaml0LmJyYW5jaElmTm90SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIElu
dDMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
aW5kZXggZjBhZTcyNTgwMDcxZDJiZjhhMDEzMmNjNjMwMTdmZDI5ZGZkZGZjOS4uZjE2NGI4MGIx
MTg0NWM2ZmM0NTNjNGIzNzgzYWJiNmM0MjNkODk1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtOTksOCArOTgsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5s
aW5lIEpTVmFsdWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9w
ZXJhbmQpLmpzVmFsdWUoKTsgfQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
cihvcGVyYW5kKS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3Bl
cmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5k
KSB7IHJldHVybiBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1
ZSgpOyB9CitpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVy
YW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZp
cnN0LCBzZWNvbmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZp
cnN0LCBzZWNvbmQpOyAgICAgICAgXApAQCAtMTU3Miw3ICsxNTcxLDcgQEAgaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0
ZWNvZGUubV9hcmd2OwogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRS
KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7
CisgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNh
bGxlZUFzVmFsdWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7
CiAgICAgCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwpAQCAtMTY5MCw3ICsxNjg5LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdz
U2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBz
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFs
dWUpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFt
ZShjYWxsRnJhbWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJh
bWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CiAg
ICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUp
KTsKQEAgLTE3MjYsNyArMTcyNSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9u
Q2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAg
ICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1f
YXJnYyk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
Y2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0
UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJh
bWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMo
cGMpOwpAQCAtMTkxMyw3ICsxOTEyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLT5ieXRlY29kZU9m
ZnNldChwYykpKTsKICNlbHNlCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCpwYyk7
CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9j
YXN0PHVpbnQzMl90PihwYykpKTsKICNlbmRpZgogCiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93
Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTE5MzEsNyArMTkzMCw3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRh
Lm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkg
ewogICAgICAgICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJh
bWUtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAK
QEAgLTE5NjIsMTI0ICsxOTYxLDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9v
dXRfb2ZfbGluZV9qdW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcGNvZGU+Ci1zdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2lu
dChWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYg
c2lkZVN0YXRlKQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS50bXBz
W09wY29kZTo6YXJnQ291bnRJbmNsdWRpbmdUaGlzXS5hc1VJbnQzMigpOwotICAgIHVuc2lnbmVk
IGZpcnN0VmFyQXJnID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKLQotICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
IC0gMSwgWyZdIChKU1ZhbHVlKiBidWZmZXIpIHsKLSAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFs
T2JqZWN0LCBidWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1
ZSgpLCBmaXJzdFZhckFyZywgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKLSAgICB9
KTsKLSAgICBpZiAoYXJncy5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLQotICAgIEpT
VmFsdWUgcmVzdWx0OwotICAgIGlmIChPcGNvZGU6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzKQotICAgICAgICByZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0g
Y29uc3RydWN0KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1f
Y2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJn
cywgIiIpOwotCi0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVzdWx0OwotfQotCi1pbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIWNvZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0aW9uKCkpOwotICAgIGlm
IChPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogbmV4dFBDID0gcGMubmV4dCgpLnB0cigpOwotICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOwotICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBCeXRlY29kZUluZGV4
IG5leHRCeXRlY29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7Ci0gICAgYXV0byBuZXh0Qnl0
ZWNvZGUgPSBjb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsK
LSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKLSNlbmRpZgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLWV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNW
YWx1ZSByZXN1bHQpCi17Ci0gICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRz
IGRvIHJpZ2h0IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRv
IHRoYXQgaGVyZSBhbmQgcmV0dXJuLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgU2xv
d1BhdGhGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVj
a3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFtZSk7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OwotICAgIGF1dG8gcGMgPSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgYXV0byBvcGNvZGUg
PSBwYy0+b3Bjb2RlSUQoKTsKLSAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgIGNhc2Ugb3BfY2Fs
bF92YXJhcmdzOiB7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxs
VmFyYXJncz4oKS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKLSAgICAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0g
SlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBv
cF90YWlsX2NhbGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3
YXMgY2FsbGluZyB3YXMgaW5saW5lZC4KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZGlzcGF0Y2hUb05leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKLX0KLQotZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIC8qIG5lZWRlZCBmb3IgY0NhbGwyIGluIENM
b29wICovKQotewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgU2xvd1BhdGhGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRl
KGNhbGxGcmFtZSk7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRl
LT5ieXRlY29kZUluZGV4OwotICAgIEFTU0VSVChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7
Ci0KLSAgICBhdXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUlu
ZGV4KTsKLQotICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7Ci0gICAgc3dpdGNoIChv
cGNvZGUpIHsKLSAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaGFuZGxlVmFyYXJn
c0NoZWNrcG9pbnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFy
YXJncz4oKSwgKnNpZGVTdGF0ZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6Ci0gICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBj
YWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNp
ZGVTdGF0ZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Zh
cmFyZ3M6Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgp
ID09IG9wX3JldCB8fCBwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3Bfam1wLCAiV2Ugc3Ryb25n
bHkgYXNzdW1lIGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQgKG9yIHNv
bWV0aW1lcyBhIGptcCB0byBhIHJldCkuIik7Ci0gICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3Bv
aW50KHZtLCBjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdz
PigpLCAqc2lkZVN0YXRlLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7Ci0KLSAgICByZXR1cm4gZGlzcGF0
Y2hUb05leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKLX0KLQogZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQ
cm90b0NhbGxGcmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAg
IGlmIChjYWxsRnJhbWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuaAppbmRleCAwNTVmNWM5YTFhOGY5YTVhM2I0NjNlNzU3MWM2NDZhMjA3NTkyZGJm
Li4yZmYyOGIwMDZiYzIyMzMzMGNjNjc4NjVhMTY3OTRhOTBlN2U3YWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMTM2LDggKzEzNiw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9iZWdp
bik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBsZXJf
ZW5kKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVf
anVtcF90YXJnZXQpOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3df
c3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsK
LWV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9l
eGl0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB1bnVzZWQpOwotZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXRfZnJv
bV9pbmxpbmVkX2NhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGNhbGxS
ZXN1bHQpOwogI2lmIEVOQUJMRShDX0xPT1ApCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lOVEVS
TkFMOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KaW5kZXggM2YyNTExYmNjMDQ0MDZhMjc3YTNkZjcxMGI3YmNiNGEy
ZmYxMzUzYS4uYzhhMDdmMDBlZmMyNDg1MDQ2MDhlZGE2OTViMDg4MjVjZjJhNmEwNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgbWFjcm8gZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBv
aW50KG9wTmFtZSwgc2l6ZSkKICAgICBkZWZpbmVPU1JFeGl0UmV0dXJuTGFiZWwob3BOYW1lLCBz
aXplKQogCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCi0gICAgbG9hZGkgTExJ
bnRSZXR1cm5QQ1tjZnJdLCBQQworICAgIGxvYWRpIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8gYXJyYXlQcm9maWxlKG9mZnNldCwg
Y2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gpCkBAIC0xODQwLDE3ICsxODQw
LDEzIEBAIGVuZCkKIGNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQogCiAKLW1hY3JvIGJyYW5jaElm
RXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKK21hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFt
ZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgs
IHByZXBhcmVDYWxsKQorICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRoKQogICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MwogICAgIGxvYWRwIENvZGVCbG9jazo6bV92bVt0M10sIHQzCiAg
ICAgYnRweiBWTTo6bV9leGNlcHRpb25bdDNdLCAubm9FeGNlcHRpb24KLSAgICBqbXAgZXhjZXB0
aW9uVGFyZ2V0Ci0ubm9FeGNlcHRpb246ICAgIAotZW5kCi0KLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwg
c2xvd1BhdGgsIHByZXBhcmVDYWxsKQotICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRoKQot
ICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lKQorICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorLm5v
RXhjZXB0aW9uOgogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKICAgICBpZiBKU1ZBTFVFNjQKICAg
ICAgICAgbW92ZSByMSwgc3AKQEAgLTIwMDUsMzkgKzIwMDEsNiBAQCBvcChsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKIGVuZCkKIAogCi1vcChj
aGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgp
Ci0gICAgaWYgSlNWQUxVRTY0IGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAg
ICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLQotICAgICAgICBtb3ZlIGNmciwgYTAK
LSAgICAgICAgbW92ZSByMCwgYTEKLSAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZv
ckNDYWxsKCkgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZy
b20gb3VyIHNpZGUgc3RhdGUuCi0gICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRf
b3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCi0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0Nh
bGwoKQotICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3Bh
dGhfdHJhbXBvbGluZSkKLSAgICAgICAgam1wIHIxCi0gICAgZWxzZQotICAgICAgICBub3RTdXBw
b3J0ZWQoKQotICAgIGVuZAotZW5kKQotCi1vcChjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xp
bmUsIG1hY3JvICgpCi0gICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IGRpc3BhdGNoIHRvIHRo
ZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMgd2FzIGVhc2llciAKLSAgICAj
IGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9ybWFuY2UuCi0gICAgaWYgSlNW
QUxVRTY0IGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICByZXN0b3JlU3Rh
Y2tQb2ludGVyQWZ0ZXJDYWxsKCkKLQotICAgICAgICBtb3ZlIGNmciwgYTAKLSAgICAgICAgIyBX
ZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZvckNDYWxsKCkgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8g
dXNlIHRoZSBieXRlY29kZUluZGV4IGZyb20gb3VyIHNpZGUgc3RhdGUuCi0gICAgICAgIGNDYWxs
Mihfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZUFm
dGVyQ0NhbGwoKQotICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZSkKLSAgICAgICAgam1wIHIxCi0gICAgZWxzZQotICAgICAgICBu
b3RTdXBwb3J0ZWQoKQotICAgIGVuZAotZW5kKQotCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQg
d2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMg
VGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRo
ZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggMGUxNjMy
Y2RiY2FmMGVhYTQ4Y2M1YTRmOGFjYjQ3NjRlZDZlNTMwYy4uYWU2Njk5NDNhNTBkY2FkODg2NDdh
ZTdkNjVhZGE0MjI2ZGU5OWEyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTE0MywxOSArMTQzLDEx
IEBAIG1hY3JvIGNDYWxsNChmdW5jdGlvbikKICAgICBlbmQKIGVuZAogCi1tYWNybyBwcmVwYXJl
U3RhdGVGb3JDQ2FsbCgpCi0gICAgbW92ZSBQQywgYTEKLWVuZAotCi1tYWNybyByZXN0b3JlU3Rh
dGVBZnRlckNDYWxsKCkKLSAgICBtb3ZlIHIwLCBQQwotZW5kCi0KIG1hY3JvIGNhbGxTbG93UGF0
aChzbG93UGF0aCkKICAgICBtb3ZlIGNmciwgYTAKLSAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CisgICAgbW92ZSBQQywgYTEKICAgICBjQ2FsbDIoc2xvd1BhdGgpCi0gICAgcmVzdG9yZVN0YXRl
QWZ0ZXJDQ2FsbCgpCisgICAgbW92ZSByMCwgUEMKIGVuZAogCiBtYWNybyBkb1ZNRW50cnkobWFr
ZUNhbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCmluZGV4IGFiODhmZmU3ZGM5M2Q1ZTFlNDU2MGRlM2FlOTAwMjAzZmIx
NjgxZTIuLmVhNDNhYjY4OTU1NWI4M2JiMmY4OWExNjNhMDI0MTc2ZTBhZWZjZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCkBAIC00MiwxNCArNDIsNiBAQCBtYWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAg
IGptcCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNvZGVQdHJUYWcKIGVuZAogCi1tYWNybyBzdG9y
ZVBDKCkKLSAgICBzdG9yZWkgUEMsIExMSW50UmV0dXJuUENbY2ZyXQotZW5kCi0KLW1hY3JvIGxv
YWRQQygpCi0gICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQwotZW5kCi0KIG1hY3JvIGdl
dHVPcGVyYW5kTmFycm93KG9wY29kZVN0cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIg
Y29uc3RleHByICVvcGNvZGVTdHJ1Y3QlXyVmaWVsZE5hbWUlX2luZGV4W1BCLCBQQywgMV0sIGRz
dAogZW5kCkBAIC0xMDAsNyArOTIsNyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5n
IGJ5dGVjb2RlIGlzIGNsYWltaW5nIGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNy
byBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxv
YWRQQygpCisgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRb
Y2ZyXSwgUEMKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29k
ZVN0cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzk4LDcgKzM5MCw3IEBAIGVuZAogCiAjIENhbGwgYSBz
bG93IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1Bh
dGgsIGFjdGlvbikKLSAgICBzdG9yZVBDKCkKKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgp
CiAgICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTQwNywyMCArMzk5LDIwIEBA
IG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBj
YWxsVHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQ
QywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgIHByZXBh
cmVTdGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAg
IGNDYWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhy
b3dIYW5kbGVyCi0gICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQworICAgIGxvYWRpIEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiBlbmQKIAogbWFj
cm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAg
ICAgIDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlUEMoKQorICAgICAgICAg
ICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJd
CiAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3ZlIGNm
ciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjksNyArNDIxLDcgQEAgbWFjcm8g
Y2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAgICAg
ICAgICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAgICAg
ICAgIGxvYWRQQygpCisgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgICAgICBlbmQpCiBlbmQKIApAQCAtMjA2NSw3ICsy
MDU3LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVT
dHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBjZnIsIHQzCiAgICAg
ICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVj
dCwgbV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVQQygpCisgICAgICAgIHN0b3JlaSBQQywgQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgICAgICBzdG9yZWkg
dDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAg
ICAgbW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwg
SlNFbnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRl
eCA4ZjUwNWNjNjk5Y2Q0YWUzN2VmMzQ1MDBmZGZiZTY5OTk4MDdjZGEzLi44NDBmODliODhkNDIw
Y2MzYjc1YzgzZDZjNTc4MjQxNTQwMmYzMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJnTGlzdC5oCkBAIC0xMzMsMTcgKzEzMyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3Zl
cmZsb3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50
LCBjb25zdCBGdW5jdG9yJiBmdW5jKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NpemUpOwot
ICAgICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7Ci0gICAgICAgIGlmIChCYXNlOjpoYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc2l6ZSA9IGNvdW50Owot
ICAgICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7Ci0g
ICAgfQotCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4
cGFuZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZmZiNzQ1OWE2YWRjY2JhYjE2ZGE4YTRlZjhi
MTcxMWQ4NzJhMWFmOS4uZjhkOTc5OTU4NzQ1MjI2YTQ3ZTZmOGI2YzU1ODYwYzE4ZmNlODdhMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAt
MTc4OCw3ICsxNzg4LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQg
ZXZhbENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAg
ICB1bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsg
fQotICAgIHVuc2lnbmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVj
a3BvaW50czsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUNvdW50OyB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRD
b2x1bW47IH0KIApAQCAtMTgyMSw3ICsxODIwLDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2V2YWxDb250ZXh0VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwog
ICAgIHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2lu
dHMgOiAxOwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VN
b2RlIG1fcGFyc2VNb2RlOwpAQCAtMjAyMCw3ICsyMDE4LDYgQEAgQUxXQVlTX0lOTElORSBVbmxp
bmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0
dXJlKgogCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRy
aVN0YXRlKSkKICAgICAsIG1fYWdlKDApCi0gICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENv
ZGVCbG9jay5oYXNDaGVja3BvaW50cygpKQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVC
bG9jay5mZWF0dXJlcygpKQogICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNl
TW9kZSgpKQpAQCAtMjIwOSw3ICsyMjA2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENv
ZGVCbG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAg
ICBtX3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0
aW9uTW9kZSA9IGNvZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBl
ID0gY29kZUJsb2NrLm1fY29kZVR5cGU7Ci0gICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9j
ay5tX2hhc0NoZWNrcG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29k
ZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIs
IGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDgxNmJiMmYzMmI1N2JlNmY0ODZk
ZGViOGY1ZTczMTEwZDU5Y2YwZjIuLjg3NzE2ZDI3N2EwZWJjMmRiNGUxNTljZjY5ZjliMmUyYjVj
YTlmNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcApAQCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9O
T19TRVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkK
IAotI2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkK
LSNkZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKKyNkZWZpbmUg
R0VUKG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCisj
ZGVmaW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCiAK
ICNkZWZpbmUgUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExNTIsNyAr
MTE1Miw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVh
dGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwor
ICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgSlNTY29w
ZSogY3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9s
VGFibGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpT
VmFsdWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFs
dWUoKTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlh
bFZhbHVlID09IGpzVERaVmFsdWUoKSk7CkBAIC0xMTY3LDcgKzExNjgsOCBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9
IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgSlNTY29wZSogY3VycmVudFNjb3Bl
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5v
ZmZzZXQoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApA
QCAtMTE3Niw3ICsxMTc4LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2Nv
cGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2
YWw+KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNT
Y29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3Qs
IHNjb3BlLCBpZGVudCk7CiAKICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTExOTAsNyArMTE5
Miw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3Bl
KiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVj
dCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
aWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5
IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigp
OwpAQCAtMTQzNSw3ICsxNDM3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJh
eV9idWZmZXIpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
TmV3QXJyYXlCdWZmZXI+KCk7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVy
Zmx5LmlzQ29uc3RhbnQoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKICAgICBK
U0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpT
SW1tdXRhYmxlQnV0dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkp
LmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDU0LDcgKzE0
NTYsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAg
ICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGls
YXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQog
ICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKLSAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
aW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5
KTsKKyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRh
YmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVy
Zmx5KTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKaW5kZXggNDdiMjQ3
NDE4Y2E4OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVhNWZmMC4uNGJkMTkyYTZjNzdlZmMwMjZlN2E5
NWE1YjdiZWM3MTI0MzY3N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5jcHAKQEAgLTM1LDExICszNSw2IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0
cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgYXJncywgZXJyb3JNZXNzYWdlKTsKLX0K
LQotSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYg
YXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC01MSw5ICs0NiwxMCBAQCBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVgogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVj
dChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5
cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CiB9CiAKKwogSlNP
YmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNv
bnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3
VGFyZ2V0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAppbmRleCBmYjYxOTc0YTdkYjM5
YzQ5MWY5ZjkzYmFlYjZjYWMxMjYyMWYzYmEyLi5kMGFlMDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5
NjdlMDJhYTZlZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3Ry
dWN0RGF0YS5oCkBAIC02MCw4ICs2MCw2IEBAIHN0cnVjdCBDb25zdHJ1Y3REYXRhIHsKIAogLy8g
Q29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERh
dGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgogSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
ZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2Up
OwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0
JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKLQogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgY29uc3RydWN0b3IsIENvbnN0
cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBu
ZXdUYXJnZXQpOwogCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKaW5kZXggNGIzNDYxZGUyMmU3NmY3ZGJlMzE4Mzk0MjQ1YTkz
YzU3NTA5ZjM4Ny4uYTY3OTVkYTFlZGNjZjMxMDIyYWMyZGQ5YWVmYWZkNDNhMDFhNWM4NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CkBAIC0xMzcsMTkgKzEzNywyMCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVu
dChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogICAgIG1fbWFwcGVkQXJndW1lbnRzLmF0KGluZGV4
LCBpbnRlcm5hbExlbmd0aCgpKSA9IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERp
cmVjdEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX21hcHBl
ZEFyZ3VtZW50cykgewogICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGxlbmd0aCAr
IG9mZnNldCwgbV9sZW5ndGgpOwogICAgICAgICB1bnNpZ25lZCBpOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhcnQgPSBmaXJzdEVsZW1lbnREZXN0IC0gb2Zmc2V0OwogICAgICAgICBmb3Ig
KGkgPSBvZmZzZXQ7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVz
dFtpIC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGNhbGxGcmFt
ZS0+cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOwogICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9
IGdldChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsg
aSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNl
dCwgbGVuZ3RoKTsKIH0KIAogdW5zaWduZWQgRGlyZWN0QXJndW1lbnRzOjptYXBwZWRBcmd1bWVu
dHNTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmgKaW5kZXggOGQ5NjQyYTJjOTQwNDA4MGI5MTNhYzI3MGNkMDEzYzM5ZWNkYTgxNy4uMGE2
YjFhMDY2MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2ZjZTc3MmUwYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0NCw3ICsxNDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50
cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAgICB9
CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKaW5kZXggMDc0YzIxNjJkOGRhMTY0NzA2ZjQw
MDRiZGFiM2RhZWViMjcyY2JiYy4uYjMxYjcwYWJkMDBjZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBk
NTFjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHMuaApAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRNb2RpZmll
ZEFyZ3VtZW50RGVzY3JpcHRvcihWTSYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgp
OwogICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVkQXJndW1lbnRzUHRyID0g
Q2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1vZGlmaWVk
QXJndW1lbnRzUHRyIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgK
aW5kZXggZTBhYWJmNWYyZWUxODViN2QxMzMxNjAzN2Q4YzFkODg4NDI0Njg1MC4uMjE4MmE2MmIx
MzAzNDNhZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCkBAIC0yOTcs
NyArMjk3LDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQXJndW1l
bnREZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ24KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzA1
LDkgKzMwNSw5IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsCiAgICAgVHlwZSogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1l
bnQoaSArIG9mZnNldCkpCi0gICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgY2FsbEZyYW1l
LT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShp
ICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0
W2ldID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CisgICAgICAgICAgICBjYWxsRnJh
bWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNl
dCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApp
bmRleCA2ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4NDk4MjJhYjhkNjZmNWQxLi40NGM3ZTUyMGYx
YzBhMjQwYThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcApAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBKU0FycmF5Ojpm
aWxsQXJnTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1
ZmZlciYgYXIKICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVjdCwgaSkpOwogfQog
Ci12b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTEyNjksNyArMTI2OSw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVu
CiAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0
KHRoaXMsIGkpOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJz
dEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk0LDExICsx
Mjk0LDExIEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVuCiAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdiA9IHZlY3RvcltpXTsKICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOworICAg
ICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQo
KTsKICAgICB9CiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBm
aXJzdEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAg
ICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xv
YmFsT2JqZWN0LCBpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXgg
MzExNjViNWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEwYWM0YTdkOWJmZi4uMzE3OTQ5YzU3MmExMWI3
NWFkYzE4M2FjOWU0MTQ0ZjY2Y2Y2YWI1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaApAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJn
dW1lbnRCdWZmZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBm
aXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNl
cnZhYmxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcAppbmRleCBlNDkwOTc1NjE2ZGFkMzkxMTQyMzgyYzk5M2U3
OGQxMmMxOTExYzJhLi5lMzJlOTQ5N2Q0NzgyOTUwMzNkYWE5OWE1OTM2ZGVhMTlhMWM0OWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRl
cmZseS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0
ZXJmbHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1YmxpY0xlbmd0aCgp
KQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9m
ZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBq
c1VuZGVmaW5lZCgpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3Qg
KyBpKSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAppbmRleCAwN2UxYThhMTBj
M2NkYzcxMTdhY2EzZGM1NDNlZDdkZGIwZDQxZjNlLi5hY2I2ODQ4MTkxYTE5MDM1MjJiOWIzZTRk
MDBmOTY5ZTQwYjc4MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
LSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lk
IGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENv
bXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCmluZGV4IDE2YWEzNjlmNDg1MDcwNjFjMDYzNjE1MThhZTE1ZDJi
YzY4ZmI2ZGQuLmE2ZWIwZWE1ZjZhYWRlYjM3ZDI3Nzk0ZjdjOTEzZjY4MTY4MzQ5N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0LDcgKzIwNCw2IEBA
IHZvaWQgSlNMb2NrOjp3aWxsUmVsZWFzZUxvY2soKQogeyAgIAogICAgIFJlZlB0cjxWTT4gdm0g
PSBtX3ZtOwogICAgIGlmICh2bSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoIXZtLT5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJSZWxlYXNpbmcgSlNMb2NrIGJ1
dCBwZW5kaW5nIGNoZWNrcG9pbnQgc2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFibGUiKTsKICAgICAg
ICAgdm0tPmRyYWluTWljcm90YXNrcygpOwogCiAgICAgICAgIGlmICghdm0tPnRvcENhbGxGcmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAppbmRleCA1OTY4MDhjYWZjMGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5
MTZjNjY0NDg1Li5kYjA1MjU0ODgyNTMzOWE2YjEzMmJhNGU0NDJiMjExZDZkZTM3YmEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
CiAKICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5zZXQo
Z2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
KTsKIAotICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQo
Z2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29u
c3RhbnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmpl
Y3QtPnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFi
bGUuc2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxl
Kj4odW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdp
c3Rlck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkp
OwogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCmluZGV4IDkxZWQ3MzllMjVmNDkzOGVmNTAyNzI3ZGY1MTY4MGQ4NmNh
MjA4N2YuLjQxMzg3Yzg1MGE5OTVhZDU3NDIxMDUwY2RlODZjYjI1MjFlNTQxMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01MDksOSArNTA5LDExIEBA
IHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIGlmIChPcHRpb25z
Ojpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsg
bWluaW11bVJlc2VydmVkWm9uZVNpemUpCiAgICAgICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCkgPSBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRa
b25lU2l6ZTsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLy8gRklYTUU6IE1ha2UgcHJv
YmUgT1NSIGV4aXQgd29yayBvbiAzMi1iaXQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgp
ID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAg
ICAgICAgIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAzYzc0MGQ0
OGY2MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwLi4wODFkOTc4YTdiMmE2MjY2YWM1NTJj
Mzc5ZDM4NDUwMDVkYzExZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFy
Z3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3Jh
Z2UoKVtpIC0gbmFtZWRMZW5ndGhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRz
Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSog
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lk
IFNjb3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0Fy
Z3VtZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKaW5kZXggZTU4Y2IyMmVmZDQ4YzY3NGJmNWIxYjExMjgw
YjUxYWJjMGRlMDg0Yi4uZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgK
QEAgLTE0Miw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1l
bnRzPFNjb3BlZEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgs
IG1fdGFibGUtPmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggODFkNDA2NGExODc4N2FhYTA5
NDBiNWFmYzAyYmY2ZGYzN2E4NTY0Ny4uZWEzYjQ5MzQyYmFjOWI2ODhhOGRmZDgxZTNlMzUxMWQ3
MWYzNTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzQsNyArMzQs
NiBAQAogI2luY2x1ZGUgIkJvb2xlYW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0
YWJsZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCi0jaW5jbHVk
ZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAg
LTEwNTEsMjggKzEwNTAsOCBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogICAgICAgICB9CiAgICAgfQogfQot
Ci12b2lkIFZNOjpzY2FuU2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykgY29uc3QK
LXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZXIgOiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUpCi0g
ICAgICAgIHJvb3RzLmFkZChpdGVyLnZhbHVlLT50bXBzLCBpdGVyLnZhbHVlLT50bXBzICsgc2l6
ZW9mKGl0ZXIudmFsdWUtPnRtcHMpKTsKLX0KICNlbmRpZgogCi12b2lkIFZNOjphZGRDaGVja3Bv
aW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYgcGF5bG9hZCkKLXsKLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2NoZWNr
cG9pbnRTaWRlU3RhdGUuYWRkKGNhbGxGcmFtZSwgV1RGTW92ZShwYXlsb2FkKSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBWTTo6ZmluZENoZWNrcG9pbnRP
U1JTaWRlU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8gc2lkZVN0YXRlID0gbV9jaGVja3Bv
aW50U2lkZVN0YXRlLnRha2UoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gc2lkZVN0YXRlOwotfQot
CiB2b2lkIGxvZ1Nhbml0aXplU3RhY2soVk0mIHZtKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlU2FuaXRpemVTdGFjaygpICYmIHZtLnRvcENhbGxGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggZjY1ODM4MjcyZDZiYjU0Njc0YTFhYjA4OWIyNTNmMDBkOTdmNjk2
My4uNTM5NTEzYmUwOTU2MDM5MjM5NGNjNDI0OWFhNTI3MzZkY2I4MGYzMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDMsMTIgKzEwMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnk7CiBjbGFzcyBDYWxsRnJhbWU7Ci1zdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7
CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlm
aWVyczsKIGNsYXNzIENvbXBhY3RWYXJpYWJsZU1hcDsKLWNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
OwogY2xhc3MgQ3VzdG9tR2V0dGVyU2V0dGVyOwogY2xhc3MgRE9NQXR0cmlidXRlR2V0dGVyU2V0
dGVyOwogY2xhc3MgRGF0ZUluc3RhbmNlOwpAQCAtOTU4LDExICs5NTYsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwog
Ci0gICAgdm9pZCBhZGRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSosIHN0ZDo6dW5p
cXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4mJik7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBmaW5kQ2hlY2twb2ludE9TUlNpZGVTdGF0
ZShDYWxsRnJhbWUqKTsKLSAgICBib29sIGhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUuc2l6ZSgpOyB9Ci0gICAgdm9pZCBzY2Fu
U2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJikgY29uc3Q7Ci0KICAgICBWTUVudHJ5U2NvcGUq
IGVudHJ5U2NvcGU7CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9i
amVjdCB7IG51bGxwdHIgfTsKQEAgLTEyMTQsNyArMTIwNyw2IEBAIHByaXZhdGU6CiAgICAgTG9j
ayBtX3NjcmF0Y2hCdWZmZXJMb2NrOwogICAgIFZlY3RvcjxTY3JhdGNoQnVmZmVyKj4gbV9zY3Jh
dGNoQnVmZmVyczsKICAgICBzaXplX3QgbV9zaXplT2ZMYXN0U2NyYXRjaEJ1ZmZlciB7IDAgfTsK
LSAgICBIYXNoTWFwPENhbGxGcmFtZSosIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhp
dFNpZGVTdGF0ZT4+IG1fY2hlY2twb2ludFNpZGVTdGF0ZTsKICAgICBJbmxpbmVXYXRjaHBvaW50
U2V0IG1fcHJpbWl0aXZlR2lnYWNhZ2VFbmFibGVkOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29u
dHJvbEZsb3dQcm9maWxlcj4gbV9jb250cm9sRmxvd1Byb2ZpbGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggZTE0ODQwMGQ0ODdkZmM2NGU0NDA1
NGRkYWRiMDg1ODk3MmUzOWEyNi4uODFjOWYxZjY3NDcwNzllZDgzMTI2NjJjMDgzMDBjNmNjMzYy
OGUzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBA
IC0zOTcsOCArMzk3LDggQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKICAgICBjb25zdCBSZWdpc3RlciogaXQ7CiAgICAgY29uc3QgUmVnaXN0
ZXIqIGVuZDsKIAotICAgIGl0ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgZW5k
ID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
LSAxKTsKKyAgICBpdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyBDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKyBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBlbmQgPSBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50IC0gMTsKICAg
ICB3aGlsZSAoaXQgPiBlbmQpIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsK
ICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaAppbmRleCAyZjRiMWM3ZGU2YTg3Yzc0MTFlODZlODdlN2YxOTI0NzM1MmMwZjhiLi5mNjg4
YTdjOWU5NDI2ZDllMGJlYTNhZjBjZmZhZjJjMjdkZDVhNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaApAQCAtNzIsMTEgKzcy
LDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFt
JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdWludDY0X3QgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQotICAg
IEFMV0FZU19JTkxJTkUgVHlwZSBnZXRDb25zdGFudFR5cGUoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleF07IH0KKyAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKGludCBpbmRl
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2Fz
bUJ5dGVjb2RlcygpKTsKLSAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRUeXBlc1tyZWcudG9Db25z
dGFudEluZGV4KCldOworICAgICAgICByZXR1cm4gbV9jb25zdGFudFR5cGVzW2luZGV4IC0gRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5zdHJ1Y3Rp
b25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYWI4MGY2ZjMw
ODRlYjY2NDc2ZmRhZWQ3NGY5MGIwZDYxM2E4OTA2ZS4uNjFmNWFkNGUwMDJiZTM0MWY5YmRiZjkx
YTUzMDgzM2U4Y2U4Mzk3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC0yNDIsOSArMjQyLDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsg
bV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKLSAgICAvLyBXZSBuZWVkIHRoaXMgZm9yIGF1dG9nZW5l
cmF0ZWQgdGVtcGxhdGVzIHVzZWQgYnkgSlMgYnl0ZWNvZGVzLgotICAgIHZvaWQgc2V0VXNlc0No
ZWNrcG9pbnRzKCkgY29uc3QgeyBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsgfQotCiAgICAg
dm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKikgeyB9CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5k
ZXggMjA2OWFkOGIyNGI3MzY5ZGNkOWQ1ZjBjN2Y1OGVlYzkyYjM1Yzc2ZC4uZTJhNGM0MjUzM2Ey
ZjQ0N2RkMzIwMjA1Yjc3N2I3OGIwMzljMGI2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFdhc206OkV4Y2VwCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVG
b3JDYXRjaCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0
byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUg
dGhpcyB0ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihjYWxsRnJhbWUp
W3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KGluc3RhbmNlLT5tb2R1bGUoKSk7CisgICAgYml0d2lzZV9jYXN0PHVpbnQ2NF90
Kj4oY2FsbEZyYW1lKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2
NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOwogICAgIHJldHVybiB2bS50YXJnZXRNYWNoaW5lUENG
b3JUaHJvdzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhz
LmNwcAppbmRleCA1NGY2MzZhYzFiNTA3NWQxYzY2N2IzOGE5MDMxMzI5MGQ1ZjMzM2NlLi45Mjdh
Njk4NGEzYmUwMTRjZjNlYTdkNjdmMDM0NTg0ZWViZWI2MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAogI2RlZmluZSBSRUFEKHZpcnR1YWxSZWdpc3Rl
cikgXAogICAgICh2aXJ0dWFsUmVnaXN0ZXIuaXNDb25zdGFudCgpIFwKLSAgICAgICAgPyBKU1Zh
bHVlOjpkZWNvZGUoQ09ERV9CTE9DSygpLT5nZXRDb25zdGFudCh2aXJ0dWFsUmVnaXN0ZXIpKSBc
CisgICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmly
dHVhbFJlZ2lzdGVyLm9mZnNldCgpKSkgXAogICAgICAgICA6IGNhbGxGcmFtZS0+cih2aXJ0dWFs
UmVnaXN0ZXIpKQogCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBXYXNtOjpGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3ZjQzZGFmMjRmNGYyMGJmODFlYTEzZjdmNGI1NzkxM2JiYjhjYjg3
Li42ZmIyZjU0NTNhMTU3YTUwMWNjZWM1ZDcxMzY4M2VlZjc3ZTljODU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3Miw3ICszNzIsNiBAQAogCQk1MzEx
QkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFC
RDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzMzhFQkE0MjNBQjA0RDEwMDM4MjY2MiAvKiBFbnVt
Q2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRl
Y29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyog
UHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0
eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTYsNyArOTU1LDYgQEAK
IAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5oICovLAogCQkJCUZFMDVGQUU2
MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRzLmggKi8sCiAJCQkJQUQ2NTNEQTgyMDA2
QjZDMjAwRDgyMEQ3IC8qIER1bWJWYWx1ZVRyYWl0cy5oICovLAotCQkJCTUzMzhFQkE0MjNBQjA0
RDEwMDM4MjY2MiAvKiBFbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oICovLAogCQkJCTFBRUE4
OEUxMUQ2QkJDRjQwMEU1QUQ2NCAvKiBFbnVtVHJhaXRzLmggKi8sCiAJCQkJQUQ3QzQzNEExREQy
QTRBNzAwMjY4ODhCIC8qIEV4cGVjdGVkLmggKi8sCiAJCQkJQThBNDcyOUYxNTFBODI1QTAwNDEy
M0ZGIC8qIEV4cG9ydE1hY3Jvcy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0
bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAppbmRleCBiNDZkYTllODVhYjliNjg2MjQz
OGE2OTJlMzY2YTc1MDU0ZGNjNmMxLi40YzZmNWQ0NDI2MzJjM2VmYzAwMGJkMThlOWUzNjk0NTJm
YWYxYzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaApAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG5l
eHRQb3NzaWJseVVuc2V0KHNpemVfdCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhcihzaXplX3QpOwog
ICAgIHZvaWQgY2xlYXJBbGwoKTsKLSAgICB2b2lkIGludmVydCgpOwogICAgIGludDY0X3QgZmlu
ZFJ1bk9mWmVyb3Moc2l6ZV90IHJ1bkxlbmd0aCkgY29uc3Q7CiAgICAgc2l6ZV90IGNvdW50KHNp
emVfdCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBpc0VtcHR5KCkgY29uc3Q7CkBAIC0x
MDMsMTIgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcj0oYm9vbCB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9iaXRtYXAtPnNldChtX2luZGV4LCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAg
ICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwpA
QCAtMTE4LDkgKzExMSw2IEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBmaW5kQml0KDAsIHRydWUpKTsgfQogICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBiaXRtYXBTaXplKTsgfQogICAg
IAotICAgIGl0ZXJhdG9yIG9wZXJhdG9yW10oc2l6ZV90KTsKLSAgICBjb25zdCBpdGVyYXRvciBv
cGVyYXRvcltdKHNpemVfdCkgY29uc3Q7Ci0KICAgICB2b2lkIG1lcmdlQW5kQ2xlYXIoQml0bWFw
Jik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKICAgICAKQEAgLTIzNCwxMyArMjI0
LDYgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6Y2xlYXJBbGwo
KQogICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKIH0KIAotdGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgotaW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6aW52ZXJ0KCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpCi0gICAgICAgIGJpdHNbaV0gPSB+Yml0c1tpXTsKLX0KLQog
dGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHNp
emVfdCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpuZXh0UG9zc2libHlVbnNldChzaXpl
X3Qgc3RhcnQpIGNvbnN0CiB7CkBAIC00MjYsMTkgKzQwOSw2IEBAIGlubGluZSBib29sIEJpdG1h
cDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yIT0oY29uc3QgQml0bWFwJiBvdGhlcikg
Y29uc3QKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKLXRlbXBsYXRlPHNpemVf
dCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KLWlubGluZSBhdXRvIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSAtPiBpdGVyYXRvcgot
ewotICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBpbmRleCk7Ci19Ci0KLXRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KLWlubGluZSBhdXRvIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46Om9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCAtPiBjb25zdCBpdGVyYXRvcgotewotICAgIHJldHVybiAo
KmNvbnN0X2Nhc3Q8Qml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPio+KHRoaXMpKVtpbmRleF07
Ci19Ci0KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlu
bGluZSB1bnNpZ25lZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpoYXNoKCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZmEwNmIzMTQ0MTk0ZWE1NTg3MzNjYTFhMmYyZDEx
NDM4MzIxZjYzZi4uYjI4N2Y3N2U3OGUzNDc1OTk5MTVhMDY2ZDVmMTBlN2MzOGI4N2YyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKQEAgLTU1LDcgKzU1LDYgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVS
UwogICAgIERvdWJseUxpbmtlZExpc3QuaAogICAgIER1bWJQdHJUcmFpdHMuaAogICAgIER1bWJW
YWx1ZVRyYWl0cy5oCi0gICAgRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaAogICAgIEVudW1U
cmFpdHMuaAogICAgIEV4cGVjdGVkLmgKICAgICBFeHBvcnRNYWNyb3MuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCBiL1NvdXJjZS9XVEYv
d3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM1N2JhMmZhMmY3OTI5YTZhOTk4YTlhNGVmMTRkMmJlNTc1NDYzNzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvRW51
bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotI2RlZmluZSBPVkVSTE9BRF9PUEVSQVRP
Ul9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCBvcCwgZW5hYmxlRXhwcmVzc2lvbikgXAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFwKLSAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBv
cChlbnVtTmFtZSBlbnVtRW50cnksIFQgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJs
ZUV4cHJlc3Npb24pLCBUPiBcCi0gICAgeyBcCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihlbnVtRW50cnkpIG9wIHZhbHVlOyBcCi0gICAgfSBcCi0gICAgXAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFwKLSAgICBjb25zdGV4cHIgYXV0byBvcGVyYXRvciBvcChUIHZhbHVlLCBlbnVt
TmFtZSBlbnVtRW50cnkpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8KGVuYWJsZUV4cHJlc3Npb24pLCBU
PiBcCi0gICAgeyBcCi0gICAgICAgIHJldHVybiB2YWx1ZSBvcCBzdGF0aWNfY2FzdDxUPihlbnVt
RW50cnkpOyBcCi0gICAgfSBcCi0KLSNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikgXAotICAgIE9WRVJM
T0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICssIGVuYWJsZUV4cHJl
c3Npb24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCAtLCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VO
VU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgKiwgZW5hYmxlRXhwcmVzc2lvbikgXAotICAgIE9WRVJM
T0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIC8sIGVuYWJsZUV4cHJl
c3Npb24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1O
YW1lLCAlLCBlbmFibGVFeHByZXNzaW9uKSBcCi0KLSNkZWZpbmUgT1ZFUkxPQURfTUFUSF9PUEVS
QVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoZW51bU5hbWUpIE9WRVJMT0FEX01B
VEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIHN0ZDo6aXNfaW50ZWdy
YWxfdjxUPikKLQotI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURf
T1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPT0sIGVuYWJsZUV4cHJlc3Np
b24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCAhPSwgZW5hYmxlRXhwcmVzc2lvbikgXAotICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVN
X0NMQVNTX1dIRU4oZW51bU5hbWUsIDwsIGVuYWJsZUV4cHJlc3Npb24pIFwKLSAgICBPVkVSTE9B
RF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8PSwgZW5hYmxlRXhwcmVz
c2lvbikgXAotICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5h
bWUsID4sIGVuYWJsZUV4cHJlc3Npb24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5V
TV9DTEFTU19XSEVOKGVudW1OYW1lLCA+PSwgZW5hYmxlRXhwcmVzc2lvbikgXAotCi0jZGVmaW5l
IE9WRVJMT0FEX1JFTEFUSU9OQUxfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdS
QUxTKGVudW1OYW1lKSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9DTEFT
U19XSEVOKGVudW1OYW1lLCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0
b3IuaAppbmRleCA5MjA4OTVmYzQ5ZTcxYmY5NjY5MjIxYzEzMWExNzQyZmI3NThmZmQyLi44ODVi
N2IxNzNiMTFhNjAxYmUyOWEzMzJhYjlkMmE0MTRkNTYyMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rv
ci5oCkBAIC00NTAsNyArNDUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBvcGVy
YXRvciBib29sKCkgY29uc3QKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiAhISgqbV93b3JkICYgbV9tYXNrKTsKICAgICB9CkBAIC00NjQs
OSArNDY0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAg
RmFzdEJpdFJlZmVyZW5jZSYgb3BlcmF0b3J8PShib29sIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA/
ICp0aGlzID0gdmFsdWUgOiAqdGhpczsgfQotICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9y
Jj0oYm9vbCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPyAqdGhpcyA6ICp0aGlzID0gdmFsdWU7IH0K
LQogcHJpdmF0ZToKICAgICB1aW50MzJfdCogbV93b3JkIHsgbnVsbHB0ciB9OwogICAgIHVpbnQz
Ml90IG1fbWFzayB7IDAgfTsKQEAgLTUxMiwxMSArNTA5LDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV93b3Jkcy5jbGVhckFsbCgpOwogICAgIH0KLQotICAgIC8vIEZvciB0ZW1wbGF0aW5n
IGFzIFZlY3Rvcjxib29sPgotICAgIHZvaWQgZmlsbChib29sIHZhbHVlKSB7IHZhbHVlID8gc2V0
QWxsKCkgOiBjbGVhckFsbCgpOyB9Ci0gICAgdm9pZCBncm93KHNpemVfdCBuZXdTaXplKSB7IHJl
c2l6ZShuZXdTaXplKTsgfQotCisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2xl
YXJSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIGJpdHZlY3RvciBjaGFuZ2VkLgpAQCAtNTk2LDUgKzU4
OSw0IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6RmFzdEJp
dFJlZmVyZW5jZTsKIHVzaW5nIFdURjo6RmFzdEJpdFZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVkQWNj
ZXNzLmgKaW5kZXggM2EzNWIzOGY0YzAyMzY3OWFjN2NmYzljNDY1NjA4NGEzOTE0ODNiMi4uNWE0
ZTllZjQ0OTRlZjQ2Y2E5ZTRlZWY3N2ZkY2MwZDYwZmFhNGExMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVW5hbGlnbmVkQWNjZXNzLmgKKysrIGIvU291cmNlL1dURi93dGYvVW5hbGlnbmVk
QWNjZXNzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgogaW5saW5lIFR5cGUgdW5hbGlnbmVkTG9hZChjb25zdCB2b2lkKiBwb2ludGVy
KQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8VHlwZT46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWw8VHlwZT46OnZh
bHVlLCAiIik7CiAgICAgVHlwZSByZXN1bHQgeyB9OwogICAgIG1lbWNweSgmcmVzdWx0LCBwb2lu
dGVyLCBzaXplb2YoVHlwZSkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00Myw3ICs0Myw3IEBA
IGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+CiBpbmxpbmUgdm9pZCB1bmFsaWduZWRTdG9yZSh2b2lkKiBwb2ludGVy
LCBUeXBlIHZhbHVlKQogewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29w
eWFibGU8VHlwZT46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWw8VHlwZT46OnZhbHVlLCAiIik7CiAgICAgbWVtY3B5KHBvaW50ZXIsICZ2YWx1ZSwgc2l6ZW9m
KFR5cGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGQzNzZiZjIwNTdmMjY2YjY3YjU2YTAxZDYxNzc5ZTE4YTgyNmZjNTguLmM1YTdi
NzBjOTY2NDU0ZjViZjM1NWQ3YmFmM2M4MmQzMGQ2MjAzNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0xMi0y
NCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1Mzg5Ni4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU4MgorCisgICAgICAgIEJyb2tlIEFSTSBidWlsZCAo
UmVxdWVzdGVkIGJ5IGFwIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNl
dDoKKworICAgICAgICAiREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRvIHRoZSBtaWRk
bGUgb2YgYSBieXRlY29kZSIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNTIzMgorICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjUzODk2CisKIDIwMTktMTItMjQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIERlbnkgTm90aWZpY2F0aW9uIEFQSSBhY2Nlc3MgZm9yIG5vbiBzZWN1cmUg
Y29udGV4dHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDVmYmMyMDllZGU0ZDM0
NWE0NjA1YjAwZDI3MTcyMDQ1ZDA0OTJjZTYuLmNkYmY5YzBkYmY5MzJlMjhjNmQ1YTgyMDhhMGE5
OGNjZWU2YWVkOWYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtNDk4LDYgKzQ5
OCw3IEBAIE5PX0NKSVRfT1BUSU9OUyA9IFsiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0t
dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAwCiBCM08xX09QVElPTlMgPSBbIi0tZGVmYXVs
dEIzT3B0TGV2ZWw9MSJdCiBCM08wX09QVElPTlMgPSBbIi0tbWF4REZHTm9kZXNJbkJhc2ljQmxv
Y2tGb3JQcmVjaXNlQW5hbHlzaXM9MTAwIiwgIi0tZGVmYXVsdEIzT3B0TGV2ZWw9MCJdCiBGVExf
T1BUSU9OUyA9IFsiLS11c2VGVExKSVQ9dHJ1ZSJdCitQUk9CRV9PU1JfRVhJVF9PUFRJT04gPSBb
Ii0tdXNlUHJvYmVPU1JFeGl0PXRydWUiXQogRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TID0gWyIt
LWZvcmNlT1NSRXhpdFRvTExJbnQ9dHJ1ZSJdCiAKIHJlcXVpcmVfcmVsYXRpdmUgIndlYmtpdHJ1
YnkvanNjLXN0cmVzcy10ZXN0LXdyaXRlci0jeyR0ZXN0V3JpdGVyfSIKQEAgLTcxMiw3ICs3MTMs
NyBAQCBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQog
ZW5kCiAKIGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAi
LS12YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1h
aXJGb3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC12
YWxpZGF0ZS1zYW1wbGluZy1wcm9maWxlciIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICItLXVz
ZVNhbXBsaW5nUHJvZmlsZXI9dHJ1ZSIsICItLWFpckZvcmNlSVJDQWxsb2NhdG9yPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgUFJPQkVfT1NSX0VYSVRfT1BUSU9OICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUTm9Q
dXRTdGFja1ZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MjgsNyAr
NzI5LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVE9TUlZhbGlkYXRpb24oKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuREZHRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKLSAgICBydW4oImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1Rf
Q09OVElOVU9VU0xZX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZGZnLWVhZ2VyIiwgKihFQUdFUl9PUFRJ
T05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIFBST0JFX09TUl9FWElUX09QVElP
TiArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCiBlbmQKIAogZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYWY5NmRiMmI2OWUwMWVkYzJiNGRkM2Q4ZjMxZjlkY2M4YzlkNDVmMC4u
NjYyODVmOWM3Y2MyYjJiNDYxMTBjZjNkYWI3NDZhN2ZkNWNjYmIwYiAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxOS0xMi0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI1Mzg5Ni4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU4MgorCisgICAgICAgIEJyb2tlIEFS
TSBidWlsZCAoUmVxdWVzdGVkIGJ5IGFwIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVk
IGNoYW5nZXNldDoKKworICAgICAgICAiREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0IHRv
IHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZSIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNTIzMgorICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMjUzODk2CisKIDIwMTktMTItMjMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgREZHL0ZUTCBzaG91bGQgYmUgYWJsZSB0byBleGl0
IHRvIHRoZSBtaWRkbGUgb2YgYSBieXRlY29kZQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
YXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9u
YWxseS5qcyBiL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3Ro
LW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGYzZjE1YTZlYjhjMjdjYzBhZDJlOWY1OTU0MWZmZTJjNTBhYzBhMjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9zdHJlc3MvYXBw
bHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25jZS1leGNlcHRpb25zLW9jY2FzaW9uYWxs
eS5qcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLQotbGV0IGN1cnJlbnRBcmdDb3Vu
dDsKLWZ1bmN0aW9uIGV4cGVjdGVkQXJnQ291bnQoKSB7Ci0gICAgcmV0dXJuIGN1cnJlbnRBcmdD
b3VudDsKLX0KLW5vSW5saW5lKGV4cGVjdGVkQXJnQ291bnQpOwotCi1mdW5jdGlvbiBjYWxsZWUo
KSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWRBcmdDb3VudCgpKQotICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKLX0KLQotZnVuY3Rpb24gdGVzdChhcnJheSkgewotICAg
IGNhbGxlZS5hcHBseSh1bmRlZmluZWQsIGFycmF5KTsKLX0KLW5vSW5saW5lKHRlc3QpOwotCi1s
ZXQgbGVuZ3RoQ2FsbHMgPSAwOwotY3VycmVudEFyZ0NvdW50ID0gMjsKLWxldCBhcnJheSA9IHsg
MDogMSwgMTogMiwgZ2V0IGxlbmd0aCgpIHsKLSAgICBpZiAobGVuZ3RoQ2FsbHMrKyAlIDEwID09
IDEpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigidGhyb3dpbmcgYW4gZXhjZXB0aW9uIGluIGxl
bmd0aCIpOwotICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQKLX0gfQotZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTY7IGkrKykgewotICAgIHRyeSB7Ci0gICAgICAgIHRlc3QoYXJyYXkpOwotICAgIH0g
Y2F0Y2ggeyB9Ci19Ci0KLWN1cnJlbnRBcmdDb3VudCA9IDEwMDsKLWxlbmd0aENhbGxzID0gMDsK
LXRlc3QoYXJyYXkpOwotCi1pZiAobGVuZ3RoQ2FsbHMgIT09IDEpCi0gICAgdGhyb3cgbmV3IEVy
cm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1l
eGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3It
ZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4YmVlNDVjZTFjNzI4MzY1MzgyNzA1ZDk5ZDMwMWFlNmJjYjhkODdhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5
LW9zci1leGl0LXNob3VsZC1nZXQtbGVuZ3RoLW9uY2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSwz
MSArMCwwIEBACi0KLWxldCBjdXJyZW50QXJnQ291bnQ7Ci1mdW5jdGlvbiBleHBlY3RlZEFyZ0Nv
dW50KCkgewotICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Ci19Ci1ub0lubGluZShleHBlY3Rl
ZEFyZ0NvdW50KTsKLQotZnVuY3Rpb24gY2FsbGVlKCkgewotICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Ci19
Ci0KLWZ1bmN0aW9uIHRlc3QoYXJyYXkpIHsKLSAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBh
cnJheSk7Ci19Ci1ub0lubGluZSh0ZXN0KTsKLQotbGV0IGxlbmd0aENhbGxzID0gMDsKLWN1cnJl
bnRBcmdDb3VudCA9IDI7Ci1sZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7
IGxlbmd0aENhbGxzKys7IHJldHVybiBjdXJyZW50QXJnQ291bnQgfSB9Ci1mb3IgKGxldCBpID0g
MDsgaSA8IDFlNTsgaSsrKQotICAgIHRlc3QoYXJyYXkpOwotCi0KLXRlc3QoYXJyYXkpOwotY3Vy
cmVudEFyZ0NvdW50ID0gMTAwOwotbGVuZ3RoQ2FsbHMgPSAwOwotdGVzdChhcnJheSk7Ci0KLWlm
IChsZW5ndGhDYWxscyAhPT0gMSkKLSAgICB0aHJvdyBuZXcgRXJyb3IobGVuZ3RoQ2FsbHMpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxs
LWFuZC1leGl0LXN0cmljdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlu
bGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMKaW5kZXggYWE3MzIzMTkwY2Y0OWQ4OGUzZmZl
OTEyYjFlMTZhYTQ3ZDUwZjk0Yi4uMzYxOGY4Y2JiM2QzMjExMzQwZTZhMDcyMDcyZjE0M2U1YzQ2
YzI0MiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5l
ZC1jYWxsLWFuZC1leGl0LXN0cmljdC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9sb2FkLXZhcmFy
Z3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0LmpzCkBAIC0xOCw4ICsxOCw4IEBA
IGZ1bmN0aW9uIGNoZWNrRXF1YWwoYSwgYikgewogICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBhOiAiICsgYS5hICsgIiB2ZXJzdXMgIiArIGIuYTsKICAgICBpZiAoYS5iICE9IGIu
YikKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYjogIiArIGEuYiArICIgdmVy
c3VzICIgKyBiLmI7Ci0gICAgaWYgKGEuYy5sZW5ndGggIT09IGIuYy5sZW5ndGgpCi0gICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIGMsIGxlbmd0aCBtaXNtYXRjaDogIiArIGEuYy5s
ZW5ndGggKyAiIHZlcnN1cyAiICsgYi5jLmxlbmd0aDsKKyAgICBpZiAoYS5jLmxlbmd0aCAhPSBi
LmMubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBjLCBsZW5ndGgg
bWlzbWF0Y2g6ICIgKyBhLmMgKyAiIHZlcnN1cyAiICsgYi5jOwogICAgIGZvciAodmFyIGkgPSBh
LmMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgIGlmIChhLmNbaV0gIT0gYi5jW2ldKQogICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbWlzbWF0Y2ggYXQgaSA9ICIgKyBp
ICsgIjogIiArIGEuYyArICIgdmVyc3VzICIgKyBiLmM7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50Lmpz
IGIvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1
bWVudC1jb3VudC5qcwppbmRleCA1M2Q3NTJkZWNkN2QwZjMxYmMyZjFkNzg5OTFjNjkxMDFmMDhi
ZmYzLi4wNDdmYjAxZjg4MzE0NWNjNzU1NGY1Y2Y3MDFhNzA3NGYyNjdkZWVlIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3Vt
ZW50LWNvdW50LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2ZS10YWlsLWNhbGwtd2l0
aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKQEAgLTE4LDggKzE4LDggQEAgbm9JbmxpbmUo
YmFyKTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAgIHZhciByZXN1bHQg
PSBmb28oNDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyBFcnJv
cigiV3JvbmcgcmVzdWx0IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7Cisg
ICAgICAgIHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGZvbywgZXhwZWN0ZWQgNDIsIGdvdCAiICsg
cmVzdWx0OwogICAgIHJlc3VsdCA9IGJhcig0MCwgMik7CiAgICAgaWYgKHJlc3VsdCAhPT0gNDIp
Ci0gICAgICAgIHRocm93IEVycm9yKCJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIs
IGdvdCAiICsgcmVzdWx0KTsKKyAgICAgICAgdGhyb3cgIldyb25nIHJlc3VsdCBmb3IgYmFyLCBl
eHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQtdG8tY2hlY2twb2ludC5qcyBiL0pTVGVzdHMvc3RyZXNz
L3Jlc3QtdmFyYXJncy1vc3ItZXhpdC10by1jaGVja3BvaW50LmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4N2JhMDU1MWQzZWU5NDhmMDk0Y2YzODBmOGNlYmZjNjc5OTA0MmRjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0pTVGVzdHMvc3Ry
ZXNzL3Jlc3QtdmFyYXJncy1vc3ItZXhpdC10by1jaGVja3BvaW50LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjEgKzAsMCBAQAotInVzZSBzdHJpY3QiOwotCi1mdW5jdGlvbiBmb28oYSwgYiwgLi4u
cmVzdCkgewotICAgIHJldHVybiByZXN0Lmxlbmd0aDsKLX0KLQotZnVuY3Rpb24gYmFyKGEsIGIs
IC4uLnJlc3QpIHsKLSAgICByZXR1cm4gZm9vLmNhbGwoLi4ucmVzdCk7Ci19Ci1ub0lubGluZShi
YXIpOwotCi1sZXQgYXJyYXkgPSBuZXcgQXJyYXkoMTApOwotZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTU7ICsraSkgewotICAgIGxldCByZXN1bHQgPSBiYXIoLi4uYXJyYXkpOwotICAgIGlmIChyZXN1
bHQgIT09IGFycmF5Lmxlbmd0aCAtIGJhci5sZW5ndGggLSBmb28ubGVuZ3RoIC0gMSkKLSAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGkgKyAiICIgKyByZXN1bHQpOwotfQotCi1hcnJheS5sZW5ndGgg
PSAxMDAwMDsKLWlmIChiYXIoLi4uYXJyYXkpICE9PSBhcnJheS5sZW5ndGggLSBiYXIubGVuZ3Ro
IC0gZm9vLmxlbmd0aCAtIDEpCi0gICAgdGhyb3cgbmV3IEVycm9yKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>