<?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>230147</bug_id>
          
          <creation_ts>2021-09-10 05:28:14 -0700</creation_ts>
          <short_desc>Factor painting functions from LegacyInlineTextBox into a class</short_desc>
          <delta_ts>2021-09-13 01:36:28 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dpino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1792295</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 05:28:14 -0700</bug_when>
    <thetext>Add TextBoxPainter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792296</commentid>
    <comment_count>1</comment_count>
      <attachid>437852</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 05:34:08 -0700</bug_when>
    <thetext>Created attachment 437852
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792301</commentid>
    <comment_count>2</comment_count>
      <attachid>437855</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 05:56:22 -0700</bug_when>
    <thetext>Created attachment 437855
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792302</commentid>
    <comment_count>3</comment_count>
      <attachid>437856</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 05:59:16 -0700</bug_when>
    <thetext>Created attachment 437856
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792305</commentid>
    <comment_count>4</comment_count>
      <attachid>437858</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 06:14:39 -0700</bug_when>
    <thetext>Created attachment 437858
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792310</commentid>
    <comment_count>5</comment_count>
      <attachid>437861</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 06:29:03 -0700</bug_when>
    <thetext>Created attachment 437861
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792314</commentid>
    <comment_count>6</comment_count>
      <attachid>437863</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 06:39:54 -0700</bug_when>
    <thetext>Created attachment 437863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792336</commentid>
    <comment_count>7</comment_count>
      <attachid>437863</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-09-10 08:04:06 -0700</bug_when>
    <thetext>Comment on attachment 437863
Patch

omg it&apos;s happening!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792342</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-10 08:20:47 -0700</bug_when>
    <thetext>Committed r282270 (241548@main): &lt;https://commits.webkit.org/241548@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 437863.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792365</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-10 09:13:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/82975105&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792883</commentid>
    <comment_count>10</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2021-09-13 01:36:28 -0700</bug_when>
    <thetext>This patch broke Ubuntu LTS/Debian compilation.

https://build.webkit.org/#/builders/68/builds/6472

Fixed in https://trac.webkit.org/changeset/282321/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437852</attachid>
            <date>2021-09-10 05:34:08 -0700</date>
            <delta_ts>2021-09-10 05:56:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter.patch</filename>
            <type>text/plain</type>
            <size>38242</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWQxMmE2MmEyNzguLjgxY2EzNDRiNzZjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5l
VGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRlciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRo
ZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdhY3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBtZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQg
ZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRpbmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAg
IGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2Vk
VGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5
bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRlZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjguLjBlYmM3MDllODE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyODIsNiArMjI4Miw3IEBAIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCiBy
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3BwCityZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YzBlM2M3
ZjBkNS4uYzM1ZTA5NGEzMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDYgKzUyMjQsNyBAQAogCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRl
ckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0RE
MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFu
ZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKKwkJRTQ0MERGNTYyNkVCNTNFMDAwNEFG
MDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIu
aCAqLzsgfTsKIAkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi87IH07CiAJCUU0NDYxM0Ey
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYyOTAs
NiArMTYyOTEsOCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwREY1NDI2
RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MEZENTEyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxl
ZE1hcmtlZFRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkTWFy
a2VkVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwRkQ1NDI1QTRBRkVF
MDBGN0M4NDkgLyogU3R5bGVkTWFya2VkVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHls
ZWRNYXJrZWRUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NTEwNzcy
MDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZWRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjk4NjYsNiArMjk4NjksOCBAQAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBU
ZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJMEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRC
b3hQYWludGVyLmNwcCAqLywKKwkJCQlFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJv
eFBhaW50ZXIuaCAqLywKIAkJCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oICovLAogCQkJCTU4MkRFMzIyMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAogCQkJCTU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAv
KiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKQEAgLTMyNTUyLDYgKzMyNTU3LDcgQEAKIAkJ
CQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MERGNTYy
NkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENzcwNUM5MjU1MjhEMzQwMDFEMEM5NCAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMx
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTk2
ZjYzNzlkOTA2Li44NzUxYjY3MWJkNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTIxMyw3ICsyMTQsNiBAQCBMYXlvdXRSZWN0IHNuYXBw
ZWRTZWxlY3Rpb25SZWN0KGNvbnN0IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGZsb2F0IGxv
Z2ljYWxSaQogICAgIHJldHVybiBMYXlvdXRSZWN0IHsgdG9wUG9pbnQsIExheW91dFNpemUgeyB3
aWR0aCwgaGVpZ2h0IH0gfTsKIH0KIAotLy8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHBh
aW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4KIExheW91dFJlY3QgTGVnYWN5SW5saW5lVGV4dEJv
eDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3Mp
IGNvbnN0CiB7CiAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFi
bGVSYW5nZSgpLmNsYW1wKHN0YXJ0UG9zLCBlbmRQb3MpOwpAQCAtNDc1LDExICs0NzUsNyBAQCB2
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byogY29tYmluZWRUZXh0ID0gdGhpcy0+Y29tYmluZWRUZXh0KCk7Ci0KLSAgICBib29sIHNob3Vs
ZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAhY29tYmluZWRUZXh0OwotICAgIGlmIChzaG91
bGRSb3RhdGUpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENs
b2Nrd2lzZSkpOworICAgIFRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBwYWlu
dEluZm8sIGJveFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGhh
dmUgY29tcG9zaXRpb24gdW5kZXJsaW5lcyB0byBkcmF3LgogICAgIGJvb2wgY29udGFpbnNDb21w
b3NpdGlvbiA9IHJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiByZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpOwpAQCAtNDg5
LDcgKzQ4NSw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgLy8gYW5kIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpT
ZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmICFp
c1ByaW50aW5nKSB7CiAgICAgICAgIGlmIChjb250YWluc0NvbXBvc2l0aW9uICYmICF1c2VDdXN0
b21VbmRlcmxpbmVzKQotICAgICAgICAgICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQocGFp
bnRJbmZvLCBib3hPcmlnaW4pOworICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoKTsKIAogICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRo
aXMtPnNlbGVjdGFibGVSYW5nZSgpOwogCkBAIC01MDksNyArNTA1LDggQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2YKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtl
ZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAg
ICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpj
b2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dyb3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7CiAK
LSAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhh
c2U6OkJhY2tncm91bmQsIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMp
CisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVz
IG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5
IG1pZ2h0CkBAIC01NjUsNyArNTYyLDggQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAv
LyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRo
ZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1h
cmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVzY2VBZGphY2VudFdpdGhFcXVhbEZv
cmVncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgcGFpbnRNYXJrZWRUZXh0cyhwYWlu
dEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQsIGJveFJlY3QsIGNvYWxl
c2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2Fs
ZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRGb3Jl
Z3JvdW5kKG1hcmtlZFRleHQpOwogCiAgICAgLy8gUGFpbnQgZGVjb3JhdGlvbnMKICAgICBhdXRv
IHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwpA
QCAtNjA0LDE1ICs2MDIsMTMgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgLy8g
Q29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUg
bnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVk
TWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFs
RGVjb3JhdGlvbnMoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgICAgIHBhaW50TWFya2VkVGV4
dHMocGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uLCBib3hSZWN0
LCBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cywgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlw
T3V0UmVjdCk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxl
ZE1hcmtlZFRleHRzKQorICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnREZWNvcmF0aW9u
KG1hcmtlZFRleHQsIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QpOwogICAgIH0K
IAogICAgIC8vIDMuIFBhaW50IGZhbmN5IGRlY29yYXRpb25zLCBpbmNsdWRpbmcgY29tcG9zaXRp
b24gdW5kZXJsaW5lcyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdW5kZXJsaW5lcyBmb3Igc3BlbGxp
bmcgZXJyb3JzLCBncmFtbWFyIGVycm9ycywgZXQgY2V0ZXJhLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiB1c2VDdXN0b21VbmRlcmxpbmVzKQot
ICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7
Ci0gICAgCi0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAgICAgICBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7ICAgIAogfQogCiBUZXh0Qm94
U2VsZWN0YWJsZVJhbmdlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNv
bnN0CkBAIC03NDMsMTg1ICs3MzksNiBAQCBGbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6
OnRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpCiAgICAgcmV0
dXJuIHRleHRPcmlnaW47CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJr
ZWRUZXh0cyhQYWludEluZm8mIHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSBwaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCkK
LXsKLSAgICBzd2l0Y2ggKHBoYXNlKSB7Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpCYWNrZ3JvdW5kOgotICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0
cykKLSAgICAgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFpbnRJbmZvLCBib3hS
ZWN0LmxvY2F0aW9uKCksIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yLCBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQ6Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJr
ZWRUZXh0Rm9yZWdyb3VuZChwYWludEluZm8sIGJveFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uOgot
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0cykKLSAgICAgICAgICAg
IHBhaW50TWFya2VkVGV4dERlY29yYXRpb24ocGFpbnRJbmZvLCBib3hSZWN0LCBkZWNvcmF0aW9u
Q2xpcE91dFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3Im
IGNvbG9yLCB1bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRP
ZmZzZXQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKGNsYW1w
ZWRTdGFydE9mZnNldCA+PSBjbGFtcGVkRW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsKLSAgICB1cGRh
dGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xvciB9KTsgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKLQotICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBp
cyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNh
dGlvbgotICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9v
dEJveCA9IHJvb3QoKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9IHJvb3RCb3gu
c2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSByb290Qm94
LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKLQotICAgIC8vIFVzZSBz
YW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdo
ZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KLSAgICAvLyB0aGUgc2Ft
ZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIExheW91dFVuaXQg
ZGVsdGFZIHsgcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCB9OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKLQotICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQoYm94T3JpZ2luLngoKSksIExheW91dFVu
aXQoYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkpLCBz
ZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydE9mZnNldCwgY2xhbXBlZEVu
ZE9mZnNldCk7Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+Lgot
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRp
bmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOwotICAgIGlmIChzdHlsZSA9PSBNYXJrZWRUZXh0
QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFu
ZCgtMSwgLTEpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKLSAgICAg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCB7IGJhY2tncm91bmRS
ZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBjb2xvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LmZpbGxSZWN0KGJhY2tncm91bmRSZWN0LCBjb2xv
cik7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQotewotICAgIGlmIChtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0KLSAgICBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQgPSAwOwotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJv
dmUgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSk7Ci0gICAgY29uc3Qg
QXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsKLSAgICBpZiAoIWVtcGhh
c2lzTWFyay5pc0VtcHR5KCkpCi0gICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9ICptYXJrRXhp
c3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhh
c2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50
KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwotCi0gICAgVGV4dFBh
aW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07Ci0gICAgdGV4dFBhaW50ZXIuc2V0Rm9udChm
b250KTsKLSAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHls
ZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7Ci0g
ICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewotICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICB0ZXh0
UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIo
KSk7Ci0gICAgfQotICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmss
IGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOwotICAgIGlmIChhdXRvKiBkZWJ1
Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coZGVidWdTaGFkb3cpOwotCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigp
OwotICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCgqdGhpcywgcGFp
bnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07Ci0gICAgaWYgKG1hcmtlZFRl
eHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgewotICAgICAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFs
cGhhKTsKLSAgICB9Ci0gICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUg
YW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZSh0ZXh0UnVuLCBib3hSZWN0LCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoYm94UmVj
dCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLX0KLQot
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0g
ICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0g
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0
eWxlcyk7Ci0KLSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmluZWRUZXh0KCk7Ci0gICAg
aWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDbG9ja3dpc2UpKTsKLQotICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24K
LSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7Ci0gICAgaWYgKHN0YXJ0
T2Zmc2V0ID49IGVuZE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90ZSB0aGF0
IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVk
IGluIHRoZSB0cnVuY2F0aW9uCi0gICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCi0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gYm94UmVj
dDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkp
IHsKLSAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBib3hSZWN0LngoKSwgYm94
UmVjdC55KCksIGJveFJlY3Qud2lkdGgoKSwgYm94UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBs
aW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJl
Y3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25S
ZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5s
dHIoKSk7Ci0gICAgfQotCi0gICAgLy8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9u
cyA9IGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Ci0gICAgdGV4dERlY29y
YXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0
Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRl
eHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNv
cmF0aW9ucywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4
dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcih0aGlzKSk7Ci0g
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgo
KSk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgp
KTsKLSAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAgICAgIGRlY29y
YXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKGxpbmVTdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkK
LSAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5l
U3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBpc0RyYWdnZWRDb250ZW50ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRl
eHQ6OkRyYWdnZWRDb250ZW50OwotICAgICAgICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xp
cE91dFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAg
ICAgICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7Ci0gICAgICAgICAgICBpZiAoIWNsaXBP
dXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91
dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERl
Y29yYXRpb24odGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zm
c2V0KSwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBl
ZFNlbGVjdGlvblJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGlzQ29tYmluZWRU
ZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVy
Y2xvY2t3aXNlKSk7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbikKLXsKLSAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVS
YW5nZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRp
b25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIHNlbGVjdGFibGVSYW5nZS5jbGFtcChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3N0YXJ0KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBlbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0g
PSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQu
ZW5kT2Zmc2V0KTsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8s
IGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwotCi0gICAgICAgIGlmIChoaWdobGln
aHQuZW5kT2Zmc2V0ID4gZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZv
aWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikgY29uc3QKIHsKICAg
ICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKQEAgLTEwOTQsNyArOTExLDcg
QEAgaW5saW5lIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpj
b21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBsaW5lU3R5bGUoKS5oYXNUZXh0Q29tYmlu
ZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5k
ZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5lZCgpID8gJmRvd25jYXN0PFJlbmRl
ckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7CiB9CiAKLVNoYWRvd0RhdGEqIExl
Z2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdygpCitjb25zdCBTaGFkb3dEYXRhKiBM
ZWdhY3lJbmxpbmVUZXh0Qm94OjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAogewogICAgIGlmICgh
cmVuZGVyZXIoKS5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRWaXN1YWxDb3ZlcmFnZUVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCA4OTJmMjAyMDgyOTUuLjEzMGIyMTk2NWRi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CkBAIC0xNjMsMjYgKzE2MywyMCBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURv
Y3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1hcmtlZFRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveFBhaW50ZXI7CiAKLSAgICB2b2lkIHBhaW50
TWFya2VkVGV4dHMoUGFpbnRJbmZvJiwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4mLCBjb25zdCBG
bG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCA9IHsgfSk7CisgICAgRmxvYXRQb2ludCB0
ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lk
IHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IE1hcmtlZFRleHQmKTsKICAgICB2b2lkIHBhaW50UGxh
dGZvcm1Eb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luKTsKIAotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKTsKICAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikg
Y29uc3Q7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKSBj
b25zdDsKIAotICAgIGVudW0gY2xhc3MgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZSA6IGJvb2wg
eyBEZWZhdWx0LCBSb3VuZGVkIH07Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5k
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3ImLCB1
bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRPZmZzZXQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgPSBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpEZWZh
dWx0KTsKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dEZvcmVncm91bmQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7Ci0gICAgdm9p
ZCBwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCwgY29uc3QgU3R5bGVkTWFya2Vk
VGV4dCYpOwotCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNv
bnN0OwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgU2hh
ZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCk7CisgICAgY29uc3QgU2hhZG93RGF0YSogZGVidWdU
ZXh0U2hhZG93KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVk
VGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVm
ZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29s
IGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5oCmluZGV4IDFhM2EzNDJhZDgw
Mi4uZWQxYTNiMDI3NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFy
a2VkVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKQEAg
LTU0LDYgKzU0LDggQEAgc3RydWN0IE1hcmtlZFRleHQgewogI2VuZGlmCiAgICAgICAgIFNlbGVj
dGlvbiwKICAgICAgICAgRHJhZ2dlZENvbnRlbnQsCisgICAgICAgIENvbXBvc2l0aW9uLAorICAg
ICAgICBDdXN0b21Db21wb3NpdGlvbgogICAgIH07CiAKICAgICBlbnVtIGNsYXNzIFBhaW50UGhh
c2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwCmlu
ZGV4IDM1NTY0Y2U0M2E1OC4uMTU0MjljMjZhMGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwCkBAIC00Niw2ICs0Niw4IEBAIHN0YXRpYyBTdHls
ZWRNYXJrZWRUZXh0IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYg
bWFya2VkVGV4dCwKICAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKICAgICBjYXNl
IE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJyb3I6CiAgICAgY2FzZSBNYXJrZWRUZXh0OjpVbm1hcmtl
ZDoKKyAgICBjYXNlIE1hcmtlZFRleHQ6OkNvbXBvc2l0aW9uOgorICAgIGNhc2UgTWFya2VkVGV4
dDo6Q3VzdG9tQ29tcG9zaXRpb246CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWFya2VkVGV4
dDo6SGlnaGxpZ2h0OgogICAgICAgICBpZiAoYXV0byByZW5kZXJTdHlsZSA9IHJlbmRlcmVyLnBh
cmVudCgpLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OkhpZ2hsaWdodCwgbWFy
a2VkVGV4dC5oaWdobGlnaHROYW1lIH0sICZyZW5kZXJlci5zdHlsZSgpKSkgewpAQCAtMTExLDcg
KzExMyw2IEBAIHN0YXRpYyBTdHlsZWRNYXJrZWRUZXh0OjpTdHlsZSBjb21wdXRlU3R5bGVGb3JV
bm1hcmtlZE1hcmtlZFRleHQoY29uc3QgUmVuZGVyVGV4CiAgICAgc3R5bGUudGV4dERlY29yYXRp
b25TdHlsZXMgPSBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnN0eWxlc0ZvclJlbmRlcmVyKHJlbmRl
cmVyLCBsaW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJzdExpbmUpOwog
ICAgIHN0eWxlLnRleHRTdHlsZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVuZGVyZXIuZnJh
bWUoKSwgbGluZVN0eWxlLCBwYWludEluZm8pOwogICAgIHN0eWxlLnRleHRTaGFkb3cgPSBTaGFk
b3dEYXRhOjpjbG9uZShwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxwdHIgOiBsaW5l
U3R5bGUudGV4dFNoYWRvdygpKTsKLSAgICBzdHlsZS5hbHBoYSA9IDE7CiAgICAgcmV0dXJuIHN0
eWxlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFy
a2VkVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuaApp
bmRleCAxYjE5NjUxMGFjZDAuLjI0ZTZjMjdiNjM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5oCkBAIC00Niw3ICs0Niw3IEBAIHN0cnVjdCBTdHlsZWRN
YXJrZWRUZXh0IDogTWFya2VkVGV4dCB7CiAgICAgICAgIFRleHRQYWludFN0eWxlIHRleHRTdHls
ZXM7CiAgICAgICAgIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6U3R5bGVzIHRleHREZWNvcmF0aW9u
U3R5bGVzOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd0RhdGE+IHRleHRTaGFkb3c7Ci0g
ICAgICAgIGZsb2F0IGFscGhhOworICAgICAgICBmbG9hdCBhbHBoYSB7IDEgfTsKICAgICB9Owog
CiAgICAgU3R5bGUgc3R5bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjViZjgwY2Y2
M2I1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94
UGFpbnRlci5jcHAKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRleHRCb3hQYWludGVyLmgiCisKKyNpbmNsdWRlICJDb21wb3Np
dGlvbkhpZ2hsaWdodC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJQ
YWludEluZm8uaCIKKyNpbmNsdWRlICJTdHlsZWRNYXJrZWRUZXh0LmgiCisjaW5jbHVkZSAiVGV4
dFBhaW50U3R5bGUuaCIKKyNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxp
bmVUZXh0Qm94JiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0
JiBib3hSZWN0KQorICAgIDogbV90ZXh0Qm94KHRleHRCb3gpCisgICAgLCBtX3BhaW50SW5mbyhw
YWludEluZm8pCisgICAgLCBtX2JveFJlY3QoYm94UmVjdCkKK3sKKyAgICBib29sIHNob3VsZFJv
dGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRl
eHQoKTsKKyAgICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0
KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ2xvY2t3aXNlKSk7Cit9CisKK1RleHRC
b3hQYWludGVyOjp+VGV4dEJveFBhaW50ZXIoKQoreworICAgIGJvb2wgc2hvdWxkUm90YXRlID0g
IW1fdGV4dEJveC5pc0hvcml6b250YWwoKSAmJiAhbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpOwor
ICAgIGlmIChzaG91bGRSb3RhdGUpCisgICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5jb25j
YXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7Cit9CisKK3ZvaWQg
VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBt
YXJrZWRUZXh0KQoreworICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0ID49IG1hcmtlZFRl
eHQuZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFya2Vk
VGV4dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyIHsgY29udGV4dCB9OworICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250
ZXh0LCBUZXh0UGFpbnRTdHlsZSB7IGNvbG9yIH0pOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxs
IQorCisgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRo
ZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCisgICAgLy8gZHJhdyBpdHMg
b3duIGhpZ2hsaWdodC4KKyAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4
dFJ1bigpOworCisgICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9vdEJveCA9IG1fdGV4
dEJveC5yb290KCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20gPSByb290Qm94LnNl
bGVjdGlvbkJvdHRvbSgpOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uVG9wID0gcm9vdEJveC5z
ZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCk7CisKKyAgICAvLyBVc2Ugc2Ft
ZSB5IHBvc2l0aW9uaW5nIGFuZCBoZWlnaHQgYXMgZm9yIHNlbGVjdGlvbiwgc28gdGhhdCB3aGVu
IHRoZSBzZWxlY3Rpb24gYW5kIHRoaXMgc3VicmFuZ2UgYXJlIG9uCisgICAgLy8gdGhlIHNhbWUg
d29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91dC4KKyAgICBMYXlvdXRVbml0IGRl
bHRhWSB7IG1fdGV4dEJveC5yZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpID8gc2VsZWN0aW9uQm90dG9tIC0gbV90ZXh0Qm94LmxvZ2ljYWxCb3R0b20oKSA6IG1f
dGV4dEJveC5sb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AgfTsKKyAgICBMYXlvdXRVbml0IHNl
bGVjdGlvbkhlaWdodCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHNlbGVjdGlvbkJvdHRvbSAt
IHNlbGVjdGlvblRvcCk7CisKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBMYXlvdXRV
bml0KG1fYm94UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fYm94UmVjdC55KCkgLSBkZWx0YVkpLCBM
YXlvdXRVbml0KG1fdGV4dEJveC5sb2dpY2FsV2lkdGgoKSksIHNlbGVjdGlvbkhlaWdodCB9Owor
ICAgIG1fdGV4dEJveC5saW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRS
dW4sIHNlbGVjdGlvblJlY3QsIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5k
T2Zmc2V0KTsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IHBhaW50aW5nIGNvbWJpbmVkIHRleHQu
IFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDk5Mz4uCisg
ICAgYXV0byBiYWNrZ3JvdW5kUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGlu
Z0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX3RleHRCb3gucmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgIGlmIChtYXJrZWRUZXh0
LnR5cGUgPT0gTWFya2VkVGV4dDo6Q3VzdG9tQ29tcG9zaXRpb24pIHsKKyAgICAgICAgYmFja2dy
b3VuZFJlY3QuZXhwYW5kKC0xLCAtMSk7CisgICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmUoMC41
LCAwLjUpOworICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0
IHsgYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgMiB9IH0sIGNvbG9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRleHQuZmlsbFJlY3QoYmFja2dy
b3VuZFJlY3QsIGNvbG9yKTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3Jv
dW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgaWYgKG1hcmtl
ZFRleHQuc3RhcnRPZmZzZXQgPj0gbWFya2VkVGV4dC5lbmRPZmZzZXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQo
KTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IG1fdGV4dEJveC5saW5lRm9udCgpOwor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBtX3RleHRCb3gubGluZVN0eWxlKCk7
CisKKyAgICBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOworICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJvdmUgPSBtX3RleHRCb3guZW1waGFzaXNNYXJrRXhpc3Rz
QW5kSXNBYm92ZShsaW5lU3R5bGUpOworICAgIGNvbnN0IEF0b21TdHJpbmcmIGVtcGhhc2lzTWFy
ayA9IG1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJp
bmcoKSA6IG51bGxBdG9tKCk7CisgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQorICAg
ICAgICBlbXBoYXNpc01hcmtPZmZzZXQgPSAqbWFya0V4aXN0c0FuZElzQWJvdmUgPyAtZm9udC5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lz
TWFyaykgOiBmb250LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtB
c2NlbnQoZW1waGFzaXNNYXJrKTsKKworICAgIFRleHRQYWludGVyIHRleHRQYWludGVyIHsgY29u
dGV4dCB9OworICAgIHRleHRQYWludGVyLnNldEZvbnQoZm9udCk7CisgICAgdGV4dFBhaW50ZXIu
c2V0U3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0U3R5bGVzKTsKKyAgICB0ZXh0UGFpbnRlci5z
ZXRJc0hvcml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBpZiAobWFya2Vk
VGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CisgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdygm
bWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOworICAgICAgICBpZiAobGluZVN0
eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAgICAgICAgICAgIHRleHRQYWludGVyLnNldFNo
YWRvd0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBwbGVDb2xvckZpbHRlcigpKTsKKyAgICB9Cisg
ICAgdGV4dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJrKGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJr
T2Zmc2V0LCBtX3RleHRCb3guY29tYmluZWRUZXh0KCkpOworICAgIGlmIChhdXRvKiBkZWJ1Z1No
YWRvdyA9IG1fdGV4dEJveC5kZWJ1Z1RleHRTaGFkb3coKSkKKyAgICAgICAgdGV4dFBhaW50ZXIu
c2V0U2hhZG93KGRlYnVnU2hhZG93KTsKKworICAgIFRleHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJv
eC5jcmVhdGVUZXh0UnVuKCk7CisgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElm
TmVlZGVkKG1fdGV4dEJveCwgbV9wYWludEluZm8sIGZvbnQsIGNvbnRleHQsIHRleHRSdW4pOwor
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFs
c2UgfTsKKyAgICBpZiAobWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250
ZW50KSB7CisgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnNldEFs
cGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOworICAgIH0KKyAgICAvLyBUZXh0UGFpbnRlciB3
YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5l
IGJveC4KKyAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4sIG1fYm94UmVjdCwgbV90
ZXh0Qm94LnRleHRPcmlnaW5Gcm9tQm94UmVjdChtX2JveFJlY3QpLCBtYXJrZWRUZXh0LnN0YXJ0
T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6
OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0KQoreworICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlv
bigpID09IGNGdWxsVHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOworICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250ID0gbV90ZXh0Qm94LmxpbmVGb250KCk7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGxpbmVTdHlsZSA9IG1fdGV4dEJveC5saW5lU3R5bGUoKTsKKworICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOworCisgICAg
Ym9vbCBpc0NvbWJpbmVkVGV4dCA9IG1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBpZiAo
aXNDb21iaW5lZFRleHQpCisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94
UmVjdCwgQ2xvY2t3aXNlKSk7CisKKyAgICAvLyAxLiBDb21wdXRlIHRleHQgc2VsZWN0aW9uCisg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIGVuZE9mZnNldCA9IG1hcmtlZFRleHQuZW5kT2Zmc2V0OworICAgIGlmIChzdGFydE9m
ZnNldCA+PSBlbmRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5vdGUgdGhhdCBp
ZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBp
biB0aGUgdHJ1bmNhdGlvbgorICAgIC8vIGRyYXcgaXRzIG93biBkZWNvcmF0aW9uLgorICAgIFRl
eHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisKKyAgICAvLyBBdm9p
ZCBtZWFzdXJpbmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVk
IGFzIGFuIG9wdGltaXphdGlvbi4KKyAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3Qg
PSBtX2JveFJlY3Q7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSB0ZXh0UnVu
Lmxlbmd0aCgpKSB7CisgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHsgbV9ib3hS
ZWN0LngoKSwgbV9ib3hSZWN0LnkoKSwgbV9ib3hSZWN0LndpZHRoKCksIG1fYm94UmVjdC5oZWln
aHQoKSB9OworICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgICBzbmFwcGVk
U2VsZWN0aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlv
bihzZWxlY3Rpb25SZWN0LCBtX3RleHRCb3gucmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgIH0KKworICAgIC8vIDIuIFBhaW50Cisg
ICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBsaW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZl
Y3QoKTsKKyAgICB0ZXh0RGVjb3JhdGlvbnMuYWRkKFRleHREZWNvcmF0aW9uUGFpbnRlcjo6dGV4
dERlY29yYXRpb25zSW5FZmZlY3RGb3JTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0
aW9uU3R5bGVzKSk7CisgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWludGVy
IHsgY29udGV4dCwgdGV4dERlY29yYXRpb25zLCBtX3RleHRCb3gucmVuZGVyZXIoKSwgbV90ZXh0
Qm94LmlzRmlyc3RMaW5lKCksIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25T
dHlsZXMgfTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVuSXRlcmF0b3IoTGF5b3V0
SW50ZWdyYXRpb246OnRleHRSdW5Gb3IoJm1fdGV4dEJveCkpOworICAgIGRlY29yYXRpb25QYWlu
dGVyLnNldFdpZHRoKHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCkpOworICAgIGRlY29yYXRp
b25QYWludGVyLnNldElzSG9yaXpvbnRhbChtX3RleHRCb3guaXNIb3Jpem9udGFsKCkpOworICAg
IGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsKKyAgICAgICAgZGVjb3JhdGlvblBh
aW50ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkp
OworICAgICAgICBpZiAobGluZVN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAgICAgICAg
ICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBw
bGVDb2xvckZpbHRlcigpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07CisgICAgICAgIGJvb2wg
aXNEcmFnZ2VkQ29udGVudCA9IG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2Vk
Q29udGVudDsKKyAgICAgICAgaWYgKGlzRHJhZ2dlZENvbnRlbnQgfHwgIWNsaXBPdXRSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgICAgICAgICBp
ZiAoaXNEcmFnZ2VkQ29udGVudCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldEFscGhhKG1h
cmtlZFRleHQuc3R5bGUuYWxwaGEpOworICAgICAgICAgICAgaWYgKCFjbGlwT3V0UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgY29udGV4dC5jbGlwT3V0KGNsaXBPdXRSZWN0KTsKKyAg
ICAgICAgfQorICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5wYWludFRleHREZWNvcmF0aW9uKHRl
eHRSdW4uc3ViUnVuKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCksIG1fdGV4
dEJveC50ZXh0T3JpZ2luRnJvbUJveFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVk
U2VsZWN0aW9uUmVjdC5sb2NhdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoaXNDb21iaW5lZFRl
eHQpCisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRl
cmNsb2Nrd2lzZSkpOworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZCgpCit7CisgICAgYXV0byBzZWxlY3RhYmxlUmFuZ2UgPSBtX3RleHRCb3guc2Vs
ZWN0YWJsZVJhbmdlKCk7CisKKyAgICBhdXRvJiBlZGl0b3IgPSBtX3RleHRCb3gucmVuZGVyZXIo
KS5mcmFtZSgpLmVkaXRvcigpOworCisgICAgaWYgKCFlZGl0b3IuY29tcG9zaXRpb25Vc2VzQ3Vz
dG9tSGlnaGxpZ2h0cygpKSB7CisgICAgICAgIGF1dG8gY2xhbXBlZFN0YXJ0ID0gc2VsZWN0YWJs
ZVJhbmdlLmNsYW1wKGVkaXRvci5jb21wb3NpdGlvblN0YXJ0KCkpOworICAgICAgICBhdXRvIGNs
YW1wZWRFbmQgPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoZWRpdG9yLmNvbXBvc2l0aW9uRW5kKCkp
OworCisgICAgICAgIFN0eWxlZE1hcmtlZFRleHQgbWFya2VkVGV4dCB7IHsgY2xhbXBlZFN0YXJ0
LCBjbGFtcGVkRW5kLCBNYXJrZWRUZXh0OjpDb21wb3NpdGlvbiB9IH07CisgICAgICAgIG1hcmtl
ZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1
bHRDb21wb3NpdGlvbkZpbGxDb2xvcjsKKworICAgICAgICBwYWludEJhY2tncm91bmQobWFya2Vk
VGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdo
dCA6IGVkaXRvci5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgeworICAgICAgICBpZiAo
aGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3RleHRCb3guc3RhcnQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94
LmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0
LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZz
ZXQsIGhpZ2hsaWdodC5lbmRPZmZzZXQpOworCisgICAgICAgIFN0eWxlZE1hcmtlZFRleHQgbWFy
a2VkVGV4dCB7IHsgY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kLCBNYXJrZWRUZXh0OjpDdXN0b21D
b21wb3NpdGlvbiB9IH07CisgICAgICAgIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9y
ID0gaGlnaGxpZ2h0LmNvbG9yOworCisgICAgICAgIHBhaW50QmFja2dyb3VuZChtYXJrZWRUZXh0
KTsKKworICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA+IG1fdGV4dEJveC5lbmQoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEJveFBhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmNkMDE3MTdjZDA4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0Qm94UGFpbnRlci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGb250Q2FzY2FkZTsKK2NsYXNzIExlZ2FjeUlubGluZVRleHRCb3g7CitjbGFz
cyBSZW5kZXJDb21iaW5lVGV4dDsKK3N0cnVjdCBQYWludEluZm87CitzdHJ1Y3QgU3R5bGVkTWFy
a2VkVGV4dDsKKworY2xhc3MgVGV4dEJveFBhaW50ZXIgeworcHVibGljOgorICAgIFRleHRCb3hQ
YWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8mLCBjb25zdCBGbG9h
dFJlY3QmIGJveFJlY3QpOworICAgIH5UZXh0Qm94UGFpbnRlcigpOworCisgICAgdm9pZCBwYWlu
dEJhY2tncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOworICAgIHZvaWQgcGFpbnRGb3Jl
Z3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmKTsKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlv
bihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCk7
CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOworCitwcml2YXRlOgorICAg
IGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIG1fdGV4dEJveDsKKyAgICBQYWludEluZm8mIG1f
cGFpbnRJbmZvOworICAgIGNvbnN0IEZsb2F0UmVjdCBtX2JveFJlY3Q7Cit9OworCit9Cg==
</data>
<flag name="commit-queue"
          id="461120"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437855</attachid>
            <date>2021-09-10 05:56:22 -0700</date>
            <delta_ts>2021-09-10 05:59:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter-2.patch</filename>
            <type>text/plain</type>
            <size>37833</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWQxMmE2MmEyNzguLmE5ODIzY2RlNDA0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5l
VGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRlciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRo
ZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdhY3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBtZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQg
ZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRpbmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAg
IGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2Vk
VGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5
bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRlZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjguLjBlYmM3MDllODE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyODIsNiArMjI4Miw3IEBAIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCiBy
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3BwCityZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YzBlM2M3
ZjBkNS4uYzM1ZTA5NGEzMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDYgKzUyMjQsNyBAQAogCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRl
ckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0RE
MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFu
ZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKKwkJRTQ0MERGNTYyNkVCNTNFMDAwNEFG
MDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIu
aCAqLzsgfTsKIAkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi87IH07CiAJCUU0NDYxM0Ey
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYyOTAs
NiArMTYyOTEsOCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwREY1NDI2
RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MEZENTEyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxl
ZE1hcmtlZFRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkTWFy
a2VkVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwRkQ1NDI1QTRBRkVF
MDBGN0M4NDkgLyogU3R5bGVkTWFya2VkVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHls
ZWRNYXJrZWRUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NTEwNzcy
MDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZWRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjk4NjYsNiArMjk4NjksOCBAQAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBU
ZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJMEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRC
b3hQYWludGVyLmNwcCAqLywKKwkJCQlFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJv
eFBhaW50ZXIuaCAqLywKIAkJCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oICovLAogCQkJCTU4MkRFMzIyMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAogCQkJCTU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAv
KiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKQEAgLTMyNTUyLDYgKzMyNTU3LDcgQEAKIAkJ
CQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MERGNTYy
NkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENzcwNUM5MjU1MjhEMzQwMDFEMEM5NCAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMx
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTk2
ZjYzNzlkOTA2Li44NzUxYjY3MWJkNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTIxMyw3ICsyMTQsNiBAQCBMYXlvdXRSZWN0IHNuYXBw
ZWRTZWxlY3Rpb25SZWN0KGNvbnN0IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGZsb2F0IGxv
Z2ljYWxSaQogICAgIHJldHVybiBMYXlvdXRSZWN0IHsgdG9wUG9pbnQsIExheW91dFNpemUgeyB3
aWR0aCwgaGVpZ2h0IH0gfTsKIH0KIAotLy8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHBh
aW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4KIExheW91dFJlY3QgTGVnYWN5SW5saW5lVGV4dEJv
eDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3Mp
IGNvbnN0CiB7CiAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFi
bGVSYW5nZSgpLmNsYW1wKHN0YXJ0UG9zLCBlbmRQb3MpOwpAQCAtNDc1LDExICs0NzUsNyBAQCB2
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byogY29tYmluZWRUZXh0ID0gdGhpcy0+Y29tYmluZWRUZXh0KCk7Ci0KLSAgICBib29sIHNob3Vs
ZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAhY29tYmluZWRUZXh0OwotICAgIGlmIChzaG91
bGRSb3RhdGUpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENs
b2Nrd2lzZSkpOworICAgIFRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBwYWlu
dEluZm8sIGJveFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGhh
dmUgY29tcG9zaXRpb24gdW5kZXJsaW5lcyB0byBkcmF3LgogICAgIGJvb2wgY29udGFpbnNDb21w
b3NpdGlvbiA9IHJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiByZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpOwpAQCAtNDg5
LDcgKzQ4NSw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgLy8gYW5kIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpT
ZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmICFp
c1ByaW50aW5nKSB7CiAgICAgICAgIGlmIChjb250YWluc0NvbXBvc2l0aW9uICYmICF1c2VDdXN0
b21VbmRlcmxpbmVzKQotICAgICAgICAgICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQocGFp
bnRJbmZvLCBib3hPcmlnaW4pOworICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoKTsKIAogICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRo
aXMtPnNlbGVjdGFibGVSYW5nZSgpOwogCkBAIC01MDksNyArNTA1LDggQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2YKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtl
ZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAg
ICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpj
b2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dyb3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7CiAK
LSAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhh
c2U6OkJhY2tncm91bmQsIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMp
CisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVz
IG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5
IG1pZ2h0CkBAIC01NjUsNyArNTYyLDggQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAv
LyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRo
ZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1h
cmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVzY2VBZGphY2VudFdpdGhFcXVhbEZv
cmVncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgcGFpbnRNYXJrZWRUZXh0cyhwYWlu
dEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQsIGJveFJlY3QsIGNvYWxl
c2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2Fs
ZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRGb3Jl
Z3JvdW5kKG1hcmtlZFRleHQpOwogCiAgICAgLy8gUGFpbnQgZGVjb3JhdGlvbnMKICAgICBhdXRv
IHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwpA
QCAtNjA0LDE1ICs2MDIsMTMgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgLy8g
Q29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUg
bnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVk
TWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFs
RGVjb3JhdGlvbnMoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgICAgIHBhaW50TWFya2VkVGV4
dHMocGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uLCBib3hSZWN0
LCBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cywgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlw
T3V0UmVjdCk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxl
ZE1hcmtlZFRleHRzKQorICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnREZWNvcmF0aW9u
KG1hcmtlZFRleHQsIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QpOwogICAgIH0K
IAogICAgIC8vIDMuIFBhaW50IGZhbmN5IGRlY29yYXRpb25zLCBpbmNsdWRpbmcgY29tcG9zaXRp
b24gdW5kZXJsaW5lcyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdW5kZXJsaW5lcyBmb3Igc3BlbGxp
bmcgZXJyb3JzLCBncmFtbWFyIGVycm9ycywgZXQgY2V0ZXJhLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiB1c2VDdXN0b21VbmRlcmxpbmVzKQot
ICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7
Ci0gICAgCi0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAgICAgICBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7ICAgIAogfQogCiBUZXh0Qm94
U2VsZWN0YWJsZVJhbmdlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNv
bnN0CkBAIC03NDMsMTg1ICs3MzksNiBAQCBGbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6
OnRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpCiAgICAgcmV0
dXJuIHRleHRPcmlnaW47CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJr
ZWRUZXh0cyhQYWludEluZm8mIHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSBwaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCkK
LXsKLSAgICBzd2l0Y2ggKHBoYXNlKSB7Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpCYWNrZ3JvdW5kOgotICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0
cykKLSAgICAgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFpbnRJbmZvLCBib3hS
ZWN0LmxvY2F0aW9uKCksIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yLCBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQ6Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJr
ZWRUZXh0Rm9yZWdyb3VuZChwYWludEluZm8sIGJveFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uOgot
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0cykKLSAgICAgICAgICAg
IHBhaW50TWFya2VkVGV4dERlY29yYXRpb24ocGFpbnRJbmZvLCBib3hSZWN0LCBkZWNvcmF0aW9u
Q2xpcE91dFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3Im
IGNvbG9yLCB1bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRP
ZmZzZXQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKGNsYW1w
ZWRTdGFydE9mZnNldCA+PSBjbGFtcGVkRW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsKLSAgICB1cGRh
dGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xvciB9KTsgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKLQotICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBp
cyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNh
dGlvbgotICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9v
dEJveCA9IHJvb3QoKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9IHJvb3RCb3gu
c2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSByb290Qm94
LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKLQotICAgIC8vIFVzZSBz
YW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdo
ZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KLSAgICAvLyB0aGUgc2Ft
ZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIExheW91dFVuaXQg
ZGVsdGFZIHsgcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCB9OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKLQotICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQoYm94T3JpZ2luLngoKSksIExheW91dFVu
aXQoYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkpLCBz
ZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydE9mZnNldCwgY2xhbXBlZEVu
ZE9mZnNldCk7Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+Lgot
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRp
bmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOwotICAgIGlmIChzdHlsZSA9PSBNYXJrZWRUZXh0
QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFu
ZCgtMSwgLTEpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKLSAgICAg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCB7IGJhY2tncm91bmRS
ZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBjb2xvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LmZpbGxSZWN0KGJhY2tncm91bmRSZWN0LCBjb2xv
cik7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQotewotICAgIGlmIChtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0KLSAgICBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQgPSAwOwotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJv
dmUgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSk7Ci0gICAgY29uc3Qg
QXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsKLSAgICBpZiAoIWVtcGhh
c2lzTWFyay5pc0VtcHR5KCkpCi0gICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9ICptYXJrRXhp
c3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhh
c2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50
KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwotCi0gICAgVGV4dFBh
aW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07Ci0gICAgdGV4dFBhaW50ZXIuc2V0Rm9udChm
b250KTsKLSAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHls
ZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7Ci0g
ICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewotICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICB0ZXh0
UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIo
KSk7Ci0gICAgfQotICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmss
IGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOwotICAgIGlmIChhdXRvKiBkZWJ1
Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coZGVidWdTaGFkb3cpOwotCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigp
OwotICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCgqdGhpcywgcGFp
bnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07Ci0gICAgaWYgKG1hcmtlZFRl
eHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgewotICAgICAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFs
cGhhKTsKLSAgICB9Ci0gICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUg
YW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZSh0ZXh0UnVuLCBib3hSZWN0LCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoYm94UmVj
dCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLX0KLQot
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0g
ICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0g
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0
eWxlcyk7Ci0KLSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmluZWRUZXh0KCk7Ci0gICAg
aWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDbG9ja3dpc2UpKTsKLQotICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24K
LSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7Ci0gICAgaWYgKHN0YXJ0
T2Zmc2V0ID49IGVuZE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90ZSB0aGF0
IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVk
IGluIHRoZSB0cnVuY2F0aW9uCi0gICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCi0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gYm94UmVj
dDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkp
IHsKLSAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBib3hSZWN0LngoKSwgYm94
UmVjdC55KCksIGJveFJlY3Qud2lkdGgoKSwgYm94UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBs
aW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJl
Y3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25S
ZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5s
dHIoKSk7Ci0gICAgfQotCi0gICAgLy8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9u
cyA9IGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Ci0gICAgdGV4dERlY29y
YXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0
Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRl
eHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNv
cmF0aW9ucywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4
dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcih0aGlzKSk7Ci0g
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgo
KSk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgp
KTsKLSAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAgICAgIGRlY29y
YXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKGxpbmVTdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkK
LSAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5l
U3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBpc0RyYWdnZWRDb250ZW50ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRl
eHQ6OkRyYWdnZWRDb250ZW50OwotICAgICAgICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xp
cE91dFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAg
ICAgICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7Ci0gICAgICAgICAgICBpZiAoIWNsaXBP
dXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91
dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERl
Y29yYXRpb24odGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zm
c2V0KSwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBl
ZFNlbGVjdGlvblJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGlzQ29tYmluZWRU
ZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVy
Y2xvY2t3aXNlKSk7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbikKLXsKLSAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVS
YW5nZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRp
b25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIHNlbGVjdGFibGVSYW5nZS5jbGFtcChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3N0YXJ0KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBlbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0g
PSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQu
ZW5kT2Zmc2V0KTsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8s
IGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwotCi0gICAgICAgIGlmIChoaWdobGln
aHQuZW5kT2Zmc2V0ID4gZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZv
aWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikgY29uc3QKIHsKICAg
ICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKQEAgLTEwOTQsNyArOTExLDcg
QEAgaW5saW5lIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpj
b21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBsaW5lU3R5bGUoKS5oYXNUZXh0Q29tYmlu
ZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5k
ZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5lZCgpID8gJmRvd25jYXN0PFJlbmRl
ckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7CiB9CiAKLVNoYWRvd0RhdGEqIExl
Z2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdygpCitjb25zdCBTaGFkb3dEYXRhKiBM
ZWdhY3lJbmxpbmVUZXh0Qm94OjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAogewogICAgIGlmICgh
cmVuZGVyZXIoKS5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRWaXN1YWxDb3ZlcmFnZUVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCA4OTJmMjAyMDgyOTUuLjEzMGIyMTk2NWRi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CkBAIC0xNjMsMjYgKzE2MywyMCBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURv
Y3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1hcmtlZFRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveFBhaW50ZXI7CiAKLSAgICB2b2lkIHBhaW50
TWFya2VkVGV4dHMoUGFpbnRJbmZvJiwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4mLCBjb25zdCBG
bG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCA9IHsgfSk7CisgICAgRmxvYXRQb2ludCB0
ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lk
IHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IE1hcmtlZFRleHQmKTsKICAgICB2b2lkIHBhaW50UGxh
dGZvcm1Eb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luKTsKIAotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKTsKICAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikg
Y29uc3Q7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKSBj
b25zdDsKIAotICAgIGVudW0gY2xhc3MgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZSA6IGJvb2wg
eyBEZWZhdWx0LCBSb3VuZGVkIH07Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5k
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3ImLCB1
bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRPZmZzZXQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgPSBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpEZWZh
dWx0KTsKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dEZvcmVncm91bmQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7Ci0gICAgdm9p
ZCBwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCwgY29uc3QgU3R5bGVkTWFya2Vk
VGV4dCYpOwotCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNv
bnN0OwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgU2hh
ZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCk7CisgICAgY29uc3QgU2hhZG93RGF0YSogZGVidWdU
ZXh0U2hhZG93KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVk
VGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVm
ZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29s
IGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5oCmluZGV4IDFhM2EzNDJhZDgw
Mi4uY2FmMDg0ZjFjMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFy
a2VkVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKQEAg
LTUzLDcgKzUzLDcgQEAgc3RydWN0IE1hcmtlZFRleHQgewogICAgICAgICBEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzLAogI2VuZGlmCiAgICAgICAgIFNlbGVjdGlvbiwKLSAgICAgICAg
RHJhZ2dlZENvbnRlbnQsCisgICAgICAgIERyYWdnZWRDb250ZW50CiAgICAgfTsKIAogICAgIGVu
dW0gY2xhc3MgUGFpbnRQaGFzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU3R5bGVkTWFya2VkVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVk
TWFya2VkVGV4dC5jcHAKaW5kZXggMzU1NjRjZTQzYTU4Li5jOWNmYzdmZjVkYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5jcHAKQEAgLTExMSw3ICsx
MTEsNiBAQCBzdGF0aWMgU3R5bGVkTWFya2VkVGV4dDo6U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5t
YXJrZWRNYXJrZWRUZXh0KGNvbnN0IFJlbmRlclRleAogICAgIHN0eWxlLnRleHREZWNvcmF0aW9u
U3R5bGVzID0gVGV4dERlY29yYXRpb25QYWludGVyOjpzdHlsZXNGb3JSZW5kZXJlcihyZW5kZXJl
ciwgbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCksIGlzRmlyc3RMaW5lKTsKICAg
ICBzdHlsZS50ZXh0U3R5bGVzID0gY29tcHV0ZVRleHRQYWludFN0eWxlKHJlbmRlcmVyLmZyYW1l
KCksIGxpbmVTdHlsZSwgcGFpbnRJbmZvKTsKICAgICBzdHlsZS50ZXh0U2hhZG93ID0gU2hhZG93
RGF0YTo6Y2xvbmUocGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogbGluZVN0
eWxlLnRleHRTaGFkb3coKSk7Ci0gICAgc3R5bGUuYWxwaGEgPSAxOwogICAgIHJldHVybiBzdHls
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtl
ZFRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmgKaW5k
ZXggMWIxOTY1MTBhY2QwLi4yNGU2YzI3YjYzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1N0eWxlZE1hcmtlZFRleHQuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgU3R5bGVkTWFy
a2VkVGV4dCA6IE1hcmtlZFRleHQgewogICAgICAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0U3R5bGVz
OwogICAgICAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlcyB0ZXh0RGVjb3JhdGlvblN0
eWxlczsKICAgICAgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dEYXRhPiB0ZXh0U2hhZG93OwotICAg
ICAgICBmbG9hdCBhbHBoYTsKKyAgICAgICAgZmxvYXQgYWxwaGEgeyAxIH07CiAgICAgfTsKIAog
ICAgIFN0eWxlIHN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YTM2YjcyNzNi
ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBh
aW50ZXIuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0Qm94UGFpbnRlci5oIgorCisjaW5jbHVkZSAiQ29tcG9zaXRp
b25IaWdobGlnaHQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCisjaW5jbHVkZSAiU3R5bGVkTWFya2VkVGV4dC5oIgorI2luY2x1ZGUgIlRleHRQ
YWludFN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5l
VGV4dEJveCYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCkKKyAgICA6IG1fdGV4dEJveCh0ZXh0Qm94KQorICAgICwgbV9wYWludEluZm8ocGFp
bnRJbmZvKQorICAgICwgbV9ib3hSZWN0KGJveFJlY3QpCit7CisgICAgYm9vbCBzaG91bGRSb3Rh
dGUgPSAhbV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpICYmICFtX3RleHRCb3guY29tYmluZWRUZXh0
KCk7CisgICAgaWYgKHNob3VsZFJvdGF0ZSkKKyAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgp
LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENsb2Nrd2lzZSkpOworfQorCitUZXh0Qm94
UGFpbnRlcjo6flRleHRCb3hQYWludGVyKCkKK3sKKyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFt
X3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAg
ICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0
Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworfQorCit2b2lkIFRl
eHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCit7CisgICAgYXV0byBz
ZWxlY3RhYmxlUmFuZ2UgPSBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7CisKKyAgICBhdXRv
JiBlZGl0b3IgPSBtX3RleHRCb3gucmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpOworCisgICAg
aWYgKCFlZGl0b3IuY29tcG9zaXRpb25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7CisgICAgICAg
IGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAo
ZWRpdG9yLmNvbXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0aW9uRW5kKCkpOworCisg
ICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIENvbXBvc2l0
aW9uSGlnaGxpZ2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBlZGl0b3IuY3VzdG9tQ29t
cG9zaXRpb25IaWdobGlnaHRzKCkpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQg
PD0gbV90ZXh0Qm94LnN0YXJ0KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp
ZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49IG1fdGV4dEJveC5lbmQoKSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxl
Y3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQuZW5kT2Zm
c2V0KTsKKworICAgICAgICBwYWludEJhY2tncm91bmQoY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5k
LCBoaWdobGlnaHQuY29sb3IsIEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7CisKKyAgICAgICAg
aWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBtX3RleHRCb3guZW5kKCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZChj
b25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQoreworICAgIHBhaW50QmFja2dyb3Vu
ZChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCwgbWFya2VkVGV4
dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCYWNrZ3JvdW5kU3R5bGUgYmFja2dyb3VuZFN0eWxlKQoreworICAg
IGlmIChzdGFydE9mZnNldCA+PSBlbmRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0IH07CisgICAgdXBkYXRl
R3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIFRleHRQYWludFN0eWxlIHsgY29sb3IgfSk7IC8vIERv
bid0IGRyYXcgdGV4dCBhdCBhbGwhCisKKyAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMg
dHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRp
b24KKyAgICAvLyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgorICAgIFRleHRSdW4gdGV4dFJ1biA9
IG1fdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisKKyAgICBjb25zdCBMZWdhY3lSb290SW5saW5l
Qm94JiByb290Qm94ID0gbV90ZXh0Qm94LnJvb3QoKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlv
bkJvdHRvbSA9IHJvb3RCb3guc2VsZWN0aW9uQm90dG9tKCk7CisgICAgTGF5b3V0VW5pdCBzZWxl
Y3Rpb25Ub3AgPSByb290Qm94LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2so
KTsKKworICAgIC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2Vs
ZWN0aW9uLCBzbyB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUg
b24KKyAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0
LgorICAgIExheW91dFVuaXQgZGVsdGFZIHsgbV90ZXh0Qm94LnJlbmRlcmVyKCkuc3R5bGUoKS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20gLSBtX3RleHRCb3gu
bG9naWNhbEJvdHRvbSgpIDogbV90ZXh0Qm94LmxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCB9
OworICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4o
MCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKKworICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCB7IExheW91dFVuaXQobV9ib3hSZWN0LngoKSksIExheW91dFVuaXQobV9ib3hS
ZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwg
c2VsZWN0aW9uSGVpZ2h0IH07CisgICAgbV90ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBT
ZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgorICAg
IGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdE
aXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV90ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKKyAgICBpZiAoYmFja2dyb3VuZFN0
eWxlID09IEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCkgeworICAgICAgICBiYWNrZ3JvdW5kUmVj
dC5leHBhbmQoLTEsIC0xKTsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZSgwLjUsIDAuNSk7
CisgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QgeyBiYWNr
Z3JvdW5kUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgeyAyIH0gfSwgY29sb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGV4dC5maWxsUmVjdChiYWNrZ3JvdW5kUmVj
dCwgY29sb3IpOworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQoY29u
c3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICBpZiAobWFya2VkVGV4dC5z
dGFydE9mZnNldCA+PSBtYXJrZWRUZXh0LmVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOworICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbV90ZXh0Qm94LmxpbmVGb250KCk7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IG1fdGV4dEJveC5saW5lU3R5bGUoKTsKKworICAg
IGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCA9IDA7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBt
YXJrRXhpc3RzQW5kSXNBYm92ZSA9IG1fdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fi
b3ZlKGxpbmVTdHlsZSk7CisgICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFy
a0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDog
bnVsbEF0b20oKTsKKyAgICBpZiAoIWVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCisgICAgICAgIGVt
cGhhc2lzTWFya09mZnNldCA9ICptYXJrRXhpc3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6
IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChl
bXBoYXNpc01hcmspOworCisgICAgVGV4dFBhaW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07
CisgICAgdGV4dFBhaW50ZXIuc2V0Rm9udChmb250KTsKKyAgICB0ZXh0UGFpbnRlci5zZXRTdHls
ZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOworICAgIHRleHRQYWludGVyLnNldElzSG9y
aXpvbnRhbChtX3RleHRCb3guaXNIb3Jpem9udGFsKCkpOworICAgIGlmIChtYXJrZWRUZXh0LnN0
eWxlLnRleHRTaGFkb3cpIHsKKyAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KCZtYXJrZWRU
ZXh0LnN0eWxlLnRleHRTaGFkb3cudmFsdWUoKSk7CisgICAgICAgIGlmIChsaW5lU3R5bGUuaGFz
QXBwbGVDb2xvckZpbHRlcigpKQorICAgICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93Q29s
b3JGaWx0ZXIoJmxpbmVTdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOworICAgIH0KKyAgICB0ZXh0
UGFpbnRlci5zZXRFbXBoYXNpc01hcmsoZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQs
IG1fdGV4dEJveC5jb21iaW5lZFRleHQoKSk7CisgICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0g
bV90ZXh0Qm94LmRlYnVnVGV4dFNoYWRvdygpKQorICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coZGVidWdTaGFkb3cpOworCisgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0
ZVRleHRSdW4oKTsKKyAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQo
bV90ZXh0Qm94LCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgdGV4dFJ1bik7CisKKyAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0LCBmYWxzZSB9Owor
ICAgIGlmIChtYXJrZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQpIHsK
KyAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFy
a2VkVGV4dC5zdHlsZS5hbHBoYSk7CisgICAgfQorICAgIC8vIFRleHRQYWludGVyIHdhbnRzIHRo
ZSBib3ggcmVjdGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50aXJlIGxpbmUgYm94Lgor
ICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UodGV4dFJ1biwgbV9ib3hSZWN0LCBtX3RleHRCb3gu
dGV4dE9yaWdpbkZyb21Cb3hSZWN0KG1fYm94UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQs
IG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRE
ZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgY2xpcE91dFJlY3QpCit7CisgICAgaWYgKG1fdGV4dEJveC50cnVuY2F0aW9uKCkgPT0g
Y0Z1bGxUcnVuY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGlu
ZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOworCisgICAgdXBkYXRlR3JhcGhpY3NDb250
ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0eWxlcyk7CisKKyAgICBib29sIGlz
Q29tYmluZWRUZXh0ID0gbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpOworICAgIGlmIChpc0NvbWJp
bmVkVGV4dCkKKyAgICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBD
bG9ja3dpc2UpKTsKKworICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24KKyAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQg
ZW5kT2Zmc2V0ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49
IGVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0
ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0
cnVuY2F0aW9uCisgICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCisgICAgVGV4dFJ1biB0
ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4oKTsKKworICAgIC8vIEF2b2lkIG1lYXN1
cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4g
b3B0aW1pemF0aW9uLgorICAgIEZsb2F0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IG1fYm94
UmVjdDsKKyAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3Ro
KCkpIHsKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBtX2JveFJlY3QueCgp
LCBtX2JveFJlY3QueSgpLCBtX2JveFJlY3Qud2lkdGgoKSwgbV9ib3hSZWN0LmhlaWdodCgpIH07
CisgICAgICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0
aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgICAgIHNuYXBwZWRTZWxlY3Rp
b25SZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVj
dGlvblJlY3QsIG1fdGV4dEJveC5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSwgdGV4dFJ1bi5sdHIoKSk7CisgICAgfQorCisgICAgLy8gMi4gUGFpbnQKKyAgICBhdXRv
IHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwor
ICAgIHRleHREZWNvcmF0aW9ucy5hZGQoVGV4dERlY29yYXRpb25QYWludGVyOjp0ZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdEZvclN0eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHls
ZXMpKTsKKyAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250
ZXh0LCB0ZXh0RGVjb3JhdGlvbnMsIG1fdGV4dEJveC5yZW5kZXJlcigpLCBtX3RleHRCb3guaXNG
aXJzdExpbmUoKSwgZm9udCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9
OworICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3Jh
dGlvbjo6dGV4dFJ1bkZvcigmbV90ZXh0Qm94KSk7CisgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0
V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKSk7CisgICAgZGVjb3JhdGlvblBhaW50
ZXIuc2V0SXNIb3Jpem9udGFsKG1fdGV4dEJveC5pc0hvcml6b250YWwoKSk7CisgICAgaWYgKG1h
cmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgeworICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5z
ZXRUZXh0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cudmFsdWUoKSk7CisgICAg
ICAgIGlmIChsaW5lU3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQorICAgICAgICAgICAgZGVj
b3JhdGlvblBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZS5hcHBsZUNvbG9y
RmlsdGVyKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBpc0RyYWdn
ZWRDb250ZW50ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50
OworICAgICAgICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xpcE91dFJlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICAgICAgICAgIGlmIChpc0Ry
YWdnZWRDb250ZW50KQorICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFya2VkVGV4
dC5zdHlsZS5hbHBoYSk7CisgICAgICAgICAgICBpZiAoIWNsaXBPdXRSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91dFJlY3QpOworICAgICAgICB9
CisgICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERlY29yYXRpb24odGV4dFJ1bi5z
dWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSwgbV90ZXh0Qm94LnRl
eHRPcmlnaW5Gcm9tQm94UmVjdChzbmFwcGVkU2VsZWN0aW9uUmVjdCksIHNuYXBwZWRTZWxlY3Rp
b25SZWN0LmxvY2F0aW9uKCkpOworICAgIH0KKworICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKKyAg
ICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xvY2t3
aXNlKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZjdkOGMwZDg5ZmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udENhc2Nh
ZGU7CitjbGFzcyBMZWdhY3lJbmxpbmVUZXh0Qm94OworY2xhc3MgUmVuZGVyQ29tYmluZVRleHQ7
CitzdHJ1Y3QgUGFpbnRJbmZvOworc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CisKK2NsYXNzIFRl
eHRCb3hQYWludGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJ
bmxpbmVUZXh0Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KTsKKyAg
ICB+VGV4dEJveFBhaW50ZXIoKTsKKworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoKTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7
CisgICAgdm9pZCBwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOworICAg
IHZvaWQgcGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGNsaXBPdXRSZWN0KTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEJhY2tncm91
bmRTdHlsZSB7IE5vcm1hbCwgUm91bmRlZCB9OworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IENvbG9yJiwgQmFj
a2dyb3VuZFN0eWxlID0gQmFja2dyb3VuZFN0eWxlOjpOb3JtYWwpOworCisgICAgY29uc3QgTGVn
YWN5SW5saW5lVGV4dEJveCYgbV90ZXh0Qm94OworICAgIFBhaW50SW5mbyYgbV9wYWludEluZm87
CisgICAgY29uc3QgRmxvYXRSZWN0IG1fYm94UmVjdDsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437856</attachid>
            <date>2021-09-10 05:59:16 -0700</date>
            <delta_ts>2021-09-10 06:14:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter-3.patch</filename>
            <type>text/plain</type>
            <size>37418</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWQxMmE2MmEyNzguLmE5ODIzY2RlNDA0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5l
VGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRlciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRo
ZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdhY3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBtZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQg
ZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRpbmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAg
IGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2Vk
VGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5
bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRlZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjguLjBlYmM3MDllODE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyODIsNiArMjI4Miw3IEBAIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCiBy
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3BwCityZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YzBlM2M3
ZjBkNS4uYzM1ZTA5NGEzMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDYgKzUyMjQsNyBAQAogCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRl
ckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0RE
MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFu
ZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKKwkJRTQ0MERGNTYyNkVCNTNFMDAwNEFG
MDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIu
aCAqLzsgfTsKIAkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi87IH07CiAJCUU0NDYxM0Ey
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYyOTAs
NiArMTYyOTEsOCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwREY1NDI2
RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MEZENTEyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxl
ZE1hcmtlZFRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkTWFy
a2VkVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwRkQ1NDI1QTRBRkVF
MDBGN0M4NDkgLyogU3R5bGVkTWFya2VkVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHls
ZWRNYXJrZWRUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NTEwNzcy
MDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZWRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjk4NjYsNiArMjk4NjksOCBAQAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBU
ZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJMEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRC
b3hQYWludGVyLmNwcCAqLywKKwkJCQlFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJv
eFBhaW50ZXIuaCAqLywKIAkJCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oICovLAogCQkJCTU4MkRFMzIyMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAogCQkJCTU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAv
KiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKQEAgLTMyNTUyLDYgKzMyNTU3LDcgQEAKIAkJ
CQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MERGNTYy
NkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENzcwNUM5MjU1MjhEMzQwMDFEMEM5NCAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMx
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTk2
ZjYzNzlkOTA2Li44NzUxYjY3MWJkNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTIxMyw3ICsyMTQsNiBAQCBMYXlvdXRSZWN0IHNuYXBw
ZWRTZWxlY3Rpb25SZWN0KGNvbnN0IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGZsb2F0IGxv
Z2ljYWxSaQogICAgIHJldHVybiBMYXlvdXRSZWN0IHsgdG9wUG9pbnQsIExheW91dFNpemUgeyB3
aWR0aCwgaGVpZ2h0IH0gfTsKIH0KIAotLy8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHBh
aW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4KIExheW91dFJlY3QgTGVnYWN5SW5saW5lVGV4dEJv
eDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3Mp
IGNvbnN0CiB7CiAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFi
bGVSYW5nZSgpLmNsYW1wKHN0YXJ0UG9zLCBlbmRQb3MpOwpAQCAtNDc1LDExICs0NzUsNyBAQCB2
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byogY29tYmluZWRUZXh0ID0gdGhpcy0+Y29tYmluZWRUZXh0KCk7Ci0KLSAgICBib29sIHNob3Vs
ZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAhY29tYmluZWRUZXh0OwotICAgIGlmIChzaG91
bGRSb3RhdGUpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENs
b2Nrd2lzZSkpOworICAgIFRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBwYWlu
dEluZm8sIGJveFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGhh
dmUgY29tcG9zaXRpb24gdW5kZXJsaW5lcyB0byBkcmF3LgogICAgIGJvb2wgY29udGFpbnNDb21w
b3NpdGlvbiA9IHJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiByZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpOwpAQCAtNDg5
LDcgKzQ4NSw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgLy8gYW5kIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpT
ZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmICFp
c1ByaW50aW5nKSB7CiAgICAgICAgIGlmIChjb250YWluc0NvbXBvc2l0aW9uICYmICF1c2VDdXN0
b21VbmRlcmxpbmVzKQotICAgICAgICAgICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQocGFp
bnRJbmZvLCBib3hPcmlnaW4pOworICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoKTsKIAogICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRo
aXMtPnNlbGVjdGFibGVSYW5nZSgpOwogCkBAIC01MDksNyArNTA1LDggQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2YKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtl
ZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAg
ICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpj
b2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dyb3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7CiAK
LSAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhh
c2U6OkJhY2tncm91bmQsIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMp
CisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVz
IG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5
IG1pZ2h0CkBAIC01NjUsNyArNTYyLDggQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAv
LyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRo
ZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1h
cmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVzY2VBZGphY2VudFdpdGhFcXVhbEZv
cmVncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgcGFpbnRNYXJrZWRUZXh0cyhwYWlu
dEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQsIGJveFJlY3QsIGNvYWxl
c2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2Fs
ZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRGb3Jl
Z3JvdW5kKG1hcmtlZFRleHQpOwogCiAgICAgLy8gUGFpbnQgZGVjb3JhdGlvbnMKICAgICBhdXRv
IHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwpA
QCAtNjA0LDE1ICs2MDIsMTMgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgLy8g
Q29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUg
bnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVk
TWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFs
RGVjb3JhdGlvbnMoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgICAgIHBhaW50TWFya2VkVGV4
dHMocGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uLCBib3hSZWN0
LCBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cywgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlw
T3V0UmVjdCk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxl
ZE1hcmtlZFRleHRzKQorICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnREZWNvcmF0aW9u
KG1hcmtlZFRleHQsIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QpOwogICAgIH0K
IAogICAgIC8vIDMuIFBhaW50IGZhbmN5IGRlY29yYXRpb25zLCBpbmNsdWRpbmcgY29tcG9zaXRp
b24gdW5kZXJsaW5lcyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdW5kZXJsaW5lcyBmb3Igc3BlbGxp
bmcgZXJyb3JzLCBncmFtbWFyIGVycm9ycywgZXQgY2V0ZXJhLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiB1c2VDdXN0b21VbmRlcmxpbmVzKQot
ICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7
Ci0gICAgCi0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAgICAgICBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7ICAgIAogfQogCiBUZXh0Qm94
U2VsZWN0YWJsZVJhbmdlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNv
bnN0CkBAIC03NDMsMTg1ICs3MzksNiBAQCBGbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6
OnRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpCiAgICAgcmV0
dXJuIHRleHRPcmlnaW47CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJr
ZWRUZXh0cyhQYWludEluZm8mIHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSBwaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCkK
LXsKLSAgICBzd2l0Y2ggKHBoYXNlKSB7Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpCYWNrZ3JvdW5kOgotICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0
cykKLSAgICAgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFpbnRJbmZvLCBib3hS
ZWN0LmxvY2F0aW9uKCksIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yLCBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQ6Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJr
ZWRUZXh0Rm9yZWdyb3VuZChwYWludEluZm8sIGJveFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uOgot
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0cykKLSAgICAgICAgICAg
IHBhaW50TWFya2VkVGV4dERlY29yYXRpb24ocGFpbnRJbmZvLCBib3hSZWN0LCBkZWNvcmF0aW9u
Q2xpcE91dFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3Im
IGNvbG9yLCB1bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRP
ZmZzZXQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKGNsYW1w
ZWRTdGFydE9mZnNldCA+PSBjbGFtcGVkRW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsKLSAgICB1cGRh
dGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xvciB9KTsgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKLQotICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBp
cyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNh
dGlvbgotICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9v
dEJveCA9IHJvb3QoKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9IHJvb3RCb3gu
c2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSByb290Qm94
LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKLQotICAgIC8vIFVzZSBz
YW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdo
ZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KLSAgICAvLyB0aGUgc2Ft
ZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIExheW91dFVuaXQg
ZGVsdGFZIHsgcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCB9OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKLQotICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQoYm94T3JpZ2luLngoKSksIExheW91dFVu
aXQoYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkpLCBz
ZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydE9mZnNldCwgY2xhbXBlZEVu
ZE9mZnNldCk7Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+Lgot
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRp
bmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOwotICAgIGlmIChzdHlsZSA9PSBNYXJrZWRUZXh0
QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFu
ZCgtMSwgLTEpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKLSAgICAg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCB7IGJhY2tncm91bmRS
ZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBjb2xvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LmZpbGxSZWN0KGJhY2tncm91bmRSZWN0LCBjb2xv
cik7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQotewotICAgIGlmIChtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0KLSAgICBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQgPSAwOwotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJv
dmUgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSk7Ci0gICAgY29uc3Qg
QXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsKLSAgICBpZiAoIWVtcGhh
c2lzTWFyay5pc0VtcHR5KCkpCi0gICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9ICptYXJrRXhp
c3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhh
c2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50
KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwotCi0gICAgVGV4dFBh
aW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07Ci0gICAgdGV4dFBhaW50ZXIuc2V0Rm9udChm
b250KTsKLSAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHls
ZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7Ci0g
ICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewotICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICB0ZXh0
UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIo
KSk7Ci0gICAgfQotICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmss
IGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOwotICAgIGlmIChhdXRvKiBkZWJ1
Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coZGVidWdTaGFkb3cpOwotCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigp
OwotICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCgqdGhpcywgcGFp
bnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07Ci0gICAgaWYgKG1hcmtlZFRl
eHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgewotICAgICAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFs
cGhhKTsKLSAgICB9Ci0gICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUg
YW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZSh0ZXh0UnVuLCBib3hSZWN0LCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoYm94UmVj
dCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLX0KLQot
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0g
ICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0g
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0
eWxlcyk7Ci0KLSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmluZWRUZXh0KCk7Ci0gICAg
aWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDbG9ja3dpc2UpKTsKLQotICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24K
LSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7Ci0gICAgaWYgKHN0YXJ0
T2Zmc2V0ID49IGVuZE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90ZSB0aGF0
IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVk
IGluIHRoZSB0cnVuY2F0aW9uCi0gICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCi0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gYm94UmVj
dDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkp
IHsKLSAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBib3hSZWN0LngoKSwgYm94
UmVjdC55KCksIGJveFJlY3Qud2lkdGgoKSwgYm94UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBs
aW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJl
Y3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25S
ZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5s
dHIoKSk7Ci0gICAgfQotCi0gICAgLy8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9u
cyA9IGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Ci0gICAgdGV4dERlY29y
YXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0
Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRl
eHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNv
cmF0aW9ucywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4
dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcih0aGlzKSk7Ci0g
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgo
KSk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgp
KTsKLSAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAgICAgIGRlY29y
YXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKGxpbmVTdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkK
LSAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5l
U3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBpc0RyYWdnZWRDb250ZW50ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRl
eHQ6OkRyYWdnZWRDb250ZW50OwotICAgICAgICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xp
cE91dFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAg
ICAgICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7Ci0gICAgICAgICAgICBpZiAoIWNsaXBP
dXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91
dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERl
Y29yYXRpb24odGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zm
c2V0KSwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBl
ZFNlbGVjdGlvblJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGlzQ29tYmluZWRU
ZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVy
Y2xvY2t3aXNlKSk7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbikKLXsKLSAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVS
YW5nZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRp
b25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIHNlbGVjdGFibGVSYW5nZS5jbGFtcChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3N0YXJ0KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBlbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0g
PSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQu
ZW5kT2Zmc2V0KTsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8s
IGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwotCi0gICAgICAgIGlmIChoaWdobGln
aHQuZW5kT2Zmc2V0ID4gZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZv
aWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikgY29uc3QKIHsKICAg
ICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKQEAgLTEwOTQsNyArOTExLDcg
QEAgaW5saW5lIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpj
b21iaW5lZFRleHQoKSBjb25zdAogICAgIHJldHVybiBsaW5lU3R5bGUoKS5oYXNUZXh0Q29tYmlu
ZSgpICYmIGlzPFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5k
ZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkuaXNDb21iaW5lZCgpID8gJmRvd25jYXN0PFJlbmRl
ckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKSA6IG51bGxwdHI7CiB9CiAKLVNoYWRvd0RhdGEqIExl
Z2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdygpCitjb25zdCBTaGFkb3dEYXRhKiBM
ZWdhY3lJbmxpbmVUZXh0Qm94OjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAogewogICAgIGlmICgh
cmVuZGVyZXIoKS5zZXR0aW5ncygpLmxlZ2FjeUxpbmVMYXlvdXRWaXN1YWxDb3ZlcmFnZUVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCA4OTJmMjAyMDgyOTUuLjEzMGIyMTk2NWRi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CkBAIC0xNjMsMjYgKzE2MywyMCBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURv
Y3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1hcmtlZFRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveFBhaW50ZXI7CiAKLSAgICB2b2lkIHBhaW50
TWFya2VkVGV4dHMoUGFpbnRJbmZvJiwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4mLCBjb25zdCBG
bG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCA9IHsgfSk7CisgICAgRmxvYXRQb2ludCB0
ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lk
IHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IE1hcmtlZFRleHQmKTsKICAgICB2b2lkIHBhaW50UGxh
dGZvcm1Eb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luKTsKIAotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKTsKICAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikg
Y29uc3Q7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKSBj
b25zdDsKIAotICAgIGVudW0gY2xhc3MgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZSA6IGJvb2wg
eyBEZWZhdWx0LCBSb3VuZGVkIH07Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5k
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3ImLCB1
bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRPZmZzZXQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgPSBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpEZWZh
dWx0KTsKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dEZvcmVncm91bmQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7Ci0gICAgdm9p
ZCBwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCwgY29uc3QgU3R5bGVkTWFya2Vk
VGV4dCYpOwotCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNv
bnN0OwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgU2hh
ZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCk7CisgICAgY29uc3QgU2hhZG93RGF0YSogZGVidWdU
ZXh0U2hhZG93KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVk
VGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVm
ZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgogICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29s
IGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcApp
bmRleCAzNTU2NGNlNDNhNTguLmM5Y2ZjN2ZmNWRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcApAQCAtMTExLDcgKzExMSw2IEBAIHN0YXRpYyBT
dHlsZWRNYXJrZWRUZXh0OjpTdHlsZSBjb21wdXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQo
Y29uc3QgUmVuZGVyVGV4CiAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMgPSBUZXh0RGVj
b3JhdGlvblBhaW50ZXI6OnN0eWxlc0ZvclJlbmRlcmVyKHJlbmRlcmVyLCBsaW5lU3R5bGUudGV4
dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJzdExpbmUpOwogICAgIHN0eWxlLnRleHRTdHls
ZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVuZGVyZXIuZnJhbWUoKSwgbGluZVN0eWxlLCBw
YWludEluZm8pOwogICAgIHN0eWxlLnRleHRTaGFkb3cgPSBTaGFkb3dEYXRhOjpjbG9uZShwYWlu
dEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxwdHIgOiBsaW5lU3R5bGUudGV4dFNoYWRvdygp
KTsKLSAgICBzdHlsZS5hbHBoYSA9IDE7CiAgICAgcmV0dXJuIHN0eWxlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuaAppbmRleCAxYjE5NjUxMGFjZDAu
LjI0ZTZjMjdiNjM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxl
ZE1hcmtlZFRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2Vk
VGV4dC5oCkBAIC00Niw3ICs0Niw3IEBAIHN0cnVjdCBTdHlsZWRNYXJrZWRUZXh0IDogTWFya2Vk
VGV4dCB7CiAgICAgICAgIFRleHRQYWludFN0eWxlIHRleHRTdHlsZXM7CiAgICAgICAgIFRleHRE
ZWNvcmF0aW9uUGFpbnRlcjo6U3R5bGVzIHRleHREZWNvcmF0aW9uU3R5bGVzOwogICAgICAgICBz
dGQ6Om9wdGlvbmFsPFNoYWRvd0RhdGE+IHRleHRTaGFkb3c7Ci0gICAgICAgIGZsb2F0IGFscGhh
OworICAgICAgICBmbG9hdCBhbHBoYSB7IDEgfTsKICAgICB9OwogCiAgICAgU3R5bGUgc3R5bGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRhMzZiNzI3M2JlZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTAs
MCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRleHRCb3hQYWludGVyLmgiCisKKyNpbmNsdWRlICJDb21wb3NpdGlvbkhpZ2hsaWdodC5oIgor
I2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNs
dWRlICJTdHlsZWRNYXJrZWRUZXh0LmgiCisjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKKyNp
bmNsdWRlICJUZXh0UGFpbnRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRCb3hQ
YWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94
LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KQorICAgIDog
bV90ZXh0Qm94KHRleHRCb3gpCisgICAgLCBtX3BhaW50SW5mbyhwYWludEluZm8pCisgICAgLCBt
X2JveFJlY3QoYm94UmVjdCkKK3sKKyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFtX3RleHRCb3gu
aXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBpZiAoc2hv
dWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0
aW9uKG1fYm94UmVjdCwgQ2xvY2t3aXNlKSk7Cit9CisKK1RleHRCb3hQYWludGVyOjp+VGV4dEJv
eFBhaW50ZXIoKQoreworICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIW1fdGV4dEJveC5pc0hvcml6
b250YWwoKSAmJiAhbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpOworICAgIGlmIChzaG91bGRSb3Rh
dGUpCisgICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9i
b3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCkKK3sKKyAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9
IG1fdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKTsKKworICAgIGF1dG8mIGVkaXRvciA9IG1fdGV4
dEJveC5yZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCk7CisKKyAgICBpZiAoIWVkaXRvci5jb21w
b3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0
YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChlZGl0b3IuY29tcG9zaXRp
b25TdGFydCgpLCBlZGl0b3IuY29tcG9zaXRpb25FbmQoKSk7CisKKyAgICAgICAgcGFpbnRCYWNr
Z3JvdW5kKGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwgQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRl
ZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IGVkaXRvci5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdo
dHMoKSkgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3RleHRCb3guc3Rh
cnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChoaWdobGlnaHQuc3Rh
cnRPZmZzZXQgPj0gbV90ZXh0Qm94LmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFt
cChoaWdobGlnaHQuc3RhcnRPZmZzZXQsIGhpZ2hsaWdodC5lbmRPZmZzZXQpOworCisgICAgICAg
IHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIGhpZ2hsaWdodC5jb2xv
ciwgQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsKKworICAgICAgICBpZiAoaGlnaGxpZ2h0LmVu
ZE9mZnNldCA+IG1fdGV4dEJveC5lbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtl
ZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgcGFpbnRCYWNrZ3JvdW5kKG1hcmtlZFRleHQuc3Rh
cnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0LCBtYXJrZWRUZXh0LnN0eWxlLmJhY2tncm91
bmRDb2xvcik7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Is
IEJhY2tncm91bmRTdHlsZSBiYWNrZ3JvdW5kU3R5bGUpCit7CisgICAgaWYgKHN0YXJ0T2Zmc2V0
ID49IGVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xvciB9KTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0
IGFsbCEKKworICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxl
dCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgorICAgIC8vIGRyYXcg
aXRzIG93biBoaWdobGlnaHQuCisgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0
ZVRleHRSdW4oKTsKKworICAgIGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBt
X3RleHRCb3gucm9vdCgpOworICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJv
eC5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHJvb3RC
b3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOworCisgICAgLy8gVXNl
IHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBzZWxlY3Rpb24sIHNvIHRoYXQg
d2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIHN1YnJhbmdlIGFyZSBvbgorICAgIC8vIHRoZSBz
YW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCisgICAgTGF5b3V0VW5p
dCBkZWx0YVkgeyBtX3RleHRCb3gucmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAtIG1fdGV4dEJveC5sb2dpY2FsQm90dG9tKCkg
OiBtX3RleHRCb3gubG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07CisgICAgTGF5b3V0VW5p
dCBzZWxlY3Rpb25IZWlnaHQgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0
b20gLSBzZWxlY3Rpb25Ub3ApOworCisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5
b3V0VW5pdChtX2JveFJlY3QueCgpKSwgTGF5b3V0VW5pdChtX2JveFJlY3QueSgpIC0gZGVsdGFZ
KSwgTGF5b3V0VW5pdChtX3RleHRCb3gubG9naWNhbFdpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQg
fTsKKyAgICBtX3RleHRCb3gubGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0
ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIC8v
IEZJWE1FOiBTdXBwb3J0IHBhaW50aW5nIGNvbWJpbmVkIHRleHQuIFNlZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDk5Mz4uCisgICAgYXV0byBiYWNrZ3JvdW5k
UmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rp
b25SZWN0LCBtX3RleHRCb3gucmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCksIHRleHRSdW4ubHRyKCkpOworICAgIGlmIChiYWNrZ3JvdW5kU3R5bGUgPT0gQmFja2dyb3Vu
ZFN0eWxlOjpSb3VuZGVkKSB7CisgICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFuZCgtMSwgLTEp
OworICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKKyAgICAgICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCB7IGJhY2tncm91bmRSZWN0LCBGbG9h
dFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KGJhY2tncm91bmRSZWN0LCBjb2xvcik7Cit9CisK
K3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRU
ZXh0JiBtYXJrZWRUZXh0KQoreworICAgIGlmIChtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0ID49IG1h
cmtlZFRleHQuZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bGluZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpOworCisgICAgZmxvYXQgZW1waGFzaXNN
YXJrT2Zmc2V0ID0gMDsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJc0Fi
b3ZlID0gbV90ZXh0Qm94LmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlKTsK
KyAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtYXJrRXhpc3RzQW5kSXNBYm92
ZSA/IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbSgpOworICAg
IGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKKyAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0
ID0gKm1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gLWZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IGZvbnQuZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9udC5mb250TWV0cmlj
cygpLmRlc2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhhc2lzTWFyayk7CisK
KyAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlciB7IGNvbnRleHQgfTsKKyAgICB0ZXh0UGFpbnRl
ci5zZXRGb250KGZvbnQpOworICAgIHRleHRQYWludGVyLnNldFN0eWxlKG1hcmtlZFRleHQuc3R5
bGUudGV4dFN0eWxlcyk7CisgICAgdGV4dFBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKG1fdGV4dEJv
eC5pc0hvcml6b250YWwoKSk7CisgICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykg
eworICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNo
YWRvdy52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVy
KCkpCisgICAgICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0
eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKSk7CisgICAgfQorICAgIHRleHRQYWludGVyLnNldEVtcGhh
c2lzTWFyayhlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgbV90ZXh0Qm94LmNvbWJp
bmVkVGV4dCgpKTsKKyAgICBpZiAoYXV0byogZGVidWdTaGFkb3cgPSBtX3RleHRCb3guZGVidWdU
ZXh0U2hhZG93KCkpCisgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdyk7
CisKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOworICAg
IHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZChtX3RleHRCb3gsIG1fcGFp
bnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07CisgICAgaWYgKG1hcmtlZFRl
eHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgeworICAgICAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKKyAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFs
cGhhKTsKKyAgICB9CisgICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUg
YW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCisgICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZSh0ZXh0UnVuLCBtX2JveFJlY3QsIG1fdGV4dEJveC50ZXh0T3JpZ2luRnJvbUJv
eFJlY3QobV9ib3hSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRP
ZmZzZXQpOworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24oY29uc3Qg
U3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVj
dCkKK3sKKyAgICBpZiAobV90ZXh0Qm94LnRydW5jYXRpb24oKSA9PSBjRnVsbFRydW5jYXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFp
bnRJbmZvLmNvbnRleHQoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IG1fdGV4dEJv
eC5saW5lRm9udCgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBtX3RleHRC
b3gubGluZVN0eWxlKCk7CisKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgbWFy
a2VkVGV4dC5zdHlsZS50ZXh0U3R5bGVzKTsKKworICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBt
X3RleHRCb3guY29tYmluZWRUZXh0KCk7CisgICAgaWYgKGlzQ29tYmluZWRUZXh0KQorICAgICAg
ICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENsb2Nrd2lzZSkpOworCisg
ICAgLy8gMS4gQ29tcHV0ZSB0ZXh0IHNlbGVjdGlvbgorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gbWFya2VkVGV4dC5zdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtYXJr
ZWRUZXh0LmVuZE9mZnNldDsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVk
LCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KKyAgICAv
LyBkcmF3IGl0cyBvd24gZGVjb3JhdGlvbi4KKyAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRC
b3guY3JlYXRlVGV4dFJ1bigpOworCisgICAgLy8gQXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdo
ZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCisg
ICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gbV9ib3hSZWN0OworICAgIGlmIChz
dGFydE9mZnNldCB8fCBlbmRPZmZzZXQgIT0gdGV4dFJ1bi5sZW5ndGgoKSkgeworICAgICAgICBM
YXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IG1fYm94UmVjdC54KCksIG1fYm94UmVjdC55KCks
IG1fYm94UmVjdC53aWR0aCgpLCBtX2JveFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZm9udC5h
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgbV90ZXh0
Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0
cigpKTsKKyAgICB9CisKKyAgICAvLyAyLiBQYWludAorICAgIGF1dG8gdGV4dERlY29yYXRpb25z
ID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CisgICAgdGV4dERlY29yYXRp
b25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0Rm9y
U3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOworICAgIFRleHRE
ZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0
aW9ucywgbV90ZXh0Qm94LnJlbmRlcmVyKCksIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpLCBmb250
LCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzIH07CisgICAgZGVjb3JhdGlv
blBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9y
KCZtX3RleHRCb3gpKTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2Vs
ZWN0aW9uUmVjdC53aWR0aCgpKTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250
YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50
ZXh0U2hhZG93KSB7CisgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1h
cmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGxpbmVTdHls
ZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAgICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5z
ZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKSk7CisgICAg
fQorCisgICAgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIg
eyBjb250ZXh0LCBmYWxzZSB9OworICAgICAgICBib29sIGlzRHJhZ2dlZENvbnRlbnQgPSBtYXJr
ZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQ7CisgICAgICAgIGlmIChp
c0RyYWdnZWRDb250ZW50IHx8ICFjbGlwT3V0UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgICAgICAgICAgaWYgKGlzRHJhZ2dlZENvbnRlbnQpCisg
ICAgICAgICAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFscGhhKTsK
KyAgICAgICAgICAgIGlmICghY2xpcE91dFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IGNvbnRleHQuY2xpcE91dChjbGlwT3V0UmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZGVjb3Jh
dGlvblBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCBtX3RleHRCb3gudGV4dE9yaWdpbkZyb21Cb3hS
ZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBlZFNlbGVjdGlvblJlY3QubG9jYXRpb24o
KSk7CisgICAgfQorCisgICAgaWYgKGlzQ29tYmluZWRUZXh0KQorICAgICAgICBjb250ZXh0LmNv
bmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNmN2Q4YzBkODlmZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250Q2FzY2FkZTsKK2NsYXNzIExlZ2Fj
eUlubGluZVRleHRCb3g7CitjbGFzcyBSZW5kZXJDb21iaW5lVGV4dDsKK3N0cnVjdCBQYWludElu
Zm87CitzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4dDsKKworY2xhc3MgVGV4dEJveFBhaW50ZXIgewor
cHVibGljOgorICAgIFRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpOworICAgIH5UZXh0Qm94UGFpbnRl
cigpOworCisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOworICAgIHZvaWQg
cGFpbnRCYWNrZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmKTsKKyAgICB2b2lkIHBhaW50
Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7CisgICAgdm9pZCBwYWludERlY29y
YXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcE91dFJl
Y3QpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgQmFja2dyb3VuZFN0eWxlIHsgTm9ybWFs
LCBSb3VuZGVkIH07CisgICAgdm9pZCBwYWludEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgQ29sb3ImLCBCYWNrZ3JvdW5kU3R5bGUgPSBC
YWNrZ3JvdW5kU3R5bGU6Ok5vcm1hbCk7CisKKyAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94
JiBtX3RleHRCb3g7CisgICAgUGFpbnRJbmZvJiBtX3BhaW50SW5mbzsKKyAgICBjb25zdCBGbG9h
dFJlY3QgbV9ib3hSZWN0OworfTsKKworfQo=
</data>
<flag name="commit-queue"
          id="461121"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437858</attachid>
            <date>2021-09-10 06:14:39 -0700</date>
            <delta_ts>2021-09-10 06:37:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter-4.patch</filename>
            <type>text/plain</type>
            <size>37663</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWQxMmE2MmEyNzguLmE5ODIzY2RlNDA0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5l
VGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRlciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRo
ZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdhY3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBtZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQg
ZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRpbmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAg
IGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2Vk
VGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5
bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRlZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjguLjBlYmM3MDllODE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyODIsNiArMjI4Miw3IEBAIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCiBy
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3BwCityZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YzBlM2M3
ZjBkNS4uYzM1ZTA5NGEzMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDYgKzUyMjQsNyBAQAogCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRl
ckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0RE
MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFu
ZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKKwkJRTQ0MERGNTYyNkVCNTNFMDAwNEFG
MDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIu
aCAqLzsgfTsKIAkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi87IH07CiAJCUU0NDYxM0Ey
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYyOTAs
NiArMTYyOTEsOCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwREY1NDI2
RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MEZENTEyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxl
ZE1hcmtlZFRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkTWFy
a2VkVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwRkQ1NDI1QTRBRkVF
MDBGN0M4NDkgLyogU3R5bGVkTWFya2VkVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHls
ZWRNYXJrZWRUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NTEwNzcy
MDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZWRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjk4NjYsNiArMjk4NjksOCBAQAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBU
ZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJMEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRC
b3hQYWludGVyLmNwcCAqLywKKwkJCQlFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJv
eFBhaW50ZXIuaCAqLywKIAkJCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oICovLAogCQkJCTU4MkRFMzIyMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAogCQkJCTU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAv
KiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKQEAgLTMyNTUyLDYgKzMyNTU3LDcgQEAKIAkJ
CQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MERGNTYy
NkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENzcwNUM5MjU1MjhEMzQwMDFEMEM5NCAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMx
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTk2
ZjYzNzlkOTA2Li43MmFkYWVmZTBlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTIxMyw3ICsyMTQsNiBAQCBMYXlvdXRSZWN0IHNuYXBw
ZWRTZWxlY3Rpb25SZWN0KGNvbnN0IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGZsb2F0IGxv
Z2ljYWxSaQogICAgIHJldHVybiBMYXlvdXRSZWN0IHsgdG9wUG9pbnQsIExheW91dFNpemUgeyB3
aWR0aCwgaGVpZ2h0IH0gfTsKIH0KIAotLy8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHBh
aW50TWFya2VkVGV4dEJhY2tncm91bmQoKS4KIExheW91dFJlY3QgTGVnYWN5SW5saW5lVGV4dEJv
eDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3Mp
IGNvbnN0CiB7CiAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFi
bGVSYW5nZSgpLmNsYW1wKHN0YXJ0UG9zLCBlbmRQb3MpOwpAQCAtNDc1LDExICs0NzUsNyBAQCB2
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byogY29tYmluZWRUZXh0ID0gdGhpcy0+Y29tYmluZWRUZXh0KCk7Ci0KLSAgICBib29sIHNob3Vs
ZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAhY29tYmluZWRUZXh0OwotICAgIGlmIChzaG91
bGRSb3RhdGUpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENs
b2Nrd2lzZSkpOworICAgIFRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBwYWlu
dEluZm8sIGJveFJlY3QpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGhh
dmUgY29tcG9zaXRpb24gdW5kZXJsaW5lcyB0byBkcmF3LgogICAgIGJvb2wgY29udGFpbnNDb21w
b3NpdGlvbiA9IHJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiByZW5kZXJlcigpLmZyYW1lKCkuZWRp
dG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpOwpAQCAtNDg5
LDcgKzQ4NSw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgLy8gYW5kIGNvbXBvc2l0
aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpT
ZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmICFp
c1ByaW50aW5nKSB7CiAgICAgICAgIGlmIChjb250YWluc0NvbXBvc2l0aW9uICYmICF1c2VDdXN0
b21VbmRlcmxpbmVzKQotICAgICAgICAgICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQocGFp
bnRJbmZvLCBib3hPcmlnaW4pOworICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoKTsKIAogICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRo
aXMtPnNlbGVjdGFibGVSYW5nZSgpOwogCkBAIC01MDksNyArNTA1LDggQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2YKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtl
ZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAg
ICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpj
b2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dyb3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7CiAK
LSAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhh
c2U6OkJhY2tncm91bmQsIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMp
CisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVz
IG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5
IG1pZ2h0CkBAIC01NjUsNyArNTYyLDggQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAv
LyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRo
ZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1h
cmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVzY2VBZGphY2VudFdpdGhFcXVhbEZv
cmVncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgcGFpbnRNYXJrZWRUZXh0cyhwYWlu
dEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQsIGJveFJlY3QsIGNvYWxl
c2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2Fs
ZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnRGb3Jl
Z3JvdW5kKG1hcmtlZFRleHQpOwogCiAgICAgLy8gUGFpbnQgZGVjb3JhdGlvbnMKICAgICBhdXRv
IHRleHREZWNvcmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwpA
QCAtNjA0LDE1ICs2MDIsMTMgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgLy8g
Q29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUg
bnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVk
TWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFs
RGVjb3JhdGlvbnMoc3R5bGVkTWFya2VkVGV4dHMpOwogCi0gICAgICAgIHBhaW50TWFya2VkVGV4
dHMocGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uLCBib3hSZWN0
LCBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cywgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlw
T3V0UmVjdCk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxl
ZE1hcmtlZFRleHRzKQorICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnREZWNvcmF0aW9u
KG1hcmtlZFRleHQsIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QpOwogICAgIH0K
IAogICAgIC8vIDMuIFBhaW50IGZhbmN5IGRlY29yYXRpb25zLCBpbmNsdWRpbmcgY29tcG9zaXRp
b24gdW5kZXJsaW5lcyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdW5kZXJsaW5lcyBmb3Igc3BlbGxp
bmcgZXJyb3JzLCBncmFtbWFyIGVycm9ycywgZXQgY2V0ZXJhLgogICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiB1c2VDdXN0b21VbmRlcmxpbmVzKQot
ICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7
Ci0gICAgCi0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAgICAgICBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7ICAgIAogfQogCiBUZXh0Qm94
U2VsZWN0YWJsZVJhbmdlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNv
bnN0CkBAIC03NDMsMTg1ICs3MzksNiBAQCBGbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6
OnRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpCiAgICAgcmV0
dXJuIHRleHRPcmlnaW47CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJr
ZWRUZXh0cyhQYWludEluZm8mIHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZSBwaGFz
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVjdCkK
LXsKLSAgICBzd2l0Y2ggKHBoYXNlKSB7Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpCYWNrZ3JvdW5kOgotICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0
cykKLSAgICAgICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQocGFpbnRJbmZvLCBib3hS
ZWN0LmxvY2F0aW9uKCksIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yLCBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQ6Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJr
ZWRUZXh0Rm9yZWdyb3VuZChwYWludEluZm8sIGJveFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uOgot
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBtYXJrZWRUZXh0cykKLSAgICAgICAgICAg
IHBhaW50TWFya2VkVGV4dERlY29yYXRpb24ocGFpbnRJbmZvLCBib3hSZWN0LCBkZWNvcmF0aW9u
Q2xpcE91dFJlY3QsIG1hcmtlZFRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3Im
IGNvbG9yLCB1bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGNsYW1wZWRFbmRP
ZmZzZXQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKGNsYW1w
ZWRTdGFydE9mZnNldCA+PSBjbGFtcGVkRW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsKLSAgICB1cGRh
dGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xvciB9KTsgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKLQotICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBp
cyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNh
dGlvbgotICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9v
dEJveCA9IHJvb3QoKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9IHJvb3RCb3gu
c2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSByb290Qm94
LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKLQotICAgIC8vIFVzZSBz
YW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdo
ZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KLSAgICAvLyB0aGUgc2Ft
ZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIExheW91dFVuaXQg
ZGVsdGFZIHsgcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCB9OwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKLQotICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQoYm94T3JpZ2luLngoKSksIExheW91dFVu
aXQoYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobG9naWNhbFdpZHRoKCkpLCBz
ZWxlY3Rpb25IZWlnaHQgfTsKLSAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JU
ZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydE9mZnNldCwgY2xhbXBlZEVu
ZE9mZnNldCk7Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0
LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+Lgot
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRp
bmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOwotICAgIGlmIChzdHlsZSA9PSBNYXJrZWRUZXh0
QmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0LmV4cGFu
ZCgtMSwgLTEpOwotICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3ZlKDAuNSwgMC41KTsKLSAgICAg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCB7IGJhY2tncm91bmRS
ZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBjb2xvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LmZpbGxSZWN0KGJhY2tncm91bmRSZWN0LCBjb2xv
cik7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQotewotICAgIGlmIChtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gbGluZUZvbnQoKTsKLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0KLSAgICBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQgPSAwOwotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbWFya0V4aXN0c0FuZElzQWJv
dmUgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSk7Ci0gICAgY29uc3Qg
QXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0FuZElzQWJvdmUgPyBsaW5lU3R5
bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20oKTsKLSAgICBpZiAoIWVtcGhh
c2lzTWFyay5pc0VtcHR5KCkpCi0gICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9ICptYXJrRXhp
c3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBmb250LmVtcGhh
c2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50
KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01hcmspOwotCi0gICAgVGV4dFBh
aW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07Ci0gICAgdGV4dFBhaW50ZXIuc2V0Rm9udChm
b250KTsKLSAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHls
ZXMpOwotICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwoKSk7Ci0g
ICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewotICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKLSAgICAg
ICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCi0gICAgICAgICAgICB0ZXh0
UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIo
KSk7Ci0gICAgfQotICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmss
IGVtcGhhc2lzTWFya09mZnNldCwgY29tYmluZWRUZXh0KCkpOwotICAgIGlmIChhdXRvKiBkZWJ1
Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coZGVidWdTaGFkb3cpOwotCi0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigp
OwotICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCgqdGhpcywgcGFp
bnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVuKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07Ci0gICAgaWYgKG1hcmtlZFRl
eHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCkgewotICAgICAgICBzdGF0ZVNh
dmVyLnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFs
cGhhKTsKLSAgICB9Ci0gICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUg
YW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZSh0ZXh0UnVuLCBib3hSZWN0LCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoYm94UmVj
dCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLX0KLQot
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0g
ICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0g
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0
eWxlcyk7Ci0KLSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gY29tYmluZWRUZXh0KCk7Ci0gICAg
aWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDbG9ja3dpc2UpKTsKLQotICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24K
LSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7Ci0gICAg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7Ci0gICAgaWYgKHN0YXJ0
T2Zmc2V0ID49IGVuZE9mZnNldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90ZSB0aGF0
IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVk
IGluIHRoZSB0cnVuY2F0aW9uCi0gICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCi0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwotCi0gICAgLy8gQXZvaWQgbWVhc3Vy
aW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gYm94UmVj
dDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkp
IHsKLSAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBib3hSZWN0LngoKSwgYm94
UmVjdC55KCksIGJveFJlY3Qud2lkdGgoKSwgYm94UmVjdC5oZWlnaHQoKSB9OwotICAgICAgICBs
aW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJl
Y3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICBzbmFwcGVkU2VsZWN0aW9uUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25S
ZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5s
dHIoKSk7Ci0gICAgfQotCi0gICAgLy8gMi4gUGFpbnQKLSAgICBhdXRvIHRleHREZWNvcmF0aW9u
cyA9IGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Ci0gICAgdGV4dERlY29y
YXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0
Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRl
eHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNv
cmF0aW9ucywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4
dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcih0aGlzKSk7Ci0g
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgo
KSk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgp
KTsKLSAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAgICAgIGRlY29y
YXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKGxpbmVTdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkK
LSAgICAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5l
U3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBpc0RyYWdnZWRDb250ZW50ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRl
eHQ6OkRyYWdnZWRDb250ZW50OwotICAgICAgICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xp
cE91dFJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKLSAg
ICAgICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50KQotICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7Ci0gICAgICAgICAgICBpZiAoIWNsaXBP
dXRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91
dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERl
Y29yYXRpb24odGV4dFJ1bi5zdWJSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zm
c2V0KSwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25hcHBl
ZFNlbGVjdGlvblJlY3QubG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGlzQ29tYmluZWRU
ZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVy
Y2xvY2t3aXNlKSk7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbikKLXsKLSAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVS
YW5nZSgpOwotCi0gICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRp
b25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIHBhaW50TWFya2VkVGV4dEJhY2tn
cm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4sIENvbXBvc2l0aW9uSGlnaGxpZ2h0OjpkZWZhdWx0
Q29tcG9zaXRpb25GaWxsQ29sb3IsIHNlbGVjdGFibGVSYW5nZS5jbGFtcChyZW5kZXJlcigpLmZy
YW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25TdGFydCgpKSwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbkVuZCgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgewotICAgICAg
ICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA8PSBtX3N0YXJ0KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBlbmQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0g
PSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQu
ZW5kT2Zmc2V0KTsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8s
IGJveE9yaWdpbiwgaGlnaGxpZ2h0LmNvbG9yLCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIE1h
cmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOwotCi0gICAgICAgIGlmIChoaWdobGln
aHQuZW5kT2Zmc2V0ID4gZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZv
aWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikgY29uc3QKIHsKICAg
ICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKQEAgLTEwODksMTIgKzkwNiwx
MiBAQCBTdHJpbmcgTGVnYWN5SW5saW5lVGV4dEJveDo6dGV4dChib29sIGlnbm9yZUNvbWJpbmVk
VGV4dCwgYm9vbCBpZ25vcmVIeXBoZW4pIGNvbgogICAgIHJldHVybiBSZW5kZXJCbG9jazo6dXBk
YXRlU2VjdXJpdHlEaXNjQ2hhcmFjdGVycyhsaW5lU3R5bGUoKSwgV1RGTW92ZShyZXN1bHQpKTsK
IH0KIAotaW5saW5lIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBMZWdhY3lJbmxpbmVUZXh0Qm94
Ojpjb21iaW5lZFRleHQoKSBjb25zdAorY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIExlZ2FjeUlu
bGluZVRleHRCb3g6OmNvbWJpbmVkVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxpbmVTdHls
ZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkp
ICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJlcigpKS5pc0NvbWJpbmVkKCkg
PyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkpIDogbnVsbHB0cjsKIH0K
IAotU2hhZG93RGF0YSogTGVnYWN5SW5saW5lVGV4dEJveDo6ZGVidWdUZXh0U2hhZG93KCkKK2Nv
bnN0IFNoYWRvd0RhdGEqIExlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdygpIGNv
bnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkubGVnYWN5TGluZUxheW91dFZp
c3VhbENvdmVyYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCmluZGV4IDg5MmYyMDIw
ODI5NS4uMTMwYjIxOTY1ZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmgKQEAgLTE2MywyNiArMTYzLDIwIEBAIHB1YmxpYzoKICAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTWFya2VkVGV4dCYpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94UGFpbnRlcjsK
IAotICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0cyhQYWludEluZm8mLCBNYXJrZWRUZXh0OjpQYWlu
dFBoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJr
ZWRUZXh0PiYsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRSZWN0ID0geyB9KTsK
KyAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKIAogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgTWFya2VkVGV4dCYpOwog
ICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pOwogCi0gICAgdm9pZCBwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pOwogICAg
IHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luKSBjb25zdDsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmUoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3Np
dGlvblVuZGVybGluZSYpIGNvbnN0OwogCi0gICAgZW51bSBjbGFzcyBNYXJrZWRUZXh0QmFja2dy
b3VuZFN0eWxlIDogYm9vbCB7IERlZmF1bHQsIFJvdW5kZWQgfTsKLSAgICB2b2lkIHBhaW50TWFy
a2VkVGV4dEJhY2tncm91bmQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBDb2xvciYsIHVuc2lnbmVkIGNsYW1wZWRTdGFydE9mZnNldCwgdW5zaWduZWQgY2xh
bXBlZEVuZE9mZnNldCwgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZSA9IE1hcmtlZFRleHRCYWNr
Z3JvdW5kU3R5bGU6OkRlZmF1bHQpOwotICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0Rm9yZWdyb3Vu
ZChQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtl
ZFRleHQmKTsKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dERlY29yYXRpb24oUGFpbnRJbmZvJiwg
Y29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBj
b25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7Ci0KICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCog
Y29tYmluZWRUZXh0KCkgY29uc3Q7CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkg
Y29uc3Q7CiAKLSAgICBTaGFkb3dEYXRhKiBkZWJ1Z1RleHRTaGFkb3coKTsKKyAgICBjb25zdCBT
aGFkb3dEYXRhKiBkZWJ1Z1RleHRTaGFkb3coKSBjb25zdDsKIAogICAgIFN0cmluZyB0ZXh0KGJv
b2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wgaWdub3JlSHlwaGVuID0gZmFsc2Up
IGNvbnN0OyAvLyBUaGUgZWZmZWN0aXZlIHRleHQgZm9yIHRoZSBydW4uCiAgICAgVGV4dFJ1biBj
cmVhdGVUZXh0UnVuKGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wgaWdub3Jl
SHlwaGVuID0gZmFsc2UpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxl
ZE1hcmtlZFRleHQuY3BwCmluZGV4IDM1NTY0Y2U0M2E1OC4uYzljZmM3ZmY1ZGIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwCkBAIC0xMTEsNyAr
MTExLDYgQEAgc3RhdGljIFN0eWxlZE1hcmtlZFRleHQ6OlN0eWxlIGNvbXB1dGVTdHlsZUZvclVu
bWFya2VkTWFya2VkVGV4dChjb25zdCBSZW5kZXJUZXgKICAgICBzdHlsZS50ZXh0RGVjb3JhdGlv
blN0eWxlcyA9IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6c3R5bGVzRm9yUmVuZGVyZXIocmVuZGVy
ZXIsIGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCBpc0ZpcnN0TGluZSk7CiAg
ICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0UGFpbnRTdHlsZShyZW5kZXJlci5mcmFt
ZSgpLCBsaW5lU3R5bGUsIHBhaW50SW5mbyk7CiAgICAgc3R5bGUudGV4dFNoYWRvdyA9IFNoYWRv
d0RhdGE6OmNsb25lKHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IGxpbmVT
dHlsZS50ZXh0U2hhZG93KCkpOwotICAgIHN0eWxlLmFscGhhID0gMTsKICAgICByZXR1cm4gc3R5
bGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5oCmlu
ZGV4IDFiMTk2NTEwYWNkMC4uMjRlNmMyN2I2MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TdHlsZWRNYXJrZWRUZXh0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RydWN0IFN0eWxlZE1h
cmtlZFRleHQgOiBNYXJrZWRUZXh0IHsKICAgICAgICAgVGV4dFBhaW50U3R5bGUgdGV4dFN0eWxl
czsKICAgICAgICAgVGV4dERlY29yYXRpb25QYWludGVyOjpTdHlsZXMgdGV4dERlY29yYXRpb25T
dHlsZXM7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93RGF0YT4gdGV4dFNoYWRvdzsKLSAg
ICAgICAgZmxvYXQgYWxwaGE7CisgICAgICAgIGZsb2F0IGFscGhhIHsgMSB9OwogICAgIH07CiAK
ICAgICBTdHlsZSBzdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGEzNmI3Mjcz
YmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQ
YWludGVyLmNwcApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKKworI2luY2x1ZGUgIkNvbXBvc2l0
aW9uSGlnaGxpZ2h0LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIlBh
aW50SW5mby5oIgorI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKKyNpbmNsdWRlICJUZXh0
UGFpbnRTdHlsZS5oIgorI2luY2x1ZGUgIlRleHRQYWludGVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworVGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGlu
ZVRleHRCb3gmIHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3Qm
IGJveFJlY3QpCisgICAgOiBtX3RleHRCb3godGV4dEJveCkKKyAgICAsIG1fcGFpbnRJbmZvKHBh
aW50SW5mbykKKyAgICAsIG1fYm94UmVjdChib3hSZWN0KQoreworICAgIGJvb2wgc2hvdWxkUm90
YXRlID0gIW1fdGV4dEJveC5pc0hvcml6b250YWwoKSAmJiAhbV90ZXh0Qm94LmNvbWJpbmVkVGV4
dCgpOworICAgIGlmIChzaG91bGRSb3RhdGUpCisgICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQo
KS5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDbG9ja3dpc2UpKTsKK30KKworVGV4dEJv
eFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcigpCit7CisgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAh
bV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpICYmICFtX3RleHRCb3guY29tYmluZWRUZXh0KCk7Cisg
ICAgaWYgKHNob3VsZFJvdGF0ZSkKKyAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNh
dENUTShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKK30KKwordm9pZCBU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQoreworICAgIGF1dG8g
c2VsZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOworCisgICAgYXV0
byYgZWRpdG9yID0gbV90ZXh0Qm94LnJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKTsKKworICAg
IGlmICghZWRpdG9yLmNvbXBvc2l0aW9uVXNlc0N1c3RvbUhpZ2hsaWdodHMoKSkgeworICAgICAg
ICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KGVkaXRvci5jb21wb3NpdGlvblN0YXJ0KCksIGVkaXRvci5jb21wb3NpdGlvbkVuZCgpKTsKKwor
ICAgICAgICBwYWludEJhY2tncm91bmQoY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kLCBDb21wb3Np
dGlvbkhpZ2hsaWdodDo6ZGVmYXVsdENvbXBvc2l0aW9uRmlsbENvbG9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogZWRpdG9yLmN1c3RvbUNv
bXBvc2l0aW9uSGlnaGxpZ2h0cygpKSB7CisgICAgICAgIGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0
IDw9IG1fdGV4dEJveC5zdGFydCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKGhpZ2hsaWdodC5zdGFydE9mZnNldCA+PSBtX3RleHRCb3guZW5kKCkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2Vs
ZWN0YWJsZVJhbmdlLmNsYW1wKGhpZ2hsaWdodC5zdGFydE9mZnNldCwgaGlnaGxpZ2h0LmVuZE9m
ZnNldCk7CisKKyAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKGNsYW1wZWRTdGFydCwgY2xhbXBlZEVu
ZCwgaGlnaGxpZ2h0LmNvbG9yLCBCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpOworCisgICAgICAg
IGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0ID4gbV90ZXh0Qm94LmVuZCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQo
Y29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICBwYWludEJhY2tncm91
bmQobWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQsIG1hcmtlZFRl
eHQuc3R5bGUuYmFja2dyb3VuZENvbG9yKTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFp
bnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmFja2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkKK3sKKyAg
ICBpZiAoc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCB9OworICAgIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZSB7IGNvbG9yIH0pOyAvLyBE
b24ndCBkcmF3IHRleHQgYXQgYWxsIQorCisgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlz
IHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0
aW9uCisgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KKyAgICBUZXh0UnVuIHRleHRSdW4g
PSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOworCisgICAgY29uc3QgTGVnYWN5Um9vdElubGlu
ZUJveCYgcm9vdEJveCA9IG1fdGV4dEJveC5yb290KCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rp
b25Cb3R0b20gPSByb290Qm94LnNlbGVjdGlvbkJvdHRvbSgpOworICAgIExheW91dFVuaXQgc2Vs
ZWN0aW9uVG9wID0gcm9vdEJveC5zZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2Nr
KCk7CisKKyAgICAvLyBVc2Ugc2FtZSB5IHBvc2l0aW9uaW5nIGFuZCBoZWlnaHQgYXMgZm9yIHNl
bGVjdGlvbiwgc28gdGhhdCB3aGVuIHRoZSBzZWxlY3Rpb24gYW5kIHRoaXMgc3VicmFuZ2UgYXJl
IG9uCisgICAgLy8gdGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91
dC4KKyAgICBMYXlvdXRVbml0IGRlbHRhWSB7IG1fdGV4dEJveC5yZW5kZXJlcigpLnN0eWxlKCku
aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tIC0gbV90ZXh0Qm94
LmxvZ2ljYWxCb3R0b20oKSA6IG1fdGV4dEJveC5sb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3Ag
fTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KDAsIHNlbGVjdGlvbkJvdHRvbSAtIHNlbGVjdGlvblRvcCk7CisKKyAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgeyBMYXlvdXRVbml0KG1fYm94UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fYm94
UmVjdC55KCkgLSBkZWx0YVkpLCBMYXlvdXRVbml0KG1fdGV4dEJveC5sb2dpY2FsV2lkdGgoKSks
IHNlbGVjdGlvbkhlaWdodCB9OworICAgIG1fdGV4dEJveC5saW5lRm9udCgpLmFkanVzdFNlbGVj
dGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOworCisgICAgLy8gRklYTUU6IFN1cHBvcnQgcGFpbnRpbmcgY29tYmluZWQgdGV4dC4g
U2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwOTkzPi4KKyAg
ICBhdXRvIGJhY2tncm91bmRSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5n
RGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fdGV4dEJveC5yZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSk7CisgICAgaWYgKGJhY2tncm91bmRT
dHlsZSA9PSBCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpIHsKKyAgICAgICAgYmFja2dyb3VuZFJl
Y3QuZXhwYW5kKC0xLCAtMSk7CisgICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmUoMC41LCAwLjUp
OworICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0IHsgYmFj
a2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgMiB9IH0sIGNvbG9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRleHQuZmlsbFJlY3QoYmFja2dyb3VuZFJl
Y3QsIGNvbG9yKTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKGNv
bnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgaWYgKG1hcmtlZFRleHQu
c3RhcnRPZmZzZXQgPj0gbWFya2VkVGV4dC5lbmRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IG1fdGV4dEJveC5saW5lRm9udCgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSBtX3RleHRCb3gubGluZVN0eWxlKCk7CisKKyAg
ICBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
bWFya0V4aXN0c0FuZElzQWJvdmUgPSBtX3RleHRCb3guZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNB
Ym92ZShsaW5lU3R5bGUpOworICAgIGNvbnN0IEF0b21TdHJpbmcmIGVtcGhhc2lzTWFyayA9IG1h
cmtFeGlzdHNBbmRJc0Fib3ZlID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSA6
IG51bGxBdG9tKCk7CisgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQorICAgICAgICBl
bXBoYXNpc01hcmtPZmZzZXQgPSAqbWFya0V4aXN0c0FuZElzQWJvdmUgPyAtZm9udC5mb250TWV0
cmljcygpLmFzY2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFyaykg
OiBmb250LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2NlbnQo
ZW1waGFzaXNNYXJrKTsKKworICAgIFRleHRQYWludGVyIHRleHRQYWludGVyIHsgY29udGV4dCB9
OworICAgIHRleHRQYWludGVyLnNldEZvbnQoZm9udCk7CisgICAgdGV4dFBhaW50ZXIuc2V0U3R5
bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0U3R5bGVzKTsKKyAgICB0ZXh0UGFpbnRlci5zZXRJc0hv
cml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsKKyAgICBpZiAobWFya2VkVGV4dC5z
dHlsZS50ZXh0U2hhZG93KSB7CisgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdygmbWFya2Vk
VGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOworICAgICAgICBpZiAobGluZVN0eWxlLmhh
c0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAgICAgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvd0Nv
bG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBwbGVDb2xvckZpbHRlcigpKTsKKyAgICB9CisgICAgdGV4
dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJrKGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0
LCBtX3RleHRCb3guY29tYmluZWRUZXh0KCkpOworICAgIGlmIChhdXRvKiBkZWJ1Z1NoYWRvdyA9
IG1fdGV4dEJveC5kZWJ1Z1RleHRTaGFkb3coKSkKKyAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hh
ZG93KGRlYnVnU2hhZG93KTsKKworICAgIFRleHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJveC5jcmVh
dGVUZXh0UnVuKCk7CisgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVk
KG1fdGV4dEJveCwgbV9wYWludEluZm8sIGZvbnQsIGNvbnRleHQsIHRleHRSdW4pOworCisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsK
KyAgICBpZiAobWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50KSB7
CisgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnNldEFscGhhKG1h
cmtlZFRleHQuc3R5bGUuYWxwaGEpOworICAgIH0KKyAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0
aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4K
KyAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4sIG1fYm94UmVjdCwgbV90ZXh0Qm94
LnRleHRPcmlnaW5Gcm9tQm94UmVjdChtX2JveFJlY3QpLCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0
LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50
RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGNsaXBPdXRSZWN0KQoreworICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlvbigpID09
IGNGdWxsVHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250ID0gbV90ZXh0Qm94LmxpbmVGb250KCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSA9IG1fdGV4dEJveC5saW5lU3R5bGUoKTsKKworICAgIHVwZGF0ZUdyYXBoaWNzQ29u
dGV4dChjb250ZXh0LCBtYXJrZWRUZXh0LnN0eWxlLnRleHRTdHlsZXMpOworCisgICAgYm9vbCBp
c0NvbWJpbmVkVGV4dCA9IG1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBpZiAoaXNDb21i
aW5lZFRleHQpCisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwg
Q2xvY2t3aXNlKSk7CisKKyAgICAvLyAxLiBDb21wdXRlIHRleHQgc2VsZWN0aW9uCisgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVk
IGVuZE9mZnNldCA9IG1hcmtlZFRleHQuZW5kT2Zmc2V0OworICAgIGlmIChzdGFydE9mZnNldCA+
PSBlbmRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUg
dGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUg
dHJ1bmNhdGlvbgorICAgIC8vIGRyYXcgaXRzIG93biBkZWNvcmF0aW9uLgorICAgIFRleHRSdW4g
dGV4dFJ1biA9IG1fdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisKKyAgICAvLyBBdm9pZCBtZWFz
dXJpbmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFu
IG9wdGltaXphdGlvbi4KKyAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBtX2Jv
eFJlY3Q7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IHx8IGVuZE9mZnNldCAhPSB0ZXh0UnVuLmxlbmd0
aCgpKSB7CisgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHsgbV9ib3hSZWN0Lngo
KSwgbV9ib3hSZWN0LnkoKSwgbV9ib3hSZWN0LndpZHRoKCksIG1fYm94UmVjdC5oZWlnaHQoKSB9
OworICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVj
dGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgICBzbmFwcGVkU2VsZWN0
aW9uUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxl
Y3Rpb25SZWN0LCBtX3RleHRCb3gucmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgIH0KKworICAgIC8vIDIuIFBhaW50CisgICAgYXV0
byB0ZXh0RGVjb3JhdGlvbnMgPSBsaW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsK
KyAgICB0ZXh0RGVjb3JhdGlvbnMuYWRkKFRleHREZWNvcmF0aW9uUGFpbnRlcjo6dGV4dERlY29y
YXRpb25zSW5FZmZlY3RGb3JTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGVzKSk7CisgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWludGVyIHsgY29u
dGV4dCwgdGV4dERlY29yYXRpb25zLCBtX3RleHRCb3gucmVuZGVyZXIoKSwgbV90ZXh0Qm94Lmlz
Rmlyc3RMaW5lKCksIGZvbnQsIG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMg
fTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0UnVuSXRlcmF0b3IoTGF5b3V0SW50ZWdy
YXRpb246OnRleHRSdW5Gb3IoJm1fdGV4dEJveCkpOworICAgIGRlY29yYXRpb25QYWludGVyLnNl
dFdpZHRoKHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCkpOworICAgIGRlY29yYXRpb25QYWlu
dGVyLnNldElzSG9yaXpvbnRhbChtX3RleHRCb3guaXNIb3Jpem9udGFsKCkpOworICAgIGlmICht
YXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsKKyAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIu
c2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOworICAg
ICAgICBpZiAobGluZVN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKKyAgICAgICAgICAgIGRl
Y29yYXRpb25QYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBwbGVDb2xv
ckZpbHRlcigpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQsIGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNEcmFn
Z2VkQ29udGVudCA9IG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVu
dDsKKyAgICAgICAgaWYgKGlzRHJhZ2dlZENvbnRlbnQgfHwgIWNsaXBPdXRSZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7CisgICAgICAgICAgICBpZiAoaXNE
cmFnZ2VkQ29udGVudCkKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRl
eHQuc3R5bGUuYWxwaGEpOworICAgICAgICAgICAgaWYgKCFjbGlwT3V0UmVjdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgY29udGV4dC5jbGlwT3V0KGNsaXBPdXRSZWN0KTsKKyAgICAgICAg
fQorICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5wYWludFRleHREZWNvcmF0aW9uKHRleHRSdW4u
c3ViUnVuKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCksIG1fdGV4dEJveC50
ZXh0T3JpZ2luRnJvbUJveFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVkU2VsZWN0
aW9uUmVjdC5sb2NhdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoaXNDb21iaW5lZFRleHQpCisg
ICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRlcmNsb2Nr
d2lzZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEJveFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2Y3ZDhjMGQ4OWZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVy
LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRDYXNj
YWRlOworY2xhc3MgTGVnYWN5SW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlckNvbWJpbmVUZXh0
Oworc3RydWN0IFBhaW50SW5mbzsKK3N0cnVjdCBTdHlsZWRNYXJrZWRUZXh0OworCitjbGFzcyBU
ZXh0Qm94UGFpbnRlciB7CitwdWJsaWM6CisgICAgVGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5
SW5saW5lVGV4dEJveCYsIFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCk7Cisg
ICAgflRleHRCb3hQYWludGVyKCk7CisKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKCk7CisgICAgdm9pZCBwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYp
OworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmKTsKKyAg
ICB2b2lkIHBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBjbGlwT3V0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBCYWNrZ3Jv
dW5kU3R5bGUgeyBOb3JtYWwsIFJvdW5kZWQgfTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZCh1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYsIEJh
Y2tncm91bmRTdHlsZSA9IEJhY2tncm91bmRTdHlsZTo6Tm9ybWFsKTsKKworICAgIGNvbnN0IExl
Z2FjeUlubGluZVRleHRCb3gmIG1fdGV4dEJveDsKKyAgICBQYWludEluZm8mIG1fcGFpbnRJbmZv
OworICAgIGNvbnN0IEZsb2F0UmVjdCBtX2JveFJlY3Q7Cit9OworCit9Cg==
</data>
<flag name="commit-queue"
          id="461128"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437861</attachid>
            <date>2021-09-10 06:29:03 -0700</date>
            <delta_ts>2021-09-10 06:39:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter-5.patch</filename>
            <type>text/plain</type>
            <size>37995</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWQxMmE2MmEyNzguLmE5ODIzY2RlNDA0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5l
VGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRlciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRo
ZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdhY3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBtZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQg
ZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRpbmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAg
IGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4
dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2Vk
VGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5
bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJr
ZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludERlY29yYXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRlZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjguLjBlYmM3MDllODE3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyODIsNiArMjI4Miw3IEBAIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCiBy
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3BwCityZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YzBlM2M3
ZjBkNS4uYzM1ZTA5NGEzMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjI0LDYgKzUyMjQsNyBAQAogCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRl
ckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0RE
MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFu
ZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKKwkJRTQ0MERGNTYyNkVCNTNFMDAwNEFG
MDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIu
aCAqLzsgfTsKIAkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi87IH07CiAJCUU0NDYxM0Ey
MENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYyOTAs
NiArMTYyOTEsOCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwREY1NDI2
RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dEJveFBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0MEZENTEyNUE0QUZERjAwRjdDODQ5IC8qIFN0eWxl
ZE1hcmtlZFRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVkTWFy
a2VkVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwRkQ1NDI1QTRBRkVF
MDBGN0M4NDkgLyogU3R5bGVkTWFya2VkVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHls
ZWRNYXJrZWRUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NTEwNzcy
MDJDN0UwMTAwNjU3RDMzIC8qIENvbXBpbGVkU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tcGlsZWRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjk4NjYsNiArMjk4NjksOCBAQAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBU
ZXh0QXV0b1NpemluZy5jcHAgKi8sCiAJCQkJMEY1NERDRTQxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmggKi8sCisJCQkJRTQ0MERGNTcyNkVCNTNFQTAwNEFGMDZCIC8qIFRleHRC
b3hQYWludGVyLmNwcCAqLywKKwkJCQlFNDQwREY1NDI2RUI1M0RGMDA0QUYwNkIgLyogVGV4dEJv
eFBhaW50ZXIuaCAqLywKIAkJCQlFNDQ3RjVCMTI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNl
bGVjdGFibGVSYW5nZS5oICovLAogCQkJCTU4MkRFMzIyMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwICovLAogCQkJCTU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAv
KiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLywKQEAgLTMyNTUyLDYgKzMyNTU3LDcgQEAKIAkJ
CQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MERGNTYy
NkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTA2NDBCMDI0MDc1ODdFMDBBQUUwNDUgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJENzcwNUM5MjU1MjhEMzQwMDFEMEM5NCAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMx
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTk2
ZjYzNzlkOTA2Li4xZjAzYmM0NzkyOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtlZFRleHQuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTE4NCw3ICsxODUsNyBAQCBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKICAgICBy
ZXR1cm4gc3RhdGU7CiB9CiAKLWlubGluZSBjb25zdCBGb250Q2FzY2FkZSYgTGVnYWN5SW5saW5l
VGV4dEJveDo6bGluZUZvbnQoKSBjb25zdAorY29uc3QgRm9udENhc2NhZGUmIExlZ2FjeUlubGlu
ZVRleHRCb3g6OmxpbmVGb250KCkgY29uc3QKIHsKICAgICByZXR1cm4gY29tYmluZWRUZXh0KCkg
PyBjb21iaW5lZFRleHQoKS0+dGV4dENvbWJpbmVGb250KCkgOiBsaW5lU3R5bGUoKS5mb250Q2Fz
Y2FkZSgpOwogfQpAQCAtMjEzLDcgKzIxNCw2IEBAIExheW91dFJlY3Qgc25hcHBlZFNlbGVjdGlv
blJlY3QoY29uc3QgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNhbFJpCiAg
ICAgcmV0dXJuIExheW91dFJlY3QgeyB0b3BQb2ludCwgTGF5b3V0U2l6ZSB7IHdpZHRoLCBoZWln
aHQgfSB9OwogfQogCi0vLyBGSVhNRTogU2hhcmUgbW9yZSBjb2RlIHdpdGggcGFpbnRNYXJrZWRU
ZXh0QmFja2dyb3VuZCgpLgogTGF5b3V0UmVjdCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsK
ICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlKCku
Y2xhbXAoc3RhcnRQb3MsIGVuZFBvcyk7CkBAIC00NzUsMTEgKzQ3NSw3IEBAIHZvaWQgTGVnYWN5
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvKiBjb21iaW5l
ZFRleHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKTsKLQotICAgIGJvb2wgc2hvdWxkUm90YXRlID0g
IWlzSG9yaXpvbnRhbCgpICYmICFjb21iaW5lZFRleHQ7Ci0gICAgaWYgKHNob3VsZFJvdGF0ZSkK
LSAgICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7
CisgICAgVGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKnRoaXMsIHBhaW50SW5mbywgYm94
UmVjdCk7CiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgaGF2ZSBjb21wb3Np
dGlvbiB1bmRlcmxpbmVzIHRvIGRyYXcuCiAgICAgYm9vbCBjb250YWluc0NvbXBvc2l0aW9uID0g
cmVuZGVyZXIoKS50ZXh0Tm9kZSgpICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21w
b3NpdGlvbk5vZGUoKSA9PSByZW5kZXJlcigpLnRleHROb2RlKCk7CkBAIC00ODksNyArNDg1LDcg
QEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAvLyBhbmQgY29tcG9zaXRpb24gdW5kZXJs
aW5lcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAm
JiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgIWlzUHJpbnRpbmcp
IHsKICAgICAgICAgaWYgKGNvbnRhaW5zQ29tcG9zaXRpb24gJiYgIXVzZUN1c3RvbVVuZGVybGlu
ZXMpCi0gICAgICAgICAgICBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChwYWludEluZm8sIGJv
eE9yaWdpbik7CisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludENvbXBvc2l0aW9uQmFj
a2dyb3VuZCgpOwogCiAgICAgICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0
YWJsZVJhbmdlKCk7CiAKQEAgLTUwOSw3ICs1MDUsOCBAQCB2b2lkIExlZ2FjeUlubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZgogICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRv
IG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICAgICAgYXV0byBj
b2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRq
YWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKIAotICAgICAgICBw
YWludE1hcmtlZFRleHRzKHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dy
b3VuZCwgYm94UmVjdCwgY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpOworICAgICAgICBmb3Ig
KGF1dG8mIG1hcmtlZFRleHQgOiBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAg
ICAgIHRleHRCb3hQYWludGVyLnBhaW50QmFja2dyb3VuZChtYXJrZWRUZXh0KTsKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogUmlnaHQgbm93LCBMZWdhY3lJbmxpbmVUZXh0Qm94ZXMgbmV2ZXIgY2Fs
bCBhZGRSZWxldmFudFVucGFpbnRlZE9iamVjdCgpIGV2ZW4gdGhvdWdoIHRoZXkgbWlnaHQKQEAg
LTU2NSw3ICs1NjIsOCBAQCB2b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgIC8vIENvYWxlc2Nl
IHN0eWxlcyBvZiBhZGphY2VudCBtYXJrZWQgdGV4dHMgdG8gbWluaW1pemUgdGhlIG51bWJlciBv
ZiBkcmF3aW5nIGNvbW1hbmRzLgogICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMg
PSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFsRm9yZWdyb3VuZChz
dHlsZWRNYXJrZWRUZXh0cyk7CiAKLSAgICBwYWludE1hcmtlZFRleHRzKHBhaW50SW5mbywgTWFy
a2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCwgYm94UmVjdCwgY29hbGVzY2VkU3R5bGVk
TWFya2VkVGV4dHMpOworICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxl
ZE1hcmtlZFRleHRzKQorICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludEZvcmVncm91bmQobWFy
a2VkVGV4dCk7CiAKICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwogICAgIGF1dG8gdGV4dERlY29y
YXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CkBAIC02MDQsMTUg
KzYwMiwxMyBAQCB2b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICAvLyBDb2FsZXNjZSBz
dHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Yg
ZHJhd2luZyBjb21tYW5kcy4KICAgICAgICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0
cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxEZWNvcmF0aW9u
cyhzdHlsZWRNYXJrZWRUZXh0cyk7CiAKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludElu
Zm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24sIGJveFJlY3QsIGNvYWxlc2Nl
ZFN0eWxlZE1hcmtlZFRleHRzLCB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0KTsK
KyAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4
dHMpCisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludERlY29yYXRpb24obWFya2VkVGV4
dCwgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdCk7CiAgICAgfQogCiAgICAgLy8g
My4gUGFpbnQgZmFuY3kgZGVjb3JhdGlvbnMsIGluY2x1ZGluZyBjb21wb3NpdGlvbiB1bmRlcmxp
bmVzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB1bmRlcmxpbmVzIGZvciBzcGVsbGluZyBlcnJvcnMs
IGdyYW1tYXIgZXJyb3JzLCBldCBjZXRlcmEuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHVzZUN1c3RvbVVuZGVybGluZXMpCi0gICAgICAgIHBh
aW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKHBhaW50SW5mbywgYm94T3JpZ2luKTsKLSAgICAKLSAg
ICBpZiAoc2hvdWxkUm90YXRlKQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CisgICAgICAgIHBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmVzKHBhaW50SW5mbywgYm94T3JpZ2luKTsgICAgCiB9CiAKIFRleHRCb3hTZWxlY3RhYmxl
UmFuZ2UgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QKQEAgLTc0
MywxODUgKzczOSw2IEBAIEZsb2F0UG9pbnQgTGVnYWN5SW5saW5lVGV4dEJveDo6dGV4dE9yaWdp
bkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkKICAgICByZXR1cm4gdGV4dE9y
aWdpbjsKIH0KIAotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlIHBoYXNlLCBjb25zdCBG
bG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYgbWFya2Vk
VGV4dHMsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRSZWN0KQotewotICAgIHN3
aXRjaCAocGhhc2UpIHsKLSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91
bmQ6Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAg
ICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveFJlY3QubG9jYXRp
b24oKSwgbWFya2VkVGV4dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsIG1hcmtlZFRleHQuc3RhcnRP
ZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZDoKLSAgICAgICAgZm9yIChhdXRvJiBt
YXJrZWRUZXh0IDogbWFya2VkVGV4dHMpCi0gICAgICAgICAgICBwYWludE1hcmtlZFRleHRGb3Jl
Z3JvdW5kKHBhaW50SW5mbywgYm94UmVjdCwgbWFya2VkVGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb246Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJr
ZWRUZXh0RGVjb3JhdGlvbihwYWludEluZm8sIGJveFJlY3QsIGRlY29yYXRpb25DbGlwT3V0UmVj
dCwgbWFya2VkVGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5
SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb2xvciYgY29sb3IsIHVu
c2lnbmVkIGNsYW1wZWRTdGFydE9mZnNldCwgdW5zaWduZWQgY2xhbXBlZEVuZE9mZnNldCwgTWFy
a2VkVGV4dEJhY2tncm91bmRTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAoY2xhbXBlZFN0YXJ0T2Zm
c2V0ID49IGNsYW1wZWRFbmRPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCB9OwotICAgIHVwZGF0ZUdyYXBoaWNz
Q29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZSB7IGNvbG9yIH0pOyAvLyBEb24ndCBkcmF3
IHRleHQgYXQgYWxsIQotCi0gICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRl
ZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCi0gICAg
Ly8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVU
ZXh0UnVuKCk7Ci0KLSAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94JiByb290Qm94ID0gcm9v
dCgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rpb25C
b3R0b20oKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHJvb3RCb3guc2VsZWN0aW9u
VG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOwotCi0gICAgLy8gVXNlIHNhbWUgeSBwb3Np
dGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBzZWxlY3Rpb24sIHNvIHRoYXQgd2hlbiB0aGUgc2Vs
ZWN0aW9uIGFuZCB0aGlzIHN1YnJhbmdlIGFyZSBvbgotICAgIC8vIHRoZSBzYW1lIHdvcmQgdGhl
cmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCi0gICAgTGF5b3V0VW5pdCBkZWx0YVkgeyBy
ZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9u
Qm90dG9tIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07
Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSBzdGQ6Om1heDxMYXlvdXRVbml0Pigw
LCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25Ub3ApOwotCi0gICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0IHsgTGF5b3V0VW5pdChib3hPcmlnaW4ueCgpKSwgTGF5b3V0VW5pdChib3hPcmln
aW4ueSgpIC0gZGVsdGFZKSwgTGF5b3V0VW5pdChsb2dpY2FsV2lkdGgoKSksIHNlbGVjdGlvbkhl
aWdodCB9OwotICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0T2Zmc2V0LCBjbGFtcGVkRW5kT2Zmc2V0KTsK
LQotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHBhaW50aW5nIGNvbWJpbmVkIHRleHQuIFNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDk5Mz4uCi0gICAgYXV0byBi
YWNrZ3JvdW5kUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlv
bihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSwgdGV4dFJ1bi5sdHIoKSk7Ci0gICAgaWYgKHN0eWxlID09IE1hcmtlZFRleHRCYWNrZ3JvdW5k
U3R5bGU6OlJvdW5kZWQpIHsKLSAgICAgICAgYmFja2dyb3VuZFJlY3QuZXhwYW5kKC0xLCAtMSk7
Ci0gICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmUoMC41LCAwLjUpOwotICAgICAgICBjb250ZXh0
LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0IHsgYmFja2dyb3VuZFJlY3QsIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpIHsgMiB9IH0sIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNvbnRleHQuZmlsbFJlY3QoYmFja2dyb3VuZFJlY3QsIGNvbG9yKTsKLX0KLQot
dm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRGb3JlZ3JvdW5kKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFN0eWxlZE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQg
Pj0gbWFya2VkVGV4dC5lbmRPZmZzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29uc3QgRm9udENh
c2NhZGUmIGZvbnQgPSBsaW5lRm9udCgpOwotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLQotICAgIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCA9
IDA7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiBtYXJrRXhpc3RzQW5kSXNBYm92ZSA9IGVtcGhh
c2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlKTsKLSAgICBjb25zdCBBdG9tU3RyaW5n
JiBlbXBoYXNpc01hcmsgPSBtYXJrRXhpc3RzQW5kSXNBYm92ZSA/IGxpbmVTdHlsZS50ZXh0RW1w
aGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbSgpOwotICAgIGlmICghZW1waGFzaXNNYXJrLmlz
RW1wdHkoKSkKLSAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gKm1hcmtFeGlzdHNBbmRJc0Fi
b3ZlID8gLWZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGZvbnQuZW1waGFzaXNNYXJrRGVz
Y2VudChlbXBoYXNpc01hcmspIDogZm9udC5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGZvbnQu
ZW1waGFzaXNNYXJrQXNjZW50KGVtcGhhc2lzTWFyayk7Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0
UGFpbnRlciB7IGNvbnRleHQgfTsKLSAgICB0ZXh0UGFpbnRlci5zZXRGb250KGZvbnQpOwotICAg
IHRleHRQYWludGVyLnNldFN0eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4dFN0eWxlcyk7Ci0gICAg
dGV4dFBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgpKTsKLSAgICBpZiAobWFy
a2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAgICAgIHRleHRQYWludGVyLnNldFNoYWRv
dygmbWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOwotICAgICAgICBpZiAobGlu
ZVN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKLSAgICAgICAgICAgIHRleHRQYWludGVyLnNl
dFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBwbGVDb2xvckZpbHRlcigpKTsKLSAgICB9
Ci0gICAgdGV4dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJrKGVtcGhhc2lzTWFyaywgZW1waGFzaXNN
YXJrT2Zmc2V0LCBjb21iaW5lZFRleHQoKSk7Ci0gICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0g
ZGVidWdUZXh0U2hhZG93KCkpCi0gICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdyhkZWJ1Z1No
YWRvdyk7Ci0KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0gICAgdGV4
dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCp0aGlzLCBwYWludEluZm8sIGZv
bnQsIGNvbnRleHQsIHRleHRSdW4pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAgICBpZiAobWFya2VkVGV4dC50eXBlID09
IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50KSB7Ci0gICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgp
OwotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwotICAg
IH0KLSAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBv
cmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4KLSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdl
KHRleHRSdW4sIGJveFJlY3QsIHRleHRPcmlnaW5Gcm9tQm94UmVjdChib3hSZWN0KSwgbWFya2Vk
VGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwotfQotCi12b2lkIExlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dERlY29yYXRpb24oUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0
UmVjdCwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKLXsKLSAgICBpZiAobV90
cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKLSAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoY29udGV4dCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0U3R5bGVzKTsKLQot
ICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBjb21iaW5lZFRleHQoKTsKLSAgICBpZiAoaXNDb21i
aW5lZFRleHQpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENs
b2Nrd2lzZSkpOwotCi0gICAgLy8gMS4gQ29tcHV0ZSB0ZXh0IHNlbGVjdGlvbgotICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gbWFya2VkVGV4dC5zdGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBtYXJrZWRUZXh0LmVuZE9mZnNldDsKLSAgICBpZiAoc3RhcnRPZmZzZXQgPj0g
ZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRl
eHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRy
dW5jYXRpb24KLSAgICAvLyBkcmF3IGl0cyBvd24gZGVjb3JhdGlvbi4KLSAgICBUZXh0UnVuIHRl
eHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0KLSAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRl
eHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlv
bi4KLSAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBib3hSZWN0OwotICAgIGlm
IChzdGFydE9mZnNldCB8fCBlbmRPZmZzZXQgIT0gdGV4dFJ1bi5sZW5ndGgoKSkgewotICAgICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IGJveFJlY3QueCgpLCBib3hSZWN0LnkoKSwg
Ym94UmVjdC53aWR0aCgpLCBib3hSZWN0LmhlaWdodCgpIH07Ci0gICAgICAgIGxpbmVGb250KCku
YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgIHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gc25hcFJl
Y3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKLSAg
ICB9Ci0KLSAgICAvLyAyLiBQYWludAotICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0
eWxlKCkudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLSAgICB0ZXh0RGVjb3JhdGlvbnMuYWRk
KFRleHREZWNvcmF0aW9uUGFpbnRlcjo6dGV4dERlY29yYXRpb25zSW5FZmZlY3RGb3JTdHlsZSht
YXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzKSk7Ci0gICAgVGV4dERlY29yYXRp
b25QYWludGVyIGRlY29yYXRpb25QYWludGVyIHsgY29udGV4dCwgdGV4dERlY29yYXRpb25zLCBy
ZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBsaW5lRm9udCgpLCBtYXJrZWRUZXh0LnN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzIH07Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0
ZXJhdG9yKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKHRoaXMpKTsKLSAgICBkZWNvcmF0
aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKLSAgICBk
ZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwoaXNIb3Jpem9udGFsKCkpOwotICAgIGlm
IChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsKLSAgICAgICAgZGVjb3JhdGlvblBhaW50
ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZhbHVlKCkpOwot
ICAgICAgICBpZiAobGluZVN0eWxlKCkuaGFzQXBwbGVDb2xvckZpbHRlcigpKQotICAgICAgICAg
ICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZSgpLmFw
cGxlQ29sb3JGaWx0ZXIoKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0LCBmYWxzZSB9OwotICAgICAgICBib29s
IGlzRHJhZ2dlZENvbnRlbnQgPSBtYXJrZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6RHJhZ2dl
ZENvbnRlbnQ7Ci0gICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50IHx8ICFjbGlwT3V0UmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgICAgICAgICAg
aWYgKGlzRHJhZ2dlZENvbnRlbnQpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRBbHBoYSht
YXJrZWRUZXh0LnN0eWxlLmFscGhhKTsKLSAgICAgICAgICAgIGlmICghY2xpcE91dFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY2xpcE91dChjbGlwT3V0UmVjdCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0
ZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCB0ZXh0
T3JpZ2luRnJvbUJveFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVkU2VsZWN0aW9u
UmVjdC5sb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNDb21iaW5lZFRleHQpCi0gICAg
ICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2Up
KTsKLX0KLQotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKQot
ewotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJhbmdlKCk7Ci0K
LSAgICBpZiAoIXJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0
b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChwYWlu
dEluZm8sIGJveE9yaWdpbiwgQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlv
bkZpbGxDb2xvciwgc2VsZWN0YWJsZVJhbmdlLmNsYW1wKHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0
b3IoKS5jb21wb3NpdGlvblN0YXJ0KCkpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAocmVuZGVyZXIo
KS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogcmVuZGVyZXIoKS5mcmFtZSgpLmVk
aXRvcigpLmN1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0cygpKSB7Ci0gICAgICAgIGlmIChoaWdo
bGlnaHQuZW5kT2Zmc2V0IDw9IG1fc3RhcnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49IGVuZCgpKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFi
bGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQsIGhpZ2hsaWdodC5lbmRPZmZzZXQp
OwotICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKHBhaW50SW5mbywgYm94T3JpZ2lu
LCBoaWdobGlnaHQuY29sb3IsIGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwgTWFya2VkVGV4dEJh
Y2tncm91bmRTdHlsZTo6Um91bmRlZCk7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZz
ZXQgPiBlbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKSBjb25zdAogewogICAgIGlmIChtX3Ry
dW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQpAQCAtMTA4OSwxMiArOTA2LDEyIEBAIFN0cmlu
ZyBMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0KGJvb2wgaWdub3JlQ29tYmluZWRUZXh0LCBib29s
IGlnbm9yZUh5cGhlbikgY29uCiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjp1cGRhdGVTZWN1cml0
eURpc2NDaGFyYWN0ZXJzKGxpbmVTdHlsZSgpLCBXVEZNb3ZlKHJlc3VsdCkpOwogfQogCi1pbmxp
bmUgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIExlZ2FjeUlubGluZVRleHRCb3g6OmNvbWJpbmVk
VGV4dCgpIGNvbnN0Citjb25zdCBSZW5kZXJDb21iaW5lVGV4dCogTGVnYWN5SW5saW5lVGV4dEJv
eDo6Y29tYmluZWRUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbGluZVN0eWxlKCkuaGFzVGV4
dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgJiYgZG93bmNh
c3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkpLmlzQ29tYmluZWQoKSA/ICZkb3duY2Fz
dDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkgOiBudWxscHRyOwogfQogCi1TaGFkb3dE
YXRhKiBMZWdhY3lJbmxpbmVUZXh0Qm94OjpkZWJ1Z1RleHRTaGFkb3coKQorY29uc3QgU2hhZG93
RGF0YSogTGVnYWN5SW5saW5lVGV4dEJveDo6ZGVidWdUZXh0U2hhZG93KCkgY29uc3QKIHsKICAg
ICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5sZWdhY3lMaW5lTGF5b3V0VmlzdWFsQ292ZXJh
Z2VFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKaW5kZXggODkyZjIwMjA4Mjk1Li4xMzBi
MjE5NjVkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRl
eHRCb3guaApAQCAtMTYzLDI2ICsxNjMsMjAgQEAgcHVibGljOgogICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBNYXJrZWRUZXh0JikgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CisgICAgZnJpZW5kIGNsYXNzIFRleHRCb3hQYWludGVyOwogCi0gICAgdm9p
ZCBwYWludE1hcmtlZFRleHRzKFBhaW50SW5mbyYsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2UsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZWNvcmF0aW9uQ2xpcE91dFJlY3QgPSB7IH0pOworICAgIEZsb2F0
UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAg
ICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBNYXJrZWRUZXh0Jik7CiAgICAgdm9pZCBw
YWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbik7CiAKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbik7CiAgICAgdm9pZCBwYWlu
dENvbXBvc2l0aW9uVW5kZXJsaW5lcyhQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4pIGNvbnN0OwogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShQYWludElu
Zm8mLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJs
aW5lJikgY29uc3Q7CiAKLSAgICBlbnVtIGNsYXNzIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUg
OiBib29sIHsgRGVmYXVsdCwgUm91bmRlZCB9OwotICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0QmFj
a2dyb3VuZChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IENv
bG9yJiwgdW5zaWduZWQgY2xhbXBlZFN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBjbGFtcGVkRW5kT2Zm
c2V0LCBNYXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlID0gTWFya2VkVGV4dEJhY2tncm91bmRTdHls
ZTo6RGVmYXVsdCk7Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHRGb3JlZ3JvdW5kKFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOwot
ICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0RGVjb3JhdGlvbihQYWludEluZm8mLCBjb25zdCBGbG9h
dFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxl
ZE1hcmtlZFRleHQmKTsKLQogICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRl
eHQoKSBjb25zdDsKICAgICBjb25zdCBGb250Q2FzY2FkZSYgbGluZUZvbnQoKSBjb25zdDsKIAot
ICAgIFNoYWRvd0RhdGEqIGRlYnVnVGV4dFNoYWRvdygpOworICAgIGNvbnN0IFNoYWRvd0RhdGEq
IGRlYnVnVGV4dFNoYWRvdygpIGNvbnN0OwogCiAgICAgU3RyaW5nIHRleHQoYm9vbCBpZ25vcmVD
b21iaW5lZFRleHQgPSBmYWxzZSwgYm9vbCBpZ25vcmVIeXBoZW4gPSBmYWxzZSkgY29uc3Q7IC8v
IFRoZSBlZmZlY3RpdmUgdGV4dCBmb3IgdGhlIHJ1bi4KICAgICBUZXh0UnVuIGNyZWF0ZVRleHRS
dW4oYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSBmYWxzZSwgYm9vbCBpZ25vcmVIeXBoZW4gPSBm
YWxzZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVk
TWFya2VkVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4
dC5jcHAKaW5kZXggMzU1NjRjZTQzYTU4Li5jOWNmYzdmZjVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5jcHAKQEAgLTExMSw3ICsxMTEsNiBAQCBz
dGF0aWMgU3R5bGVkTWFya2VkVGV4dDo6U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJr
ZWRUZXh0KGNvbnN0IFJlbmRlclRleAogICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzID0g
VGV4dERlY29yYXRpb25QYWludGVyOjpzdHlsZXNGb3JSZW5kZXJlcihyZW5kZXJlciwgbGluZVN0
eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCksIGlzRmlyc3RMaW5lKTsKICAgICBzdHlsZS50
ZXh0U3R5bGVzID0gY29tcHV0ZVRleHRQYWludFN0eWxlKHJlbmRlcmVyLmZyYW1lKCksIGxpbmVT
dHlsZSwgcGFpbnRJbmZvKTsKICAgICBzdHlsZS50ZXh0U2hhZG93ID0gU2hhZG93RGF0YTo6Y2xv
bmUocGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogbGluZVN0eWxlLnRleHRT
aGFkb3coKSk7Ci0gICAgc3R5bGUuYWxwaGEgPSAxOwogICAgIHJldHVybiBzdHlsZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmgKaW5kZXggMWIxOTY1
MTBhY2QwLi4yNGU2YzI3YjYzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TdHlsZWRNYXJrZWRUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxl
ZE1hcmtlZFRleHQuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4dCA6
IE1hcmtlZFRleHQgewogICAgICAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0U3R5bGVzOwogICAgICAg
ICBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlcyB0ZXh0RGVjb3JhdGlvblN0eWxlczsKICAg
ICAgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dEYXRhPiB0ZXh0U2hhZG93OwotICAgICAgICBmbG9h
dCBhbHBoYTsKKyAgICAgICAgZmxvYXQgYWxwaGEgeyAxIH07CiAgICAgfTsKIAogICAgIFN0eWxl
IHN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YTM2YjcyNzNiZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3Bw
CkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXh0Qm94UGFpbnRlci5oIgorCisjaW5jbHVkZSAiQ29tcG9zaXRpb25IaWdobGln
aHQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
CisjaW5jbHVkZSAiU3R5bGVkTWFya2VkVGV4dC5oIgorI2luY2x1ZGUgIlRleHRQYWludFN0eWxl
LmgiCisjaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
ZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYg
dGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkK
KyAgICA6IG1fdGV4dEJveCh0ZXh0Qm94KQorICAgICwgbV9wYWludEluZm8ocGFpbnRJbmZvKQor
ICAgICwgbV9ib3hSZWN0KGJveFJlY3QpCit7CisgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhbV90
ZXh0Qm94LmlzSG9yaXpvbnRhbCgpICYmICFtX3RleHRCb3guY29tYmluZWRUZXh0KCk7CisgICAg
aWYgKHNob3VsZFJvdGF0ZSkKKyAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNhdENU
TShyb3RhdGlvbihtX2JveFJlY3QsIENsb2Nrd2lzZSkpOworfQorCitUZXh0Qm94UGFpbnRlcjo6
flRleHRCb3hQYWludGVyKCkKK3sKKyAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFtX3RleHRCb3gu
aXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRleHQoKTsKKyAgICBpZiAoc2hv
dWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0
aW9uKG1fYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworfQorCit2b2lkIFRleHRCb3hQYWlu
dGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCit7CisgICAgYXV0byBzZWxlY3RhYmxl
UmFuZ2UgPSBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7CisKKyAgICBhdXRvJiBlZGl0b3Ig
PSBtX3RleHRCb3gucmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpOworCisgICAgaWYgKCFlZGl0
b3IuY29tcG9zaXRpb25Vc2VzQ3VzdG9tSGlnaGxpZ2h0cygpKSB7CisgICAgICAgIGF1dG8gW2Ns
YW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAoZWRpdG9yLmNv
bXBvc2l0aW9uU3RhcnQoKSwgZWRpdG9yLmNvbXBvc2l0aW9uRW5kKCkpOworCisgICAgICAgIHBh
aW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQsIENvbXBvc2l0aW9uSGlnaGxp
Z2h0OjpkZWZhdWx0Q29tcG9zaXRpb25GaWxsQ29sb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBlZGl0b3IuY3VzdG9tQ29tcG9zaXRpb25I
aWdobGlnaHRzKCkpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPD0gbV90ZXh0
Qm94LnN0YXJ0KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoaGlnaGxp
Z2h0LnN0YXJ0T2Zmc2V0ID49IG1fdGV4dEJveC5lbmQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFu
Z2UuY2xhbXAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0LCBoaWdobGlnaHQuZW5kT2Zmc2V0KTsKKwor
ICAgICAgICBwYWludEJhY2tncm91bmQoY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kLCBoaWdobGln
aHQuY29sb3IsIEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7CisKKyAgICAgICAgaWYgKGhpZ2hs
aWdodC5lbmRPZmZzZXQgPiBtX3RleHRCb3guZW5kKCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZChjb25zdCBTdHls
ZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQoreworICAgIHBhaW50QmFja2dyb3VuZChtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCwgbWFya2VkVGV4dC5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91
bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCYWNrZ3JvdW5kU3R5bGUgYmFja2dyb3VuZFN0eWxlKQoreworICAgIGlmIChzdGFy
dE9mZnNldCA+PSBlbmRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0IH07CisgICAgdXBkYXRlR3JhcGhpY3ND
b250ZXh0KGNvbnRleHQsIFRleHRQYWludFN0eWxlIHsgY29sb3IgfSk7IC8vIERvbid0IGRyYXcg
dGV4dCBhdCBhbGwhCisKKyAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVk
LCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KKyAgICAv
LyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgorICAgIFRleHRSdW4gdGV4dFJ1biA9IG1fdGV4dEJv
eC5jcmVhdGVUZXh0UnVuKCk7CisKKyAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94JiByb290
Qm94ID0gbV90ZXh0Qm94LnJvb3QoKTsKKyAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSA9
IHJvb3RCb3guc2VsZWN0aW9uQm90dG9tKCk7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3Ag
PSByb290Qm94LnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKTsKKworICAg
IC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBz
byB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KKyAgICAv
LyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgorICAgIExh
eW91dFVuaXQgZGVsdGFZIHsgbV90ZXh0Qm94LnJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRM
aW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20gLSBtX3RleHRCb3gubG9naWNhbEJv
dHRvbSgpIDogbV90ZXh0Qm94LmxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCB9OworICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgc2VsZWN0
aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKKworICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dCB7IExheW91dFVuaXQobV9ib3hSZWN0LngoKSksIExheW91dFVuaXQobV9ib3hSZWN0LnkoKSAt
IGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9u
SGVpZ2h0IH07CisgICAgbV90ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgorICAgIGF1dG8gYmFj
a2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24o
c2VsZWN0aW9uUmVjdCwgbV90ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKKyAgICBpZiAoYmFja2dyb3VuZFN0eWxlID09IEJh
Y2tncm91bmRTdHlsZTo6Um91bmRlZCkgeworICAgICAgICBiYWNrZ3JvdW5kUmVjdC5leHBhbmQo
LTEsIC0xKTsKKyAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZSgwLjUsIDAuNSk7CisgICAgICAg
IGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QgeyBiYWNrZ3JvdW5kUmVj
dCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgeyAyIH0gfSwgY29sb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29udGV4dC5maWxsUmVjdChiYWNrZ3JvdW5kUmVjdCwgY29sb3Ip
OworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVk
TWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNl
dCA+PSBtYXJrZWRUZXh0LmVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gbV90ZXh0Qm94LmxpbmVGb250KCk7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGxpbmVTdHlsZSA9IG1fdGV4dEJveC5saW5lU3R5bGUoKTsKKworICAgIGZsb2F0IGVt
cGhhc2lzTWFya09mZnNldCA9IDA7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBtYXJrRXhpc3Rz
QW5kSXNBYm92ZSA9IG1fdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVT
dHlsZSk7CisgICAgY29uc3QgQXRvbVN0cmluZyYgZW1waGFzaXNNYXJrID0gbWFya0V4aXN0c0Fu
ZElzQWJvdmUgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b20o
KTsKKyAgICBpZiAoIWVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCisgICAgICAgIGVtcGhhc2lzTWFy
a09mZnNldCA9ICptYXJrRXhpc3RzQW5kSXNBYm92ZSA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgLSBmb250LmVtcGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01h
cmspOworCisgICAgVGV4dFBhaW50ZXIgdGV4dFBhaW50ZXIgeyBjb250ZXh0IH07CisgICAgdGV4
dFBhaW50ZXIuc2V0Rm9udChmb250KTsKKyAgICB0ZXh0UGFpbnRlci5zZXRTdHlsZShtYXJrZWRU
ZXh0LnN0eWxlLnRleHRTdHlsZXMpOworICAgIHRleHRQYWludGVyLnNldElzSG9yaXpvbnRhbCht
X3RleHRCb3guaXNIb3Jpem9udGFsKCkpOworICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRT
aGFkb3cpIHsKKyAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxl
LnRleHRTaGFkb3cudmFsdWUoKSk7CisgICAgICAgIGlmIChsaW5lU3R5bGUuaGFzQXBwbGVDb2xv
ckZpbHRlcigpKQorICAgICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIo
JmxpbmVTdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOworICAgIH0KKyAgICB0ZXh0UGFpbnRlci5z
ZXRFbXBoYXNpc01hcmsoZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIG1fdGV4dEJv
eC5jb21iaW5lZFRleHQoKSk7CisgICAgaWYgKGF1dG8qIGRlYnVnU2hhZG93ID0gbV90ZXh0Qm94
LmRlYnVnVGV4dFNoYWRvdygpKQorICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdT
aGFkb3cpOworCisgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4o
KTsKKyAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQobV90ZXh0Qm94
LCBtX3BhaW50SW5mbywgZm9udCwgY29udGV4dCwgdGV4dFJ1bik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0LCBmYWxzZSB9OworICAgIGlmICht
YXJrZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQpIHsKKyAgICAgICAg
c3RhdGVTYXZlci5zYXZlKCk7CisgICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFya2VkVGV4dC5z
dHlsZS5hbHBoYSk7CisgICAgfQorICAgIC8vIFRleHRQYWludGVyIHdhbnRzIHRoZSBib3ggcmVj
dGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50aXJlIGxpbmUgYm94LgorICAgIHRleHRQ
YWludGVyLnBhaW50UmFuZ2UodGV4dFJ1biwgbV9ib3hSZWN0LCBtX3RleHRCb3gudGV4dE9yaWdp
bkZyb21Cb3hSZWN0KG1fYm94UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRl
eHQuZW5kT2Zmc2V0KTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9u
KGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cE91dFJlY3QpCit7CisgICAgaWYgKG1fdGV4dEJveC50cnVuY2F0aW9uKCkgPT0gY0Z1bGxUcnVu
Y2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQg
PSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBt
X3RleHRCb3gubGluZUZvbnQoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0g
bV90ZXh0Qm94LmxpbmVTdHlsZSgpOworCisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0eWxlcyk7CisKKyAgICBib29sIGlzQ29tYmluZWRU
ZXh0ID0gbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpOworICAgIGlmIChpc0NvbWJpbmVkVGV4dCkK
KyAgICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDbG9ja3dpc2Up
KTsKKworICAgIC8vIDEuIENvbXB1dGUgdGV4dCBzZWxlY3Rpb24KKyAgICB1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IG1hcmtlZFRleHQuc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0
ID0gbWFya2VkVGV4dC5lbmRPZmZzZXQ7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNl
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRy
dW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9u
CisgICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRpb24uCisgICAgVGV4dFJ1biB0ZXh0UnVuID0g
bV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4oKTsKKworICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUg
dGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0
aW9uLgorICAgIEZsb2F0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IG1fYm94UmVjdDsKKyAg
ICBpZiAoc3RhcnRPZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkpIHsKKyAg
ICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBtX2JveFJlY3QueCgpLCBtX2JveFJl
Y3QueSgpLCBtX2JveFJlY3Qud2lkdGgoKSwgbV9ib3hSZWN0LmhlaWdodCgpIH07CisgICAgICAg
IGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgICAgIHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IG1fdGV4dEJveC5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4
dFJ1bi5sdHIoKSk7CisgICAgfQorCisgICAgLy8gMi4gUGFpbnQKKyAgICBhdXRvIHRleHREZWNv
cmF0aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOworICAgIHRleHRE
ZWNvcmF0aW9ucy5hZGQoVGV4dERlY29yYXRpb25QYWludGVyOjp0ZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdEZvclN0eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMpKTsKKyAg
ICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIgeyBjb250ZXh0LCB0ZXh0
RGVjb3JhdGlvbnMsIG1fdGV4dEJveC5yZW5kZXJlcigpLCBtX3RleHRCb3guaXNGaXJzdExpbmUo
KSwgZm9udCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OworICAgIGRl
Y29yYXRpb25QYWludGVyLnNldFRleHRSdW5JdGVyYXRvcihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4
dFJ1bkZvcigmbV90ZXh0Qm94KSk7CisgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25h
cHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKSk7CisgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNI
b3Jpem9udGFsKG1fdGV4dEJveC5pc0hvcml6b250YWwoKSk7CisgICAgaWYgKG1hcmtlZFRleHQu
c3R5bGUudGV4dFNoYWRvdykgeworICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0U2hh
ZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cudmFsdWUoKSk7CisgICAgICAgIGlmIChs
aW5lU3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQorICAgICAgICAgICAgZGVjb3JhdGlvblBh
aW50ZXIuc2V0U2hhZG93Q29sb3JGaWx0ZXIoJmxpbmVTdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBpc0RyYWdnZWRDb250ZW50
ID0gbWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50OworICAgICAg
ICBpZiAoaXNEcmFnZ2VkQ29udGVudCB8fCAhY2xpcE91dFJlY3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICAgICAgICAgIGlmIChpc0RyYWdnZWRDb250
ZW50KQorICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5h
bHBoYSk7CisgICAgICAgICAgICBpZiAoIWNsaXBPdXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmNsaXBPdXQoY2xpcE91dFJlY3QpOworICAgICAgICB9CisgICAgICAg
IGRlY29yYXRpb25QYWludGVyLnBhaW50VGV4dERlY29yYXRpb24odGV4dFJ1bi5zdWJSdW4oc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSwgbV90ZXh0Qm94LnRleHRPcmlnaW5G
cm9tQm94UmVjdChzbmFwcGVkU2VsZWN0aW9uUmVjdCksIHNuYXBwZWRTZWxlY3Rpb25SZWN0Lmxv
Y2F0aW9uKCkpOworICAgIH0KKworICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKKyAgICAgICAgY29u
dGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZjdkOGMwZDg5ZmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaApAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udENhc2NhZGU7CitjbGFz
cyBMZWdhY3lJbmxpbmVUZXh0Qm94OworY2xhc3MgUmVuZGVyQ29tYmluZVRleHQ7CitzdHJ1Y3Qg
UGFpbnRJbmZvOworc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CisKK2NsYXNzIFRleHRCb3hQYWlu
dGVyIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0
Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KTsKKyAgICB+VGV4dEJv
eFBhaW50ZXIoKTsKKworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKKyAg
ICB2b2lkIHBhaW50QmFja2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7CisgICAgdm9p
ZCBwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOworICAgIHZvaWQgcGFp
bnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNs
aXBPdXRSZWN0KTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEJhY2tncm91bmRTdHlsZSB7
IE5vcm1hbCwgUm91bmRlZCB9OworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IENvbG9yJiwgQmFja2dyb3VuZFN0
eWxlID0gQmFja2dyb3VuZFN0eWxlOjpOb3JtYWwpOworCisgICAgY29uc3QgTGVnYWN5SW5saW5l
VGV4dEJveCYgbV90ZXh0Qm94OworICAgIFBhaW50SW5mbyYgbV9wYWludEluZm87CisgICAgY29u
c3QgRmxvYXRSZWN0IG1fYm94UmVjdDsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437863</attachid>
            <date>2021-09-10 06:39:54 -0700</date>
            <delta_ts>2021-09-10 08:20:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230147-20210910163953.patch</filename>
            <type>text/plain</type>
            <size>38527</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDlkMTJhNjJhMjc4MTg3
