<?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>153132</bug_id>
          
          <creation_ts>2016-01-15 09:04:35 -0800</creation_ts>
          <short_desc>REGRESSION(r195084): Broke Production build (Requested by ap on #webkit).</short_desc>
          <delta_ts>2016-01-15 09:08:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152952</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1155791</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-15 09:04:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/195084 broke the build:
Broke Production build (Requested by ap on #webkit).

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

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

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

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155796</commentid>
    <comment_count>2</comment_count>
      <attachid>269061</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-15 09:08:05 -0800</bug_when>
    <thetext>Comment on attachment 269061
ROLLOUT of r195084

Clearing flags on attachment: 269061

Committed r195133: &lt;http://trac.webkit.org/changeset/195133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155797</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-15 09:08:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269061</attachid>
            <date>2016-01-15 09:05:12 -0800</date>
            <delta_ts>2016-01-15 09:08:05 -0800</delta_ts>
            <desc>ROLLOUT of r195084</desc>
            <filename>bug-153132-20160115090443.patch</filename>
            <type>text/plain</type>
            <size>200071</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1MTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
M2FmMTFjMDc1NDhjN2M1NzEzNmZlYzQyYjQ3NGM3Y2Y1M2VlYTQxLi4xOTRlNjc2ODYxMDViMjRk
Zjg1MzBjOTJiZmE2YTIwMjVhN2Y4MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNi0wMS0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5NTA4NC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzEzMgorCisgICAg
ICAgIEJyb2tlIFByb2R1Y3Rpb24gYnVpbGQgKFJlcXVlc3RlZCBieSBhcCBvbiAjd2Via2l0KS4K
KworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIkFpciBuZWVkcyBhIFNo
dWZmbGUgaW5zdHJ1Y3Rpb24iCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTI5NTIKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMTk1MDg0CisKIDIwMTYtMDEtMTUgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZUBjaXNj
by5jb20+CiAKICAgICAgICAgW21pcHNdIEFkZCBjb3VudExlYWRpbmdaZXJvczMyIGltcGxlbWVu
dGF0aW9uIGluIG1hY3JvIGFzc2VtYmxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDhjYmQzZmExNGFmMGQ2MTIxYjcwNjA2NGMzNWQ5MDNhNjQyYzU4YWIuLjZkNDZmZjc1
ZGJiNjJhNDEzNTQ0MmFiM2I1OTc4N2Y3N2ViYWY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTczLDExICs3Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgYjMvYWlyL0FpckFyZy5jcHAKICAgICBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKICAg
ICBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAotICAgIGIzL2Fpci9BaXJDQ2FsbGluZ0NvbnZl
bnRpb24uY3BwCiAgICAgYjMvYWlyL0FpckNvZGUuY3BwCi0gICAgYjMvYWlyL0FpckN1c3RvbS5j
cHAKICAgICBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwCi0gICAgYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcAogICAgIGIzL2Fpci9BaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuY3Bw
CiAgICAgYjMvYWlyL0FpckdlbmVyYXRlLmNwcAogICAgIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3Bw
CkBAIC04NSw4ICs4Miw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWly
L0Fpckluc2VydGlvblNldC5jcHAKICAgICBiMy9haXIvQWlySW5zdC5jcHAKICAgICBiMy9haXIv
QWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCi0gICAgYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHAKLSAgICBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCiAgICAgYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHAK
ICAgICBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYzgxZDkyYjIwM2JhNzVlZjA0NTQwMGE3MGVhZTcxNmI1ZmZlMDMxYS4uMmM1
ZjM4Yjg5NDEwOTBiOTZjNzE0ZmI1NGE3YWZjNzEwZTA0MTEwNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTI1LDcgKzI1LDYgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsK
IAkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTQwMSwyMSArNDAwLDYgQEAKIAkJMEY1RUY5MUUxNjg3
OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtz
LmNwcCAqLzsgfTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUMxNjg3
OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
NjE4MzI5MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjAxQzQ1QkYw
NzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi87IH07Ci0JCTBGNjE4MzJB
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIxMUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKLQkJMEY2MTgzMkIxQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCAq
LzsgfTsKLQkJMEY2MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzIzMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi87IH07Ci0JCTBGNjE4MzJEMUM0
NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjQxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVt
aXRTaHVmZmxlLmggKi87IH07Ci0JCTBGNjE4MzJFMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dl
ckFmdGVyUmVnQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2MTgzMjUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAgKi87IH07Ci0JCTBGNjE4MzJGMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVy
UmVnQWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjE4MzI2MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCAqLzsg
fTsKLQkJMEY2MTgzMzAxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzI3MUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi87IH07Ci0JCTBGNjE4MzMxMUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2Vy
TWFjcm9zLmggKi87IH07Ci0JCTBGNjE4MzMzMUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjE4MzMy
MUM0NUYzNUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLzsgfTsKLQkJMEY2MTgzMzYxQzQ1RjNC
NjAwNzI0NTBCIC8qIEFpck9wY29kZUdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9w
Y29kZUdlbmVyYXRlZC5oICovOyB9OwotCQkwRjYxODMzNzFDNDVGM0I2MDA3MjQ1MEIgLyogQWly
T3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICovOyB9Owot
CQkwRjYxODMzQzFDNDVGNjJBMDA3MjQ1MEIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2
QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07Ci0JCTBGNjE4MzNEMUM0
NUY2MkEwMDcyNDUwQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5
NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwotCQkwRjYxODM0NTFDNDVGNjYw
MDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYxODM0NDFDNDVGNjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi87
IH07CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcy
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgfTsKIAkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IH07CiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICov
OyB9OwpAQCAtMjA5NSwxMyArMjA3OSw2IEBACiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KLQkJMEY2MTgz
NDYxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKLQkJCWlz
YSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXByb3h5VHlwZSA9IDE7
Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGNjE4MzM4MUM0NUY2MkEwMDcyNDUwQjsKLQkJ
CXJlbW90ZUluZm8gPSB0ZXN0YWlyOwotCQl9OwogCQkwRjkzMjc1QzFDMjBCRjNBMDBDRjY1NjQg
LyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRl
bVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8q
IFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjU2NSwyMCArMjU0Miw2IEBACiAJCTBGNUVGOTFCMTY4
NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKSVRUaHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5jb25kaXRpb25hbEZpbmFsaXplci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYxODMyMDFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0Nh
bGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MTgz
MjExQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uaDsgcGF0aCA9IGIz
L2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY2MTgzMjIxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDdXN0b20uY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNjE4MzIzMUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJFbWl0U2h1ZmZsZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyRW1pdFNo
dWZmbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYxODMyNDFDNDVCRjA3
MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRW1pdFNodWZmbGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJFbWl0U2h1ZmZsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJB
ZnRlclJlZ0FsbG9jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MTgzMjYx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEY2MTgzMjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckxvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJMb3dlck1hY3Jvcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
NjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMb3dlck1hY3Jvcy5oOyBwYXRoID0gYjMvYWlyL0Fpckxv
d2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNjE4MzMyMUM0NUYz
NUMwMDcyNDUwQiAvKiBBaXJPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWlyT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNjE4MzM0MUM0
NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVHZW5lcmF0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWlyT3Bjb2RlR2VuZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVVdGlscy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBaXJPcGNvZGVVdGlscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjYxODM0MzFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFp
ciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGFp
cjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMEY2MTgzNDQxQzQ1RjY2
MDAwNzI0NTBCIC8qIHRlc3RhaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdGVzdGFpci5jcHA7IHBhdGggPSBiMy9haXIvdGVzdGFpci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFs
dWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRm
Zy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjIwMTcy
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcv
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NDA5LDggKzMzNzIsOCBAQAogCQk3MDEzQ0E4QTFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNKb2IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5q
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcFByb3RvdHlwZS5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzAzNTU4N0QxQzQxODQxOTAwNEJEN0JG
IC8qIFNldFByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0
aCA9IFNldFByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzAzNTU4
N0UxQzQxODQ1ODAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFwUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3MDM1NTg3RjFDNDE4NDU4MDA0QkQ3QkYgLyogU2V0UHJvdG90eXBlLmx1dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRQcm90b3R5cGUubHV0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMzU1ODdFMUM0MTg0NTgwMDRCRDdCRiAvKiBN
YXBQcm90b3R5cGUubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hcFBy
b3RvdHlwZS5sdXQuaDsgcGF0aCA9IE1hcFByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzAzNTU4N0YxQzQxODQ1ODAwNEJEN0JGIC8qIFNldFByb3RvdHlwZS5s
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2V0UHJvdG90eXBlLmx1dC5o
OyBwYXRoID0gU2V0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogQm9vbGVhbk9iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb29sZWFuT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNzA1QjQxQTMxQTZF
NTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTeW1ib2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDVCNDFB
NDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN5bWJvbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM0MywxNSAr
NDMwNiw2IEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMEY2MTgzM0IxQzQ1RjYyQTAw
NzI0NTBCIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQ
aGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJ
CQkwRjYxODMzQzFDNDVGNjJBMDA3MjQ1MEIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLywKLQkJCQkwRjYxODMzRDFDNDVGNjJBMDA3MjQ1MEIgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCTBGOTMyNzUxMUMyMEJDQkEwMENGNjU2
NCAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7
CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNDQ0OSw3ICs0NDAzLDYgQEAK
IAkJCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTY1MTEyMzA1
MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAogCQkJCTBGOTMyNzU5MUMyMEJDQkEw
MENGNjU2NCAvKiBkeW5iZW5jaCAqLywKLQkJCQkwRjYxODM0MzFDNDVGNjJBMDA3MjQ1MEIgLyog
dGVzdGFpciAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNDg0MCwxOCArNDc5MywxMyBAQAogCQkJCTBGRUM4NTRDMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKIAkJCQkwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAogCQkJCTBGQjM4NzhCMUJGQkM0NEQwMEUzQUIx
RSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi8sCi0JCQkJMEY2MTgzMjAxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgKi8sCi0JCQkJMEY2MTgzMjExQzQ1QkYwNzAw
NzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oICovLAogCQkJCTBGRUM4NTRFMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovLAogCQkJCTBGRUM4NTRGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLywKIAkJCQkwRkVDODU1MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8sCiAJCQkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCAqLywKLQkJCQkwRjYxODMyMjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3Vz
dG9tLmNwcCAqLywKIAkJCQkwRjEwRjFBMjFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmgg
Ki8sCiAJCQkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmNwcCAqLywKIAkJCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVh
ZENvZGUuaCAqLywKLQkJCQkwRjYxODMyMzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyRW1pdFNodWZm
bGUuY3BwICovLAotCQkJCTBGNjE4MzI0MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJFbWl0U2h1ZmZs
ZS5oICovLAogCQkJCTI2MkQ4NUI0MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVn
aXN0ZXJTdGFsbHMuY3BwICovLAogCQkJCTI2MkQ4NUI1MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJG
aXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCAqLywKIAkJCQkwRjRDOTE2NzFDMkIzRDY4MDA0MzQx
QTYgLyogQWlyRml4U3BpbGxTbG90WkRlZi5oICovLApAQCAtNDg3MCwxMCArNDgxOCw2IEBACiAJ
CQkJMjY3MThCQTIxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nLmNwcCAqLywKIAkJCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyog
QWlyTGl2ZW5lc3MuaCAqLywKLQkJCQkwRjYxODMyNTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93
ZXJBZnRlclJlZ0FsbG9jLmNwcCAqLywKLQkJCQkwRjYxODMyNjFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmggKi8sCi0JCQkJMEY2MTgzMjcxQzQ1QkYwNzAwNzI0NTBC
IC8qIEFpckxvd2VyTWFjcm9zLmNwcCAqLywKLQkJCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIg
LyogQWlyTG93ZXJNYWNyb3MuaCAqLywKIAkJCQkyNjQwOTFGQTFCRTJGRDQxMDA2ODREQjIgLyog
QWlyT3Bjb2RlLm9wY29kZXMgKi8sCiAJCQkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNBQjFFIC8qIEFp
ck9wdGltaXplQmxvY2tPcmRlci5jcHAgKi8sCiAJCQkJMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFF
IC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovLApAQCAtNDg5OSw3ICs0ODQzLDYgQEAKIAkJ
CQkwRjM3MzA5MjFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggKi8sCiAJCQkJMEZF
Qzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRkVDODU2
QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKLQkJCQkwRjYxODM0NDFDNDVG
NjYwMDA3MjQ1MEIgLyogdGVzdGFpci5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGFpcjsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01MzU3LDkgKzUzMDAsNiBAQAogCQk2NTBGREY4
RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjYxODMzMjFDNDVGMzVDMDA3MjQ1MEIgLyog
QWlyT3Bjb2RlLmggKi8sCi0JCQkJMEY2MTgzMzQxQzQ1RjNCNjAwNzI0NTBCIC8qIEFpck9wY29k
ZUdlbmVyYXRlZC5oICovLAotCQkJCTBGNjE4MzM1MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNv
ZGVVdGlscy5oICovLAogCQkJCTk5NkI3MzE1MUJEQTA1QUEwMDMzMUI4NCAvKiBBcnJheUNvbnN0
cnVjdG9yLmx1dC5oICovLAogCQkJCTk5NkI3MzE2MUJEQTA1QUEwMDMzMUI4NCAvKiBBcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmx1dC5oICovLAogCQkJCTk5NkI3MzA3MUJEOUZBMkMwMDMzMUI4NCAv
KiBCb29sZWFuUHJvdG90eXBlLmx1dC5oICovLApAQCAtNjk1OSw3ICs2ODk5LDYgQEAKIAkJCQkw
RjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5Q0ZDNkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQ
cm9maWxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY2MTgzMzExQzQ1QkYwNzAwNzI0NTBCIC8q
IEFpckxvd2VyTWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4
MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3
OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
REY2NkIxMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03MDIyLDcgKzY5NjEsNiBAQAogCQkJCTBGRUM4NTE0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QzEx
QkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGNjE4MzJGMUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50
ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtNzIxNiw3
ICs3MTU0LDYgQEAKIAkJCQlBNzdBNDI0MDE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOEQxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhp
Q2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQyMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjYxODMyRDFDNDVCRjA3MDA3
MjQ1MEIgLyogQWlyRW1pdFNodWZmbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0MxRjFCMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwNDM5NkUxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBp
biBIZWFkZXJzICovLApAQCAtNzMyMSw3ICs3MjU4LDYgQEAKIAkJCQkwRjJCOUNFRDE5RDBCQTdE
MDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGNjE4MzM2MUM0NUYzQjYwMDcyNDUwQiAvKiBBaXJPcGNvZGVH
ZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDkxMUMwQ0Q3MEMwMDA1MkJGQSAv
KiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
M0ExQkZBMUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFu
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzM4LDcgKzcyNzQsNiBAQAogCQkJCTBGQzIwQ0JBMTg1
NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQjRGNTE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjYxODMzNzFD
NDVGM0I2MDA3MjQ1MEIgLyogQWlyT3Bjb2RlVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUUzMjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMjBDQjYxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIw
MDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTc2OTMsNyArNzYyOCw2IEBACiAJCQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyog
SlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDgxMUI4NDI5QTQwMDQx
Mzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY2MTgzMkEx
QzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwNzkxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMz
RjUwODUxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBpbiBI
ZWFkZXJzICovLApAQCAtODA4NCw3ICs4MDE4LDYgQEAKIAkJCQkxNDJFMzEzQzEzNEZGMEE2MDBB
RkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZE
NUQ0IC8qIFdlYWtCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAw
MzY0Q0NFIC8qIFdlYWtHQ01hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY2MTgzMzMxQzQ1RjM1
QzAwNzI0NTBCIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0
RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MTE3LDIyICs4MDUwLDYgQEAKIC8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTBGNjE4
MzM4MUM0NUY2MkEwMDcyNDUwQiAvKiB0ZXN0YWlyICovID0gewotCQkJaXNhID0gUEJYTmF0aXZl
VGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGNjE4MzNFMUM0NUY2MkEwMDcy
NDUwQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVz
dGFpciIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkwRjYxODMzOTFDNDVGNjJBMDA3MjQ1
MEIgLyogU291cmNlcyAqLywKLQkJCQkwRjYxODMzQjFDNDVGNjJBMDA3MjQ1MEIgLyogRnJhbWV3
b3JrcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2ll
cyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gdGVzdGFpcjsKLQkJCXByb2R1Y3ROYW1lID0gdGVzdGFw
aTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRjYxODM0MzFDNDVGNjJBMDA3MjQ1MEIgLyogdGVz
dGFpciAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7
Ci0JCX07CiAJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRjkz
Mjc1NDFDMjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgImR5bmJlbmNoIiAqLzsKQEAgLTgzNDAsNyArODI1Nyw2IEBACiAJCQkJMEZF
Qzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3
MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQg
LyogZHluYmVuY2ggKi8sCi0JCQkJMEY2MTgzMzgxQzQ1RjYyQTAwNzI0NTBCIC8qIHRlc3RhaXIg
Ki8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtODU3Nywx
NCArODQ5Myw2IEBACiAvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
IAogLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkwRjYxODMzOTFD
NDVGNjJBMDA3MjQ1MEIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWls
ZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAot
CQkJCTBGNjE4MzQ1MUM0NUY2NjAwMDcyNDUwQiAvKiB0ZXN0YWlyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9
OwogCQkwRjkzMjc0RjFDMjBCQ0JBMDBDRjY1NjQgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9
IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
QEAgLTg3ODksNyArODY5Nyw2IEBACiAJCQkJNTJCNzE3QjUxQTA1OTdFMTAwN0FGNEYzIC8qIENv
bnRyb2xGbG93UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCQURGNTQxQkQxRjRC
ODAwRTA3M0MxIC8qIENvcGllZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNDAzMDU1
MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
RjYxODMzMDFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTJBMTExMjQ1MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJT
ZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8q
IERhdGFGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODM4LDcgKzg3NDUsNiBAQAogCQkJ
CTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjcyMTZDMURCMDMwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0Y1MTdB
MEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGNjE4MzI5MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJDQ2FsbGluZ0NvbnZl
bnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4
RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUxMjFCRjAy
NzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODg1NSw3ICs4NzYxLDYgQEAKIAkJCQlBNzhBOTc3NDE3OTczOEI4MDA5REY3NDQgLyogREZHRmFp
bGVkRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5Nzc2MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFD
NUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY2
MTgzMkMxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckVtaXRTaHVmZmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdG
cm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkxNjcsNyArOTA3Miw2IEBACiAJCQkJ
RTMzRjUwODQxQjg0MzdBMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTFCMTg4RTBG
QjAwMDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMEY2MTgzMkUxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExRDE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwMTNDQThCMUI0
OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDBCN0QxRDBE
QzY5QUY3MDA5QzQyQjggLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05MzEwLDcgKzkyMTQsNiBAQAogCQkJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgz
MTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkwRjYxODMyQjFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4
MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBB
NDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTQ2MywxMSArOTM2Niw2IEBACiAvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KLQkJMEY2
MTgzNDcxQzQ1RjY3QTAwNzI0NTBCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gMEY2MTgzMzgxQzQ1RjYyQTAw
NzI0NTBCIC8qIHRlc3RhaXIgKi87Ci0JCQl0YXJnZXRQcm94eSA9IDBGNjE4MzQ2MUM0NUY2N0Ew
MDcyNDUwQiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07CiAJCTBGOTMyNzVEMUMy
MEJGM0EwMENGNjU2NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAv
KiBkeW5iZW5jaCAqLzsKQEAgLTk1NzksNDIgKzk0NzcsNiBAQAogCQkJfTsKIAkJCW5hbWUgPSBQ
cm9kdWN0aW9uOwogCQl9OwotCQkwRjYxODMzRjFDNDVGNjJBMDA3MjQ1MEIgLyogRGVidWcgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlDT0RFX1NJR05fRU5USVRMRU1F
TlRTX2lvc190ZXN0YWlyID0gZW50aXRsZW1lbnRzLnBsaXN0OwotCQkJCVBST0RVQ1RfTkFNRSA9
IHRlc3RhaXI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkwRjYxODM0MDFDNDVG
NjJBMDA3MjQ1MEIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0
aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBG
QzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJCUNPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMu
cGxpc3Q7Ci0JCQkJUFJPRFVDVF9OQU1FID0gdGVzdGFpcjsKLQkJCX07Ci0JCQluYW1lID0gUmVs
ZWFzZTsKLQkJfTsKLQkJMEY2MTgzNDExQzQ1RjYyQTAwNzI0NTBCIC8qIFByb2ZpbGluZyAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNj
b25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCUNPREVfU0lHTl9FTlRJVExFTUVO
VFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxlbWVudHMucGxpc3Q7Ci0JCQkJUFJPRFVDVF9OQU1FID0g
dGVzdGFpcjsKLQkJCX07Ci0JCQluYW1lID0gUHJvZmlsaW5nOwotCQl9OwotCQkwRjYxODM0MjFD
NDVGNjJBMDA3MjQ1MEIgLyogUHJvZHVjdGlvbiAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRp
bmdzID0gewotCQkJCUNPREVfU0lHTl9FTlRJVExFTUVOVFNfaW9zX3Rlc3RhaXIgPSBlbnRpdGxl
bWVudHMucGxpc3Q7Ci0JCQkJUFJPRFVDVF9OQU1FID0gdGVzdGFpcjsKLQkJCX07Ci0JCQluYW1l
ID0gUHJvZHVjdGlvbjsKLQkJfTsKIAkJMEY5MzI3NTUxQzIwQkNCQTAwQ0Y2NTY0IC8qIERlYnVn
ICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJs
ZS54Y2NvbmZpZyAqLzsKQEAgLTEwMDQ0LDE3ICs5OTA2LDYgQEAKIAkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07Ci0JCTBGNjE4MzNFMUM0NUY2MkEwMDcyNDUwQiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGFpciIgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkw
RjYxODMzRjFDNDVGNjJBMDA3MjQ1MEIgLyogRGVidWcgKi8sCi0JCQkJMEY2MTgzNDAxQzQ1RjYy
QTAwNzI0NTBCIC8qIFJlbGVhc2UgKi8sCi0JCQkJMEY2MTgzNDExQzQ1RjYyQTAwNzI0NTBCIC8q
IFByb2ZpbGluZyAqLywKLQkJCQkwRjYxODM0MjFDNDVGNjJBMDA3MjQ1MEIgLyogUHJvZHVjdGlv
biAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQkwRjkzMjc1NDFD
MjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgImR5bmJlbmNoIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCA2MDhiYjQ1YzRl
YzgxY2I0NzZhOGZkMTEzNDU1MGU3ZGZhODlmYTU3Li44NDhiYWMzYzA4ZjQ2N2JkNmE5OThiNzAw
NjIyMDExYjhhYmVlNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC03NiwxNSArNzYsNiBAQCBpbmxpbmUgYm9vbCBpc1g4Nl82NCgpCiAjZW5kaWYKIH0K
IAotaW5saW5lIGJvb2wgaXNJT1MoKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIGlubGluZSBib29s
IG9wdGltaXplRm9yQVJNdjdJRElWU3VwcG9ydGVkKCkKIHsKICAgICByZXR1cm4gaXNBUk12N0lE
SVZTdXBwb3J0ZWQoKSAmJiBPcHRpb25zOjp1c2VBcmNoaXRlY3R1cmVTcGVjaWZpY09wdGltaXph
dGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAppbmRleCAyNjM3MTQ0ZTc4NDM1MGNhMjZiOTY2ZWRm
YTcxMDdlMThlNDEyODBlLi5hODQwMGUxMmE4MDJkZDBhZTA5N2E2MDdhOTBmZWJhNGI0ZGQ3YjM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0xNDExLDE2ICsxNDExLDYgQEAgcHVibGljOgogICAg
IH0KICNlbmRpZgogCi0gICAgdm9pZCBzd2FwMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JyKHNyYywgZGVzdCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzd2FwMzIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKLSAg
ICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnhjaGdsX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7Ci0gICAgfQotCiAgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21w
bF9ycihyaWdodCwgbGVmdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKaW5kZXggMWU3MGM3MGNlNzA2OTIxY2M1MzY4
OTQwMWM3MTQxNGZhOGVjNTA2MC4uMzQ0ODg0OWMxZjRhNWZjMDQwZWU3Y2E3NDQ3OTNjZjI5OTgy
MjI2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NTUsMTYg
KzY1NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAg
IH0KIAotICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCi0g
ICAgewotICAgICAgICBtX2Fzc2VtYmxlci54Y2hncV9ycihzcmMsIGRlc3QpOwotICAgIH0KLQot
ICAgIHZvaWQgc3dhcDY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCi0gICAgewotICAg
ICAgICBtX2Fzc2VtYmxlci54Y2hncV9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UpOwot
ICAgIH0KLQogICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKaW5k
ZXggZTQ0M2RlMjU4NzM4MmM1NDhiMmFjNmE1Yjg3NjM2NGY1NGI3OTM0NS4uNjc3MDJmZmRmOTAy
NmExYTBiZjQyMzEwN2FhMzQ3MWI3YWMwZmI5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzMSwxMSArMTQz
MSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9YQ0hH
X0V2R3YsIHNyYywgZHN0KTsKICAgICB9CiAKLSAgICB2b2lkIHhjaGdsX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCi0gICAgewotICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfWENIR19Fdkd2LCBzcmMsIGJhc2UsIG9mZnNldCk7Ci0gICAgfQot
CiAjaWYgQ1BVKFg4Nl82NCkKICAgICB2b2lkIHhjaGdxX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKICAgICB7CkBAIC0xNDQ2LDExICsxNDQxLDYgQEAgcHVibGljOgogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9YQ0hHX0V2R3Ys
IHNyYywgZHN0KTsKICAgICB9Ci0KLSAgICB2b2lkIHhjaGdxX3JtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCi0gICAgewotICAgICAgICBtX2Zvcm1hdHRlci5v
bmVCeXRlT3A2NChPUF9YQ0hHX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKLSAgICB9CiAjZW5k
aWYKIAogICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKaW5kZXggNmRmNjIyMmUyM2Q0YWFm
ZjYyNzYwMTFhNmI3YjY0OGZmYmJhMWY0Ni4uMzI3ZjY0YjMzNmE1MGQ2ZjViMDBjNjZlOTYyZGMy
YjMxMTRiYzU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxW
YWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw3
ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIH5DQ2FsbFZhbHVlKCk7CiAKLSAgICBFZmZlY3RzIGVm
ZmVjdHMgeyBFZmZlY3RzOjpmb3JDYWxsKCkgfTsKKyAgICBFZmZlY3RzIGVmZmVjdHM7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKQEAgLTQ3LDYgKzQ3LDcgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgQ0NhbGxWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQogICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDQ2FsbCwg
dHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgICAgICwgZWZmZWN0cyhFZmZlY3RzOjpm
b3JDYWxsKCkpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49
IDEpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcApp
bmRleCA0OGQxZjc3NGVlZjg2ZGQ3YmRkODYxNWEzMjA5OTZhMTRjMjA0MGFhLi5mNmZjMzBlNTQ0
YjQxMTcyYjNlMjc4MmQwMzQxODhmMGVlOGY0NzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsYXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDEyICs1Miw2IEBAIENvbXBpbGF0aW9uOjpDb21waWxh
dGlvbihWTSYgdm0sIFByb2NlZHVyZSYgcHJvYywgdW5zaWduZWQgb3B0TGV2ZWwpCiAgICAgbV9i
eXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpOwogfQogCi1Db21waWxhdGlvbjo6
Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQotICAgIDogbV9jb2RlUmVmKGNvZGVSZWYp
Ci0gICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXByb2R1Y3RzKSkKLXsKLX0KLQogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGlsYXRpb24uaAppbmRleCA3YzNiN2ZiZmQ5N2QzMTg3MjI3ODhlZTU0YTI2YWRhZDgwOTI4Mzgz
Li4yODQ5MjdlMmVkZGJiYmFiZDZlYTEwOGVmNzkyOTI0NWJmZTdkMGM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMTEgKzU1LDYgQEAgY2xhc3MgQ29tcGls
YXRpb24gewogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oVk0m
LCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwotCi0gICAgLy8gVGhpcyBjb25z
dHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0ZSBhIENvbXBpbGF0aW9uLiBJdCdz
IGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAotICAgIC8vIGNvZGUuIFByb2JhYmx5IGJlc3Qg
dG8ga2VlcCBpdCB0aGF0IHdheS4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPik7
Ci0gICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9uKCk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZVJlZi5jb2RlKCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggOWEyOTUw
ZWNhZWZhOTY2MWIyYmRhMTk2NDhkZDVlMmI5Zjg1OTkxZC4uY2VlNGM0ZmQxYWEzMjQ3OTgyMDZj
YTI0ZWRkYWRjOTg4OTM5ZWY3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNp
bmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKICNpbmNsdWRlICJCM0NvbW11dGF0
aXZpdHkuaCIKQEAgLTEwMCwxNSArOTksNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGJsb2NrcyBhcmUgbm90IHJhcmUu
Ci0gICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9wcm9jZWR1cmVbMF0pOwotICAgICAgICB3
aGlsZSAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9mYXN0V29ya2xpc3QucG9wKCkpIHsKLSAg
ICAgICAgICAgIGZvciAoQjM6OkZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yLmlzUmFyZSgpKQot
ICAgICAgICAgICAgICAgICAgICBtX2Zhc3RXb3JrbGlzdC5wdXNoKHN1Y2Nlc3Nvci5ibG9jaygp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIG1fcHJvY2VkdXJlLnJlc2V0
VmFsdWVPd25lcnMoKTsgLy8gVXNlZCBieSBjcm9zc2VzSW50ZXJmZXJlbmNlKCkuCiAKICAgICAg
ICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBh
IGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCkBAIC0xMTgsOCArMTA4LDYgQEAgcHVibGlj
OgogICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KICAgICAgICAgICAgIG1faW5zdHMu
cmVzaXplKDApOwogCi0gICAgICAgICAgICBtX2lzUmFyZSA9ICFtX2Zhc3RXb3JrbGlzdC5zYXco
YmxvY2spOwotCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJMb3dlcmluZyBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsKICAgICAgICAgICAgIApAQCAt
MTU2NCw2ICsxNTUyLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpbnZlcnRlZCk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CisgICAgQXJnIG1hcnNoYWxsQ0Nh
bGxBcmd1bWVudCh1bnNpZ25lZCYgYXJndW1lbnRDb3VudCwgdW5zaWduZWQmIHN0YWNrT2Zmc2V0
LCBWYWx1ZSogY2hpbGQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4ID0g
YXJndW1lbnRDb3VudCsrOworICAgICAgICBpZiAoYXJndW1lbnRJbmRleCA8IEJhbmtJbmZvOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBUbXAgcmVzdWx0ID0gVG1w
KEJhbmtJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCkpOworICAgICAgICAg
ICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjaGlsZC0+dHlwZSgpKSwgaW1tT3JUbXAoY2hp
bGQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisj
aWYgQ1BVKEFSTTY0KSAmJiBQTEFURk9STShJT1MpCisgICAgICAgIC8vIGlPUyBkb2VzIG5vdCBm
b2xsb3cgdGhlIEFSTTY0IEFCSSByZWdhcmRpbmcgZnVuY3Rpb24gY2FsbHMuCisgICAgICAgIC8v
IEFyZ3VtZW50cyBtdXN0IGJlIHBhY2tlZC4KKyAgICAgICAgdW5zaWduZWQgc2xvdFNpemUgPSBz
aXplb2ZUeXBlKGNoaWxkLT50eXBlKCkpOworICAgICAgICBzdGFja09mZnNldCA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzbG90U2l6ZSwgc3RhY2tPZmZzZXQpOworI2Vsc2UKKyAgICAgICAg
dW5zaWduZWQgc2xvdFNpemUgPSBzaXplb2Yodm9pZCopOworI2VuZGlmCisgICAgICAgIEFyZyBy
ZXN1bHQgPSBBcmc6OmNhbGxBcmcoc3RhY2tPZmZzZXQpOworICAgICAgICBzdGFja09mZnNldCAr
PSBzbG90U2l6ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1dCB0aGUgY29kZSBmb3Igc3Rvcmlu
ZyB0aGUgYXJndW1lbnQgYmVmb3JlIGFueXRoaW5nIGVsc2UuIFRoaXMgc2lnbmlmaWNhbnRseSBl
YXNlcyB0aGUKKyAgICAgICAgLy8gYnVyZGVuIG9uIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIElm
IHdlIGNvdWxkLCB3ZSdkIGhvaXN0IHRoZXNlIHN0b3JlcyBhcyBmYXIgYXMKKyAgICAgICAgLy8g
cG9zc2libGUuCisgICAgICAgIC8vIEZJWE1FOiBBZGQgYSBwaGFzZSB0byBob2lzdCBzdG9yZXMg
YXMgaGlnaCBhcyBwb3NzaWJsZSB0byByZWxpZXZlIHJlZ2lzdGVyIHByZXNzdXJlLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDYzCisgICAg
ICAgIG1faW5zdHMubGFzdCgpLmluc2VydCgwLCBjcmVhdGVTdG9yZShjaGlsZCwgcmVzdWx0KSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHZvaWQgbG93
ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewpAQCAtMTkx
NSwxMCArMTkzNCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgY2FzZSBCMzo6Q0NhbGw6IHsKKyAgICAgICAgY2FzZSBDQ2FsbDogewogICAg
ICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3ZhbHVlLT5hczxDQ2FsbFZhbHVlPigpOwor
ICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2FsbCwgQXJnOjpzcGVjaWFsKG1fY29kZS5j
Q2FsbFNwZWNpYWwoKSkpOwogCi0gICAgICAgICAgICBJbnN0IGluc3QobV9pc1JhcmUgPyBBaXI6
OkNvbGRDQ2FsbCA6IEFpcjo6Q0NhbGwsIGNDYWxsKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSBiaXQgd2VpcmQgLSB3ZSBoYXZlIGEgc3VwZXIgaW50ZW5zZSBjb250cmFjdCB3aXRoIEFyZzo6
Q0NhbGxTcGVjaWFsLiBJdCBtaWdodAorICAgICAgICAgICAgLy8gYmUgYmV0dGVyIGlmIHdlIGZh
Y3RvcmVkIEFpcjo6Q0NhbGxTcGVjaWFsIG91dCBvZiB0aGUgQWlyIG5hbWVzcGFjZSBhbmQgbWFk
ZSBpdCBhIEIzCisgICAgICAgICAgICAvLyB0aGluZy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMDQ1CiAKICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgYSB0b24gb2YgZmxleGliaWxpdHkgcmVnYXJkaW5nIHRoZSBjYWxsZWUg
YXJndW1lbnQsIGJ1dCBjdXJyZW50bHksIHdlIGRvbid0CiAgICAgICAgICAgICAvLyB1c2UgaXQg
eWV0LiBJdCBnZXRzIHdlaXJkIGZvciByZWFzb25zOgpAQCAtMTkzMSwxMyArMTk1NCw0OCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTEwNTIKICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKGND
YWxsLT5jaGlsZCgwKSkpOwogCi0gICAgICAgICAgICBpZiAoY0NhbGwtPnR5cGUoKSAhPSBWb2lk
KQotICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1wKGNDYWxsKSk7CisgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIHRlbGwgQWlyIHdoYXQgcmVnaXN0ZXJzIHRoaXMgZGVmaW5lcy4K
KyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpKTsKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoVG1wKEZQUkluZm86OnJldHVy
blZhbHVlRlBSKSk7CisKKyAgICAgICAgICAgIC8vIE5vdyBtYXJzaGFsbCB0aGUgYXJndW1lbnRz
LiBUaGlzIGlzIHdoZXJlIHdlIGltcGxlbWVudCB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIEFm
dGVyCisgICAgICAgICAgICAvLyB0aGlzLCBBaXIgZG9lcyBub3Qga25vdyB3aGF0IHRoZSBjb252
ZW50aW9uIGlzOyBpdCBqdXN0IHRha2VzIG91ciB3b3JkIGZvciBpdC4KKyAgICAgICAgICAgIHVu
c2lnbmVkIGdwQXJndW1lbnRDb3VudCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBmcEFyZ3Vt
ZW50Q291bnQgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNDYWxsLT5udW1DaGlsZHJlbigpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogYXJnQ2hpbGQgPSBjQ2FsbC0+Y2hpbGQoaSk7
CisgICAgICAgICAgICAgICAgQXJnIGFyZzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKEFyZzo6dHlwZUZvckIzVHlwZShhcmdDaGlsZC0+dHlwZSgpKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gbWFy
c2hhbGxDQ2FsbEFyZ3VtZW50PEdQUkluZm8+KGdwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQs
IGFyZ0NoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBjQ2FsbC0+bnVtQ2hpbGRyZW4oKTsgKytpKQotICAgICAg
ICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoaW1tT3JUbXAoY0NhbGwtPmNoaWxkKGkpKSk7Cisg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBt
YXJzaGFsbENDYWxsQXJndW1lbnQ8RlBSSW5mbz4oZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNl
dCwgYXJnQ2hpbGQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQoYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURk1vdmUoaW5zdCkpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKGNDYWxsLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpLCB0bXAoY0NhbGwpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRmxvYXQ6CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBS
KSwgdG1wKGNDYWxsKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjIyOSwxMyArMjI4NywxMSBAQCBw
cml2YXRlOgogCiAgICAgVXNlQ291bnRzIG1fdXNlQ291bnRzOwogICAgIFBoaUNoaWxkcmVuIG1f
cGhpQ2hpbGRyZW47Ci0gICAgQmxvY2tXb3JrbGlzdCBtX2Zhc3RXb3JrbGlzdDsKIAogICAgIFZl
Y3RvcjxWZWN0b3I8SW5zdCwgND4+IG1faW5zdHM7CiAgICAgVmVjdG9yPEluc3Q+IG1fcHJvbG9n
dWU7CiAKICAgICBCMzo6QmFzaWNCbG9jayogbV9ibG9jazsKLSAgICBib29sIG1faXNSYXJlOwog
ICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wYXF1ZUJ5cHJvZHVjdHMuaAppbmRleCA4NTU2ZTllZmMzNGM1
NDM3NzY3ZmFhNjgxMDllMmRmMjZiNzFmOWZkLi45M2NhYTExOTYwNjQ3ZDc2ODcxZTdmYzY2NmY5
NjRjODg4MmNlZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3BhcXVlQnlw
cm9kdWN0cy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgT3BhcXVlQnlwcm9kdWN0cyB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT3BhcXVlQnlwcm9kdWN0cygpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5PcGFxdWVCeXByb2R1Y3RzKCk7CisgICAgfk9wYXF1ZUJ5
cHJvZHVjdHMoKTsKIAogICAgIHNpemVfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYnlwcm9k
dWN0cy5zaXplKCk7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuY3BwCmluZGV4IDVkNTU0YTczNmU3NjNkYjMzZWZjYjE1OGRmMDEyMGFkNzQ0
NWMwYzQuLjY5ODRmNmQ1NWI3NmZiN2UzNDNlMGFiMmQ0OTQyM2I4NWYyNzQzZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcApAQCAtMjAwLDE0
ICsyMDAsMjEgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JWYWx1ZShjb25z
dCBBaXI6OkFyZyYgYXJnLCBWYWx1ZSogdmFsdWUpCiAgICAgY2FzZSBBcmc6OlRtcDoKICAgICBj
YXNlIEFyZzo6SW1tOgogICAgIGNhc2UgQXJnOjpJbW02NDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgaWYgKCFhcmcuaXNTdGFja01lbW9yeSgpKQorICAgIGNhc2UgQXJn
OjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7IC8vIE9LCisg
ICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CisgICAgCisgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUo
dmFsdWUtPnR5cGUoKSk7CiAKLSAgICByZXR1cm4gYXJnLmNhblJlcHJlc2VudCh2YWx1ZSk7Cisg
ICAgcmV0dXJuIGFyZy5pc1R5cGUodHlwZSk7CiB9CiAKIGJvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c0FyZ1ZhbGlkRm9yUmVwKEFpcjo6Q29kZSYgY29kZSwgY29uc3QgQWlyOjpBcmcmIGFyZywgY29u
c3QgVmFsdWVSZXAmIHJlcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcApp
bmRleCAwMzNjOTcyMjYzOGZlZjhkMjQ1N2YxNDMwOTY0MWViMjMzNjhmYWQ0Li44ZDgzYmNiOTM4
YWZkYmVjZWI3NWY2YTQ5NjZjN2U1NzYyYWExOWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCkBAIC0zMCw5ICszMCw2IEBACiAKICNpbmNsdWRlICJBaXJTcGVjaWFs
LmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCi0jaW5jbHVkZSAiQjNWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkZQUkluZm8uaCIKLSNpbmNsdWRlICJHUFJJbmZvLmgiCiAKICNpZiBDT01QSUxFUihH
Q0MpICYmIEFTU0VSVF9ESVNBQkxFRAogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCkBAIC00
MSwyMCArMzgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CiAKLWJvb2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgQWRkcjoKLSAgICAgICAgcmV0dXJuIGJhc2UoKSA9PSBBaXI6
OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKLSAgICAgICAgICAgIHx8IGJhc2UoKSA9
PSBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNh
c2UgU3RhY2s6Ci0gICAgY2FzZSBDYWxsQXJnOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBib29sIEFyZzo6aXNS
ZXByZXNlbnRhYmxlQXMoV2lkdGggd2lkdGgsIFNpZ25lZG5lc3Mgc2lnbmVkbmVzcykgY29uc3QK
IHsKICAgICBzd2l0Y2ggKHNpZ25lZG5lc3MpIHsKQEAgLTg0LDMxICs2Nyw2IEBAIGJvb2wgQXJn
Ojppc1JlcHJlc2VudGFibGVBcyhXaWR0aCB3aWR0aCwgU2lnbmVkbmVzcyBzaWduZWRuZXNzKSBj
b25zdAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEFyZzo6dXNlc1RtcChB
aXI6OlRtcCB0bXApIGNvbnN0Ci17Ci0gICAgYm9vbCB1c2VzID0gZmFsc2U7Ci0gICAgY29uc3Rf
Y2FzdDxBcmcqPih0aGlzKS0+Zm9yRWFjaFRtcEZhc3QoCi0gICAgICAgIFsmXSAoQWlyOjpUbXAg
b3RoZXJUbXApIHsKLSAgICAgICAgICAgIGlmIChvdGhlclRtcCA9PSB0bXApCi0gICAgICAgICAg
ICAgICAgdXNlcyA9IHRydWU7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiB1c2VzOwotfQotCi1i
b29sIEFyZzo6Y2FuUmVwcmVzZW50KFZhbHVlKiB2YWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
aXNUeXBlKHR5cGVGb3JCM1R5cGUodmFsdWUtPnR5cGUoKSkpOwotfQotCi1ib29sIEFyZzo6aXND
b21wYXRpYmxlVHlwZShjb25zdCBBcmcmIG90aGVyKSBjb25zdAotewotICAgIGlmIChoYXNUeXBl
KCkpCi0gICAgICAgIHJldHVybiBvdGhlci5pc1R5cGUodHlwZSgpKTsKLSAgICBpZiAob3RoZXIu
aGFzVHlwZSgpKQotICAgICAgICByZXR1cm4gaXNUeXBlKG90aGVyLnR5cGUoKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTE1OSw5ICsxMTcsNiBAQCB2b2lkIEFyZzo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0
LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBXaWR0aEFyZzoKLSAgICAgICAgb3V0LnByaW50KHdpZHRoKCkpOwotICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIxMiw5ICsx
NjcsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXJnOjpLaW5kIGtp
bmQpCiAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CiAgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmc6OldpZHRoQXJnOgotICAgICAgICBvdXQu
cHJpbnQoIldpZHRoQXJnIik7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc5LDE2ICsyMzEsMTYgQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFyZzo6V2lkdGggd2lkdGgpCiB7CiAgICAgc3dpdGNo
ICh3aWR0aCkgewogICAgIGNhc2UgQXJnOjpXaWR0aDg6Ci0gICAgICAgIG91dC5wcmludCgiOCIp
OworICAgICAgICBvdXQucHJpbnQoIldpZHRoOCIpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBBcmc6OldpZHRoMTY6Ci0gICAgICAgIG91dC5wcmludCgiMTYiKTsKKyAgICAgICAgb3V0LnBy
aW50KCJXaWR0aDE2Iik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEFyZzo6V2lkdGgzMjoK
LSAgICAgICAgb3V0LnByaW50KCIzMiIpOworICAgICAgICBvdXQucHJpbnQoIldpZHRoMzIiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpXaWR0aDY0OgotICAgICAgICBvdXQucHJp
bnQoIjY0Iik7CisgICAgICAgIG91dC5wcmludCgiV2lkdGg2NCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCAyMmQ4MDJh
MmFkOTkwNTY2OTcwZDcyNTVjOThlZjU3YzJjYTY4NjZmLi44ZjNkMTE1M2RmNzczY2VhMjkxYjIz
NTUyZmVhNjIxN2U1MDQxNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgK
QEAgLTM4LDExICszOCw3IEBACiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcmV0
dXJuLXR5cGUiCiAjZW5kaWYgLy8gQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKIAot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLWNsYXNzIFZhbHVlOwotCi1uYW1lc3Bh
Y2UgQWlyIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgU3BlY2lhbDsKIGNsYXNzIFN0YWNrU2xvdDsKQEAgLTc4LDggKzc0LDcgQEAgcHVi
bGljOgogICAgICAgICBSZWxDb25kLAogICAgICAgICBSZXNDb25kLAogICAgICAgICBEb3VibGVD
b25kLAotICAgICAgICBTcGVjaWFsLAotICAgICAgICBXaWR0aEFyZworICAgICAgICBTcGVjaWFs
CiAgICAgfTsKIAogICAgIGVudW0gUm9sZSA6IGludDhfdCB7CkBAIC0xNjYsMTMgKzE2MSw2IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0YXRpYyB2b2lkIGZvckVhY2hUeXBl
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBmdW5jdG9yKEdQKTsKLSAg
ICAgICAgZnVuY3RvcihGUCk7Ci0gICAgfQotCiAgICAgZW51bSBXaWR0aCA6IGludDhfdCB7CiAg
ICAgICAgIFdpZHRoOCwKICAgICAgICAgV2lkdGgxNiwKQEAgLTIzOSwyNiArMjI3LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gaXNBbnlVc2Uocm9sZSkgJiYgIWlzQ29sZFVzZShyb2xlKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgUm9sZSBjb29sZWQoUm9sZSByb2xlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgICAgIGNhc2UgQ29sZFVzZToKLSAgICAgICAgY2FzZSBM
YXRlQ29sZFVzZToKLSAgICAgICAgY2FzZSBVc2VEZWY6Ci0gICAgICAgIGNhc2UgVXNlWkRlZjoK
LSAgICAgICAgY2FzZSBEZWY6Ci0gICAgICAgIGNhc2UgWkRlZjoKLSAgICAgICAgY2FzZSBVc2VB
ZGRyOgotICAgICAgICBjYXNlIFNjcmF0Y2g6Ci0gICAgICAgIGNhc2UgRWFybHlEZWY6Ci0gICAg
ICAgICAgICByZXR1cm4gcm9sZTsKLSAgICAgICAgY2FzZSBVc2U6Ci0gICAgICAgICAgICByZXR1
cm4gQ29sZFVzZTsKLSAgICAgICAgY2FzZSBMYXRlVXNlOgotICAgICAgICAgICAgcmV0dXJuIExh
dGVDb2xkVXNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBSb2xlIGltcGxpZXMgdGhhdCB0aGUgSW5zdCB3aWxsIFVzZSB0aGUgQXJnIGJlZm9yZSBkb2lu
ZyBhbnl0aGluZyBlbHNlLgogICAgIHN0YXRpYyBib29sIGlzRWFybHlVc2UoUm9sZSByb2xlKQog
ICAgIHsKQEAgLTQ4MSwxMSArNDQ5LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIHN0YXRpYyBBcmcgaW1tUHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MpCi0g
ICAgewotICAgICAgICByZXR1cm4gaW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PihhZGRyZXNz
KSk7Ci0gICAgfQotCiAgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CkBAIC02MDAs
MTQgKzU2Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBzdGF0aWMgQXJnIHdpZHRoQXJnKFdpZHRoIHdpZHRoKQotICAgIHsKLSAgICAgICAgQXJnIHJl
c3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFdpZHRoQXJnOwotICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSB3aWR0aDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldApAQCAtNjQ0LDExICs1OTksNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CiAgICAgfQogCi0gICAgYm9vbCBp
c1NvbWVJbW0oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW1tKCkgfHwgaXNJbW02
NCgpOwotICAgIH0KLQogICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gQWRkcjsKQEAgLTY2OSwyMSArNjE5LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4ga2luZCgpID09IEluZGV4OwogICAgIH0KIAotICAgIGJvb2wgaXNNZW1vcnkoKSBj
b25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICAgICAgY2FzZSBBZGRy
OgotICAgICAgICBjYXNlIFN0YWNrOgotICAgICAgICBjYXNlIENhbGxBcmc6Ci0gICAgICAgIGNh
c2UgSW5kZXg6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNT
dGFja01lbW9yeSgpIGNvbnN0OwotCiAgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOwpAQCAtNzE2LDExICs2NTEsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKICAgICB9CiAKLSAgICBi
b29sIGlzV2lkdGhBcmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBX
aWR0aEFyZzsKLSAgICB9Ci0KICAgICBib29sIGlzQWxpdmUoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwpAQCAtNzY0LDcgKzY5NCwxOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2Jhc2U7CiAgICAgfQogCi0gICAgYm9vbCBoYXNPZmZzZXQo
KSBjb25zdCB7IHJldHVybiBpc01lbW9yeSgpOyB9CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgor
ICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBpbnQzMl90
IG9mZnNldCgpIGNvbnN0CiAgICAgewpAQCAtODAzLDEyICs3NDQsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOwogICAgIH0K
IAotICAgIFdpZHRoIHdpZHRoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkg
PT0gV2lkdGhBcmcpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2lkdGg+KG1fb2Zmc2V0
KTsKLSAgICB9Ci0KICAgICBib29sIGlzR1BUbXAoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOwpAQCAtODMzLDcgKzc2OCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBjYXNlIERvdWJsZUNvbmQ6CiAgICAgICAg
IGNhc2UgU3BlY2lhbDoKLSAgICAgICAgY2FzZSBXaWR0aEFyZzoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7
CkBAIC04NTIsNyArNzg2LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlc0NvbmQ6CiAgICAg
ICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgotICAgICAgICBjYXNl
IFdpZHRoQXJnOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGNhc2UgQWRkcjoKQEAgLTg5NiwxMCArODI5LDYgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBib29sIGNhblJlcHJlc2Vu
dChWYWx1ZSogdmFsdWUpIGNvbnN0OwotCi0gICAgYm9vbCBpc0NvbXBhdGlibGVUeXBlKGNvbnN0
IEFyZyYgb3RoZXIpIGNvbnN0OwotCiAgICAgYm9vbCBpc0dQUigpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwpAQCAtMTA0MSw3ICs5NzAsNiBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25k
OgogICAgICAgICBjYXNlIFNwZWNpYWw6Ci0gICAgICAgIGNhc2UgV2lkdGhBcmc6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTEwNjQsOCArOTkyLDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ym9vbCB1c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7Ci0KICAgICAvLyBUaGlzIGlzIHNtYXJ0
IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1
bGUgd2lsbCB1c2UgaXRzCiAgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFt
cGxlLCB0aGlzOgogICAgIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5oCmluZGV4IGU3ZmVkM2JlMzMzZmZlMjE1M2Y5ZDdkMmFhMWE1OWI2MjIzYjZjMzQu
LjczOGMzZWViNjUzMTQ2ODM3OTZhNGY1ZWY2YTFhYjJlNDMzMmMzYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCkBAIC03OCwxNyArNzgsMTUgQEAg
cHVibGljOgogICAgIEluc3RMaXN0JiBpbnN0cygpIHsgcmV0dXJuIG1faW5zdHM7IH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+Ci0gICAgSW5zdCYgYXBwZW5kSW5zdChJbnN0JiYgaW5z
dCkKKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCiAgICAgewogICAgICAgICBtX2lu
c3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOwotICAgICAgICByZXR1cm4gbV9p
bnN0cy5sYXN0KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgotICAgIEluc3QmIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgdm9pZCBh
cHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgbV9pbnN0cy5h
cHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7Ci0gICAg
ICAgIHJldHVybiBtX2luc3RzLmxhc3QoKTsKICAgICB9CiAKICAgICAvLyBUaGUgIjAiIGNhc2Ug
aXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNl
LiBUaGUgIjEiIGNhc2UgaXMgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYzMTI4YTdjOTg5Y2I1OGM0YzgwODc4ZjE2YjFkNzk0NDc0OThjZDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFpckNDYWxsaW5nQ29udmVudGlvbi5o
IgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgot
I2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKLSNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZv
PgotQXJnIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGwodW5zaWduZWQmIGFyZ3VtZW50Q291bnQs
IHVuc2lnbmVkJiBzdGFja09mZnNldCwgVmFsdWUqIGNoaWxkKQotewotICAgIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXggPSBhcmd1bWVudENvdW50Kys7Ci0gICAgaWYgKGFyZ3VtZW50SW5kZXggPCBC
YW5rSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykKLSAgICAgICAgcmV0dXJuIFRtcChC
YW5rSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50SW5kZXgpKTsKLQotICAgIHVuc2ln
bmVkIHNsb3RTaXplOwotICAgIGlmIChpc0FSTTY0KCkgJiYgaXNJT1MoKSkgewotICAgICAgICAv
LyBBcmd1bWVudHMgYXJlIHBhY2tlZC4KLSAgICAgICAgc2xvdFNpemUgPSBzaXplb2ZUeXBlKGNo
aWxkLT50eXBlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFyZ3VtZW50cyBhcmUgYWxp
Z25lZC4KLSAgICAgICAgc2xvdFNpemUgPSA4OwotICAgIH0KLQotICAgIHN0YWNrT2Zmc2V0ID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3RTaXplLCBzdGFja09mZnNldCk7Ci0gICAgQXJn
IHJlc3VsdCA9IEFyZzo6Y2FsbEFyZyhzdGFja09mZnNldCk7Ci0gICAgc3RhY2tPZmZzZXQgKz0g
c2xvdFNpemU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQXJnIG1hcnNoYWxsQ0NhbGxBcmd1
bWVudCgKLSAgICB1bnNpZ25lZCYgZ3BBcmd1bWVudENvdW50LCB1bnNpZ25lZCYgZnBBcmd1bWVu
dENvdW50LCB1bnNpZ25lZCYgc3RhY2tPZmZzZXQsIFZhbHVlKiBjaGlsZCkKLXsKLSAgICBzd2l0
Y2ggKEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkgewotICAgIGNhc2UgQXJnOjpH
UDoKLSAgICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8R1BSSW5mbz4oZ3BB
cmd1bWVudENvdW50LCBzdGFja09mZnNldCwgY2hpbGQpOwotICAgIGNhc2UgQXJnOjpGUDoKLSAg
ICAgICAgcmV0dXJuIG1hcnNoYWxsQ0NhbGxBcmd1bWVudEltcGw8RlBSSW5mbz4oZnBBcmd1bWVu
dENvdW50LCBzdGFja09mZnNldCwgY2hpbGQpOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBBcmcoKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCi0KLVZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYgY29k
ZSwgQ0NhbGxWYWx1ZSogdmFsdWUpCi17Ci0gICAgVmVjdG9yPEFyZz4gcmVzdWx0OwotICAgIHJl
c3VsdC5hcHBlbmQoVG1wKENDYWxsU3BlY2lhbDo6c2NyYXRjaFJlZ2lzdGVyKSk7Ci0gICAgdW5z
aWduZWQgZ3BBcmd1bWVudENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBmcEFyZ3VtZW50Q291bnQg
PSAwOwotICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkgewotICAgICAgICByZXN1bHQuYXBw
ZW5kKAotICAgICAgICAgICAgbWFyc2hhbGxDQ2FsbEFyZ3VtZW50KGdwQXJndW1lbnRDb3VudCwg
ZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCwgdmFsdWUtPmNoaWxkKGkpKSk7Ci0gICAgfQot
ICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVRtcCBjQ2FsbFJlc3VsdChUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgY2FzZSBWb2lkOgotICAgICAgICByZXR1cm4gVG1wKCk7Ci0gICAgY2FzZSBJbnQzMjoK
LSAgICBjYXNlIEludDY0OgotICAgICAgICByZXR1cm4gVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKLSAgICBjYXNlIEZsb2F0OgotICAgIGNhc2UgRG91YmxlOgotICAgICAgICByZXR1cm4g
VG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUbXAoKTsKLX0KLQotSW5zdCBidWlsZENDYWxs
KENvZGUmIGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+JiBhcmd1bWVudHMp
Ci17Ci0gICAgSW5zdCBpbnN0KFBhdGNoLCBvcmlnaW4sIEFyZzo6c3BlY2lhbChjb2RlLmNDYWxs
U3BlY2lhbCgpKSk7Ci0gICAgaW5zdC5hcmdzLmFwcGVuZChhcmd1bWVudHNbMF0pOwotICAgIGlu
c3QuYXJncy5hcHBlbmQoVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgaW5zdC5h
cmdzLmFwcGVuZChUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKSk7Ci0gICAgaW5zdC5hcmdz
LmFwcGVuZChUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFyZyBhcmcgPSBh
cmd1bWVudHNbaV07Ci0gICAgICAgIGlmIChhcmcuaXNUbXAoKSkKLSAgICAgICAgICAgIGluc3Qu
YXJncy5hcHBlbmQoYXJnKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3Q7Ci19Ci0KLX0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsaW5nQ29udmVudGlv
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTAwNWU4OTBhYmY5NjY0NjFiNTg0
ZjliYWQ5NTEyMWI4ODM1MmE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxpbmdDb252ZW50
aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWlyQ0NhbGxpbmdDb252ZW50aW9u
X2gKLSNkZWZpbmUgQWlyQ0NhbGxpbmdDb252ZW50aW9uX2gKLQotI2lmIEVOQUJMRShCM19KSVQp
Ci0KLSNpbmNsdWRlICJBaXJBcmcuaCIKLSNpbmNsdWRlICJBaXJJbnN0LmgiCi0jaW5jbHVkZSAi
QjNUeXBlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKLQotY2xhc3MgQ0NhbGxWYWx1ZTsKLQotbmFtZXNwYWNlIEFpciB7Ci0KLWNs
YXNzIENvZGU7Ci0KLVZlY3RvcjxBcmc+IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oQ29kZSYs
IENDYWxsVmFsdWUqKTsKLQotVG1wIGNDYWxsUmVzdWx0KFR5cGUpOwotCi1JbnN0IGJ1aWxkQ0Nh
bGwoQ29kZSYsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxBcmc+Jik7Ci0KLX0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KLSNl
bmRpZiAvLyBBaXJDQ2FsbGluZ0NvbnZlbnRpb25faAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCmluZGV4IDY5NGE5YTYxZGVmZmI3MDAyZGY3MTU0OTlkMmM4MGFiZGEwODk3
OTAuLmRhOWE1OTI2M2U0ODQ1MjI1Nzc2M2M5NjI0MDQ3ZWRiYTBjZjcxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYwLDEzICs2MCwxMiBAQCBwdWJsaWM6CiAKICAg
ICBQcm9jZWR1cmUmIHByb2MoKSB7IHJldHVybiBtX3Byb2M7IH0KIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSAxKTsKKyAgICBC
YXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gMSk7CiAKICAgICAvLyBOb3Rl
IHRoYXQgeW91IGNhbiByZWx5IG9uIHN0YWNrIHNsb3RzIGFsd2F5cyBnZXR0aW5nIGluZGljZXMg
dGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGluZGV4CiAgICAgLy8gb2YgYW55IHByaW9yIHN0YWNr
IHNsb3QuIEluIGZhY3QsIGFsbCBzdGFjayBzbG90cyB5b3UgY3JlYXRlIGluIHRoZSBmdXR1cmUg
d2lsbCBoYXZlIGFuIGluZGV4CiAgICAgLy8gdGhhdCBpcyA+PSBzdGFja1Nsb3RzKCkuc2l6ZSgp
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KAotICAgICAg
ICB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVs
bHB0cik7CisgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0
YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOwogICAgIFN0YWNrU2xvdCog
YWRkU3RhY2tTbG90KFN0YWNrU2xvdFZhbHVlKik7CiAKICAgICBTcGVjaWFsKiBhZGRTcGVjaWFs
KHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckN1c3RvbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMGU0OTU4MmRk
NDUwM2Y1Mzc3ZDhjNjhiN2Y3ZmQwNzRkYzUwMjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0
b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkFpckN1c3RvbS5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkIzQ0Nh
bGxWYWx1ZS5oIgotI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotYm9vbCBDQ2FsbEN1c3RvbTo6aXNW
YWxpZEZvcm0oSW5zdCYgaW5zdCkKLXsKLSAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luLT5hczxDQ2FsbFZhbHVlPigpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9ICh2YWx1ZS0+dHlwZSgpID09IFZv
aWQgPyAwIDogMSkgKyB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlIGFyZ3VtZW50cyBjYW4gb25seSByZWZlciB0byB0aGUgc3RhY2ssIHRt
cHMsIG9yIGltbWVkaWF0ZXMuCi0gICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgewotICAg
ICAgICBpZiAoIWFyZy5pc1RtcCgpICYmICFhcmcuaXNTdGFja01lbW9yeSgpICYmICFhcmcuaXNT
b21lSW1tKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gMDsKLQotICAgIGlmICghaW5zdC5hcmdzWzBdLmlzR1AoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSByZXN1bHQgdGhlbiBpdCBjYW5u
b3QgYmUgYW4gaW1tZWRpYXRlLgotICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpIHsKLSAg
ICAgICAgaWYgKGluc3QuYXJnc1sxXS5pc1NvbWVJbW0oKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFpbnN0LmFyZ3NbMV0uY2FuUmVwcmVzZW50KHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgb2Zmc2V0Kys7Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7IGktLSA+IDE7KSB7Ci0gICAg
ICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKLSAgICAgICAgQXJnIGFyZyA9IGlu
c3QuYXJnc1tvZmZzZXQgKyBpXTsKLSAgICAgICAgaWYgKCFhcmcuY2FuUmVwcmVzZW50KGNoaWxk
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsQ3VzdG9tOjpnZW5lcmF0ZShJbnN0JiBpbnN0
LCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpCi17Ci0gICAgZGF0YUxvZygiRkFU
QUw6IFVubG93ZXJlZCBDIGNhbGw6ICIsIGluc3QsICJcbiIpOwotICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOwotICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKLX0KLQotYm9v
bCBTaHVmZmxlQ3VzdG9tOjppc1ZhbGlkRm9ybShJbnN0JiBpbnN0KQotewotICAgIGlmIChpbnN0
LmFyZ3Muc2l6ZSgpICUgMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQSBkZXN0
aW5hdGlvbiBtYXkgb25seSBhcHBlYXIgb25jZS4gVGhpcyByZXF1aXJlbWVudCBhbGxvd3MgdXMg
dG8gYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvcgotICAgIC8vIG9mIGhhdmluZyBhIGRlc3Rp
bmF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gZ2V0IG11bHRpcGxlIGlucHV0cyBzaW11bHRhbmVv
dXNseS4gSXQgYWxzbwotICAgIC8vIGltcG9zZXMgc29tZSBpbnRlcmVzdGluZyBjb25zdHJhaW50
cyBvbiB0aGUgInNoYXBlIiBvZiB0aGUgc2h1ZmZsZS4gSWYgd2UgdHJlYXQgYSBzaHVmZmxlIHBh
aXIKLSAgICAvLyBhcyBhbiBlZGdlIGFuZCB0aGUgQXJncyBhcyBub2RlcywgdGhlbiB0aGUgc2lu
Z2xlLWRlc3RpbmF0aW9uIHJlcXVpcmVtZW50IG1lYW5zIHRoYXQgdGhlCi0gICAgLy8gc2h1ZmZs
ZSBncmFwaCBjb25zaXN0cyBvZiB0d28ga2luZHMgb2Ygc3ViZ3JhcGhzOgotICAgIC8vCi0gICAg
Ly8gLSBTcGFubmluZyB0cmVlcy4gV2UgY2FsbCB0aGVzZSBzaGlmdHMuIFRoZXkgY2FuIGJlIGV4
ZWN1dGVkIGFzIGEgc2VxdWVuY2Ugb2YgTW92ZQotICAgIC8vICAgaW5zdHJ1Y3Rpb25zIGFuZCBk
b24ndCB1c3VhbGx5IHJlcXVpcmUgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgLy8KLSAgICAvLyAt
IENsb3NlZCBsb29wcy4gVGhlc2UgbG9vcHMgY29uc2lzdCBvZiBub2RlcyB0aGF0IGhhdmUgb25l
IHN1Y2Nlc3NvciBhbmQgb25lIHByZWRlY2Vzc29yLCBzbwotICAgIC8vICAgdGhlcmUgaXMgbm8g
d2F5IHRvICJnZXQgaW50byIgdGhlIGxvb3AgZnJvbSBvdXRzaWRlIG9mIGl0LiBUaGVzZSBjYW4g
YmUgZXhlY3V0ZWQgdXNpbmcgc3dhcHMKLSAgICAvLyAgIG9yIGJ5IHNhdmluZyBvbmUgb2YgdGhl
IEFyZ3MgdG8gYSBzY3JhdGNoIHJlZ2lzdGVyIGFuZCBleGVjdXRpbmcgaXQgYXMgYSBzaGlmdC4K
LSAgICBIYXNoU2V0PEFyZz4gZHN0czsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsK
LSAgICAgICAgdW5zaWduZWQgbW9kZSA9IGkgJSAzOwotCi0gICAgICAgIGlmIChtb2RlID09IDIp
IHsKLSAgICAgICAgICAgIC8vIEl0J3MgdGhlIHdpZHRoLgotICAgICAgICAgICAgaWYgKCFhcmcu
aXNXaWR0aEFyZygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIHNvdXJjZSBjYW4gYmUgYW4g
aW1tZWRpYXRlLgotICAgICAgICBpZiAoIW1vZGUpIHsKLSAgICAgICAgICAgIGlmIChhcmcuaXNT
b21lSW1tKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICgh
YXJnLmlzQ29tcGF0aWJsZVR5cGUoaW5zdC5hcmdzW2kgKyAxXSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1vZGUg
PT0gMSk7Ci0gICAgICAgICAgICBpZiAoIWRzdHMuYWRkKGFyZykuaXNOZXdFbnRyeSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJnLmlz
VG1wKCkgfHwgYXJnLmlzTWVtb3J5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTm8gZGVzdGluYXRpb24gcmVnaXN0ZXIg
bWF5IGFwcGVhciBpbiBhbnkgYWRkcmVzcyBleHByZXNzaW9ucy4gVGhlIGxvd2VyaW5nIGNhbid0
IGhhbmRsZSBpdAotICAgIC8vIGFuZCBpdCdzIG5vdCB1c2VmdWwgZm9yIHRoZSB3YXkgd2UgZW5k
IHVwIHVzaW5nIFNodWZmbGVzLiBOb3JtYWxseSwgU2h1ZmZsZXMgb25seSB1c2VkIGZvcgotICAg
IC8vIHN0YWNrIGFkZHJlc3NlcyBhbmQgbm9uLXN0YWNrIHJlZ2lzdGVycy4KLSAgICBmb3IgKEFy
ZyYgYXJnIDogaW5zdC5hcmdzKSB7Ci0gICAgICAgIGlmICghYXJnLmlzTWVtb3J5KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgIGFyZy5m
b3JFYWNoVG1wRmFzdCgKLSAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAg
ICAgIGlmIChkc3RzLmNvbnRhaW5zKHRtcCkpCi0gICAgICAgICAgICAgICAgICAgIG9rID0gZmFs
c2U7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQ0NhbGxIZWxwZXJzOjpK
dW1wIFNodWZmbGVDdXN0b206OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYsIEdl
bmVyYXRpb25Db250ZXh0JikKLXsKLSAgICBkYXRhTG9nKCJGQVRBTDogVW5sb3dlcmVkIHNodWZm
bGU6ICIsIGluc3QsICJcbiIpOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAg
IHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ3VzdG9tLmgKaW5kZXggMjU4MjRlMjk3ZDAzZGQ2NDYxZjExOTBhODI0
MDVlMDQyMTI4ZmUxNi4uYTQwMDJhZWJkYmRiM2Q5N2Y1MzU4NGRlNjc1ZDkyYjVmNWIxYjVjNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDdXN0b20uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckN1c3RvbS5oCkBAIC0zMCw3ICszMCw2
IEBACiAKICNpbmNsdWRlICJBaXJJbnN0LmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgotI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgewogCkBAIC01Miw4ICs1MSw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIC8vIHlvdSBuZWVkIHRvIGNhcnJ5IGV4dHJhIHN0YXRlIGFy
b3VuZCB3aXRoIHRoZSBpbnN0cnVjdGlvbi4gQWxzbywgU3BlY2lhbHMgbWVhbiB0aGF0IHlvdQog
Ly8gYWx3YXlzIGhhdmUgYWNjZXNzIHRvIENvZGUmIGV2ZW4gaW4gbWV0aG9kcyB0aGF0IGRvbid0
IHRha2UgYSBHZW5lcmF0aW9uQ29udGV4dC4KIAotLy8gRGVmaW5pdGlvbiBvZiBQYXRjaCBpbnN0
cnVjdGlvbi4gUGF0Y2ggaXMgdXNlZCB0byBkZWxlZ2F0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGlu
c3RydWN0aW9uIHRvIHRoZQotLy8gU3BlY2lhbCBvYmplY3QsIHdoaWNoIHdpbGwgYmUgdGhlIGZp
cnN0IGFyZ3VtZW50IHRvIHRoZSBpbnN0cnVjdGlvbi4KIHN0cnVjdCBQYXRjaEN1c3RvbSB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJn
KEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC05OSwxMTQgKzk2LDYgQEAg
c3RydWN0IFBhdGNoQ3VzdG9tIHsKICAgICB9CiB9OwogCi0vLyBEZWZpbml0aW9uIG9mIENDYWxs
IGluc3RydWN0aW9uLiBDQ2FsbCBpcyB1c2VkIGZvciBob3QgcGF0aCBDIGZ1bmN0aW9uIGNhbGxz
LiBJdCdzIGxvd2VyZWQgdG8gYQotLy8gUGF0Y2ggd2l0aCBhbiBBaXIgQ0NhbGxTcGVjaWFsIGFs
b25nIHdpdGggY29kZSB0byBtYXJzaGFsIGluc3RydWN0aW9ucy4gVGhlIGxvd2VyaW5nIGhhcHBl
bnMKLS8vIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBzbyB0aGF0IHRoZSByZWdpc3RlciBh
bGxvY2F0b3Igc2VlcyB0aGUgY2xvYmJlcnMuCi1zdHJ1Y3QgQ0NhbGxDdXN0b20gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47Ci0KLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotCi0gICAg
ICAgIGZ1bmN0b3IoaW5zdC5hcmdzW2luZGV4KytdLCBBcmc6OlVzZSwgQXJnOjpHUCwgQXJnOjpw
b2ludGVyV2lkdGgoKSk7IC8vIGNhbGxlZQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLT50
eXBlKCkgIT0gVm9pZCkgewotICAgICAgICAgICAgZnVuY3RvcigKLSAgICAgICAgICAgICAgICBp
bnN0LmFyZ3NbaW5kZXgrK10sIEFyZzo6RGVmLAotICAgICAgICAgICAgICAgIEFyZzo6dHlwZUZv
ckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSwKLSAgICAgICAgICAgICAgICBBcmc6OndpZHRoRm9yQjNU
eXBlKHZhbHVlLT50eXBlKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7Ci0gICAgICAgICAgICBWYWx1
ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7Ci0gICAgICAgICAgICBmdW5jdG9yKAotICAgICAg
ICAgICAgICAgIGluc3QuYXJnc1tpbmRleCsrXSwgQXJnOjpVc2UsCi0gICAgICAgICAgICAgICAg
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpLAotICAgICAgICAgICAgICAgIEFyZzo6
d2lkdGhGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHN0YXRpYyBib29sIGlzVmFsaWRG
b3JtU3RhdGljKEFyZ3VtZW50cy4uLikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRm9ybShJbnN0Jik7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQpCi0gICAgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBoYXNOb25BcmdOb25Db250cm9sRWZmZWN0
cyhJbnN0JikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFRo
aXMganVzdCBjcmFzaGVzLCBzaW5jZSB3ZSBleHBlY3QgQyBjYWxscyB0byBiZSBsb3dlcmVkIGJl
Zm9yZSBnZW5lcmF0aW9uLgotICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
SW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Ci19OwotCi1zdHJ1Y3Qg
Q29sZENDYWxsQ3VzdG9tIDogQ0NhbGxDdXN0b20gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Ci0gICAgc3RhdGljIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBqdXN0IGxpa2UgYSBjYWxs
LCBidXQgdXNlcyBiZWNvbWUgY29sZC4KLSAgICAgICAgQ0NhbGxDdXN0b206OmZvckVhY2hBcmco
Ci0gICAgICAgICAgICBpbnN0LAotICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSB0eXBlLCBBcmc6OldpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgZnVuY3RvcihhcmcsIEFyZzo6Y29vbGVkKHJvbGUpLCB0eXBlLCB3aWR0aCk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgU2h1ZmZsZUN1c3RvbSB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBzdGF0aWMgdm9pZCBmb3JFYWNoQXJnKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBsaW1p
dCA9IGluc3QuYXJncy5zaXplKCkgLyAzICogMzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxpbWl0OyBpICs9IDMpIHsKLSAgICAgICAgICAgIEFyZyYgc3JjID0gaW5zdC5hcmdz
W2kgKyAwXTsKLSAgICAgICAgICAgIEFyZyYgZHN0ID0gaW5zdC5hcmdzW2kgKyAxXTsKLSAgICAg
ICAgICAgIEFyZyYgd2lkdGhBcmcgPSBpbnN0LmFyZ3NbaSArIDJdOwotICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCA9IHdpZHRoQXJnLndpZHRoKCk7Ci0gICAgICAgICAgICBBcmc6OlR5cGUg
dHlwZSA9IHNyYy5pc0dQKCkgJiYgZHN0LmlzR1AoKSA/IEFyZzo6R1AgOiBBcmc6OkZQOwotICAg
ICAgICAgICAgZnVuY3RvcihzcmMsIEFyZzo6VXNlLCB0eXBlLCB3aWR0aCk7Ci0gICAgICAgICAg
ICBmdW5jdG9yKGRzdCwgQXJnOjpEZWYsIHR5cGUsIHdpZHRoKTsKLSAgICAgICAgICAgIGZ1bmN0
b3Iod2lkdGhBcmcsIEFyZzo6VXNlLCBBcmc6OkdQLCBBcmc6OldpZHRoOCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgc3RhdGlj
IGJvb2wgaXNWYWxpZEZvcm1TdGF0aWMoQXJndW1lbnRzLi4uKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGlzVmFsaWRGb3JtKEluc3QmKTsK
LSAgICAKLSAgICBzdGF0aWMgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgaW5kZXgp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGluZGV4ICUgMykgewotICAgICAgICBjYXNlIDA6Ci0g
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIGJvb2wgaGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoSW5zdCYpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKLX07Ci0K
IH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVtaXRTaHVm
ZmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVmNmQyNmU3MGYxN2RiZjkyODUxZjEz
MmNiOTllNjIzMGI5MTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFpckVt
aXRTaHVmZmxlLmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKLSNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCi0jaW5jbHVkZSA8d3Rm
L0dyYXBoTm9kZVdvcmtsaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotbmFtZXNwYWNlIHsK
LQotYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1U
bXAgZmluZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgewotICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsK
LSAgICAgICAgVG1wIHRtcChyZWcpOwotICAgICAgICBpZiAoZnVuY3Rvcih0bXApKQotICAgICAg
ICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0gICAgcmV0dXJuIFRtcCgpOwotfQotCi1UbXAgZmlu
ZFBvc3NpYmxlU2NyYXRjaChBcmc6OlR5cGUgdHlwZSwgY29uc3QgQXJnJiBhcmcxLCBjb25zdCBB
cmcmIGFyZzIpIHsKLSAgICByZXR1cm4gZmluZFBvc3NpYmxlU2NyYXRjaCgKLSAgICAgICAgdHlw
ZSwKLSAgICAgICAgWyZdIChUbXAgdG1wKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiAh
YXJnMS51c2VzVG1wKHRtcCkgJiYgIWFyZzIudXNlc1RtcCh0bXApOwotICAgICAgICB9KTsKLX0K
LQotLy8gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBhLCBhID0+IGMsIGIgPT4gZCkKLXN0cnVjdCBS
b3RhdGUgewotICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gbG9vcDsgLy8gaW4gdGhlIGV4YW1wbGUs
IHRoaXMgaXMgdGhlIGxvb3A6IChhID0+IGIsIGIgPT4gYSkKLSAgICBWZWN0b3I8U2h1ZmZsZVBh
aXI+IGZyaW5nZTsgLy8gaW4gdGhlIGV4YW1wbGUsIHRoZXNlIGFyZSB0aGUgYXNzb2NpYXRlZCBz
aGlmdHM6IChhID0+IGMsIGIgPT4gZCkKLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQot
Ci12b2lkIFNodWZmbGVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KHdpZHRoKCksICI6Iiwgc3JjKCksICI9PiIsIGRzdCgpKTsKLX0KLQotVmVjdG9y
PEluc3Q+IGVtaXRTaHVmZmxlKAotICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMsIHN0ZDo6
YXJyYXk8QXJnLCAyPiBzY3JhdGNoZXMsIEFyZzo6VHlwZSB0eXBlLCBWYWx1ZSogb3JpZ2luKQot
ewotICAgIHBhaXJzLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICBbJl0gKGNvbnN0IFNodWZm
bGVQYWlyJiBwYWlyKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBwYWlyLnNyYygpID09
IHBhaXIuZHN0KCk7Ci0gICAgICAgIH0pOwotICAgIAotICAgIC8vIEZpcnN0IHZhbGlkYXRlIHRo
YXQgdGhpcyBpcyB0aGUga2luZCBvZiBzaHVmZmxlIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3
aXRoLgotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBw
YWlyIDogcGFpcnMpIHsKLSAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNUeXBlKHR5cGUpKTsK
LSAgICAgICAgQVNTRVJUKHBhaXIuZHN0KCkuaXNUeXBlKHR5cGUpKTsKLSAgICAgICAgQVNTRVJU
KHBhaXIuZHN0KCkuaXNUbXAoKSB8fCBwYWlyLmRzdCgpLmlzTWVtb3J5KCkpOwotICAgIH0KLSNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0KLSAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmxl
IGtpbmRzIG9mIG9wZXJhdGlvbnMgdGhhdCB3ZSB3aWxsIGRvOgotICAgIC8vCi0gICAgLy8gLSBT
aGlmdC4gRXhhbXBsZTogKGEgPT4gYiwgYiA9PiBjKS4gV2UgZW1pdCB0aGlzIGFzICJNb3ZlIGIs
IGM7IE1vdmUgYSwgYiIuIFRoaXMgb25seSByZXF1aXJlcwotICAgIC8vICAgc2NyYXRjaCByZWdp
c3RlcnMgaWYgdGhlcmUgYXJlIG1lbW9yeS0+bWVtb3J5IG1vdmVzLiBXZSB3YW50IHRvIGZpbmQg
YXMgbWFueSBvZiB0aGVzZSBhcwotICAgIC8vICAgcG9zc2libGUgYmVjYXVzZSB0aGV5IGFyZSBj
aGVhcGVyLiBOb3RlIHRoYXQgc2hpZnRzIGNhbiBpbnZvbHZlIHRoZSBzYW1lIHNvdXJjZSBtZW50
aW9uZWQKLSAgICAvLyAgIG11bHRpcGxlIHRpbWVzLiBFeGFtcGxlOiAoYSA9PiBiLCBhID0+IGMs
IGIgPT4gZCwgYiA9PiBlKS4KLSAgICAvLwotICAgIC8vIC0gUm90YXRlLiBFeGFtcGxlOiAoYSA9
PiBiLCBiID0+IGEpLiBXZSB3YW50IHRvIGVtaXQgdGhpcyBhcyAiU3dhcCBhLCBiIiwgYnV0IHRo
YXQgaW5zdHJ1Y3Rpb24KLSAgICAvLyAgIG1heSBub3QgYmUgYXZhaWxhYmxlLCBpbiB3aGljaCBj
YXNlIHdlIG1heSBuZWVkIGEgc2NyYXRjaCByZWdpc3RlciBvciBhIHNjcmF0Y2ggbWVtb3J5Ci0g
ICAgLy8gICBsb2NhdGlvbi4gQSBnbmFybGllciBleGFtcGxlIGlzIChhID0+IGIsIGIgPT4gYywg
YyA9PiBhKS4gV2UgY2FuIGVtaXQgdGhpcyBhcyAiU3dhcCBiLCBjOwotICAgIC8vICAgU3dhcCBh
LCBiIi4gTm90ZSB0aGF0IHN3YXBwaW5nIGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IGRpZmZlcmlu
ZyB3aWR0aHMuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgYSByb3RhdGUgY2FuIGhhdmUgImZy
aW5nZSIuIEZvciBleGFtcGxlLCB3ZSBtaWdodCBoYXZlIChhID0+IGIsIGIgPT4gYSwgYSA9PmMs
Ci0gICAgLy8gYiA9PiBkKS4gVGhpcyBoYXMgYSByb3RhdGUgbG9vcCAoYSA9PiBiLCBiID0+IGEp
IGFuZCBzb21lIGZyaW5nZSAoYSA9PiBjLCBiID0+IGQpLiBXZSB0cmVhdAotICAgIC8vIHRoZSB3
aG9sZSB0aGluZyBhcyBhIHNpbmdsZSByb3RhdGUuCi0gICAgLy8KLSAgICAvLyBXZSB3aWxsIGZp
bmQgbXVsdGlwbGUgZGlzam9pbnQgc3VjaCBvcGVyYXRpb25zLiBXZSBjYW4gZXhlY3V0ZSB0aGVt
IGluIGFueSBvcmRlci4KLQotICAgIC8vIFdlIGludGVycHJldCB0aGVzZSBhcyBNb3ZlcyB0aGF0
IHNob3VsZCBiZSBleGVjdXRlZCBiYWNrd2FyZHMuIEFsbCBzaGlmdHMgYXJlIGtleWVkIGJ5IHRo
ZWlyCi0gICAgLy8gc3RhcnRpbmcgc291cmNlLgotICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1
ZmZsZVBhaXI+PiBzaGlmdHM7Ci0KLSAgICAvLyBXZSBpbnRlcnByZXQgdGhlc2UgYXMgU3dhcHMg
b3ZlciBzcmMoKSdzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhY2t3YXJkcywgaS5lLiBmb3Ig
YSBsaXN0Ci0gICAgLy8gb2Ygc2l6ZSAzIHdlIHdvdWxkIGRvICJTd2FwIGxpc3RbMV0uc3JjKCks
IGxpc3RbMl0uc3JjKCk7IFN3YXAgbGlzdFswXS5zcmMoKSwgbGlzdFsxXS5zcmMoKSIuCi0gICAg
Ly8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGNhbid0IGRvIHRoYXQgaWYgdGhlIHdpZHRocyBkb24n
dCBtYXRjaCBvciBvdGhlciBiYWQgdGhpbmdzIGhhcHBlbi4KLSAgICAvLyBCdXQsIHByaW9yIHRv
IGV4ZWN1dGluZyBhbGwgb2YgdGhhdCwgd2UgbmVlZCB0byBleGVjdXRlIHRoZSBmcmluZ2U6IHRo
ZSBzaGlmdHMgY29tbWluZyBvZmYgdGhlCi0gICAgLy8gcm90YXRlLgotICAgIFZlY3RvcjxSb3Rh
dGU+IHJvdGF0ZXM7Ci0KLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+PiBtYXBwaW5nOwotICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWlyIDog
cGFpcnMpCi0gICAgICAgICAgICBtYXBwaW5nLmFkZChwYWlyLnNyYygpLCBWZWN0b3I8U2h1ZmZs
ZVBhaXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQocGFpcik7Ci0KLSAgICAgICAgVmVjdG9y
PFNodWZmbGVQYWlyPiBjdXJyZW50UGFpcnM7Ci0KLSAgICAgICAgd2hpbGUgKCFtYXBwaW5nLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgQXJnIG9yaWdpbmFsU3JjID0gbWFwcGluZy5iZWdpbigpLT5rZXk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIXNoaWZ0cy5jb250YWlucyhvcmlnaW5hbFNyYykpOwotICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBmcm9t
ICIsIG9yaWdpbmFsU3JjLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR3JhcGhO
b2RlV29ya2xpc3Q8QXJnPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gob3Jp
Z2luYWxTcmMpOwotICAgICAgICAgICAgd2hpbGUgKEFyZyBzcmMgPSB3b3JrbGlzdC5wb3AoKSkg
ewotICAgICAgICAgICAgICAgIEhhc2hNYXA8QXJnLCBWZWN0b3I8U2h1ZmZsZVBhaXI+Pjo6aXRl
cmF0b3IgaXRlciA9IG1hcHBpbmcuZmluZChzcmMpOwotICAgICAgICAgICAgICAgIGlmIChpdGVy
ID09IG1hcHBpbmcuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2l0aCBhIHNoaWZ0
IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBwcmV2aW91c2x5IGJ1aWx0IHRoZSB0YWlsIG9mIHRoaXMg
c2hpZnQuCi0gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGF0J3MgdGhlIGNhc2Ugbm93
LgotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlRyeWluZyB0byBhcHBlbmQgc2hpZnQgYXQgIiwgc3JjLCAiXG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFBhaXJzLmFwcGVuZFZlY3RvcihzaGlmdHMudGFrZShz
cmMpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnMgPSBXVEZNb3ZlKGl0ZXIt
PnZhbHVlKTsKLSAgICAgICAgICAgICAgICBtYXBwaW5nLnJlbW92ZShpdGVyKTsKLQotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBwYWlycykgewotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50UGFpcnMuYXBwZW5kKHBhaXIpOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocGFpci5zcmMoKSA9PSBzcmMpOwotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKHBhaXIuZHN0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQYWlycy5zaXplKCkpOwotICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRQYWlyc1swXS5zcmMoKSA9PSBvcmlnaW5hbFNyYyk7Ci0KLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coImN1cnJlbnRQYWlycyA9
ICIsIGxpc3REdW1wKGN1cnJlbnRQYWlycyksICJcbiIpOwotCi0gICAgICAgICAgICBib29sIGlz
Um90YXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IFNodWZmbGVQYWlyJiBwYWly
IDogY3VycmVudFBhaXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhaXIuZHN0KCkgPT0gb3Jp
Z2luYWxTcmMpIHsKLSAgICAgICAgICAgICAgICAgICAgaXNSb3RhdGUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChpc1JvdGF0ZSkgewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJdCdzIGEgcm90YXRlLlxuIik7Ci0gICAg
ICAgICAgICAgICAgUm90YXRlIHJvdGF0ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBUaGUgY29tbW9uIGNhc2UgaXMgdGhhdCB0aGUgcm90YXRlIGRvZXMgbm90IGhhdmUg
ZnJpbmdlLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGFzdCBk
ZXN0aW5hdGlvbiBpcyB0aGUgZmlyc3Qgc291cmNlLgotICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50UGFpcnMubGFzdCgpLmRzdCgpID09IG9yaWdpbmFsU3JjKQotICAgICAgICAgICAgICAgICAg
ICByb3RhdGUubG9vcCA9IFdURk1vdmUoY3VycmVudFBhaXJzKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2xvdyBwYXRoLiBUaGUg
cm90YXRlIGhhcyBmcmluZ2UuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBIYXNoTWFwPEFyZywgU2h1ZmZsZVBhaXI+IGRzdE1hcHBpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgU2h1ZmZsZVBhaXImIHBhaXIgOiBjdXJyZW50UGFpcnMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkc3RNYXBwaW5nLmFkZChwYWlyLmRzdCgpLCBwYWlyKTsKLQot
ICAgICAgICAgICAgICAgICAgICBTaHVmZmxlUGFpciBwYWlyID0gZHN0TWFwcGluZy50YWtlKG9y
aWdpbmFsU3JjKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcm90YXRlLmxvb3AuYXBwZW5kKHBhaXIpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGl0ZXIgPSBkc3RNYXBwaW5nLmZpbmQocGFpci5zcmMoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSBkc3RNYXBwaW5nLmVuZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFpciA9
IGl0ZXItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZHN0TWFwcGluZy5yZW1vdmUo
aXRlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByb3Rh
dGUubG9vcC5yZXZlcnNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIGZyaW5nZSBhcHBlYXJzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGhvdyBpdCBhcHBlYXJl
ZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudFBhaXJzLCBzaW5jZSB0aGF0
J3MgdGhlIERGUyBvcmRlci4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBTaHVmZmxl
UGFpciYgcGFpciA6IGN1cnJlbnRQYWlycykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QnV0IG9mIGNvdXJzZSB3ZSBvbmx5IGluY2x1ZGUgaXQgaWYgaXQncyBub3QgaW4gdGhlIGxvb3Au
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHN0TWFwcGluZy5jb250YWlucyhwYWlyLmRz
dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUuZnJpbmdlLmFwcGVuZChw
YWlyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZ3JhcGggc2VhcmNoIHRlcm1pbmF0
ZXMgYmVjYXVzZSB3ZSByZXR1cm5lZCB0byB0aGUgZmlyc3Qgc291cmNlLCB0aGVuIHRoZQotICAg
ICAgICAgICAgICAgIC8vIHBhaXIgbGlzdCBoYXMgdG8gaGF2ZSBhIHZlcnkgcGFydGljdWxhciBz
aGFwZS4KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByb3RhdGUubG9vcC5zaXpl
KCkgLSAxOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocm90YXRlLmxvb3BbaV0u
ZHN0KCkgPT0gcm90YXRlLmxvb3BbaSArIDFdLnNyYygpKTsKLSAgICAgICAgICAgICAgICByb3Rh
dGVzLmFwcGVuZChXVEZNb3ZlKHJvdGF0ZSkpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWly
cy5yZXNpemUoMCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJdCdzIGEgc2hpZnQuXG4iKTsK
LSAgICAgICAgICAgICAgICBzaGlmdHMuYWRkKG9yaWdpbmFsU3JjLCBXVEZNb3ZlKGN1cnJlbnRQ
YWlycykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZlcmJv
c2UpIHsKLSAgICAgICAgZGF0YUxvZygiU2hpZnRzOlxuIik7Ci0gICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiBzaGlmdHMpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgZW50cnkua2V5LCAi
OiAiLCBsaXN0RHVtcChlbnRyeS52YWx1ZSksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJSb3Rh
dGVzOlxuIik7Ci0gICAgICAgIGZvciAoYXV0byYgcm90YXRlIDogcm90YXRlcykKLSAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBsb29wID0gIiwgbGlzdER1bXAocm90YXRlLmxvb3ApLCAiLCBmcmlu
Z2UgPSAiLCBsaXN0RHVtcChyb3RhdGUuZnJpbmdlKSwgIlxuIik7Ci0gICAgfQotCi0gICAgLy8g
SW4gdGhlIHdvcnN0IGNhc2UsIHdlIG5lZWQgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUgd2F5
IHdlIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2xpZW50IHBhc3NlcwotICAgIC8vIHVzIHdoYXQgc2Ny
YXRjaCByZWdpc3RlcnMgaGUgaGFwcGVucyB0byBoYXZlIGxheWluZyBhcm91bmQuIFdlIHdpbGwg
bmVlZCBzY3JhdGNoIHJlZ2lzdGVycyBpbgotICAgIC8vIHRoZSBmb2xsb3dpbmcgY2FzZXM6Ci0g
ICAgLy8KLSAgICAvLyAtIFNodWZmbGUgcGFpcnMgd2hlcmUgYm90aCBzcmMgYW5kIGRzdCByZWZl
ciB0byBtZW1vcnkuCi0gICAgLy8gLSBSb3RhdGUgd2hlbiBubyBTd2FwIGluc3RydWN0aW9uIGlz
IGF2YWlsYWJsZS4KLSAgICAvLwotICAgIC8vIEx1Y2t5IGZvciB1cywgd2UgYXJlIGd1YXJhbnRl
ZWQgdG8gaGF2ZSBleHRyYSBzY3JhdGNoIHJlZ2lzdGVycyBhbnl0aW1lIHdlIGhhdmUgYSBTaGlm
dCB0aGF0Ci0gICAgLy8gZW5kcyB3aXRoIGEgcmVnaXN0ZXIuIFdlIHNlYXJjaCBmb3Igc3VjaCBh
IHJlZ2lzdGVyIHJpZ2h0IG5vdy4KLQotICAgIGF1dG8gbW92ZUZvcldpZHRoID0gWyZdIChBcmc6
OldpZHRoIHdpZHRoKSAtPiBPcGNvZGUgewotICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7Ci0gICAg
ICAgIGNhc2UgQXJnOjpXaWR0aDMyOgotICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQXJnOjpH
UCA/IE1vdmUzMiA6IE1vdmVGbG9hdDsKLSAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6Ci0gICAg
ICAgICAgICByZXR1cm4gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIE9wY29kZSBjb25zZXJ2YXRpdmVNb3ZlID0gbW92ZUZv
cldpZHRoKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpOwotCi0gICAgLy8gV2Ugd2lsbCBl
bWl0IHRoaW5ncyBpbiByZXZlcnNlLiBXZSBtYWludGFpbiBhIGxpc3Qgb2YgcGFja3Mgb2YgaW5z
dHJ1Y3Rpb25zLCBhbmQgdGhlbiB3ZSBlbWl0Ci0gICAgLy8gYXBwZW5kIHRoZW0gdG9nZXRoZXIg
aW4gcmV2ZXJzZSAoZm9yIGV4YW1wbGUgdGhlIHRoaW5nIGF0IHRoZSBlbmQgb2YgcmVzdWx0UGFj
a3MgaXMgcGxhY2VkCi0gICAgLy8gZmlyc3QpLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSBs
YXN0IHRoaW5nIHdlIGVtaXQgZnJlZXMgdXAgaXRzIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgc28K
LSAgICAvLyBpdCBhZmZlY3RzIGhvdyB3ZSBlbWl0IHRoaW5ncyBiZWZvcmUgaXQuCi0gICAgVmVj
dG9yPFZlY3RvcjxJbnN0Pj4gcmVzdWx0UGFja3M7Ci0gICAgVmVjdG9yPEluc3Q+IHJlc3VsdDsK
LQotICAgIGF1dG8gY29tbWl0UmVzdWx0ID0gWyZdICgpIHsKLSAgICAgICAgcmVzdWx0UGFja3Mu
YXBwZW5kKFdURk1vdmUocmVzdWx0KSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZ2V0U2NyYXRjaCA9
IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCBwb3NzaWJsZVNjcmF0Y2gpIC0+IFRtcCB7Ci0gICAg
ICAgIGlmIChzY3JhdGNoZXNbaW5kZXhdLmlzVG1wKCkpCi0gICAgICAgICAgICByZXR1cm4gc2Ny
YXRjaGVzW2luZGV4XS50bXAoKTsKLQotICAgICAgICBpZiAoIXBvc3NpYmxlU2NyYXRjaCkKLSAg
ICAgICAgICAgIHJldHVybiBUbXAoKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KGNvbnNl
cnZhdGl2ZU1vdmUsIG9yaWdpbiwgcG9zc2libGVTY3JhdGNoLCBzY3JhdGNoZXNbaW5kZXhdKSk7
Ci0gICAgICAgIHJldHVybiBwb3NzaWJsZVNjcmF0Y2g7Ci0gICAgfTsKLQotICAgIGF1dG8gcmV0
dXJuU2NyYXRjaCA9IFsmXSAodW5zaWduZWQgaW5kZXgsIFRtcCB0bXApIHsKLSAgICAgICAgaWYg
KEFyZyh0bXApICE9IHNjcmF0Y2hlc1tpbmRleF0pCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KEluc3QoY29uc2VydmF0aXZlTW92ZSwgb3JpZ2luLCBzY3JhdGNoZXNbaW5kZXhdLCB0bXApKTsK
LSAgICB9OwotCi0gICAgYXV0byBoYW5kbGVTaGlmdFBhaXIgPSBbJl0gKGNvbnN0IFNodWZmbGVQ
YWlyJiBwYWlyLCB1bnNpZ25lZCBzY3JhdGNoSW5kZXgpIHsKLSAgICAgICAgT3Bjb2RlIG1vdmUg
PSBtb3ZlRm9yV2lkdGgocGFpci53aWR0aCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaXNW
YWxpZEZvcm0obW92ZSwgcGFpci5zcmMoKS5raW5kKCksIHBhaXIuZHN0KCkua2luZCgpKSkgewot
ICAgICAgICAgICAgVG1wIHNjcmF0Y2ggPQotICAgICAgICAgICAgICAgIGdldFNjcmF0Y2goc2Ny
YXRjaEluZGV4LCBmaW5kUG9zc2libGVTY3JhdGNoKHR5cGUsIHBhaXIuc3JjKCksIHBhaXIuZHN0
KCkpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2gpOwotICAgICAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG1vdmUsIHBhaXIuc3JjKCkua2luZCgpLCBBcmc6OlRtcCkpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkp
LCBvcmlnaW4sIHBhaXIuc3JjKCksIHNjcmF0Y2gpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNyYygpLmlzU29tZUltbSgpKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobW92ZSA9PSBNb3ZlMzIpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoSW5zdChNb3ZlLCBvcmlnaW4sIEFyZzo6aW1tNjQocGFpci5zcmMoKS52YWx1ZSgpKSwgc2Ny
YXRjaCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1v
dmVGb3JXaWR0aChwYWlyLndpZHRoKCkpLCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIuZHN0KCkpKTsK
LSAgICAgICAgICAgIHJldHVyblNjcmF0Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChJbnN0KG1vdmUsIG9yaWdpbiwgcGFpci5zcmMoKSwgcGFpci5kc3QoKSkpOwotICAgIH07Ci0K
LSAgICBhdXRvIGhhbmRsZVNoaWZ0ID0gWyZdIChWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCkg
ewotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgb3B0aW1pemUgdGhlIHNwaWxsIGJlaGF2aW9y
IG9mIHRoZSBzaGlmdGVyIGJ5IGNoZWNraW5nIGlmIGFueSBvZiB0aGUKLSAgICAgICAgLy8gc2hp
ZnRzIG5lZWQgc3BpbGxzLiBJZiB0aGV5IGRvLCB0aGVuIHdlIGNvdWxkIHRyeSB0byBnZXQgYSBy
ZWdpc3RlciBvdXQgaGVyZS4gTm90ZSB0aGF0Ci0gICAgICAgIC8vIHRoaXMgbWF5IGZhaWwgd2hl
cmUgdGhlIGN1cnJlbnQgc3RyYXRlZ3kgc3VjY2VlZHM6IG91dCBoZXJlIHdlIG5lZWQgYSByZWdp
c3RlciB0aGF0IGRvZXMKLSAgICAgICAgLy8gbm90IGludGVyZmVyZSB3aXRoIGFueSBvZiB0aGUg
c2hpZnRzLCB3aGlsZSB0aGUgY3VycmVudCBzdHJhdGVneSBvbmx5IG5lZWRzIHRvIGZpbmQgYQot
ICAgICAgICAvLyBzY3JhdGNoIHJlZ2lzdGVyIHRoYXQgZG9lcyBub3QgaW50ZXJmZXIgd2l0aCBh
IHBhcnRpY3VsYXIgc2hpZnQuIFNvLCB0aGlzIG9wdGltaXphdGlvbgotICAgICAgICAvLyB3aWxs
IGJlIG9wcG9ydHVuaXN0aWM6IGlmIGl0IHN1Y2NlZWRzLCB0aGVuIHRoZSBpbmRpdmlkdWFsIHNo
aWZ0cyBjYW4gdXNlIHRoYXQgc2NyYXRjaCwKLSAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZXkgd2ls
bCBkbyB3aGF0IHRoZXkgZG8gbm93LgotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc2hpZnQuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgaGFuZGxlU2hpZnRQYWlyKHNoaWZ0
W2ldLCAwKTsKLQotICAgICAgICBBcmcgbGFzdERzdCA9IHNoaWZ0Lmxhc3QoKS5kc3QoKTsKLSAg
ICAgICAgaWYgKGxhc3REc3QuaXNUbXAoKSkgewotICAgICAgICAgICAgZm9yIChBcmcmIHNjcmF0
Y2ggOiBzY3JhdGNoZXMpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBsYXN0
RHN0KTsKLSAgICAgICAgICAgICAgICBpZiAoIXNjcmF0Y2guaXNUbXAoKSkgewotICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoID0gbGFzdERzdDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8vIEZpcnN0IGhhbmRsZSBzaGlmdHMgd2hvc2UgbGFzdCBkZXN0aW5hdGlvbiBpcyBhIHRt
cCBiZWNhdXNlIHRoZXNlIGZyZWUgdXAgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgLy8gVGhlc2Ug
ZW5kIHVwIGxhc3QgaW4gdGhlIGZpbmFsIHNlcXVlbmNlLCBzbyB0aGUgZmluYWwgZGVzdGluYXRp
b24gb2YgdGhlc2Ugc2hpZnRzIHdpbGwgYmUKLSAgICAvLyBhdmFpbGFibGUgYXMgYSBzY3JhdGNo
IGxvY2F0aW9uIGZvciBhbnl0aGluZyBlbWl0dGVkIHByaW9yIChzbywgYWZ0ZXIsIHNpbmNlIHdl
J3JlIGVtaXR0aW5nIGluCi0gICAgLy8gcmV2ZXJzZSkuCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6
IHNoaWZ0cykgewotICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+JiBzaGlmdCA9IGVudHJ5LnZh
bHVlOwotICAgICAgICBpZiAoc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCi0gICAgICAgICAg
ICBoYW5kbGVTaGlmdChzaGlmdCk7Ci0gICAgICAgIGNvbW1pdFJlc3VsdCgpOwotICAgIH0KLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlIHNoaWZ0cy4KLSAgICBmb3IgKGF1dG8m
IGVudHJ5IDogc2hpZnRzKSB7Ci0gICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4mIHNoaWZ0ID0g
ZW50cnkudmFsdWU7Ci0gICAgICAgIGlmICghc2hpZnQubGFzdCgpLmRzdCgpLmlzVG1wKCkpCi0g
ICAgICAgICAgICBoYW5kbGVTaGlmdChzaGlmdCk7Ci0gICAgICAgIGNvbW1pdFJlc3VsdCgpOwot
ICAgIH0KLQotICAgIGZvciAoUm90YXRlJiByb3RhdGUgOiByb3RhdGVzKSB7Ci0gICAgICAgIGlm
ICghcm90YXRlLmZyaW5nZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3
ZSBkbyB0aGUgZnJpbmdlIGZpcnN0ISBUaGlzIHdvbid0IGNsb2JiZXIgYW55IG9mIHRoZSByZWdp
c3RlcnMgdGhhdCBhcmUKLSAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHJvdGF0aW9uLgotICAg
ICAgICAgICAgaGFuZGxlU2hpZnQocm90YXRlLmZyaW5nZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgY2FuU3dhcCA9IGZhbHNlOwotICAgICAgICBPcGNvZGUgc3dhcCA9IE9v
cHM7Ci0gICAgICAgIEFyZzo6V2lkdGggc3dhcFdpZHRoID0gQXJnOjpXaWR0aDg7IC8vIGJvZ3Vz
IHZhbHVlCi0KLSAgICAgICAgLy8gQ3VycmVudGx5LCB0aGUgc3dhcCBpbnN0cnVjdGlvbiBpcyBu
b3QgYXZhaWxhYmxlIGZvciBmbG9hdGluZyBwb2ludCBvbiBhbnkgYXJjaGl0ZWN0dXJlIHdlCi0g
ICAgICAgIC8vIHN1cHBvcnQuCi0gICAgICAgIGlmICh0eXBlID09IEFyZzo6R1ApIHsKLSAgICAg
ICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hldGhlciB3ZSB3aWxsIGJlIGRvaW5nIDY0LWJpdCBzd2Fw
cyBvciAzMi1iaXQgc3dhcHMuIElmIHdlIGhhdmUgYSBtaXggb2YKLSAgICAgICAgICAgIC8vIHdp
ZHRocyB3ZSBoYW5kbGUgdGhhdCBieSBmaXhpbmcgdXAgdGhlIHJlbGV2YW50IHJlZ2lzdGVyIHdp
dGggemVyby1leHRlbmRzLgotICAgICAgICAgICAgc3dhcCA9IFN3YXAzMjsKLSAgICAgICAgICAg
IHN3YXBXaWR0aCA9IEFyZzo6V2lkdGgzMjsKLSAgICAgICAgICAgIGJvb2wgaGFzTWVtb3J5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhc0luZGV4ID0gZmFsc2U7Ci0gICAgICAgICAgICBm
b3IgKFNodWZmbGVQYWlyJiBwYWlyIDogcm90YXRlLmxvb3ApIHsKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHBhaXIud2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMy
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
V2lkdGg2NDoKLSAgICAgICAgICAgICAgICAgICAgc3dhcCA9IFN3YXA2NDsKLSAgICAgICAgICAg
ICAgICAgICAgc3dhcFdpZHRoID0gQXJnOjpXaWR0aDY0OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBoYXNNZW1vcnkgfD0gcGFpci5zcmMo
KS5pc01lbW9yeSgpIHx8IHBhaXIuZHN0KCkuaXNNZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBo
YXNJbmRleCB8PSBwYWlyLnNyYygpLmlzSW5kZXgoKSB8fCBwYWlyLmRzdCgpLmlzSW5kZXgoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FuU3dhcCA9IGlzVmFs
aWRGb3JtKHN3YXAsIEFyZzo6VG1wLCBBcmc6OlRtcCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGNh
biB0b3RhbGx5IHVzZSBzd2FwcyBldmVuIGlmIHRoZXJlIGFyZSBzaHVmZmxlcyBpbnZvbHZpbmcg
bWVtb3J5LiBCdXQsIHdlIHBsYXkgaXQKLSAgICAgICAgICAgIC8vIHNhZmUgaW4gdGhhdCBjYXNl
LiBUaGVyZSBhcmUgY29ybmVyIGNhc2VzIHdlIGRvbid0IGhhbmRsZSwgYW5kIG91ciBhYmlsaXR5
IHRvIGRvIGl0IGlzCi0gICAgICAgICAgICAvLyBjb250aW5nZW50IHVwb24gc3dhcCBmb3JtIGF2
YWlsYWJpbGl0eS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc01lbW9yeSkgewot
ICAgICAgICAgICAgICAgIGNhblN3YXAgJj0gaXNWYWxpZEZvcm0oc3dhcCwgQXJnOjpUbXAsIEFy
Zzo6QWRkcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
dGFrZSB0aGUgc3dhcHBpbmcgcGF0aCBpZiB0aGVyZSBpcyBhIG1peCBvZiB3aWR0aHMgYW5kIHNv
bWUgb2YgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2h1ZmZsZXMgaW52b2x2ZSBtZW1vcnkuIFRo
YXQgZ2V0cyB0b28gY29uZnVzaW5nLiBXZSBtaWdodCBiZSBhYmxlIHRvIHJlbGF4IHRoaXMKLSAg
ICAgICAgICAgICAgICAvLyB0byBvbmx5IGJhaWwgaWYgdGhlcmUgYXJlIHN1YndpZHRoIHBhaXJz
IGludm9sdmluZyBtZW1vcnksIGJ1dCBJIGhhdmVuJ3QgdGhvdWdodAotICAgICAgICAgICAgICAg
IC8vIGFib3V0IGl0IHZlcnkgaGFyZC4gQW55d2F5LCB0aGlzIGNhc2UgaXMgbm90IGNvbW1vbjog
cm90YXRlcyBpbnZvbHZpbmcgbWVtb3J5Ci0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgYXJpc2Ug
Zm9yIGZ1bmN0aW9uIGNhbGxzLCBhbmQgdGhleSB3aWxsIG9ubHkgaGFwcGVuIGZvciByb3RhdGVz
IGluIHVzZXIgY29kZQotICAgICAgICAgICAgICAgIC8vIGlmIHNvbWUgb2YgdGhlIHZhcmlhYmxl
cyBnZXQgc3BpbGxlZC4gSXQncyBoYXJkIHRvIGltYWdpbmUgYSBwcm9ncmFtIHRoYXQgcm90YXRl
cwotICAgICAgICAgICAgICAgIC8vIGRhdGEgYXJvdW5kIGluIHZhcmlhYmxlcyB3aGlsZSBhbHNv
IGRvaW5nIGEgY29tYmluYXRpb24gb2YgdWludDMyLT51aW50NjQgYW5kCi0gICAgICAgICAgICAg
ICAgLy8gaW50NjQtPmludDMyIGNhc3RzLgotICAgICAgICAgICAgICAgIGZvciAoU2h1ZmZsZVBh
aXImIHBhaXIgOiByb3RhdGUubG9vcCkKLSAgICAgICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBw
YWlyLndpZHRoKCkgPT0gc3dhcFdpZHRoOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoaGFzSW5kZXgpCi0gICAgICAgICAgICAgICAgY2FuU3dhcCAmPSBpc1ZhbGlkRm9ybShzd2Fw
LCBBcmc6OlRtcCwgQXJnOjpJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2FuU3dh
cCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcm90YXRlLmxvb3Auc2l6ZSgpIC0g
MTsgaS0tOykgewotICAgICAgICAgICAgICAgIEFyZyBsZWZ0ID0gcm90YXRlLmxvb3BbaV0uc3Jj
KCk7Ci0gICAgICAgICAgICAgICAgQXJnIHJpZ2h0ID0gcm90YXRlLmxvb3BbaSArIDFdLnNyYygp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnkoKSAmJiByaWdodC5pc01lbW9y
eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgc3VwZXIg
cmFyZSBvdXRjb21lLiBSb3RhdGVzIGFyZSByYXJlLiBTcGlsbHMgYXJlIHJhcmUuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIE1vdmluZyBkYXRhIGJldHdlZW4gdHdvIHNwaWxscyBpcyByYXJlLiBU
byBnZXQgaGVyZSBhIGxvdCBvZiByYXJlIHN0dWZmIGhhcyB0bwotICAgICAgICAgICAgICAgICAg
ICAvLyBhbGwgaGFwcGVuIGF0IG9uY2UuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBUbXAgc2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgZmluZFBvc3NpYmxlU2NyYXRj
aCh0eXBlLCBsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVG
b3JXaWR0aChzd2FwV2lkdGgpLCBvcmlnaW4sIGxlZnQsIHNjcmF0Y2gpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KHN3YXAsIG9yaWdpbiwgc2NyYXRjaCwgcmlnaHQp
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChz
d2FwV2lkdGgpLCBvcmlnaW4sIHNjcmF0Y2gsIGxlZnQpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuU2NyYXRjaCgwLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxlZnQuaXNNZW1vcnko
KSkKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEluc3Qoc3dhcCwgb3JpZ2lu
LCBsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKFNodWZm
bGVQYWlyIHBhaXIgOiByb3RhdGUubG9vcCkgewotICAgICAgICAgICAgICAgIGlmIChwYWlyLndp
ZHRoKCkgPT0gc3dhcFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIud2lkdGgoKSA9PSBBcmc6OldpZHRoMzIp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3YXBXaWR0aCA9PSBBcmc6OldpZHRo
NjQpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhaXIuZHN0KCkuaXNUbXAoKSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRvIGFuIGV4dHJhIHplcm8gZXh0ZW5zaW9u
LgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSW5zdChNb3ZlMzIsIG9yaWdpbiwgcGFp
ci5kc3QoKSwgcGFpci5kc3QoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gV2UgY2FuIHRyZWF0IHRoaXMgYXMgYSBzaGlmdCBzbyBsb25nIGFzIHdl
IHRha2UgdGhlIGxhc3QgZGVzdGluYXRpb24gKGkuZS4gZmlyc3QKLSAgICAgICAgICAgIC8vIHNv
dXJjZSkgYW5kIHNhdmUgaXQgZmlyc3QuIFRoZW4gd2UgaGFuZGxlIHRoZSBmaXJzdCBlbnRyeSBp
biB0aGUgcGFpciBpbiB0aGUgcm90YXRlCi0gICAgICAgICAgICAvLyBzcGVjaWFsbHksIGFmdGVy
IHdlIHJlc3RvcmUgdGhlIGxhc3QgZGVzdGluYXRpb24uIFRoaXMgcmVxdWlyZXMgc29tZSBzcGVj
aWFsIGNhcmUgdG8KLSAgICAgICAgICAgIC8vIGZpbmQgYSBzY3JhdGNoIHJlZ2lzdGVyLiBJdCdz
IHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHJvdGF0ZSB0aGF0IHVzZXMgdGhlIGVudGlyZQotICAg
ICAgICAgICAgLy8gYXZhaWxhYmxlIHJlZ2lzdGVyIGZpbGUuCi0KLSAgICAgICAgICAgIFRtcCBz
Y3JhdGNoID0gZmluZFBvc3NpYmxlU2NyYXRjaCgKLSAgICAgICAgICAgICAgICB0eXBlLAotICAg
ICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoU2h1ZmZsZVBhaXIgcGFpciA6IHJvdGF0ZS5sb29wKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFpci5zcmMoKS51c2VzVG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIu
ZHN0KCkudXNlc1RtcCh0bXApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8gTk9URTogVGhpcyBp
cyB0aGUgbW9zdCBsaWtlbHkgdXNlIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgICAgICAgICAg
c2NyYXRjaCA9IGdldFNjcmF0Y2goMCwgc2NyYXRjaCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIG1h
eSBub3QgaGF2ZSBmb3VuZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuIFdoZW4gdGhpcyBoYXBwZW5zLCB3
ZSBjYW4ganVzdCB1c2UgdGhlIHNwaWxsCi0gICAgICAgICAgICAvLyBzbG90IGRpcmVjdGx5Lgot
ICAgICAgICAgICAgQXJnIHJvdGF0ZVNhdmUgPSBzY3JhdGNoID8gQXJnKHNjcmF0Y2gpIDogc2Ny
YXRjaGVzWzBdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVTaGlmdFBhaXIoCi0g
ICAgICAgICAgICAgICAgU2h1ZmZsZVBhaXIocm90YXRlLmxvb3AubGFzdCgpLmRzdCgpLCByb3Rh
dGVTYXZlLCByb3RhdGUubG9vcFswXS53aWR0aCgpKSwgMSk7Ci0KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHJvdGF0ZS5sb29wLnNpemUoKTsgaS0tID4gMTspCi0gICAgICAgICAgICAg
ICAgaGFuZGxlU2hpZnRQYWlyKHJvdGF0ZS5sb29wW2ldLCAxKTsKLQotICAgICAgICAgICAgaGFu
ZGxlU2hpZnRQYWlyKAotICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyKHJvdGF0ZVNhdmUsIHJv
dGF0ZS5sb29wWzBdLmRzdCgpLCByb3RhdGUubG9vcFswXS53aWR0aCgpKSwgMSk7Ci0KLSAgICAg
ICAgICAgIGlmIChzY3JhdGNoKQotICAgICAgICAgICAgICAgIHJldHVyblNjcmF0Y2goMCwgc2Ny
YXRjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb21taXRSZXN1bHQoKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQocmVzdWx0LmlzRW1wdHkoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1
bHRQYWNrcy5zaXplKCk7IGktLTspCi0gICAgICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IocmVzdWx0
UGFja3NbaV0pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVmVjdG9yPEluc3Q+IGVtaXRT
aHVmZmxlKAotICAgIGNvbnN0IFZlY3RvcjxTaHVmZmxlUGFpcj4mIHBhaXJzLAotICAgIGNvbnN0
IHN0ZDo6YXJyYXk8QXJnLCAyPiYgZ3BTY3JhdGNoLCBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4m
IGZwU2NyYXRjaCwKLSAgICBWYWx1ZSogb3JpZ2luKQotewotICAgIFZlY3RvcjxTaHVmZmxlUGFp
cj4gZ3BQYWlyczsKLSAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IGZwUGFpcnM7Ci0gICAgZm9yIChj
b25zdCBTaHVmZmxlUGFpciYgcGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIGlmIChwYWlyLnNyYygp
LmlzTWVtb3J5KCkgJiYgcGFpci5kc3QoKS5pc01lbW9yeSgpICYmIHBhaXIud2lkdGgoKSA+IEFy
Zzo6cG9pbnRlcldpZHRoKCkpIHsKLSAgICAgICAgICAgIC8vIDgtYnl0ZSBtZW1vcnktdG8tbWVt
b3J5IG1vdmVzIG9uIGEgMzItYml0IHBsYXRmb3JtIGFyZSBiZXN0IGhhbmRsZWQgYXMgZmxvYXQg
bW92ZXMuCi0gICAgICAgICAgICBmcFBhaXJzLmFwcGVuZChwYWlyKTsKLSAgICAgICAgfSBlbHNl
IGlmIChwYWlyLnNyYygpLmlzR1AoKSAmJiBwYWlyLmRzdCgpLmlzR1AoKSkgewotICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IGdwUGFpcnMgZ2V0cyBtZW1vcnktdG8tbWVtb3J5IHNodWZm
bGVzLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlCi0gICAgICAgICAgICAvLyBjYW4gZG8gdGhh
dCBtb3JlIGVmZmljaWVudGx5IHVzaW5nIEdQUnMsIGV4Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNl
IGFib3ZlLgotICAgICAgICAgICAgZ3BQYWlycy5hcHBlbmQocGFpcik7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgZnBQYWlycy5hcHBlbmQocGFpcik7Ci0gICAgfQotCi0gICAgVmVjdG9y
PEluc3Q+IHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGVtaXRTaHVmZmxlKGdwUGFp
cnMsIGdwU2NyYXRjaCwgQXJnOjpHUCwgb3JpZ2luKSk7Ci0gICAgcmVzdWx0LmFwcGVuZFZlY3Rv
cihlbWl0U2h1ZmZsZShmcFBhaXJzLCBmcFNjcmF0Y2gsIEFyZzo6RlAsIG9yaWdpbikpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQot
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRW1pdFNodWZmbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI3Mzcw
MjFmNTY2NjBiN2IzNDVhZmYzZDZkYzE5YzE4ZjZiMGUyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckVtaXRTaHVmZmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFpckVtaXRTaHVm
ZmxlX2gKLSNkZWZpbmUgQWlyRW1pdFNodWZmbGVfaAotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQot
I2luY2x1ZGUgIkFpckFyZy5oIgotI2luY2x1ZGUgIkFpckluc3QuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1jbGFzcyBWYWx1
ZTsKLQotbmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNzIFNodWZmbGVQYWlyIHsKLXB1YmxpYzoKLSAg
ICBTaHVmZmxlUGFpcigpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTaHVmZmxlUGFpcihjb25z
dCBBcmcmIHNyYywgY29uc3QgQXJnJiBkc3QsIEFyZzo6V2lkdGggd2lkdGgpCi0gICAgICAgIDog
bV9zcmMoc3JjKQotICAgICAgICAsIG1fZHN0KGRzdCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRo
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmcmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1f
c3JjOyB9Ci0gICAgY29uc3QgQXJnJiBkc3QoKSBjb25zdCB7IHJldHVybiBtX2RzdDsgfQotCi0g
ICAgLy8gVGhlIHdpZHRoIGRldGVybWluZXMgdGhlIGtpbmQgb2YgbW92ZSB3ZSBkby4gWW91IGNh
biBvbmx5IGNob29zZSBXaWR0aDMyIG9yIFdpZHRoNjQgcmlnaHQgbm93LgotICAgIC8vIEZvciBH
UCwgaXQgcGlja3MgYmV0d2VlbiBNb3ZlMzIgYW5kIE1vdmUuIEZvciBGUCwgaXQgcGlja3MgYmV0
d2VlbiBNb3ZlRmxvYXQgYW5kIE1vdmVEb3VibGUuCi0gICAgQXJnOjpXaWR0aCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBBcmcgbV9zcmM7Ci0gICAgQXJnIG1fZHN0OwotICAg
IEFyZzo6V2lkdGggbV93aWR0aCB7IEFyZzo6V2lkdGg4IH07Ci19OwotCi0vLyBQZXJmb3JtIGEg
c2h1ZmZsZSBvZiBhIGdpdmVuIHR5cGUuIFRoZSBzY3JhdGNoIGFyZ3VtZW50IGlzIG1hbmRhdG9y
eS4gWW91IHNob3VsZCBwYXNzIGl0IGFzCi0vLyBmb2xsb3dzOiBJZiB5b3Uga25vdyB0aGF0IHlv
dSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9yIHRlbXBvcmFyaWVzIGF2YWlsYWJsZSAtIHRoYXQg
aXMsIHRoZXkncmUKLS8vIHJlZ2lzdGVycyB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRoZSBz
aHVmZmxlLCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHNodWZmbGUsIGFuZCBhcmUgbm90Ci0v
LyBsaXZlIGF0IHRoZSBzaHVmZmxlIC0gdGhlbiB5b3UgY2FuIHBhc3MgdGhlbS4gSWYgeW91IGRv
bid0IGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgYXZhaWxhYmxlIG9yIGlmCi0vLyB5b3UgZG9uJ3Qg
ZmVlbCBsaWtlIGxvb2tpbmcgZm9yIHRoZW0sIHlvdSBjYW4gcGFzcyBtZW1vcnkgbG9jYXRpb25z
LiBJdCdzIGFsd2F5cyBzYWZlIHRvIHBhc3MgYQotLy8gcGFpciBvZiBtZW1vcnkgbG9jYXRpb25z
LCBhbmQgcmVwbGFjaW5nIGVpdGhlciBtZW1vcnkgbG9jYXRpb24gd2l0aCBhIHJlZ2lzdGVyIGNh
biBiZSB2aWV3ZWQgYXMgYW4KLS8vIG9wdGltaXphdGlvbi4gSXQncyBhIHByZXR0eSBpbXBvcnRh
bnQgb3B0aW1pemF0aW9uLiBTb21lIG1vcmUgbm90ZXM6Ci0vLwotLy8gLSBXZSBkZWZpbmUgc2Ny
YXRjaCByZWdpc3RlcnMgYXMgdGhpbmdzIHRoYXQgYXJlIG5vdCBsaXZlIGJlZm9yZSB0aGUgc2h1
ZmZsZSBhbmQgYXJlIG5vdCBvbmUgb2YKLS8vICAgdGhlIGRlc3RpbmF0aW9ucyBvZiB0aGUgc2h1
ZmZsZS4gTm90IGJlaW5nIGxpdmUgYmVmb3JlIHRoZSBzaHVmZmxlIGFsc28gbWVhbnMgdGhhdCB0
aGV5IGNhbm5vdAotLy8gICBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIHNvdXJjZXMgb2YgdGhlIHNo
dWZmbGUuCi0vLwotLy8gLSBBIHNlY29uZCBzY3JhdGNoIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVk
IHdoZW4geW91IGhhdmUgc2h1ZmZsZSBwYWlycyB3aGVyZSBtZW1vcnkgaXMgdXNlZCBib3RoCi0v
LyAgIGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24uCi0vLwotLy8gLSBZb3UncmUgZ3VhcmFudGVl
ZCBub3QgdG8gbmVlZCBhbnkgc2NyYXRjaCBsb2NhdGlvbnMgaWYgdGhlcmUgaXMgYSBTd2FwIGlu
c3RydWN0aW9uIGF2YWlsYWJsZSBmb3IKLS8vICAgdGhlIHR5cGUgYW5kIHlvdSBkb24ndCBoYXZl
IGFueSBtZW1vcnkgbG9jYXRpb25zIHRoYXQgYXJlIGJvdGggdGhlIHNvdXJjZSBhbmQgdGhlIGRl
c3RpbmF0aW9uIG9mCi0vLyAgIHNvbWUgcGFpcnMuIEdQIHN1cHBvcnRzIFN3YXAgb24geDg2IHdo
aWxlIEZQIG5ldmVyIHN1cHBvcnRzIFN3YXAuCi0vLwotLy8gLSBQYXNzaW5nIG1lbW9yeSBsb2Nh
dGlvbnMgYXMgc2NyYXRjaCBpZiBhcmUgcnVubmluZyBlbWl0U2h1ZmZsZSgpIGJlZm9yZSByZWdp
c3RlciBhbGxvY2F0aW9uIGlzCi0vLyAgIHNpbGx5LCBzaW5jZSB0aGF0IHdpbGwgY2F1c2UgZW1p
dFNodWZmbGUoKSB0byBwaWNrIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXJzIHdoZW4gaXQgZG9lcyBu
ZWVkCi0vLyAgIHNjcmF0Y2guIE9uZSBlYXN5IHdheSB0byBhdm9pZCB0aGF0IHByZWRpY2FtZW50
IGlzIHRvIGVuc3VyZSB0aGF0IHlvdSBjYWxsIGVtaXRTaHVmZmxlKCkgYWZ0ZXIKLS8vICAgcmVn
aXN0ZXIgYWxsb2NhdGlvbi4gRm9yIHRoaXMgcmVhc29uIHdlIGNvdWxkIGFkZCBhIFNodWZmbGUg
aW5zdHJ1Y3Rpb24gc28gdGhhdCB3ZSBjYW4gZGVmZXIKLS8vICAgc2h1ZmZsaW5ncyB1bnRpbCBh
ZnRlciByZWdhbGxvYy4KLS8vCi0vLyAtIFNodWZmbGVzIHdpdGggbWVtb3J5PT5tZW1vcnkgcGFp
cnMgYXJlIG5vdCB2ZXJ5IHdlbGwgdHVuZWQuIFlvdSBzaG91bGQgYXZvaWQgdGhlbSBpZiB5b3Ug
d2FudAotLy8gICBwZXJmb3JtYW5jZS4gSWYgeW91IG5lZWQgdG8gZG8gdGhlbSwgdGhlbiBtYWtp
bmcgc3VyZSB0aGF0IHlvdSByZXNlcnZlIGEgdGVtcG9yYXJ5IGlzIG9uZSB3YXkgdG8KLS8vICAg
Z2V0IGFjY2VwdGFibGUgcGVyZm9ybWFuY2UuCi0vLwotLy8gTk9URTogVXNlIHRoaXMgbWV0aG9k
IChhbmQgaXRzIGZyaWVuZCBiZWxvdykgdG8gZW1pdCBzaHVmZmxlcyBhZnRlciByZWdpc3RlciBh
bGxvY2F0aW9uLiBCZWZvcmUKLS8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXQgaXMgbXVjaCBiZXR0
ZXIgdG8gc2ltcGx5IHVzZSB0aGUgU2h1ZmZsZSBpbnN0cnVjdGlvbi4KLVZlY3RvcjxJbnN0PiBl
bWl0U2h1ZmZsZSgKLSAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+LCBzdGQ6OmFycmF5PEFyZywgMj4g
c2NyYXRjaCwgQXJnOjpUeXBlLCBWYWx1ZSogb3JpZ2luKTsKLQotLy8gUGVyZm9ybSBhIHNodWZm
bGUgdGhhdCBpbnZvbHZlcyBhbnkgbnVtYmVyIG9mIHR5cGVzLiBQYXNzIHNjcmF0Y2ggcmVnaXN0
ZXJzIG9yIG1lbW9yeSBsb2NhdGlvbnMKLS8vIGZvciBlYWNoIHR5cGUgYWNjb3JkaW5nIHRvIHRo
ZSBydWxlcyBhYm92ZS4KLVZlY3RvcjxJbnN0PiBlbWl0U2h1ZmZsZSgKLSAgICBjb25zdCBWZWN0
b3I8U2h1ZmZsZVBhaXI+JiwKLSAgICBjb25zdCBzdGQ6OmFycmF5PEFyZywgMj4mIGdwU2NyYXRj
aCwgY29uc3Qgc3RkOjphcnJheTxBcmcsIDI+JiBmcFNjcmF0Y2gsCi0gICAgVmFsdWUqIG9yaWdp
bik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCi0KLSNlbmRpZiAvLyBBaXJFbWl0U2h1ZmZsZV9oCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKaW5kZXggOGUzM2M3ZmUyMDRjODRlMDU5
ODA1NmY1MjkxODYwN2Y2MTYwOTU5NS4uMDdhM2MxMGM5YzNjN2I4MDBlMDE3ZGZhNmIwODQxMzll
Mzg4NWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsOCArMzUsNiBAQAogI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5oIgotI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgotI2lu
Y2x1ZGUgIkFpckxvd2VyTWFjcm9zLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNp
bmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmgiCkBAIC02Nyw4ICs2NSw2IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24o
Q29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZyhjb2RlKTsKICAgICB9CiAKLSAgICBsb3dlck1h
Y3Jvcyhjb2RlKTsKLQogICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRp
b25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCiAgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0
aW9ucy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NDU2CkBAIC04NCw4ICs4MCw2IEBAIHZvaWQgcHJlcGFyZUZvckdlbmVyYXRpb24oQ29kZSYgY29k
ZSkKICAgICBlbHNlCiAgICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKGNvZGUpOwog
Ci0gICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwotCiAgICAgLy8gUHJpb3IgdG8gdGhpcyBw
b2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0
IGV4cGxpY2l0LiBJdCBhbHNvCiAgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGlj
aCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCiAgICAgaGFuZGxlQ2Fs
bGVlU2F2ZXMoY29kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmgKaW5kZXggZTRjMmFlZWMxZmQxNzc2M2Y1OGU1NjI0YjNlZDQzNmNiNTU5MTA4ZS4uNzFiN2E4
OGE0YjZmMTRhMWMxMzliZGEyNGRlMWRmNDQzMDgzOGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMSArMzgsMTEgQEAgY2xhc3MgQ29kZTsKIAog
Ly8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxv
Y2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CiAvLyByZWdpc3RlciBhbGxvY2F0
aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJik7Cit2b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9u
KENvZGUmKTsKIAogLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuIEND
YWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzCiAv
LyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcyBnZW5lcmF0aW5nLgotSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7Cit2b2lkIGdlbmVyYXRl
KENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAKaW5kZXggOTA4OTFlM2Y3OTA3NmM4ZmY1YThmNTQxYWNlYWVlZmE1Y2Y1MmQ3My4uNDUzMzQx
N2QxMzU5MDZhZjRjZmY3OWQ5NjVmMjJiZWRkOGU2YjNmMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxOCArMzMsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKLXZvaWQgSW5z
ZXJ0aW9uU2V0OjppbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgsIGNvbnN0IFZlY3RvcjxJbnN0PiYg
aW5zdHMpCi17Ci0gICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogaW5zdHMpCi0gICAgICAgIGlu
c2VydEluc3QoaW5kZXgsIGluc3QpOwotfQotCi12b2lkIEluc2VydGlvblNldDo6aW5zZXJ0SW5z
dHMoc2l6ZV90IGluZGV4LCBWZWN0b3I8SW5zdD4mJiBpbnN0cykKLXsKLSAgICBmb3IgKEluc3Qm
IGluc3QgOiBpbnN0cykKLSAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgV1RGTW92ZShpbnN0KSk7
Ci19Ci0KIHZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogewog
ICAgIGJ1YmJsZVNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNl
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAppbmRl
eCBjYWJhZmI3MWNmMzhkODlmMjFmY2M1NmFjMmI0OGEwMzZlNTJlMjE2Li4zYzc0NjU5OGZjYjJi
Yzc2NGE4M2I1NjM5OGZkYTg0NzAzYzFkMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksOSArNTksNiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5z
dD4oaW5zdCkpKTsKICAgICB9Ci0KLSAgICB2b2lkIGluc2VydEluc3RzKHNpemVfdCBpbmRleCwg
Y29uc3QgVmVjdG9yPEluc3Q+Jik7Ci0gICAgdm9pZCBpbnNlcnRJbnN0cyhzaXplX3QgaW5kZXgs
IFZlY3RvcjxJbnN0PiYmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CiAgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCmluZGV4IDc5N2MyOTJlODA1
MTYyZjJhMjM5ZDkyOTc2YTA5Njc4NWUzNDEwYWMuLjE0NzJmYjYzYWVhZDQ3MDkyNGZjNzZjZTFi
ZDRmMDNhYmZjN2RkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCkBA
IC04NSwxNSArODUsNiBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gb3JpZ2luIHx8IG9wY29kZSAhPSBOb3AgfHwgYXJncy5zaXplKCk7IH0K
IAotICAgIHZvaWQgYXBwZW5kKCkgeyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgotICAgIHZvaWQgYXBwZW5kKEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCi0gICAgewotICAgICAgICBhcmdzLmFwcGVuZChhcmcpOwotICAgICAgICBhcHBlbmQoYXJn
dW1lbnRzLi4uKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxs
IGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGlu
Z3MgdGhhdAogICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91
J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKICAgICAvLyBw
cm9iYWJseSBkb2luZyBpdCB3cm9uZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTliYmNiMDU4OTM4NmFmMTMwODZiY2E1ODVlZTgyMWEzN2RlNWQzMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQWlyQ0NhbGxpbmdDb252ZW50
aW9uLmgiCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckVtaXRTaHVmZmxlLmgi
Ci0jaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKLSNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgotI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIK
LSNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCi0jaW5jbHVkZSAiQjNDQ2FsbFZhbHVl
LmgiCi0jaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotbmFtZXNwYWNlIHsKLQotYm9vbCB2ZXJib3NlID0gZmFs
c2U7Ci0gICAgCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsb3dlckFmdGVyUmVn
QWxsb2MoQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImxv
d2VyQWZ0ZXJSZWdBbGxvYyIpOwotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IkNvZGUgYmVmb3JlIGxvd2VyQWZ0ZXJSZWdBbGxvYzpcbiIsIGNvZGUpOwotCi0gICAgSGFzaE1h
cDxJbnN0KiwgUmVnaXN0ZXJTZXQ+IHVzZWRSZWdpc3RlcnM7Ci0KLSAgICBSZWdMaXZlbmVzcyBs
aXZlbmVzcyhjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAg
ICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwot
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKLQotICAgICAgICAg
ICAgYm9vbCBpc1JlbGV2YW50ID0gaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSB8fCBpbnN0Lm9wY29k
ZSA9PSBDb2xkQ0NhbGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1JlbGV2YW50
KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwotCi0gICAgICAg
ICAgICBpZiAoaXNSZWxldmFudCkKLSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgm
aW5zdCwgc2V0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0g
WyZdIChSZWdpc3RlclNldCBzZXQsIEFyZzo6VHlwZSB0eXBlKSAtPiBzdGQ6OmFycmF5PEFyZywg
Mj4gewotICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gcmVzdWx0OwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7Ci0gICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIHNldC5zZXQo
cmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygK
LSAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBBcmc6OmJ5dGVzKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0gICAgLy8g
Tm93IHRyYW5zZm9ybSB0aGUgY29kZS4KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOwotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0
SW5kZXgpIHsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
LQotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgewotICAgICAgICAgICAgY2FzZSBT
aHVmZmxlOiB7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVy
cy5nZXQoJmluc3QpOwotICAgICAgICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXpl
KCk7IGkgKz0gMykgewotICAgICAgICAgICAgICAgICAgICBBcmcgc3JjID0gaW5zdC5hcmdzW2kg
KyAwXTsKLSAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGluc3QuYXJnc1tpICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBpbnN0LmFyZ3NbaSArIDJdLndp
ZHRoKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZWQgcmVnaXN0ZXIgc2V0IGNv
bnRhaW5zIHRoaW5ncyBsaXZlIGFmdGVyIHRoZSBzaHVmZmxlLiBCdXQKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZW1pdFNodWZmbGUoKSB3YW50cyBhIHNjcmF0Y2ggcmVnaXN0ZXIgdGhhdCBpcyBu
b3QganVzdCBkZWFkIGJ1dCBhbHNvIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlu
dGVyZmVyZSB3aXRoIGVpdGhlciBzb3VyY2VzIG9yIGRlc3RpbmF0aW9ucy4KLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBleGNsdWRlUmVnaXN0ZXJzID0gWyZdIChUbXAgdG1wKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0LnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgICAgICBzcmMuZm9yRWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRzdC5mb3JFYWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVm
ZmxlUGFpcihzcmMsIGRzdCwgd2lkdGgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3RkOjphcnJheTxBcmcsIDI+IGdwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhzZXQsIEFy
Zzo6R1ApOwotICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBmcFNjcmF0Y2ggPSBn
ZXRTY3JhdGNoZXMoc2V0LCBBcmc6OkZQKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0SW5zdHMoCi0gICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgZW1pdFNodWZmbGUo
cGFpcnMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBpbnN0Lm9yaWdpbikpOwotICAgICAgICAgICAg
ICAgIGluc3QgPSBJbnN0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7Ci0gICAgICAgICAgICAgICAgQ0NhbGxW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKLQotICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdzID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOwot
ICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1NhdmUgPSBsaXZlUmVnczsKLSAgICAg
ICAgICAgICAgICByZWdzVG9TYXZlLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7Ci0gICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpKTsKLSAgICAgICAgICAgICAgICByZWdzVG9TYXZlLmV4Y2x1ZGUo
UmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCBwcmVVc2VkID0gcmVnc1RvU2F2ZTsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8QXJnPiBkZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUs
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUt
PnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgQXJnIG9yaWdpbmFsUmVzdWx0ID0gcmVzdWx0ID8g
aW5zdC5hcmdzWzFdIDogQXJnKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
VmVjdG9yPFNodWZmbGVQYWlyPiBwYWlyczsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVzdGluYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKLSAgICAgICAgICAgICAgICAgICAg
QXJnIHNyYyA9IGluc3QuYXJnc1tyZXN1bHQgPyAoaSA+PSAxID8gaSArIDEgOiBpKSA6IGkgXTsK
LSAgICAgICAgICAgICAgICAgICAgQXJnIGRzdCA9IGRlc3RpbmF0aW9uc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCA9IEFyZzo6d2lkdGhGb3JCM1R5cGUoY2hpbGQt
PnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihz
cmMsIGRzdCwgd2lkdGgpKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGV4Y2x1ZGVSZWdp
c3RlcnMgPSBbJl0gKFRtcCB0bXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVVc2VkLnNldCh0bXAucmVn
KCkpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBzcmMuZm9y
RWFjaFRtcEZhc3QoZXhjbHVkZVJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGRzdC5m
b3JFYWNoVG1wRmFzdChleGNsdWRlUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBzdGQ6OmFycmF5PEFyZywgMj4gZ3BTY3JhdGNoID0gZ2V0U2NyYXRjaGVz
KHByZVVzZWQsIEFyZzo6R1ApOwotICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBm
cFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMocHJlVXNlZCwgQXJnOjpGUCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgLy8gQWxzbyBuZWVkIHRvIHNhdmUgYWxsIGxpdmUgcmVnaXN0
ZXJzLiBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSByZXN1bHQKLSAgICAgICAgICAgICAg
ICAvLyByZWdpc3Rlci4KLSAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxSZXN1bHQuaXNSZWco
KSkKLSAgICAgICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5jbGVhcihvcmlnaW5hbFJlc3VsdC5y
ZWcoKSk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7Ci0g
ICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAotICAgICAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgp
LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFp
cnMuYXBwZW5kKFNodWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0aCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90KTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJlLWNhbGwgcGFpcnMgZm9yICIsIGluc3Qs
ICI6ICIsIGxpc3REdW1wKHBhaXJzKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3RzKAotICAgICAgICAgICAgICAgICAgICBp
bnN0SW5kZXgsIGVtaXRTaHVmZmxlKHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5v
cmlnaW4pKTsKLQotICAgICAgICAgICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qu
b3JpZ2luLCBkZXN0aW5hdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgLy8gTm93IHdlIG5lZWQg
dG8gZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzLgotICAgICAgICAgICAgICAgIHBhaXJz
LnJlc2l6ZSgwKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja1Nsb3RJbmRleCA9IDA7
Ci0gICAgICAgICAgICAgICAgcmVnc1RvU2F2ZS5mb3JFYWNoKAotICAgICAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAocmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKGFyZy50eXBl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBzdGFj
a1Nsb3RzW3N0YWNrU2xvdEluZGV4KytdOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKFNodWZmbGVQYWlyKEFyZzo6c3RhY2soc3RhY2tTbG90KSwgYXJnLCB3aWR0aCkpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFNodWZmbGVQYWlyIHBhaXIocmVzdWx0LCBvcmlnaW5hbFJlc3Vs
dCwgQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZChwYWlyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBncFNjcmF0Y2ggPSBnZXRTY3JhdGNoZXMobGl2ZVJlZ3MsIEFyZzo6R1ApOwotICAgICAg
ICAgICAgICAgIGZwU2NyYXRjaCA9IGdldFNjcmF0Y2hlcyhsaXZlUmVncywgQXJnOjpGUCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3Rz
KAotICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBlbWl0U2h1ZmZsZShwYWlycywg
Z3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7Ci0KLSAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0
Y2hpbmcoCi0gICAgICAgICAgICBbJl0gKEluc3QmIGluc3QpIC0+IGJvb2wgewotICAgICAgICAg
ICAgICAgIHJldHVybiAhaW5zdDsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIGlmICh2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb2RlIGFmdGVyIGxvd2VyQWZ0ZXJSZWdBbGxvYzpc
biIsIGNvZGUpOwotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYWUyOWI3NGZmNDA3ZGFkMzE1ZGI5NGJkNzg0OTY3MWE5ZGZhNzkwYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEFpckxvd2VyQWZ0ZXJSZWdBbGxvY19oCi0jZGVmaW5lIEFpckxvd2VyQWZ0ZXJSZWdBbGxv
Y19oCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgbG93ZXJzIFNodWZm
bGUgYW5kIENvbGRDQ2FsbCBpbnN0cnVjdGlvbnMuIFRoaXMgcGhhc2UgaXMgZGVzaWduZWQgdG8g
YmUgcnVuIGFmdGVyIHJlZ2lzdGVyCi0vLyBhbGxvY2F0aW9uLgotCi12b2lkIGxvd2VyQWZ0ZXJS
ZWdBbGxvYyhDb2RlJik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KLSNlbmRpZiAvLyBBaXJMb3dlckFmdGVyUmVnQWxsb2Nf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jv
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiZDg5ZDI0YmExYTMwNGI5Yzc5ZDllNDNk
OTJkNDI0OTNjZDcyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBaXJMb3dl
ck1hY3Jvcy5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkFpckNDYWxsaW5n
Q29udmVudGlvbi5oIgotI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJJbnNlcnRp
b25TZXQuaCIKLSNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKLSNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKLSNpbmNsdWRlICJCM1ZhbHVlSW5s
aW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
Ci0KLXZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImxvd2VyTWFjcm9zIik7Ci0KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KGNvZGUpOwotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdElu
ZGV4KTsKLQotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgewotICAgICAgICAgICAg
Y2FzZSBDQ2FsbDogewotICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5v
cmlnaW4tPmFzPENDYWxsVmFsdWU+KCk7Ci0KLSAgICAgICAgICAgICAgICBWZWN0b3I8QXJnPiBk
ZXN0aW5hdGlvbnMgPSBjb21wdXRlQ0NhbGxpbmdDb252ZW50aW9uKGNvZGUsIHZhbHVlKTsKLQot
ICAgICAgICAgICAgICAgIEluc3Qgc2h1ZmZsZUFyZ3VtZW50cyhTaHVmZmxlLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8g
MCA6IDE7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGRlc3RpbmF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2hpbGQgPSB2
YWx1ZS0+Y2hpbGQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIHNodWZmbGVBcmd1bWVudHMuYXJn
cy5hcHBlbmQoaW5zdC5hcmdzW29mZnNldCArIGldKTsKLSAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZUFyZ3VtZW50cy5hcmdzLmFwcGVuZChkZXN0aW5hdGlvbnNbaV0pOwotICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlQXJndW1lbnRzLmFyZ3MuYXBwZW5kKEFyZzo6d2lkdGhBcmcoQXJnOjp3
aWR0aEZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdChpbnN0SW5kZXgsIFdURk1vdmUoc2h1
ZmZsZUFyZ3VtZW50cykpOwotCi0gICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB3ZSdy
ZSB1c2luZyBvdXIgb3JpZ2luYWwgY2FsbGVlIGFyZ3VtZW50LgotICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uc1swXSA9IGluc3QuYXJnc1swXTsKLQotICAgICAgICAgICAgICAgIC8vIFNhdmUg
d2hlcmUgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHB1dCBpdHMgcmVzdWx0LgotICAgICAgICAg
ICAgICAgIEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+dHlwZSgpID09IFZvaWQgPyBBcmcoKSA6IGlu
c3QuYXJnc1sxXTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnN0ID0gYnVp
bGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVzdGluYXRpb25zKTsKLQotICAgICAgICAgICAg
ICAgIFRtcCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZvaWQ6
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRmxvYXQ6
Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwg
TW92ZUZsb2F0LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZToKLSAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3ZlRG91YmxlLCB2YWx1ZSwg
cmVzdWx0LCByZXN1bHREc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KGluc3RJbmRleCArIDEsIE1vdmUzMiwgdmFsdWUsIHJlc3VsdCwgcmVzdWx0RHN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJbnQ2NDoKLSAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBNb3Zl
LCB2YWx1ZSwgcmVzdWx0LCByZXN1bHREc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwot
ICAgIH0KLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMb3dlck1hY3Jvcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ck1hY3Jvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTJkMTFkODk0ZGEwOTI4
NDFjZGFmN2RhOTdmMzQ2ODE2MDg1NDVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNy
b3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBaXJMb3dlck1hY3Jvc19oCi0jZGVm
aW5lIEFpckxvd2VyTWFjcm9zX2gKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotY2xhc3MgQ29kZTsKLQotLy8g
QWlyIGhhcyBzb21lIG9wY29kZXMgdGhhdCBhcmUgdmVyeSBoaWdoLWxldmVsIGFuZCBhcmUgbWVh
bnQgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgbG93LWxldmVsCi0vLyBrbm93bGVkZ2UgaW4gdGhl
IEIzLT5BaXIgbG93ZXJpbmcuIFRoZSBjdXJyZW50IGV4YW1wbGUgaXMgQ0NhbGwuCi0KLXZvaWQg
bG93ZXJNYWNyb3MoQ29kZSYpOwotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0K
LSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQotCi0jZW5kaWYgLy8gQWlyTG93ZXJNYWNyb3NfaAot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRl
eCA2MDEwYjJhNzEyZjRmMGRkOGRhOTYyNTYzZTkwY2Q1ZWFkYTc0NDg4Li41ZTdjYTA3MDUwNjdj
ZjI1YWM5OGNiMzRjOGJjZTNkOTBiMzM4NjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTQxNywxNCArNDE3LDYgQEAgTW92ZSBVOkc6
UHRyLCBEOkc6UHRyCiAgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgogICAgIHg4NjogSW1tLCBB
ZGRyIGFzIHN0b3JlUHRyCiAKLXg4NjogU3dhcDMyIFVEOkc6MzIsIFVEOkc6MzIKLSAgICBUbXAs
IFRtcAotICAgIFRtcCwgQWRkcgotCi14ODZfNjQ6IFN3YXA2NCBVRDpHOjY0LCBVRDpHOjY0Ci0g
ICAgVG1wLCBUbXAKLSAgICBUbXAsIEFkZHIKLQogTW92ZTMyIFU6RzozMiwgWkQ6RzozMgogICAg
IFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCiAgICAgQWRkciwgVG1wIGFzIGxvYWQzMgpA
QCAtNjkwLDE5ICs2ODIsNyBAQCBSZXREb3VibGUgVTpGOjY0IC9yZXR1cm4KIAogT29wcyAvdGVy
bWluYWwKIAotIyBBIFNodWZmbGUgaXMgYSBtdWx0aS1zb3VyY2UsIG11bHRpLWRlc3RpbmF0aW9u
IG1vdmUuIEl0IHNpbXVsdGFuZW91c2x5IGRvZXMgbXVsdGlwbGUgbW92ZXMgYXQgb25jZS4KLSMg
VGhlIG1vdmVzIGFyZSBzcGVjaWZpZWQgYXMgdHJpcGxldHMgb2Ygc3JjLCBkc3QsIGFuZCB3aWR0
aC4gRm9yIGV4YW1wbGUgeW91IGNhbiByZXF1ZXN0IGEgc3dhcCB0aGlzCi0jIHdheToKLSMgICAg
IFNodWZmbGUgJXRtcDEsICV0bXAyLCA2NCwgJXRtcDIsICV0bXAxLCA2NAotY3VzdG9tIFNodWZm
bGUKLQogIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlv
ciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCiAjIHdoaWNo
IG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCiBjdXN0b20gUGF0Y2gKIAotIyBJbnN0cnVjdGlv
bnMgdXNlZCBmb3IgbG93ZXJpbmcgQyBjYWxscy4gVGhlc2UgZG9uJ3QgbWFrZSBpdCB0byBBaXIg
Z2VuZXJhdGlvbi4gVGhleSBnZXQgbG93ZXJlZCB0bwotIyBzb21ldGhpbmcgZWxzZSBmaXJzdC4g
VGhlIG9yaWdpbiBWYWx1ZSBtdXN0IGJlIGEgQ0NhbGxWYWx1ZS4KLWN1c3RvbSBDQ2FsbAotY3Vz
dG9tIENvbGRDQ2FsbAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZWdpc3RlclByaW9yaXR5LmgKaW5kZXggZjBlZjhhMGVjM2U4ODZlMDk4NWViNTk4ZjNiOTU3
NDhjNDI3NjZkYi4uYzQ2MzE0ZGVhYWNjMzMxNjM4NDQxNDc1ZWVmYmJhZTM5ODVmMjgzNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTIsNyArNTIsNyBAQCBjb25zdCBWZWN0b3I8dHlwZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBl
PiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCiAgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7CiB9CiAKLUpTX0VYUE9SVF9QUklWQVRFIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7Citjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOwogCiB9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvdGVzdGFpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3Rh
aXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjYxZTAwNmY3YTVlMGY2Mjk4
Y2IyYjMyNGVhYzYwODE5OWFkYmRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNzA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQWly
Q29kZS5oIgotI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKLSNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCi0jaW5jbHVkZSAiQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgot
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiUHVyZU5hTi5oIgotI2luY2x1ZGUgIlZN
LmgiCi0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4K
LSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0vLyBXZSBkb24ndCBoYXZlIGEgTk9fUkVUVVJO
X0RVRV9UT19FWElULCBub3Igc2hvdWxkIHdlLiBUaGF0J3MgcmlkaWN1bG91cy4KLXN0YXRpYyBi
b29sIGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSB7IHJldHVybiB0cnVlOyB9
Ci0KLXN0YXRpYyB2b2lkIHVzYWdlKCkKLXsKLSAgICBkYXRhTG9nKCJVc2FnZTogdGVzdGIzIFs8
ZmlsdGVyPl1cbiIpOwotICAgIGlmIChoaWRkZW5UcnV0aEJlY2F1c2VOb1JldHVybklzU3R1cGlk
KCkpCi0gICAgICAgIGV4aXQoMSk7Ci19Ci0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsKLQotbmFtZXNwYWNl
IHsKLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLS8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsg
d2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgotI2RlZmlu
ZSBDSEVDSyh4KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBpZiAoISEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBj
cmFzaExvY2subG9jaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJ
TkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI3gpOyBcCi0gICAgICAgIENSQVNIKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSB3aGlsZSAoZmFsc2UpCi0KLVZNKiB2bTsKLQotc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxh
dGlvbj4gY29tcGlsZShCMzo6UHJvY2VkdXJlJiBwcm9jKQotewotICAgIHByZXBhcmVGb3JHZW5l
cmF0aW9uKHByb2MuY29kZSgpKTsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKLSAgICBnZW5l
cmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGls
YXRpb24iKSksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLVQgaW52b2tlKGNvbnN0IEIzOjpDb21waWxh
dGlvbiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLXsKLSAgICBUICgqZnVuY3Rpb24p
KEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRz
Li4uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgot
VCBjb21waWxlQW5kUnVuKEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKLXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFy
Z3VtZW50cy4uLik7Ci19Ci0KLXZvaWQgdGVzdFNpbXBsZSgpCi17Ci0gICAgQjM6OlByb2NlZHVy
ZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQotICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tKDQyKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+
YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQot
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Ci19Ci0KLS8vIFVzZSB0
aGlzIHRvIHB1dCBhIGNvbnN0YW50IGludG8gYSByZWdpc3RlciB3aXRob3V0IEFpciBiZWluZyBh
YmxlIHRvIHNlZSB0aGUgY29uc3RhbnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBsb2Fk
Q29uc3RhbnRJbXBsKEJhc2ljQmxvY2sqIGJsb2NrLCBUIHZhbHVlLCBCMzo6QWlyOjpPcGNvZGUg
bW92ZSwgVG1wIHRtcCwgVG1wIHNjcmF0Y2gpCi17Ci0gICAgc3RhdGljIFN0YXRpY0xvY2sgbG9j
azsKLSAgICBzdGF0aWMgc3RkOjptYXA8VCwgVCo+KiBtYXA7IC8vIEknbSBub3QgbWVzc2luZyB3
aXRoIEhhc2hNYXAncyBwcm9ibGVtcyB3aXRoIGludGVnZXJzLgotCi0gICAgTG9ja0hvbGRlciBs
b2NrZXIobG9jayk7Ci0gICAgaWYgKCFtYXApCi0gICAgICAgIG1hcCA9IG5ldyBzdGQ6Om1hcDxU
LCBUKj4oKTsKLQotICAgIGlmICghbWFwLT5jb3VudCh2YWx1ZSkpCi0gICAgICAgICgqbWFwKVt2
YWx1ZV0gPSBuZXcgVCh2YWx1ZSk7Ci0KLSAgICBUKiBwdHIgPSAoKm1hcClbdmFsdWVdOwotICAg
IGJsb2NrLT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHB0cikpLCBzY3JhdGNoKTsKLSAgICBibG9jay0+YXBwZW5kKG1vdmUsIG51bGxwdHIs
IEFyZzo6YWRkcihzY3JhdGNoKSwgdG1wKTsKLX0KLQotdm9pZCBsb2FkQ29uc3RhbnQoQmFzaWNC
bG9jayogYmxvY2ssIGludHB0cl90IHZhbHVlLCBUbXAgdG1wKQotewotICAgIGxvYWRDb25zdGFu
dEltcGw8aW50cHRyX3Q+KGJsb2NrLCB2YWx1ZSwgTW92ZSwgdG1wLCB0bXApOwotfQotCi12b2lk
IGxvYWREb3VibGVDb25zdGFudChCYXNpY0Jsb2NrKiBibG9jaywgZG91YmxlIHZhbHVlLCBUbXAg
dG1wLCBUbXAgc2NyYXRjaCkKLXsKLSAgICBsb2FkQ29uc3RhbnRJbXBsPGRvdWJsZT4oYmxvY2ss
IHZhbHVlLCBNb3ZlRG91YmxlLCB0bXAsIHNjcmF0Y2gpOwotfQotCi12b2lkIHRlc3RTaHVmZmxl
U2ltcGxlU3dhcCgpCi17Ci0gICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUg
PSBwcm9jLmNvZGUoKTsKLQotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7
Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxv
YWRDb25zdGFudChyb290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMywgVG1wKEdQUkluZm86OnJlZ1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3Qs
IDQsIFRtcChHUFJJbmZvOjpyZWdUMykpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86
OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbNF07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAg
KiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkp
OwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiks
IEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMg
KiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7Ci0gICAg
Q0hFQ0sodGhpbmdzWzFdID09IDIpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSA0KTsKLSAgICBD
SEVDSyh0aGluZ3NbM10gPT0gMyk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVTaW1wbGVTaGlmdCgp
Ci17Ci0gICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKLQotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywg
VG1wKEdQUkluZm86OnJlZ1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0
ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBU
bXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwotCi0gICAg
aW50MzJfdCB0aGluZ3NbNV07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsK
LSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50
MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihi
YXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50
MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3Mp
KTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENI
RUNLKHRoaW5nc1swXSA9PSAxKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7Ci0gICAgQ0hF
Q0sodGhpbmdzWzJdID09IDMpOwotICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKLSAgICBDSEVD
Syh0aGluZ3NbNF0gPT0gNCk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnQoKQotewot
ICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0K
LSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGxvYWRDb25zdGFu
dChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChH
UFJJbmZvOjpyZWdUMikpOwotICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6
cmVnVDMpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7
Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOwotICAgIGxv
YWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7Ci0gICAgcm9vdC0+YXBwZW5kKAotICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJl
Z1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
Ci0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q1KSwgVG1w
KEdQUkluZm86OnJlZ1Q2KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbOF07Ci0gICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRy
KGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRy
KGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRy
KGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKLSAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOwotICAgIENIRUNLKHRoaW5n
c1szXSA9PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7Ci0gICAgQ0hFQ0sodGhpbmdz
WzVdID09IDUpOwotICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKLSAgICBDSEVDSyh0aGluZ3Nb
N10gPT0gNyk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKQotewot
ICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0K
LSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGxvYWRDb25zdGFu
dChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChH
UFJJbmZvOjpyZWdUMikpOwotICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6
cmVnVDMpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7
Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOwotICAgIGxv
YWRDb25zdGFudChyb290LCA3LCBUbXAoR1BSSW5mbzo6cmVnVDYpKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgOCwgVG1wKEdQUkluZm86OnJlZ1Q3KSk7Ci0gICAgcm9vdC0+YXBwZW5kKAotICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAo
R1BSSW5mbzo6cmVnVDcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUNSksIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6
cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiks
Ci0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1w
KEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBU
bXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbOF07Ci0gICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRy
KGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRy
KGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q2KSwgQXJnOjphZGRy
KGJhc2UsIDYgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDcpLCBBcmc6OmFkZHIoYmFzZSwgNyAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKLSAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzJdID09IDIpOwotICAgIENIRUNLKHRoaW5n
c1szXSA9PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbNF0gPT0gNCk7Ci0gICAgQ0hFQ0sodGhpbmdz
WzVdID09IDUpOwotICAgIENIRUNLKHRoaW5nc1s2XSA9PSA2KTsKLSAgICBDSEVDSyh0aGluZ3Nb
N10gPT0gNyk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVTaW1wbGVSb3RhdGUoKQotewotICAgIEIz
OjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBC
YXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGxvYWRDb25zdGFudChyb290
LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1w
KEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZv
OjpyZWdUMikpOwotICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMp
KTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QxKSwgVG1wKEdQUkluZm86
OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbNF07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAg
KiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkp
OwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiks
IEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMg
KiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7Ci0gICAg
Q0hFQ0sodGhpbmdzWzFdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKLSAgICBD
SEVDSyh0aGluZ3NbM10gPT0gNCk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVTaW1wbGVCcm9hZGNh
c3QoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5j
b2RlKCk7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGxv
YWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3Qs
IDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwotICAgIGxvYWRDb25zdGFudChyb290LCA0LCBUbXAo
R1BSSW5mbzo6cmVnVDMpKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNodWZmbGUsIG51
bGxwdHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbNF07Ci0gICAgVG1wIGJh
c2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJn
OjphZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwot
ICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7Ci0KLSAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0g
ICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3Nb
MF0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1sy
XSA9PSAxKTsKLSAgICBDSEVDSyh0aGluZ3NbM10gPT0gMSk7Ci19Ci0KLXZvaWQgdGVzdFNodWZm
bGVCcm9hZGNhc3RBbGxSZWdzKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29k
ZSYgY29kZSA9IHByb2MuY29kZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3MgPSBy
ZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNv
ZGUuYWRkQmxvY2soKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0o
MzUpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDE7Ci0gICAg
Zm9yIChSZWcgcmVnIDogcmVncykgewotICAgICAgICBpZiAocmVnICE9IFJlZyhHUFJJbmZvOjpy
ZWdUMCkpCi0gICAgICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgY291bnQrKywgVG1wKHJlZykp
OwotICAgIH0KLSAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKFNodWZmbGUsIG51bGxw
dHIpOwotICAgIGZvciAoUmVnIHJlZyA6IHJlZ3MpIHsKLSAgICAgICAgaWYgKHJlZyAhPSBSZWco
R1BSSW5mbzo6cmVnVDApKQotICAgICAgICAgICAgc2h1ZmZsZS5hcHBlbmQoVG1wKEdQUkluZm86
OnJlZ1QwKSwgVG1wKHJlZyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7Ci0gICAgfQot
Ci0gICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3Qp
ICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQotICAgICAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVv
ZihpbnQzMl90KSkpOwotCi0gICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwg
NjY2KTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5nc1swXSkpLCBiYXNlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXpl
KCk7ICsraSkgewotICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBBcmc6OnN0
YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAg
ICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwg
QXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICB9Ci0gICAgCi0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSk7Ci0KLSAgICBmb3IgKGludDMyX3QgdGhpbmcgOiB0aGluZ3MpCi0gICAgICAgIENIRUNL
KHRoaW5nID09IDM1KTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdCgpCi17Ci0gICAg
QjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQotICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENvbnN0YW50KHJv
b3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUklu
Zm86OnJlZ1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpyZWdU
MykpOwotICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKLSAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7Ci0gICAgbG9hZENv
bnN0YW50KHJvb3QsIDcsIFRtcChHUFJJbmZvOjpyZWdUNikpOwotICAgIGxvYWRDb25zdGFudChy
b290LCA4LCBUbXAoR1BSSW5mbzo6cmVnVDcpKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAg
IFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
MSksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BS
SW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSk7Ci0KLSAgICBpbnQzMl90IHRoaW5nc1s4XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUu
bmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6Omlt
bTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKLSAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFz
ZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMy
X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFz
ZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMy
X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5h
cHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OmFkZHIoYmFz
ZSwgNiAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUNyksIEFyZzo6YWRkcihiYXNlLCA3ICogc2l6ZW9mKGludDMy
X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1sx
XSA9PSAxKTsKLSAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzNd
ID09IDIpOwotICAgIENIRUNLKHRoaW5nc1s0XSA9PSAyKTsKLSAgICBDSEVDSyh0aGluZ3NbNV0g
PT0gMyk7Ci0gICAgQ0hFQ0sodGhpbmdzWzZdID09IDMpOwotICAgIENIRUNLKHRoaW5nc1s3XSA9
PSA0KTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJkKCkKLXsKLSAgICBC
Mzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwotCi0gICAg
QmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAgICBsb2FkQ29uc3RhbnQocm9v
dCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDIsIFRt
cChHUFJJbmZvOjpyZWdUMSkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAzLCBUbXAoR1BSSW5m
bzo6cmVnVDIpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNCwgVG1wKEdQUkluZm86OnJlZ1Qz
KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRtcChHUFJJbmZvOjpyZWdUNCkpOwotICAg
IGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5mbzo6cmVnVDUpKTsKLSAgICBsb2FkQ29u
c3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2KSk7Ci0gICAgbG9hZENvbnN0YW50KHJv
b3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAg
U2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwgVG1wKEdQUklu
Zm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDYpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNSks
IEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAg
ICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRo
QXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpKTsKLQotICAgIGludDMyX3QgdGhpbmdzWzhdOwotICAgIFRtcCBiYXNlID0gY29kZS5u
ZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1t
NjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwotICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNl
LCAwICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJf
dCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNl
LCAzICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJf
dCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFw
cGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNiksIEFyZzo6YWRkcihiYXNl
LCA2ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRyKGJhc2UsIDcgKiBzaXplb2YoaW50MzJf
dCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBtZW1zZXQodGhpbmdzLCAw
LCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFd
ID09IDEpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSAxKTsKLSAgICBDSEVDSyh0aGluZ3NbM10g
PT0gMik7Ci0gICAgQ0hFQ0sodGhpbmdzWzRdID09IDIpOwotICAgIENIRUNLKHRoaW5nc1s1XSA9
PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbNl0gPT0gMyk7Ci0gICAgQ0hFQ0sodGhpbmdzWzddID09
IDQpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJCYWNrd2FyZCgpCi17Ci0g
ICAgLy8gTk9URTogVGhpcyB0ZXN0IHdhcyBteSBvcmlnaW5hbCBhdHRlbXB0IGF0IFRyZWVTaGlm
dEJhY2t3YXJkIGJ1dCBtaXN0YWtlcyB3ZXJlIG1hZGUuIFNvLCB0aGlzCi0gICAgLy8gZW5kcyB1
cCBiZWluZyBqdXN0IGEgd2VpcmQgdGVzdC4gQnV0IHdlaXJkIHRlc3RzIGFyZSB1c2VmdWwsIHNv
IEkga2VwdCBpdC4KLSAgICAKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2so
KTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAg
bG9hZENvbnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwotICAgIGxvYWRDb25z
dGFudChyb290LCAzLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDUsIFRt
cChHUFJJbmZvOjpyZWdUNCkpOwotICAgIGxvYWRDb25zdGFudChyb290LCA2LCBUbXAoR1BSSW5m
bzo6cmVnVDUpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNywgVG1wKEdQUkluZm86OnJlZ1Q2
KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDgsIFRtcChHUFJJbmZvOjpyZWdUNykpOwotICAg
IHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1Q0KSwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDUpLCBUbXAoR1BSSW5mbzo6cmVnVDYp
LCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdU
NSksIFRtcChHUFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1Q2KSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDYpLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUNyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1Q3KSwgVG1wKEdQUkluZm86OnJlZ1Qx
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLQotICAgIGludDMyX3QgdGhpbmdzWzhd
OwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRy
KGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUNiksIEFyZzo6YWRkcihiYXNlLCA2ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q3KSwgQXJnOjphZGRy
KGJhc2UsIDcgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJv
b3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7
Ci0KLSAgICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hF
Q0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0g
MSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFdID09IDgpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSA4
KTsKLSAgICBDSEVDSyh0aGluZ3NbM10gPT0gNyk7Ci0gICAgQ0hFQ0sodGhpbmdzWzRdID09IDcp
OwotICAgIENIRUNLKHRoaW5nc1s1XSA9PSA2KTsKLSAgICBDSEVDSyh0aGluZ3NbNl0gPT0gNik7
Ci0gICAgQ0hFQ0sodGhpbmdzWzddID09IDUpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlTXVsdGlw
bGVTaGlmdHMoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0g
cHJvYy5jb2RlKCk7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwot
ICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgbG9hZENvbnN0YW50
KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwotICAgIGxvYWRDb25zdGFudChyb290LCA0
LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNSwgVG1wKEdQ
UkluZm86OnJlZ1Q0KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDYsIFRtcChHUFJJbmZvOjpy
ZWdUNSkpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAg
ICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3aWR0
aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAoR1BS
SW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChH
UFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1Q1
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLQotICAgIGludDMyX3QgdGhpbmdzWzZd
OwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdz
KSksIGJhc2UpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRy
KGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRy
KGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihp
bnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBu
dWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGlu
Z3MsIDAsIHNpemVvZih0aGluZ3MpKTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAxKTsKLSAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzJdID09IDMpOwotICAgIENIRUNLKHRoaW5n
c1szXSA9PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbNF0gPT0gMyk7Ci0gICAgQ0hFQ0sodGhpbmdz
WzVdID09IDEpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlUm90YXRlV2l0aEZyaW5nZSgpCi17Ci0g
ICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQot
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENvbnN0YW50
KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQ
UkluZm86OnJlZ1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJbmZvOjpy
ZWdUMykpOwotICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsK
LSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7Ci0gICAgcm9v
dC0+YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QyKSwg
VG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZv
OjpyZWdUNCksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpKTsKLQotICAgIGludDMyX3QgdGhpbmdzWzZdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwotICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAw
ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkp
KTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihiYXNlLCAz
ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50MzJfdCkp
KTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDUp
LCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKLSAg
ICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRo
aW5nc1swXSA9PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Ci0gICAgQ0hFQ0sodGhp
bmdzWzJdID09IDIpOwotICAgIENIRUNLKHRoaW5nc1szXSA9PSAxKTsKLSAgICBDSEVDSyh0aGlu
Z3NbNF0gPT0gMik7Ci0gICAgQ0hFQ0sodGhpbmdzWzVdID09IDMpOwotfQotCi12b2lkIHRlc3RT
aHVmZmxlUm90YXRlV2l0aExvbmdGcmluZ2UoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsK
LSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOwotICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwotICAgIGxv
YWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3Qs
IDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwg
VG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChHUFJJbmZv
OjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7Ci0KLSAgICBpbnQzMl90IHRo
aW5nc1s2XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwot
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBz
aXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVvZihpbnQzMl90KSkpOwot
ICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFy
Zzo6YWRkcihiYXNlLCA0ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1v
dmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q1KSwgQXJnOjphZGRyKGJhc2UsIDUgKiBz
aXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVuZChS
ZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBtZW1z
ZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMyk7Ci0gICAgQ0hF
Q0sodGhpbmdzWzFdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSAyKTsKLSAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMSk7Ci0gICAgQ0hFQ0sodGhpbmdzWzRdID09IDQpOwotICAgIENIRUNL
KHRoaW5nc1s1XSA9PSA1KTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygp
Ci17Ci0gICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUo
KTsKLQotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENv
bnN0YW50KHJvb3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25zdGFudChy
b290LCAyLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywg
VG1wKEdQUkluZm86OnJlZ1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDQsIFRtcChHUFJJ
bmZvOjpyZWdUMykpOwotICAgIGxvYWRDb25zdGFudChyb290LCA1LCBUbXAoR1BSSW5mbzo6cmVn
VDQpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNiwgVG1wKEdQUkluZm86OnJlZ1Q1KSk7Ci0g
ICAgcm9vdC0+YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAo
R1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIFRtcChHUFJJbmZvOjpyZWdU
MiksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJl
Z1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAot
ICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUNCksIFRtcChH
UFJJbmZvOjpyZWdUNSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1Q1KSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoMzIpKTsKLQotICAgIGludDMyX3QgdGhpbmdzWzZdOwotICAgIFRtcCBiYXNlID0gY29k
ZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihi
YXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50
MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMyksIEFyZzo6YWRkcihi
YXNlLCAzICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjphZGRyKGJhc2UsIDQgKiBzaXplb2YoaW50
MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDUpLCBBcmc6OmFkZHIoYmFzZSwgNSAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3Mp
KTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENI
RUNLKHRoaW5nc1swXSA9PSAzKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Ci0gICAgQ0hF
Q0sodGhpbmdzWzJdID09IDIpOwotICAgIENIRUNLKHRoaW5nc1szXSA9PSA2KTsKLSAgICBDSEVD
Syh0aGluZ3NbNF0gPT0gNCk7Ci0gICAgQ0hFQ0sodGhpbmdzWzVdID09IDUpOwotfQotCi12b2lk
IHRlc3RTaHVmZmxlU2hpZnRBbmRSb3RhdGUoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsK
LSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0g
Y29kZS5hZGRCbG9jaygpOwotICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7
Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDMsIFRtcChHUFJJbmZvOjpyZWdUMikpOwotICAgIGxv
YWRDb25zdGFudChyb290LCA0LCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKLSAgICBsb2FkQ29uc3Rh
bnQocm9vdCwgNSwgVG1wKEdQUkluZm86OnJlZ1Q0KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3Qs
IDYsIFRtcChHUFJJbmZvOjpyZWdUNSkpOwotICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1
ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZvOjpyZWdUMCksIEFy
Zzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QzKSwg
VG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAg
ICBUbXAoR1BSSW5mbzo6cmVnVDQpLCBUbXAoR1BSSW5mbzo6cmVnVDUpLCBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbNl07Ci0gICAgVG1wIGJhc2Ug
PSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVv
ZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjph
ZGRyKGJhc2UsIDMgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVv
ZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUNSksIEFyZzo6YWRkcihiYXNlLCA1ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0g
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDMpOwotICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKLSAg
ICBDSEVDSyh0aGluZ3NbMl0gPT0gMik7Ci0gICAgQ0hFQ0sodGhpbmdzWzNdID09IDQpOwotICAg
IENIRUNLKHRoaW5nc1s0XSA9PSA0KTsKLSAgICBDSEVDSyh0aGluZ3NbNV0gPT0gNSk7Ci19Ci0K
LXZvaWQgdGVzdFNodWZmbGVTaGlmdEFsbFJlZ3MoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJv
YzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVn
PiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7Ci0KLSAgICBCYXNpY0Jsb2Nr
KiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKQotICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgMzUgKyBpLCBUbXAo
cmVnc1tpXSkpOwotICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQoU2h1ZmZsZSwgbnVs
bHB0cik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLQotICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUu
YWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90
S2luZDo6TG9ja2VkKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7
ICsraSkKLSAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0p
LCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKLQotICAgIFZlY3Rvcjxp
bnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5l
d1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3Qp
KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCBpICogc2l6ZW9mKGlu
dDMyX3QpKSk7Ci0gICAgfQotICAgIAotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBw
ZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAg
IENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBd
ID09IDM1KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
LSAgICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IDM1ICsgc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkg
LSAxKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZUFsbFJlZ3MoKQotewotICAgIEIzOjpQ
cm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBjb25z
dCBWZWN0b3I8UmVnPiYgcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7Ci0KLSAg
ICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQotICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwg
MzUgKyBpLCBUbXAocmVnc1tpXSkpOwotICAgIEluc3QmIHNodWZmbGUgPSByb290LT5hcHBlbmQo
U2h1ZmZsZSwgbnVsbHB0cik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChy
ZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLSAgICBzaHVmZmxlLmFwcGVu
ZChUbXAocmVncy5sYXN0KCkpLCBUbXAocmVnc1swXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDMyKSk7Ci0KLSAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2Yo
aW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIHJvb3Qt
PmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBp
ICogc2l6ZW9mKGludDMyX3QpKSk7Ci0KLSAgICBWZWN0b3I8aW50MzJfdD4gdGhpbmdzKHJlZ3Mu
c2l6ZSgpLCA2NjYpOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdU
MCkpOwotICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6
cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIH0KLSAg
ICAKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAzNSArIHN0YXRpY19jYXN0
PGludDMyX3Q+KHJlZ3Muc2l6ZSgpKSAtIDEpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCByZWdzLnNpemUoKTsgKytpKQotICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gMzUgKyBzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSAtIDEpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dh
cDY0KCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHByb2Mu
Y29kZSgpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAgICBs
b2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJ
bmZvOjpyZWdUMSkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAwMGxs
LCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAwMDAw
MDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Ci0gICAgcm9vdC0+YXBwZW5kKAotICAg
ICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBUbXAo
R1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0gICAgICAgIFRt
cChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSk7Ci0KLSAgICBpbnQ2NF90IHRoaW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9IGNv
ZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKLSAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRf
dCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2UsIDMg
KiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBt
ZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNvbXBp
bGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAwMDAw
MDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAwbGwp
OwotICAgIENIRUNLKHRoaW5nc1syXSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVD
Syh0aGluZ3NbM10gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7Ci19Ci0KLXZvaWQgdGVzdFNodWZm
bGVTaW1wbGVTaGlmdDY0KCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYg
Y29kZSA9IHByb2MuY29kZSgpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQ
UkluZm86OnJlZ1QwKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAw
bGwsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAw
MDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9v
dCwgNDAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Ci0gICAgbG9hZENv
bnN0YW50KHJvb3QsIDUwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUNCkpOwot
ICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgVG1w
KEdQUkluZm86OnJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDMpLCBUbXAoR1BSSW5mbzo6cmVn
VDQpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOwotCi0gICAgaW50NjRfdCB0aGluZ3Nb
NV07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBl
bmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3MpKSwgYmFzZSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDY0
X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MyksIEFyZzo6YWRkcihiYXNlLCAzICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUNCksIEFyZzo6YWRkcihiYXNlLCA0
ICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFy
Zzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBl
bmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAg
bWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21w
aWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09IDEwMDAwMDAw
MDAwMDAwMDAwbGwpOwotICAgIENIRUNLKHRoaW5nc1sxXSA9PSAyMDAwMDAwMDAwMDAwMDAwMGxs
KTsKLSAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMzAwMDAwMDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hF
Q0sodGhpbmdzWzNdID09IDMwMDAwMDAwMDAwMDAwMDAwbGwpOwotICAgIENIRUNLKHRoaW5nc1s0
XSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVN3YXBNaXhl
ZFdpZHRoKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHBy
b2MuY29kZSgpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUMSkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAzMDAwMDAwMDAwMDAwMDAw
MGxsLCBUbXAoR1BSSW5mbzo6cmVnVDIpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgNDAwMDAw
MDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QzKSk7Ci0gICAgcm9vdC0+YXBwZW5kKAot
ICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDIpLCBU
bXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0gICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMyksIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDY0KSk7Ci0KLSAgICBpbnQ2NF90IHRoaW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9
IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKLSAgICBy
b290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRy
KGJhc2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50
NjRfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QzKSwgQXJnOjphZGRyKGJhc2Us
IDMgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFw
cGVuZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAg
ICBtZW1zZXQodGhpbmdzLCAwLCBzaXplb2YodGhpbmdzKSk7Ci0gICAgCi0gICAgQ0hFQ0soIWNv
bXBpbGVBbmRSdW48aW50Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gMTAwMDAw
MDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFdID09IDIwMDAwMDAwMDAwMDAwMDAw
bGwpOwotICAgIENIRUNLKHRoaW5nc1syXSA9PSA0MDAwMDAwMDAwMDAwMDAwMGxsKTsKLSAgICBD
SEVDSyh0aGluZ3NbM10gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDMwMDAwMDAwMDAwMDAwMDAw
bGwpKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpCi17Ci0gICAgQjM6
OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQotICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3Qs
IDEwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25z
dGFudChyb290LCAyMDAwMDAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMzAwMDAwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJl
Z1QyKSk7Ci0gICAgbG9hZENvbnN0YW50KHJvb3QsIDQwMDAwMDAwMDAwMDAwMDAwbGwsIFRtcChH
UFJJbmZvOjpyZWdUMykpOwotICAgIGxvYWRDb25zdGFudChyb290LCA1MDAwMDAwMDAwMDAwMDAw
MGxsLCBUbXAoR1BSSW5mbzo6cmVnVDQpKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNo
dWZmbGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMiksIFRtcChHUFJJbmZv
OjpyZWdUMyksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKLSAgICAgICAgVG1wKEdQUklu
Zm86OnJlZ1QzKSwgVG1wKEdQUkluZm86OnJlZ1Q0KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRo
MzIpKTsKLQotICAgIGludDY0X3QgdGhpbmdzWzVdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwotICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAq
IHNpemVvZihpbnQ2NF90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwot
ICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6
OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAqIHNpemVv
ZihpbnQ2NF90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDQpLCBBcmc6OmFkZHIoYmFzZSwgNCAqIHNpemVvZihpbnQ2NF90KSkpOwotICAgIHJv
b3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGlu
Z3MpKTsKLSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAg
IENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVDSyh0aGlu
Z3NbMV0gPT0gMjAwMDAwMDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0sodGhpbmdzWzJdID09IDMw
MDAwMDAwMDAwMDAwMDAwbGwpOwotICAgIENIRUNLKHRoaW5nc1szXSA9PSAzMDAwMDAwMDAwMDAw
MDAwMGxsKTsKLSAgICBDSEVDSyh0aGluZ3NbNF0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDQw
MDAwMDAwMDAwMDAwMDAwbGwpKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkK
LXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgp
OwotCi0gICAgaW50MzJfdCBtZW1vcnlbMl07Ci0gICAgbWVtb3J5WzBdID0gMzU7Ci0gICAgbWVt
b3J5WzFdID0gMzY7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRCbG9jaygpOwot
ICAgIGxvYWRDb25zdGFudChyb290LCAxLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2Fk
Q29uc3RhbnQocm9vdCwgMiwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDIp
KTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAg
IFRtcChHUFJJbmZvOjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAg
KiBzaXplb2YoaW50MzJfdCkpLAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qy
KSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7Ci0K
LSAgICBpbnQzMl90IHRoaW5nc1syXTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVv
ZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0g
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKLSAg
ICBDSEVDSyhtZW1vcnlbMF0gPT0gMzUpOwotICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Ci19
Ci0KLXZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUxvbmcoKQotewotICAgIEIzOjpQcm9jZWR1
cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAgICBpbnQzMl90IG1l
bW9yeVsyXTsKLSAgICBtZW1vcnlbMF0gPSAzNTsKLSAgICBtZW1vcnlbMV0gPSAzNjsKLQotICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENvbnN0YW50KHJv
b3QsIDEsIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGxvYWRDb25zdGFudChyb290LCAyLCBU
bXAoR1BSSW5mbzo6cmVnVDEpKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMywgVG1wKEdQUklu
Zm86OnJlZ1QyKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRy
KCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDMpKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAg
ICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAgIAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVn
VDApLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMiksCi0g
ICAgICAgIAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QzKSwgMCAqIHNpemVvZihpbnQzMl90KSksCi0gICAgICAgIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDMyKSwKLSAgICAgICAgCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDMpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMyksIDEgKiBzaXplb2YoaW50MzJfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lk
dGgzMiksCi0KLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMyksIDEgKiBzaXpl
b2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDIpLAotICAgICAgICBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMikpOwotCi0gICAgaW50MzJfdCB0aGluZ3NbM107Ci0gICAgVG1wIGJhc2Ug
PSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjph
ZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMy
LCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVv
ZihpbnQzMl90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRo
aW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0g
ICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwotICAgIENIRUNLKHRoaW5nc1sxXSA9PSAxKTsKLSAg
ICBDSEVDSyh0aGluZ3NbMl0gPT0gMzYpOwotICAgIENIRUNLKG1lbW9yeVswXSA9PSAyKTsKLSAg
ICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1v
cnlBbGxSZWdzKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9
IHByb2MuY29kZSgpOwotCi0gICAgaW50MzJfdCBtZW1vcnlbMl07Ci0gICAgbWVtb3J5WzBdID0g
MzU7Ci0gICAgbWVtb3J5WzFdID0gMzY7Ci0KLSAgICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0lu
UHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKLSAgICByZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZv
OjpyZWdUMCkpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgbG9h
ZENvbnN0YW50KHJvb3QsIGkgKyAxLCBUbXAocmVnc1tpXSkpOwotICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
Ci0gICAgSW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVs
bHB0ciwKLSAgICAgICAgCi0gICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJ
bmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50MzJfdCkpLAotICAgICAgICBBcmc6OndpZHRoQXJn
KEFyZzo6V2lkdGgzMiksCi0gICAgICAgIAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86
OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQzMl90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BS
SW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGludDMyX3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpLAotCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6
ZW9mKGludDMyX3QpKSwgVG1wKHJlZ3NbMV0pLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMikpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ld
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLQotICAgIFZlY3RvcjxpbnQzMl90PiB0
aGluZ3MocmVncy5zaXplKCksIDY2Nik7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIs
IEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHJvb3QtPmFwcGVuZCgKLSAgICAgICAgICAgIE1vdmUzMiwgbnVsbHB0
ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVv
ZihpbnQzMl90KSkpOwotICAgIH0KLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVu
ZChSZXQzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBD
SEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9
PSAxKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMzYpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQotICAgICAgICBDSEVDSyh0aGluZ3NbaV0gPT0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oaSkpOwotICAgIENIRUNLKG1lbW9yeVswXSA9PSAxKTsKLSAgICBD
SEVDSyhtZW1vcnlbMV0gPT0gMzUpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlB
bGxSZWdzNjQoKQotewotICAgIEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0g
cHJvYy5jb2RlKCk7Ci0KLSAgICBpbnQ2NF90IG1lbW9yeVsyXTsKLSAgICBtZW1vcnlbMF0gPSAz
NTAwMDAwMDAwMDAwMGxsOwotICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7Ci0KLSAg
ICBWZWN0b3I8UmVnPiByZWdzID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKLSAgICBy
ZWdzLnJlbW92ZUZpcnN0KFJlZyhHUFJJbmZvOjpyZWdUMCkpOwotCi0gICAgQmFzaWNCbG9jayog
cm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAw
MDAwMDAwMDAwbGwsIFRtcChyZWdzW2ldKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBJbnN0
JiBzaHVmZmxlID0gcm9vdC0+YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAg
ICAgICAKLSAgICAgICAgVG1wKHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qw
KSwgMCAqIHNpemVvZihpbnQ2NF90KSksCi0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0
aDY0KSwKLSAgICAgICAgCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAw
ICogc2l6ZW9mKGludDY0X3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdU
MCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0K
LSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRf
dCkpLCBUbXAocmVnc1sxXSksCi0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAgICAg
ICAgc2h1ZmZsZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6Ondp
ZHRoQXJnKEFyZzo6V2lkdGg2NCkpOwotCi0gICAgVmVjdG9yPGludDY0X3Q+IHRoaW5ncyhyZWdz
LnNpemUoKSwgNjY2KTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02
NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1Qw
KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcm9vdC0+YXBwZW5kKAotICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3Nb
aV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkp
OwotICAgIH0KLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRt
cChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIHJvb3QtPmFwcGVuZChSZXQzMiwgbnVs
bHB0ciwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0KLSAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAxMDAwMDAwMDAw
MDAwbGwpOwotICAgIENIRUNLKHRoaW5nc1sxXSA9PSAzNjAwMDAwMDAwMDAwMGxsKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgQ0hFQ0so
dGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsKTsK
LSAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMTAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVDSyhtZW1v
cnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Ci19Ci0KLWludDY0X3QgY29tYmluZUhpTG8oaW50
NjRfdCBoaWdoLCBpbnQ2NF90IGxvdykKLXsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGludDY0X3Qg
dmFsdWU7Ci0gICAgICAgIGludDMyX3QgaGFsdmVzWzJdOwotICAgIH0gdTsKLSAgICB1LnZhbHVl
ID0gaGlnaDsKLSAgICB1LmhhbHZlc1swXSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGxvdyk7Ci0g
ICAgcmV0dXJuIHUudmFsdWU7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJl
Z3NNaXhlZFdpZHRoKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29k
ZSA9IHByb2MuY29kZSgpOwotCi0gICAgaW50NjRfdCBtZW1vcnlbMl07Ci0gICAgbWVtb3J5WzBd
ID0gMzUwMDAwMDAwMDAwMDBsbDsKLSAgICBtZW1vcnlbMV0gPSAzNjAwMDAwMDAwMDAwMGxsOwot
Ci0gICAgVmVjdG9yPFJlZz4gcmVncyA9IHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpHUCk7Ci0g
ICAgcmVncy5yZW1vdmVGaXJzdChSZWcoR1BSSW5mbzo6cmVnVDApKTsKLQotICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIGxvYWRDb25zdGFudChyb290LCAoaSArIDEpICog
MTAwMDAwMDAwMDAwMGxsLCBUbXAocmVnc1tpXSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAg
SW5zdCYgc2h1ZmZsZSA9IHJvb3QtPmFwcGVuZCgKLSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwK
LSAgICAgICAgCi0gICAgICAgIFRtcChyZWdzWzBdKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpy
ZWdUMCksIDAgKiBzaXplb2YoaW50NjRfdCkpLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6
V2lkdGgzMiksCi0gICAgICAgIAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1Qw
KSwgMCAqIHNpemVvZihpbnQ2NF90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6
cmVnVDApLCAxICogc2l6ZW9mKGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQp
LAotCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAxICogc2l6ZW9mKGlu
dDY0X3QpKSwgVG1wKHJlZ3NbMV0pLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgc2h1ZmZsZS5hcHBlbmQoCi0gICAgICAgICAgICBUbXAocmVnc1tpIC0gMV0pLCBU
bXAocmVnc1tpXSksCi0gICAgICAgICAgICAoaSAmIDEpID8gQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoMzIpIDogQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYpOwotICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1sw
XSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVncy5zaXplKCk7ICsraSkgewotICAgICAgICByb290LT5hcHBlbmQoCi0gICAgICAgICAgICBN
b3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDAp
LCBpICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgfQotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAg
cm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
KTsKLQotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0gICAgQ0hFQ0so
dGhpbmdzWzBdID09IDEwMDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0sodGhpbmdzWzFdID09IHN0
YXRpY19jYXN0PHVpbnQzMl90PigzNjAwMDAwMDAwMDAwMGxsKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50NjRfdCB2YWx1ZSA9
IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAwMDAwMDAwMGxsOwotICAgICAgICBDSEVD
Syh0aGluZ3NbaV0gPT0gKChpICYgMSkgPyBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpIDog
dmFsdWUpKTsKLSAgICB9Ci0gICAgQ0hFQ0sobWVtb3J5WzBdID09IGNvbWJpbmVIaUxvKDM1MDAw
MDAwMDAwMDAwbGwsIDEwMDAwMDAwMDAwMDBsbCkpOwotICAgIENIRUNLKG1lbW9yeVsxXSA9PSAz
NTAwMDAwMDAwMDAwMGxsKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeSgpCi17
Ci0gICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsK
LQotICAgIGludDMyX3QgbWVtb3J5WzJdOwotICAgIG1lbW9yeVswXSA9IDM1OwotICAgIG1lbW9y
eVsxXSA9IDM2OwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAg
ICBsb2FkQ29uc3RhbnQocm9vdCwgMSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgbG9hZENv
bnN0YW50KHJvb3QsIDIsIFRtcChHUFJJbmZvOjpyZWdUMSkpOwotICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmltbVB0cigmbWVtb3J5KSwgVG1wKEdQUkluZm86OnJlZ1QyKSk7
Ci0gICAgcm9vdC0+YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICAK
LSAgICAgICAgVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotCi0gICAgICAgIFRtcChHUFJJbmZvOjpyZWdUMSksIEFy
Zzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAwICogc2l6ZW9mKGludDMyX3QpKSwKLSAgICAg
ICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpLAotICAgICAgICAKLSAgICAgICAgQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2YoaW50MzJfdCkpLAotICAgICAgICBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQzMl90KSksIEFyZzo6
d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLQotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86
OnJlZ1QyKSwgMSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJbmZvOjpyZWdUMCksCi0gICAg
ICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7Ci0KLSAgICBpbnQzMl90IHRoaW5nc1sy
XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKLSAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwotICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRk
cihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICBy
b290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikp
OwotCi0gICAgbWVtc2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOwotICAgIAotICAgIENI
RUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09
IDM2KTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMSk7Ci0gICAgQ0hFQ0sobWVtb3J5WzBdID09
IDIpOwotICAgIENIRUNLKG1lbW9yeVsxXSA9PSAzNSk7Ci19Ci0KLXZvaWQgdGVzdFNodWZmbGVS
b3RhdGVNZW1vcnk2NCgpCi17Ci0gICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNv
ZGUgPSBwcm9jLmNvZGUoKTsKLQotICAgIGludDY0X3QgbWVtb3J5WzJdOwotICAgIG1lbW9yeVsw
XSA9IDM1MDAwMDAwMDAwMDAwbGw7Ci0gICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsK
LQotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZENvbnN0
YW50KHJvb3QsIDEwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgbG9h
ZENvbnN0YW50KHJvb3QsIDIwMDAwMDAwMDAwMDBsbCwgVG1wKEdQUkluZm86OnJlZ1QxKSk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZtZW1vcnkpLCBUbXAo
R1BSSW5mbzo6cmVnVDIpKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNodWZmbGUsIG51
bGxwdHIsCi0gICAgICAgIAotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDApLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0KLSAgICAgICAgVG1wKEdQ
UkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDAgKiBzaXplb2Yo
aW50NjRfdCkpLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0gICAgICAg
IAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2
NF90KSksCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9m
KGludDY0X3QpKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAotCi0gICAgICAgIEFyZzo6
YWRkcihUbXAoR1BSSW5mbzo6cmVnVDIpLCAxICogc2l6ZW9mKGludDY0X3QpKSwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwKLSAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKLQotICAg
IGludDY0X3QgdGhpbmdzWzJdOwotICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7
Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQ2
NF90KSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVn
VDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90KSkpOwotICAgIHJvb3QtPmFw
cGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpKTsKLQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsK
LSAgICAKLSAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNL
KHRoaW5nc1swXSA9PSAzNjAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0g
MTAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVDSyhtZW1vcnlbMF0gPT0gMjAwMDAwMDAwMDAwMGxs
KTsKLSAgICBDSEVDSyhtZW1vcnlbMV0gPT0gMzUwMDAwMDAwMDAwMDBsbCk7Ci19Ci0KLXZvaWQg
dGVzdFNodWZmbGVSb3RhdGVNZW1vcnlNaXhlZFdpZHRoKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJl
IHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHByb2MuY29kZSgpOwotCi0gICAgaW50NjRfdCBtZW1v
cnlbMl07Ci0gICAgbWVtb3J5WzBdID0gMzUwMDAwMDAwMDAwMDBsbDsKLSAgICBtZW1vcnlbMV0g
PSAzNjAwMDAwMDAwMDAwMGxsOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMTAwMDAwMDAwMDAwMGxsLCBUbXAoR1BSSW5m
bzo6cmVnVDApKTsKLSAgICBsb2FkQ29uc3RhbnQocm9vdCwgMjAwMDAwMDAwMDAwMGxsLCBUbXAo
R1BSSW5mbzo6cmVnVDEpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpp
bW1QdHIoJm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMikpOwotICAgIHJvb3QtPmFwcGVuZCgK
LSAgICAgICAgU2h1ZmZsZSwgbnVsbHB0ciwKLSAgICAgICAgCi0gICAgICAgIFRtcChHUFJJbmZv
OjpyZWdUMCksIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMy
KSwKLQotICAgICAgICBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86
OnJlZ1QyKSwgMCAqIHNpemVvZihpbnQ2NF90KSksCi0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJn
OjpXaWR0aDY0KSwKLSAgICAgICAgCi0gICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVn
VDIpLCAwICogc2l6ZW9mKGludDY0X3QpKSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMiksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MiksCi0KLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMiksIDEgKiBzaXplb2Yo
aW50NjRfdCkpLCBUbXAoR1BSSW5mbzo6cmVnVDApLAotICAgICAgICBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGg2NCkpOwotCi0gICAgaW50NjRfdCB0aGluZ3NbMl07Ci0gICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihi
YXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDY0
X3QpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVtc2V0KHRoaW5ncywg
MCwgc2l6ZW9mKHRoaW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09IDM2MDAwMDAwMDAwMDAwbGwpOwotICAg
IENIRUNLKHRoaW5nc1sxXSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAwMDAwMDAwMDAwMGxs
KSk7Ci0gICAgQ0hFQ0sobWVtb3J5WzBdID09IDIwMDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0so
bWVtb3J5WzFdID09IGNvbWJpbmVIaUxvKDM2MDAwMDAwMDAwMDAwbGwsIDM1MDAwMDAwMDAwMDAw
bGwpKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgpCi17Ci0g
ICAgQjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQot
ICAgIGludDY0X3QgbWVtb3J5WzJdOwotICAgIG1lbW9yeVswXSA9IDM1MDAwMDAwMDAwMDAwbGw7
Ci0gICAgbWVtb3J5WzFdID0gMzYwMDAwMDAwMDAwMDBsbDsKLQotICAgIFZlY3RvcjxSZWc+IHJl
Z3MgPSByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6R1ApOwotICAgIHJlZ3MucmVtb3ZlRmlyc3Qo
UmVnKEdQUkluZm86OnJlZ1QwKSk7Ci0KLSAgICBCYXNpY0Jsb2NrKiByb290ID0gY29kZS5hZGRC
bG9jaygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQot
ICAgICAgICBsb2FkQ29uc3RhbnQocm9vdCwgKGkgKyAxKSAqIDEwMDAwMDAwMDAwMDBsbCwgVG1w
KHJlZ3NbaV0pKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW1QdHIo
Jm1lbW9yeSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIEluc3QmIHNodWZmbGUgPSByb290
LT5hcHBlbmQoCi0gICAgICAgIFNodWZmbGUsIG51bGxwdHIsCi0gICAgICAgIAotICAgICAgICBU
bXAocmVnc1swXSksIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGlu
dDY0X3QpKSwKLSAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAotICAgICAgICAK
LSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDAgKiBzaXplb2YoaW50NjRf
dCkpLAotICAgICAgICBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihp
bnQ2NF90KSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDY0KSwKLQotICAgICAgICBBcmc6OmFk
ZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMSAqIHNpemVvZihpbnQ2NF90KSksIFRtcChyZWdzWzFd
KSwKLSAgICAgICAgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpLAotCi0gICAgICAgIHJlZ3Mu
bGFzdCgpLCByZWdzWzBdLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIHNodWZmbGUu
YXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6
OldpZHRoNjQpKTsKLQotICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2
Nik7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJvb3Qt
PmFwcGVuZCgKLSAgICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjph
ZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKLSAgICB9Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQoUmV0MzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jKSk7Ci0KLSAgICBDSEVDSyh0aGluZ3NbMF0gPT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
cmVncy5zaXplKCkpICogMTAwMDAwMDAwMDAwMGxsKTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0g
MzYwMDAwMDAwMDAwMDBsbCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCi0gICAgICAgIENIRUNLKHRoaW5nc1tpXSA9PSBzdGF0aWNfY2FzdDxpbnQ2NF90
PihpKSAqIDEwMDAwMDAwMDAwMDBsbCk7Ci0gICAgQ0hFQ0sobWVtb3J5WzBdID09IDEwMDAwMDAw
MDAwMDBsbCk7Ci0gICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAwMDAwMDAwMDAwbGwpOwotfQot
Ci12b2lkIHRlc3RTaHVmZmxlUm90YXRlTWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKQotewotICAg
IEIzOjpQcm9jZWR1cmUgcHJvYzsKLSAgICBDb2RlJiBjb2RlID0gcHJvYy5jb2RlKCk7Ci0KLSAg
ICBpbnQ2NF90IG1lbW9yeVsyXTsKLSAgICBtZW1vcnlbMF0gPSAzNTAwMDAwMDAwMDAwMGxsOwot
ICAgIG1lbW9yeVsxXSA9IDM2MDAwMDAwMDAwMDAwbGw7Ci0KLSAgICBWZWN0b3I8UmVnPiByZWdz
ID0gcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OkdQKTsKLSAgICByZWdzLnJlbW92ZUZpcnN0KFJl
ZyhHUFJJbmZvOjpyZWdUMCkpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxv
Y2soKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAg
ICAgICAgbG9hZENvbnN0YW50KHJvb3QsIChpICsgMSkgKiAxMDAwMDAwMDAwMDAwbGwsIFRtcChy
ZWdzW2ldKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tUHRyKCZt
ZW1vcnkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBJbnN0JiBzaHVmZmxlID0gcm9vdC0+
YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAgICAgICAKLSAgICAgICAgVG1w
KHJlZ3NbMF0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgMCAqIHNpemVvZihpbnQ2
NF90KSksCi0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLSAgICAgICAgCi0g
ICAgICAgIEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6cmVnVDApLCAwICogc2l6ZW9mKGludDY0X3Qp
KSwKLSAgICAgICAgQXJnOjphZGRyKFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50
NjRfdCkpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCksCi0KLSAgICAgICAgQXJnOjphZGRy
KFRtcChHUFJJbmZvOjpyZWdUMCksIDEgKiBzaXplb2YoaW50NjRfdCkpLCBUbXAocmVnc1sxXSks
Ci0gICAgICAgIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSwKLQotICAgICAgICByZWdzLmxh
c3QoKSwgcmVnc1swXSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDI7IGkgPCByZWdzLnNpemUoKTsgKytpKQotICAgICAgICBzaHVmZmxlLmFw
cGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDY0KSk7Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgpLCA2NjYp
OwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgewotICAgICAgICByb290LT5h
cHBlbmQoCi0gICAgICAgICAgICBNb3ZlLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6YWRk
cihUbXAoR1BSSW5mbzo6cmVnVDApLCBpICogc2l6ZW9mKGludDY0X3QpKSk7Ci0gICAgfQotICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKSk7Ci0gICAgcm9vdC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLQotICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09IHN0YXRpY19jYXN0PHVpbnQzMl90Pihz
dGF0aWNfY2FzdDxpbnQ2NF90PihyZWdzLnNpemUoKSkgKiAxMDAwMDAwMDAwMDAwbGwpKTsKLSAg
ICBDSEVDSyh0aGluZ3NbMV0gPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDM2MDAwMDAwMDAwMDAw
bGwpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgcmVncy5zaXplKCk7ICsraSkKLSAg
ICAgICAgQ0hFQ0sodGhpbmdzW2ldID09IHN0YXRpY19jYXN0PGludDY0X3Q+KGkpICogMTAwMDAw
MDAwMDAwMGxsKTsKLSAgICBDSEVDSyhtZW1vcnlbMF0gPT0gY29tYmluZUhpTG8oMzUwMDAwMDAw
MDAwMDBsbCwgMTAwMDAwMDAwMDAwMGxsKSk7Ci0gICAgQ0hFQ0sobWVtb3J5WzFdID09IDM1MDAw
MDAwMDAwMDAwbGwpOwotfQotCi12b2lkIHRlc3RTaHVmZmxlU3dhcERvdWJsZSgpCi17Ci0gICAg
QjM6OlByb2NlZHVyZSBwcm9jOwotICAgIENvZGUmIGNvZGUgPSBwcm9jLmNvZGUoKTsKLQotICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBjb2RlLmFkZEJsb2NrKCk7Ci0gICAgbG9hZERvdWJsZUNvbnN0
YW50KHJvb3QsIDEsIFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7
Ci0gICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDIsIFRtcChGUFJJbmZvOjpmcFJlZ1QxKSwg
VG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgbG9hZERvdWJsZUNvbnN0YW50KHJvb3QsIDMsIFRt
cChGUFJJbmZvOjpmcFJlZ1QyKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7Ci0gICAgbG9hZERvdWJs
ZUNvbnN0YW50KHJvb3QsIDQsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgVG1wKEdQUkluZm86OnJl
Z1QwKSk7Ci0gICAgcm9vdC0+YXBwZW5kKAotICAgICAgICBTaHVmZmxlLCBudWxscHRyLAotICAg
ICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjp3
aWR0aEFyZyhBcmc6OldpZHRoNjQpLAotICAgICAgICBUbXAoRlBSSW5mbzo6ZnBSZWdUMyksIFRt
cChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKLQotICAg
IGRvdWJsZSB0aGluZ3NbNF07Ci0gICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsK
LSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUs
IG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXpl
b2YoZG91YmxlKSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAo
RlBSSW5mbzo6ZnBSZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGRvdWJsZSkpKTsK
LSAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVn
VDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihkb3VibGUpKSk7Ci0gICAgcm9vdC0+YXBw
ZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QzKSwgQXJnOjphZGRy
KGJhc2UsIDMgKiBzaXplb2YoZG91YmxlKSkpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgcm9v
dC0+YXBwZW5kKFJldDMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsK
LQotICAgIG1lbXNldCh0aGluZ3MsIDAsIHNpemVvZih0aGluZ3MpKTsKLSAgICAKLSAgICBDSEVD
SyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKLQotICAgIENIRUNLKHRoaW5nc1swXSA9PSAx
KTsKLSAgICBDSEVDSyh0aGluZ3NbMV0gPT0gMik7Ci0gICAgQ0hFQ0sodGhpbmdzWzJdID09IDQp
OwotICAgIENIRUNLKHRoaW5nc1szXSA9PSAzKTsKLX0KLQotdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0
RG91YmxlKCkKLXsKLSAgICBCMzo6UHJvY2VkdXJlIHByb2M7Ci0gICAgQ29kZSYgY29kZSA9IHBy
b2MuY29kZSgpOwotCi0gICAgQmFzaWNCbG9jayogcm9vdCA9IGNvZGUuYWRkQmxvY2soKTsKLSAg
ICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMSwgVG1wKEZQUkluZm86OmZwUmVnVDApLCBUbXAo
R1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgMiwgVG1wKEZQ
UkluZm86OmZwUmVnVDEpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICBsb2FkRG91YmxlQ29u
c3RhbnQocm9vdCwgMywgVG1wKEZQUkluZm86OmZwUmVnVDIpLCBUbXAoR1BSSW5mbzo6cmVnVDAp
KTsKLSAgICBsb2FkRG91YmxlQ29uc3RhbnQocm9vdCwgNCwgVG1wKEZQUkluZm86OmZwUmVnVDMp
LCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICByb290LT5hcHBlbmQoCi0gICAgICAgIFNodWZm
bGUsIG51bGxwdHIsCi0gICAgICAgIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgVG1wKEZQUkluZm86
OmZwUmVnVDMpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGg2NCkpOwotCi0gICAgZG91YmxlIHRo
aW5nc1s0XTsKLSAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKLSAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwg
VG1wKEZQUkluZm86OmZwUmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUp
KSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpm
cFJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoZG91YmxlKSkpOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6
YWRkcihiYXNlLCAyICogc2l6ZW9mKGRvdWJsZSkpKTsKLSAgICByb290LT5hcHBlbmQoTW92ZURv
dWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDMpLCBBcmc6OmFkZHIoYmFzZSwgMyAq
IHNpemVvZihkb3VibGUpKSk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKLSAgICByb290LT5hcHBlbmQo
UmV0MzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotCi0gICAgbWVt
c2V0KHRoaW5ncywgMCwgc2l6ZW9mKHRoaW5ncykpOwotICAgIAotICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOwotCi0gICAgQ0hFQ0sodGhpbmdzWzBdID09IDEpOwotICAgIENI
RUNLKHRoaW5nc1sxXSA9PSAyKTsKLSAgICBDSEVDSyh0aGluZ3NbMl0gPT0gMyk7Ci0gICAgQ0hF
Q0sodGhpbmdzWzNdID09IDMpOwotfQotCi0jZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIHRhc2tzLmFwcGVuZCggICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgWyZdICgpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coI3Rlc3QgIi4uLlxuIik7ICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coI3Rlc3QgIjogT0shXG4iKTsgICBcCi0gICAgICAgICAgICAgICAgfSkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFsc2UpOwotCi12b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCi17Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0g
ICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKLQotICAgIERlcXVlPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKLQotICAgIGF1dG8gc2hvdWxkUnVuID0g
WyZdIChjb25zdCBjaGFyKiB0ZXN0TmFtZSkgLT4gYm9vbCB7Ci0gICAgICAgIHJldHVybiAhZmls
dGVyIHx8ICEhc3RyY2FzZXN0cih0ZXN0TmFtZSwgZmlsdGVyKTsKLSAgICB9OwotCi0gICAgUlVO
KHRlc3RTaW1wbGUoKSk7Ci0gICAgCi0gICAgUlVOKHRlc3RTaHVmZmxlU2ltcGxlU3dhcCgpKTsK
LSAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTaGlmdCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVM
b25nU2hpZnQoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxlTG9uZ1NoaWZ0QmFja3dhcmRzKCkpOwot
ICAgIFJVTih0ZXN0U2h1ZmZsZVNpbXBsZVJvdGF0ZSgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVT
aW1wbGVCcm9hZGNhc3QoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxlQnJvYWRjYXN0QWxsUmVncygp
KTsKLSAgICBSVU4odGVzdFNodWZmbGVUcmVlU2hpZnQoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxl
VHJlZVNoaWZ0QmFja3dhcmQoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxlVHJlZVNoaWZ0T3RoZXJC
YWNrd2FyZCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVNdWx0aXBsZVNoaWZ0cygpKTsKLSAgICBS
VU4odGVzdFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlKCkpOwotICAgIFJVTih0ZXN0U2h1ZmZsZVJv
dGF0ZVdpdGhMb25nRnJpbmdlKCkpOwotICAgIFJVTih0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRl
cygpKTsKLSAgICBSVU4odGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpKTsKLSAgICBSVU4odGVz
dFNodWZmbGVTaGlmdEFsbFJlZ3MoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxlUm90YXRlQWxsUmVn
cygpKTsKLSAgICBSVU4odGVzdFNodWZmbGVTaW1wbGVTd2FwNjQoKSk7Ci0gICAgUlVOKHRlc3RT
aHVmZmxlU2ltcGxlU2hpZnQ2NCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0
aCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVTaGlmdE1peGVkV2lkdGgoKSk7Ci0gICAgUlVOKHRl
c3RTaHVmZmxlU2hpZnRNZW1vcnkoKSk7Ci0gICAgUlVOKHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlM
b25nKCkpOwotICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVncygpKTsKLSAgICBS
VU4odGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpKTsKLSAgICBSVU4odGVzdFNodWZm
bGVTaGlmdE1lbW9yeUFsbFJlZ3NNaXhlZFdpZHRoKCkpOwotICAgIFJVTih0ZXN0U2h1ZmZsZVJv
dGF0ZU1lbW9yeSgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnk2NCgpKTsKLSAg
ICBSVU4odGVzdFNodWZmbGVSb3RhdGVNZW1vcnlNaXhlZFdpZHRoKCkpOwotICAgIFJVTih0ZXN0
U2h1ZmZsZVJvdGF0ZU1lbW9yeUFsbFJlZ3M2NCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVSb3Rh
dGVNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpKTsKLSAgICBSVU4odGVzdFNodWZmbGVTd2FwRG91
YmxlKCkpOwotICAgIFJVTih0ZXN0U2h1ZmZsZVNoaWZ0RG91YmxlKCkpOwotCi0gICAgaWYgKHRh
c2tzLmlzRW1wdHkoKSkKLSAgICAgICAgdXNhZ2UoKTsKLQotICAgIExvY2sgbG9jazsKLQotICAg
IFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwotICAgIGZvciAodW5zaWduZWQgaSA9
IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewotICAg
ICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKLSAgICAgICAg
ICAgICAgICAidGVzdGIzIHRocmVhZCIsCi0gICAgICAgICAgICAgICAgWyZdICgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihsb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFzayA9IHRhc2tzLnRha2VGaXJzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT5ydW4oKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICBmb3IgKFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhy
ZWFkKTsKLSAgICBjcmFzaExvY2subG9jaygpOwotfQotCi19IC8vIGFub255bW9pcyBuYW1lc3Bh
Y2UKLQotI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkKLQotc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNo
YXIqKQotewotICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOwotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGNvbnN0IGNoYXIqIGZpbHRlciA9IG51bGxwdHI7Ci0gICAgc3dpdGNoIChhcmdj
KSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZp
bHRlciA9IGFyZ3ZbMV07Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHVz
YWdlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBydW4oZmlsdGVyKTsKLSAg
ICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggZjU5NTk5
MTQ3YzQwY2YzOGVlOWU5NmQyMjQ3ODQ0NzYwODhkZjRhYy4uMjZmOGE3NjU4NDY5YjkxNTIwOWJk
N2JiNWViOTQwZWIyNWUxOWEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAg
LTc3NzUsNjUgKzc3NzUsNiBAQCB2b2lkIHRlc3RDYWxsU2ltcGxlKGludCBhLCBpbnQgYikKICAg
ICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSArIGIpOwogfQogCi12
b2lkIHRlc3RDYWxsUmFyZShpbnQgYSwgaW50IGIpCi17Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0g
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBj
b21tb24gPSBwcm9jLmFkZEJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogcmFyZSA9IHByb2MuYWRk
QmxvY2soKTsKLQotICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAotICAgICAgICBw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLAotICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCi0gICAgICAg
IEZyZXF1ZW50ZWRCbG9jayhyYXJlLCBGcmVxdWVuY3lDbGFzczo6UmFyZSksCi0gICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayhjb21tb24pKTsKLQotICAgIGNvbW1vbi0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCi0gICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbW1vbi0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKLSAgICAKLSAgICByYXJlLT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAg
ICAgICAgcmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAotICAgICAgICAgICAgcHJvYywgSW50
MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uKSksCi0g
ICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCi0gICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikp
KTsKLQotICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0cnVlLCBhLCBiKSA9PSBh
ICsgYik7Ci19Ci0KLXZvaWQgdGVzdENhbGxSYXJlTGl2ZShpbnQgYSwgaW50IGIsIGludCBjKQot
ewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7Ci0gICAgQmFzaWNCbG9jayogY29tbW9uID0gcHJvYy5hZGRCbG9jaygpOwotICAgIEJh
c2ljQmxvY2sqIHJhcmUgPSBwcm9jLmFkZEJsb2NrKCk7Ci0KLSAgICByb290LT5hcHBlbmROZXc8
Q29udHJvbFZhbHVlPigKLSAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKLSAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApLAotICAgICAgICBGcmVxdWVudGVkQmxvY2socmFyZSwgRnJlcXVlbmN5
Q2xhc3M6OlJhcmUpLAotICAgICAgICBGcmVxdWVudGVkQmxvY2soY29tbW9uKSk7Ci0KLSAgICBj
b21tb24tPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBjb21tb24tPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7Ci0gICAgCi0gICAgcmFyZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCi0gICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCi0g
ICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAotICAgICAgICAgICAgcmFyZS0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAotICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwK
LSAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rpb24pKSwKLSAgICAgICAgICAg
ICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSksCi0gICAgICAgICAgICAgICAgcmFyZS0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSwK
LSAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAotICAgICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKSkpKTsK
LQotICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB0cnVlLCBhLCBiLCBjKSA9PSBh
ICsgYiArIGMpOwotfQotCiB2b2lkIHRlc3RDYWxsU2ltcGxlUHVyZShpbnQgYSwgaW50IGIpCiB7
CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMDEyOCw4ICsxMDA2OSw2IEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEludDMyVG9Eb3VibGVQYXJ0aWFsUmVnaXN0
ZXJXaXRob3V0U3RhbGwoKSk7CiAKICAgICBSVU4odGVzdENhbGxTaW1wbGUoMSwgMikpOwotICAg
IFJVTih0ZXN0Q2FsbFJhcmUoMSwgMikpOwotICAgIFJVTih0ZXN0Q2FsbFJhcmVMaXZlKDEsIDIs
IDMpKTsKICAgICBSVU4odGVzdENhbGxTaW1wbGVQdXJlKDEsIDIpKTsKICAgICBSVU4odGVzdENh
bGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAppbmRleCAzYzAwOGZkYmJiNTBjNTZhOTc4
Y2E2ZTBkNzQzODgyYmZkMjUzY2I5Li4zN2NhZTVjMTdhZDljNzFkMDE4ZDQxYmI2ZTlhNjZjOTE3
Nzk2NmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcApAQCAtMzU0MCw3ICszNTQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCiAgICAgICAgICAg
ICAgICAgICAgIHByZXZMZW5ndGgsIG1fb3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRl
cmZseV92ZWN0b3JMZW5ndGgpKSwKLSAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1
bnN1cmUoZmFzdFBhdGgpKTsKKyAgICAgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3Vh
bGx5KGZhc3RQYXRoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNsb3dQYXRoKTsKICAgICAgICAgICAg
IG1fb3V0LnN0b3JlKApAQCAtODIyNSw3ICs4MjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBob2xlQ2FzZSA9CiAgICAgICAgICAgICAgICAgICAgIEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgaG9sZSBjYXNlIikpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goaXNPdXRPZkJvdW5kcywgcmFyZWx5KG91
dE9mQm91bmRzQ2FzZSksIHVzdWFsbHkoaG9sZUNhc2UpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goaXNPdXRPZkJvdW5kcywgdW5zdXJlKG91dE9mQm91bmRzQ2FzZSksIHVuc3VyZSho
b2xlQ2FzZSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHNDYXNlLCBob2xl
Q2FzZSk7CiAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAKaW5kZXggNTllMWY0NGMxN2U5ODgzYmVjYzFjMDFiOTVjMmZmMmI3NDk1M2Zi
ZS4uOTMyN2Y4NjM5ZjRhZWUxMWM1MWIwZmFiMWI4NmU3YjA2MTY0MWYzYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIFJlZlB0cjxP
U1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9TUkV4aXQoCiB7CiAgICAgUmVm
UHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9CiAgICAgICAgIHByZXBhcmVPU1JFeGl0SGFuZGxl
KHN0YXRlLCBleGl0S2luZCwgbm9kZU9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9u
SGFuZGxlcik7Ci0gICAgaGFuZGxlLT5lbWl0RXhpdFRodW5rKHN0YXRlLCBqaXQpOworICAgIGhh
bmRsZS0+ZW1pdEV4aXRUaHVuayhqaXQpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKQEAgLTg0
LDggKzg0LDggQEAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOjplbWl0
T1NSRXhpdExhdGVyKAogICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPQogICAgICAg
ICBwcmVwYXJlT1NSRXhpdEhhbmRsZShzdGF0ZSwgZXhpdEtpbmQsIG5vZGVPcmlnaW4sIHBhcmFt
cywgb2Zmc2V0LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgK
LSAgICAgICAgW2hhbmRsZSwgJnN0YXRlXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAgICAg
ICAgIGhhbmRsZS0+ZW1pdEV4aXRUaHVuayhzdGF0ZSwgaml0KTsKKyAgICAgICAgW2hhbmRsZV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBoYW5kbGUtPmVtaXRFeGl0VGh1bmso
aml0KTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCmluZGV4IGM4OTU3MjU5MzkyY2M1
MWRkZWFmMzcwZDJlODZjMDc0ODBjZTNmZDAuLjRkNjU0YTVlODc5YjMxYmNiZTc4NzdkYzVkYzBm
YzllYmJlZmNhZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdEhhbmRsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
SGFuZGxlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSwzMCArMjksMjQgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VT
RVNfQjMKIAogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKLSNpbmNsdWRlICJGVExTdGF0ZS5oIgog
I2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRl
ICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAotdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRlJiBzdGF0ZSwgQ0Nh
bGxIZWxwZXJzJiBqaXQpCit2b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoQ0NhbGxI
ZWxwZXJzJiBqaXQpCiB7Ci0gICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9
IHN0YXRlLmdyYXBoLmNvbXBpbGF0aW9uKCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBteUxh
YmVsID0gaml0LmxhYmVsKCk7Ci0gICAgbGFiZWwgPSBteUxhYmVsOworICAgIGxhYmVsID0gaml0
LmxhYmVsKCk7CiAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdp
c3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5kZXgpKTsKICAgICBDQ2FsbEhlbHBl
cnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgUmVmUHRy
PE9TUkV4aXRIYW5kbGU+IHNlbGYgPSB0aGlzOwogICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAg
ICAgW3NlbGYsIGp1bXAsIG15TGFiZWwsIGNvbXBpbGF0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICBbc2VsZiwganVtcF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgIHNlbGYtPmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVt
cChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoanVtcCkpOwogCiAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoCiAgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsCiAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgICAgICAgICBpZiAoY29tcGlsYXRpb24p
Ci0gICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG15TGFiZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkgfSk7CiAgICAgICAgIH0p
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRI
YW5kbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5oCmlu
ZGV4IDBmNjZiYjczM2JhNzRkODQyMmNhMTMwOWRiYTczYTkxYzliMjkzZTMuLjI3MjVmYTQ1MGM2
YzA4MzlkMzViYWUzYzU2ZmQwNTgxNjJmZTkwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5oCkBAIC0zNSw3ICszNSw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotY2xhc3MgU3RhdGU7CiBzdHJ1Y3QgT1NSRXhpdDsKIAog
Ly8gVGhpcyBpcyBhbiBvYmplY3QgdGhhdCBzdG9yZXMgc29tZSBpbnRlcmVzdGluZyBkYXRhIGFi
b3V0IGFuIE9TUiBleGl0LiBJdCdzIGV4cGVjdGVkIHRoYXQgeW91IHdpbGwKQEAgLTU2LDcgKzU1
LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
T1NSRXhpdEhhbmRsZT4gewogICAgIENDYWxsSGVscGVyczo6TGFiZWwgbGFiZWw7CiAKICAgICAv
LyBUaGlzIGVtaXRzIHRoZSBleGl0IHRodW5rIGFuZCBwb3B1bGF0ZXMgJ2xhYmVsJy4KLSAgICB2
b2lkIGVtaXRFeGl0VGh1bmsoU3RhdGUmLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGVtaXRF
eGl0VGh1bmsoQ0NhbGxIZWxwZXJzJik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>