<?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>314209</bug_id>
          
          <creation_ts>2026-05-06 09:46:04 -0700</creation_ts>
          <short_desc>REGRESSION(312444@main): speculative cause-by for regression on &lt;http://instagram.com|instagram.com&gt;</short_desc>
          <delta_ts>2026-05-06 09:49:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>311459</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>m_finkel</cc>
    
    <cc>v_bykov</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2208150</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2026-05-06 09:46:04 -0700</bug_when>
    <thetext>https://commits.webkit.org/312444@main introduced a regression:
speculative cause-by for regression on &lt;http://instagram.com|instagram.com&gt;

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>2208152</commentid>
    <comment_count>1</comment_count>
      <attachid>479506</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2026-05-06 09:46:09 -0700</bug_when>
    <thetext>Created attachment 479506
REVERT of 312444@main

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 revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert 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>2208156</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2026-05-06 09:48:09 -0700</bug_when>
    <thetext>Committed 312704@main (4d3dfedf0440): &lt;https://commits.webkit.org/312704@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 479506.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2208158</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-05-06 09:49:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/176372807&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>479506</attachid>
            <date>2026-05-06 09:46:09 -0700</date>
            <delta_ts>2026-05-06 09:48:10 -0700</delta_ts>
            <desc>REVERT of 312444@main</desc>
            <filename>bug-314209-20260506164609.patch</filename>
            <type>text/plain</type>
            <size>146648</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSA2MTdkZjJhOTNjNWMzZjZjZjlkOTRjOGI0ZjQzOGI1ZGU3ZGVjMDY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBXZWQsIDYgTWF5IDIwMjYgMTY6NDY6MDcgKzAwMDAKU3ViamVjdDogW1BBVENIXSBV