MDAyOWY3Yzg2NWM4YjEyNzM2OWVmZmE2Mi4uYTk4MjNjZGU0MDRhMjkyNTFmMjI3NGFlMmE5ZTg1
ZTM4ZDYwYzg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTA5LTEwICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgcGFpbnRpbmcg
ZnVuY3Rpb25zIGZyb20gTGVnYWN5SW5saW5lVGV4dEJveCBpbnRvIGEgY2xhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDE0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBUZXh0Qm94UGFpbnRl
ciBjbGFzcyBhbmQgbW92ZSBzb21lIG9mIHRoZSBwYWludGluZyBmdW5jdGlvbnMgZnJvbSBMZWdh
Y3lJbmxpbmVUZXh0Qm94IHRoZXJlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBt
ZWNoYW5pY2FsIGJ1dCB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIGRlY291cGxlIHRleHQgcGFpbnRp
bmcgZnJvbSB0aGUgbGVnYWN5CisgICAgICAgIGlubGluZSBib3hlcyBpbiB0aGUgZnV0dXJlLgor
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50
TWFya2VkVGV4dEJhY2tncm91bmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdyb3VuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUlubGluZVRleHRCb3g6OmRlYnVnVGV4dFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dHMpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHRCb3hQYWludGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjo6VGV4dEJveFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6
On5UZXh0Qm94UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFp
bnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50
ZXI6OnBhaW50QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6
cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWlu
dERlY29yYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOiBBZGRl
ZC4KKwogMjAyMS0wOS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3VsbCBpbmxpbmUgY3VsbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmZWZmOWQwNTlkZjhm
YzNkOWIyOGM4MGY3YTA2MGVmZmM1NTgxM2U4Li4wZWJjNzA5ZTgxNzI4NTYyYjQ1ZThhMDk2ZjVh
ODYzMDhkNDQwZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjI4Miw2ICsyMjgyLDcgQEAgcmVuZGVy
aW5nL1Njcm9sbEFsaWdubWVudC5jcHAKIHJlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3Bw
CiByZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4dC5jcHAKIHJlbmRlcmluZy9UYWJsZUxheW91dC5j
cHAKK3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwCiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCiByZW5kZXJpbmcvVGV4
dFBhaW50ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMjZjMGUzYzdmMGQ1OGZlZWE4MDg1OWMxOThiMjIxMmUwMDE3MTdh
YS4uYzM1ZTA5NGEzMDg1ZTRiOTA0YTBjMWZiZGY4OTlmMjZlYzU4OGMyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTIyNCw2
ICs1MjI0LDcgQEAKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0EwMjNB
MTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8q
IENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDBBQTk2
MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MEFBOTUxQzY4
NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggKi87IH07
CisJCUU0NDBERjU2MjZFQjUzRTAwMDRBRjA2QiAvKiBUZXh0Qm94UGFpbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MERGNTQyNkVCNTNERjAw
NEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggKi87IH07CiAJCUU0NDBGRDUzMjVBNEFGREYwMEY3
Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDQwRkQ1MTI1QTRBRkRGMDBGN0M4NDkgLyogU3R5bGVkTWFya2Vk
VGV4dC5oICovOyB9OwogCQlFNDQ2MTNBMjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0
NjEzOTAwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0
NjEzQTUwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkzMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MTWVkaWFFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTE2MjkwLDYgKzE2MjkxLDggQEAKIAkJRTQzQUY4RTQxQUM1QjdE
RDAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDYWNoZVZhbGlkYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDNBRjhFNTFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlVmFsaWRhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQwQUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVu
dEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ0MERGNTQyNkVCNTNERjAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hQYWludGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NDBERjU3MjZFQjUzRUEwMDRBRjA2QiAvKiBU
ZXh0Qm94UGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZXh0Qm94UGFpbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDBGRDUx
MjVBNEFGREYwMEY3Qzg0OSAvKiBTdHlsZWRNYXJrZWRUZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlZE1hcmtlZFRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ0MEZENTQyNUE0QUZFRTAwRjdDODQ5IC8qIFN0eWxlZE1hcmtlZFRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVkTWFya2VkVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0NDUxMDc3MjAyQzdFMDEwMDY1N0QzMyAvKiBDb21waWxlZFNlbGVj
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVkU2VsZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5ODY2LDYgKzI5ODY5LDggQEAKIAkJ
CQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQkwRjU0
RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovLAogCQkJCTBGNTRE
Q0U0MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5oICovLAorCQkJCUU0NDBERjU3
MjZFQjUzRUEwMDRBRjA2QiAvKiBUZXh0Qm94UGFpbnRlci5jcHAgKi8sCisJCQkJRTQ0MERGNTQy
NkVCNTNERjAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggKi8sCiAJCQkJRTQ0N0Y1QjEyNjZD
RjYzRDAwMTMzRjAwIC8qIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCAqLywKIAkJCQk1ODJERTMy
MjFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmNwcCAqLywKIAkJCQk1
ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmggKi8sCkBA
IC0zMjU1Miw2ICszMjU1Nyw3IEBACiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUU0NDBERjU2MjZFQjUzRTAwMDRBRjA2QiAvKiBUZXh0Qm94UGFpbnRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdl
QnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDOTI1NTI4RDM0MDAx
RDBDOTQgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guY3BwCmluZGV4IDE5NmY2Mzc5ZDkwNmE1N2ViZDllNGY5ZmY0ZjE1MzVjZDZi
ZjgzNjguLjFmMDNiYzQ3OTI4YjEzOWMzMDM2MmU2NTQ5N2U0NTNmMjlkZjJlODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTU0
LDYgKzU0LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlZE1hcmtl
ZFRleHQuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIK
ICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dERlY29y
YXRpb25QYWludGVyLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTE4NCw3ICsx
ODUsNyBAQCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6
OnNlbGVjdGlvblN0YXRlKCkKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKLWlubGluZSBjb25zdCBG
b250Q2FzY2FkZSYgTGVnYWN5SW5saW5lVGV4dEJveDo6bGluZUZvbnQoKSBjb25zdAorY29uc3Qg
Rm9udENhc2NhZGUmIExlZ2FjeUlubGluZVRleHRCb3g6OmxpbmVGb250KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gY29tYmluZWRUZXh0KCkgPyBjb21iaW5lZFRleHQoKS0+dGV4dENvbWJpbmVGb250
KCkgOiBsaW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpOwogfQpAQCAtMjEzLDcgKzIxNCw2IEBAIExh
eW91dFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgZmxvYXQgbG9naWNhbFJpCiAgICAgcmV0dXJuIExheW91dFJlY3QgeyB0b3BQb2ludCwg
TGF5b3V0U2l6ZSB7IHdpZHRoLCBoZWlnaHQgfSB9OwogfQogCi0vLyBGSVhNRTogU2hhcmUgbW9y
ZSBjb2RlIHdpdGggcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZCgpLgogTGF5b3V0UmVjdCBMZWdh
Y3lJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVu
c2lnbmVkIGVuZFBvcykgY29uc3QKIHsKICAgICBhdXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRF
bmRdID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAoc3RhcnRQb3MsIGVuZFBvcyk7CkBAIC00NzUs
MTEgKzQ3NSw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvKiBjb21iaW5lZFRleHQgPSB0aGlzLT5jb21iaW5lZFRleHQoKTsKLQot
ICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIWlzSG9yaXpvbnRhbCgpICYmICFjb21iaW5lZFRleHQ7
Ci0gICAgaWYgKHNob3VsZFJvdGF0ZSkKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0ocm90YXRp
b24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7CisgICAgVGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50
ZXIoKnRoaXMsIHBhaW50SW5mbywgYm94UmVjdCk7CiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhl
ciBvciBub3Qgd2UgaGF2ZSBjb21wb3NpdGlvbiB1bmRlcmxpbmVzIHRvIGRyYXcuCiAgICAgYm9v
bCBjb250YWluc0NvbXBvc2l0aW9uID0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpICYmIHJlbmRlcmVy
KCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbk5vZGUoKSA9PSByZW5kZXJlcigpLnRleHRO
b2RlKCk7CkBAIC00ODksNyArNDg1LDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAv
LyBhbmQgY29tcG9zaXRpb24gdW5kZXJsaW5lcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
VGV4dENsaXAgJiYgIWlzUHJpbnRpbmcpIHsKICAgICAgICAgaWYgKGNvbnRhaW5zQ29tcG9zaXRp
b24gJiYgIXVzZUN1c3RvbVVuZGVybGluZXMpCi0gICAgICAgICAgICBwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbik7CisgICAgICAgICAgICB0ZXh0Qm94UGFp
bnRlci5wYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOwogCiAgICAgICAgIGF1dG8gc2VsZWN0
YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJhbmdlKCk7CiAKQEAgLTUwOSw3ICs1MDUsOCBA
QCB2b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2Yg
YWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBj
b21tYW5kcy4KICAgICAgICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxl
ZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1h
cmtlZFRleHRzKTsKIAotICAgICAgICBwYWludE1hcmtlZFRleHRzKHBhaW50SW5mbywgTWFya2Vk
VGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCwgYm94UmVjdCwgY29hbGVzY2VkU3R5bGVkTWFy
a2VkVGV4dHMpOworICAgICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2FsZXNjZWRTdHls
ZWRNYXJrZWRUZXh0cykKKyAgICAgICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50QmFja2dyb3Vu
ZChtYXJrZWRUZXh0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogUmlnaHQgbm93LCBMZWdhY3lJ
bmxpbmVUZXh0Qm94ZXMgbmV2ZXIgY2FsbCBhZGRSZWxldmFudFVucGFpbnRlZE9iamVjdCgpIGV2
ZW4gdGhvdWdoIHRoZXkgbWlnaHQKQEAgLTU2NSw3ICs1NjIsOCBAQCB2b2lkIExlZ2FjeUlubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZgogICAgIC8vIENvYWxlc2NlIHN0eWxlcyBvZiBhZGphY2VudCBtYXJrZWQgdGV4dHMg
dG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBkcmF3aW5nIGNvbW1hbmRzLgogICAgIGF1dG8gY29h
bGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFj
ZW50V2l0aEVxdWFsRm9yZWdyb3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7CiAKLSAgICBwYWludE1h
cmtlZFRleHRzKHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCwg
Ym94UmVjdCwgY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpOworICAgIGZvciAoYXV0byYgbWFy
a2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKQorICAgICAgICB0ZXh0Qm94UGFp
bnRlci5wYWludEZvcmVncm91bmQobWFya2VkVGV4dCk7CiAKICAgICAvLyBQYWludCBkZWNvcmF0
aW9ucwogICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9u
c0luRWZmZWN0KCk7CkBAIC02MDQsMTUgKzYwMiwxMyBAQCB2b2lkIExlZ2FjeUlubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZgogICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRv
IG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICAgICAgYXV0byBj
b2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRq
YWNlbnRXaXRoRXF1YWxEZWNvcmF0aW9ucyhzdHlsZWRNYXJrZWRUZXh0cyk7CiAKLSAgICAgICAg
cGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29y
YXRpb24sIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzLCB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0KTsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDog
Y29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpCisgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5w
YWludERlY29yYXRpb24obWFya2VkVGV4dCwgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0
UmVjdCk7CiAgICAgfQogCiAgICAgLy8gMy4gUGFpbnQgZmFuY3kgZGVjb3JhdGlvbnMsIGluY2x1
ZGluZyBjb21wb3NpdGlvbiB1bmRlcmxpbmVzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB1bmRlcmxp
bmVzIGZvciBzcGVsbGluZyBlcnJvcnMsIGdyYW1tYXIgZXJyb3JzLCBldCBjZXRlcmEuCiAgICAg
aWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHVzZUN1c3Rv
bVVuZGVybGluZXMpCi0gICAgICAgIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKHBhaW50SW5m
bywgYm94T3JpZ2luKTsKLSAgICAKLSAgICBpZiAoc2hvdWxkUm90YXRlKQotICAgICAgICBjb250
ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CisgICAg
ICAgIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKHBhaW50SW5mbywgYm94T3JpZ2luKTsgICAg
CiB9CiAKIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0
YWJsZVJhbmdlKCkgY29uc3QKQEAgLTc0MywxODUgKzczOSw2IEBAIEZsb2F0UG9pbnQgTGVnYWN5
SW5saW5lVGV4dEJveDo6dGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm94
UmVjdCkKICAgICByZXR1cm4gdGV4dE9yaWdpbjsKIH0KIAotdm9pZCBMZWdhY3lJbmxpbmVUZXh0
Qm94OjpwYWludE1hcmtlZFRleHRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQ
YWludFBoYXNlIHBoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxT
dHlsZWRNYXJrZWRUZXh0PiYgbWFya2VkVGV4dHMsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlv
bkNsaXBPdXRSZWN0KQotewotICAgIHN3aXRjaCAocGhhc2UpIHsKLSAgICBjYXNlIE1hcmtlZFRl
eHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQ6Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4
dCA6IG1hcmtlZFRleHRzKQotICAgICAgICAgICAgcGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZChw
YWludEluZm8sIGJveFJlY3QubG9jYXRpb24oKSwgbWFya2VkVGV4dC5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IsIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3Vu
ZDoKLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogbWFya2VkVGV4dHMpCi0gICAgICAg
ICAgICBwYWludE1hcmtlZFRleHRGb3JlZ3JvdW5kKHBhaW50SW5mbywgYm94UmVjdCwgbWFya2Vk
VGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6
OkRlY29yYXRpb246Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRz
KQotICAgICAgICAgICAgcGFpbnRNYXJrZWRUZXh0RGVjb3JhdGlvbihwYWludEluZm8sIGJveFJl
Y3QsIGRlY29yYXRpb25DbGlwT3V0UmVjdCwgbWFya2VkVGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFj
a2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBDb2xvciYgY29sb3IsIHVuc2lnbmVkIGNsYW1wZWRTdGFydE9mZnNldCwgdW5zaWdu
ZWQgY2xhbXBlZEVuZE9mZnNldCwgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZSBzdHlsZSkKLXsK
LSAgICBpZiAoY2xhbXBlZFN0YXJ0T2Zmc2V0ID49IGNsYW1wZWRFbmRPZmZzZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4
dCB9OwotICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZSB7
IGNvbG9yIH0pOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotCi0gICAgLy8gTm90ZSB0aGF0
IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVk
IGluIHRoZSB0cnVuY2F0aW9uCi0gICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KLSAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0KLSAgICBjb25zdCBMZWdhY3lSb290
SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwotICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90
dG9tID0gcm9vdEJveC5zZWxlY3Rpb25Cb3R0b20oKTsKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlv
blRvcCA9IHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOwot
Ci0gICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBzZWxlY3Rp
b24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIHN1YnJhbmdlIGFyZSBvbgot
ICAgIC8vIHRoZSBzYW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCi0g
ICAgTGF5b3V0VW5pdCBkZWx0YVkgeyByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNX
cml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNh
bFRvcCgpIC0gc2VsZWN0aW9uVG9wIH07Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQg
PSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25Ub3Ap
OwotCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5b3V0VW5pdChib3hPcmlnaW4u
eCgpKSwgTGF5b3V0VW5pdChib3hPcmlnaW4ueSgpIC0gZGVsdGFZKSwgTGF5b3V0VW5pdChsb2dp
Y2FsV2lkdGgoKSksIHNlbGVjdGlvbkhlaWdodCB9OwotICAgIGxpbmVGb250KCkuYWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0T2Zm
c2V0LCBjbGFtcGVkRW5kT2Zmc2V0KTsKLQotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHBhaW50aW5n
IGNvbWJpbmVkIHRleHQuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MDk5Mz4uCi0gICAgYXV0byBiYWNrZ3JvdW5kUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSk7Ci0gICAgaWYgKHN0eWxl
ID09IE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpIHsKLSAgICAgICAgYmFja2dy
b3VuZFJlY3QuZXhwYW5kKC0xLCAtMSk7Ci0gICAgICAgIGJhY2tncm91bmRSZWN0Lm1vdmUoMC41
LCAwLjUpOwotICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0
IHsgYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgMiB9IH0sIGNvbG9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuZmlsbFJlY3QoYmFja2dy
b3VuZFJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1h
cmtlZFRleHRGb3JlZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3Qm
IGJveFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0gICAgaWYg
KG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgPj0gbWFya2VkVGV4dC5lbmRPZmZzZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0KCk7Ci0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5lRm9udCgpOwotICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLQotICAgIGZs
b2F0IGVtcGhhc2lzTWFya09mZnNldCA9IDA7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiBtYXJr
RXhpc3RzQW5kSXNBYm92ZSA9IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxl
KTsKLSAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBtYXJrRXhpc3RzQW5kSXNB
Ym92ZSA/IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbSgpOwot
ICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKLSAgICAgICAgZW1waGFzaXNNYXJrT2Zm
c2V0ID0gKm1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gLWZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAtIGZvbnQuZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9udC5mb250TWV0
cmljcygpLmRlc2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhhc2lzTWFyayk7
Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlciB7IGNvbnRleHQgfTsKLSAgICB0ZXh0UGFp
bnRlci5zZXRGb250KGZvbnQpOwotICAgIHRleHRQYWludGVyLnNldFN0eWxlKG1hcmtlZFRleHQu
c3R5bGUudGV4dFN0eWxlcyk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKGlzSG9y
aXpvbnRhbCgpKTsKLSAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7Ci0gICAg
ICAgIHRleHRQYWludGVyLnNldFNoYWRvdygmbWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93LnZh
bHVlKCkpOwotICAgICAgICBpZiAobGluZVN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKLSAg
ICAgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvd0NvbG9yRmlsdGVyKCZsaW5lU3R5bGUuYXBw
bGVDb2xvckZpbHRlcigpKTsKLSAgICB9Ci0gICAgdGV4dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJr
KGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb21iaW5lZFRleHQoKSk7Ci0gICAg
aWYgKGF1dG8qIGRlYnVnU2hhZG93ID0gZGVidWdUZXh0U2hhZG93KCkpCi0gICAgICAgIHRleHRQ
YWludGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdyk7Ci0KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBj
cmVhdGVUZXh0UnVuKCk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVl
ZGVkKCp0aGlzLCBwYWludEluZm8sIGZvbnQsIGNvbnRleHQsIHRleHRSdW4pOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyIHsgY29udGV4dCwgZmFsc2UgfTsKLSAg
ICBpZiAobWFya2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50KSB7Ci0g
ICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1hcmtl
ZFRleHQuc3R5bGUuYWxwaGEpOwotICAgIH0KLSAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0aGUg
Ym94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4KLSAg
ICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4sIGJveFJlY3QsIHRleHRPcmlnaW5Gcm9t
Qm94UmVjdChib3hSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRP
ZmZzZXQpOwotfQotCi12b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dERl
Y29yYXRpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFy
a2VkVGV4dCkKLXsKLSAgICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZv
LmNvbnRleHQoKTsKLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgbWFya2VkVGV4
dC5zdHlsZS50ZXh0U3R5bGVzKTsKLQotICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBjb21iaW5l
ZFRleHQoKTsKLSAgICBpZiAoaXNDb21iaW5lZFRleHQpCi0gICAgICAgIGNvbnRleHQuY29uY2F0
Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOwotCi0gICAgLy8gMS4gQ29tcHV0ZSB0
ZXh0IHNlbGVjdGlvbgotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbWFya2VkVGV4dC5zdGFy
dE9mZnNldDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtYXJrZWRUZXh0LmVuZE9mZnNldDsK
LSAgICBpZiAoc3RhcnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5n
IGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KLSAgICAvLyBkcmF3IGl0cyBvd24gZGVj
b3JhdGlvbi4KLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0KLSAgICAv
LyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNl
bGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4KLSAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlv
blJlY3QgPSBib3hSZWN0OwotICAgIGlmIChzdGFydE9mZnNldCB8fCBlbmRPZmZzZXQgIT0gdGV4
dFJ1bi5sZW5ndGgoKSkgewotICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IGJv
eFJlY3QueCgpLCBib3hSZWN0LnkoKSwgYm94UmVjdC53aWR0aCgpLCBib3hSZWN0LmhlaWdodCgp
IH07Ci0gICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgIHNuYXBw
ZWRTZWxlY3Rpb25SZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0
aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCB0ZXh0UnVuLmx0cigpKTsKLSAgICB9Ci0KLSAgICAvLyAyLiBQYWludAotICAgIGF1dG8g
dGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlKCkudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsK
LSAgICB0ZXh0RGVjb3JhdGlvbnMuYWRkKFRleHREZWNvcmF0aW9uUGFpbnRlcjo6dGV4dERlY29y
YXRpb25zSW5FZmZlY3RGb3JTdHlsZShtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGVzKSk7Ci0gICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWludGVyIHsgY29u
dGV4dCwgdGV4dERlY29yYXRpb25zLCByZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBsaW5lRm9u
dCgpLCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzIH07Ci0gICAgZGVjb3Jh
dGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKExheW91dEludGVncmF0aW9uOjp0ZXh0UnVu
Rm9yKHRoaXMpKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0
aW9uUmVjdC53aWR0aCgpKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwo
aXNIb3Jpem9udGFsKCkpOwotICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsK
LSAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHls
ZS50ZXh0U2hhZG93LnZhbHVlKCkpOwotICAgICAgICBpZiAobGluZVN0eWxlKCkuaGFzQXBwbGVD
b2xvckZpbHRlcigpKQotICAgICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0U2hhZG93Q29s
b3JGaWx0ZXIoJmxpbmVTdHlsZSgpLmFwcGxlQ29sb3JGaWx0ZXIoKSk7Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0
LCBmYWxzZSB9OwotICAgICAgICBib29sIGlzRHJhZ2dlZENvbnRlbnQgPSBtYXJrZWRUZXh0LnR5
cGUgPT0gTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQ7Ci0gICAgICAgIGlmIChpc0RyYWdnZWRD
b250ZW50IHx8ICFjbGlwT3V0UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHN0YXRlU2F2
ZXIuc2F2ZSgpOwotICAgICAgICAgICAgaWYgKGlzRHJhZ2dlZENvbnRlbnQpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFscGhhKTsKLSAgICAgICAg
ICAgIGlmICghY2xpcE91dFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQu
Y2xpcE91dChjbGlwT3V0UmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVjb3JhdGlvblBhaW50
ZXIucGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IC0gc3RhcnRPZmZzZXQpLCB0ZXh0T3JpZ2luRnJvbUJveFJlY3Qoc25hcHBlZFNlbGVjdGlv
blJlY3QpLCBzbmFwcGVkU2VsZWN0aW9uUmVjdC5sb2NhdGlvbigpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoaXNDb21iaW5lZFRleHQpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJv
eFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKLX0KLQotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94
OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luKQotewotICAgIGF1dG8gc2VsZWN0YWJsZVJhbmdlID0gdGhp
cy0+c2VsZWN0YWJsZVJhbmdlKCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0
b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkpIHsKLSAgICAgICAgcGFpbnRN
YXJrZWRUZXh0QmFja2dyb3VuZChwYWludEluZm8sIGJveE9yaWdpbiwgQ29tcG9zaXRpb25IaWdo
bGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvciwgc2VsZWN0YWJsZVJhbmdlLmNsYW1w
KHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCkpLCBzZWxlY3Rh
YmxlUmFuZ2UuY2xhbXAocmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5k
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0
IDogcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmN1c3RvbUNvbXBvc2l0aW9uSGlnaGxpZ2h0
cygpKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQuZW5kT2Zmc2V0IDw9IG1fc3RhcnQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0T2Zmc2V0ID49
IGVuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0
LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZz
ZXQsIGhpZ2hsaWdodC5lbmRPZmZzZXQpOwotICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3Jv
dW5kKHBhaW50SW5mbywgYm94T3JpZ2luLCBoaWdobGlnaHQuY29sb3IsIGNsYW1wZWRTdGFydCwg
Y2xhbXBlZEVuZCwgTWFya2VkVGV4dEJhY2tncm91bmRTdHlsZTo6Um91bmRlZCk7Ci0KLSAgICAg
ICAgaWYgKGhpZ2hsaWdodC5lbmRPZmZzZXQgPiBlbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQogdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5k
ZXJsaW5lcyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
KSBjb25zdAogewogICAgIGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQpAQCAt
MTA4OSwxMiArOTA2LDEyIEBAIFN0cmluZyBMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0KGJvb2wg
aWdub3JlQ29tYmluZWRUZXh0LCBib29sIGlnbm9yZUh5cGhlbikgY29uCiAgICAgcmV0dXJuIFJl
bmRlckJsb2NrOjp1cGRhdGVTZWN1cml0eURpc2NDaGFyYWN0ZXJzKGxpbmVTdHlsZSgpLCBXVEZN
b3ZlKHJlc3VsdCkpOwogfQogCi1pbmxpbmUgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIExlZ2Fj
eUlubGluZVRleHRCb3g6OmNvbWJpbmVkVGV4dCgpIGNvbnN0Citjb25zdCBSZW5kZXJDb21iaW5l
VGV4dCogTGVnYWN5SW5saW5lVGV4dEJveDo6Y29tYmluZWRUZXh0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbGluZVN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21iaW5lVGV4
dD4ocmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkp
LmlzQ29tYmluZWQoKSA/ICZkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIoKSkg
OiBudWxscHRyOwogfQogCi1TaGFkb3dEYXRhKiBMZWdhY3lJbmxpbmVUZXh0Qm94OjpkZWJ1Z1Rl
eHRTaGFkb3coKQorY29uc3QgU2hhZG93RGF0YSogTGVnYWN5SW5saW5lVGV4dEJveDo6ZGVidWdU
ZXh0U2hhZG93KCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5sZWdh
Y3lMaW5lTGF5b3V0VmlzdWFsQ292ZXJhZ2VFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRl
eHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgK
aW5kZXggODkyZjIwMjA4Mjk1YjdkZWVhZmI0OWNkMTNhZDIwZGI5MTE1OTVlMC4uMTMwYjIxOTY1
ZGI3NTdlMzFhMzY1YWVlMWU1YTVlYjJlNDNjYjkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCkBAIC0xNjMsMjYgKzE2MywyMCBAQCBwdWJs
aWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1h
cmtlZFRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5G
cm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgVGV4
dEJveFBhaW50ZXI7CiAKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dHMoUGFpbnRJbmZvJiwgTWFy
a2VkVGV4dDo6UGFpbnRQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0
b3I8U3R5bGVkTWFya2VkVGV4dD4mLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0
UmVjdCA9IHsgfSk7CisgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtl
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IE1h
cmtlZFRleHQmKTsKICAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKTsKIAotICAgIHZvaWQgcGFp
bnRDb21wb3NpdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikgY29uc3Q7CiAgICAgdm9pZCBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
Y29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKSBjb25zdDsKIAotICAgIGVudW0gY2xhc3MgTWFy
a2VkVGV4dEJhY2tncm91bmRTdHlsZSA6IGJvb2wgeyBEZWZhdWx0LCBSb3VuZGVkIH07Ci0gICAg
dm9pZCBwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgQ29sb3ImLCB1bnNpZ25lZCBjbGFtcGVkU3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGNsYW1wZWRFbmRPZmZzZXQsIE1hcmtlZFRleHRCYWNrZ3JvdW5kU3R5bGUgPSBN
YXJrZWRUZXh0QmFja2dyb3VuZFN0eWxlOjpEZWZhdWx0KTsKLSAgICB2b2lkIHBhaW50TWFya2Vk
VGV4dEZvcmVncm91bmQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBTdHlsZWRNYXJrZWRUZXh0Jik7Ci0gICAgdm9pZCBwYWludE1hcmtlZFRleHREZWNvcmF0aW9u
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwT3V0UmVjdCwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOwotCiAgICAgY29uc3QgUmVuZGVy
Q29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRDYXNjYWRl
JiBsaW5lRm9udCgpIGNvbnN0OwogCi0gICAgU2hhZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCk7
CisgICAgY29uc3QgU2hhZG93RGF0YSogZGVidWdUZXh0U2hhZG93KCkgY29uc3Q7CiAKICAgICBT
dHJpbmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5
cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgog
ICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNl
LCBib29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmNwcAppbmRleCAzNTU2NGNlNDNhNThmNTY2MTM4Mjgz
ODY2NzQ2MDRhMGQ0OGNmNmZlLi5jOWNmYzdmZjVkYjEwMGE0MWVlNjExNDM4ODY5ZDRhMWM3YmRl
Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFya2VkVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuY3Bw
CkBAIC0xMTEsNyArMTExLDYgQEAgc3RhdGljIFN0eWxlZE1hcmtlZFRleHQ6OlN0eWxlIGNvbXB1
dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChjb25zdCBSZW5kZXJUZXgKICAgICBzdHlsZS50
ZXh0RGVjb3JhdGlvblN0eWxlcyA9IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6c3R5bGVzRm9yUmVu
ZGVyZXIocmVuZGVyZXIsIGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCBpc0Zp
cnN0TGluZSk7CiAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0UGFpbnRTdHlsZShy
ZW5kZXJlci5mcmFtZSgpLCBsaW5lU3R5bGUsIHBhaW50SW5mbyk7CiAgICAgc3R5bGUudGV4dFNo
YWRvdyA9IFNoYWRvd0RhdGE6OmNsb25lKHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVs
bHB0ciA6IGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpOwotICAgIHN0eWxlLmFscGhhID0gMTsKICAg
ICByZXR1cm4gc3R5bGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TdHlsZWRNYXJrZWRUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU3R5bGVkTWFy
a2VkVGV4dC5oCmluZGV4IDFiMTk2NTEwYWNkMDM2NzliNWI4OWM3Y2E0ZGEwZmQ3OTlhMWE3NWYu
LjI0ZTZjMjdiNjM1MTI4YWMzYmNmMjhjNzkxZGRiNzk4MzRkYmY3ODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TdHlsZWRNYXJrZWRUZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1N0eWxlZE1hcmtlZFRleHQuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1
Y3QgU3R5bGVkTWFya2VkVGV4dCA6IE1hcmtlZFRleHQgewogICAgICAgICBUZXh0UGFpbnRTdHls
ZSB0ZXh0U3R5bGVzOwogICAgICAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlcyB0ZXh0
RGVjb3JhdGlvblN0eWxlczsKICAgICAgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dEYXRhPiB0ZXh0
U2hhZG93OwotICAgICAgICBmbG9hdCBhbHBoYTsKKyAgICAgICAgZmxvYXQgYWxwaGEgeyAxIH07
CiAgICAgfTsKIAogICAgIFN0eWxlIHN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0Qm94UGFpbnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGEzNmI3MjczYmVmNjA2MTdjOWM0OWEzNzMx
MTU0N2Q0YTg5MmUxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCb3hQYWludGVyLmgiCisKKyNpbmNsdWRl
ICJDb21wb3NpdGlvbkhpZ2hsaWdodC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKKyNp
bmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJTdHlsZWRNYXJrZWRUZXh0LmgiCisjaW5j
bHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKKyNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1RleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBM
ZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
RmxvYXRSZWN0JiBib3hSZWN0KQorICAgIDogbV90ZXh0Qm94KHRleHRCb3gpCisgICAgLCBtX3Bh
aW50SW5mbyhwYWludEluZm8pCisgICAgLCBtX2JveFJlY3QoYm94UmVjdCkKK3sKKyAgICBib29s
IHNob3VsZFJvdGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5j
b21iaW5lZFRleHQoKTsKKyAgICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5m
by5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ2xvY2t3aXNlKSk7Cit9
CisKK1RleHRCb3hQYWludGVyOjp+VGV4dEJveFBhaW50ZXIoKQoreworICAgIGJvb2wgc2hvdWxk
Um90YXRlID0gIW1fdGV4dEJveC5pc0hvcml6b250YWwoKSAmJiAhbV90ZXh0Qm94LmNvbWJpbmVk
VGV4dCgpOworICAgIGlmIChzaG91bGRSb3RhdGUpCisgICAgICAgIG1fcGFpbnRJbmZvLmNvbnRl
eHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7Cit9
CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCkKK3sK
KyAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IG1fdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKTsK
KworICAgIGF1dG8mIGVkaXRvciA9IG1fdGV4dEJveC5yZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9y
KCk7CisKKyAgICBpZiAoIWVkaXRvci5jb21wb3NpdGlvblVzZXNDdXN0b21IaWdobGlnaHRzKCkp
IHsKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVS
YW5nZS5jbGFtcChlZGl0b3IuY29tcG9zaXRpb25TdGFydCgpLCBlZGl0b3IuY29tcG9zaXRpb25F
bmQoKSk7CisKKyAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKGNsYW1wZWRTdGFydCwgY2xhbXBlZEVu
ZCwgQ29tcG9zaXRpb25IaWdobGlnaHQ6OmRlZmF1bHRDb21wb3NpdGlvbkZpbGxDb2xvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IGVkaXRv
ci5jdXN0b21Db21wb3NpdGlvbkhpZ2hsaWdodHMoKSkgeworICAgICAgICBpZiAoaGlnaGxpZ2h0
LmVuZE9mZnNldCA8PSBtX3RleHRCb3guc3RhcnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGlmIChoaWdobGlnaHQuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94LmVuZCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVk
RW5kXSA9IHNlbGVjdGFibGVSYW5nZS5jbGFtcChoaWdobGlnaHQuc3RhcnRPZmZzZXQsIGhpZ2hs
aWdodC5lbmRPZmZzZXQpOworCisgICAgICAgIHBhaW50QmFja2dyb3VuZChjbGFtcGVkU3RhcnQs
IGNsYW1wZWRFbmQsIGhpZ2hsaWdodC5jb2xvciwgQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKTsK
KworICAgICAgICBpZiAoaGlnaGxpZ2h0LmVuZE9mZnNldCA+IG1fdGV4dEJveC5lbmQoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRC
YWNrZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgcGFp
bnRCYWNrZ3JvdW5kKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0
LCBtYXJrZWRUZXh0LnN0eWxlLmJhY2tncm91bmRDb2xvcik7Cit9CisKK3ZvaWQgVGV4dEJveFBh
aW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IsIEJhY2tncm91bmRTdHlsZSBiYWNrZ3JvdW5kU3R5
bGUpCit7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgp
OworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQgfTsK
KyAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUgeyBjb2xv
ciB9KTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKworICAgIC8vIE5vdGUgdGhhdCBpZiB0
aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0
aGUgdHJ1bmNhdGlvbgorICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCisgICAgVGV4dFJ1
biB0ZXh0UnVuID0gbV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4oKTsKKworICAgIGNvbnN0IExlZ2Fj
eVJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBtX3RleHRCb3gucm9vdCgpOworICAgIExheW91dFVu
aXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICBMYXlv
dXRVbml0IHNlbGVjdGlvblRvcCA9IHJvb3RCb3guc2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdCbG9jaygpOworCisgICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0
IGFzIGZvciBzZWxlY3Rpb24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIHN1
YnJhbmdlIGFyZSBvbgorICAgIC8vIHRoZSBzYW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBpZWNlcyBz
dGlja2luZyBvdXQuCisgICAgTGF5b3V0VW5pdCBkZWx0YVkgeyBtX3RleHRCb3gucmVuZGVyZXIo
KS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAt
IG1fdGV4dEJveC5sb2dpY2FsQm90dG9tKCkgOiBtX3RleHRCb3gubG9naWNhbFRvcCgpIC0gc2Vs
ZWN0aW9uVG9wIH07CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSBzdGQ6Om1heDxM
YXlvdXRVbml0PigwLCBzZWxlY3Rpb25Cb3R0b20gLSBzZWxlY3Rpb25Ub3ApOworCisgICAgTGF5
b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgTGF5b3V0VW5pdChtX2JveFJlY3QueCgpKSwgTGF5b3V0
VW5pdChtX2JveFJlY3QueSgpIC0gZGVsdGFZKSwgTGF5b3V0VW5pdChtX3RleHRCb3gubG9naWNh
bFdpZHRoKCkpLCBzZWxlY3Rpb25IZWlnaHQgfTsKKyAgICBtX3RleHRCb3gubGluZUZvbnQoKS5h
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIC8vIEZJWE1FOiBTdXBwb3J0IHBhaW50aW5nIGNvbWJp
bmVkIHRleHQuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MDk5Mz4uCisgICAgYXV0byBiYWNrZ3JvdW5kUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCBtX3RleHRCb3gucmVuZGVyZXIoKS5k
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpOworICAgIGlmIChi
YWNrZ3JvdW5kU3R5bGUgPT0gQmFja2dyb3VuZFN0eWxlOjpSb3VuZGVkKSB7CisgICAgICAgIGJh
Y2tncm91bmRSZWN0LmV4cGFuZCgtMSwgLTEpOworICAgICAgICBiYWNrZ3JvdW5kUmVjdC5tb3Zl
KDAuNSwgMC41KTsKKyAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVk
UmVjdCB7IGJhY2tncm91bmRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDIgfSB9LCBj
b2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250ZXh0LmZpbGxSZWN0KGJh
Y2tncm91bmRSZWN0LCBjb2xvcik7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9y
ZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQoreworICAgIGlmICht
YXJrZWRUZXh0LnN0YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250
ZXh0KCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBtX3RleHRCb3gubGluZUZvbnQo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gbV90ZXh0Qm94LmxpbmVTdHls
ZSgpOworCisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKKyAgICBzdGQ6Om9wdGlv
bmFsPGJvb2w+IG1hcmtFeGlzdHNBbmRJc0Fib3ZlID0gbV90ZXh0Qm94LmVtcGhhc2lzTWFya0V4
aXN0c0FuZElzQWJvdmUobGluZVN0eWxlKTsKKyAgICBjb25zdCBBdG9tU3RyaW5nJiBlbXBoYXNp
c01hcmsgPSBtYXJrRXhpc3RzQW5kSXNBYm92ZSA/IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJr
U3RyaW5nKCkgOiBudWxsQXRvbSgpOworICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkK
KyAgICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gKm1hcmtFeGlzdHNBbmRJc0Fib3ZlID8gLWZv
bnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGZvbnQuZW1waGFzaXNNYXJrRGVzY2VudChlbXBo
YXNpc01hcmspIDogZm9udC5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGZvbnQuZW1waGFzaXNN
YXJrQXNjZW50KGVtcGhhc2lzTWFyayk7CisKKyAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlciB7
IGNvbnRleHQgfTsKKyAgICB0ZXh0UGFpbnRlci5zZXRGb250KGZvbnQpOworICAgIHRleHRQYWlu
dGVyLnNldFN0eWxlKG1hcmtlZFRleHQuc3R5bGUudGV4dFN0eWxlcyk7CisgICAgdGV4dFBhaW50
ZXIuc2V0SXNIb3Jpem9udGFsKG1fdGV4dEJveC5pc0hvcml6b250YWwoKSk7CisgICAgaWYgKG1h
cmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgeworICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFk
b3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGxp
bmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAgICAgICAgICB0ZXh0UGFpbnRlci5z
ZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKSk7CisgICAg
fQorICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmssIGVtcGhhc2lz
TWFya09mZnNldCwgbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpKTsKKyAgICBpZiAoYXV0byogZGVi
dWdTaGFkb3cgPSBtX3RleHRCb3guZGVidWdUZXh0U2hhZG93KCkpCisgICAgICAgIHRleHRQYWlu
dGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdyk7CisKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBtX3Rl
eHRCb3guY3JlYXRlVGV4dFJ1bigpOworICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxp
c3RJZk5lZWRlZChtX3RleHRCb3gsIG1fcGFpbnRJbmZvLCBmb250LCBjb250ZXh0LCB0ZXh0UnVu
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlciB7IGNvbnRleHQs
IGZhbHNlIH07CisgICAgaWYgKG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRUZXh0OjpEcmFnZ2Vk
Q29udGVudCkgeworICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICAgICAgY29udGV4dC5z
ZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFscGhhKTsKKyAgICB9CisgICAgLy8gVGV4dFBhaW50
ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUgYW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUg
bGluZSBib3guCisgICAgdGV4dFBhaW50ZXIucGFpbnRSYW5nZSh0ZXh0UnVuLCBtX2JveFJlY3Qs
IG1fdGV4dEJveC50ZXh0T3JpZ2luRnJvbUJveFJlY3QobV9ib3hSZWN0KSwgbWFya2VkVGV4dC5z
dGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOworfQorCit2b2lkIFRleHRCb3hQYWlu
dGVyOjpwYWludERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCkKK3sKKyAgICBpZiAobV90ZXh0Qm94LnRydW5j
YXRpb24oKSA9PSBjRnVsbFRydW5jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IG1fdGV4dEJveC5saW5lRm9udCgpOworICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSBtX3RleHRCb3gubGluZVN0eWxlKCk7CisKKyAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoY29udGV4dCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0U3R5bGVzKTsKKwor
ICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBtX3RleHRCb3guY29tYmluZWRUZXh0KCk7CisgICAg
aWYgKGlzQ29tYmluZWRUZXh0KQorICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbiht
X2JveFJlY3QsIENsb2Nrd2lzZSkpOworCisgICAgLy8gMS4gQ29tcHV0ZSB0ZXh0IHNlbGVjdGlv
bgorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbWFya2VkVGV4dC5zdGFydE9mZnNldDsKKyAg
ICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtYXJrZWRUZXh0LmVuZE9mZnNldDsKKyAgICBpZiAoc3Rh
cnRPZmZzZXQgPj0gZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOb3RlIHRo
YXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50
ZWQgaW4gdGhlIHRydW5jYXRpb24KKyAgICAvLyBkcmF3IGl0cyBvd24gZGVjb3JhdGlvbi4KKyAg
ICBUZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOworCisgICAgLy8g
QXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxl
Y3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCisgICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25S
ZWN0ID0gbV9ib3hSZWN0OworICAgIGlmIChzdGFydE9mZnNldCB8fCBlbmRPZmZzZXQgIT0gdGV4
dFJ1bi5sZW5ndGgoKSkgeworICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IG1f
Ym94UmVjdC54KCksIG1fYm94UmVjdC55KCksIG1fYm94UmVjdC53aWR0aCgpLCBtX2JveFJlY3Qu
aGVpZ2h0KCkgfTsKKyAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0
UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc25h
cHBlZFNlbGVjdGlvblJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJl
Y3Rpb24oc2VsZWN0aW9uUmVjdCwgbV90ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKKyAgICB9CisKKyAgICAvLyAyLiBQYWlu
dAorICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0lu
RWZmZWN0KCk7CisgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6
OnRleHREZWNvcmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVj
b3JhdGlvblN0eWxlcykpOworICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFp
bnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV90ZXh0Qm94LnJlbmRlcmVyKCksIG1f
dGV4dEJveC5pc0ZpcnN0TGluZSgpLCBmb250LCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNvcmF0
aW9uU3R5bGVzIH07CisgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFJ1bkl0ZXJhdG9yKExh
eW91dEludGVncmF0aW9uOjp0ZXh0UnVuRm9yKCZtX3RleHRCb3gpKTsKKyAgICBkZWNvcmF0aW9u
UGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKKyAgICBkZWNv
cmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpKTsK
KyAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CisgICAgICAgIGRlY29yYXRp
b25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdy52YWx1
ZSgpKTsKKyAgICAgICAgaWYgKGxpbmVTdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCisgICAg
ICAgICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbGluZVN0eWxl
LmFwcGxlQ29sb3JGaWx0ZXIoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIgeyBjb250ZXh0LCBmYWxzZSB9OworICAgICAgICBi
b29sIGlzRHJhZ2dlZENvbnRlbnQgPSBtYXJrZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6RHJh
Z2dlZENvbnRlbnQ7CisgICAgICAgIGlmIChpc0RyYWdnZWRDb250ZW50IHx8ICFjbGlwT3V0UmVj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgICAgICAg
ICAgaWYgKGlzRHJhZ2dlZENvbnRlbnQpCisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBbHBo
YShtYXJrZWRUZXh0LnN0eWxlLmFscGhhKTsKKyAgICAgICAgICAgIGlmICghY2xpcE91dFJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRleHQuY2xpcE91dChjbGlwT3V0UmVjdCk7
CisgICAgICAgIH0KKyAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIucGFpbnRUZXh0RGVjb3JhdGlv
bih0ZXh0UnVuLnN1YlJ1bihzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCBt
X3RleHRCb3gudGV4dE9yaWdpbkZyb21Cb3hSZWN0KHNuYXBwZWRTZWxlY3Rpb25SZWN0KSwgc25h
cHBlZFNlbGVjdGlvblJlY3QubG9jYXRpb24oKSk7CisgICAgfQorCisgICAgaWYgKGlzQ29tYmlu
ZWRUZXh0KQorICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENv
dW50ZXJjbG9ja3dpc2UpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRCb3hQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJv
eFBhaW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjdkOGMwZDg5ZmYxZDc3OTgwM2E1YzZmMDQyY2Y1OGFl
NzVhYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRC
b3hQYWludGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZvbnRDYXNjYWRlOworY2xhc3MgTGVnYWN5SW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlckNv
bWJpbmVUZXh0Oworc3RydWN0IFBhaW50SW5mbzsKK3N0cnVjdCBTdHlsZWRNYXJrZWRUZXh0Owor
CitjbGFzcyBUZXh0Qm94UGFpbnRlciB7CitwdWJsaWM6CisgICAgVGV4dEJveFBhaW50ZXIoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYgYm94
UmVjdCk7CisgICAgflRleHRCb3hQYWludGVyKCk7CisKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25CYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVkTWFy
a2VkVGV4dCYpOworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRl
eHQmKTsKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCk7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFz
cyBCYWNrZ3JvdW5kU3R5bGUgeyBOb3JtYWwsIFJvdW5kZWQgfTsKKyAgICB2b2lkIHBhaW50QmFj
a2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBD
b2xvciYsIEJhY2tncm91bmRTdHlsZSA9IEJhY2tncm91bmRTdHlsZTo6Tm9ybWFsKTsKKworICAg
IGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIG1fdGV4dEJveDsKKyAgICBQYWludEluZm8mIG1f
cGFpbnRJbmZvOworICAgIGNvbnN0IEZsb2F0UmVjdCBtX2JveFJlY3Q7Cit9OworCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>