bnJldmlld2VkLCByZXZlcnRpbmcgMzEyNDQ0QG1haW4uCiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzE0MjA5CgpzcGVjdWxhdGl2ZSBjYXVzZS1ieSBmb3IgcmVncmVz
c2lvbiBvbiA8aHR0cDovL2luc3RhZ3JhbS5jb218aW5zdGFncmFtLmNvbT4KClJldmVydGVkIGNo
YW5nZXNldDoKCiJbSlNDXSBFYWdlcmx5IGJ1aWxkIEFTVCBmb3IgbGlrZWx5IElJRkVzIgpodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzExNDU5Cmh0dHBzOi8vY29tbWl0
cy53ZWJraXQub3JnLzMxMjQ0NEBtYWluCi0tLQogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogIHwgICA2IC0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dCAgICAgICAgICAgICB8ICAgMSAtCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaCAgICAgfCAzNzQgKysrKysrKysrLS0tLS0tLS0tCiAuLi4vcGFyc2VyL0VhZ2Vy
SUlGRVJlZ2lzdHJ5LmNwcCAgICAgICAgICAgICAgfCAgNTEgLS0tCiAuLi4vSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0VhZ2VySUlGRVJlZ2lzdHJ5LmggfCAgNDcgLS0tCiAuLi4vSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwICAgICAgICB8ICAyNCArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oICAgICAgICAgIHwgIDE4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5jcHAgICAgICAgfCAyMTMgKystLS0tLS0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCAgICAgICAgIHwgIDk4ICstLS0tCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmggICAgfCAgMTggKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggICB8ICAgMSAtCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAgICAgICAgICAgfCAgMTAgLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaCAgICAgICAgICAgIHwgICAzIC0KIEpTVGVzdHMvc3RyZXNzL2Vh
Z2VyLWlpZmUtY29sdW1uLXRyYWNraW5nLmpzICB8ICAzNyAtLQogMTUgZmlsZXMgY2hhbmdlZCwg
MjY0IGluc2VydGlvbnMoKyksIDY0MSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0VhZ2VySUlGRVJlZ2lzdHJ5LmNwcAogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvRWFnZXJJSUZFUmVnaXN0
cnkuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IEpTVGVzdHMvc3RyZXNzL2VhZ2VyLWlpZmUtY29sdW1u
LXRyYWNraW5nLmpzCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MDYzYzgyYjZi
M2EuLmJkNjBhMThlZTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTgwOSw3
ICs4MDksNiBAQAogCQkyMzRFOTFCRjJFRTI1NzFFMDAwQkFFMkMgLyogSlNXZWJBc3NlbWJseVN1
c3BlbmRFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjM0RTkxQkQyRUUyNTcxRTAwMEJBRTJDIC8qIEpTV2ViQXNzZW1ibHlTdXNwZW5kRXJyb3Iu
aCAqLzsgfTsKIAkJMjM0RTkxQzUyRUUyNTc3NzAwMEJBRTJDIC8qIFdlYkFzc2VtYmx5U3VzcGVu
ZEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMzRFOTFDMzJFRTI1Nzc3MDAwQkFFMkMgLyogV2ViQXNzZW1ibHlTdXNwZW5kRXJy
b3JQcm90b3R5cGUuaCAqLzsgfTsKIAkJMjM0RTkxQzYyRUUyNTc3NzAwMEJBRTJDIC8qIFdlYkFz
c2VtYmx5U3VzcGVuZEVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIzNEU5MUMxMkVFMjU3NzcwMDBCQUUyQyAvKiBXZWJBc3Nl
bWJseVN1c3BlbmRFcnJvckNvbnN0cnVjdG9yLmggKi87IH07Ci0JCTIzNUE5RDc0MkY5ODNEMTYw
MEExRThGRSAvKiBFYWdlcklJRkVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjM1QTlENzIyRjk4M0QwMTAwQTFFOEZFIC8qIEVhZ2VySUlG
RVJlZ2lzdHJ5LmggKi87IH07CiAJCTIzN0M5M0REMkU5NUE4NzkwMEY2MjQ1NSAvKiBXZWJBc3Nl
bWJseVN1c3BlbmRpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjM3QzkzRDkyRTk1QTg1RjAwRjYyNDU1IC8qIFdlYkFzc2VtYmx5
U3VzcGVuZGluZ0NvbnN0cnVjdG9yLmggKi87IH07CiAJCTIzN0M5M0RFMkU5NUE4OUEwMEY2MjQ1
NSAvKiBXZWJBc3NlbWJseVN1c3BlbmRpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIzN0M5M0RCMkU5NUE4NUYwMEY2MjQ1NSAvKiBX
ZWJBc3NlbWJseVN1c3BlbmRpbmdQcm90b3R5cGUuaCAqLzsgfTsKIAkJMjM4NjNFRUIyRTVFQzkz
RTAwRTU3ODc5IC8qIFdlYkFzc2VtYmx5QnVpbHRpblRyYW1wb2xpbmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIzODYzRUVBMkU1RUM5MjkwMEU1Nzg3
OSAvKiBXZWJBc3NlbWJseUJ1aWx0aW5UcmFtcG9saW5lLmggKi87IH07CkBAIC00MDUxLDggKzQw
NTAsNiBAQAogCQkyMzRFOTFDMjJFRTI1Nzc3MDAwQkFFMkMgLyogV2ViQXNzZW1ibHlTdXNwZW5k
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVN1c3Bl
bmRFcnJvckNvbnN0cnVjdG9yLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5U3VzcGVuZEVycm9y
Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMzRFOTFDMzJF
RTI1Nzc3MDAwQkFFMkMgLyogV2ViQXNzZW1ibHlTdXNwZW5kRXJyb3JQcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQXNzZW1ibHlTdXNwZW5kRXJyb3JQcm90b3R5cGUuaDsgcGF0aCA9IGpz
L1dlYkFzc2VtYmx5U3VzcGVuZEVycm9yUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTIzNEU5MUM0MkVFMjU3NzcwMDBCQUUyQyAvKiBXZWJBc3NlbWJseVN1c3BlbmRF
cnJvclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVN1c3BlbmRF
cnJvclByb3RvdHlwZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVN1c3BlbmRFcnJvclByb3Rv
dHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIzNUE5RDcyMkY5ODNEMDEw
MEExRThGRSAvKiBFYWdlcklJRkVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFYWdlcklJRkVS
ZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMzVBOUQ3MzJGOTgzRDAx
MDBBMUU4RkUgLyogRWFnZXJJSUZFUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWFn
ZXJJSUZFUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMzdDOTNE
OTJFOTVBODVGMDBGNjI0NTUgLyogV2ViQXNzZW1ibHlTdXNwZW5kaW5nQ29uc3RydWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlTdXNwZW5kaW5nQ29uc3RydWN0b3IuaDsgcGF0aCA9
IGpzL1dlYkFzc2VtYmx5U3VzcGVuZGluZ0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTIzN0M5M0RBMkU5NUE4NUYwMEY2MjQ1NSAvKiBXZWJBc3NlbWJseVN1c3Bl
bmRpbmdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVN1c3Bl
bmRpbmdDb25zdHJ1Y3Rvci5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVN1c3BlbmRpbmdDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIzN0M5M0RCMkU5NUE4
NUYwMEY2MjQ1NSAvKiBXZWJBc3NlbWJseVN1c3BlbmRpbmdQcm90b3R5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViQXNzZW1ibHlTdXNwZW5kaW5nUHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseVN1c3BlbmRpbmdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg0NTQsOCArODQ1MSw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8sCi0JCQkJMjM1
QTlENzMyRjk4M0QwMTAwQTFFOEZFIC8qIEVhZ2VySUlGRVJlZ2lzdHJ5LmNwcCAqLywKLQkJCQky
MzVBOUQ3MjJGOTgzRDAxMDBBMUU4RkUgLyogRWFnZXJJSUZFUmVnaXN0cnkuaCAqLywKIAkJCQk5
M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMgLyogS2V5d29yZHMudGFibGUgKi8sCiAJCQkJRjY5MkE4
NjUwMjU1NTk3RDAxRkY2MEY3IC8qIExleGVyLmNwcCAqLywKIAkJCQlGNjkyQTg2NjAyNTU1OTdE
MDFGRjYwRjcgLyogTGV4ZXIuaCAqLywKQEAgLTExNjAwLDcgKzExNTk1LDYgQEAKIAkJCQlFMzVD
QTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzUwNzA4QTFEQzQ5QkJGMDA4OUJDRDYgLyogRE9NSklUU2lnbmF0dXJlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAotCQkJCTIzNUE5RDc0MkY5ODNEMTYwMEExRThGRSAvKiBFYWdlcklJRkVS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1RkYyQzgyNDNCQjlENjAwNTY5RTcxIC8q
IEVDTUFNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCMkE2RkI5
NjA4QUQ1REY3MzMzMkQ0IC8qIEVtYmVkZGVyQXJyYXlMaWtlLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAyNGJlMzIwNWNhYzguLmZmYWQ3MzExYTBjNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNzE0LDcgKzcxNCw2IEBAIGxsaW50L0xM
SW50RXhjZXB0aW9ucy5jcHAKIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcAogbGxpbnQvTExJbnRU
aHVua3MuY3BwCiAKLXBhcnNlci9FYWdlcklJRkVSZWdpc3RyeS5jcHAKIHBhcnNlci9MZXhlci5j
cHAKIHBhcnNlci9MZXhlclVuaWNvZGVQcm9wZXJ0aWVzLmNwcAogcGFyc2VyL01vZHVsZUFuYWx5
emVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWls
ZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCAy
ZWQ2NTk2Mjg3ODcuLjE0MWZlYTI0MjQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9BU1RCdWlsZGVyLmgKQEAgLTc5LDkgKzc5LDkgQEAgY2xhc3MgQVNUQnVpbGRlciB7CiAgICAg
ICAgIE9wZXJhdG9yIG1fb3A7CiAgICAgfTsKIHB1YmxpYzoKLSAgICBBU1RCdWlsZGVyKFZNJiB2
bSwgUmVmPFBhcnNlckFyZW5hPiYmIHBhcnNlckFyZW5hLCBTb3VyY2VDb2RlKiBzb3VyY2VDb2Rl
KQorICAgIEFTVEJ1aWxkZXIoVk0mIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIFNvdXJj
ZUNvZGUqIHNvdXJjZUNvZGUpCiAgICAgICAgIDogbV92bSh2bSkKLSAgICAgICAgLCBtX3BhcnNl
ckFyZW5hKFdURjo6bW92ZShwYXJzZXJBcmVuYSkpCisgICAgICAgICwgbV9wYXJzZXJBcmVuYShw
YXJzZXJBcmVuYSkKICAgICAgICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZSkKICAgICAgICAg
LCBtX2V2YWxDb3VudCgwKQogICAgIHsKQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAg
RXhwcmVzc2lvbk5vZGUqIG1ha2VTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdEVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHBy
ZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wg
aXNPcHRpb25hbENhbGwpOwogCi0gICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNl
RWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEpTQzo6U291cmNl
RWxlbWVudHMoKTsgfQorICAgIEpTQzo6U291cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1l
bnRzKCkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7
IH0KIAogICAgIGludCBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9mZWF0dXJl
czsgfQogICAgIGludCBudW1Db25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fbnVt
Q29uc3RhbnRzOyB9CkBAIC0xNjUsMzUgKzE2NSwzNSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChl
eHByLT5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJvb2xlYW4obG9jYXRp
b24sIGlzWmVyb09yVW5vcmRlcmVkKHN0YXRpY19jYXN0PE51bWJlck5vZGUqPihleHByKS0+dmFs
dWUoKSkpOwogCi0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIExvZ2lj
YWxOb3ROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgTG9naWNhbE5vdE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIH0KLSAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkp
IFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIpOyB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNy
ZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBVbmFyeVBsdXNOb2RlKGxv
Y2F0aW9uLCBleHByKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVWb2lkKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogICAgIHsKICAg
ICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEu
Z2V0KCkpIFZvaWROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgVm9pZE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIH0KICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlVGhpc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
ICAgICB7CiAgICAgICAgIHVzZXNUaGlzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEuZ2V0KCkpIFRoaXNOb2RlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlU3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAg
ewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBTdXBlck5vZGUobG9j
YXRpb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlck5vZGUobG9j
YXRpb24pOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlSW1wb3J0RXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgRXhwcmVz
c2lvbk5vZGUqIG9wdGlvbiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewotICAg
ICAgICBhdXRvKiBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBJbXBvcnROb2RlKGxv
Y2F0aW9uLCBleHByLCBvcHRpb24pOworICAgICAgICBhdXRvKiBub2RlID0gbmV3IChtX3BhcnNl
ckFyZW5hKSBJbXBvcnROb2RlKGxvY2F0aW9uLCBleHByLCBvcHRpb24pOwogICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVy
biBub2RlOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3VGFyZ2V0RXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24pCiAgICAgewogICAgICAgICB1c2VzTmV3VGFy
Z2V0KCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIE5ld1Rhcmdl
dE5vZGUobG9jYXRpb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBOZXdU
YXJnZXROb2RlKGxvY2F0aW9uKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUlt
cG9ydE1ldGFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEltcG9ydE1ldGFO
b2RlKGxvY2F0aW9uLCBleHByKTsgfQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVJbXBvcnRN
ZXRhRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
ZXhwcikgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBJbXBvcnRNZXRhTm9kZShsb2NhdGlv
biwgZXhwcik7IH0KICAgICBib29sIGlzTWV0YVByb3BlcnR5KEV4cHJlc3Npb25Ob2RlKiBub2Rl
KSB7IHJldHVybiBub2RlLT5pc01ldGFQcm9wZXJ0eSgpOyB9CiAgICAgYm9vbCBpc05ld1Rhcmdl
dChFeHByZXNzaW9uTm9kZSogbm9kZSkgeyByZXR1cm4gbm9kZS0+aXNOZXdUYXJnZXQoKTsgfQog
ICAgIGJvb2wgaXNJbXBvcnRNZXRhKEV4cHJlc3Npb25Ob2RlKiBub2RlKSB7IHJldHVybiBub2Rl
LT5pc0ltcG9ydE1ldGEoKTsgfQpAQCAtMjA1LDY2ICsyMDUsNjYgQEAgcHVibGljOgogICAgICAg
ICBpZiAoaWRlbnQuaXNTeW1ib2woKSkgewogICAgICAgICAgICAgYXV0byBlbnRyeSA9IG1fdm0u
Ynl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudCk7CiAgICAgICAgICAgICBp
ZiAoZW50cnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlwZTo6Q29u
c3RhbnQsIGxvY2F0aW9uLCBlbnRyeS52YWx1ZSgpLCBpZGVudCwgbnVsbHB0ciwgc3RhcnQsIHN0
YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJ5
dGVjb2RlSW50cmluc2ljTm9kZShCeXRlY29kZUludHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50
LCBsb2NhdGlvbiwgZW50cnkudmFsdWUoKSwgaWRlbnQsIG51bGxwdHIsIHN0YXJ0LCBzdGFydCwg
ZW5kKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0
KCkpIFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudCwgc3RhcnQpOworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0KTsK
ICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVByaXZhdGVJZGVudGlmaWVyTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFByaXZhdGVJ
ZGVudGlmaWVyTm9kZShsb2NhdGlvbiwgaWRlbnQpOworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBQcml2YXRlSWRlbnRpZmllck5vZGUobG9jYXRpb24sIGlkZW50KTsKICAgICB9
Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbikgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBPYmpl
Y3RMaXRlcmFsTm9kZShsb2NhdGlvbik7IH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlT2Jq
ZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eUxpc3RO
b2RlKiBwcm9wZXJ0aWVzKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIE9iamVj
dExpdGVyYWxOb2RlKGxvY2F0aW9uLCBwcm9wZXJ0aWVzKTsgfQorICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pIHsg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgT2JqZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24pOyB9
CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlMaXN0Tm9kZSogcHJvcGVydGllcykgeyByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBPYmplY3RMaXRlcmFsTm9kZShsb2NhdGlvbiwgcHJvcGVydGll
cyk7IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBpbnQgZWxpc2lvbnMpCiAgICAgewogICAgICAgICBpZiAoZWxpc2lv
bnMpCiAgICAgICAgICAgICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGlzaW9ucyk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMp
OwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGVtcyk7IH0KKyAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RWxlbWVudE5vZGUqIGVsZW1zKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9k
ZShsb2NhdGlvbiwgZWxlbXMpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlbGlzaW9ucywgRWxlbWVudE5vZGUq
IGVsZW1zKQogICAgIHsKICAgICAgICAgaWYgKGVsaXNpb25zKQogICAgICAgICAgICAgaW5jQ29u
c3RhbnRzKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEFycmF5
Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMsIGVsZW1zKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGlzaW9ucywgZWxlbXMpOwogICAgIH0K
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG91YmxlRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7CiAgICAgICAgIGluY0NvbnN0YW50cygpOwot
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEb3VibGVOb2RlKGxvY2F0
aW9uLCBkKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRG91YmxlTm9kZShs
b2NhdGlvbiwgZCk7CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVJbnRlZ2VyRXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7CiAgICAg
ICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBJbnRlZ2VyTm9kZShsb2NhdGlvbiwgZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAgCiAgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZUJpZ0ludChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyKiBiaWdJbnQsIHVpbnQ4X3QgcmFkaXgpCiAgICAgewogICAgICAg
ICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgQmlnSW50Tm9kZShsb2NhdGlvbiwgKmJpZ0ludCwgcmFkaXgpOworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBCaWdJbnROb2RlKGxvY2F0aW9uLCAqYmlnSW50LCByYWRpeCk7
CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN0cmluZyhjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBzdHJpbmcpCiAgICAgewogICAg
ICAgICBBU1NFUlQoc3RyaW5nKTsKICAgICAgICAgaW5jQ29uc3RhbnRzKCk7Ci0gICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFN0cmluZ05vZGUobG9jYXRpb24sICpzdHJp
bmcpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdHJpbmdOb2RlKGxvY2F0
aW9uLCAqc3RyaW5nKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQm9vbGVh
bihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBib29sIGIpCiAgICAgewogICAgICAg
ICBpbmNDb25zdGFudHMoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgQm9vbGVhbk5vZGUobG9jYXRpb24sIGIpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBCb29sZWFuTm9kZShsb2NhdGlvbiwgYik7CiAgICAgfQogCiAgICAgRXhwcmVzc2lv
bk5vZGUqIGNyZWF0ZU51bGwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKICAgICB7
CiAgICAgICAgIGluY0NvbnN0YW50cygpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hLmdldCgpKSBOdWxsTm9kZShsb2NhdGlvbik7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlQnJhY2tldEFjY2Vzcyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBib29sIHByb3Bl
cnR5SGFzQXNzaWdubWVudHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQpAQCAtMjcyLDcg
KzI3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGJhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAg
ICAgICAgICB1c2VzU3VwZXJQcm9wZXJ0eSgpOwogCi0gICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5v
ZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEJyYWNrZXRBY2Nlc3Nvck5vZGUo
bG9jYXRpb24sIGJhc2UsIHByb3BlcnR5LCBwcm9wZXJ0eUhhc0Fzc2lnbm1lbnRzKTsKKyAgICAg
ICAgQnJhY2tldEFjY2Vzc29yTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQnJhY2tl
dEFjY2Vzc29yTm9kZShsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIHByb3BlcnR5SGFzQXNzaWdu
bWVudHMpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3Qs
IGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KQEAgLTI4Miw2MyArMjgyLDYzIEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKGJhc2UtPmlzU3VwZXJOb2RlKCkpCiAgICAgICAgICAgICB1
c2VzU3VwZXJQcm9wZXJ0eSgpOwogICAgICAgICAKLSAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBu
b2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEb3RBY2Nlc3Nvck5vZGUobG9jYXRpb24s
IGJhc2UsICpwcm9wZXJ0eSwgdHlwZSk7CisgICAgICAgIERvdEFjY2Vzc29yTm9kZSogbm9kZSA9
IG5ldyAobV9wYXJzZXJBcmVuYSkgRG90QWNjZXNzb3JOb2RlKGxvY2F0aW9uLCBiYXNlLCAqcHJv
cGVydHksIHR5cGUpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwg
ZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVTcHJlYWRFeHByZXNzaW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGVuZCkKICAgICB7Ci0gICAgICAgIGF1dG8gbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgU3ByZWFkRXhwcmVzc2lvbk5vZGUobG9jYXRpb24sIGV4cHJlc3Npb24pOworICAgICAgICBh
dXRvIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFNwcmVhZEV4cHJlc3Npb25Ob2RlKGxvY2F0
aW9uLCBleHByZXNzaW9uKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3Rh
cnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlT2JqZWN0U3ByZWFkRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbiwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpCiAgICAgewotICAgICAgICBhdXRvIG5vZGUgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEuZ2V0KCkpIE9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uLCBleHByZXNz
aW9uKTsKKyAgICAgICAgYXV0byBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBPYmplY3RTcHJl
YWRFeHByZXNzaW9uTm9kZShsb2NhdGlvbiwgZXhwcmVzc2lvbik7CiAgICAgICAgIHNldEV4Y2Vw
dGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQogCiAgICAgVGVtcGxhdGVTdHJpbmdOb2RlKiBjcmVhdGVUZW1wbGF0ZVN0cmlu
Zyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBjb29r
ZWQsIGNvbnN0IElkZW50aWZpZXIqIHJhdykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEuZ2V0KCkpIFRlbXBsYXRlU3RyaW5nTm9kZShsb2NhdGlvbiwgY29va2VkLCBy
YXcpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUZW1wbGF0ZVN0cmluZ05v
ZGUobG9jYXRpb24sIGNvb2tlZCwgcmF3KTsKICAgICB9CiAKICAgICBUZW1wbGF0ZVN0cmluZ0xp
c3ROb2RlKiBjcmVhdGVUZW1wbGF0ZVN0cmluZ0xpc3QoVGVtcGxhdGVTdHJpbmdOb2RlKiB0ZW1w
bGF0ZVN0cmluZykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0
KCkpIFRlbXBsYXRlU3RyaW5nTGlzdE5vZGUodGVtcGxhdGVTdHJpbmcpOworICAgICAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUZW1wbGF0ZVN0cmluZ0xpc3ROb2RlKHRlbXBsYXRlU3Ry
aW5nKTsKICAgICB9CiAKICAgICBUZW1wbGF0ZVN0cmluZ0xpc3ROb2RlKiBjcmVhdGVUZW1wbGF0
ZVN0cmluZ0xpc3QoVGVtcGxhdGVTdHJpbmdMaXN0Tm9kZSogdGVtcGxhdGVTdHJpbmdMaXN0LCBU
ZW1wbGF0ZVN0cmluZ05vZGUqIHRlbXBsYXRlU3RyaW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgVGVtcGxhdGVTdHJpbmdMaXN0Tm9kZSh0ZW1wbGF0
ZVN0cmluZ0xpc3QsIHRlbXBsYXRlU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgVGVtcGxhdGVTdHJpbmdMaXN0Tm9kZSh0ZW1wbGF0ZVN0cmluZ0xpc3QsIHRlbXBs
YXRlU3RyaW5nKTsKICAgICB9CiAKICAgICBUZW1wbGF0ZUV4cHJlc3Npb25MaXN0Tm9kZSogY3Jl
YXRlVGVtcGxhdGVFeHByZXNzaW9uTGlzdChFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFRlbXBsYXRlRXhw
cmVzc2lvbkxpc3ROb2RlKGV4cHJlc3Npb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBUZW1wbGF0ZUV4cHJlc3Npb25MaXN0Tm9kZShleHByZXNzaW9uKTsKICAgICB9CiAK
ICAgICBUZW1wbGF0ZUV4cHJlc3Npb25MaXN0Tm9kZSogY3JlYXRlVGVtcGxhdGVFeHByZXNzaW9u
TGlzdChUZW1wbGF0ZUV4cHJlc3Npb25MaXN0Tm9kZSogdGVtcGxhdGVFeHByZXNzaW9uTGlzdE5v
ZGUsIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgVGVtcGxhdGVFeHByZXNzaW9uTGlzdE5vZGUodGVtcGxh
dGVFeHByZXNzaW9uTGlzdE5vZGUsIGV4cHJlc3Npb24pOworICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBUZW1wbGF0ZUV4cHJlc3Npb25MaXN0Tm9kZSh0ZW1wbGF0ZUV4cHJlc3Np
b25MaXN0Tm9kZSwgZXhwcmVzc2lvbik7CiAgICAgfQogCiAgICAgVGVtcGxhdGVMaXRlcmFsTm9k
ZSogY3JlYXRlVGVtcGxhdGVMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFRlbXBsYXRlU3RyaW5nTGlzdE5vZGUqIHRlbXBsYXRlU3RyaW5nTGlzdCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFRlbXBsYXRlTGl0ZXJhbE5vZGUo
bG9jYXRpb24sIHRlbXBsYXRlU3RyaW5nTGlzdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIFRlbXBsYXRlTGl0ZXJhbE5vZGUobG9jYXRpb24sIHRlbXBsYXRlU3RyaW5nTGlz
dCk7CiAgICAgfQogCiAgICAgVGVtcGxhdGVMaXRlcmFsTm9kZSogY3JlYXRlVGVtcGxhdGVMaXRl
cmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFRlbXBsYXRlU3RyaW5nTGlzdE5v
ZGUqIHRlbXBsYXRlU3RyaW5nTGlzdCwgVGVtcGxhdGVFeHByZXNzaW9uTGlzdE5vZGUqIHRlbXBs
YXRlRXhwcmVzc2lvbkxpc3QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hLmdldCgpKSBUZW1wbGF0ZUxpdGVyYWxOb2RlKGxvY2F0aW9uLCB0ZW1wbGF0ZVN0cmluZ0xp
c3QsIHRlbXBsYXRlRXhwcmVzc2lvbkxpc3QpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBUZW1wbGF0ZUxpdGVyYWxOb2RlKGxvY2F0aW9uLCB0ZW1wbGF0ZVN0cmluZ0xpc3Qs
IHRlbXBsYXRlRXhwcmVzc2lvbkxpc3QpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVUYWdnZWRUZW1wbGF0ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogYmFzZSwgVGVtcGxhdGVMaXRlcmFsTm9kZSogdGVtcGxhdGVMaXRlcmFsLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICB7Ci0gICAgICAgIGF1dG8gbm9kZSA9IG5l
dyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgVGFnZ2VkVGVtcGxhdGVOb2RlKGxvY2F0aW9uLCBiYXNl
LCB0ZW1wbGF0ZUxpdGVyYWwpOworICAgICAgICBhdXRvIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJl
bmEpIFRhZ2dlZFRlbXBsYXRlTm9kZShsb2NhdGlvbiwgYmFzZSwgdGVtcGxhdGVMaXRlcmFsKTsK
ICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgc3RhcnQsIGRpdm90LCBlbmQpOwog
ICAgICAgICBzZXRFbmRPZmZzZXQobm9kZSwgZW5kLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBu
b2RlOwpAQCAtMzQ4LDcgKzM0OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghc2tp
cFN5bnRheENoZWNrICYmIFlhcnI6Omhhc0Vycm9yKFlhcnI6OmNoZWNrU3ludGF4KHBhdHRlcm4u
c3RyaW5nKCksIGZsYWdzLnN0cmluZygpKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgUmVn
RXhwTm9kZShsb2NhdGlvbiwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICBSZWdFeHBOb2RlKiBu
b2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBSZWdFeHBOb2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBm
bGFncyk7CiAgICAgICAgIGludCBzaXplID0gcGF0dGVybi5sZW5ndGgoKSArIDI7IC8vICsgMiBm
b3IgdGhlIHR3byAvJ3MKICAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gc3RhcnQgKyBzaXpl
OwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmQpOwpA
QCAtMzU3LDE0ICszNTcsMTQgQEAgcHVibGljOgogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0
ZU5ld0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
bmQpCiAgICAgewotICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVu
YS5nZXQoKSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIsIGFyZ3VtZW50cyk7CisgICAgICAg
IE5ld0V4cHJOb2RlKiBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBOZXdFeHByTm9kZShsb2Nh
dGlvbiwgZXhwciwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9k
ZSwgc3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTmV3RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQp
CiAgICAgewotICAgICAgICBOZXdFeHByTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5n
ZXQoKSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIpOworICAgICAgICBOZXdFeHByTm9kZSog
bm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgTmV3RXhwck5vZGUobG9jYXRpb24sIGV4cHIpOwog
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KQEAgLTM3MywxMiArMzczLDEyIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChiYXNlKQogICAgICAgICAgICAgYmFzZS0+c2V0SXNPcHRpb25h
bENoYWluQmFzZSgpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBP
cHRpb25hbENoYWluTm9kZShsb2NhdGlvbiwgZXhwciwgaXNPdXRlcm1vc3QpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBPcHRpb25hbENoYWluTm9kZShsb2NhdGlvbiwgZXhw
ciwgaXNPdXRlcm1vc3QpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVDb25k
aXRpb25hbEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGxocywgRXhwcmVzc2lvbk5vZGUqIHJocykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIENvbmRpdGlv
bmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBsaHMsIHJocyk7CisgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIENvbmRpdGlvbmFsTm9kZShsb2NhdGlvbiwgY29uZGl0aW9uLCBs
aHMsIHJocyk7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFzc2lnblJlc29s
dmUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEV4cHJlc3Npb25Ob2RlKiByaHMsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kLCBBc3Np
Z25tZW50Q29udGV4dCBhc3NpZ25tZW50Q29udGV4dCkKQEAgLTM5MCwxOSArMzkwLDE5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHN0YXRpY19jYXN0PENsYXNzRXhwck5vZGUqPihyaHMpLT5zZXRF
Y21hTmFtZShpZGVudCk7CiAgICAgICAgIGlmIChhc3NpZ25tZW50Q29udGV4dCA9PSBBc3NpZ25t
ZW50Q29udGV4dDo6QXdhaXRVc2luZ0RlY2xhcmF0aW9uU3RhdGVtZW50KQogICAgICAgICAgICAg
dXNlc0F3YWl0KCk7Ci0gICAgICAgIEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3IChtX3Bh
cnNlckFyZW5hLmdldCgpKSBBc3NpZ25SZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnQsIHJocywg
YXNzaWdubWVudENvbnRleHQpOworICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5l
dyAobV9wYXJzZXJBcmVuYSkgQXNzaWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCByaHMs
IGFzc2lnbm1lbnRDb250ZXh0KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwg
c3RhcnQsIGRpdm90LCBlbmQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKICAgICBZ
aWVsZEV4cHJOb2RlKiBjcmVhdGVZaWVsZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgWWllbGRF
eHByTm9kZShsb2NhdGlvbiwgbnVsbHB0ciwgLyogZGVsZWdhdGUgKi8gZmFsc2UpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBZaWVsZEV4cHJOb2RlKGxvY2F0aW9uLCBudWxs
cHRyLCAvKiBkZWxlZ2F0ZSAqLyBmYWxzZSk7CiAgICAgfQogCiAgICAgWWllbGRFeHByTm9kZSog
Y3JlYXRlWWllbGQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIGFyZ3VtZW50LCBib29sIGRlbGVnYXRlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
ICAgICB7Ci0gICAgICAgIFlpZWxkRXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEu
Z2V0KCkpIFlpZWxkRXhwck5vZGUobG9jYXRpb24sIGFyZ3VtZW50LCBkZWxlZ2F0ZSk7CisgICAg
ICAgIFlpZWxkRXhwck5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFlpZWxkRXhwck5v
ZGUobG9jYXRpb24sIGFyZ3VtZW50LCBkZWxlZ2F0ZSk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxv
Y2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAg
ICAgfQpAQCAtNDExLDI4ICs0MTEsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KGFyZ3VtZW50KTsKICAgICAgICAgdXNlc0F3YWl0KCk7Ci0gICAgICAgIEF3YWl0RXhwck5vZGUq
IG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEF3YWl0RXhwck5vZGUobG9jYXRpb24s
IGFyZ3VtZW50KTsKKyAgICAgICAgQXdhaXRFeHByTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJB
cmVuYSkgQXdhaXRFeHByTm9kZShsb2NhdGlvbiwgYXJndW1lbnQpOwogICAgICAgICBzZXRFeGNl
cHRpb25Mb2NhdGlvbihub2RlLCBzdGFydCwgZGl2b3QsIGVuZCk7CiAgICAgICAgIHJldHVybiBu
b2RlOwogICAgIH0KIAogICAgIERlZmluZUZpZWxkTm9kZSogY3JlYXRlRGVmaW5lRmllbGQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEV4
cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRGVmaW5lRmllbGROb2RlOjpUeXBlIHR5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEZWZpbmVGaWVs
ZE5vZGUobG9jYXRpb24sIGlkZW50LCBpbml0aWFsaXplciwgdHlwZSk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIERlZmluZUZpZWxkTm9kZShsb2NhdGlvbiwgaWRlbnQsIGlu
aXRpYWxpemVyLCB0eXBlKTsKICAgICB9CiAKICAgICBDbGFzc0V4cHJOb2RlKiBjcmVhdGVDbGFz
c0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyQ2xhc3NJ
bmZvPEFTVEJ1aWxkZXI+JiBjbGFzc0luZm8sIFZhcmlhYmxlRW52aXJvbm1lbnQmJiBjbGFzc0hl
YWRFbnZpcm9ubWVudCwgVmFyaWFibGVFbnZpcm9ubWVudCYmIGNsYXNzRW52aXJvbm1lbnQsIEV4
cHJlc3Npb25Ob2RlKiBjb25zdHJ1Y3RvciwKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIHBhcmVu
dENsYXNzLCBQcm9wZXJ0eUxpc3ROb2RlKiBjbGFzc0VsZW1lbnRzLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGVuZCkKICAgICB7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9zb3VyY2VD
b2RlLT5zdWJFeHByZXNzaW9uKGNsYXNzSW5mby5zdGFydE9mZnNldCwgY2xhc3NJbmZvLmVuZE9m
ZnNldCwgY2xhc3NJbmZvLnN0YXJ0TGluZSwgY2xhc3NJbmZvLnN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgQ2xhc3NFeHByTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQ2xhc3NF
eHByTm9kZShsb2NhdGlvbiwgKmNsYXNzSW5mby5jbGFzc05hbWUsIHNvdXJjZSwgV1RGOjptb3Zl
KGNsYXNzSGVhZEVudmlyb25tZW50KSwgV1RGOjptb3ZlKGNsYXNzRW52aXJvbm1lbnQpLCBjb25z
dHJ1Y3RvciwgcGFyZW50Q2xhc3MsIGNsYXNzRWxlbWVudHMpOworICAgICAgICBDbGFzc0V4cHJO
b2RlKiBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBDbGFzc0V4cHJOb2RlKGxvY2F0aW9uLCAq
Y2xhc3NJbmZvLmNsYXNzTmFtZSwgc291cmNlLCBXVEY6Om1vdmUoY2xhc3NIZWFkRW52aXJvbm1l
bnQpLCBXVEY6Om1vdmUoY2xhc3NFbnZpcm9ubWVudCksIGNvbnN0cnVjdG9yLCBwYXJlbnRDbGFz
cywgY2xhc3NFbGVtZW50cyk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0
YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCiAgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5m
bykKICAgICB7Ci0gICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFy
ZW5hLmdldCgpKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVu
Y3Rpb25JbmZvLmJvZHksCisgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3Bh
cnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVu
Y3Rpb25JbmZvLmJvZHksCiAgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
ZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlv
bkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSk7CiAg
ICAgICAgIGZ1bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwg
ZnVuY3Rpb25JbmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDUwLDcgKzQ1MCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2Rl
OjpBc3luY0Fycm93RnVuY3Rpb25Cb2R5TW9kZSkgewogICAgICAgICAgICAgU291cmNlQ29kZSBz
b3VyY2UgPSBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zm
c2V0LCBmdW5jdGlvbkluZm8uYm9keS0+aXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24oKSA/
IGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQgLSAxIDogZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVu
Y3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbik7
Ci0gICAgICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYS5n
ZXQoKSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1bmN0aW9u
SW5mby5ib2R5LCBzb3VyY2UpOworICAgICAgICAgICAgRnVuY0V4cHJOb2RlKiByZXN1bHQgPSBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgKmZ1bmN0aW9uSW5mby5u
YW1lLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNlKTsKICAgICAgICAgICAgIGlmICghbmFtZS5p
c051bGwoKSkKICAgICAgICAgICAgICAgICByZXN1bHQtPm1ldGFkYXRhKCktPnNldEVjbWFOYW1l
KG5hbWUpOwogICAgICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldExvYyhmdW5jdGlvbklu
Zm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQs
IGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CkBAIC00NjQsNyArNDY0LDcgQEAgcHVibGljOgog
CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU1ldGhvZERlZmluaXRpb24oY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+
JiBmdW5jdGlvbkluZm8pCiAgICAgewotICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogcmVz
dWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2Nh
dGlvbiwgKmZ1bmN0aW9uSW5mby5uYW1lLCBmdW5jdGlvbkluZm8uYm9keSwKKyAgICAgICAgTWV0
aG9kRGVmaW5pdGlvbk5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVm
aW5pdGlvbk5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVuY3Rpb25JbmZvLmJv
ZHksCiAgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZv
LnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRM
aW5lLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSk7CiAgICAgICAgIGZ1bmN0
aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZv
LmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDc4LDggKzQ3OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBt
b2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRnVuY3Rpb25NZXRhZGF0YU5vZGUoCi0g
ICAgICAgICAgICBtX3BhcnNlckFyZW5hLmdldCgpLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rpb25TdGFydCwKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25NZXRhZGF0YU5vZGUoCisgICAgICAgICAgICBt
X3BhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVu
ZENvbHVtbiwgZnVuY3Rpb25TdGFydCwKICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZVN0YXJ0LCBw
YXJhbWV0ZXJzU3RhcnQsIGltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSwKICAgICAgICAgICAgIGxl
eGljYWxseVNjb3BlZEZlYXR1cmVzLCBjb25zdHJ1Y3RvcktpbmQsIHN1cGVyQmluZGluZywKICAg
ICAgICAgICAgIHBhcmFtZXRlckNvdW50LCBtb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVz
c2lvbik7CkBAIC00ODksMTUgKzQ4OSwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1c2Vz
QXJyb3dGdW5jdGlvbigpOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29k
ZS0+c3ViRXhwcmVzc2lvbihmdW5jdGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5i
b2R5LT5pc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbigpID8gZnVuY3Rpb25JbmZvLmVuZE9m
ZnNldCAtIDEgOiBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5l
LCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKTsKLSAgICAgICAgQXJyb3dGdW5j
RXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQXJyb3dGdW5jRXhw
ck5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVuY3Rpb25JbmZvLmJvZHksIHNv
dXJjZSk7CisgICAgICAgIEFycm93RnVuY0V4cHJOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEFycm93RnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1
bmN0aW9uSW5mby5ib2R5LCBzb3VyY2UpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0
TG9jKGZ1bmN0aW9uSW5mby5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5lbmRMaW5lLCBsb2NhdGlv
bi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKLSAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEFyZ3VtZW50c05vZGUoKTsgfQotICAg
IEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cyhBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBi
b29sIGhhc0Fzc2lnbm1lbnRzKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEFy
Z3VtZW50c05vZGUoYXJncywgaGFzQXNzaWdubWVudHMpOyB9Ci0gICAgQXJndW1lbnRMaXN0Tm9k
ZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEFy
Z3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKiBj
cmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3Vt
ZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJncywgYXJnKTsg
fQorICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgQXJndW1lbnRzTm9kZSgpOyB9CisgICAgQXJndW1lbnRzTm9kZSogY3JlYXRl
QXJndW1lbnRzKEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIGJvb2wgaGFzQXNzaWdubWVudHMpIHsg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRzTm9kZShhcmdzLCBoYXNBc3NpZ25t
ZW50cyk7IH0KKyAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJnKTsgfQor
ICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgQXJndW1lbnRMaXN0Tm9kZSogYXJncywgRXhwcmVzc2lvbk5vZGUq
IGFyZykgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0
aW9uLCBhcmdzLCBhcmcpOyB9CiAKICAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVh
dGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLAogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1l
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgQ2xh
c3NFbGVtZW50VGFnIHRhZykKQEAgLTUwNiw4ICs1MDYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGZ1
bmN0aW9uSW5mby5ib2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25J
bmZvLmVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZz
ZXQpOwogICAgICAgICBmdW5jdGlvbkluZm8uYm9keS0+c2V0RWNtYU5hbWUoKm5hbWUpOwogICAg
ICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihmdW5j
dGlvbkluZm8uc3RhcnRPZmZzZXQsIGZ1bmN0aW9uSW5mby5lbmRPZmZzZXQsIGZ1bmN0aW9uSW5m
by5zdGFydExpbmUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJzU3RhcnRDb2x1bW4pOwotICAgICAg
ICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0aG9kRGVmID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlvbiwgbV92bS5wcm9wZXJ0eU5hbWVzLT5u
dWxsSWRlbnRpZmllciwgZnVuY3Rpb25JbmZvLmJvZHksIHNvdXJjZSk7Ci0gICAgICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbWV0aG9kRGVm
LCB0eXBlLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFnKTsKKyAgICAgICAgTWV0aG9kRGVmaW5p
dGlvbk5vZGUqIG1ldGhvZERlZiA9IG5ldyAobV9wYXJzZXJBcmVuYSkgTWV0aG9kRGVmaW5pdGlv
bk5vZGUobG9jYXRpb24sIG1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0
aW9uSW5mby5ib2R5LCBzb3VyY2UpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBQcm9wZXJ0eU5vZGUoKm5hbWUsIG1ldGhvZERlZiwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVk
ZWQsIHRhZyk7CiAgICAgfQogCiAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRl
R2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwKQEAgLTUxNiw4ICs1MTYsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldExvYyhmdW5j
dGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRpb24uc3RhcnRP
ZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291
cmNlID0gbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNl
dCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rp
b25JbmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbik7Ci0gICAgICAgIE1ldGhvZERlZmluaXRpb25O
b2RlKiBtZXRob2REZWYgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIE1ldGhvZERlZmluaXRp
b25Ob2RlKGxvY2F0aW9uLCBtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5j
dGlvbkluZm8uYm9keSwgc291cmNlKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YS5nZXQoKSkgUHJvcGVydHlOb2RlKG5hbWUsIG1ldGhvZERlZiwgdHlwZSwgU3VwZXJCaW5kaW5n
OjpOZWVkZWQsIHRhZyk7CisgICAgICAgIE1ldGhvZERlZmluaXRpb25Ob2RlKiBtZXRob2REZWYg
PSBuZXcgKG1fcGFyc2VyQXJlbmEpIE1ldGhvZERlZmluaXRpb25Ob2RlKGxvY2F0aW9uLCBtX3Zt
LnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNl
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKG5hbWUs
IG1ldGhvZERlZiwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAgICAgfQogCiAg
ICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eShWTSYgdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsCkBAIC01MjcsMTMgKzUyNywxMyBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcGFyc2VyQXJlbmEu
aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKTsKICAgICAg
ICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldEVjbWFOYW1lKGlkZW50KTsKICAgICAgICAgU291cmNl
Q29kZSBzb3VyY2UgPSBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0
YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5l
LCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKTsKLSAgICAgICAgTWV0aG9kRGVm
aW5pdGlvbk5vZGUqIG1ldGhvZERlZiA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgTWV0aG9k
RGVmaW5pdGlvbk5vZGUobG9jYXRpb24sIHZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVy
LCBmdW5jdGlvbkluZm8uYm9keSwgc291cmNlKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYS5nZXQoKSkgUHJvcGVydHlOb2RlKGlkZW50LCBtZXRob2REZWYsIHR5cGUsIFN1cGVy
QmluZGluZzo6TmVlZGVkLCB0YWcpOworICAgICAgICBNZXRob2REZWZpbml0aW9uTm9kZSogbWV0
aG9kRGVmID0gbmV3IChtX3BhcnNlckFyZW5hKSBNZXRob2REZWZpbml0aW9uTm9kZShsb2NhdGlv
biwgdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGZ1bmN0aW9uSW5mby5ib2R5LCBz
b3VyY2UpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUo
aWRlbnQsIG1ldGhvZERlZiwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAgICAg
fQogCiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJC
aW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcgdGFnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIHR5cGUsIHN1
cGVyQmluZGluZywgdGFnKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJv
cGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIHR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsKICAgICB9
CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9w
ZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
U3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgSW5mZXJOYW1lIGluZmVyTmFtZSwgQ2xhc3NFbGVt
ZW50VGFnIHRhZykKICAgICB7CkBAIC01NDQsNDkgKzU0NCw0OSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzQ2xhc3NFeHByTm9kZSgpKQogICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENsYXNzRXhwck5vZGUqPihub2RlKS0+c2V0RWNtYU5hbWUoKnByb3BlcnR5
TmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUsIHN1cGVyQmluZGluZywg
dGFnKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpw
cm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsKICAgICB9CiAgICAg
UHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNzRWxlbWVu
dFRhZyB0YWcpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgp
KSBQcm9wZXJ0eU5vZGUobm9kZSwgdHlwZSwgc3VwZXJCaW5kaW5nLCB0YWcpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUobm9kZSwgdHlwZSwgc3VwZXJC
aW5kaW5nLCB0YWcpOwogICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZN
JiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHBy
ZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBz
dXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyB0YWcpCiAgICAgewotICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBQcm9wZXJ0eU5vZGUocGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBwcm9wZXJ0eU5hbWUpLCBub2Rl
LCB0eXBlLCBzdXBlckJpbmRpbmcsIHRhZyk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByb3BlcnR5Tm9kZShwYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIodm0sIHByb3BlcnR5TmFtZSksIG5vZGUsIHR5cGUsIHN1cGVyQmluZGlu
ZywgdGFnKTsKICAgICB9Ci0gICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShFeHByZXNz
aW9uTm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyB0
YWcpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgUHJvcGVydHlOb2RlKHByb3Bl
cnR5TmFtZSwgbm9kZSwgdHlwZSwgc3VwZXJCaW5kaW5nLCB0YWcpOyB9Ci0gICAgUHJvcGVydHlO
b2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyLCBFeHByZXNz
aW9uTm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyB0
YWcpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgUHJvcGVydHlOb2RlKCppZGVu
dGlmaWVyLCBwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsgfQot
ICAgIFByb3BlcnR5TGlzdE5vZGUqIGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGUqIHByb3BlcnR5KSB7IHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEuZ2V0KCkpIFByb3BlcnR5TGlzdE5vZGUobG9jYXRpb24sIHByb3BlcnR5KTsg
fQotICAgIFByb3BlcnR5TGlzdE5vZGUqIGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGUqIHByb3BlcnR5LCBQcm9wZXJ0eUxpc3RO
b2RlKiB0YWlsKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFByb3BlcnR5TGlz
dE5vZGUobG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsgfQorICAgIFByb3BlcnR5Tm9kZSogY3Jl
YXRlUHJvcGVydHkoRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUq
IG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBDbGFzc0VsZW1lbnRUYWcgdGFnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3Bl
cnR5Tm9kZShwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsgfQor
ICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogaWRlbnRp
ZmllciwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUs
IFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBDbGFz
c0VsZW1lbnRUYWcgdGFnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9k
ZSgqaWRlbnRpZmllciwgcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlLCBzdXBlckJpbmRpbmcsIHRh
Zyk7IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKiBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlKiBwcm9wZXJ0eSkgeyByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eUxpc3ROb2RlKGxvY2F0aW9uLCBwcm9wZXJ0eSk7
IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKiBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlKiBwcm9wZXJ0eSwgUHJvcGVydHlMaXN0
Tm9kZSogdGFpbCkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eUxpc3ROb2Rl
KGxvY2F0aW9uLCBwcm9wZXJ0eSwgdGFpbCk7IH0KIAotICAgIEVsZW1lbnROb2RlKiBjcmVhdGVF
bGVtZW50TGlzdChpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQot
ICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGlu
dCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYS5nZXQoKSkgRWxlbWVudE5vZGUoZWxlbXMsIGVsaXNpb25zLCBleHByKTsgfQorICAgIEVs
ZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2Rl
KiBleHByKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEVsZW1lbnROb2RlKGVsaXNpb25z
LCBleHByKTsgfQorICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChFbGVtZW50Tm9k
ZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgRWxlbWVudE5vZGUoZWxlbXMsIGVsaXNpb25zLCBleHByKTsgfQog
ICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChBcmd1bWVudExpc3ROb2RlKiBlbGVt
cykKICAgICB7Ci0gICAgICAgIEVsZW1lbnROb2RlKiBoZWFkID0gbmV3IChtX3BhcnNlckFyZW5h
LmdldCgpKSBFbGVtZW50Tm9kZSgwLCBlbGVtcy0+bV9leHByKTsKKyAgICAgICAgRWxlbWVudE5v
ZGUqIGhlYWQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEVsZW1lbnROb2RlKDAsIGVsZW1zLT5tX2V4
cHIpOwogICAgICAgICBFbGVtZW50Tm9kZSogdGFpbCA9IGhlYWQ7CiAgICAgICAgIGVsZW1zID0g
ZWxlbXMtPm1fbmV4dDsKICAgICAgICAgd2hpbGUgKGVsZW1zKSB7Ci0gICAgICAgICAgICB0YWls
ID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBFbGVtZW50Tm9kZSh0YWlsLCAwLCBlbGVtcy0+
bV9leHByKTsKKyAgICAgICAgICAgIHRhaWwgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEVsZW1lbnRO
b2RlKHRhaWwsIDAsIGVsZW1zLT5tX2V4cHIpOwogICAgICAgICAgICAgZWxlbXMgPSBlbGVtcy0+
bV9uZXh0OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBoZWFkOwogICAgIH0KIAotICAgIEZv
cm1hbFBhcmFtZXRlckxpc3QgY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpIHsgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRnVuY3Rpb25QYXJhbWV0ZXJzKCk7IH0KKyAgICBGb3Jt
YWxQYXJhbWV0ZXJMaXN0IGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKSB7IHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uUGFyYW1ldGVycygpOyB9CiAgICAgdm9pZCBhcHBlbmRQ
YXJhbWV0ZXIoRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCBEZXN0cnVjdHVyaW5nUGF0dGVybiBw
YXR0ZXJuLCBFeHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKICAgICB7IAogICAgICAgICBs
aXN0LT5hcHBlbmQocGF0dGVybiwgZGVmYXVsdFZhbHVlKTsgCiAgICAgICAgIHRyeUluZmVyTmFt
ZUluUGF0dGVybihwYXR0ZXJuLCBkZWZhdWx0VmFsdWUpOwogICAgIH0KIAotICAgIENhc2VDbGF1
c2VOb2RlKiBjcmVhdGVDbGF1c2UoRXhwcmVzc2lvbk5vZGUqIGV4cHIsIEpTQzo6U291cmNlRWxl
bWVudHMqIHN0YXRlbWVudHMpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQ2Fz
ZUNsYXVzZU5vZGUoZXhwciwgc3RhdGVtZW50cyk7IH0KLSAgICBDbGF1c2VMaXN0Tm9kZSogY3Jl
YXRlQ2xhdXNlTGlzdChDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEuZ2V0KCkpIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KLSAgICBDbGF1c2VMaXN0
Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDbGF1c2VMaXN0Tm9kZSogdGFpbCwgQ2FzZUNsYXVzZU5v
ZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBDbGF1c2VMaXN0
Tm9kZSh0YWlsLCBjbGF1c2UpOyB9CisgICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShF
eHByZXNzaW9uTm9kZSogZXhwciwgSlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDYXNlQ2xhdXNlTm9kZShleHByLCBzdGF0ZW1lbnRz
KTsgfQorICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENhc2VDbGF1c2VOb2Rl
KiBjbGF1c2UpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ2xhdXNlTGlzdE5vZGUoY2xh
dXNlKTsgfQorICAgIENsYXVzZUxpc3ROb2RlKiBjcmVhdGVDbGF1c2VMaXN0KENsYXVzZUxpc3RO
b2RlKiB0YWlsLCBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIENsYXVzZUxpc3ROb2RlKHRhaWwsIGNsYXVzZSk7IH0KIAogICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgZnVuY3Rpb25JbmZvKQog
ICAgIHsKLSAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVuY3Rpb25J
bmZvLmJvZHksCisgICAgICAgIEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVu
YSkgRnVuY0RlY2xOb2RlKGxvY2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1bmN0aW9uSW5m
by5ib2R5LAogICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9u
SW5mby5zdGFydE9mZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0
YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbikpOwogICAgICAgICBp
ZiAoKmZ1bmN0aW9uSW5mby5uYW1lID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQog
ICAgICAgICAgICAgdXNlc0FyZ3VtZW50cygpOwpAQCAtNTk4LDQyICs1OTgsNDIgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBKU1RleHRQb3NpdGlvbiYgY2xhc3NTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGNsYXNzRW5kLCB1bnNpZ25lZCBzdGFydExpbmUsIHVuc2lnbmVkIGVuZExpbmUp
CiAgICAgewogICAgICAgICBFeHByZXNzaW9uTm9kZSogYXNzaWduID0gY3JlYXRlQXNzaWduUmVz
b2x2ZShsb2NhdGlvbiwgY2xhc3NFeHByZXNzaW9uLT5uYW1lKCksIGNsYXNzRXhwcmVzc2lvbiwg
Y2xhc3NTdGFydCwgY2xhc3NTdGFydCArIDEsIGNsYXNzRW5kLCBBc3NpZ25tZW50Q29udGV4dDo6
RGVjbGFyYXRpb25TdGF0ZW1lbnQpOwotICAgICAgICBDbGFzc0RlY2xOb2RlKiBkZWNsID0gbmV3
IChtX3BhcnNlckFyZW5hLmdldCgpKSBDbGFzc0RlY2xOb2RlKGxvY2F0aW9uLCBhc3NpZ24pOwor
ICAgICAgICBDbGFzc0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5hKSBDbGFzc0Rl
Y2xOb2RlKGxvY2F0aW9uLCBhc3NpZ24pOwogICAgICAgICBkZWNsLT5zZXRMb2Moc3RhcnRMaW5l
LCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuIGRlY2w7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgSlNDOjpT
b3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5lLCBWYXJp
YWJsZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxlcywgRGVjbGFyYXRpb25TdGFja3M6OkZ1
bmN0aW9uU3RhY2smJiBmdW5jdGlvblN0YWNrKQogICAgIHsKLSAgICAgICAgQmxvY2tOb2RlKiBi
bG9jayA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQmxvY2tOb2RlKGxvY2F0aW9uLCBlbGVt
ZW50cywgV1RGOjptb3ZlKGxleGljYWxWYXJpYWJsZXMpLCBXVEY6Om1vdmUoZnVuY3Rpb25TdGFj
aykpOworICAgICAgICBCbG9ja05vZGUqIGJsb2NrID0gbmV3IChtX3BhcnNlckFyZW5hKSBCbG9j
a05vZGUobG9jYXRpb24sIGVsZW1lbnRzLCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIFdU
Rjo6bW92ZShmdW5jdGlvblN0YWNrKSk7CiAgICAgICAgIGJsb2NrLT5zZXRMb2Moc3RhcnRMaW5l
LCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUV4cHJTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgaW50IGVuZCkKICAg
ICB7Ci0gICAgICAgIEV4cHJTdGF0ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJl
bmEuZ2V0KCkpIEV4cHJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgRXhw
clN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRXhwclN0YXRlbWVu
dE5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydC5saW5l
LCBlbmQsIHN0YXJ0Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVJZlN0YXRlbWVu
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogY29uZGl0
aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZhbHNlQmxvY2ss
IGludCBzdGFydCwgaW50IGVuZCkKICAgICB7Ci0gICAgICAgIElmRWxzZU5vZGUqIHJlc3VsdCA9
IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgSWZFbHNlTm9kZShsb2NhdGlvbiwgY29uZGl0aW9u
LCB0cnVlQmxvY2ssIGZhbHNlQmxvY2spOworICAgICAgICBJZkVsc2VOb2RlKiByZXN1bHQgPSBu
ZXcgKG1fcGFyc2VyQXJlbmEpIElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJs
b2NrLCBmYWxzZUJsb2NrKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9j
YXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9yTG9vcChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6
ZXIsIEV4cHJlc3Npb25Ob2RlKiBjb25kaXRpb24sIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0
ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGludCBlbmQsIFZhcmlhYmxlRW52aXJv
bm1lbnQmJiBsZXhpY2FsVmFyaWFibGVzLCBib29sIGluaXRpYWxpemVyQ29udGFpbnNDbG9zdXJl
KQogICAgIHsKLSAgICAgICAgRm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0
ZW1lbnRzLCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIGluaXRpYWxpemVyQ29udGFpbnND
bG9zdXJlKTsKKyAgICAgICAgRm9yTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBG
b3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29uZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRz
LCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIGluaXRpYWxpemVyQ29udGFpbnNDbG9zdXJl
KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBp
dGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBWYXJpYWJs
ZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxlcykKICAgICB7Ci0gICAgICAgIEZvckluTm9k
ZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBGb3JJbk5vZGUobG9jYXRpb24s
IGxocywgaXRlciwgc3RhdGVtZW50cywgV1RGOjptb3ZlKGxleGljYWxWYXJpYWJsZXMpKTsKKyAg
ICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZvckluTm9kZShs
b2NhdGlvbiwgbGhzLCBpdGVyLCBzdGF0ZW1lbnRzLCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxl
cykpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5zdGFydE9m
ZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9j
YXRpb24ocmVzdWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC02NDEsMTMgKzY0MSwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RhdGVtZW50Tm9k
ZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIERlc3Ry
dWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRl
bWVudE5vZGUqIHN0YXRlbWVudHMsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZGVjbExvY2F0aW9u
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZURp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBWYXJp
YWJsZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxlcykKICAgICB7Ci0gICAgICAgIGF1dG8g
bGV4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIERlc3RydWN0dXJpbmdBc3NpZ25tZW50
Tm9kZShkZWNsTG9jYXRpb24sIHBhdHRlcm4sIG51bGxwdHIpOworICAgICAgICBhdXRvIGxleHBy
ID0gbmV3IChtX3BhcnNlckFyZW5hKSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUoZGVjbExv
Y2F0aW9uLCBwYXR0ZXJuLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvckluTG9v
cChsb2NhdGlvbiwgbGV4cHIsIGl0ZXIsIHN0YXRlbWVudHMsIGRlY2xMb2NhdGlvbiwgZVN0YXJ0
LCBlRGl2b3QsIGVFbmQsIHN0YXJ0LCBlbmQsIFdURjo6bW92ZShsZXhpY2FsVmFyaWFibGVzKSk7
CiAgICAgfQogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUZvck9mTG9vcChib29sIGlz
Rm9yQXdhaXQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZVN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZURpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZUVuZCwgaW50
IHN0YXJ0LCBpbnQgZW5kLCBWYXJpYWJsZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxlcykK
ICAgICB7Ci0gICAgICAgIEZvck9mTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBGb3JPZk5vZGUoaXNGb3JBd2FpdCwgbG9jYXRpb24sIGxocywgaXRlciwgc3RhdGVtZW50
cywgV1RGOjptb3ZlKGxleGljYWxWYXJpYWJsZXMpKTsKKyAgICAgICAgRm9yT2ZOb2RlKiByZXN1
bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZvck9mTm9kZShpc0ZvckF3YWl0LCBsb2NhdGlvbiwg
bGhzLCBpdGVyLCBzdGF0ZW1lbnRzLCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcykpOwogICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVz
dWx0LCBlU3RhcnQsIGVEaXZvdCwgZUVuZCk7CiAgICAgICAgIGlmIChpc0ZvckF3YWl0KQpAQCAt
NjU3LDcgKzY1Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVG
b3JPZkxvb3AoYm9vbCBpc0ZvckF3YWl0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBpdGVy
LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGRlY2xM
b2NhdGlvbiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVEaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVFbmQsIGludCBzdGFydCwgaW50IGVu
ZCwgVmFyaWFibGVFbnZpcm9ubWVudCYmIGxleGljYWxWYXJpYWJsZXMpCiAgICAgewotICAgICAg
ICBhdXRvIGxleHByID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEZXN0cnVjdHVyaW5nQXNz
aWdubWVudE5vZGUoZGVjbExvY2F0aW9uLCBwYXR0ZXJuLCBudWxscHRyKTsKKyAgICAgICAgYXV0
byBsZXhwciA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2Rl
KGRlY2xMb2NhdGlvbiwgcGF0dGVybiwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiBjcmVhdGVG
b3JPZkxvb3AoaXNGb3JBd2FpdCwgbG9jYXRpb24sIGxleHByLCBpdGVyLCBzdGF0ZW1lbnRzLCBk
ZWNsTG9jYXRpb24sIGVTdGFydCwgZURpdm90LCBlRW5kLCBzdGFydCwgZW5kLCBXVEY6Om1vdmUo
bGV4aWNhbFZhcmlhYmxlcykpOwogICAgIH0KIApAQCAtNzA2LDI5ICs3MDYsMjkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmlzTGFiZWwoKTsKICAg
ICB9CiAKLSAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkp
IEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KKyAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVFbXB0eVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKSB7IHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIEVtcHR5U3RhdGVtZW50Tm9kZShsb2NhdGlvbik7IH0KIAog
ICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZURlY2xhcmF0aW9uU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnQsIGlu
dCBlbmQpCiAgICAgewogICAgICAgICBTdGF0ZW1lbnROb2RlKiByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRGVjbGFyYXRpb25TdGF0ZW1lbnQobG9j
YXRpb24sIGV4cHIpOworICAgICAgICByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIERlY2xh
cmF0aW9uU3RhdGVtZW50KGxvY2F0aW9uLCBleHByKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnQsIGVuZCwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZUVtcHR5VmFyRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRW1wdHlWYXJFeHByZXNzaW9uKGxvY2F0aW9uLCBpZGVu
dGlmaWVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRW1wdHlWYXJFeHBy
ZXNzaW9uKGxvY2F0aW9uLCBpZGVudGlmaWVyKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlRW1wdHlMZXRFeHByZXNzaW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAgewotICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBFbXB0eUxldEV4cHJlc3Npb24obG9jYXRpb24sIGlk
ZW50aWZpZXIpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFbXB0eUxldEV4
cHJlc3Npb24obG9jYXRpb24sIGlkZW50aWZpZXIpOwogICAgIH0KIAogICAgIFN0YXRlbWVudE5v
ZGUqIGNyZWF0ZVJldHVyblN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQogICAgIHsKLSAgICAgICAgUmV0dXJuTm9kZSog
cmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBl
eHByZXNzaW9uKTsKKyAgICAgICAgUmV0dXJuTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFy
ZW5hKSBSZXR1cm5Ob2RlKGxvY2F0aW9uLCBleHByZXNzaW9uKTsKICAgICAgICAgc2V0RXhjZXB0
aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZW5kLCBlbmQpOwogICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydC5saW5lLCBlbmQubGluZSwgc3RhcnQub2Zmc2V0LCBzdGFydC5saW5lU3RhcnRP
ZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzM2LDcgKzczNiw3IEBAIHB1Ymxp
YzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUJyZWFrU3RhdGVtZW50KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCiAgICAgewotICAg
ICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQnJlYWtO
b2RlKGxvY2F0aW9uLCAqaWRlbnQpOworICAgICAgICBCcmVha05vZGUqIHJlc3VsdCA9IG5ldyAo
bV9wYXJzZXJBcmVuYSkgQnJlYWtOb2RlKGxvY2F0aW9uLCAqaWRlbnQpOwogICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJlc3Vs
dC0+c2V0TG9jKHN0YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5vZmZzZXQsIHN0YXJ0LmxpbmVT
dGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC03NDQsNyArNzQ0LDcgQEAg
cHVibGljOgogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAg
ICB7Ci0gICAgICAgIENvbnRpbnVlTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBDb250aW51ZU5vZGUobG9jYXRpb24sICppZGVudCk7CisgICAgICAgIENvbnRpbnVlTm9k
ZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBDb250aW51ZU5vZGUobG9jYXRpb24sICpp
ZGVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwg
ZW5kKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQubGluZSwgZW5kLmxpbmUsIHN0YXJ0
Lm9mZnNldCwgc3RhcnQubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTc1MiwzNiArNzUyLDM2IEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZVRyeVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiB0cnlCbG9jaywgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBjYXRjaFBhdHRlcm4sIFN0
YXRlbWVudE5vZGUqIGNhdGNoQmxvY2ssIFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jaywgaW50
IHN0YXJ0TGluZSwgaW50IGVuZExpbmUsIFZhcmlhYmxlRW52aXJvbm1lbnQmJiBjYXRjaEVudmly
b25tZW50KQogICAgIHsKLSAgICAgICAgVHJ5Tm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFy
ZW5hLmdldCgpKSBUcnlOb2RlKGxvY2F0aW9uLCB0cnlCbG9jaywgY2F0Y2hQYXR0ZXJuLCBjYXRj
aEJsb2NrLCBXVEY6Om1vdmUoY2F0Y2hFbnZpcm9ubWVudCksIGZpbmFsbHlCbG9jayk7CisgICAg
ICAgIFRyeU5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgVHJ5Tm9kZShsb2NhdGlv
biwgdHJ5QmxvY2ssIGNhdGNoUGF0dGVybiwgY2F0Y2hCbG9jaywgV1RGOjptb3ZlKGNhdGNoRW52
aXJvbm1lbnQpLCBmaW5hbGx5QmxvY2spOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExp
bmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZz
ZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUq
IGNyZWF0ZVN3aXRjaFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQ2xhdXNlTGlzdE5vZGUqIGZpcnN0Q2xhdXNlcywgQ2FzZUNs
YXVzZU5vZGUqIGRlZmF1bHRDbGF1c2UsIENsYXVzZUxpc3ROb2RlKiBzZWNvbmRDbGF1c2VzLCBp
bnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSwgVmFyaWFibGVFbnZpcm9ubWVudCYmIGxleGljYWxW
YXJpYWJsZXMsIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiYgZnVuY3Rpb25TdGFj
aykKICAgICB7Ci0gICAgICAgIENhc2VCbG9ja05vZGUqIGNhc2VzID0gbmV3IChtX3BhcnNlckFy
ZW5hLmdldCgpKSBDYXNlQmxvY2tOb2RlKGZpcnN0Q2xhdXNlcywgZGVmYXVsdENsYXVzZSwgc2Vj
b25kQ2xhdXNlcyk7Ci0gICAgICAgIFN3aXRjaE5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJB
cmVuYS5nZXQoKSkgU3dpdGNoTm9kZShsb2NhdGlvbiwgZXhwciwgY2FzZXMsIFdURjo6bW92ZShs
ZXhpY2FsVmFyaWFibGVzKSwgV1RGOjptb3ZlKGZ1bmN0aW9uU3RhY2spKTsKKyAgICAgICAgQ2Fz
ZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIENhc2VCbG9ja05vZGUoZmly
c3RDbGF1c2VzLCBkZWZhdWx0Q2xhdXNlLCBzZWNvbmRDbGF1c2VzKTsKKyAgICAgICAgU3dpdGNo
Tm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBTd2l0Y2hOb2RlKGxvY2F0aW9uLCBl
eHByLCBjYXNlcywgV1RGOjptb3ZlKGxleGljYWxWYXJpYWJsZXMpLCBXVEY6Om1vdmUoZnVuY3Rp
b25TdGFjaykpOwogICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxv
Y2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdoaWxlU3Rh
dGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBl
eHByLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQsIGludCBzdGFydExpbmUsIGludCBlbmRMaW5l
KQogICAgIHsKLSAgICAgICAgV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEu
Z2V0KCkpIFdoaWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKKyAgICAgICAgV2hp
bGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFdoaWxlTm9kZShsb2NhdGlvbiwg
ZXhwciwgc3RhdGVtZW50KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRM
aW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVE
b1doaWxlU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFN0YXRlbWVu
dE5vZGUqIHN0YXRlbWVudCwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGludCBzdGFydExpbmUsIGlu
dCBlbmRMaW5lKQogICAgIHsKLSAgICAgICAgRG9XaGlsZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgRG9XaGlsZU5vZGUobG9jYXRpb24sIHN0YXRlbWVudCwgZXhwcik7
CisgICAgICAgIERvV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIERvV2hp
bGVOb2RlKGxvY2F0aW9uLCBzdGF0ZW1lbnQsIGV4cHIpOwogICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5l
U3RhcnRPZmZzZXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZUxhYmVsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnQs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkK
ICAgICB7Ci0gICAgICAgIExhYmVsTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBMYWJlbE5vZGUobG9jYXRpb24sICppZGVudCwgc3RhdGVtZW50KTsKKyAgICAgICAgTGFi
ZWxOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIExhYmVsTm9kZShsb2NhdGlvbiwg
KmlkZW50LCBzdGF0ZW1lbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQs
IHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzg5
LDE0ICs3ODksMTQgQEAgcHVibGljOgogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVdpdGhTdGF0
ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4
cHIsIFN0YXRlbWVudE5vZGUqIHN0YXRlbWVudCwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgZW5kTGluZSkKICAg
ICB7CiAgICAgICAgIHVzZXNXaXRoKCk7Ci0gICAgICAgIFdpdGhOb2RlKiByZXN1bHQgPSBuZXcg
KG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFdpdGhOb2RlKGxvY2F0aW9uLCBleHByLCBzdGF0ZW1lbnQs
IGVuZCwgZW5kIC0gc3RhcnQpOworICAgICAgICBXaXRoTm9kZSogcmVzdWx0ID0gbmV3IChtX3Bh
cnNlckFyZW5hKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50LCBlbmQsIGVuZCAt
IHN0YXJ0KTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2Nh
dGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9ICAgIAogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZVRo
cm93U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25O
b2RlKiBleHByLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBlbmQpCiAgICAgewotICAgICAgICBUaHJvd05vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJz
ZXJBcmVuYS5nZXQoKSkgVGhyb3dOb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICAgICAgVGhyb3dO
b2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFRocm93Tm9kZShsb2NhdGlvbiwgZXhw
cik7CiAgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LmxpbmUsIGVuZC5saW5lLCBzdGFydC5v
ZmZzZXQsIHN0YXJ0LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgc3RhcnQsIGVuZCwgZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTgwNCwyNCArODA0LDI0IEBAIHB1YmxpYzoKICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVh
dGVEZWJ1Z2dlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBpbnQgc3RhcnRMaW5l
LCBpbnQgZW5kTGluZSkKICAgICB7Ci0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50Tm9kZSogcmVz
dWx0ID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEZWJ1Z2dlclN0YXRlbWVudE5vZGUobG9j
YXRpb24pOworICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9w
YXJzZXJBcmVuYSkgRGVidWdnZXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKTsKICAgICAgICAgcmVz
dWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9j
YXRpb24ubGluZVN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBNb2R1bGVOYW1lTm9kZSogY3JlYXRlTW9kdWxlTmFtZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgTW9kdWxlTmFtZU5vZGUobG9jYXRp
b24sIG1vZHVsZU5hbWUpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBNb2R1
bGVOYW1lTm9kZShsb2NhdGlvbiwgbW9kdWxlTmFtZSk7CiAgICAgfQogCiAgICAgSW1wb3J0U3Bl
Y2lmaWVyTm9kZSogY3JlYXRlSW1wb3J0U3BlY2lmaWVyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGltcG9ydGVkTmFtZSwgY29uc3QgSWRlbnRpZmll
ciYgbG9jYWxOYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5n
ZXQoKSkgSW1wb3J0U3BlY2lmaWVyTm9kZShsb2NhdGlvbiwgaW1wb3J0ZWROYW1lLCBsb2NhbE5h
bWUpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBJbXBvcnRTcGVjaWZpZXJO
b2RlKGxvY2F0aW9uLCBpbXBvcnRlZE5hbWUsIGxvY2FsTmFtZSk7CiAgICAgfQogCiAgICAgSW1w
b3J0U3BlY2lmaWVyTGlzdE5vZGUqIGNyZWF0ZUltcG9ydFNwZWNpZmllckxpc3QoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgSW1wb3J0U3BlY2lmaWVy
TGlzdE5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSW1wb3J0U3Bl
Y2lmaWVyTGlzdE5vZGUoKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZEltcG9ydFNwZWNpZmll
cihJbXBvcnRTcGVjaWZpZXJMaXN0Tm9kZSogc3BlY2lmaWVyTGlzdCwgSW1wb3J0U3BlY2lmaWVy
Tm9kZSogc3BlY2lmaWVyKQpAQCAtODMxLDcgKzgzMSw3IEBAIHB1YmxpYzoKIAogICAgIEltcG9y
dEF0dHJpYnV0ZXNMaXN0Tm9kZSogY3JlYXRlSW1wb3J0QXR0cmlidXRlc0xpc3QoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgSW1wb3J0QXR0cmlidXRl
c0xpc3ROb2RlKCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEltcG9ydEF0
dHJpYnV0ZXNMaXN0Tm9kZSgpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kSW1wb3J0QXR0cmli
dXRlKEltcG9ydEF0dHJpYnV0ZXNMaXN0Tm9kZSogYXR0cmlidXRlc0xpc3QsIGNvbnN0IElkZW50
aWZpZXImIGtleSwgY29uc3QgSWRlbnRpZmllciYgdmFsdWUpCkBAIC04NDEsMzcgKzg0MSwzNyBA
QCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBJbXBvcnREZWNsYXJhdGlvbk5vZGU6Oklt
cG9ydFR5cGUgdHlwZSwgSW1wb3J0U3BlY2lmaWVyTGlzdE5vZGUqIGltcG9ydFNwZWNpZmllckxp
c3QsIE1vZHVsZU5hbWVOb2RlKiBtb2R1bGVOYW1lLCBJbXBvcnRBdHRyaWJ1dGVzTGlzdE5vZGUq
IGltcG9ydEF0dHJpYnV0ZXNMaXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYS5nZXQoKSkgSW1wb3J0RGVjbGFyYXRpb25Ob2RlKGxvY2F0aW9uLCB0eXBlLCBpbXBv
cnRTcGVjaWZpZXJMaXN0LCBtb2R1bGVOYW1lLCBpbXBvcnRBdHRyaWJ1dGVzTGlzdCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEltcG9ydERlY2xhcmF0aW9uTm9kZShsb2Nh
dGlvbiwgdHlwZSwgaW1wb3J0U3BlY2lmaWVyTGlzdCwgbW9kdWxlTmFtZSwgaW1wb3J0QXR0cmli
dXRlc0xpc3QpOwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cG9ydEFsbERl
Y2xhcmF0aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIE1vZHVsZU5hbWVOb2Rl
KiBtb2R1bGVOYW1lLCBJbXBvcnRBdHRyaWJ1dGVzTGlzdE5vZGUqIGltcG9ydEF0dHJpYnV0ZXNM
aXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRXhw
b3J0QWxsRGVjbGFyYXRpb25Ob2RlKGxvY2F0aW9uLCBtb2R1bGVOYW1lLCBpbXBvcnRBdHRyaWJ1
dGVzTGlzdCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEV4cG9ydEFsbERl
Y2xhcmF0aW9uTm9kZShsb2NhdGlvbiwgbW9kdWxlTmFtZSwgaW1wb3J0QXR0cmlidXRlc0xpc3Qp
OwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJh
dGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnROb2RlKiBkZWNs
YXJhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgbG9jYWxOYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uTm9k
ZShsb2NhdGlvbiwgZGVjbGFyYXRpb24sIGxvY2FsTmFtZSk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbk5vZGUobG9jYXRpb24sIGRl
Y2xhcmF0aW9uLCBsb2NhbE5hbWUpOwogICAgIH0KIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0
ZUV4cG9ydExvY2FsRGVjbGFyYXRpb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
U3RhdGVtZW50Tm9kZSogZGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hLmdldCgpKSBFeHBvcnRMb2NhbERlY2xhcmF0aW9uTm9kZShsb2NhdGlvbiwg
ZGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFeHBvcnRM
b2NhbERlY2xhcmF0aW9uTm9kZShsb2NhdGlvbiwgZGVjbGFyYXRpb24pOwogICAgIH0KIAogICAg
IFN0YXRlbWVudE5vZGUqIGNyZWF0ZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwb3J0U3BlY2lmaWVyTGlzdE5vZGUqIGV4cG9ydFNwZWNp
Zmllckxpc3QsIE1vZHVsZU5hbWVOb2RlKiBtb2R1bGVOYW1lLCBJbXBvcnRBdHRyaWJ1dGVzTGlz
dE5vZGUqIGltcG9ydEF0dHJpYnV0ZXNMaXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgRXhwb3J0TmFtZWREZWNsYXJhdGlvbk5vZGUobG9jYXRpb24s
IGV4cG9ydFNwZWNpZmllckxpc3QsIG1vZHVsZU5hbWUsIGltcG9ydEF0dHJpYnV0ZXNMaXN0KTsK
KyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRXhwb3J0TmFtZWREZWNsYXJhdGlv
bk5vZGUobG9jYXRpb24sIGV4cG9ydFNwZWNpZmllckxpc3QsIG1vZHVsZU5hbWUsIGltcG9ydEF0
dHJpYnV0ZXNMaXN0KTsKICAgICB9CiAKICAgICBFeHBvcnRTcGVjaWZpZXJOb2RlKiBjcmVhdGVF
eHBvcnRTcGVjaWZpZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRl
bnRpZmllciYgbG9jYWxOYW1lLCBjb25zdCBJZGVudGlmaWVyJiBleHBvcnRlZE5hbWUpCiAgICAg
ewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBFeHBvcnRTcGVjaWZp
ZXJOb2RlKGxvY2F0aW9uLCBsb2NhbE5hbWUsIGV4cG9ydGVkTmFtZSk7CisgICAgICAgIHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIEV4cG9ydFNwZWNpZmllck5vZGUobG9jYXRpb24sIGxvY2Fs
TmFtZSwgZXhwb3J0ZWROYW1lKTsKICAgICB9CiAKICAgICBFeHBvcnRTcGVjaWZpZXJMaXN0Tm9k
ZSogY3JlYXRlRXhwb3J0U3BlY2lmaWVyTGlzdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hLmdldCgpKSBFeHBvcnRTcGVjaWZpZXJMaXN0Tm9kZSgpOworICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFeHBvcnRTcGVjaWZpZXJMaXN0Tm9kZSgpOwog
ICAgIH0KIAogICAgIHZvaWQgYXBwZW5kRXhwb3J0U3BlY2lmaWVyKEV4cG9ydFNwZWNpZmllckxp
c3ROb2RlKiBzcGVjaWZpZXJMaXN0LCBFeHBvcnRTcGVjaWZpZXJOb2RlKiBzcGVjaWZpZXIpCkBA
IC04ODYsMTQgKzg4NiwxNCBAQCBwdWJsaWM6CiAKICAgICBDb21tYU5vZGUqIGNyZWF0ZUNvbW1h
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIENvbW1h
Tm9kZShsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IENvbW1hTm9kZShsb2NhdGlvbiwgbm9kZSk7CiAgICAgfQogCiAgICAgQ29tbWFOb2RlKiBhcHBl
bmRUb0NvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogdGFpbCwgRXhwcmVzc2lvbk5vZGUqIG5leHQpCiAgICAgewogICAgICAgICBBU1NFUlQo
dGFpbC0+aXNDb21tYU5vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXh0KTsKLSAgICAgICAgQ29t
bWFOb2RlKiBuZXdUYWlsID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBDb21tYU5vZGUobG9j
YXRpb24sIG5leHQpOworICAgICAgICBDb21tYU5vZGUqIG5ld1RhaWwgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEpIENvbW1hTm9kZShsb2NhdGlvbiwgbmV4dCk7CiAgICAgICAgIHN0YXRpY19jYXN0PENv
bW1hTm9kZSo+KHRhaWwpLT5zZXROZXh0KG5ld1RhaWwpOwogICAgICAgICByZXR1cm4gbmV3VGFp
bDsKICAgICB9CkBAIC0xMDAxLDEyICsxMDAxLDEyIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVEZXN0cnVjdHVyaW5nQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9k
ZSogaW5pdGlhbGl6ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
LmdldCgpKSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUobG9jYXRpb24sIHBhdHRlcm4sIGlu
aXRpYWxpemVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGVzdHJ1Y3R1
cmluZ0Fzc2lnbm1lbnROb2RlKGxvY2F0aW9uLCBwYXR0ZXJuLCBpbml0aWFsaXplcik7CiAgICAg
fQogICAgIAogICAgIEFycmF5UGF0dGVybiBjcmVhdGVBcnJheVBhdHRlcm4oY29uc3QgSlNUb2tl
bkxvY2F0aW9uJikKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0
KCkpIEFycmF5UGF0dGVybk5vZGUoKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgQXJyYXlQYXR0ZXJuTm9kZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFwcGVuZEFycmF5
UGF0dGVyblNraXBFbnRyeShBcnJheVBhdHRlcm4gbm9kZSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbikKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBPYmpl
Y3RQYXR0ZXJuIGNyZWF0ZU9iamVjdFBhdHRlcm4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIE9iamVjdFBhdHRl
cm5Ob2RlKCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE9iamVjdFBhdHRl
cm5Ob2RlKCk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPYmplY3RQYXR0ZXJuRW50cnkoT2Jq
ZWN0UGF0dGVybiBub2RlLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBib29sIHdh
c1N0cmluZywgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4gcGF0dGVybiwgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZSkKQEAgLTEwNzEsMTggKzEw
NzEsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQgPT0gQXNzaWdubWVu
dENvbnRleHQ6OkF3YWl0VXNpbmdEZWNsYXJhdGlvblN0YXRlbWVudCkKICAgICAgICAgICAgIHVz
ZXNBd2FpdCgpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBCaW5k
aW5nTm9kZShib3VuZFByb3BlcnR5LCBzdGFydCwgZW5kLCBjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQmluZGluZ05vZGUoYm91bmRQcm9wZXJ0eSwgc3RhcnQs
IGVuZCwgY29udGV4dCk7CiAgICAgfQogCiAgICAgUmVzdFBhcmFtZXRlck5vZGUqIGNyZWF0ZVJl
c3RQYXJhbWV0ZXIoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuLCBzaXplX3QgbnVt
UGFyYW1ldGVyc1RvU2tpcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEuZ2V0KCkpIFJlc3RQYXJhbWV0ZXJOb2RlKHBhdHRlcm4sIG51bVBhcmFtZXRlcnNUb1NraXAp
OworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShw
YXR0ZXJuLCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKICAgICB9CiAKICAgICBBc3NpZ25tZW50RWxl
bWVudCBjcmVhdGVBc3NpZ25tZW50RWxlbWVudChjb25zdCBFeHByZXNzaW9uJiBhc3NpZ25tZW50
VGFyZ2V0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmQpCiAgICAgewogICAgICAgICBjaGVja0FyZ3VtZW50c0xlbmd0aE1vZGlmaWNhdGlvbihh
c3NpZ25tZW50VGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQo
KSkgQXNzaWdubWVudEVsZW1lbnROb2RlKGFzc2lnbm1lbnRUYXJnZXQsIHN0YXJ0LCBlbmQpOwor
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBc3NpZ25tZW50RWxlbWVudE5vZGUo
YXNzaWdubWVudFRhcmdldCwgc3RhcnQsIGVuZCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRFbmRP
ZmZzZXQoTm9kZSogbm9kZSwgaW50IG9mZnNldCkKQEAgLTExNTcsMTUgKzExNTcsMTUgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHVzZXNBd2FpdCgpIHsgbV9zY29wZS5tX2ZlYXR1cmVzIHw9IEF3YWl0
RmVhdHVyZTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBk
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSW50ZWdlck5vZGUobG9jYXRp
b24sIGQpOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG91YmxlTGlrZU51bWJl
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIERvdWJsZU5vZGUobG9jYXRpb24s
IGQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0
aW9uLCBkKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJpZ0ludFdpdGhTaWdu
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGJpZ0lu
dCwgdWludDhfdCByYWRpeCwgYm9vbCBzaWduKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgQmlnSW50Tm9kZShsb2NhdGlvbiwgYmlnSW50LCByYWRpeCwg
c2lnbik7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpZ0ludE5vZGUobG9j
YXRpb24sIGJpZ0ludCwgcmFkaXgsIHNpZ24pOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSog
Y3JlYXRlTnVtYmVyRnJvbUJpbmFyeU9wZXJhdGlvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBkb3VibGUgdmFsdWUsIGNvbnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUEsIGNv
bnN0IE51bWJlck5vZGUmIG9yaWdpbmFsTm9kZUIpCiAgICAgewpAQCAtMTIxMSw3ICsxMjExLDcg
QEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBWTSYgbV92bTsKLSAgICBSZWY8UGFyc2VyQXJlbmE+
IG1fcGFyc2VyQXJlbmE7CisgICAgUGFyc2VyQXJlbmEmIG1fcGFyc2VyQXJlbmE7CiAgICAgU291
cmNlQ29kZSogbV9zb3VyY2VDb2RlOwogICAgIFNjb3BlIG1fc2NvcGU7CiAgICAgVmVjdG9yPEJp
bmFyeU9wZXJhbmQsIDEwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9iaW5hcnlPcGVyYW5kU3Rh
Y2s7CkBAIC0xMjI1LDkgKzEyMjUsOSBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZVR5cGVPZk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogewogICAg
IGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29s
dmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hLmdldCgpKSBUeXBlT2ZSZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2
ZS0+aWRlbnRpZmllcigpLCBzdGFydCwgZGl2b3QsIGVuZCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIFR5cGVPZlJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVu
dGlmaWVyKCksIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgVHlwZU9mVmFsdWVOb2RlKGxvY2F0aW9uLCBleHByKTsKKyAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUeXBlT2ZWYWx1ZU5vZGUobG9jYXRpb24sIGV4cHIp
OwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURlbGV0ZU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kKQpAQCAtMTI0MiwxOSArMTI0MiwxOSBAQCBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZURlbGV0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcgogICAgIH0KIAogICAgIGlmICghZXhwci0+aXNMb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEZWxldGVWYWx1ZU5vZGUobG9jYXRp
b24sIGV4cHIpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEZWxldGVWYWx1
ZU5vZGUobG9jYXRpb24sIGV4cHIpOwogICAgIGlmIChleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsK
ICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+
KGV4cHIpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEZWxldGVS
ZXNvbHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBkaXZvdCwgc3RhcnQs
IGVuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIERlbGV0ZVJlc29sdmVO
b2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIGRpdm90LCBzdGFydCwgZW5kKTsK
ICAgICB9CiAgICAgaWYgKGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAg
IEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNz
b3JOb2RlKj4oZXhwcik7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkp
IERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1
YnNjcmlwdCgpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIERlbGV0ZUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCksIGJy
YWNrZXQtPnN1YnNjcmlwdCgpLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiAgICAgfQogICAgIEFTU0VS
VChleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKICAgICBjaGVja0FyZ3VtZW50c0xlbmd0aE1v
ZGlmaWNhdGlvbihleHByKTsKICAgICBEb3RBY2Nlc3Nvck5vZGUqIGRvdCA9IHN0YXRpY19jYXN0
PERvdEFjY2Vzc29yTm9kZSo+KGV4cHIpOwotICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEu
Z2V0KCkpIERlbGV0ZURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZp
ZXIoKSwgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IERlbGV0ZURvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwg
ZGl2b3QsIHN0YXJ0LCBlbmQpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFr
ZU5lZ2F0ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5v
ZGUqIG4pCkBAIC0xMjY5LDE0ICsxMjY5LDE0IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVy
OjptYWtlTmVnYXRlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAg
ICAgICAgIHJldHVybiBjcmVhdGVCaWdJbnRGcm9tVW5hcnlPcGVyYXRpb24obG9jYXRpb24sICFi
aWdJbnROb2RlLnNpZ24oKSwgYmlnSW50Tm9kZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CisgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgTmVnYXRlTm9kZShsb2NhdGlvbiwgbik7CiB9CiAKIEV4cHJl
c3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0d2lzZU5vdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpCiB7CiAgICAgaWYgKGV4cHIt
PmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJlcihsb2Nh
dGlvbiwgfnRvSW50MzIoc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIpLT52YWx1ZSgpKSk7
Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQml0d2lzZU5vdE5vZGUobG9j
YXRpb24sIGV4cHIpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdHdpc2VOb3RO
b2RlKGxvY2F0aW9uLCBleHByKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VQb3dOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
CkBAIC0xMjk1LDcgKzEyOTUsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVBv
d05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzcwogICAgIGlmIChz
dHJpcHBlZEV4cHIyLT5pc051bWJlcigpKQogICAgICAgICBleHByMiA9IHN0cmlwcGVkRXhwcjI7
CiAKLSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBQb3dOb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIFBvd05vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTXVsdE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTEzMTIs
MTIgKzEzMTIsMTIgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNdWx0Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXMKICAgICB9CiAKICAgICBpZiAo
ZXhwcjEtPmlzTnVtYmVyKCkgJiYgc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KGV4cHIxKS0+dmFs
dWUoKSA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBVbmFy
eVBsdXNOb2RlKGxvY2F0aW9uLCBleHByMik7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFVuYXJ5UGx1c05vZGUobG9jYXRpb24sIGV4cHIyKTsKIAogICAgIGlmIChleHByMi0+
aXNOdW1iZXIoKSAmJiBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlKj4oZXhwcjIpLT52YWx1ZSgpID09
IDEpCi0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFVuYXJ5UGx1c05v
ZGUobG9jYXRpb24sIGV4cHIxKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkg
VW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcjEpOwogCi0gICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYS5nZXQoKSkgTXVsdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNB
c3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTXVsdE5vZGUobG9j
YXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRGl2Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtMTMzNSw3ICsxMzM1LDcgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VEaXZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3MKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGcm9tQmluYXJ5T3Bl
cmF0aW9uKGxvY2F0aW9uLCByZXN1bHQsIG51bWJlckV4cHIxLCBudW1iZXJFeHByMik7CiAgICAg
ICAgIHJldHVybiBjcmVhdGVEb3VibGVMaWtlTnVtYmVyKGxvY2F0aW9uLCByZXN1bHQpOwogICAg
IH0KLSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBEaXZOb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIERpdk5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlTW9kTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4
cHJlc3Npb25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtMTM1MCw3
ICsxMzUwLDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VNb2ROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3MKICAgICAgICAgY29uc3QgTnVtYmVy
Tm9kZSYgbnVtYmVyRXhwcjIgPSBzdGF0aWNfY2FzdDxOdW1iZXJOb2RlJj4oKmV4cHIyKTsKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUludGVnZXJMaWtlTnVtYmVyKGxvY2F0aW9uLCBmbW9kKG51bWJl
ckV4cHIxLnZhbHVlKCksIG51bWJlckV4cHIyLnZhbHVlKCkpKTsKICAgICB9Ci0gICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgTW9kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIy
LCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBN
b2ROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQog
CiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUFkZE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSog
ZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTEzNjEsNyArMTM2MSw3IEBAIEV4
cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQWRkTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzCiAgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4
cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CiAgICAgICAgIHJldHVybiBj
cmVhdGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBudW1iZXJFeHByMS52YWx1
ZSgpICsgbnVtYmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51bWJlckV4cHIyKTsKICAg
ICB9Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQWRkTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBBZGROb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNz
aWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZVN1Yk5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBF
eHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cykKQEAgLTEzNzYs
NyArMTM3Niw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlU3ViTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzCiAgICAgICAgIGNvbnN0IE51bWJl
ck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSY+KCpleHByMik7CiAg
ICAgICAgIHJldHVybiBjcmVhdGVOdW1iZXJGcm9tQmluYXJ5T3BlcmF0aW9uKGxvY2F0aW9uLCBu
dW1iZXJFeHByMS52YWx1ZSgpIC0gbnVtYmVyRXhwcjIudmFsdWUoKSwgbnVtYmVyRXhwcjEsIG51
bWJlckV4cHIyKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkg
U3ViTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdWJOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUxlZnRTaGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhw
cmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRIYXNB
c3NpZ25tZW50cykKQEAgLTEzODYsNyArMTM4Niw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWls
ZGVyOjptYWtlTGVmdFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
CiAgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8TnVt
YmVyTm9kZSY+KCpleHByMik7CiAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51bWJl
cihsb2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSA8PCAodG9VSW50MzIobnVt
YmVyRXhwcjIudmFsdWUoKSkgJiAweDFmKSk7CiAgICAgfQotICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEuZ2V0KCkpIExlZnRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CisgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTGVmdFNo
aWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0K
IAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Np
b25Ob2RlKiBleHByMiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKQpAQCAtMTM5Niw3ICsxMzk2
LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VSaWdodFNoaWZ0Tm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLAogICAgICAgICBjb25zdCBOdW1iZXJOb2RlJiBu
dW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigqZXhwcjIpOwogICAgICAgICBy
ZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24sIHRvSW50MzIobnVtYmVyRXhw
cjEudmFsdWUoKSkgPj4gKHRvVUludDMyKG51bWJlckV4cHIyLnZhbHVlKCkpICYgMHgxZikpOwog
ICAgIH0KLSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBSaWdodFNoaWZ0Tm9k
ZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKKyAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBSaWdodFNoaWZ0Tm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4
cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VVUmlnaHRTaGlmdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKQEAgLTE0MDYsNyArMTQwNiw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlVVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sCiAgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSY+KCpleHByMik7CiAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51
bWJlcihsb2NhdGlvbiwgdG9VSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgPj4gKHRvVUludDMy
KG51bWJlckV4cHIyLnZhbHVlKCkpICYgMHgxZikpOwogICAgIH0KLSAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hLmdldCgpKSBVbnNpZ25lZFJpZ2h0U2hpZnROb2RlKGxvY2F0aW9uLCBleHBy
MSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFVuc2lnbmVkUmlnaHRTaGlmdE5vZGUobG9jYXRpb24sIGV4cHIxLCBleHByMiwgcmln
aHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtl
Qml0T3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2Rl
KiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
CkBAIC0xNDE2LDcgKzE0MTYsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJp
dE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZQogICAgICAgICBj
b25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5vZGUmPigq
ZXhwcjIpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9jYXRpb24s
IHRvSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgfCB0b0ludDMyKG51bWJlckV4cHIyLnZhbHVl
KCkpKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQml0T3JO
b2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIy
LCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6
Om1ha2VCaXRBbmROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMpCkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6
bWFrZUJpdEFuZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogICAg
ICAgICBjb25zdCBOdW1iZXJOb2RlJiBudW1iZXJFeHByMiA9IHN0YXRpY19jYXN0PE51bWJlck5v
ZGUmPigqZXhwcjIpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW50ZWdlckxpa2VOdW1iZXIobG9j
YXRpb24sIHRvSW50MzIobnVtYmVyRXhwcjEudmFsdWUoKSkgJiB0b0ludDMyKG51bWJlckV4cHIy
LnZhbHVlKCkpKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkg
Qml0QW5kTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsK
KyAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRBbmROb2RlKGxvY2F0aW9uLCBleHBy
MSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCiBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJvb2wgcmlnaHRI
YXNBc3NpZ25tZW50cykKQEAgLTE0MzYsNyArMTQzNiw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByCiAgICAgICAgIGNvbnN0IE51bWJlck5vZGUmIG51bWJlckV4cHIyID0gc3RhdGljX2Nhc3Q8
TnVtYmVyTm9kZSY+KCpleHByMik7CiAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlZ2VyTGlrZU51
bWJlcihsb2NhdGlvbiwgdG9JbnQzMihudW1iZXJFeHByMS52YWx1ZSgpKSBeIHRvSW50MzIobnVt
YmVyRXhwcjIudmFsdWUoKSkpOwogICAgIH0KLSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
LmdldCgpKSBCaXRYT3JOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdu
bWVudHMpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpdFhPck5vZGUobG9jYXRp
b24sIGV4cHIxLCBleHByMiwgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiB9CiAKIEV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlQ29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQpA
QCAtMTQ0NiwxNiArMTQ0NiwxNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUNv
YWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeAogICAgICAgICBP
cHRpb25hbENoYWluTm9kZSogb3B0aW9uYWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hh
aW5Ob2RlKj4oZXhwcjEpOwogICAgICAgICBpZiAoIW9wdGlvbmFsQ2hhaW4tPmV4cHIoKS0+aXNE
ZWxldGVOb2RlKCkpIHsKICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Fic29yYmVkT3B0
aW9uYWxDaGFpbiA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
LmdldCgpKSBDb2FsZXNjZU5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgZXhw
cjIsIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbik7CisgICAgICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBDb2FsZXNjZU5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIo
KSwgZXhwcjIsIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbik7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY29uc3RleHByIGJvb2wgaGFzQWJzb3JiZWRPcHRpb25hbENoYWluID0gZmFsc2U7Ci0gICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQ29hbGVzY2VOb2RlKGxvY2F0aW9uLCBl
eHByMSwgZXhwcjIsIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbik7CisgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgQ29hbGVzY2VOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIGhhc0Fi
c29yYmVkT3B0aW9uYWxDaGFpbik7CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlU3RhdGljQmxvY2tGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RFbmQpCiB7Ci0gICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgU3RhdGlj
QmxvY2tGdW5jdGlvbkNhbGxOb2RlKGxvY2F0aW9uLCBmdW5jLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN0YXRpY0Jsb2NrRnVu
Y3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgZnVuYywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5k
KTsKIH0KIAogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBi
b29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgs
IGJvb2wgaXNPcHRpb25hbENhbGwpCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbgogICAgICAgICBBU1NFUlQoIWlzT3B0aW9uYWxDYWxsKTsKICAgICAgICAgQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlKiBpbnRyaW5zaWMgPSBzdGF0aWNfY2FzdDxCeXRlY29kZUludHJp
bnNpY05vZGUqPihmdW5jKTsKICAgICAgICAgaWYgKGludHJpbnNpYy0+dHlwZSgpID09IEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6VHlwZTo6Q29uc3RhbnQgJiYgaW50cmluc2ljLT5lbnRyeSgpLnR5
cGUoKSA9PSBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpUeXBlOjpFbWl0dGVyKQotICAgICAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQnl0ZWNvZGVJbnRyaW5zaWNO
b2RlKEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlwZTo6RnVuY3Rpb24sIGxvY2F0aW9uLCBpbnRy
aW5zaWMtPmVudHJ5KCksIGludHJpbnNpYy0+aWRlbnRpZmllcigpLCBhcmdzLCBkaXZvdCwgZGl2
b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6VHlwZTo6RnVu
Y3Rpb24sIGxvY2F0aW9uLCBpbnRyaW5zaWMtPmVudHJ5KCksIGludHJpbnNpYy0+aWRlbnRpZmll
cigpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0KIAogICAgIGlm
IChmdW5jLT5pc09wdGlvbmFsQ2hhaW4oKSkgewpAQCAtMTQ4NCwxOSArMTQ4NCwxOSBAQCBFeHBy
ZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbgogICAgIH0KIAogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigp
KQotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBGdW5jdGlvbkNhbGxW
YWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVu
ZCwgaXNPcHRpb25hbENhbGwpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBG
dW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCwgaXNPcHRpb25hbENhbGwpOwogICAgIGlmIChmdW5jLT5pc1Jlc29sdmVO
b2RlKCkpIHsKICAgICAgICAgUmVzb2x2ZU5vZGUqIHJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KGZ1bmMpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0g
cmVzb2x2ZS0+aWRlbnRpZmllcigpOwogICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmV2YWwgJiYgIWlzT3B0aW9uYWxDYWxsKSB7CiAgICAgICAgICAgICB1c2Vz
RXZhbCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgRXZh
bEZ1bmN0aW9uQ2FsbE5vZGUobG9jYXRpb24sIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFdmFsRnVuY3Rp
b25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBGdW5j
dGlvbkNhbGxSZXNvbHZlTm9kZShsb2NhdGlvbiwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kLCBpc09wdGlvbmFsQ2FsbCk7CisgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlKGxvY2F0aW9uLCBpZGVudGlm
aWVyLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGlzT3B0aW9uYWxDYWxsKTsK
ICAgICB9CiAgICAgaWYgKGZ1bmMtPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAg
IEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNz
b3JOb2RlKj4oZnVuYyk7Ci0gICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0g
bmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShsb2NhdGlv
biwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYnJhY2tldC0+c3Vic2Ny
aXB0SGFzQXNzaWdubWVudHMoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBp
c09wdGlvbmFsQ2FsbCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlKiBub2RlID0g
bmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZShsb2NhdGlvbiwgYnJh
Y2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYnJhY2tldC0+c3Vic2NyaXB0SGFz
QXNzaWdubWVudHMoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBpc09wdGlv
bmFsQ2FsbCk7CiAgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGJyYWNrZXQtPmRp
dm90KCksIGJyYWNrZXQtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgfQpAQCAtMTUwNCwxMiArMTUwNCwxMiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbgog
ICAgIERvdEFjY2Vzc29yTm9kZSogZG90ID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4o
ZnVuYyk7CiAgICAgRnVuY3Rpb25DYWxsRG90Tm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxsUHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRp
ZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY2FsbFByaXZhdGVO
YW1lKCkpKQotICAgICAgICBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigp
LCBkb3QtPnR5cGUoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBpc09wdGlv
bmFsQ2FsbCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9w
YXJzZXJBcmVuYSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgp
LCBkb3QtPmlkZW50aWZpZXIoKSwgZG90LT50eXBlKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCwgaXNPcHRpb25hbENhbGwsIGNhbGxPckFwcGx5Q2hpbGREZXB0aCk7CiAgICAg
ZWxzZSBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpIHx8IGRv
dC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBw
bHlQcml2YXRlTmFtZSgpKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBvbmx5
IG5lZWRlZCBiZWNhdXNlIHdlIGhhdmVuJ3QgdGF1Z2h0IHRoZSBieXRlY29kZSBnZW5lcmF0b3Ig
dG8gaW5saW5lCiAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkgeWV0LiBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDY2OC4KICAgICAgICAgaWYgKCFkb3QtPmJh
c2UoKS0+aXNSZXNvbHZlTm9kZSgpIHx8IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZG90LT5i
YXNlKCkpLT5pZGVudGlmaWVyKCkgIT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0KQotICAg
ICAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRvdC0+
dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGlzT3B0aW9uYWxDYWxs
LCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOworICAgICAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJz
ZXJBcmVuYSkgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwg
ZG90LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQsIGlzT3B0aW9uYWxDYWxsLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOwogICAgIH0g
ZWxzZSBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyIAogICAgICAgICAmJiBkb3QtPmlkZW50aWZp
ZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmhhc093blByb3BlcnR5CiAgICAgICAgICYmIGFy
Z3MtPm1fbGlzdE5vZGUKQEAgLTE1MjEsMTAgKzE1MjEsMTAgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24KICAgICAgICAgLy8gPHJlc29sdmVOb2RlfHRoaXNOb2RlPi5oYXNPd25Qcm9wZXJ0eSg8
cmVzb2x2ZU5vZGU+KQogICAgICAgICAvLyBpLmU6CiAgICAgICAgIC8vIG8uaGFzT3duUHJvcGVy
dHkocCkKLSAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgSGFzT3duUHJv
cGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVu
dGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQs
IGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgSGFz
T3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90
LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQsIGlzT3B0aW9uYWxDYWxsKTsKICAgICB9CiAgICAgaWYgKCFub2RlKQotICAgICAgICBu
b2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGlzT3B0aW9uYWxDYWxsKTsKKyAgICAgICAgbm9k
ZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90
LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5cGUoKSwgYXJncywgZGl2b3QsIGRp
dm90U3RhcnQsIGRpdm90RW5kLCBpc09wdGlvbmFsQ2FsbCk7CiAgICAgbm9kZS0+c2V0U3ViZXhw
cmVzc2lvbkluZm8oZG90LT5kaXZvdCgpLCBkb3QtPmRpdm90RW5kKCkub2Zmc2V0KTsKICAgICBy
ZXR1cm4gbm9kZTsKIH0KQEAgLTE1MzYsMTAgKzE1MzYsMTAgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGludAogICAgICAgICByZXR1cm4gbWFrZUNvYWxlc2NlTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0
LCByaHMuZmlyc3QpOwogCiAgICAgY2FzZSBPUjoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYS5nZXQoKSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmly
c3QsIExvZ2ljYWxPcGVyYXRvcjo6T3IpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBMb2dpY2FsT3BOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgTG9naWNh
bE9wZXJhdG9yOjpPcik7CiAKICAgICBjYXNlIEFORDoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMu
Zmlyc3QsIExvZ2ljYWxPcGVyYXRvcjo6QW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIExv
Z2ljYWxPcGVyYXRvcjo6QW5kKTsKIAogICAgIGNhc2UgQklUT1I6CiAgICAgICAgIHJldHVybiBt
YWtlQml0T3JOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5o
YXNBc3NpZ25tZW50KTsKQEAgLTE1NTEsMzcgKzE1NTEsMzcgQEAgRXhwcmVzc2lvbk5vZGUqIEFT
VEJ1aWxkZXI6Om1ha2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGludAogICAgICAgICByZXR1cm4gbWFrZUJpdEFuZE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwg
cmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBFUUVROgot
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBFcXVhbE5vZGUobG9jYXRp
b24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFcXVhbE5vZGUobG9jYXRpb24sIGxocy5m
aXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBO
RToKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgTm90RXF1YWxOb2Rl
KGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTm90RXF1YWxOb2RlKGxvY2F0
aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAog
ICAgIGNhc2UgU1RSRVE6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkp
IFN0cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNv
bmQuaGFzQXNzaWdubWVudCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN0
cmljdEVxdWFsTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQu
aGFzQXNzaWdubWVudCk7CiAKICAgICBjYXNlIFNUUk5FUToKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgTm90U3RyaWN0RXF1YWxOb2RlKGxvY2F0aW9uLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgTm90U3RyaWN0RXF1YWxOb2RlKGxvY2F0aW9uLCBsaHMuZmly
c3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKIAogICAgIGNhc2UgTFQ6
Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIExlc3NOb2RlKGxvY2F0
aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTGVzc05vZGUobG9jYXRpb24sIGxocy5m
aXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOwogCiAgICAgY2FzZSBH
VDoKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYS5nZXQoKSkgR3JlYXRlck5vZGUo
bG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQp
OworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBHcmVhdGVyTm9kZShsb2NhdGlv
biwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAKICAg
ICBjYXNlIExFOgotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBMZXNz
RXFOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3Np
Z25tZW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTGVzc0VxTm9kZShs
b2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7
CiAKICAgICBjYXNlIEdFOgotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgp
KSBHcmVhdGVyRXFOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29u
ZC5oYXNBc3NpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgR3Jl
YXRlckVxTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIHJocy5zZWNvbmQuaGFz
QXNzaWdubWVudCk7CiAKICAgICBjYXNlIElOU1RBTkNFT0Y6IHsKLSAgICAgICAgSW5zdGFuY2VP
Zk5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEluc3RhbmNlT2ZOb2RlKGxv
Y2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNBc3NpZ25tZW50KTsK
KyAgICAgICAgSW5zdGFuY2VPZk5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEluc3Rh
bmNlT2ZOb2RlKGxvY2F0aW9uLCBsaHMuZmlyc3QsIHJocy5maXJzdCwgcmhzLnNlY29uZC5oYXNB
c3NpZ25tZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24obm9kZSwgbGhzLnNlY29u
ZC5zdGFydCwgcmhzLnNlY29uZC5zdGFydCwgcmhzLnNlY29uZC5lbmQpOwogICAgICAgICByZXR1
cm4gbm9kZTsKICAgICB9CiAKICAgICBjYXNlIElOVE9LRU46IHsKLSAgICAgICAgSW5Ob2RlKiBu
b2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBJbk5vZGUobG9jYXRpb24sIGxocy5maXJz
dCwgcmhzLmZpcnN0LCByaHMuc2Vjb25kLmhhc0Fzc2lnbm1lbnQpOworICAgICAgICBJbk5vZGUq
IG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEluTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCBy
aHMuZmlyc3QsIHJocy5zZWNvbmQuaGFzQXNzaWdubWVudCk7CiAgICAgICAgIHNldEV4Y2VwdGlv
bkxvY2F0aW9uKG5vZGUsIGxocy5zZWNvbmQuc3RhcnQsIHJocy5zZWNvbmQuc3RhcnQsIHJocy5z
ZWNvbmQuZW5kKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQpAQCAtMTYyMSw3ICsxNjIx
LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKIHsKICAgICBpZiAoIWxvYy0+aXNMb2NhdGlv
bigpKSB7CiAgICAgICAgIEFTU0VSVChsb2MtPmlzRnVuY3Rpb25DYWxsKCkpOwotICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24s
IGxvYywgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBBc3NpZ25FcnJvck5vZGUobG9jYXRpb24sIGxvYywgZGl2b3QsIHN0YXJ0LCBlbmQpOwog
ICAgIH0KIAogICAgIGlmIChsb2MtPmlzUmVzb2x2ZU5vZGUoKSkgewpAQCAtMTYzMyw3ICsxNjMz
LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHIKICAgICAgICAgICAgICAgICBtZXRhZGF0YS0+
c2V0RWNtYU5hbWUocmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZXhwci0+aXNDbGFzc0V4cHJOb2RlKCkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q2xhc3NFeHByTm9kZSo+KGV4cHIpLT5zZXRFY21hTmFtZShyZXNvbHZlLT5pZGVudGlmaWVyKCkp
OwotICAgICAgICAgICAgQXNzaWduUmVzb2x2ZU5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJl
bmEuZ2V0KCkpIEFzc2lnblJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVy
KCksIGV4cHIsIEFzc2lnbm1lbnRDb250ZXh0OjpBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAg
ICAgICAgICBBc3NpZ25SZXNvbHZlTm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQXNz
aWduUmVzb2x2ZU5vZGUobG9jYXRpb24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgZXhwciwgQXNz
aWdubWVudENvbnRleHQ6OkFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgIHNldEV4
Y2VwdGlvbkxvY2F0aW9uKG5vZGUsIHN0YXJ0LCBkaXZvdCwgZW5kKTsKICAgICAgICAgICAgIHJl
dHVybiBub2RlOwogICAgICAgICB9CkBAIC0xNjQ0LDI1ICsxNjQ0LDI1IEBAIEV4cHJlc3Npb25O
b2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByCiAgICAgICAgICAgICAgICAgbWV0YWRhdGEtPnNldEVjbWFOYW1lKHJlc29s
dmUtPmlkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHItPmlzQ2xhc3NF
eHByTm9kZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENsYXNzRXhwck5vZGUqPihl
eHByKS0+c2V0RWNtYU5hbWUocmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFNob3J0Q2lyY3VpdFJlYWRNb2RpZnlSZXNv
bHZlTm9kZShsb2NhdGlvbiwgcmVzb2x2ZS0+aWRlbnRpZmllcigpLCBvcCwgZXhwciwgZXhwckhh
c0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBTaG9ydENpcmN1aXRSZWFkTW9kaWZ5UmVzb2x2ZU5vZGUobG9jYXRp
b24sIHJlc29sdmUtPmlkZW50aWZpZXIoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywg
ZGl2b3QsIHN0YXJ0LCBlbmQpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYS5nZXQoKSkgUmVhZE1vZGlmeVJlc29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZl
LT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFy
dCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUmVhZE1vZGlmeVJl
c29sdmVOb2RlKGxvY2F0aW9uLCByZXNvbHZlLT5pZGVudGlmaWVyKCksIG9wLCBleHByLCBleHBy
SGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwgZW5kKTsKICAgICB9CiAKICAgICBpZiAobG9j
LT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2Rl
KiBicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KGxvYyk7CiAKICAg
ICAgICAgaWYgKG9wID09IE9wZXJhdG9yOjpFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEuZ2V0KCkpIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0
LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywg
ZXhwckhhc0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBzdGFydCwgZW5kKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFzc2lnbkJyYWNrZXROb2RlKGxvY2F0
aW9uLCBicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBleHByLCBsb2NIYXNB
c3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBicmFja2V0LT5kaXZvdCgpLCBzdGFydCwg
ZW5kKTsKIAogICAgICAgICBpZiAob3AgPT0gT3BlcmF0b3I6OkNvYWxlc2NlRXEgfHwgb3AgPT0g
T3BlcmF0b3I6Ok9yRXEgfHwgb3AgPT0gT3BlcmF0b3I6OkFuZEVxKSB7Ci0gICAgICAgICAgICBh
dXRvKiBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBTaG9ydENpcmN1aXRSZWFkTW9k
aWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNrZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2Ny
aXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25tZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBk
aXZvdCwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBhdXRvKiBub2RlID0gbmV3IChtX3BhcnNl
ckFyZW5hKSBTaG9ydENpcmN1aXRSZWFkTW9kaWZ5QnJhY2tldE5vZGUobG9jYXRpb24sIGJyYWNr
ZXQtPmJhc2UoKSwgYnJhY2tldC0+c3Vic2NyaXB0KCksIG9wLCBleHByLCBsb2NIYXNBc3NpZ25t
ZW50cywgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVuZCk7CiAgICAgICAgICAg
ICBub2RlLT5zZXRTdWJleHByZXNzaW9uSW5mbyhicmFja2V0LT5kaXZvdCgpLCBicmFja2V0LT5k
aXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQog
Ci0gICAgICAgIFJlYWRNb2RpZnlCcmFja2V0Tm9kZSogbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVu
YS5nZXQoKSkgUmVhZE1vZGlmeUJyYWNrZXROb2RlKGxvY2F0aW9uLCBicmFja2V0LT5iYXNlKCks
IGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwciwgbG9jSGFzQXNzaWdubWVudHMsIGV4cHJI
YXNBc3NpZ25tZW50cywgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAgICAgICBSZWFkTW9kaWZ5QnJh
Y2tldE5vZGUqIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFJlYWRNb2RpZnlCcmFja2V0Tm9k
ZShsb2NhdGlvbiwgYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3AsIGV4
cHIsIGxvY0hhc0Fzc2lnbm1lbnRzLCBleHBySGFzQXNzaWdubWVudHMsIGRpdm90LCBzdGFydCwg
ZW5kKTsKICAgICAgICAgbm9kZS0+c2V0U3ViZXhwcmVzc2lvbkluZm8oYnJhY2tldC0+ZGl2b3Qo
KSwgYnJhY2tldC0+ZGl2b3RFbmQoKS5vZmZzZXQpOwogICAgICAgICByZXR1cm4gbm9kZTsKICAg
ICB9CkBAIC0xNjcxLDE1ICsxNjcxLDE1IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjpt
YWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAg
RG90QWNjZXNzb3JOb2RlKiBkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihsb2Mp
OwogCiAgICAgaWYgKG9wID09IE9wZXJhdG9yOjpFcXVhbCkKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYS5nZXQoKSkgQXNzaWduRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCks
IGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5cGUoKSwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRz
LCBkb3QtPmRpdm90KCksIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBBc3NpZ25Eb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlm
aWVyKCksIGRvdC0+dHlwZSgpLCBleHByLCBleHBySGFzQXNzaWdubWVudHMsIGRvdC0+ZGl2b3Qo
KSwgc3RhcnQsIGVuZCk7CiAKICAgICBpZiAob3AgPT0gT3BlcmF0b3I6OkNvYWxlc2NlRXEgfHwg
b3AgPT0gT3BlcmF0b3I6Ok9yRXEgfHwgb3AgPT0gT3BlcmF0b3I6OkFuZEVxKSB7Ci0gICAgICAg
IGF1dG8qIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEuZ2V0KCkpIFNob3J0Q2lyY3VpdFJlYWRN
b2RpZnlEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRv
dC0+dHlwZSgpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3RhcnQsIGVu
ZCk7CisgICAgICAgIGF1dG8qIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFNob3J0Q2lyY3Vp
dFJlYWRNb2RpZnlEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVy
KCksIGRvdC0+dHlwZSgpLCBvcCwgZXhwciwgZXhwckhhc0Fzc2lnbm1lbnRzLCBkaXZvdCwgc3Rh
cnQsIGVuZCk7CiAgICAgICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3Qo
KSwgZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0K
IAotICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hLmdldCgp
KSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmll
cigpLCBkb3QtPnR5cGUoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3QsIHN0
YXJ0LCBlbmQpOworICAgIFJlYWRNb2RpZnlEb3ROb2RlKiBub2RlID0gbmV3IChtX3BhcnNlckFy
ZW5hKSBSZWFkTW9kaWZ5RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRp
ZmllcigpLCBkb3QtPnR5cGUoKSwgb3AsIGV4cHIsIGV4cHJIYXNBc3NpZ25tZW50cywgZGl2b3Qs
IHN0YXJ0LCBlbmQpOwogICAgIG5vZGUtPnNldFN1YmV4cHJlc3Npb25JbmZvKGRvdC0+ZGl2b3Qo
KSwgZG90LT5kaXZvdEVuZCgpLm9mZnNldCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CkBAIC0xNjg3
LDEzICsxNjg3LDEzIEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQXNzaWduTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiBFeHByZXNzaW9uTm9kZSog
QVNUQnVpbGRlcjo6bWFrZVByZWZpeE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCkKIHsKICAgICBjaGVja0FyZ3VtZW50c0xlbmd0aE1vZGlmaWNhdGlvbihleHByKTsK
LSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdldCgpKSBQcmVmaXhOb2RlKGxvY2F0aW9u
LCBleHByLCBvcCwgZGl2b3QsIHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByZWZpeE5vZGUobG9jYXRpb24sIGV4cHIsIG9wLCBkaXZvdCwgc3RhcnQsIGVuZCk7
CiB9CiAKIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlUG9zdGZpeE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIsIE9wZXJhdG9y
IG9wLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKIHsKICAgICBjaGVja0FyZ3VtZW50c0xl
bmd0aE1vZGlmaWNhdGlvbihleHByKTsKLSAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hLmdl
dCgpKSBQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhwciwgb3AsIGRpdm90LCBzdGFydCwgZW5kKTsK
KyAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQb3N0Zml4Tm9kZShsb2NhdGlvbiwgZXhw
ciwgb3AsIGRpdm90LCBzdGFydCwgZW5kKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9FYWdlcklJRkVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0VhZ2VySUlGRVJlZ2lzdHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzYzYWJmMWIwYmQzLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9FYWdlcklJRkVSZWdpc3RyeS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDI2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkVhZ2VySUlGRVJlZ2lzdHJ5LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1FYWdlcklJRkVSZWdp
c3RyeTo6fkVhZ2VySUlGRVJlZ2lzdHJ5KCkKLXsKLSAgICBjbGVhcigpOwotfQotCi12b2lkIEVh
Z2VySUlGRVJlZ2lzdHJ5OjpjbGVhcigpCi17Ci0gICAgbV9tYXAuY2xlYXIoKTsKLX0KLQotdm9p
ZCBFYWdlcklJRkVSZWdpc3RyeTo6YWRkKGludCBzb3VyY2VQb3NpdGlvbiwgc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uTm9kZT4gbm9kZSkKLXsKLSAgICBtX21hcC5hZGQoc291cmNlUG9zaXRpb24s
IFdURjo6bW92ZShub2RlKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IEVh
Z2VySUlGRVJlZ2lzdHJ5Ojp0YWtlKGludCBzb3VyY2VQb3NpdGlvbikKLXsKLSAgICByZXR1cm4g
bV9tYXAudGFrZShzb3VyY2VQb3NpdGlvbik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9FYWdlcklJRkVSZWdpc3RyeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9FYWdlcklJRkVSZWdpc3RyeS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWJiODEwZmFjM2YuLjAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0VhZ2VySUlGRVJlZ2lzdHJ5LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDI2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJOb2Rlcy5oIgotI2luY2x1ZGUgPHd0Zi9JbmxpbmVNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRWFnZXJJSUZFUmVn
aXN0cnkgOiBwdWJsaWMgUmVmQ291bnRlZDxFYWdlcklJRkVSZWdpc3RyeT4gewotcHVibGljOgot
ICAgIEVhZ2VySUlGRVJlZ2lzdHJ5KCkgeyB9Ci0gICAgfkVhZ2VySUlGRVJlZ2lzdHJ5KCk7Ci0K
LSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBhZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Tm9kZT4gdGFrZShpbnQgc291cmNlUG9zaXRpb24pOwotCi1wcml2YXRlOgotICAgIElubGluZU1h
cDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+LCA0LCBXVEY6OkludEhhc2g8aW50
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBtX21hcDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAppbmRleCBiOGQxOTA5NWVlNTMuLjhlY2E2MzVkMzg1NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTM2
LDkgKzM2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBwYXJzZXJBcmVuYS5h
bGxvY2F0ZURlbGV0YWJsZTxUPihzaXplKTsKICAgICB9CiAKLSAgICBpbmxpbmUgUGFyc2VyQXJl
bmFSb290OjpQYXJzZXJBcmVuYVJvb3QoUmVmPFBhcnNlckFyZW5hPiYmIHBhcnNlckFyZW5hKQot
ICAgICAgICA6IG1fYXJlbmEoV1RGOjptb3ZlKHBhcnNlckFyZW5hKSkKKyAgICBpbmxpbmUgUGFy
c2VyQXJlbmFSb290OjpQYXJzZXJBcmVuYVJvb3QoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hKQog
ICAgIHsKKyAgICAgICAgbV9hcmVuYS5zd2FwKHBhcnNlckFyZW5hKTsKICAgICB9CiAKICAgICBp
bmxpbmUgTm9kZTo6Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAppbmRleCAwYTkyZWNjODc5YzQuLmE5NTQ0Yjkx
YzhlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKQEAgLTExOCw5ICsx
MTgsOSBAQCBib29sIEJsb2NrTm9kZTo6aGFzRWFybHlCcmVha09yQ29udGludWUoKSBjb25zdAog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2NvcGVOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKFJlZjxQYXJzZXJBcmVu
YT4mJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJl
cyBsZXhpY2FsbHlTY29wZWRGZWF0dXJlcykKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFy
ZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJl
cyBsZXhpY2FsbHlTY29wZWRGZWF0dXJlcykKICAgICA6IFN0YXRlbWVudE5vZGUoZW5kTG9jYXRp
b24pCi0gICAgLCBQYXJzZXJBcmVuYVJvb3QoV1RGOjptb3ZlKHBhcnNlckFyZW5hKSkKKyAgICAs
IFBhcnNlckFyZW5hUm9vdChwYXJzZXJBcmVuYSkKICAgICAsIG1fc3RhcnRMaW5lTnVtYmVyKHN0
YXJ0TG9jYXRpb24ubGluZSkKICAgICAsIG1fc3RhcnRTdGFydE9mZnNldChzdGFydExvY2F0aW9u
LnN0YXJ0T2Zmc2V0KQogICAgICwgbV9zdGFydExpbmVTdGFydE9mZnNldChzdGFydExvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCkKQEAgLTEzMiw5ICsxMzIsOSBAQCBTY29wZU5vZGU6OlNjb3BlTm9k
ZShSZWY8UGFyc2VyQXJlbmE+JiYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcgogewogfQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShSZWY8UGFyc2VyQXJlbmE+JiYgcGFy
c2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3Vy
Y2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmJiB2YXJFbnZpcm9ubWVu
dCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYmIGxleGlj
YWxWYXJpYWJsZXMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgTGV4aWNhbGx5U2NvcGVkRmVhdHVy
ZXMgbGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitTY29w
ZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZh
cmlhYmxlRW52aXJvbm1lbnQmJiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNT
dGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYmIGxleGljYWxWYXJpYWJsZXMsIENvZGVGZWF0dXJl
cyBmZWF0dXJlcywgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMgbGV4aWNhbGx5U2NvcGVkRmVhdHVy
ZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0
aW9uKQotICAgICwgUGFyc2VyQXJlbmFSb290KFdURjo6bW92ZShwYXJzZXJBcmVuYSkpCisgICAg
LCBQYXJzZXJBcmVuYVJvb3QocGFyc2VyQXJlbmEpCiAgICAgLCBWYXJpYWJsZUVudmlyb25tZW50
Tm9kZShXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIFdURjo6bW92ZShmdW5jU3RhY2spKQog
ICAgICwgbV9zdGFydExpbmVOdW1iZXIoc3RhcnRMb2NhdGlvbi5saW5lKQogICAgICwgbV9zdGFy
dFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24uc3RhcnRPZmZzZXQpCkBAIC0xNjYsOCArMTY2LDgg
QEAgYm9vbCBTY29wZU5vZGU6Omhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkgY29uc3QKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLVByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShSZWY8UGFyc2VyQXJl
bmE+JiYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVu
dmlyb25tZW50JiYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZh
cmlhYmxlRW52aXJvbm1lbnQmJiBsZXhpY2FsVmFyaWFibGVzLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgTGV4aWNh
bGx5U2NvcGVkRmVhdHVyZXMgbGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElubmVyQXJyb3dGdW5j
dGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCi0gICAgOiBTY29wZU5vZGUoV1RG
Ojptb3ZlKHBhcnNlckFyZW5hKSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwg
Y2hpbGRyZW4sIFdURjo6bW92ZSh2YXJFbnZpcm9ubWVudCksIFdURjo6bW92ZShmdW5jU3RhY2sp
LCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIGZlYXR1cmVzLCBsZXhpY2FsbHlTY29wZWRG
ZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitQ
cm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
TG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYmIHZhckVudmlyb25tZW50
LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiYgbGV4aWNh
bFZhcmlhYmxlcywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzIGxleGljYWxs
eVNjb3BlZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2Nv
cGVEYXRhPiYmKQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBl
bmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgV1RGOjptb3ZlKHZhckVudmlyb25tZW50KSwg
V1RGOjptb3ZlKGZ1bmNTdGFjayksIFdURjo6bW92ZShsZXhpY2FsVmFyaWFibGVzKSwgZmVhdHVy
ZXMsIGxleGljYWxseVNjb3BlZEZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIG51bUNvbnN0YW50cykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAg
LCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiB7CkBAIC0xNzUsOCArMTc1LDggQEAgUHJvZ3JhbU5v
ZGU6OlByb2dyYW1Ob2RlKFJlZjxQYXJzZXJBcmVuYT4mJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTW9kdWxl
UHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTW9kdWxlUHJvZ3Jh
bU5vZGU6Ok1vZHVsZVByb2dyYW1Ob2RlKFJlZjxQYXJzZXJBcmVuYT4mJiBwYXJzZXJBcmVuYSwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1u
LCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmJiB2YXJFbnZp
cm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYm
IGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJlcyBs
ZXhpY2FsbHlTY29wZWRGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1v
ZHVsZVNjb3BlRGF0YT4mJiBtb2R1bGVTY29wZURhdGEpCi0gICAgOiBTY29wZU5vZGUoV1RGOjpt
b3ZlKHBhcnNlckFyZW5hKSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hp
bGRyZW4sIFdURjo6bW92ZSh2YXJFbnZpcm9ubWVudCksIFdURjo6bW92ZShmdW5jU3RhY2spLCBX
VEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIGZlYXR1cmVzLCBsZXhpY2FsbHlTY29wZWRGZWF0
dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitNb2R1
bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5h
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1
bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYmIHZhckVu
dmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50
JiYgbGV4aWNhbFZhcmlhYmxlcywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVz
IGxleGljYWxseVNjb3BlZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMg
aW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8
TW9kdWxlU2NvcGVEYXRhPiYmIG1vZHVsZVNjb3BlRGF0YSkKKyAgICA6IFNjb3BlTm9kZShwYXJz
ZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIFdU
Rjo6bW92ZSh2YXJFbnZpcm9ubWVudCksIFdURjo6bW92ZShmdW5jU3RhY2spLCBXVEY6Om1vdmUo
bGV4aWNhbFZhcmlhYmxlcyksIGZlYXR1cmVzLCBsZXhpY2FsbHlTY29wZWRGZWF0dXJlcywgaW5u
ZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCiAgICAgLCBtX3N0YXJ0
Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogICAgICwg
bV91c2VzQXdhaXQoZmVhdHVyZXMgJiBBd2FpdEZlYXR1cmUpCkBAIC0xODYsOCArMTg2LDggQEAg
TW9kdWxlUHJvZ3JhbU5vZGU6Ok1vZHVsZVByb2dyYW1Ob2RlKFJlZjxQYXJzZXJBcmVuYT4mJiBw
YXJzZXJBcmVuYSwgY29uc3QgSlNUb2sKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEV2YWxOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUV2YWxOb2RlOjpF
dmFsTm9kZShSZWY8UGFyc2VyQXJlbmE+JiYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJpYWJsZUVudmlyb25tZW50JiYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5j
U3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmJiBsZXhpY2FsVmFyaWFibGVzLCBGdW5jdGlvblBh
cmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMgbGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElubmVy
QXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCi0gICAgOiBTY29w
ZU5vZGUoV1RGOjptb3ZlKHBhcnNlckFyZW5hKSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24s
IHNvdXJjZSwgY2hpbGRyZW4sIFdURjo6bW92ZSh2YXJFbnZpcm9ubWVudCksIFdURjo6bW92ZShm
dW5jU3RhY2spLCBXVEY6Om1vdmUobGV4aWNhbFZhcmlhYmxlcyksIGZlYXR1cmVzLCBsZXhpY2Fs
bHlTY29wZWRGZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25z
dGFudHMpCitFdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRz
KiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYmIHZhckVudmlyb25tZW50LCBGdW5jdGlv
blN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxl
cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzIGxleGljYWxseVNjb3BlZEZl
YXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9u
Q29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYm
KQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc291cmNlLCBjaGlsZHJlbiwgV1RGOjptb3ZlKHZhckVudmlyb25tZW50KSwgV1RGOjptb3Zl
KGZ1bmNTdGFjayksIFdURjo6bW92ZShsZXhpY2FsVmFyaWFibGVzKSwgZmVhdHVyZXMsIGxleGlj
YWxseVNjb3BlZEZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNv
bnN0YW50cykKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KQEAgLTMxNCw4ICsz
MTQsOCBAQCB2b2lkIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpkdW1wKFByaW50U3RyZWFtJiBzdHJl
YW0pIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbk5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRnVuY3Rpb25Ob2RlOjpGdW5jdGlv
bk5vZGUoUmVmPFBhcnNlckFyZW5hPiYmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0
YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiYgbGV4aWNhbFZhcmlhYmxlcywg
RnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VD
b2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzIGxleGlj
YWxseVNjb3BlZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJB
cnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxl
U2NvcGVEYXRhPiYmKQotICAgIDogU2NvcGVOb2RlKFdURjo6bW92ZShwYXJzZXJBcmVuYSksIHN0
YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgV1RGOjptb3Zl
KHZhckVudmlyb25tZW50KSwgV1RGOjptb3ZlKGZ1bmNTdGFjayksIFdURjo6bW92ZShsZXhpY2Fs
VmFyaWFibGVzKSwgZmVhdHVyZXMsIGxleGljYWxseVNjb3BlZEZlYXR1cmVzLCBpbm5lckFycm93
RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNvbnN0YW50cykKK0Z1bmN0aW9uTm9kZTo6RnVuY3Rp
b25Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmJiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYm
IGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYmIGxleGljYWxWYXJpYWJsZXMsIEZ1bmN0
aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJlcyBsZXhpY2FsbHlT
Y29wZWRGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dG
dW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3Bl
RGF0YT4mJikKKyAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCBXVEY6Om1vdmUodmFyRW52aXJvbm1lbnQp
LCBXVEY6Om1vdmUoZnVuY1N0YWNrKSwgV1RGOjptb3ZlKGxleGljYWxWYXJpYWJsZXMpLCBmZWF0
dXJlcywgbGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcywgbnVtQ29uc3RhbnRzKQogICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCiAgICAg
LCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDdjY2VhZjc0MzkyMy4uYjY2
N2IwNTc2YjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0xMzksMTQg
KzEzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBQYXJzZXJBcmVuYVJvb3Qgewog
ICAgICAgICBXVEZfREVQUkVDQVRFRF9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKFBhcnNlckFyZW5hUm9vdCwgUGFyc2VyQXJlbmFSb290KTsKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIFBhcnNlckFyZW5hUm9vdChSZWY8UGFyc2VyQXJlbmE+JiYpOworICAgICAgICBQ
YXJzZXJBcmVuYVJvb3QoUGFyc2VyQXJlbmEmKTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgUGFy
c2VyQXJlbmEmIHBhcnNlckFyZW5hKCkgTElGRVRJTUVfQk9VTkQgeyByZXR1cm4gbV9hcmVuYS5n
ZXQoKTsgfQorICAgICAgICBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEoKSBMSUZFVElNRV9CT1VO
RCB7IHJldHVybiBtX2FyZW5hOyB9CiAgICAgICAgIHZpcnR1YWwgflBhcnNlckFyZW5hUm9vdCgp
IHsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZWY8UGFyc2VyQXJlbmE+IG1fYXJlbmE7
CisgICAgICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CiAgICAgfTsKIAogICAgIGNsYXNzIE5vZGUg
OiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC0xOTUxLDggKzE5NTEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gbmV3IGZvciBhbGxvY2F0aW9uLgogICAgICAgICB1c2lu
ZyBQYXJzZXJBcmVuYVJvb3Q6Om9wZXJhdG9yIG5ldzsKIAotICAgICAgICBTY29wZU5vZGUoUmVm
PFBhcnNlckFyZW5hPiYmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGVuZCwgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMpOwotICAgICAgICBTY29w
ZU5vZGUoUmVmPFBhcnNlckFyZW5hPiYmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52
aXJvbm1lbnQmJiwgQ29kZUZlYXR1cmVzLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJlcywgSW5uZXJB
cnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2Nv
cGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIExleGljYWxseVNjb3BlZEZlYXR1cmVzKTsKKyAgICAgICAg
U2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50
cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmly
b25tZW50JiYsIENvZGVGZWF0dXJlcywgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElubmVyQXJy
b3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgY29u
c3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgTElGRVRJTUVfQk9VTkQgeyByZXR1cm4gbV9z
b3VyY2U7IH0KICAgICAgICAgU291cmNlSUQgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS5wcm92aWRlcklEKCk7IH0KQEAgLTIwMzAsNyArMjAzMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFJlZjxQYXJzZXJBcmVuYT4mJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFy
aWFibGVFbnZpcm9ubWVudCYmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQm
JiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywg
TGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIFBy
b2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYmLCBGdW5jdGlv
blN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1v
ZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0yMDQ1LDcgKzIwNDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxOb2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9k
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsTm9kZShSZWY8UGFyc2VyQXJlbmE+JiYsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyos
IFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVy
ZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAg
ICBFdmFsTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rp
b25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzLCBJ
bm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxN
b2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc3Rh
cnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVt
bigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0yMDYwLDcgKzIwNjAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE1vZHVsZVByb2dyYW1Ob2RlIGZpbmFsIDogcHVi
bGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBNb2R1bGVQcm9ncmFtTm9kZShS
ZWY8UGFyc2VyQXJlbmE+JiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29s
dW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rpb25TdGFj
ayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNv
dXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzLCBJbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVT
Y29wZURhdGE+JiYpOworICAgICAgICBNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyos
IFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVy
ZXMsIExleGljYWxseVNjb3BlZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsg
fQogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVt
bjsgfQpAQCAtMjM0Nyw3ICsyMzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBG
dW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEZ1bmN0aW9uTm9kZShSZWY8UGFyc2VyQXJlbmE+JiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1l
bnQmJiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiYsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIExleGljYWxseVNjb3Bl
ZEZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFu
dHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBGdW5jdGlvbk5vZGUoUGFy
c2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291
cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiYsIEZ1bmN0aW9uU3RhY2smJiwgVmFy
aWFibGVFbnZpcm9ubWVudCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2Rl
JiwgQ29kZUZlYXR1cmVzLCBMZXhpY2FsbHlTY29wZWRGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0
aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRh
PiYmKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7
IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCmluZGV4IDE3MTgyMmYwYmFkMS4uYjEzYWYyZTc5OTE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC04OSwzNiArODksNiBAQCBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gZ2xvYmFsUGFyc2VDb3VudCB7IDAgfTsKIAogV1RGX01BS0VfVFpPTkVfQUxMT0NB
VEVEX0lNUEwoTW9kdWxlU2NvcGVEYXRhKTsKIAotLy8gV2hlbiB0aGUgcGFyc2VyIGVuY291bnRl
cnMgYW4gaW1tZWRpYXRlbHktaW52b2tlZCBmdW5jdGlvbiBleHByZXNzaW9uIChJSUZFKSwgaXQg
Y2FuCi0vLyBidWlsZCB0aGUgQVNUIHJpZ2h0IGF3YXkgaW5zdGVhZCBvZiB0aGUgdXN1YWwgc3lu
dGF4LWNoZWNraW5nIHBhcnNlIGZvbGxvd2VkIGJ5IGEgZnVsbAotLy8gQVNULWJ1aWxkaW5nIHJl
cGFyc2UuCi0vLwotLy8gRWFnZXJJSUZFUGFyc2VTY29wZSBhbmQgRWFnZXJJSUZFUGFyc2VTdGF0
ZSB3b3JrIHRvZ2V0aGVyIHRvIGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbi4KLS8vIEVhZ2VySUlG
RVBhcnNlU2NvcGUgaXMgY3JlYXRlZCBhcyBhIGxvY2FsIGluIHBhcnNlRnVuY3Rpb25JbmZvIHdo
ZW4gYW4gSUlGRSBjYW5kaWRhdGUKLS8vIGlzIGRldGVjdGVkLiBJdCBvd25zIGFuIEFTVEJ1aWxk
ZXIgYW5kIGNvbnN0cnVjdHMgYW4gRWFnZXJJSUZFUGFyc2VTdGF0ZSB0aGF0IGluc3RhbGxzCi0v
LyBpdHNlbGYgaW50byB0aGUgcGFyc2VyLiBUaGUgQVNUQnVpbGRlciB1c2VzIHRoZSBwYXJzZXIn
cyBvd24gYXJlbmEsIHNvIHRoZSBlYWdlcmx5IGJ1aWx0Ci0vLyBBU1Qgbm9kZXMgbGl2ZSBpbiB0
aGUgc2FtZSBhcmVuYSBhcyB0aGUgcmVzdCBvZiB0aGUgcGFyc2UuIFRoZSBGdW5jdGlvbk5vZGUg
Y3JlYXRlZCBmb3IKLS8vIHRoZSBJSUZFIGhvbGRzIGEgUmVmIHRvIHRoaXMgc2hhcmVkIGFyZW5h
LCBrZWVwaW5nIGl0IGFsaXZlLgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlclR5cGU+Ci1jbGFz
cyBFYWdlcklJRkVQYXJzZVNjb3BlIHsKLXB1YmxpYzoKLSAgICBFYWdlcklJRkVQYXJzZVNjb3Bl
KFBhcnNlcjxMZXhlclR5cGU+KiBwYXJzZXIsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KQotICAgICAg
ICA6IG1fYnVpbGRlcihjb25zdF9jYXN0PFZNJj4ocGFyc2VyLT5tX3ZtKSwgcGFyc2VyLT5tX3Bh
cnNlckFyZW5hLmNvcHlSZWYoKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4ocGFyc2VyLT5tX3Nv
dXJjZSkpCi0gICAgICAgICwgbV9wYXJzZVN0YXRlKCpwYXJzZXIsICZtX2J1aWxkZXIsIHN0YXJ0
T2Zmc2V0KQotICAgIHsgfQotCi1wcml2YXRlOgotICAgIEFTVEJ1aWxkZXIgbV9idWlsZGVyOwot
ICAgIFBhcnNlcjxMZXhlclR5cGU+OjpFYWdlcklJRkVQYXJzZVN0YXRlIG1fcGFyc2VTdGF0ZTsK
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci1Db2RlRmVhdHVyZXMgUGFyc2Vy
PExleGVyVHlwZT46OkVhZ2VySUlGRVBhcnNlU3RhdGU6OmZlYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV9idWlsZGVyLT5mZWF0dXJlcygpOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+Ci1pbnQgUGFyc2VyPExleGVyVHlwZT46OkVhZ2VySUlGRVBhcnNlU3RhdGU6Om51bUNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYnVpbGRlci0+bnVtQ29uc3RhbnRzKCk7IH0KLQogQUxX
QVlTX0lOTElORSBzdGF0aWMgU291cmNlUGFyc2VNb2RlIGdldEFzeW5jRnVuY3Rpb25Cb2R5UGFy
c2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiB7CiAgICAgaWYgKGlzQXN5bmNHZW5l
cmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkpCkBAIC0xNjgsMTggKzEzOCwxNiBAQCBQ
YXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBJbXBsZW1lbnRhdGlvblZpc2liaQogICAgICwgbV9pbXBsZW1lbnRhdGlvblZpc2liaWxpdHko
aW1wbGVtZW50YXRpb25WaXNpYmlsaXR5KQogICAgICwgbV9wYXJzaW5nQnVpbHRpbihidWlsdGlu
TW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKQogICAgICwgbV9pc0luc2lkZU9y
ZGluYXJ5RnVuY3Rpb24oaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uKQotICAgICwgbV9wYXJzZXJB
cmVuYShQYXJzZXJBcmVuYTo6Y3JlYXRlKCkpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFs
c2UpCiAgICAgLCBtX2RlYnVnZ2VyUGFyc2VEYXRhKGRlYnVnZ2VyUGFyc2VEYXRhKQogewogICAg
IG1fbGV4ZXIgPSBtYWtlVW5pcXVlPExleGVyVHlwZT4odm0sIGJ1aWx0aW5Nb2RlLCBzY3JpcHRN
b2RlKTsKLSAgICBtX2xleGVyLT5zZXRDb2RlKHNvdXJjZSwgbV9wYXJzZXJBcmVuYS5wdHIoKSk7
CisgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsICZtX3BhcnNlckFyZW5hKTsKICAgICBtX3Rv
a2VuLm1fc3RhcnRQb3NpdGlvbi5saW5lID0gc291cmNlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50
KCk7CiAgICAgbV90b2tlbi5tX3N0YXJ0UG9zaXRpb24ub2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zm
c2V0KCk7CiAgICAgbV90b2tlbi5tX3N0YXJ0UG9zaXRpb24ubGluZVN0YXJ0T2Zmc2V0ID0gc291
cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5tX2VuZFBvc2l0aW9uLm9mZnNldCA9IHNv
dXJjZS5zdGFydE9mZnNldCgpOwogICAgIG1fZnVuY3Rpb25DYWNoZSA9IHZtLmFkZFNvdXJjZVBy
b3ZpZGVyQ2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOwotICAgIG1fZWFnZXJJSUZFUmVnaXN0cnkg
PSB2bS5hZGRFYWdlcklJRkVSZWdpc3RyeShzb3VyY2UucHJvdmlkZXIoKSk7CiAKICAgICBTY29w
ZSogc2NvcGUgPSBwdXNoU2NvcGUoKTsKICAgICBzY29wZS0+c2V0TGV4aWNhbGx5U2NvcGVkRmVh
dHVyZXMobGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMpOwpAQCAtMjQ2LDcgKzIxNCw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgTk9ERUxFVEUgaXNQcml2YXRlRmllbGROYW1lKFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogRXhwZWN0ZWQ8
dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwg
UGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8aW50PiBmdW5jdGlv
bkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25zdCBGaXhlZFZlY3RvcjxVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Q2xhc3NFbGVtZW50RGVmaW5pdGlvbj4qIGNsYXNzRWxl
bWVudERlZmluaXRpb25zLCBjb25zdCBQcml2YXRlTmFtZUVudmlyb25tZW50KiBwYXJlbnRTY29w
ZVByaXZhdGVOYW1lcykKIHsKLSAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSY+
KG1fdm0pLCBtX3BhcnNlckFyZW5hLmNvcHlSZWYoKSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4o
bV9zb3VyY2UpKTsKKyAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSY+KG1fdm0p
LCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAg
IFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBzb3VyY2VQYXJzZU1vZGUoKTsKICAgICBTY29w
ZSogc2NvcGUgPSBjdXJyZW50U2NvcGUoKTsKICAgICBzY29wZS0+c2V0SXNMZXhpY2FsU2NvcGUo
KTsKQEAgLTM1Miw3ICszMjAsMjEgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlw
ZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAg
ICAgIGNvbnRleHQucHJvcGFnYXRlQXJndW1lbnRzVXNlKCk7CiAgICAgfQogCi0gICAgQ29kZUZl
YXR1cmVzIGZlYXR1cmVzID0gY29sbGVjdENvZGVGZWF0dXJlcyhjb250ZXh0LmZlYXR1cmVzKCks
IHNjb3BlKTsKKyAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBjb250ZXh0LmZlYXR1cmVzKCk7
CisgICAgaWYgKHNjb3BlLT5zaGFkb3dzQXJndW1lbnRzKCkpCisgICAgICAgIGZlYXR1cmVzIHw9
IFNoYWRvd3NBcmd1bWVudHNGZWF0dXJlOworICAgIGlmIChtX3NlZW5UYWdnZWRUZW1wbGF0ZUlu
Tm9uUmVwYXJzaW5nRnVuY3Rpb25Nb2RlKQorICAgICAgICBmZWF0dXJlcyB8PSBOb0V2YWxDYWNo
ZUZlYXR1cmU7CisgICAgaWYgKHNjb3BlLT5oYXNOb25TaW1wbGVQYXJhbWV0ZXJMaXN0KCkpCisg
ICAgICAgIGZlYXR1cmVzIHw9IE5vblNpbXBsZVBhcmFtZXRlckxpc3RGZWF0dXJlOworICAgIGlm
IChzY29wZS0+dXNlc0ltcG9ydE1ldGEoKSkKKyAgICAgICAgZmVhdHVyZXMgfD0gSW1wb3J0TWV0
YUZlYXR1cmU7CisgICAgaWYgKG1fc2VlbkFyZ3VtZW50c0RvdExlbmd0aCAmJiBzY29wZS0+aGFz
RGVjbGFyZWRHbG9iYWxBcmd1bWVudHMoKSkKKyAgICAgICAgZmVhdHVyZXMgfD0gQXJndW1lbnRz
RmVhdHVyZTsKKyAgICBpZiAoc2NvcGUtPmFzeW5jRnVuY3Rpb25Cb2R5RG9lc05vdFVzZUF3YWl0
KCkpCisgICAgICAgIGZlYXR1cmVzIHw9IEFzeW5jRnVuY3Rpb25XaXRob3V0QXdhaXRGZWF0dXJl
OworICAgIGlmIChzY29wZS0+dXNlc0F3YWl0KCkpCisgICAgICAgIGZlYXR1cmVzIHw9IEF3YWl0
RmVhdHVyZTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgaWYgKG1fcGFyc2luZ0J1aWx0aW4g
JiYgaXNQcm9ncmFtUGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKQEAgLTM3MiwyNiArMzU0LDYgQEAg
RXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0
cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICByZXR1cm4gUGFyc2VJbm5lclJlc3VsdCB7IHBh
cmFtZXRlcnMsIHNvdXJjZUVsZW1lbnRzLCBzY29wZS0+dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25z
KCksIHNjb3BlLT50YWtlRGVjbGFyZWRWYXJpYWJsZXMoKSwgc2NvcGUtPnRha2VMZXhpY2FsRW52
aXJvbm1lbnQoKSwgZmVhdHVyZXMsIGNvbnRleHQubnVtQ29uc3RhbnRzKCkgfTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLUNvZGVGZWF0dXJlcyBQYXJzZXI8TGV4ZXJUeXBl
Pjo6Y29sbGVjdENvZGVGZWF0dXJlcyhDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIFNjb3BlKiBzY29w
ZSkKLXsKLSAgICBpZiAoc2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKLSAgICAgICAgZmVhdHVy
ZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7Ci0gICAgaWYgKHNjb3BlLT5oYXNOb25TaW1w
bGVQYXJhbWV0ZXJMaXN0KCkpCi0gICAgICAgIGZlYXR1cmVzIHw9IE5vblNpbXBsZVBhcmFtZXRl
ckxpc3RGZWF0dXJlOwotICAgIGlmIChtX3NlZW5UYWdnZWRUZW1wbGF0ZUluTm9uUmVwYXJzaW5n
RnVuY3Rpb25Nb2RlKQotICAgICAgICBmZWF0dXJlcyB8PSBOb0V2YWxDYWNoZUZlYXR1cmU7Ci0g
ICAgaWYgKHNjb3BlLT51c2VzSW1wb3J0TWV0YSgpKQotICAgICAgICBmZWF0dXJlcyB8PSBJbXBv
cnRNZXRhRmVhdHVyZTsKLSAgICBpZiAobV9zZWVuQXJndW1lbnRzRG90TGVuZ3RoICYmIHNjb3Bl
LT5oYXNEZWNsYXJlZEdsb2JhbEFyZ3VtZW50cygpKQotICAgICAgICBmZWF0dXJlcyB8PSBBcmd1
bWVudHNGZWF0dXJlOwotICAgIGlmIChzY29wZS0+YXN5bmNGdW5jdGlvbkJvZHlEb2VzTm90VXNl
QXdhaXQoKSkKLSAgICAgICAgZmVhdHVyZXMgfD0gQXN5bmNGdW5jdGlvbldpdGhvdXRBd2FpdEZl
YXR1cmU7Ci0gICAgaWYgKHNjb3BlLT51c2VzQXdhaXQoKSkKLSAgICAgICAgZmVhdHVyZXMgfD0g
QXdhaXRGZWF0dXJlOwotICAgIHJldHVybiBmZWF0dXJlczsKLX0KLQogdGVtcGxhdGUgPHR5cGVu
YW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8
TGV4ZXJUeXBlPjo6aXNBcnJvd0Z1bmN0aW9uUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKQEAgLTE0MjYsMTQgKzEzODgsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGUKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBET1VCTEU6CiAgICAgICAgICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCku
bWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAmbV9w
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3Rf
Y2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKICAgICAgICAg
ICAgICAgICAgICAgd2FzU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBCSUdJTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZSA9IG1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VCaWdJbnREZWNp
bWFsSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksICptX3Rva2VuLm1fZGF0YS5iaWdJ
bnRTdHJpbmcsIG1fdG9rZW4ubV9kYXRhLnJhZGl4KTsKKyAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lID0gbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlQmlnSW50RGVj
aW1hbElkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCAqbV90b2tlbi5tX2RhdGEuYmln
SW50U3RyaW5nLCBtX3Rva2VuLm1fZGF0YS5yYWRpeCk7CiAgICAgICAgICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKHByb3BlcnR5TmFtZSwgIkNhbm5vdCBwYXJzZSBiaWcgaW50IHByb3BlcnR5IG5h
bWUiKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBP
UEVOQlJBQ0tFVDoKQEAgLTI0MTQsOSArMjM3Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJv
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlQXJyb3dGdW5jdGlv
blNpbmdsZUV4cHJlc3Npb25Cb2R5U291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciksICJDYW5u
b3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKG1faWlmZVBhcnNlU3RhdGUgJiYgIW1faWlmZVBhcnNlU3RhdGUtPmlzSW5Vc2Uo
KSkgW1t1bmxpa2VseV1dCi0gICAgICAgICAgICBmYWlsSWZGYWxzZShtX2lpZmVQYXJzZVN0YXRl
LT5wYXJzZVNvdXJjZUVsZW1lbnRzKENoZWNrRm9yU3RyaWN0TW9kZSksIGJvZHlUeXBlID09IFN0
YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5j
dGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOwotICAg
ICAgICBlbHNlIGlmIChtX2RlYnVnZ2VyUGFyc2VEYXRhKQorICAgICAgICBpZiAobV9kZWJ1Z2dl
clBhcnNlRGF0YSkKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMo
Y29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlv
bkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5u
b3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwg
Q2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9j
ayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2Ug
Ym9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CkBAIC0yNjEwLDcgKzI1NzAsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRyZWVCdWlsZGVyOjpGb3JtYWxQYXJh
bWV0ZXJMaXN0IFBhcnNlcjxMZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgot
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1l
bnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0
b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIGV4cGVjdGVkU3VwZXJCaW5kaW5n
LCB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0LCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
JiBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUgZnVuY3Rpb25EZWZpbml0aW9u
VHlwZSwgc3RkOjpvcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb24sIGJvb2wgaXNMaWtlbHlJSUZFKQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYg
Y29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgYm9vbCBuYW1l
SXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3Vw
ZXJCaW5kaW5nIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCB1bnNpZ25lZCBmdW5jdGlvblN0YXJ0LCBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGUgZnVuY3Rpb25EZWZpbml0aW9uVHlwZSwgc3RkOjpvcHRpb25hbDxpbnQ+IGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCiB7CiAgICAgYXV0byBtb2Rl
ID0gc291cmNlUGFyc2VNb2RlKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNGdW5jdGlvblBhcnNl
TW9kZShtb2RlKSk7CkBAIC0yNzE1LDggKzI2NzUsNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWls
ZAogCiAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3Zt
KSwgbV9sZXhlci5nZXQoKSk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEVhZ2VySUlGRVBhcnNlU2Nv
cGU8TGV4ZXJUeXBlPj4gZWFnZXJJSUZFUGFyc2VTY29wZTsKLQogICAgIFBhcnNlclN0YXRlIG9s
ZFN0YXRlOwogICAgIGlmICgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJy
b3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSku
Y29udGFpbnMobW9kZSkpKSBbW3VubGlrZWx5XV0gewogICAgICAgICBzdGFydExvY2F0aW9uID0g
dG9rZW5Mb2NhdGlvbigpOwpAQCAtMjgwMCwyMCArMjc1OCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJl
ZUJ1aWxkCiAKICAgICAgICAgc3RhcnRMb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKICAgICAg
ICAgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotCiAgICAgICAgIHN0YXJ0
Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIHBhcnNpbmcgYSBm
dW5jdGlvbiBuZXN0ZWQgaW5zaWRlIGFuIGVhZ2VybHkgcGFyc2VkIElJRkUsIGFuZCB3ZSBhcmUK
LSAgICAgICAgLy8gc3RpbGwgb24gdGhlIHNhbWUgbGluZSB3aGVyZSB0aGUgSUlGRSBzdGFydGVk
LCB0aGUgc3RhcnQgY29sdW1uIG5lZWRzIHRvIGJlCi0gICAgICAgIC8vIGFkanVzdGVkLiBEdXJp
bmcgbGF6eSBwYXJzaW5nIHRoZSBzdGFydENvbHVtbiBvZiB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJl
Ci0gICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgSUlGRSwgYnV0IGR1cmlu
ZyBlYWdlciBwYXJzaW5nIGl0IGlzIHJlbGF0aXZlIHRvCi0gICAgICAgIC8vIHRoZSBzdGFydCBv
ZiB0aGUgc291cmNlIGNvZGUgY29udGFpbmluZyB0aGUgSUlGRS4KLSAgICAgICAgaWYgKG1faWlm
ZVBhcnNlU3RhdGUKLSAgICAgICAgICAgICYmIG1faWlmZVBhcnNlU3RhdGUtPmlzSW5Vc2UoKQot
ICAgICAgICAgICAgJiYgdG9rZW5MaW5lU3RhcnQoKSA8PSBtX2lpZmVQYXJzZVN0YXRlLT5zdGFy
dE9mZnNldCgpKSBbW3VubGlrZWx5XV0gewotCi0gICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9
IG1faWlmZVBhcnNlU3RhdGUtPnN0YXJ0T2Zmc2V0KCkgLSB0b2tlbkxpbmVTdGFydCgpOwotICAg
ICAgICAgICAgc3RhcnRDb2x1bW4gLT0gYWRqdXN0bWVudDsKLSAgICAgICAgfQogICAgICAgICBm
dW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAKICAgICAg
ICAgcGFyYW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX3N0YXJ0UG9zaXRpb24ub2Zmc2V0OwpAQCAt
MjgyMiwyNyArMjc2NywxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgICAgICBpZiAo
dHJ5TG9hZENhY2hlZEZ1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICAvLyBEZXRlY3QgSUlGRSBjYW5kaWRhdGVzIGFuZCBzZXQgdXAgZWFnZXIgQVNUIGJ1aWxk
aW5nLgotICAgICAgICAvLyBCZWNhdXNlIHdlIGFyZSBwYXN0IHRyeUxvYWRDYWNoZWRGdW5jdGlv
bigpLCB3ZSBrbm93IHRoZSBjYW5kaWRhdGUgaGFzbid0IGJlZW4gc3ludGF4LWNoZWNrZWQgeWV0
LgotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRyZWVCdWlsZGVyLCBBU1RC
dWlsZGVyPikgewotICAgICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRFYWdlcmx5QnVpbGRBU1Qg
PSBpc0xpa2VseUlJRkUKLSAgICAgICAgICAgICAgICAmJiBPcHRpb25zOjp1c2VFYWdlcklJRkVQ
YXJzaW5nKCkKLSAgICAgICAgICAgICAgICAmJiBtb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Tm9y
bWFsRnVuY3Rpb25Nb2RlCi0gICAgICAgICAgICAgICAgJiYgZnVuY3Rpb25EZWZpbml0aW9uVHlw
ZSA9PSBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAg
JiYgIW1fZGVidWdnZXJQYXJzZURhdGEKLSAgICAgICAgICAgICAgICAmJiBtX2VhZ2VySUlGRVJl
Z2lzdHJ5OwotICAgICAgICAgICAgaWYgKHNob3VsZEVhZ2VybHlCdWlsZEFTVCkgW1t1bmxpa2Vs
eV1dCi0gICAgICAgICAgICAgICAgZWFnZXJJSUZFUGFyc2VTY29wZS5lbXBsYWNlKHRoaXMsIHBh
cmFtZXRlcnNTdGFydCk7Ci0gICAgICAgIH0KLQogICAgICAgICBtX3BhcnNlclN0YXRlLmxhc3RG
dW5jdGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOwogICAgICAgICBvbGRTdGF0ZSA9IGludGVy
bmFsU2F2ZVBhcnNlclN0YXRlKGNvbnRleHQpOwogICAgICAgICB7CiAgICAgICAgICAgICBTZXRG
b3JTY29wZSBvdmVycmlkZUFsbG93QXdhaXQobV9wYXJzZXJTdGF0ZS5hbGxvd0F3YWl0LCAhaXNB
c3luY0Z1bmN0aW9uUGFyc2VNb2RlKG1vZGUpKTsKLSAgICAgICAgICAgIGlmIChtX2lpZmVQYXJz
ZVN0YXRlICYmICFtX2lpZmVQYXJzZVN0YXRlLT5pc0luVXNlKCkpIFtbdW5saWtlbHldXQotICAg
ICAgICAgICAgICAgIG1faWlmZVBhcnNlU3RhdGUtPnRlbXBsYXRlIHBhcnNlRnVuY3Rpb25QYXJh
bWV0ZXJzPFRyZWVCdWlsZGVyPihmdW5jdGlvbkluZm8pOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIGZ1bmN0
aW9uSW5mbyk7CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhzeW50YXhDaGVj
a2VyLCBmdW5jdGlvbkluZm8pOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTI5NjEsNDMgKzI4OTAsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVC
dWlsZAogICAgIH0KIAogICAgIGJvb2wgZnVuY3Rpb25TY29wZVdhc1N0cmljdE1vZGUgPSBmdW5j
dGlvblNjb3BlLT5zdHJpY3RNb2RlKCk7Ci0KLSAgICBjb25zdCBib29sIGhhc0VhZ2VybHlCdWls
dEFTVCA9IG1faWlmZVBhcnNlU3RhdGUgJiYgbV9paWZlUGFyc2VTdGF0ZS0+c291cmNlRWxlbWVu
dHMoKTsKLSAgICBBU1NFUlRfSU1QTElFUyhoYXNFYWdlcmx5QnVpbHRBU1QsIG1faWlmZVBhcnNl
U3RhdGUtPmZ1bmN0aW9uUGFyYW1ldGVycygpKTsKLQotICAgIC8vIENvbGxlY3QgSUlGRSBzY29w
ZSBkYXRhIGJlZm9yZSBwb3BTY29wZSBkZXN0cm95cyBzY29wZSBzdGF0ZS4KLSAgICBDb2RlRmVh
dHVyZXMgaWlmZUZlYXR1cmVzID0gMDsKLSAgICBpbnQgaWlmZU51bUNvbnN0YW50cyA9IDA7Ci0g
ICAgTGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMgaWlmZUxleEZlYXR1cmVzID0gTm9MZXhpY2FsbHlT
Y29wZWRGZWF0dXJlczsKLSAgICBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaWlmZUlu
bmVyRmVhdHVyZXMgPSAwOwotICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgaWlmZVZhckRlY2xhcmF0
aW9uczsKLSAgICBpZiAoaGFzRWFnZXJseUJ1aWx0QVNUKSBbW3VubGlrZWx5XV0gewotICAgICAg
ICAvLyBGaW5hbGl6ZSBzbG9wcHktbW9kZSBmdW5jdGlvbiBob2lzdGluZyBiZWZvcmUgY29sbGVj
dGluZyBzY29wZSBkYXRhLgotICAgICAgICAvLyBUaGlzIGFkZHMgaG9pc3RlZCBmdW5jdGlvbiBu
YW1lcyB0byBkZWNsYXJlZFZhcmlhYmxlcyBhbmQgc2V0cwotICAgICAgICAvLyBpc1Nsb3BweU1v
ZGVIb2lzdGVkRnVuY3Rpb24gb24gdGhlIEZ1bmN0aW9uTWV0YWRhdGFOb2RlcywgbWF0Y2hpbmcK
LSAgICAgICAgLy8gd2hhdCBwYXJzZUlubmVyKCkgZG9lcyBkdXJpbmcgYSBub3JtYWwgcmVwYXJz
ZS4KLSAgICAgICAgaWYgKCFmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkpIHsKLSAgICAgICAg
ICAgIGZ1bmN0aW9uU2NvcGUtPmZpbmFsaXplU2xvcHB5TW9kZUZ1bmN0aW9uSG9pc3RpbmcoKTsK
LSAgICAgICAgICAgIC8vIENsZWFyIGNhbmRpZGF0ZXMgc28gdGhleSBkb24ndCBidWJibGUgdXAg
dG8gb3V0ZXIgc2NvcGVzCi0gICAgICAgICAgICAvLyB3aGVuIHBvcFNjb3BlIHJ1bnMg4oCUIHRo
ZSBtZXRhZGF0YSBub2RlcyBiZWxvbmcgdG8gdGhlIGNhY2hlZAotICAgICAgICAgICAgLy8gRnVu
Y3Rpb25Ob2RlIGFuZCBtdXN0IG5vdCBiZSBtdXRhdGVkIGJ5IG91dGVyIGZpbmFsaXphdGlvbi4K
LSAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPmNsZWFyU2xvcHB5TW9kZUZ1bmN0aW9uSG9pc3Rp
bmdDYW5kaWRhdGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpaWZlRmVhdHVyZXMgPSBjb2xs
ZWN0Q29kZUZlYXR1cmVzKG1faWlmZVBhcnNlU3RhdGUtPmZlYXR1cmVzKCksIGZ1bmN0aW9uU2Nv
cGUuc2NvcGUoKSk7Ci0gICAgICAgIGlpZmVOdW1Db25zdGFudHMgPSBtX2lpZmVQYXJzZVN0YXRl
LT5udW1Db25zdGFudHMoKTsKLSAgICAgICAgaWlmZUxleEZlYXR1cmVzID0gZnVuY3Rpb25TY29w
ZS0+bGV4aWNhbGx5U2NvcGVkRmVhdHVyZXMoKTsKLSAgICAgICAgaWlmZUlubmVyRmVhdHVyZXMg
PSBmdW5jdGlvblNjb3BlLT5pbm5lckFycm93RnVuY3Rpb25GZWF0dXJlcygpOwotCi0gICAgICAg
IGlpZmVWYXJEZWNsYXJhdGlvbnMgPSBmdW5jdGlvblNjb3BlLT5kZWNsYXJlZFZhcmlhYmxlcygp
OwotICAgICAgICBJZGVudGlmaWVyU2V0IGNhcHR1cmVkVmFyaWFibGVzOwotICAgICAgICBmdW5j
dGlvblNjb3BlLT5nZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJpYWJsZXMpOwotICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogY2FwdHVyZWRWYXJpYWJsZXMpCi0gICAgICAgICAgICBpaWZlVmFy
RGVjbGFyYXRpb25zLm1hcmtWYXJpYWJsZUFzQ2FwdHVyZWQoZW50cnkuZ2V0KCkpOwotICAgIH0K
LQotICAgIGF1dG8gW2xleGljYWxFbnZpcm9ubWVudCwgZnVuY3Rpb25EZWNsYXJhdGlvbnNdID0g
cG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5m
byk7Ci0KKyAgICAKKyAgICBwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVl
ZHNGcmVlVmFyaWFibGVJbmZvKTsKKyAgICAKICAgICBpZiAoZnVuY3Rpb25Cb2R5VHlwZSAhPSBB
cnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pCiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VC
UkFDRSwgIkV4cGVjdGVkIGEgY2xvc2luZyAnfScgYWZ0ZXIgYSAiLCBzdHJpbmdGb3JGdW5jdGlv
bk1vZGUobW9kZSksICIgYm9keSIpOwogICAgIGVsc2UgewpAQCAtMzAxMyw0MyArMjkwOCw2IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAKICAgICBpZiAobmV3SW5mbykKICAgICAgICAgbV9m
dW5jdGlvbkNhY2hlLT5hZGQoZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBXVEY6Om1vdmUobmV3
SW5mbykpOwotCi0gICAgaWYgKGhhc0VhZ2VybHlCdWlsdEFTVCkgW1t1bmxpa2VseV1dIHsKLSAg
ICAgICAgU291cmNlQ29kZSBmdW5jdGlvblNvdXJjZSA9IG1fc291cmNlLT5zdWJFeHByZXNzaW9u
KAotICAgICAgICAgICAgZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5k
T2Zmc2V0LAotICAgICAgICAgICAgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZv
LnBhcmFtZXRlcnNTdGFydENvbHVtbik7Ci0KLSAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGVuZExv
Y2F0aW9uOwotICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gbV9sYXN0VG9rZW5Mb2NhdGlvbi5s
aW5lOwotICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCA9IGZ1bmN0aW9uSW5mby5lbmRP
ZmZzZXQ7Ci0gICAgICAgIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IG1fbGFzdFRva2Vu
TG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwotCi0gICAgICAgIGF1dG8gZnVuY3Rpb25Ob2RlID0g
bWFrZVVuaXF1ZTxGdW5jdGlvbk5vZGU+KAotICAgICAgICAgICAgbV9wYXJzZXJBcmVuYS5jb3B5
UmVmKCksCi0gICAgICAgICAgICBzdGFydExvY2F0aW9uLAotICAgICAgICAgICAgZW5kTG9jYXRp
b24sCi0gICAgICAgICAgICBzdGFydENvbHVtbiwKLSAgICAgICAgICAgIHRva2VuQ29sdW1uKCks
Ci0gICAgICAgICAgICBtX2lpZmVQYXJzZVN0YXRlLT5zb3VyY2VFbGVtZW50cygpLAotICAgICAg
ICAgICAgV1RGOjptb3ZlKGlpZmVWYXJEZWNsYXJhdGlvbnMpLAotICAgICAgICAgICAgV1RGOjpt
b3ZlKGZ1bmN0aW9uRGVjbGFyYXRpb25zKSwKLSAgICAgICAgICAgIFdURjo6bW92ZShsZXhpY2Fs
RW52aXJvbm1lbnQpLAotICAgICAgICAgICAgbV9paWZlUGFyc2VTdGF0ZS0+ZnVuY3Rpb25QYXJh
bWV0ZXJzKCksCi0gICAgICAgICAgICBmdW5jdGlvblNvdXJjZSwKLSAgICAgICAgICAgIGlpZmVG
ZWF0dXJlcywKLSAgICAgICAgICAgIGlpZmVMZXhGZWF0dXJlcywKLSAgICAgICAgICAgIGlpZmVJ
bm5lckZlYXR1cmVzLAotICAgICAgICAgICAgaWlmZU51bUNvbnN0YW50cywKLSAgICAgICAgICAg
IG51bGxwdHIgLyogbW9kdWxlU2NvcGVEYXRhICovKTsKLQotICAgICAgICBmdW5jdGlvbk5vZGUt
PnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBtX2xhc3RUb2tlbkxvY2F0aW9uLmxpbmUs
IG1fbGFzdFRva2VuTG9jYXRpb24uZW5kT2Zmc2V0LCBtX2xhc3RUb2tlbkxvY2F0aW9uLmxpbmVT
dGFydE9mZnNldCk7Ci0gICAgICAgIGZ1bmN0aW9uTm9kZS0+c2V0RW5kT2Zmc2V0KGZ1bmN0aW9u
SW5mby5lbmRPZmZzZXQpOwotICAgICAgICBmdW5jdGlvbk5vZGUtPmZpbmlzaFBhcnNpbmcoCi0g
ICAgICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA/ICpmdW5jdGlvbkluZm8ubmFtZSA6IG1fdm0u
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBGdW5jdGlvbk1vZGU6
OkZ1bmN0aW9uRXhwcmVzc2lvbik7Ci0KLSAgICAgICAgbV9lYWdlcklJRkVSZWdpc3RyeS0+YWRk
KGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgV1RGOjptb3ZlKGZ1bmN0aW9uTm9kZSkpOwotICAg
IH0KICAgICAKICAgICBmdW5jdGlvbkluZm8uZW5kTGluZSA9IG1fbGFzdFRva2VuTG9jYXRpb24u
bGluZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNTMsNyArMzIxMSw3IEBAIHBhcnNlTWV0aG9k
OgogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QklHSU5UOgotICAgICAgICAgICAgaWRlbnQgPSBtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlQmlnSW50RGVjaW1hbElkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCAq
bV90b2tlbi5tX2RhdGEuYmlnSW50U3RyaW5nLCBtX3Rva2VuLm1fZGF0YS5yYWRpeCk7CisgICAg
ICAgICAgICBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZUJpZ0lu
dERlY2ltYWxJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgKm1fdG9rZW4ubV9kYXRh
LmJpZ0ludFN0cmluZywgbV90b2tlbi5tX2RhdGEucmFkaXgpOwogICAgICAgICAgICAgZmFpbElm
RmFsc2UoaWRlbnQsICJDYW5ub3QgcGFyc2UgYmlnIGludCBwcm9wZXJ0eSBuYW1lIik7CiAgICAg
ICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzODgsNyArMzI0Niw3IEBA
IHBhcnNlTWV0aG9kOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBj
YXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlm
aWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBt
X3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNl
ckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0
PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFT
U0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTM0NjksOSArMzMyNyw5IEBAIHBhcnNlTWV0aG9kOgogCiAgICAgICAgICAgICBpZiAoY29tcHV0
ZWRQcm9wZXJ0eU5hbWUpIHsKICAgICAgICAgICAgICAgICBpZiAodGFnID09IENsYXNzRWxlbWVu
dFRhZzo6SW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJl
bmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBpbnN0YW5j
ZUNvbXB1dGVkTmFtZVByZWZpeCwgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEKyspOworICAg
ICAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgp
Lm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBpbnN0YW5jZUNvbXB1dGVkTmFtZVByZWZpeCwg
bmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEKyspOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5h
KCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sIHN0YXRpY0NvbXB1dGVkTmFtZVByZWZpeCwg
bmV4dFN0YXRpY0NvbXB1dGVkRmllbGRJRCsrKTsKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQg
PSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlUHJpdmF0ZUlkZW50aWZpZXIo
bV92bSwgc3RhdGljQ29tcHV0ZWROYW1lUHJlZml4LCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElE
KyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJl
c3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0
aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAg
Y2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTM1MDQsNyArMzM2Miw3
IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAg
ICAgICAgICBmYWlsSWZGYWxzZShwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQsIEJsb2NrVHlw
ZTo6U3RhdGljQmxvY2spLCAiQ2Fubm90IHBhcnNlIGNsYXNzIHN0YXRpYyBibG9jayIpOwogICAg
ICAgICAgICAgYXV0byogc3ltYm9sSW1wbCA9IHN0ZDo6Yml0X2Nhc3Q8U3ltYm9sSW1wbCo+KG1f
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc3RhdGljSW5pdGlhbGl6ZXJCbG9ja1By
aXZhdGVOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEt
PmlkZW50aWZpZXJBcmVuYSgpLm1ha2VJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwg
c3ltYm9sSW1wbCk7CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgc3ltYm9sSW1w
bCk7CiAgICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHkoaWRlbnQs
IHR5cGUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCB0YWcpOwogICAgICAgICAgICAgY2xhc3NTY29w
ZS0+bWFya0xhc3RVc2VkVmFyaWFibGVzU2V0QXNDYXB0dXJlZCh1c2VkVmFyaWFibGVzU2l6ZSk7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC00ODY1LDcgKzQ3MjMsNyBAQCBuYW1lZFByb3BlcnR5Ogog
ICAgIGNhc2UgRE9VQkxFOgogICAgIGNhc2UgSU5URUdFUjogewogICAgICAgICB1bnNpZ25lZCBm
dW5jdGlvblN0YXJ0ID0gdGltZXNQb3NpdGlvbi52YWx1ZV9vcihhc3luY1Bvc2l0aW9uLnZhbHVl
X29yKG1fdG9rZW4ubV9zdGFydFBvc2l0aW9uKSk7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVu
dGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUp
OworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwg
bV90b2tlbi5tX2RhdGEuZG91YmxlVmFsdWUpOwogICAgICAgICBuZXh0KCk7CiAKICAgICAgICAg
aWYgKG1hdGNoKE9QRU5QQVJFTikpIHsKQEAgLTQ4ODMsNyArNDc0MSw3IEBAIG5hbWVkUHJvcGVy
dHk6CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVudCwgbm9kZSwg
UHJvcGVydHlOb2RlOjpDb25zdGFudCwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIEluZmVyTmFt
ZTo6QWxsb3dlZCwgQ2xhc3NFbGVtZW50VGFnOjpObyk7CiAgICAgfQogICAgIGNhc2UgQklHSU5U
OiB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV9wYXJzZXJBcmVuYS0+aWRl
bnRpZmllckFyZW5hKCkubWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0m
PihtX3ZtKSwgKm1fdG9rZW4ubV9kYXRhLmJpZ0ludFN0cmluZywgbV90b2tlbi5tX2RhdGEucmFk
aXgpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fcGFyc2VyQXJlbmEuaWRl
bnRpZmllckFyZW5hKCkubWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0m
PihtX3ZtKSwgKm1fdG9rZW4ubV9kYXRhLmJpZ0ludFN0cmluZywgbV90b2tlbi5tX2RhdGEucmFk
aXgpOwogICAgICAgICBmYWlsSWZGYWxzZShpZGVudCwgIkNhbm5vdCBwYXJzZSBiaWcgaW50IHBy
b3BlcnR5IG5hbWUiKTsKICAgICAgICAgdW5zaWduZWQgZnVuY3Rpb25TdGFydCA9IHRpbWVzUG9z
aXRpb24udmFsdWVfb3IoYXN5bmNQb3NpdGlvbi52YWx1ZV9vcihtX3Rva2VuLm1fc3RhcnRQb3Np
dGlvbikpOwogICAgICAgICBuZXh0KCk7CkBAIC00OTc3LDcgKzQ4MzUsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VH
ZXR0ZXJTZXR0ZXIoVAogICAgICAgICBudW1lcmljUHJvcGVydHlOYW1lID0gbV90b2tlbi5tX2Rh
dGEuZG91YmxlVmFsdWU7CiAgICAgICAgIG5leHQoKTsKICAgICB9IGVsc2UgaWYgKG1hdGNoKEJJ
R0lOVCkpIHsKLSAgICAgICAgc3RyaW5nUHJvcGVydHlOYW1lID0gbV9wYXJzZXJBcmVuYS0+aWRl
bnRpZmllckFyZW5hKCkubWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0m
PihtX3ZtKSwgKm1fdG9rZW4ubV9kYXRhLmJpZ0ludFN0cmluZywgbV90b2tlbi5tX2RhdGEucmFk
aXgpOworICAgICAgICBzdHJpbmdQcm9wZXJ0eU5hbWUgPSBtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VCaWdJbnREZWNpbWFsSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92
bSksICptX3Rva2VuLm1fZGF0YS5iaWdJbnRTdHJpbmcsIG1fdG9rZW4ubV9kYXRhLnJhZGl4KTsK
ICAgICAgICAgZmFpbElmRmFsc2Uoc3RyaW5nUHJvcGVydHlOYW1lLCAiQ2Fubm90IHBhcnNlIGJp
ZyBpbnQgcHJvcGVydHkgbmFtZSIpOwogICAgICAgICBuZXh0KCk7CiAgICAgfSBlbHNlIGlmIChj
b25zdW1lKE9QRU5CUkFDS0VUKSkgW1tsaWtlbHldXSB7CkBAIC01MDEyLDcgKzQ4NzAsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VHZXR0ZXJTZXR0ZXIoVAogICAgIGlmIChjb21wdXRlZFByb3BlcnR5TmFtZSkKICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShsb2NhdGlv
biwgc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgUHJvcGVydHlOb2RlOjpD
b21wdXRlZCksIGNvbXB1dGVkUHJvcGVydHlOYW1lLCBpbmZvLCB0YWcpOwogCi0gICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNJj4obV92
bSksIG1fcGFyc2VyQXJlbmEuZ2V0KCksIGxvY2F0aW9uLCB0eXBlLCBudW1lcmljUHJvcGVydHlO
YW1lLCBpbmZvLCB0YWcpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwg
dHlwZSwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgaW5mbywgdGFnKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KQEAgLTUxNjAsNyArNTAxOCw2IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9u
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbihUcmVlQnVpbGRlciYg
Y29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goRlVOQ1RJT04pKTsKLSAgICBib29sIGlzTGlr
ZWx5SUlGRSA9IG1fbGFzdFRva2VuVHlwZSA9PSBPUEVOUEFSRU4gfHwgbV9sYXN0VG9rZW5UeXBl
ID09IEVYQ0xBTUFUSU9OOwogICAgIFNldEZvclNjb3BlIG5vbkxIU0NvdW50U2NvcGUobV9wYXJz
ZXJTdGF0ZS5ub25MSFNDb3VudCk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2Vu
TG9jYXRpb24oKSk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25TdGFydCA9IHRva2VuU3RhcnQoKTsK
QEAgLTUxNzUsNyArNTAzMiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25FeHByCiAgICAgQ29uc3Ry
dWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCA9IGN1cnJlbnRTY29wZSgpLT5pc0dsb2JhbENvZGUo
KSA/IG1fY29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlvbkV4cHJlc3Npb25zIDogQ29u
c3RydWN0b3JLaW5kOjpOb25lOwogICAgIFN1cGVyQmluZGluZyBleHBlY3RlZFN1cGVyQmluZGlu
ZyA9IGNvbnN0cnVjdG9yS2luZCA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgPyBTdXBlckJp
bmRpbmc6Ok5lZWRlZCA6IFN1cGVyQmluZGluZzo6Tm90TmVlZGVkOwogCi0gICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6
Tm9uZSwgZmFsc2UsIGNvbnN0cnVjdG9yS2luZCwgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lv
biwgc3RkOjpudWxsb3B0LCBpc0xpa2VseUlJRkUpKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBl
eHByZXNzaW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQs
IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgZmFsc2UsIGNvbnN0cnVjdG9yS2luZCwg
ZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rp
b25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90IHBhcnNlIGZ1bmN0aW9uIGV4
cHJlc3Npb24iKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobG9jYXRp
b24sIGZ1bmN0aW9uSW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
CmluZGV4IDc0MTFjODA1NjI0YS4uNGVhYTM4ODkxMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJFYWdlcklJRkVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAj
aW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJNb2R1bGVTY29wZURhdGEuaCIKQEAgLTQ5LDEw
ICs0OCw4IEBAIFdURl9BTExPV19VTlNBRkVfQlVGRkVSX1VTQUdFX0JFR0lOCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1jbGFzcyBBU1RCdWlsZGVyOwogY2xhc3MgRnVuY3Rpb25NZXRhZGF0YU5vZGU7
CiBjbGFzcyBGdW5jdGlvblBhcmFtZXRlcnM7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PiBjbGFzcyBFYWdlcklJRkVQYXJzZVNjb3BlOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIFZN
OwogY2xhc3MgU291cmNlQ29kZTsKQEAgLTgzNCw3ICs4MzEsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNOb25TaW1wbGVQYXJhbWV0ZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNOb25TaW1w
bGVQYXJhbWV0ZXJMaXN0OyB9CiAKICAgICBib29sIGhhc1Nsb3BweU1vZGVGdW5jdGlvbkhvaXN0
aW5nQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuICFtX3Nsb3BweU1vZGVGdW5jdGlvbkhvaXN0
aW5nQ2FuZGlkYXRlcy5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIGNsZWFyU2xvcHB5TW9kZUZ1bmN0
aW9uSG9pc3RpbmdDYW5kaWRhdGVzKCkgeyBtX3Nsb3BweU1vZGVGdW5jdGlvbkhvaXN0aW5nQ2Fu
ZGlkYXRlcy5jbGVhcigpOyB9CiAKICAgICB2b2lkIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVj
dG9yKGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiB1c2VkVmFyaWFibGVzLCBWZWN0b3I8
VW5pcXVlZFN0cmluZ0ltcGwqLCA4PiYgdmVjdG9yKQogICAgIHsKQEAgLTExNjMsNzYgKzExNTks
NiBAQCBwcml2YXRlOgogICAgICAgICBQYXJzZXIqIG1fcGFyc2VyOwogICAgIH07CiAKLSAgICAv
LyBBIHNwZWNpYWxpemVkIHBhcnNlciBzdGF0ZSBhY3RpdmF0ZWQgaW4gcGFyc2VGdW5jdGlvbklu
Zm8oKSB0byBwYXJzZSBhIGxpa2VseSBJSUZFLgotICAgIC8vIFNlZSBhbHNvIEVhZ2VySUlGRVBh
cnNlU2NvcGUgaW4gUGFyc2VyLmNwcC4KLSAgICAvLwotICAgIC8vIFRoZSBwYXJzZSBzdGF0ZSBw
cm92aWRlcyBtZXRob2RzIHRvIHBhcnNlIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlcnMgYW5kIGJv
ZHkgdXNpbmcKLSAgICAvLyBhbiBBU1RCdWlsZGVyIGluc3RlYWQgb2YgYSBTeW50YXhDaGVja2Vy
LCBjb2xsZWN0aW5nIHRoZSByZXN1bHRpbmcgRnVuY3Rpb25QYXJhbWV0ZXJzCi0gICAgLy8gYW5k
IFNvdXJjZUVsZW1lbnRzLgotICAgIC8vCi0gICAgLy8gQmVjYXVzZSBJSUZFIHBhcmFtZXRlcnMg
YW5kIGJvZHkgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBuZXN0ZWQgZnVuY3Rpb24gZGVmaW5pdGlv
bnMKLSAgICAvLyAoaW5jbHVkaW5nIG5lc3RlZCBJSUZFcyksIHRoZSBJSUZFIHBhcnNlIHN0YXRl
IG1hcmtzIGl0c2VsZiBhcyBpc0luVXNlIHdoaWxlCi0gICAgLy8gcGFyc2luZyB0aG9zZSBjb25z
dHJ1Y3RzLiBUaGlzIHByZXZlbnRzIG5lc3RlZCBmdW5jdGlvbnMgZnJvbSBtaXN0YWtlbmx5IHJl
dXNpbmcKLSAgICAvLyB0aGUgb3V0ZXIgSUlGRSdzIHBhcnNlIHN0YXRlIOKAlCB0aGV5IGZvbGxv
dyB0aGUgbm9ybWFsIHN5bnRheC1jaGVja2luZyBwYXRoIGluc3RlYWQsCi0gICAgLy8gb3Igc2V0
IHVwIHRoZWlyIG93biBlYWdlciBwYXJzZSBzdGF0ZSBpZiB0aGV5IGFyZSBJSUZFcyB0b28uCi0K
LSAgICBjbGFzcyBFYWdlcklJRkVQYXJzZVN0YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEVh
Z2VySUlGRVBhcnNlU3RhdGUoUGFyc2VyJiBwYXJzZXIsIEFTVEJ1aWxkZXIqIGJ1aWxkZXIsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAg
ICAgICAgICAsIG1fYnVpbGRlcihidWlsZGVyKQotICAgICAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0
KHN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX3NhdmVkSUlGRVBhcnNlU3RhdGUocGFyc2Vy
Lm1faWlmZVBhcnNlU3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci5tX2lpZmVQ
YXJzZVN0YXRlID0gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIH5FYWdlcklJRkVQYXJzZVN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9wYXJzZXIubV9paWZlUGFyc2VTdGF0ZSA9
IG1fc2F2ZWRJSUZFUGFyc2VTdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUcmVlQnVpbGRlcj4KLSAgICAgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVy
cyhQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBmdW5jdGlvbkluZm8pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mdW5jdGlvblBhcmFtZXRlcnMpOwotICAgICAgICAg
ICAgbV9pc0luVXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fZnVuY3Rpb25QYXJhbWV0ZXJzID0g
bV9wYXJzZXIucGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoKm1fYnVpbGRlciwgZnVuY3Rpb25JbmZv
KTsKLSAgICAgICAgICAgIG1faXNJblVzZSA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
U291cmNlRWxlbWVudHMqIHBhcnNlU291cmNlRWxlbWVudHMoU291cmNlRWxlbWVudHNNb2RlIG1v
ZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9zb3VyY2VFbGVtZW50cyk7Ci0g
ICAgICAgICAgICBtX2lzSW5Vc2UgPSB0cnVlOwotICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50
cyA9IG1fcGFyc2VyLnBhcnNlU291cmNlRWxlbWVudHMoKm1fYnVpbGRlciwgbW9kZSk7Ci0gICAg
ICAgICAgICBtX2lzSW5Vc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZUVs
ZW1lbnRzOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0luVXNlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0luVXNlOyB9Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQotCi0gICAgICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlcygp
IGNvbnN0OwotICAgICAgICBpbnQgbnVtQ29uc3RhbnRzKCkgY29uc3Q7Ci0gICAgICAgIEZ1bmN0
aW9uUGFyYW1ldGVycyogZnVuY3Rpb25QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9mdW5j
dGlvblBhcmFtZXRlcnM7IH0KLSAgICAgICAgU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VFbGVtZW50czsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUGFyc2VyJiBtX3BhcnNlcjsKLSAgICAgICAgQVNUQnVpbGRlciogbV9idWlsZGVyOwot
ICAgICAgICBib29sIG1faXNJblVzZSB7IGZhbHNlIH07Ci0gICAgICAgIHVuc2lnbmVkIG1fc3Rh
cnRPZmZzZXQ7Ci0KLSAgICAgICAgRWFnZXJJSUZFUGFyc2VTdGF0ZSogbV9zYXZlZElJRkVQYXJz
ZVN0YXRlOwotCi0gICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogbV9mdW5jdGlvblBhcmFtZXRl
cnMgeyBudWxscHRyIH07Ci0gICAgICAgIFNvdXJjZUVsZW1lbnRzKiBtX3NvdXJjZUVsZW1lbnRz
IHsgbnVsbHB0ciB9OwotICAgIH07Ci0KLSAgICBmcmllbmQgY2xhc3MgRWFnZXJJSUZFUGFyc2VT
dGF0ZTsKLSAgICBmcmllbmQgY2xhc3MgRWFnZXJJSUZFUGFyc2VTY29wZTxMZXhlclR5cGU+Owot
CiAgICAgQUxXQVlTX0lOTElORSBEZXN0cnVjdHVyaW5nS2luZCBkZXN0cnVjdHVyaW5nS2luZEZy
b21EZWNsYXJhdGlvblR5cGUoRGVjbGFyYXRpb25UeXBlIHR5cGUpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKQEAgLTE4OTUsOCArMTgyMSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9uIGNyZWF0
ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqLCBi
b29sIGlzRXZhbCwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24m
KTsKIAogICAgIGVudW0gY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSB7IEV4cHJlc3Npb24s
IERlY2xhcmF0aW9uLCBNZXRob2QgfTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rp
b25OYW1lUmVxdWlyZW1lbnRzLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1
Y3RvcktpbmQsIFN1cGVyQmluZGluZywgdW5zaWduZWQgZnVuY3Rpb25TdGFydCwgUGFyc2VyRnVu
Y3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYsIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIHN0ZDo6b3B0
aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gc3Rk
OjpudWxsb3B0LCBib29sIGlzTGlrZWx5SUlGRSA9IGZhbHNlKTsKLSAgICBbW25vZGlzY2FyZF1d
IENvZGVGZWF0dXJlcyBjb2xsZWN0Q29kZUZlYXR1cmVzKENvZGVGZWF0dXJlcywgU2NvcGUqKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNl
RnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzLCBib29s
IG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywg
dW5zaWduZWQgZnVuY3Rpb25TdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYs
IEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIHN0ZDo6b3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0
cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gc3RkOjpudWxsb3B0KTsKICAgICAKICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgYm9vbCBpc0Fycm93RnVu
Y3Rpb25QYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7CiAgICAgCkBAIC0yMTQ4LDcgKzIwNzMsNyBA
QCBwcml2YXRlOgogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IFN0cmluZygpOwogICAgIH0KIAot
ICAgIC8vIEhvdHRlciBmaWVsZHMgZmlyc3QKKyAgICAvLyBDYWNoZSBsaW5lIDAgKGhvdCkKICAg
ICBWTSYgbV92bTsKICAgICBTY29wZSogbV9jdXJyZW50U2NvcGUgeyBudWxscHRyIH07CiAgICAg
SlNUb2tlbkxvY2F0aW9uIG1fbGFzdFRva2VuTG9jYXRpb247CkBAIC0yMTYzLDExICsyMDg4LDEz
IEBAIHByaXZhdGU6CiAgICAgRnVuY3Rpb25Nb2RlIG1fZnVuY3Rpb25Nb2RlOwogICAgIFN1cGVy
QmluZGluZyBtX3N1cGVyQmluZGluZzsKIAorICAgIC8vIENhY2hlIGxpbmUgMSAoaG90KQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CiAgICAgSlNUb2tlbiBtX3Rva2Vu
OworCisgICAgLy8gQ2FjaGUgbGluZSAyIChtX3BhcnNlclN0YXRlIGlzIGhvdCkKICAgICBQYXJz
ZXJTdGF0ZSBtX3BhcnNlclN0YXRlOwogCi0gICAgLy8gQ29sZGVyIGZpZWxkcwogICAgIENvbnN0
cnVjdG9yS2luZCBtX2NvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb25FeHByZXNzaW9u
cyB7IENvbnN0cnVjdG9yS2luZDo6Tm9uZSB9OwogICAgIEltcGxlbWVudGF0aW9uVmlzaWJpbGl0
eSBtX2ltcGxlbWVudGF0aW9uVmlzaWJpbGl0eTsKICAgICBib29sIG1fcGFyc2luZ0J1aWx0aW47
CkBAIC0yMTc1LDE1ICsyMTAyLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5zaWRlT3Jk
aW5hcnlGdW5jdGlvbjsKICAgICBib29sIG1faW5zaWRlU3dpdGNoQ2FzZUJvZHkgeyBmYWxzZSB9
OwogCi0gICAgUmVmPFBhcnNlckFyZW5hPiBtX3BhcnNlckFyZW5hOworICAgIFBhcnNlckFyZW5h
IG1fcGFyc2VyQXJlbmE7CiAgICAgQ2FsbE9yQXBwbHlEZXB0aFNjb3BlKiBtX2NhbGxPckFwcGx5
RGVwdGhTY29wZSB7IG51bGxwdHIgfTsKICAgICBTY29wZVN0YWNrIG1fc2NvcGVTdGFjazsKICAg
ICBib29sIG1faGFzU3RhY2tPdmVyZmxvdzsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAg
ICAgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4gbV9tb2R1bGVTY29wZURhdGE7CiAgICAgRGVidWdn
ZXJQYXJzZURhdGEqIG1fZGVidWdnZXJQYXJzZURhdGE7Ci0gICAgRWFnZXJJSUZFUGFyc2VTdGF0
ZSogbV9paWZlUGFyc2VTdGF0ZSB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8RWFnZXJJSUZFUmVn
aXN0cnk+IG1fZWFnZXJJSUZFUmVnaXN0cnk7CiAgICAgYm9vbCBtX3NlZW5UYWdnZWRUZW1wbGF0
ZUluTm9uUmVwYXJzaW5nRnVuY3Rpb25Nb2RlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2VlblBy
aXZhdGVOYW1lVXNlSW5Ob25SZXBhcnNpbmdGdW5jdGlvbk1vZGUgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zZWVuQXJndW1lbnRzRG90TGVuZ3RoIHsgZmFsc2UgfTsKQEAgLTIyMDAsMTUgKzIxMjUs
NiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
KFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSQogICAgIGlmIChQYXJzZWROb2RlOjpzY29wZUlz
RnVuY3Rpb24pCiAgICAgICAgIG1fbGV4ZXItPnNldElzUmVwYXJzaW5nRnVuY3Rpb24oKTsKIAot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8UGFyc2VkTm9kZSwgRnVuY3Rpb25Ob2Rl
PikgewotICAgICAgICBpZiAobV9lYWdlcklJRkVSZWdpc3RyeSkgewotICAgICAgICAgICAgaWYg
KGF1dG8gY2FjaGVkID0gbV9lYWdlcklJRkVSZWdpc3RyeS0+dGFrZShtX3NvdXJjZS0+c3RhcnRP
ZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2xleGVyLT5jbGVhcigpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4oY2FjaGVkLnJlbGVhc2Uo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBlcnJMaW5lID0gLTE7
CiAgICAgZXJyTXNnID0gU3RyaW5nKCk7CiAKQEAgLTIyMzYsNyArMjE1Miw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3Im
IGVycm9yLCBjb25zdCBJCiAgICAgICAgIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IG1f
bGV4ZXItPmN1cnJlbnRMaW5lU3RhcnRPZmZzZXQoKTsKICAgICAgICAgZW5kTG9jYXRpb24uc3Rh
cnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIGVu
ZENvbHVtbiA9IGVuZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0
T2Zmc2V0OwotICAgICAgICByZXN1bHQgPSBtYWtlVW5pcXVlPFBhcnNlZE5vZGU+KG1fcGFyc2Vy
QXJlbmEuY29weVJlZigpLAorICAgICAgICByZXN1bHQgPSBtYWtlVW5pcXVlPFBhcnNlZE5vZGU+
KG1fcGFyc2VyQXJlbmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kTG9jYXRp
b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbHVtbiwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAppbmRleCAwNWM0NWZmOTU0
ZDUuLjE1YjExYjhlY2Q1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJBcmVuYS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
QXJlbmEuaApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hdGhD
b21tb24uaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNs
dWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvU2VnbWVudGVkVmVjdG9yLmg+CiAKIFdURl9BTExPV19VTlNBRkVfQlVGRkVSX1VTQUdFX0JF
R0lOCkBAIC0xNDksMTEgKzE0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFBhcnNlckFyZW5hKTsKIAotICAgIGNsYXNz
IFBhcnNlckFyZW5hIDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2VyQXJlbmE+IHsKKyAgICBjbGFz
cyBQYXJzZXJBcmVuYSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcnNlckFyZW5h
KTsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8UGFyc2VyQXJlbmE+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyc2VyQXJlbmEpOyB9CisgICAgICAgIFBhcnNlckFy
ZW5hKCk7CiAgICAgICAgIH5QYXJzZXJBcmVuYSgpOwogCisgICAgICAgIHZvaWQgc3dhcChQYXJz
ZXJBcmVuYSYgb3RoZXJBcmVuYSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1f
ZnJlZWFibGVNZW1vcnksIG90aGVyQXJlbmEubV9mcmVlYWJsZU1lbW9yeSk7CisgICAgICAgICAg
ICBzdGQ6OnN3YXAobV9mcmVlYWJsZVBvb2xFbmQsIG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xF
bmQpOworICAgICAgICAgICAgbV9pZGVudGlmaWVyQXJlbmEuc3dhcChvdGhlckFyZW5hLm1faWRl
bnRpZmllckFyZW5hKTsKKyAgICAgICAgICAgIG1fZnJlZWFibGVQb29scy5zd2FwKG90aGVyQXJl
bmEubV9mcmVlYWJsZVBvb2xzKTsKKyAgICAgICAgICAgIG1fZGVsZXRhYmxlT2JqZWN0cy5zd2Fw
KG90aGVyQXJlbmEubV9kZWxldGFibGVPYmplY3RzKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZv
aWQqIGFsbG9jYXRlRnJlZWFibGUoc2l6ZV90IHNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVChzaXplKTsKQEAgLTE4OCw4ICsxOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGFyc2VyQXJlbmEoKTsKLQogICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGZyZWVhYmxlUG9vbFNpemUgPSA4MDAwOwogCiAgICAgICAgIHN0
YXRpYyBzaXplX3QgYWxpZ25TaXplKHNpemVfdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggMTk3ZWM2Y2EwNjNhLi42ODgwMDBiN2U4ZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtNTU2
LDcgKzU1Niw2IEBAIGJvb2wgaGFzQ2FwYWNpdHlUb1VzZUxhcmdlR2lnYWNhZ2UoKTsKICAgICB2
KEJvb2wsIHVzZVN1cGVyU2FtcGxlciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwK
ICAgICB2KEJvb2wsIHVzZVNvdXJjZVByb3ZpZGVyQ2FjaGUsIHRydWUsIE5vcm1hbCwgIklmIGZh
bHNlLCB0aGUgcGFyc2VyIHdpbGwgbm90IHVzZSB0aGUgc291cmNlIHByb3ZpZGVyIGNhY2hlLiBJ
dCdzIGdvb2QgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcgd29ya3Mgd2hlbiB0aGlzIGlzIGZhbHNlLiBC
ZWNhdXNlIHRoZSBjYWNoZSBpcyBzbyBzdWNjZXNzZnVsLCBpdCBjYW4gbWFzayBidWdzLiJfcykg
XAotICAgIHYoQm9vbCwgdXNlRWFnZXJJSUZFUGFyc2luZywgdHJ1ZSwgTm9ybWFsLCAiRWFnZXJs
eSBidWlsZCBBU1QgZm9yIGxpa2VseSBJSUZFcyBkdXJpbmcgdGhlIGluaXRpYWwgcGFyc2UuIl9z
KSBcCiAgICAgdihCb29sLCB1c2VDb2RlQ2FjaGUsIHRydWUsIE5vcm1hbCwgIklmIGZhbHNlLCB0
aGUgdW5saW5rZWQgYnl0ZSBjb2RlIGNhY2hlIHdpbGwgbm90IGJlIHVzZWQuIl9zKSBcCiAgICAg
XAogICAgIHYoQm9vbCwgdXNlV2FzbSwgY2FuVXNlV2FzbSgpLCBOb3JtYWwsICJFeHBvc2UgdGhl
IFdhc20gZ2xvYmFsIG9iamVjdC4iX3MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAppbmRleCAzODA5NjYzZWJkOTcuLmRiNTg1ZWUxMmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkRlZmVycmVkV29ya1Rp
bWVyLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRG91YmxlUHJlZGlj
dGlvbkZ1enplckFnZW50LmgiCi0jaW5jbHVkZSAiRWFnZXJJSUZFUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJFdmFsRXhlY3V0YWJsZUlubGluZXMuaCIKQEAgLTEwMDksMTggKzEwMDgsOSBA
QCBTb3VyY2VQcm92aWRlckNhY2hlKiBWTTo6YWRkU291cmNlUHJvdmlkZXJDYWNoZShTb3VyY2VQ
cm92aWRlciogc291cmNlUHJvdmlkZXIpCiAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuZ2V0KCk7CiB9CiAKLUVhZ2VySUlGRVJlZ2lzdHJ5KiBWTTo6YWRkRWFnZXJJSUZFUmVn
aXN0cnkoU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKQotewotICAgIGF1dG8gYWRkUmVz
dWx0ID0gZWFnZXJJSUZFUmVnaXN0cnlNYXAuYWRkKHNvdXJjZVByb3ZpZGVyLCBudWxscHRyKTsK
LSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBhZG9wdFJlZihuZXcgRWFnZXJJSUZFUmVnaXN0cnkpOwotICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCiB2b2lkIFZNOjpjbGVhclNvdXJj
ZVByb3ZpZGVyQ2FjaGVzKCkKIHsKICAgICBzb3VyY2VQcm92aWRlckNhY2hlTWFwLmNsZWFyKCk7
Ci0gICAgZWFnZXJJSUZFUmVnaXN0cnlNYXAuY2xlYXIoKTsKIH0KIAogYm9vbCBWTTo6aGFzRXhj
ZXB0aW9uc0FmdGVySGFuZGxpbmdUcmFwcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCA1NDAyYTFlYjZjYWYuLmJmNTEzODJlYmU4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCkBAIC0xMTIsNyArMTEyLDYgQEAgY2xhc3MgQ29tcGFjdFREWkVudmlyb25tZW50TWFw
OwogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBDb250cm9sRmxvd1Byb2ZpbGVyOwog
Y2xhc3MgQ3Jvc3NUYXNrVG9rZW47Ci1jbGFzcyBFYWdlcklJRkVSZWdpc3RyeTsKIGNsYXNzIEV4
Y2VwdGlvbjsKIGNsYXNzIEV4Y2VwdGlvblNjb3BlOwogY2xhc3MgRnV6emVyQWdlbnQ7CkBAIC03
OTksMTIgKzc5OCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY29tcHV0ZUNhblVzZUpJ
VCgpOwogCiAgICAgU291cmNlUHJvdmlkZXJDYWNoZSogYWRkU291cmNlUHJvdmlkZXJDYWNoZShT
b3VyY2VQcm92aWRlciopOwotICAgIEVhZ2VySUlGRVJlZ2lzdHJ5KiBhZGRFYWdlcklJRkVSZWdp
c3RyeShTb3VyY2VQcm92aWRlciopOwogICAgIHZvaWQgY2xlYXJTb3VyY2VQcm92aWRlckNhY2hl
cygpOwogCiAgICAgdHlwZWRlZiBVbmNoZWNrZWRLZXlIYXNoTWFwPFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4sIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPj4gU291cmNlUHJvdmlkZXJDYWNoZU1h
cDsKICAgICBTb3VyY2VQcm92aWRlckNhY2hlTWFwIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7Ci0g
ICAgVW5jaGVja2VkS2V5SGFzaE1hcDxSZWZQdHI8U291cmNlUHJvdmlkZXI+LCBSZWZQdHI8RWFn
ZXJJSUZFUmVnaXN0cnk+PiBlYWdlcklJRkVSZWdpc3RyeU1hcDsKICNpZiBFTkFCTEUoSklUKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRUaHVua3M+IGppdFN0dWJzOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvcik7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9lYWdlci1paWZlLWNvbHVtbi10cmFja2luZy5qcyBi
L0pTVGVzdHMvc3RyZXNzL2VhZ2VyLWlpZmUtY29sdW1uLXRyYWNraW5nLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxMTkzMjIyZTlhMTguLjAwMDAwMDAwMDAwMAotLS0gYS9KU1Rl
c3RzL3N0cmVzcy9lYWdlci1paWZlLWNvbHVtbi10cmFja2luZy5qcworKysgL2Rldi9udWxsCkBA
IC0xLDM3ICswLDAgQEAKLS8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VFYWdlcklJRkVQYXJzaW5n
PXRydWUiKQotCi0vLyBDb2x1bW4gbnVtYmVycyBpbnNpZGUgZWFnZXJseSBwYXJzZWQgSUlGRXMg
bXVzdCBiZSB0cmFja2VkIGNvcnJlY3RseS4gVGhhdCBpcyBub3QgYSBnaXZlbgotLy8gYmVjYXVz
ZSBvbiB0aGUgZWFnZXIgcGFyc2luZyBwYXRoIHRoZSBzdGFydCBvZmZzZXQgaXMgYWJzb2x1dGUg
YW5kIG5vdCByZWxhdGl2ZSB0byB0aGUKLS8vIGVuY2xvc2luZyBmdW5jdGlvbiBzdGFydCBhcyBp
dCBpcyBkdXJpbmcgdGhlIG5vcm1hbCBsYXp5IHBhcnNlLgotCi1mdW5jdGlvbiBhc3NlcnQoY29u
ZGl0aW9uLCBtZXNzYWdlKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pCi0gICAgICAgIHRocm93IG5l
dyBFcnJvcihtZXNzYWdlKTsKLX0KLQotZnVuY3Rpb24gZ2V0Rmlyc3RGcmFtZUNvbHVtbihlKSB7
Ci0gICAgdmFyIGxpbmUgPSBlLnN0YWNrLnNwbGl0KCdcbicpWzBdOwotICAgIHZhciBtYXRjaCA9
IGxpbmUubWF0Y2goLzooXGQrKSQvKTsKLSAgICBhc3NlcnQobWF0Y2gsICJDb3VsZCBub3QgcGFy
c2UgY29sdW1uIGZyb20gc3RhY2sgZnJhbWU6ICIgKyBsaW5lKTsKLSAgICByZXR1cm4gcGFyc2VJ
bnQobWF0Y2hbMV0pOwotfQotCi0vLyBDYXNlIDE6IHNhbWUtbGluZSBuZXN0ZWQgZnVuY3Rpb24g
aW4gSUlGRS4KLXRyeSB7IChmdW5jdGlvbigpIHsgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJy
b3IoKTsgfSkoKTsgfSkoKTsgfSBjYXRjaChlKSB7IGFzc2VydChnZXRGaXJzdEZyYW1lQ29sdW1u
KGUpID09PSA1MCwgIkNhc2UgMTogZXhwZWN0ZWQgY29sdW1uIDUwLCBnb3QgIiArIGdldEZpcnN0
RnJhbWVDb2x1bW4oZSkpOyB9Ci0KLS8vIENhc2UgMjogbXVsdGktbGluZSDigJQgbmVzdGVkIGZ1
bmN0aW9uIG9uIGEgZGlmZmVyZW50IGxpbmUgdGhhbiBJSUZFJ3MgJygnLgotdHJ5IHsKLSAgICAo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIChmdW5jdGlvbigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH0p
KCk7Ci0gICAgfSkoKTsKLX0gY2F0Y2goZSkgeyBhc3NlcnQoZ2V0Rmlyc3RGcmFtZUNvbHVtbihl
KSA9PT0gMzgsICJDYXNlIDI6IGV4cGVjdGVkIGNvbHVtbiAzOCwgZ290ICIgKyBnZXRGaXJzdEZy
YW1lQ29sdW1uKGUpKTsgfQotCi0vLyBDYXNlIDM6IGRlZXBlciBuZXN0aW5nIOKAlCBJSUZFIGlu
c2lkZSBJSUZFLCBzYW1lIGxpbmUuCi10cnkgeyAoZnVuY3Rpb24oKSB7IChmdW5jdGlvbigpIHsg
KGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSkoKTsgfSkoKTsgfSkoKTsgfSBjYXRj
aChlKSB7IGFzc2VydChnZXRGaXJzdEZyYW1lQ29sdW1uKGUpID09PSA2NCwgIkNhc2UgMzogZXhw
ZWN0ZWQgY29sdW1uIDY0LCBnb3QgIiArIGdldEZpcnN0RnJhbWVDb2x1bW4oZSkpOyB9Ci0KLS8v
IENhc2UgNDogbXVsdGktbGluZSwgaW5uZXIgZnVuY3Rpb24gb2Zmc2V0IHdpdGhpbiB0aGUgbGlu
ZS4KLXRyeSB7Ci0gICAgKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgeCA9IDE7IChmdW5jdGlv
bigpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH0pKCk7Ci0gICAgfSkoKTsKLX0gY2F0Y2goZSkgeyBh
c3NlcnQoZ2V0Rmlyc3RGcmFtZUNvbHVtbihlKSA9PT0gNDksICJDYXNlIDQ6IGV4cGVjdGVkIGNv
bHVtbiA0OSwgZ290ICIgKyBnZXRGaXJzdEZyYW1lQ29sdW1uKGUpKTsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>