<?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>143969</bug_id>
          
          <creation_ts>2015-04-20 15:37:05 -0700</creation_ts>
          <short_desc>Web Inspector: Unify PrettyPrinting Tool and UserInterface resources</short_desc>
          <delta_ts>2015-04-20 21:36:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>tobi+webkit</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1086926</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-20 15:37:05 -0700</bug_when>
    <thetext>* SUMMARY
Unify PrettyPrinting and UserInterface resources.

Step 1, update them so they are equivalent.
Step 2, remove the script and just have the PrettyPrinting Tool use UserInterface resources.

These fixes are the &quot;misc&quot; changes from Bug 141692 by Tobias Reiss.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086927</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-20 15:37:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/20624619&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086928</commentid>
    <comment_count>2</comment_count>
      <attachid>251194</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-20 15:38:52 -0700</bug_when>
    <thetext>Created attachment 251194
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086938</commentid>
    <comment_count>3</comment_count>
      <attachid>251194</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-20 16:08:40 -0700</bug_when>
    <thetext>Comment on attachment 251194
[PATCH] Proposed Fix

Never mind this, I&apos;m just going to do everything all at once, since it is rather easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086939</commentid>
    <comment_count>4</comment_count>
      <attachid>251198</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-20 16:14:20 -0700</bug_when>
    <thetext>Created attachment 251198
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086941</commentid>
    <comment_count>5</comment_count>
      <attachid>251200</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-20 16:16:34 -0700</bug_when>
    <thetext>Created attachment 251200
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086984</commentid>
    <comment_count>6</comment_count>
      <attachid>251200</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-04-20 20:46:55 -0700</bug_when>
    <thetext>Comment on attachment 251200
[PATCH] Proposed Fix

Good call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086991</commentid>
    <comment_count>7</comment_count>
      <attachid>251200</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-20 21:36:52 -0700</bug_when>
    <thetext>Comment on attachment 251200
[PATCH] Proposed Fix

Clearing flags on attachment: 251200

Committed r183043: &lt;http://trac.webkit.org/changeset/183043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086992</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-20 21:36:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251194</attachid>
            <date>2015-04-20 15:38:52 -0700</date>
            <delta_ts>2015-04-20 16:14:20 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>simplify.patch</filename>
            <type>text/plain</type>
            <size>6857</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGIxMGI1YTYuLjM1OGEwZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxIEBACiAyMDE1LTA0LTIwICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
UHJldHR5UHJpbnRpbmcgVG9vbCBhbmQgVXNlckludGVyZmFjZSByZXNvdXJjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzk2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5
IFRvYmlhcyBSZWlzcy4KKworICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJy
b3JGb3JtYXR0ZXJzLmpzOgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJy
b3IuanM6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CisgICAgICAgIEZp
eCBzdHlsZSBpc3N1ZXMgYW5kIHVwZGF0ZSB0aGUgUHJldHR5UHJpbnRpbmcgdG9vbCB3aXRoIHRo
ZQorICAgICAgICBuZXdlciBVc2VySW50ZXJmYWNlIHJlc291cmNlcy4KKworMjAxNS0wNC0yMCAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEltcHJvdmUgU3VwcG9ydCBmb3IgV2Vha1NldCBpbiBDb25zb2xlCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM5NTEKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JG
b3JtYXR0ZXJzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5n
L0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCmluZGV4IDcxNDM5Y2QuLjRmNWNmYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9y
Rm9ybWF0dGVycy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJp
bnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKQEAgLTIxMSw3ICsyMTEsNyBAQCBDb2RlTWly
cm9yLmV4dGVuZE1vZGUoImphdmFzY3JpcHQiLCB7CiAgICAgICAgIGlmICghaXNDb21tZW50ICYm
IHN0YXRlLmxleGljYWwucHJldiAmJiBzdGF0ZS5sZXhpY2FsLnByZXYudHlwZSA9PT0gImZvcm0i
ICYmICFzdGF0ZS5sZXhpY2FsLnByZXYuX2pzUHJldHR5UHJpbnRNYXJrZXIgJiYgKGxhc3RDb250
ZW50ID09PSAiKSIgfHwgbGFzdENvbnRlbnQgPT09ICJlbHNlIiB8fCBsYXN0Q29udGVudCA9PT0g
ImRvIikgJiYgKHN0YXRlLmxleGljYWwudHlwZSAhPT0gIikiKSkgewogICAgICAgICAgICAgaWYg
KGNvbnRlbnQgPT09ICJ7IikgewogICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHN0YXRlIGF0
IHRoZSBvcGVuaW5nIGJyYWNlIHNvIHdlIGNhbiByZXR1cm4gdG8gaXQgd2hlbiB3ZSBzZWUgIn0i
LgotICAgICAgICAgICAgICAgIHZhciBzYXZlZFN0YXRlID0ge2luZGVudENvdW50OnN0YXRlLl9q
c1ByZXR0eVByaW50LmluZGVudENvdW50LCBvcGVuQnJhY2VUcmFja2luZ0NvdW50OnN0YXRlLl9q
c1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnR9OworICAgICAgICAgICAgICAgIHZh
ciBzYXZlZFN0YXRlID0ge2luZGVudENvdW50OiBzdGF0ZS5fanNQcmV0dHlQcmludC5pbmRlbnRD
b3VudCwgb3BlbkJyYWNlVHJhY2tpbmdDb3VudDogc3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJy
YWNlVHJhY2tpbmdDb3VudH07CiAgICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQu
b3BlbkJyYWNlU3RhcnRNYXJrZXJzLnB1c2goc2F2ZWRTdGF0ZSk7CiAgICAgICAgICAgICAgICAg
c3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNlVHJhY2tpbmdDb3VudCA9IDE7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0YXRlLmxleGljYWwudHlwZSAhPT0gIn0iKSB7CkBAIC0zMzMsNyAr
MzMzLDcgQEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJjc3MiLCB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gInBy
b3AiKSAvLyAtd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLi4uKXRyYW5zbGF0ZSguLi4pOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUu
c3RhdGUgPT09ICJtZWRpYSIgfHwgc3RhdGUuc3RhdGUgPT09ICJtZWRpYV9wYXJlbnMiKSAvLyBT
cGFjZSBpbiAibm90KGZvbylhbmQiIGJ1dCBub3QgYXQgdGhlIGVuZCBvZiAibm90KG5vdChmb28p
KSIgCisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IHN0YXRl
LnN0YXRlID09PSAibWVkaWFfcGFyZW5zIikgLy8gU3BhY2UgaW4gIm5vdChmb28pYW5kIiBidXQg
bm90IGF0IHRoZSBlbmQgb2YgIm5vdChub3QoZm9vKSkiCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY29sb3I6IHJnYigu
Li4pOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rv
b2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qcwppbmRleCAxMDRjY2Q3Li44NjEyZWQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Y29kZW1pcnJvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJp
bnRpbmcvY29kZW1pcnJvci5qcwpAQCAtMzUyNiw2ICszNTI2LDggQEAKICAgLy8gSWYgYW4gZWRp
dG9yIHNpdHMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5CiAg
IC8vIHNjcm9sbGVkIG91dCBvZiB2aWV3LCB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgY3Vyc29yIGlz
IHZpc2libGUuCiAgIGZ1bmN0aW9uIG1heWJlU2Nyb2xsV2luZG93KGNtLCBjb29yZHMpIHsKKyAg
ICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sICJzY3JvbGxDdXJzb3JJbnRvVmlldyIpKSByZXR1cm47
CisKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRpc3BsYXkuc2l6ZXIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCksIGRvU2Nyb2xsID0gbnVsbDsKICAgICBpZiAoY29vcmRzLnRv
cCArIGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7CiAgICAgZWxzZSBpZiAoY29vcmRzLmJv
dHRvbSArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwpAQCAtNjk1Niw2ICs2OTU4
LDggQEAKICAgLy8gcmVnaXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9y
IGZvciB0aGUgZXZlbnQgbmFtZSwKICAgLy8gYW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZl
bnQgaW4gdGhhdCBoYW5kbGVyLgogICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3Zl
cnJpZGUpIHsKKyAgICBpZiAodHlwZW9mIGUgPT0gInN0cmluZyIpCisgICAgICBlID0ge3R5cGU6
IGUsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0g
dHJ1ZTsgfX07CiAgICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTsKICAg
ICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZTsKICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5n
L2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jc3Mu
anMKaW5kZXggMWZkNDZkZi4uYWFmZGRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY3NzLmpzCkBAIC00OTEsNyArNDkxLDcgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICAgICJuYXZham93aGl0ZSIsICJuYXZ5IiwgIm9sZGxhY2UiLCAib2xpdmUiLCAib2xpdmVkcmFi
IiwgIm9yYW5nZSIsICJvcmFuZ2VyZWQiLAogICAgICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIs
ICJwYWxlZ3JlZW4iLCAicGFsZXR1cnF1b2lzZSIsICJwYWxldmlvbGV0cmVkIiwKICAgICAicGFw
YXlhd2hpcCIsICJwZWFjaHB1ZmYiLCAicGVydSIsICJwaW5rIiwgInBsdW0iLCAicG93ZGVyYmx1
ZSIsCi0gICAgInB1cnBsZSIsICJyZWQiLCAicm9zeWJyb3duIiwgInJveWFsYmx1ZSIsICJzYWRk
bGVicm93biIsICJzYWxtb24iLAorICAgICJwdXJwbGUiLCAicmViZWNjYXB1cnBsZSIsICJyZWQi
LCAicm9zeWJyb3duIiwgInJveWFsYmx1ZSIsICJzYWRkbGVicm93biIsICJzYWxtb24iLAogICAg
ICJzYW5keWJyb3duIiwgInNlYWdyZWVuIiwgInNlYXNoZWxsIiwgInNpZW5uYSIsICJzaWx2ZXIi
LCAic2t5Ymx1ZSIsCiAgICAgInNsYXRlYmx1ZSIsICJzbGF0ZWdyYXkiLCAic25vdyIsICJzcHJp
bmdncmVlbiIsICJzdGVlbGJsdWUiLCAidGFuIiwKICAgICAidGVhbCIsICJ0aGlzdGxlIiwgInRv
bWF0byIsICJ0dXJxdW9pc2UiLCAidmlvbGV0IiwgIndoZWF0IiwgIndoaXRlIiwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JG
b3JtYXR0ZXJzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q29kZU1pcnJvckZvcm1hdHRlcnMuanMKaW5kZXggNzE0MzljZC4uNGY1Y2ZiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZv
cm1hdHRlcnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKQEAgLTIxMSw3ICsyMTEsNyBAQCBDb2RlTWlycm9y
LmV4dGVuZE1vZGUoImphdmFzY3JpcHQiLCB7CiAgICAgICAgIGlmICghaXNDb21tZW50ICYmIHN0
YXRlLmxleGljYWwucHJldiAmJiBzdGF0ZS5sZXhpY2FsLnByZXYudHlwZSA9PT0gImZvcm0iICYm
ICFzdGF0ZS5sZXhpY2FsLnByZXYuX2pzUHJldHR5UHJpbnRNYXJrZXIgJiYgKGxhc3RDb250ZW50
ID09PSAiKSIgfHwgbGFzdENvbnRlbnQgPT09ICJlbHNlIiB8fCBsYXN0Q29udGVudCA9PT0gImRv
IikgJiYgKHN0YXRlLmxleGljYWwudHlwZSAhPT0gIikiKSkgewogICAgICAgICAgICAgaWYgKGNv
bnRlbnQgPT09ICJ7IikgewogICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHN0YXRlIGF0IHRo
ZSBvcGVuaW5nIGJyYWNlIHNvIHdlIGNhbiByZXR1cm4gdG8gaXQgd2hlbiB3ZSBzZWUgIn0iLgot
ICAgICAgICAgICAgICAgIHZhciBzYXZlZFN0YXRlID0ge2luZGVudENvdW50OnN0YXRlLl9qc1By
ZXR0eVByaW50LmluZGVudENvdW50LCBvcGVuQnJhY2VUcmFja2luZ0NvdW50OnN0YXRlLl9qc1By
ZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnR9OworICAgICAgICAgICAgICAgIHZhciBz
YXZlZFN0YXRlID0ge2luZGVudENvdW50OiBzdGF0ZS5fanNQcmV0dHlQcmludC5pbmRlbnRDb3Vu
dCwgb3BlbkJyYWNlVHJhY2tpbmdDb3VudDogc3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNl
VHJhY2tpbmdDb3VudH07CiAgICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQub3Bl
bkJyYWNlU3RhcnRNYXJrZXJzLnB1c2goc2F2ZWRTdGF0ZSk7CiAgICAgICAgICAgICAgICAgc3Rh
dGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNlVHJhY2tpbmdDb3VudCA9IDE7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0YXRlLmxleGljYWwudHlwZSAhPT0gIn0iKSB7CkBAIC0zMzMsNyArMzMz
LDcgQEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJjc3MiLCB7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gInByb3Ai
KSAvLyAtd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLi4uKXRyYW5zbGF0ZSguLi4pOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3Rh
dGUgPT09ICJtZWRpYSIgfHwgc3RhdGUuc3RhdGUgPT09ICJtZWRpYV9wYXJlbnMiKSAvLyBTcGFj
ZSBpbiAibm90KGZvbylhbmQiIGJ1dCBub3QgYXQgdGhlIGVuZCBvZiAibm90KG5vdChmb28pKSIg
CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IHN0YXRlLnN0
YXRlID09PSAibWVkaWFfcGFyZW5zIikgLy8gU3BhY2UgaW4gIm5vdChmb28pYW5kIiBidXQgbm90
IGF0IHRoZSBlbmQgb2YgIm5vdChub3QoZm9vKSkiCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY29sb3I6IHJnYiguLi4p
OwogICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251198</attachid>
            <date>2015-04-20 16:14:20 -0700</date>
            <delta_ts>2015-04-20 16:16:34 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>cleanuptools.patch</filename>
            <type>text/plain</type>
            <size>400848</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDRlNjE2NDEuLjRlNWUyNmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE1LTA0LTIwICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
UHJldHR5UHJpbnRpbmcgVG9vbCBhbmQgVXNlckludGVyZmFjZSByZXNvdXJjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzk2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgdGhlIFByZXR0eVBy
aW50aW5nIHRvb2wganVzdCB1c2UgdGhlIENvZGVNaXJyb3IgYW5kIFdlYkluc3BlY3RvcgorICAg
ICAgICByZXNvdXJjZXMgZnJvbSB0aGUgcmVsYXRpdmUgVXNlckludGVyZmFjZSBkaXJlY3Rvcnku
IFRoaXMgYXZvaWRzCisgICAgICAgIGhhdmluZyBkdXBsaWNhdGUgcmVzb3VyY2VzIGluIHRoZSB0
cmVlIHdoaWNoIG9mZmVyZWQgZmV3IGFkdmFudGFnZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3Vw
ZGF0ZS1wcmV0dHktcHJpbnRlci5yYjogUmVtb3ZlZC4KKyAgICAgICAgKiBUb29scy9QcmV0dHlQ
cmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQ
cmludGluZy9Gb3JtYXR0ZXIuanM6IFJlbW92ZWQuCisgICAgICAgICogVG9vbHMvUHJldHR5UHJp
bnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanM6IFJlbW92ZWQuCisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3M6IFJlbW92ZWQuCisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBUb29s
cy9QcmV0dHlQcmludGluZy9jc3MuanM6IFJlbW92ZWQuCisgICAgICAgICogVG9vbHMvUHJldHR5
UHJpbnRpbmcvaW5kZXguaHRtbDoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9qYXZh
c2NyaXB0LmpzOiBSZW1vdmVkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db2Rl
TWlycm9yRm9ybWF0dGVycy5qczoKKyAgICAgICAgRml4IHN0eWxlIGlzc3Vlcy4KKworMjAxNS0w
NC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEltcHJvdmUgU3VwcG9ydCBmb3IgV2Vha1NldCBpbiBDb25zb2xlCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM5NTEKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmlu
dGVyLnJiIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLXByZXR0eS1wcmlu
dGVyLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmYjc2MjQxLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1wcmV0dHktcHJpbnRlci5y
YgorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMhL3Vzci9iaW4vcnVieQotCi1yZXF1
aXJlICdmaWxldXRpbHMnCi0KLWRlZiB1c2FnZQotICBwdXRzICJ1c2FnZTogI3tGaWxlLmJhc2Vu
YW1lICQwfSA8ZGVzdGluYXRpb24tdG8tdXBkYXRlPiIKLSAgcHV0cwotICBwdXRzICI8ZGVzdGlu
YXRpb24tdG8tdXBkYXRlPiB2YWx1ZXM6IgotICBwdXRzCi0gIHB1dHMgIiAgVG9vbHMgICAgICAg
ICAtIENvcHkgdGhlIFVzZXJJbnRlcmZhY2UgZmlsZXMgdG8gdGhlIFRvb2xzIGRpcmVjdG9yeSIK
LSAgcHV0cyAiICBVc2VySW50ZXJmYWNlIC0gQ29weSB0aGUgVG9vbHMgZmlsZXMgdG8gdGhlIFVz
ZXJJbnRlcmZhY2UgZGlyZWN0b3J5IgotICBleGl0IDEKLWVuZAotCi1pZiBBUkdWLnNpemUgIT0g
MQotICB1c2FnZQotZW5kCi0KLWRlc3RpbmF0aW9uID0gQVJHVlswXQotaWYgZGVzdGluYXRpb24g
IT0gIlRvb2xzIiAmJiBkZXN0aW5hdGlvbiAhPSAiVXNlckludGVyZmFjZSIKLSAgdXNhZ2UKLWVu
ZAotCi0jIENvcHkgdGhlIGZvcm1hdHRlciBhbmQgQ29kZU1pcnJvciBmaWxlcyBmcm9tIFVzZXJJ
bnRlcmZhY2UgdG8gVG9vbHMuCi1VU0VSX0lOVEVSRkFDRV9UT19UT09MU19NQVAgPSB7Ci0gICJV
c2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiAgICAgICAgICA9PiAi
VG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMiLAotICAiVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMiICAgICAgICAgICAgICAgPT4gIlRvb2xz
L1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcyIsCi0gICJVc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcv
Rm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMiLAotCi0gICJVc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MiICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcv
Y29kZW1pcnJvci5jc3MiLAotICAiVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nv
ZGVtaXJyb3IuanMiICAgICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuanMi
LAotICAiVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMiICAg
ICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMiLAotICAiVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyIgICAgICAgICAgICAgPT4gIlRvb2xzL1By
ZXR0eVByaW50aW5nL2Nzcy5qcyIsCi19Ci0KLSMgQ29weSBvbmx5IHRoZSBmb3JtYXR0ZXIgZmls
ZXMgZnJvbSBUb29scyB0byBVc2VySW50ZXJmYWNlLgotVE9PTFNfVE9fVVNFUl9JTlRFUkZBQ0Vf
TUFQID0gewotICAiVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMi
ICAgICAgICAgPT4gIlVzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMi
LAotICAiVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzIiAgICAgICAgICAgICAgICAg
ICAgPT4gIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzIiwKLSAgIlRvb2xz
L1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiAgICAgID0+ICJVc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIgotfQotCi13
ZWJfaW5zcGVjdG9yX3BhdGggPSBGaWxlLmV4cGFuZF9wYXRoIEZpbGUuam9pbihGaWxlLmRpcm5h
bWUoX19GSUxFX18pLCAiLi4iKQotbWFwID0gZGVzdGluYXRpb24gPT0gIlRvb2xzIiA/IFVTRVJf
SU5URVJGQUNFX1RPX1RPT0xTX01BUCA6IFRPT0xTX1RPX1VTRVJfSU5URVJGQUNFX01BUAotCi1h
bGxfc3VjY2VzcyA9IHRydWUKLQotbWFwLmVhY2ggZG8gfGZyb20sIHRvfAotICBmcm9tX3BhdGgg
PSBGaWxlLmpvaW4gd2ViX2luc3BlY3Rvcl9wYXRoLCBmcm9tCi0gIHRvX3BhdGggPSBGaWxlLmpv
aW4gd2ViX2luc3BlY3Rvcl9wYXRoLCB0bwotICBiZWdpbgotICAgIHB1dHMgIkNvcHlpbmcgI3tm
cm9tfSB0byAje3RvfS4uLiIKLSAgICBGaWxlVXRpbHMuY3AgZnJvbV9wYXRoLCB0b19wYXRoCi0g
IHJlc2N1ZSBFeGNlcHRpb24gPT4gZQotICAgIHB1dHMgIldBUk5JTkc6ICN7ZX0iCi0gICAgYWxs
X3N1Y2Nlc3MgPSBmYWxzZQotICBlbmQKLWVuZAotCi1leGl0IGFsbF9zdWNjZXNzID8gMCA6IDEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9D
b2RlTWlycm9yRm9ybWF0dGVycy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0
dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcwppbmRleCA3MTQzOWNkLi40ZjVjZmIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Q29kZU1pcnJvckZvcm1hdHRlcnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xz
L1ByZXR0eVByaW50aW5nL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCkBAIC0yMTEsNyArMjExLDcg
QEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJqYXZhc2NyaXB0IiwgewogICAgICAgICBpZiAoIWlz
Q29tbWVudCAmJiBzdGF0ZS5sZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2LnR5cGUg
PT09ICJmb3JtIiAmJiAhc3RhdGUubGV4aWNhbC5wcmV2Ll9qc1ByZXR0eVByaW50TWFya2VyICYm
IChsYXN0Q29udGVudCA9PT0gIikiIHx8IGxhc3RDb250ZW50ID09PSAiZWxzZSIgfHwgbGFzdENv
bnRlbnQgPT09ICJkbyIpICYmIChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICIpIikpIHsKICAgICAg
ICAgICAgIGlmIChjb250ZW50ID09PSAieyIpIHsKICAgICAgICAgICAgICAgICAvLyBTYXZlIHRo
ZSBzdGF0ZSBhdCB0aGUgb3BlbmluZyBicmFjZSBzbyB3ZSBjYW4gcmV0dXJuIHRvIGl0IHdoZW4g
d2Ugc2VlICJ9Ii4KLSAgICAgICAgICAgICAgICB2YXIgc2F2ZWRTdGF0ZSA9IHtpbmRlbnRDb3Vu
dDpzdGF0ZS5fanNQcmV0dHlQcmludC5pbmRlbnRDb3VudCwgb3BlbkJyYWNlVHJhY2tpbmdDb3Vu
dDpzdGF0ZS5fanNQcmV0dHlQcmludC5vcGVuQnJhY2VUcmFja2luZ0NvdW50fTsKKyAgICAgICAg
ICAgICAgICB2YXIgc2F2ZWRTdGF0ZSA9IHtpbmRlbnRDb3VudDogc3RhdGUuX2pzUHJldHR5UHJp
bnQuaW5kZW50Q291bnQsIG9wZW5CcmFjZVRyYWNraW5nQ291bnQ6IHN0YXRlLl9qc1ByZXR0eVBy
aW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnR9OwogICAgICAgICAgICAgICAgIHN0YXRlLl9qc1By
ZXR0eVByaW50Lm9wZW5CcmFjZVN0YXJ0TWFya2Vycy5wdXNoKHNhdmVkU3RhdGUpOwogICAgICAg
ICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnQgPSAx
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICJ9IikgewpA
QCAtMzMzLDcgKzMzMyw3IEBAIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSgiY3NzIiwgewogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3Rh
dGUgPT09ICJwcm9wIikgLy8gLXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC4uLil0cmFuc2xhdGUo
Li4uKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IHN0YXRlLnN0YXRlID09PSAibWVkaWFfcGFy
ZW5zIikgLy8gU3BhY2UgaW4gIm5vdChmb28pYW5kIiBidXQgbm90IGF0IHRoZSBlbmQgb2YgIm5v
dChub3QoZm9vKSkiIAorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlh
IiB8fCBzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhX3BhcmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9v
KWFuZCIgYnV0IG5vdCBhdCB0aGUgZW5kIG9mICJub3Qobm90KGZvbykpIgogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNv
bG9yOiByZ2IoLi4uKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiZmE5OThlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWNsYXNzIEZvcm1hdHRlcgotewotICAgIGNvbnN0
cnVjdG9yKGNvZGVNaXJyb3IsIGJ1aWxkZXIpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2Vy
dChjb2RlTWlycm9yKTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoYnVpbGRlcik7Ci0KLSAgICAg
ICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIg
PSBidWlsZGVyOwotCi0gICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IG51bGw7Ci0gICAgICAgIHRo
aXMuX2xhc3RDb250ZW50ID0gIiI7Ci0gICAgfQotCi0gICAgLy8gUHVibGljCi0KLSAgICBmb3Jt
YXQoZnJvbSwgdG8pCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9idWlsZGVy
Lm9yaWdpbmFsQ29udGVudCA9PT0gbnVsbCk7Ci0gICAgICAgIGlmICh0aGlzLl9idWlsZGVyLm9y
aWdpbmFsQ29udGVudCAhPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgb3V0ZXJNb2RlID0gdGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCk7Ci0gICAgICAgIHZhciBj
b250ZW50ID0gdGhpcy5fY29kZU1pcnJvci5nZXRSYW5nZShmcm9tLCB0byk7Ci0gICAgICAgIHZh
ciBzdGF0ZSA9IENvZGVNaXJyb3IuY29weVN0YXRlKG91dGVyTW9kZSwgdGhpcy5fY29kZU1pcnJv
ci5nZXRUb2tlbkF0KGZyb20pLnN0YXRlKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5zZXRPcmln
aW5hbENvbnRlbnQoY29udGVudCk7Ci0KLSAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSAwOwotICAg
ICAgICB2YXIgbGluZXMgPSBjb250ZW50LnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IGxp
bmVzW2ldOwotICAgICAgICAgICAgdmFyIHN0YXJ0T2ZOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHZhciBmaXJzdFRva2VuT25MaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBzdHJlYW0g
PSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGluZSk7Ci0gICAgICAgICAgICB3aGlsZSAo
IXN0cmVhbS5lb2woKSkgewotICAgICAgICAgICAgICAgIHZhciBpbm5lck1vZGUgPSBDb2RlTWly
cm9yLmlubmVyTW9kZShvdXRlck1vZGUsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICB2YXIgdG9r
ZW4gPSBvdXRlck1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFy
IGlzV2hpdGVTcGFjZSA9IHRva2VuID09PSBudWxsICYmIC9eXHMqJC8udGVzdChzdHJlYW0uY3Vy
cmVudCgpKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbihpbm5lck1vZGUubW9k
ZSwgdG9rZW4sIHN0YXRlLCBzdHJlYW0sIGxpbmVPZmZzZXQgKyBzdHJlYW0uc3RhcnQsIGlzV2hp
dGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0VG9rZW5PbkxpbmUpOwotICAgICAgICAgICAg
ICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7Ci0gICAgICAgICAgICAgICAgc3RhcnRPZk5l
d0xpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RUb2tlbk9uTGluZSAmJiAh
aXNXaGl0ZVNwYWNlKQotICAgICAgICAgICAgICAgICAgICBmaXJzdFRva2VuT25MaW5lID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdFRva2VuT25MaW5lKQot
ICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUVtcHR5TGluZSgpOwotCi0gICAgICAgICAgICBs
aW5lT2Zmc2V0ICs9IGxpbmUubGVuZ3RoICsgMTsgLy8gKzEgZm9yIHRoZSAiXG4iIHJlbW92ZWQg
aW4gc3BsaXQuCi0gICAgICAgICAgICB0aGlzLl9oYW5kbGVMaW5lRW5kaW5nKGxpbmVPZmZzZXQg
LSAxKTsgLy8gLTEgZm9yIHRoZSBpbmRleCBvZiB0aGUgIlxuIi4KLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMuX2J1aWxkZXIuZmluaXNoKCk7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0g
ICAgX2hhbmRsZVRva2VuKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBvcmlnaW5hbFBvc2l0
aW9uLCBpc1doaXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2VuT25MaW5lKQotICAg
IHsKLSAgICAgICAgLy8gU3RyaW5nIGNvbnRlbnQgb2YgdGhlIHRva2VuLgotICAgICAgICB2YXIg
Y29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7Ci0KLSAgICAgICAgLy8gU3RhcnQgb2YgYSBuZXcg
bGluZS4gSW5zZXJ0IGEgbmV3bGluZSB0byBiZSBzYWZlIGlmIGNvZGUgd2FzIG5vdC1BU0kgc2Fm
ZS4gVGhlc2UgYXJlIGNvbGxhcHNlZC4KLSAgICAgICAgaWYgKHN0YXJ0T2ZOZXdMaW5lKQotICAg
ICAgICAgICAgdGhpcy5fYnVpbGRlci5hcHBlbmROZXdsaW5lKCk7Ci0KLSAgICAgICAgLy8gV2hp
dGVzcGFjZS4gQ29sbGFwc2UgdG8gYSBzaW5nbGUgc3BhY2UuCi0gICAgICAgIGlmIChpc1doaXRl
U3BhY2UpIHsKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5kU3BhY2UoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF2b2lkIHNvbWUgaG9va3Mg
Zm9yIGNvbnRlbnQgaW4gY29tbWVudHMuCi0gICAgICAgIHZhciBpc0NvbW1lbnQgPSB0b2tlbiAm
JiAvXGJjb21tZW50XGIvLnRlc3QodG9rZW4pOwotCi0gICAgICAgIGlmIChtb2RlLm1vZGlmeVN0
YXRlRm9yVG9rZW5QcmUpCi0gICAgICAgICAgICBtb2RlLm1vZGlmeVN0YXRlRm9yVG9rZW5QcmUo
dGhpcy5fbGFzdFRva2VuLCB0aGlzLl9sYXN0Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50
LCBpc0NvbW1lbnQpOwotCi0gICAgICAgIC8vIFNob3VsZCB3ZSByZW1vdmUgdGhlIGxhc3QgbmV3
bGluZT8KLSAgICAgICAgaWYgKHRoaXMuX2J1aWxkZXIubGFzdFRva2VuV2FzTmV3bGluZSAmJiBt
b2RlLnJlbW92ZUxhc3ROZXdsaW5lKHRoaXMuX2xhc3RUb2tlbiwgdGhpcy5fbGFzdENvbnRlbnQs
IHRva2VuLCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50LCBmaXJzdFRva2VuT25MaW5lKSkKLSAg
ICAgICAgICAgIHRoaXMuX2J1aWxkZXIucmVtb3ZlTGFzdE5ld2xpbmUoKTsKLQotICAgICAgICAv
LyBBZGQgd2hpdGVzcGFjZSBhZnRlciB0aGUgbGFzdCB0b2tlbj8KLSAgICAgICAgaWYgKCF0aGlz
Ll9idWlsZGVyLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgJiYgbW9kZS5zaG91bGRIYXZlU3BhY2VB
ZnRlckxhc3RUb2tlbih0aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwg
c3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkpCi0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFw
cGVuZFNwYWNlKCk7Ci0KLSAgICAgICAgLy8gQWRkIHdoaXRlc3BhY2UgYmVmb3JlIHRoaXMgdG9r
ZW4/Ci0gICAgICAgIGlmICghdGhpcy5fYnVpbGRlci5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlICYm
IG1vZGUuc2hvdWxkSGF2ZVNwYWNlQmVmb3JlVG9rZW4odGhpcy5fbGFzdFRva2VuLCB0aGlzLl9s
YXN0Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpKQotICAgICAgICAg
ICAgdGhpcy5fYnVpbGRlci5hcHBlbmRTcGFjZSgpOwotCi0gICAgICAgIC8vIFNob3VsZCB3ZSBk
ZWRlbnQgYmVmb3JlIHRoaXMgdG9rZW4/Ci0gICAgICAgIHZhciBkZWRlbnRzID0gbW9kZS5kZWRl
bnRzQmVmb3JlVG9rZW4odGhpcy5fbGFzdFRva2VuLCB0aGlzLl9sYXN0Q29udGVudCwgdG9rZW4s
IHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpOwotICAgICAgICB3aGlsZSAoZGVkZW50cy0tID4g
MCkKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuZGVkZW50KCk7Ci0KLSAgICAgICAgLy8gU2hv
dWxkIHdlIGFkZCBhIG5ld2xpbmUgYmVmb3JlIHRoaXMgdG9rZW4/Ci0gICAgICAgIGlmIChtb2Rl
Lm5ld2xpbmVCZWZvcmVUb2tlbih0aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0
b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkpCi0gICAgICAgICAgICB0aGlzLl9idWls
ZGVyLmFwcGVuZE5ld2xpbmUoKTsKLQotICAgICAgICAvLyBTaG91bGQgd2UgaW5kZW50IGJlZm9y
ZSB0aGlzIHRva2VuPwotICAgICAgICBpZiAobW9kZS5pbmRlbnRCZWZvcmVUb2tlbih0aGlzLl9s
YXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29t
bWVudCkpCi0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmluZGVudCgpOwotCi0gICAgICAgIC8v
IEFwcGVuZCB0b2tlbi4KLSAgICAgICAgdGhpcy5fYnVpbGRlci5hcHBlbmRUb2tlbihjb250ZW50
LCBvcmlnaW5hbFBvc2l0aW9uKTsKLQotICAgICAgICAvLyBMZXQgdGhlIHByZXR0eSBwcmludGVy
IHVwZGF0ZSBhbnkgc3RhdGUgaXQga2VlcHMgdHJhY2sgb2YuCi0gICAgICAgIGlmIChtb2RlLm1v
ZGlmeVN0YXRlRm9yVG9rZW5Qb3N0KQotICAgICAgICAgICAgbW9kZS5tb2RpZnlTdGF0ZUZvclRv
a2VuUG9zdCh0aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUs
IGNvbnRlbnQsIGlzQ29tbWVudCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHdlIGluZGVudCBvciBk
ZWRlbnQgYWZ0ZXIgdGhpcyB0b2tlbj8KLSAgICAgICAgaWYgKCFpc0NvbW1lbnQgJiYgbW9kZS5p
bmRlbnRBZnRlclRva2VuKHRoaXMuX2xhc3RUb2tlbiwgdGhpcy5fbGFzdENvbnRlbnQsIHRva2Vu
LCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50KSkKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIu
aW5kZW50KCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHdlIGFkZCBuZXdsaW5lcyBhZnRlciB0aGlz
IHRva2VuPwotICAgICAgICB2YXIgbmV3bGluZXMgPSBtb2RlLm5ld2xpbmVzQWZ0ZXJUb2tlbih0
aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQs
IGlzQ29tbWVudCk7Ci0gICAgICAgIGlmIChuZXdsaW5lcykKLSAgICAgICAgICAgIHRoaXMuX2J1
aWxkZXIuYXBwZW5kTXVsdGlwbGVOZXdsaW5lcyhuZXdsaW5lcyk7Ci0KLSAgICAgICAgLy8gUmVj
b3JkIHRoaXMgdG9rZW4gYXMgdGhlIGxhc3QgdG9rZW4uCi0gICAgICAgIHRoaXMuX2xhc3RUb2tl
biA9IHRva2VuOwotICAgICAgICB0aGlzLl9sYXN0Q29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQot
Ci0gICAgX2hhbmRsZUVtcHR5TGluZSgpCi0gICAgewotICAgICAgICAvLyBQcmVzZXJ2ZSBvcmln
aW5hbCB3aGl0ZXNwYWNlIG9ubHkgbGluZXMgYnkgYWRkaW5nIGEgbmV3bGluZS4KLSAgICAgICAg
Ly8gSG93ZXZlciwgZG9uJ3QgZG8gdGhpcyBpZiB0aGUgYnVpbGRlciBqdXN0IGFkZGVkIG11bHRp
cGxlIG5ld2xpbmVzLgotICAgICAgICBpZiAoISh0aGlzLl9idWlsZGVyLmxhc3RUb2tlbldhc05l
d2xpbmUgJiYgdGhpcy5fYnVpbGRlci5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlKSkKLSAg
ICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5kTmV3bGluZSh0cnVlKTsKLSAgICB9Ci0KLSAg
ICBfaGFuZGxlTGluZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKLSAgICB7Ci0gICAg
ICAgIC8vIFJlY29yZCB0aGUgb3JpZ2luYWwgbGluZSBlbmRpbmcuCi0gICAgICAgIHRoaXMuX2J1
aWxkZXIuYWRkT3JpZ2luYWxMaW5lRW5kaW5nKG9yaWdpbmFsTmV3TGluZVBvc2l0aW9uKTsKLSAg
ICB9Ci19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVBy
aW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkxYzM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5q
cworKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotY2xhc3MgRm9y
bWF0dGVyQ29udGVudEJ1aWxkZXIKLXsKLSAgICBjb25zdHJ1Y3RvcihtYXBwaW5nLCBvcmlnaW5h
bExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1h
dHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQotICAgIHsKLSAgICAgICAgdGhpcy5fb3JpZ2luYWxD
b250ZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IFtdOwotICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKLQotICAgICAgICB0aGlzLl9z
dGFydE9mTGluZSA9IHRydWU7Ci0gICAgICAgIHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZh
bHNlOwotICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAg
ICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7Ci0KLSAgICAgICAg
dGhpcy5faW5kZW50ID0gMDsKLSAgICAgICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3Ry
aW5nOwotICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5n
XTsKLQotICAgICAgICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsKLSAgICAgICAgdGhpcy5fb3Jp
Z2luYWxMaW5lRW5kaW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107Ci0gICAgICAgIHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3MgfHwgW107Ci0g
ICAgICAgIHRoaXMuX29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxPZmZzZXQgfHwgMDsKLSAgICAg
ICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zmc2V0IHx8IDA7Ci0KLSAgICAg
ICAgdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPSAwOwotICAgICAgICB0aGlzLl9sYXN0Rm9y
bWF0dGVkUG9zaXRpb24gPSAwOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0gICAgZ2V0IG9y
aWdpbmFsQ29udGVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDb250
ZW50OwotICAgIH0KLQotICAgIGdldCBmb3JtYXR0ZWRDb250ZW50KCkKLSAgICB7Ci0gICAgICAg
IHZhciBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LmpvaW4oIiIpOwotICAgICAg
ICBjb25zb2xlLmFzc2VydChmb3JtYXR0ZWQubGVuZ3RoID09PSB0aGlzLl9mb3JtYXR0ZWRDb250
ZW50TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDsKLSAgICB9Ci0KLSAgICBnZXQg
bWFwcGluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZzsKLSAgICB9Ci0K
LSAgICBnZXQgb3JpZ2luYWxMaW5lRW5kaW5ncygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAgICB9Ci0KLSAgICBnZXQgZm9ybWF0dGVkTGluZUVu
ZGluZ3MoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdz
OwotICAgIH0KLQotICAgIHNldE9yaWdpbmFsQ29udGVudChvcmlnaW5hbENvbnRlbnQpCi0gICAg
ewotICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fb3JpZ2luYWxDb250ZW50KTsKLSAgICAg
ICAgdGhpcy5fb3JpZ2luYWxDb250ZW50ID0gb3JpZ2luYWxDb250ZW50OwotICAgIH0KLQotICAg
IGFwcGVuZFRva2VuKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9zdGFydE9mTGluZSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZEluZGVudCgpOwot
Ci0gICAgICAgIHRoaXMuX2FkZE1hcHBpbmdJZk5lZWRlZChvcmlnaW5hbFBvc2l0aW9uKTsKLQot
ICAgICAgICB0aGlzLl9hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgdGhpcy5fc3RhcnRPZkxpbmUg
PSBmYWxzZTsKLSAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7Ci0gICAg
ICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGFw
cGVuZFNwYWNlKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc3RhcnRPZkxpbmUpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2FwcGVuZCgiICIpOwotICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5X
YXNOZXdsaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3Bh
Y2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXBwZW5kTmV3bGluZShmb3JjZSkK
LSAgICB7Ci0gICAgICAgIGlmICgoIXRoaXMubGFzdFRva2VuV2FzTmV3bGluZSAmJiAhdGhpcy5f
c3RhcnRPZkxpbmUpIHx8IGZvcmNlKSB7Ci0gICAgICAgICAgICB0aGlzLl9hcHBlbmQoIlxuIik7
Ci0gICAgICAgICAgICB0aGlzLl9hZGRGb3JtYXR0ZWRMaW5lRW5kaW5nKCk7Ci0gICAgICAgICAg
ICB0aGlzLl9zdGFydE9mTGluZSA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldh
c05ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNl
ID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlwbGUg
PSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXMo
bmV3bGluZXMpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChuZXdsaW5lcyA+IDApOwot
Ci0gICAgICAgIHZhciB3YXNNdWx0aXBsZSA9IG5ld2xpbmVzID4gMTsKLQotICAgICAgICB3aGls
ZSAobmV3bGluZXMtLSA+IDApCi0gICAgICAgICAgICB0aGlzLmFwcGVuZE5ld2xpbmUodHJ1ZSk7
Ci0KLSAgICAgICAgaWYgKHdhc011bHRpcGxlKQotICAgICAgICAgICAgdGhpcy5sYXN0TmV3bGlu
ZUFwcGVuZFdhc011bHRpcGxlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZW1vdmVMYXN0TmV3bGlu
ZSgpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmxhc3RUb2tlbldhc05ld2xp
bmUpOwotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mb3JtYXR0ZWRDb250ZW50Lmxhc3RW
YWx1ZSA9PT0gIlxuIik7Ci0gICAgICAgIGlmICh0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUpIHsK
LSAgICAgICAgICAgIHRoaXMuX3BvcE5ld0xpbmUoKTsKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0
T2ZMaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSBm
YWxzZTsKLSAgICAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5kZW50KCkKLSAgICB7Ci0gICAgICAgICsrdGhpcy5f
aW5kZW50OwotICAgIH0KLQotICAgIGRlZGVudCgpCi0gICAgewotICAgICAgICAtLXRoaXMuX2lu
ZGVudDsKLQotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pbmRlbnQgPj0gMCk7Ci0gICAg
ICAgIGlmICh0aGlzLl9pbmRlbnQgPCAwKQotICAgICAgICAgICAgdGhpcy5faW5kZW50ID0gMDsK
LSAgICB9Ci0KLSAgICBhZGRPcmlnaW5hbExpbmVFbmRpbmcob3JpZ2luYWxQb3NpdGlvbikKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MucHVzaChvcmlnaW5hbFBvc2l0
aW9uKTsKLSAgICB9Ci0KLSAgICBmaW5pc2goKQotICAgIHsKLSAgICAgICAgdGhpcy5hcHBlbmRO
ZXdsaW5lKCk7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0gICAgX3BvcE5ld0xpbmUoKQot
ICAgIHsKLSAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnBvcCgp
OwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC09IHJlbW92ZWQubGVuZ3Ro
OwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wb3AoKTsKLSAgICB9Ci0KLSAg
ICBfYXBwZW5kKHN0cikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucHVz
aChzdHIpOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoICs9IHN0ci5sZW5n
dGg7Ci0gICAgfQotCi0gICAgX2FwcGVuZEluZGVudCgpCi0gICAgewotICAgICAgICAvLyBJbmRl
bnQgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUuCi0gICAgICAgIGlmICh0aGlzLl9pbmRlbnQgPCB0
aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZCh0aGlz
Ll9pbmRlbnRDYWNoZVt0aGlzLl9pbmRlbnRdKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEluZGVudCB3YXMgbm90IGluIHRoZSBjYWNoZSwgZmlsbCB1cCB0
aGUgY2FjaGUgdXAgd2l0aCB3aGF0IHdhcyBuZWVkZWQuCi0gICAgICAgIHZhciBtYXhDYWNoZUlu
ZGVudCA9IDIwOwotICAgICAgICB2YXIgbWF4ID0gTWF0aC5taW4odGhpcy5faW5kZW50LCBtYXhD
YWNoZUluZGVudCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9pbmRlbnRDYWNoZS5sZW5n
dGg7IGkgPD0gbWF4OyArK2kpCi0gICAgICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZVtpXSA9IHRo
aXMuX2luZGVudENhY2hlW2kgLSAxXSArIHRoaXMuX2luZGVudFN0cmluZzsKLQotICAgICAgICAv
LyBBcHBlbmQgaW5kZW50cyBhcyBuZWVkZWQuCi0gICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLl9p
bmRlbnQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChpbmRlbnQgPj0gbWF4Q2FjaGVJ
bmRlbnQpCi0gICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kKHRoaXMuX2luZGVudENhY2hlW21h
eENhY2hlSW5kZW50XSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5f
YXBwZW5kKHRoaXMuX2luZGVudENhY2hlW2luZGVudF0pOwotICAgICAgICAgICAgaW5kZW50IC09
IG1heENhY2hlSW5kZW50OwotICAgICAgICB9IHdoaWxlIChpbmRlbnQgPiAwKTsKLSAgICB9Ci0K
LSAgICBfYWRkTWFwcGluZ0lmTmVlZGVkKG9yaWdpbmFsUG9zaXRpb24pCi0gICAgewotICAgICAg
ICBpZiAob3JpZ2luYWxQb3NpdGlvbiAtIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID09PSB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC0gdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9u
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX21hcHBpbmcub3JpZ2luYWwu
cHVzaCh0aGlzLl9vcmlnaW5hbE9mZnNldCArIG9yaWdpbmFsUG9zaXRpb24pOwotICAgICAgICB0
aGlzLl9tYXBwaW5nLmZvcm1hdHRlZC5wdXNoKHRoaXMuX2Zvcm1hdHRlZE9mZnNldCArIHRoaXMu
X2Zvcm1hdHRlZENvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBv
c2l0aW9uID0gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBv
c2l0aW9uID0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aDsKLSAgICB9Ci0KLSAgICBfYWRk
Rm9ybWF0dGVkTGluZUVuZGluZygpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlz
Ll9mb3JtYXR0ZWRDb250ZW50Lmxhc3RWYWx1ZSA9PT0gIlxuIik7Ci0gICAgICAgIHRoaXMuX2Zv
cm1hdHRlZExpbmVFbmRpbmdzLnB1c2godGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCAtIDEp
OwotICAgIH0KLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJl
dHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMv
UHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDA5OGEzMTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1By
ZXR0eVByaW50aW5nL2NvZGVtaXJyb3IuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAg
QEAKLS8qIEJBU0lDUyAqLwotCi0uQ29kZU1pcnJvciB7Ci0gIC8qIFNldCBoZWlnaHQsIHdpZHRo
LCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCi0gIGZvbnQtZmFt
aWx5OiBtb25vc3BhY2U7Ci0gIGhlaWdodDogMzAwcHg7Ci19Ci0uQ29kZU1pcnJvci1zY3JvbGwg
ewotICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCi0gIG92ZXJmbG93OiBhdXRv
OwotfQotCi0vKiBQQURESU5HICovCi0KLS5Db2RlTWlycm9yLWxpbmVzIHsKLSAgcGFkZGluZzog
NHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KLX0KLS5Db2RlTWly
cm9yIHByZSB7Ci0gIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29u
dGVudCAqLwotfQotCi0uQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1n
dXR0ZXItZmlsbGVyIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IC8qIFRoZSBsaXR0bGUg
c3F1YXJlIGJldHdlZW4gSCBhbmQgViBzY3JvbGxiYXJzICovCi19Ci0KLS8qIEdVVFRFUiAqLwot
Ci0uQ29kZU1pcnJvci1ndXR0ZXJzIHsKLSAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsK
LSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKLSAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0K
LS5Db2RlTWlycm9yLWxpbmVudW1iZXJzIHt9Ci0uQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKLSAg
cGFkZGluZzogMCAzcHggMCA1cHg7Ci0gIG1pbi13aWR0aDogMjBweDsKLSAgdGV4dC1hbGlnbjog
cmlnaHQ7Ci0gIGNvbG9yOiAjOTk5OwotICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94Owot
ICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKLX0KLQotLyogQ1VSU09SICovCi0KLS5Db2RlTWly
cm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7Ci0gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxh
Y2s7Ci19Ci0vKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi0u
Q29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewotICBib3JkZXItbGVm
dDogMXB4IHNvbGlkIHNpbHZlcjsKLX0KLS5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29y
IGRpdi5Db2RlTWlycm9yLWN1cnNvciB7Ci0gIHdpZHRoOiBhdXRvOwotICBib3JkZXI6IDA7Ci0g
IGJhY2tncm91bmQ6ICM3ZTc7Ci19Ci0vKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBv
dmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLWRpdi5Db2RlTWlycm9yLW92ZXJ3cml0ZSBk
aXYuQ29kZU1pcnJvci1jdXJzb3Ige30KLQotLmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9j
azsgfQotCi0uQ29kZU1pcnJvci1ydWxlciB7Ci0gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Nj
YzsKLSAgcG9zaXRpb246IGFic29sdXRlOwotfQotCi0vKiBERUZBVUxUIFRIRU1FICovCi0KLS5j
bS1zLWRlZmF1bHQgLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLS5jbS1zLWRlZmF1bHQgLmNt
LWF0b20ge2NvbG9yOiAjMjE5O30KLS5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7Y29sb3I6ICMx
NjQ7fQotLmNtLXMtZGVmYXVsdCAuY20tZGVmIHtjb2xvcjogIzAwZjt9Ci0uY20tcy1kZWZhdWx0
IC5jbS12YXJpYWJsZSwKLS5jbS1zLWRlZmF1bHQgLmNtLXB1bmN0dWF0aW9uLAotLmNtLXMtZGVm
YXVsdCAuY20tcHJvcGVydHksCi0uY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7fQotLmNtLXMt
ZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7Y29sb3I6ICMwNWE7fQotLmNtLXMtZGVmYXVsdCAuY20t
dmFyaWFibGUtMyB7Y29sb3I6ICMwODU7fQotLmNtLXMtZGVmYXVsdCAuY20tY29tbWVudCB7Y29s
b3I6ICNhNTA7fQotLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nIHtjb2xvcjogI2ExMTt9Ci0uY20t
cy1kZWZhdWx0IC5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQotLmNtLXMtZGVmYXVsdCAuY20t
bWV0YSB7Y29sb3I6ICM1NTU7fQotLmNtLXMtZGVmYXVsdCAuY20tcXVhbGlmaWVyIHtjb2xvcjog
IzU1NTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci0uY20tcy1k
ZWZhdWx0IC5jbS1icmFja2V0IHtjb2xvcjogIzk5Nzt9Ci0uY20tcy1kZWZhdWx0IC5jbS10YWcg
e2NvbG9yOiAjMTcwO30KLS5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7
fQotLmNtLXMtZGVmYXVsdCAuY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9Ci0uY20tcy1kZWZhdWx0
IC5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQotLmNtLXMtZGVmYXVsdCAuY20taHIge2NvbG9yOiAj
OTk5O30KLS5jbS1zLWRlZmF1bHQgLmNtLWxpbmsge2NvbG9yOiAjMDBjO30KLQotLmNtLW5lZ2F0
aXZlIHtjb2xvcjogI2Q0NDt9Ci0uY20tcG9zaXRpdmUge2NvbG9yOiAjMjkyO30KLS5jbS1oZWFk
ZXIsIC5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30KLS5jbS1lbSB7Zm9udC1zdHlsZTog
aXRhbGljO30KLS5jbS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci0KLS5jbS1z
LWRlZmF1bHQgLmNtLWVycm9yIHtjb2xvcjogI2YwMDt9Ci0uY20taW52YWxpZGNoYXIge2NvbG9y
OiAjZjAwO30KLQotZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tl
dCB7Y29sb3I6ICMwZjA7fQotZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNo
aW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQotLkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3Jv
dW5kIHtiYWNrZ3JvdW5kOiAjZThmMmZmO30KLQotLyogU1RPUCAqLwotCi0vKiBUaGUgcmVzdCBv
ZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgot
ICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwotCi0u
Q29kZU1pcnJvciB7Ci0gIGxpbmUtaGVpZ2h0OiAxOwotICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
IG92ZXJmbG93OiBoaWRkZW47Ci0gIGJhY2tncm91bmQ6IHdoaXRlOwotICBjb2xvcjogYmxhY2s7
Ci19Ci0KLS5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdp
biB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KLSAgLyogU2Vl
IG92ZXJmbG93OiBoaWRkZW4gaW4gLkNvZGVNaXJyb3IgKi8KLSAgbWFyZ2luLWJvdHRvbTogLTMw
cHg7IG1hcmdpbi1yaWdodDogLTMwcHg7Ci0gIHBhZGRpbmctYm90dG9tOiAzMHB4OwotICBoZWln
aHQ6IDEwMCU7Ci0gIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdo
bGlnaHRpbmcgdGhlIGVsZW1lbnQgKi8KLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICAtbW96LWJv
eC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKLX0KLS5D
b2RlTWlycm9yLXNpemVyIHsKLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICBib3JkZXItcmlnaHQ6
IDMwcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7
Ci0gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotfQotCi0vKiBUaGUgZmFrZSwgdmlzaWJsZSBz
Y3JvbGxiYXJzLiBVc2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5nCi0gICBiZWZv
cmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5k
Ci0gICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLS5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5D
b2RlTWlycm9yLWhzY3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsIC5Db2Rl
TWlycm9yLWd1dHRlci1maWxsZXIgewotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIHotaW5kZXg6
IDY7Ci0gIGRpc3BsYXk6IG5vbmU7Ci19Ci0uQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKLSAgcmln
aHQ6IDA7IHRvcDogMDsKLSAgb3ZlcmZsb3cteDogaGlkZGVuOwotICBvdmVyZmxvdy15OiBzY3Jv
bGw7Ci19Ci0uQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKLSAgYm90dG9tOiAwOyBsZWZ0OiAwOwot
ICBvdmVyZmxvdy15OiBoaWRkZW47Ci0gIG92ZXJmbG93LXg6IHNjcm9sbDsKLX0KLS5Db2RlTWly
cm9yLXNjcm9sbGJhci1maWxsZXIgewotICByaWdodDogMDsgYm90dG9tOiAwOwotfQotLkNvZGVN
aXJyb3ItZ3V0dGVyLWZpbGxlciB7Ci0gIGxlZnQ6IDA7IGJvdHRvbTogMDsKLX0KLQotLkNvZGVN
aXJyb3ItZ3V0dGVycyB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOwot
ICBwYWRkaW5nLWJvdHRvbTogMzBweDsKLSAgei1pbmRleDogMzsKLX0KLS5Db2RlTWlycm9yLWd1
dHRlciB7Ci0gIHdoaXRlLXNwYWNlOiBub3JtYWw7Ci0gIGhlaWdodDogMTAwJTsKLSAgLW1vei1i
b3gtc2l6aW5nOiBjb250ZW50LWJveDsKLSAgYm94LXNpemluZzogY29udGVudC1ib3g7Ci0gIHBh
ZGRpbmctYm90dG9tOiAzMHB4OwotICBtYXJnaW4tYm90dG9tOiAtMzJweDsKLSAgZGlzcGxheTog
aW5saW5lLWJsb2NrOwotICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwotICAqem9vbTox
OwotICAqZGlzcGxheTppbmxpbmU7Ci19Ci0uQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKLSAgcG9z
aXRpb246IGFic29sdXRlOwotICBjdXJzb3I6IGRlZmF1bHQ7Ci0gIHotaW5kZXg6IDQ7Ci19Ci0K
LS5Db2RlTWlycm9yLWxpbmVzIHsKLSAgY3Vyc29yOiB0ZXh0OwotfQotLkNvZGVNaXJyb3IgcHJl
IHsKLSAgLyogUmVzZXQgc29tZSBzdHlsZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBtaWdo
dCBoYXZlIHNldCAqLwotICAtbW96LWJvcmRlci1yYWRpdXM6IDA7IC13ZWJraXQtYm9yZGVyLXJh
ZGl1czogMDsgYm9yZGVyLXJhZGl1czogMDsKLSAgYm9yZGVyLXdpZHRoOiAwOwotICBiYWNrZ3Jv
dW5kOiB0cmFuc3BhcmVudDsKLSAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Ci0gIGZvbnQtc2l6ZTog
aW5oZXJpdDsKLSAgbWFyZ2luOiAwOwotICB3aGl0ZS1zcGFjZTogcHJlOwotICB3b3JkLXdyYXA6
IG5vcm1hbDsKLSAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Ci0gIGNvbG9yOiBpbmhlcml0OwotICB6
LWluZGV4OiAyOwotICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIG92ZXJmbG93OiB2aXNpYmxlOwot
fQotLkNvZGVNaXJyb3Itd3JhcCBwcmUgewotICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci0gIHdo
aXRlLXNwYWNlOiBwcmUtd3JhcDsKLSAgd29yZC1icmVhazogbm9ybWFsOwotfQotCi0uQ29kZU1p
cnJvci1saW5lYmFja2dyb3VuZCB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgbGVmdDogMDsg
cmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwOwotICB6LWluZGV4OiAwOwotfQotCi0uQ29kZU1p
cnJvci1saW5ld2lkZ2V0IHsKLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICB6LWluZGV4OiAyOwot
ICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLkNvZGVNaXJyb3Itd2lkZ2V0IHt9Ci0KLS5Db2RlTWly
cm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKLSAgb3ZlcmZsb3cteDogaGlkZGVuOwotfQot
Ci0uQ29kZU1pcnJvci1tZWFzdXJlIHsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICB3aWR0aDog
MTAwJTsKLSAgaGVpZ2h0OiAwOwotICBvdmVyZmxvdzogaGlkZGVuOwotICB2aXNpYmlsaXR5OiBo
aWRkZW47Ci19Ci0uQ29kZU1pcnJvci1tZWFzdXJlIHByZSB7IHBvc2l0aW9uOiBzdGF0aWM7IH0K
LQotLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKLSAgcG9zaXRpb246IGFic29s
dXRlOwotICBib3JkZXItcmlnaHQ6IG5vbmU7Ci0gIHdpZHRoOiAwOwotfQotCi1kaXYuQ29kZU1p
cnJvci1jdXJzb3JzIHsKLSAgdmlzaWJpbGl0eTogaGlkZGVuOwotICBwb3NpdGlvbjogcmVsYXRp
dmU7Ci0gIHotaW5kZXg6IDE7Ci19Ci0uQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9y
LWN1cnNvcnMgewotICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotfQotCi0uQ29kZU1pcnJvci1zZWxl
Y3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVN
aXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9Ci0uQ29kZU1pcnJvci1jcm9z
c2hhaXIgeyBjdXJzb3I6IGNyb3NzaGFpcjsgfQotCi0uY20tc2VhcmNoaW5nIHsKLSAgYmFja2dy
b3VuZDogI2ZmYTsKLSAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMCwgLjQpOwotfQotCi0v
KiBJRTcgaGFjayB0byBwcmV2ZW50IGl0IGZyb20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMg
b24gdGhlIHNwYW5zICovCi0uQ29kZU1pcnJvciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0
LWJvdHRvbTsgfQotCi0vKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUg
Ki8KLS5jbS1mb3JjZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9Ci0KLUBtZWRpYSBw
cmludCB7Ci0gIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCi0gIC5Db2RlTWly
cm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLSAg
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJp
bnRpbmcvY29kZW1pcnJvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0Y2Nk
Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvY29kZW1pcnJvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDc2MDEgKzAsMCBAQAotLy8gQ29k
ZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwOi8vY29kZW1pcnJvci5uZXQv
TElDRU5TRQotCi0vLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHA6Ly9jb2RlbWlycm9yLm5ldCks
IGEgY29kZSBlZGl0b3IKLS8vIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgb24gdG9wIG9mIHRo
ZSBicm93c2VyJ3MgRE9NLgotLy8KLS8vIFlvdSBjYW4gZmluZCBzb21lIHRlY2huaWNhbCBiYWNr
Z3JvdW5kIGZvciBzb21lIG9mIHRoZSBjb2RlIGJlbG93Ci0vLyBhdCBodHRwOi8vbWFyaWpuaGF2
ZXJiZWtlLm5sL2Jsb2cvI2NtLWludGVybmFscyAuCi0KLShmdW5jdGlvbihtb2QpIHsKLSAgaWYg
KHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIp
IC8vIENvbW1vbkpTCi0gICAgbW9kdWxlLmV4cG9ydHMgPSBtb2QoKTsKLSAgZWxzZSBpZiAodHlw
ZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAotICAgIHJldHVy
biBkZWZpbmUoW10sIG1vZCk7Ci0gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKLSAgICB0aGlz
LkNvZGVNaXJyb3IgPSBtb2QoKTsKLX0pKGZ1bmN0aW9uKCkgewotICAidXNlIHN0cmljdCI7Ci0K
LSAgLy8gQlJPV1NFUiBTTklGRklORwotCi0gIC8vIEtsdWRnZXMgZm9yIGJ1Z3MgYW5kIGJlaGF2
aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQotICAvLyBkZXRlY3RlZCBhcmUg
ZW5hYmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgotCi0gIHZhciBnZWNrbyA9
IC9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICAvLyBpZV91cHRvTiBt
ZWFucyBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIE4gb3IgbG93ZXIKLSAgdmFyIGllX3VwdG8x
MCA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWVfdXB0bzcg
PSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50
LmRvY3VtZW50TW9kZSA8IDgpOwotICB2YXIgaWVfdXB0bzggPSBpZV91cHRvMTAgJiYgKGRvY3Vt
ZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkpOwot
ICB2YXIgaWVfdXB0bzkgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBu
dWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDEwKTsKLSAgdmFyIGllXzExdXAgPSAvVHJp
ZGVudFwvKFs3LTldfFxkezIsfSlcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFy
IGllID0gaWVfdXB0bzEwIHx8IGllXzExdXA7Ci0gIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRl
c3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBxdHdlYmtpdCA9IHdlYmtpdCAmJiAvUXRc
L1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgY2hyb21lID0gL0No
cm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgcHJlc3RvID0gL09wZXJh
XC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBzYWZhcmkgPSAvQXBwbGUgQ29t
cHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7Ci0gIHZhciBraHRtbCA9IC9LSFRNTFwvLy50
ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01h
YyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0g
IHZhciBwaGFudG9tID0gL1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLQot
ICB2YXIgaW9zID0gL0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9N
b2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgLy8gVGhpcyBpcyB3b2Vm
dWxseSBpbmNvbXBsZXRlLiBTdWdnZXN0aW9ucyBmb3IgYWx0ZXJuYXRpdmUgbWV0aG9kcyB3ZWxj
b21lLgotICB2YXIgbW9iaWxlID0gaW9zIHx8IC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3Bl
cmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsK
LSAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7Ci0gIHZh
ciB3aW5kb3dzID0gL3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKLQotICB2YXIgcHJl
c3RvX3ZlcnNpb24gPSBwcmVzdG8gJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lv
blwvKFxkKlwuXGQqKS8pOwotICBpZiAocHJlc3RvX3ZlcnNpb24pIHByZXN0b192ZXJzaW9uID0g
TnVtYmVyKHByZXN0b192ZXJzaW9uWzFdKTsKLSAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0
b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9Ci0gIC8v
IFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBj
bWQvY3RybCBvbiBPUyBYCi0gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwg
cHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIu
MTEpKTsKLSAgdmFyIGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRv
OCk7Ci0KLSAgLy8gT3B0aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5v
dCB1c2VkLgotICB2YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBzZWRTcGFu
cyA9IGZhbHNlOwotCi0gIC8vIEVESVRPUiBDT05TVFJVQ1RPUgotCi0gIC8vIEEgQ29kZU1pcnJv
ciBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0Ci0gIC8v
IHRoYXQgdXNlciBjb2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLgotCi0gIGZ1bmN0aW9uIENv
ZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29k
ZU1pcnJvcikpIHJldHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucyk7Ci0KLSAgICB0
aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICAvLyBEZXRlcm1pbmUg
ZWZmZWN0aXZlIG9wdGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KLSAg
ICBjb3B5T2JqKGRlZmF1bHRzLCBvcHRpb25zLCBmYWxzZSk7Ci0gICAgc2V0R3V0dGVyc0Zvckxp
bmVOdW1iZXJzKG9wdGlvbnMpOwotCi0gICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7Ci0gICAg
aWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1v
ZGUpOwotICAgIHRoaXMuZG9jID0gZG9jOwotCi0gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3Bs
YXkgPSBuZXcgRGlzcGxheShwbGFjZSwgZG9jKTsKLSAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1p
cnJvciA9IHRoaXM7Ci0gICAgdXBkYXRlR3V0dGVycyh0aGlzKTsKLSAgICB0aGVtZUNoYW5nZWQo
dGhpcyk7Ci0gICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQotICAgICAgdGhpcy5kaXNwbGF5
LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKLSAgICBpZiAob3B0aW9u
cy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKLQotICAgIHRoaXMuc3Rh
dGUgPSB7Ci0gICAgICBrZXlNYXBzOiBbXSwgIC8vIHN0b3JlcyBtYXBzIGFkZGVkIGJ5IGFkZEtl
eU1hcAotICAgICAgb3ZlcmxheXM6IFtdLCAvLyBoaWdobGlnaHRpbmcgb3ZlcmxheXMsIGFzIGFk
ZGVkIGJ5IGFkZE92ZXJsYXkKLSAgICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9k
ZS9vdmVybGF5IGNoYW5nZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mbwot
ICAgICAgb3ZlcndyaXRlOiBmYWxzZSwgZm9jdXNlZDogZmFsc2UsCi0gICAgICBzdXBwcmVzc0Vk
aXRzOiBmYWxzZSwgLy8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVy
cyB3aGVuIGluIHJlYWRPbmx5IG1vZGUKLSAgICAgIHBhc3RlSW5jb21pbmc6IGZhbHNlLCBjdXRJ
bmNvbWluZzogZmFsc2UsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiByZWFk
SW5wdXQKLSAgICAgIGRyYWdnaW5nVGV4dDogZmFsc2UsCi0gICAgICBoaWdobGlnaHQ6IG5ldyBE
ZWxheWVkKCkgLy8gc3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAotICAgIH07Ci0KLSAg
ICAvLyBPdmVycmlkZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21l
dGltZXMgZG9lcwotICAgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkCi0gICAg
aWYgKGllX3VwdG8xMCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAy
MCk7Ci0KLSAgICByZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7Ci0gICAgZW5zdXJlR2xvYmFs
SGFuZGxlcnMoKTsKLQotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgcnVuSW5PcCh0aGlzLCBmdW5j
dGlvbigpIHsKLSAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIGF0dGFj
aERvYyhjbSwgZG9jKTsKLQotICAgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxl
KSB8fCBhY3RpdmVFbHQoKSA9PSBkaXNwbGF5LmlucHV0KQotICAgICAgICBzZXRUaW1lb3V0KGJp
bmQob25Gb2N1cywgY20pLCAyMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG9uQmx1cihjbSk7Ci0K
LSAgICAgIGZvciAodmFyIG9wdCBpbiBvcHRpb25IYW5kbGVycykgaWYgKG9wdGlvbkhhbmRsZXJz
Lmhhc093blByb3BlcnR5KG9wdCkpCi0gICAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0oY20sIG9w
dGlvbnNbb3B0XSwgSW5pdCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5s
ZW5ndGg7ICsraSkgaW5pdEhvb2tzW2ldKGNtKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIERJU1BM
QVkgQ09OU1RSVUNUT1IKLQotICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdy
YXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRpbmcKLSAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4g
SXQgaG9sZHMgcmVmZXJlbmNlcyB0byBET00gbm9kZXMgYW5kCi0gIC8vIGRpc3BsYXktcmVsYXRl
ZCBzdGF0ZS4KLQotICBmdW5jdGlvbiBEaXNwbGF5KHBsYWNlLCBkb2MpIHsKLSAgICB2YXIgZCA9
IHRoaXM7Ci0KLSAgICAvLyBUaGUgc2VtaWhpZGRlbiB0ZXh0YXJlYSB0aGF0IGlzIGZvY3VzZWQg
d2hlbiB0aGUgZWRpdG9yIGlzCi0gICAgLy8gZm9jdXNlZCwgYW5kIHJlY2VpdmVzIGlucHV0Lgot
ICAgIHZhciBpbnB1dCA9IGQuaW5wdXQgPSBlbHQoInRleHRhcmVhIiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91
dGxpbmU6IG5vbmUiKTsKLSAgICAvLyBUaGUgdGV4dGFyZWEgaXMga2VwdCBwb3NpdGlvbmVkIG5l
YXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHRoZQotICAgIC8vIGZhY3QgdGhhdCBpdCdsbCBiZSBz
Y3JvbGxlZCBpbnRvIHZpZXcgb24gaW5wdXQgZnJvbSBzY3JvbGxpbmcKLSAgICAvLyBvdXIgZmFr
ZSBjdXJzb3Igb3V0IG9mIHZpZXcuIE9uIHdlYmtpdCwgd2hlbiB3cmFwPW9mZiwgcGFzdGUgaXMK
LSAgICAvLyB2ZXJ5IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEgd2lkZSBpbnN0ZWFkLgotICAgIGlm
ICh3ZWJraXQpIGlucHV0LnN0eWxlLndpZHRoID0gIjEwMDBweCI7Ci0gICAgZWxzZSBpbnB1dC5z
ZXRBdHRyaWJ1dGUoIndyYXAiLCAib2ZmIik7Ci0gICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1Mg
ZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUgIzEyODcpCi0gICAgaWYgKGlvcykgaW5wdXQu
c3R5bGUuYm9yZGVyID0gIjFweCBzb2xpZCBibGFjayI7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRl
KCJhdXRvY29ycmVjdCIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6
ZSIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwgImZhbHNlIik7Ci0K
LSAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKLSAgICBkLmlucHV0RGl2ID0g
ZWx0KCJkaXYiLCBbaW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJl
bGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKLSAgICAvLyBUaGUgZmFrZSBzY3Jv
bGxiYXIgZWxlbWVudHMuCi0gICAgZC5zY3JvbGxiYXJIID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYi
LCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sICJDb2RlTWly
cm9yLWhzY3JvbGxiYXIiKTsKLSAgICBkLnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtlbHQoImRp
diIsIG51bGwsIG51bGwsICJtaW4td2lkdGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJh
ciIpOwotICAgIC8vIENvdmVycyBib3R0b20tcmlnaHQgc3F1YXJlIHdoZW4gYm90aCBzY3JvbGxi
YXJzIGFyZSBwcmVzZW50LgotICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxs
LCAiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIik7Ci0gICAgLy8gQ292ZXJzIGJvdHRvbSBv
ZiBndXR0ZXIgd2hlbiBjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciBpcyBvbgotICAgIC8vIGFu
ZCBoIHNjcm9sbGJhciBpcyBwcmVzZW50LgotICAgIGQuZ3V0dGVyRmlsbGVyID0gZWx0KCJkaXYi
LCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIik7Ci0gICAgLy8gV2lsbCBjb250YWlu
IHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuCi0gICAg
ZC5saW5lRGl2ID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jb2RlIik7Ci0gICAgLy8g
RWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZXNlIHRvIHJlcHJlc2VudCBzZWxlY3Rpb24gYW5kIGN1
cnNvcnMuCi0gICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3Np
dGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKTsKLSAgICBkLmN1cnNvckRpdiA9IGVsdCgiZGl2
IiwgbnVsbCwgIkNvZGVNaXJyb3ItY3Vyc29ycyIpOwotICAgIC8vIEEgdmlzaWJpbGl0eTogaGlk
ZGVuIGVsZW1lbnQgdXNlZCB0byBmaW5kIHRoZSBzaXplIG9mIHRoaW5ncy4KLSAgICBkLm1lYXN1
cmUgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKTsKLSAgICAvLyBXaGVu
IGxpbmVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IGFyZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJh
d24gaW4gdGhpcy4KLSAgICBkLmxpbmVNZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1p
cnJvci1tZWFzdXJlIik7Ci0gICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4
aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW0KLSAgICBk
LmxpbmVTcGFjZSA9IGVsdCgiZGl2IiwgW2QubWVhc3VyZSwgZC5saW5lTWVhc3VyZSwgZC5zZWxl
Y3Rpb25EaXYsIGQuY3Vyc29yRGl2LCBkLmxpbmVEaXZdLAotICAgICAgICAgICAgICAgICAgICAg
IG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKTsKLSAgICAvLyBNb3Zl
ZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuCi0gICAgZC5tb3ZlciA9
IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgW2QubGluZVNwYWNlXSwgIkNvZGVNaXJyb3ItbGluZXMi
KV0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKLSAgICAvLyBTZXQgdG8gdGhlIGhlaWdo
dCBvZiB0aGUgZG9jdW1lbnQsIGFsbG93aW5nIHNjcm9sbGluZy4KLSAgICBkLnNpemVyID0gZWx0
KCJkaXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIik7Ci0gICAgLy8gQmVoYXZpb3Ig
b2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzCi0gICAgLy8gaW5jb25z
aXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGUKLSAgICAv
LyBzY3JvbGxhYmxlIGFyZWEgaXMgYmlnIGVub3VnaC4KLSAgICBkLmhlaWdodEZvcmNlciA9IGVs
dCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiICsgc2Ny
b2xsZXJDdXRPZmYgKyAicHg7IHdpZHRoOiAxcHg7Iik7Ci0gICAgLy8gV2lsbCBjb250YWluIHRo
ZSBndXR0ZXJzLCBpZiBhbnkuCi0gICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxsLCAiQ29k
ZU1pcnJvci1ndXR0ZXJzIik7Ci0gICAgZC5saW5lR3V0dGVyID0gbnVsbDsKLSAgICAvLyBBY3R1
YWwgc2Nyb2xsYWJsZSBlbGVtZW50LgotICAgIGQuc2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtkLnNp
emVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgIkNvZGVNaXJyb3Itc2Nyb2xsIik7Ci0g
ICAgZC5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwgIi0xIik7Ci0gICAgLy8gVGhl
IGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy4KLSAgICBkLndyYXBwZXIgPSBlbHQo
ImRpdiIsIFtkLmlucHV0RGl2LCBkLnNjcm9sbGJhckgsIGQuc2Nyb2xsYmFyViwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQu
c2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwotCi0gICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5k
ZXggYnVnIChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVk
KQotICAgIGlmIChpZV91cHRvNykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Ny
b2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQotICAgIC8vIE5lZWRlZCB0byBoaWRlIGJp
ZyBibHVlIGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCi0gICAgaWYgKGlvcykgaW5w
dXQuc3R5bGUud2lkdGggPSAiMHB4IjsKLSAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFn
Z2FibGUgPSB0cnVlOwotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAot
ICAgIGlmIChraHRtbCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0
RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgfQotICAgIC8vIE5lZWQgdG8gc2V0IGEg
bWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBz
ZXQgaXQgb24gSUU4KS4KLSAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5I
ZWlnaHQgPSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7Ci0KLSAgICBpZiAo
cGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7Ci0gICAgZWxz
ZSBwbGFjZShkLndyYXBwZXIpOwotCi0gICAgLy8gQ3VycmVudCByZW5kZXJlZCByYW5nZSAobWF5
IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCi0gICAgZC52aWV3RnJvbSA9IGQudmll
d1RvID0gZG9jLmZpcnN0OwotICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBs
aW5lcy4KLSAgICBkLnZpZXcgPSBbXTsKLSAgICAvLyBIb2xkcyBpbmZvIGFib3V0IGEgc2luZ2xl
IHJlbmRlcmVkIGxpbmUgd2hlbiBpdCB3YXMgcmVuZGVyZWQKLSAgICAvLyBmb3IgbWVhc3VyZW1l
bnQsIHdoaWxlIG5vdCBpbiB2aWV3LgotICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7Ci0g
ICAgLy8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXcKLSAgICBkLnZpZXdP
ZmZzZXQgPSAwOwotICAgIGQubGFzdFNpemVDID0gMDsKLSAgICBkLnVwZGF0ZUxpbmVOdW1iZXJz
ID0gbnVsbDsKLQotICAgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1
dHRlciB3aGVuIG5lY2Vzc2FyeSAod2hlbgotICAgIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgY3Jv
c3NlcyBhIGJvdW5kYXJ5IHRoYXQgbWFrZXMgaXRzIHdpZHRoIGNoYW5nZSkKLSAgICBkLmxpbmVO
dW1XaWR0aCA9IGQubGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7Ci0g
ICAgLy8gU2VlIHJlYWRJbnB1dCBhbmQgcmVzZXRJbnB1dAotICAgIGQucHJldklucHV0ID0gIiI7
Ci0gICAgLy8gU2V0IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5l
IHdpZGdldCBpcwotICAgIC8vIGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0
IGFsaWduaW5nIGlzIHNraXBwZWQgd2hlbgotICAgIC8vIHRoaXMgaXMgZmFsc2UuCi0gICAgZC5h
bGlnbldpZGdldHMgPSBmYWxzZTsKLSAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIg
d2UgZXhwZWN0IGlucHV0IHRvIGFwcGVhciByZWFsIHNvb24KLSAgICAvLyBub3cgKGFmdGVyIHNv
bWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUKLSAgICAvLyBwb2xs
aW5nIGludGVuc2l2ZWx5LgotICAgIGQucG9sbGluZ0Zhc3QgPSBmYWxzZTsKLSAgICAvLyBTZWxm
LXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyCi0gICAgZC5wb2xsID0gbmV3IERlbGF5
ZWQoKTsKLQotICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5j
YWNoZWRQYWRkaW5nSCA9IG51bGw7Ci0KLSAgICAvLyBUcmFja3Mgd2hlbiByZXNldElucHV0IGhh
cyBwdW50ZWQgdG8ganVzdCBwdXR0aW5nIGEgc2hvcnQKLSAgICAvLyBzdHJpbmcgaW50byB0aGUg
dGV4dGFyZWEgaW5zdGVhZCBvZiB0aGUgZnVsbCBzZWxlY3Rpb24uCi0gICAgZC5pbmFjY3VyYXRl
U2VsZWN0aW9uID0gZmFsc2U7Ci0KLSAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5n
dGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKLSAgICAvLyBjYW4gYmUga2VwdCBz
dGF0aWMgd2hlbiBzY3JvbGxpbmcuCi0gICAgZC5tYXhMaW5lID0gbnVsbDsKLSAgICBkLm1heExp
bmVMZW5ndGggPSAwOwotICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIFVz
ZWQgZm9yIG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHkKLSAgICBkLndoZWVs
RFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7Ci0K
LSAgICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLgotICAgIGQuc2hpZnQgPSBmYWxz
ZTsKLQotICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hldGhlciBhbnl0aGluZyBoYXBwZW5lZCBzaW5j
ZSB0aGUgY29udGV4dCBtZW51Ci0gICAgLy8gd2FzIG9wZW5lZC4KLSAgICBkLnNlbEZvckNvbnRl
eHRNZW51ID0gbnVsbDsKLSAgfQotCi0gIC8vIFNUQVRFIFVQREFURVMKLQotICAvLyBVc2VkIHRv
IGdldCB0aGUgZWRpdG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdoZW4gb3B0aW9u
cyBjaGFuZ2UuCi0KLSAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKLSAgICBjbS5kb2MubW9kZSA9
IENvZGVNaXJyb3IuZ2V0TW9kZShjbS5vcHRpb25zLCBjbS5kb2MubW9kZU9wdGlvbik7Ci0gICAg
cmVzZXRNb2RlU3RhdGUoY20pOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRNb2RlU3RhdGUoY20p
IHsKLSAgICBjbS5kb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZS5zdGF0
ZUFmdGVyKSBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgICAgaWYgKGxpbmUuc3R5bGVzKSBs
aW5lLnN0eWxlcyA9IG51bGw7Ci0gICAgfSk7Ci0gICAgY20uZG9jLmZyb250aWVyID0gY20uZG9j
LmZpcnN0OwotICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwotICAgIGNtLnN0YXRlLm1vZGVHZW4r
KzsKLSAgICBpZiAoY20uY3VyT3ApIHJlZ0NoYW5nZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB3
cmFwcGluZ0NoYW5nZWQoY20pIHsKLSAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsK
LSAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwot
ICAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9ICIiOwotICAgIH0gZWxzZSB7
Ci0gICAgICBybUNsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwot
ICAgICAgZmluZE1heExpbmUoY20pOwotICAgIH0KLSAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNt
KTsKLSAgICByZWdDaGFuZ2UoY20pOwotICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAwKTsKLSAgfQotCi0gIC8v
IFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGVzdGltYXRlcyB0aGUgaGVpZ2h0IG9mIGEgbGluZSwg
dG8gdXNlIGFzCi0gIC8vIGZpcnN0IGFwcHJveGltYXRpb24gdW50aWwgdGhlIGxpbmUgYmVjb21l
cyB2aXNpYmxlIChhbmQgaXMgdGh1cwotICAvLyBwcm9wZXJseSBtZWFzdXJhYmxlKS4KLSAgZnVu
Y3Rpb24gZXN0aW1hdGVIZWlnaHQoY20pIHsKLSAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KGNtLmRp
c3BsYXkpLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwotICAgIHZhciBwZXJM
aW5lID0gd3JhcHBpbmcgJiYgTWF0aC5tYXgoNSwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRX
aWR0aCAvIGNoYXJXaWR0aChjbS5kaXNwbGF5KSAtIDMpOwotICAgIHJldHVybiBmdW5jdGlvbihs
aW5lKSB7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHJldHVybiAwOwot
Ci0gICAgICB2YXIgd2lkZ2V0c0hlaWdodCA9IDA7Ci0gICAgICBpZiAobGluZS53aWRnZXRzKSBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAobGluZS53aWRnZXRzW2ldLmhlaWdodCkgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNb
aV0uaGVpZ2h0OwotICAgICAgfQotCi0gICAgICBpZiAod3JhcHBpbmcpCi0gICAgICAgIHJldHVy
biB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkg
fHwgMSkgKiB0aDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0
aDsKLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkgewot
ICAgIHZhciBkb2MgPSBjbS5kb2MsIGVzdCA9IGVzdGltYXRlSGVpZ2h0KGNtKTsKLSAgICBkb2Mu
aXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0KGxpbmUpOwot
ICAgICAgaWYgKGVzdEhlaWdodCAhPSBsaW5lLmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5l
LCBlc3RIZWlnaHQpOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChj
bSkgewotICAgIHZhciBtYXAgPSBrZXlNYXBbY20ub3B0aW9ucy5rZXlNYXBdLCBzdHlsZSA9IG1h
cC5zdHlsZTsKLSAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53
cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csICIiKSArCi0gICAg
ICAoc3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7Ci0gIH0KLQotICBmdW5jdGlv
biB0aGVtZUNoYW5nZWQoY20pIHsKLSAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0g
Y20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikg
KwotICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIp
OwotICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGd1dHRlcnNDaGFuZ2Vk
KGNtKSB7Ci0gICAgdXBkYXRlR3V0dGVycyhjbSk7Ci0gICAgcmVnQ2hhbmdlKGNtKTsKLSAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIwKTsKLSAgfQot
Ci0gIC8vIFJlYnVpbGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8g
dGhlIGxlZnQgb2YgdGhlCi0gIC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC4KLSAgZnVuY3Rp
b24gdXBkYXRlR3V0dGVycyhjbSkgewotICAgIHZhciBndXR0ZXJzID0gY20uZGlzcGxheS5ndXR0
ZXJzLCBzcGVjcyA9IGNtLm9wdGlvbnMuZ3V0dGVyczsKLSAgICByZW1vdmVDaGlsZHJlbihndXR0
ZXJzKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICB2YXIgZ3V0dGVyQ2xhc3MgPSBzcGVjc1tpXTsKLSAgICAgIHZhciBnRWx0ID0gZ3V0dGVycy5h
cHBlbmRDaGlsZChlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlciAiICsgZ3V0dGVy
Q2xhc3MpKTsKLSAgICAgIGlmIChndXR0ZXJDbGFzcyA9PSAiQ29kZU1pcnJvci1saW5lbnVtYmVy
cyIpIHsKLSAgICAgICAgY20uZGlzcGxheS5saW5lR3V0dGVyID0gZ0VsdDsKLSAgICAgICAgZ0Vs
dC5zdHlsZS53aWR0aCA9IChjbS5kaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArICJweCI7Ci0g
ICAgICB9Ci0gICAgfQotICAgIGd1dHRlcnMuc3R5bGUuZGlzcGxheSA9IGkgPyAiIiA6ICJub25l
IjsKLSAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVH
dXR0ZXJTcGFjZShjbSkgewotICAgIHZhciB3aWR0aCA9IGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZz
ZXRXaWR0aDsKLSAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQgPSB3aWR0aCAr
ICJweCI7Ci0gICAgY20uZGlzcGxheS5zY3JvbGxiYXJILnN0eWxlLmxlZnQgPSBjbS5vcHRpb25z
LmZpeGVkR3V0dGVyID8gd2lkdGggKyAicHgiIDogMDsKLSAgfQotCi0gIC8vIENvbXB1dGUgdGhl
IGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50Ci0gIC8vIGNv
bGxhcHNlZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQg
am9pbgotICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LgotICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxp
bmUpIHsKLSAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgcmV0dXJuIDA7Ci0gICAgdmFyIGxlbiA9
IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTsKLSAgICB3aGlsZSAobWVyZ2Vk
ID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2Vk
LmZpbmQoMCwgdHJ1ZSk7Ci0gICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7Ci0gICAgICBsZW4g
Kz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoOwotICAgIH0KLSAgICBjdXIgPSBsaW5lOwot
ICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgewotICAgICAgdmFy
IGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7Ci0gICAgICBsZW4gLT0gY3VyLnRleHQubGVu
Z3RoIC0gZm91bmQuZnJvbS5jaDsKLSAgICAgIGN1ciA9IGZvdW5kLnRvLmxpbmU7Ci0gICAgICBs
ZW4gKz0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQudG8uY2g7Ci0gICAgfQotICAgIHJldHVybiBs
ZW47Ci0gIH0KLQotICAvLyBGaW5kIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50Lgot
ICBmdW5jdGlvbiBmaW5kTWF4TGluZShjbSkgewotICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9j
ID0gY20uZG9jOwotICAgIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3QpOwotICAg
IGQubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5ndGgoZC5tYXhMaW5lKTsKLSAgICBkLm1heExpbmVD
aGFuZ2VkID0gdHJ1ZTsKLSAgICBkb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIg
bGVuID0gbGluZUxlbmd0aChsaW5lKTsKLSAgICAgIGlmIChsZW4gPiBkLm1heExpbmVMZW5ndGgp
IHsKLSAgICAgICAgZC5tYXhMaW5lTGVuZ3RoID0gbGVuOwotICAgICAgICBkLm1heExpbmUgPSBs
aW5lOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSBndXR0ZXJz
IG9wdGlvbnMgY29udGFpbnMgdGhlIGVsZW1lbnQKLSAgLy8gIkNvZGVNaXJyb3ItbGluZW51bWJl
cnMiIHdoZW4gdGhlIGxpbmVOdW1iZXJzIG9wdGlvbiBpcyB0cnVlLgotICBmdW5jdGlvbiBzZXRH
dXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucykgewotICAgIHZhciBmb3VuZCA9IGluZGV4T2Yo
b3B0aW9ucy5ndXR0ZXJzLCAiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOwotICAgIGlmIChmb3Vu
ZCA9PSAtMSAmJiBvcHRpb25zLmxpbmVOdW1iZXJzKSB7Ci0gICAgICBvcHRpb25zLmd1dHRlcnMg
PSBvcHRpb25zLmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTsKLSAg
ICB9IGVsc2UgaWYgKGZvdW5kID4gLTEgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIHsKLSAgICAg
IG9wdGlvbnMuZ3V0dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5zbGljZSgwKTsKLSAgICAgIG9wdGlv
bnMuZ3V0dGVycy5zcGxpY2UoZm91bmQsIDEpOwotICAgIH0KLSAgfQotCi0gIC8vIFNDUk9MTEJB
UlMKLQotICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxi
YXJzLiBEb25lIGluIG9uZQotICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJv
dW5kdHJpcHMuCi0gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7Ci0gICAgdmFy
IHNjcm9sbCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXI7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGNsaWVu
dEhlaWdodDogc2Nyb2xsLmNsaWVudEhlaWdodCwKLSAgICAgIGJhckhlaWdodDogY20uZGlzcGxh
eS5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCwKLSAgICAgIHNjcm9sbFdpZHRoOiBzY3JvbGwuc2Ny
b2xsV2lkdGgsIGNsaWVudFdpZHRoOiBzY3JvbGwuY2xpZW50V2lkdGgsCi0gICAgICBiYXJXaWR0
aDogY20uZGlzcGxheS5zY3JvbGxiYXJILmNsaWVudFdpZHRoLAotICAgICAgZG9jSGVpZ2h0OiBN
YXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkKLSAgICB9
OwotICB9Ci0KLSAgLy8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3aXRoIHRo
ZSBhY3R1YWwgc2l6ZSBvZiB0aGUKLSAgLy8gY29udGVudC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Ny
b2xsYmFycyhjbSwgbWVhc3VyZSkgewotICAgIGlmICghbWVhc3VyZSkgbWVhc3VyZSA9IG1lYXN1
cmVGb3JTY3JvbGxiYXJzKGNtKTsKLSAgICB2YXIgZCA9IGNtLmRpc3BsYXk7Ci0gICAgdmFyIHNj
cm9sbEhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgc2Nyb2xsZXJDdXRPZmY7Ci0gICAgdmFy
IG5lZWRzSCA9IG1lYXN1cmUuc2Nyb2xsV2lkdGggPiBtZWFzdXJlLmNsaWVudFdpZHRoOwotICAg
IHZhciBuZWVkc1YgPSBzY3JvbGxIZWlnaHQgPiBtZWFzdXJlLmNsaWVudEhlaWdodDsKLSAgICBp
ZiAobmVlZHNWKSB7Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7
Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc2Nyb2xsYmFyV2lk
dGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7Ci0gICAgICAvLyBBIGJ1ZyBpbiBJRTggY2FuIGNh
dXNlIHRoaXMgdmFsdWUgdG8gYmUgbmVnYXRpdmUsIHNvIGd1YXJkIGl0LgotICAgICAgZC5zY3Jv
bGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0KLSAgICAgICAgTWF0aC5tYXgoMCwgc2Ny
b2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyAobWVhc3VyZS5iYXJIZWlnaHQgfHwg
ZC5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCkpICsgInB4IjsKLSAgICB9IGVsc2UgewotICAgICAg
ZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGQuc2Nyb2xsYmFyVi5maXJz
dENoaWxkLnN0eWxlLmhlaWdodCA9ICIwIjsKLSAgICB9Ci0gICAgaWYgKG5lZWRzSCkgewotICAg
ICAgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgICAgZC5zY3JvbGxi
YXJILnN0eWxlLnJpZ2h0ID0gbmVlZHNWID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJw
eCIgOiAiMCI7Ci0gICAgICBkLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9Ci0g
ICAgICAgIChtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIChtZWFz
dXJlLmJhcldpZHRoIHx8IGQuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCkpICsgInB4IjsKLSAgICB9
IGVsc2UgewotICAgICAgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGQu
c2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOwotICAgIH0KLSAgICBpZiAo
bmVlZHNIICYmIG5lZWRzVikgewotICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxh
eSA9ICJibG9jayI7Ci0gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBkLnNj
cm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAi
cHgiOwotICAgIH0gZWxzZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0g
ICAgaWYgKG5lZWRzSCAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYm
IGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRp
c3BsYXkgPSAiYmxvY2siOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2Ny
b2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCI7Ci0gICAgICBkLmd1dHRlckZpbGxlci5zdHls
ZS53aWR0aCA9IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7Ci0gICAgfSBlbHNlIGQuZ3V0
dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLQotICAgIGlmICghY20uc3RhdGUuY2hlY2tl
ZE92ZXJsYXlTY3JvbGxiYXIgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7Ci0gICAgICBp
ZiAoc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSA9PT0gMCkgewotICAgICAgICB2YXIgdyA9IG1h
YyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOwotICAgICAgICBkLnNj
cm9sbGJhclYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUubWluSGVpZ2h0ID0g
dzsKLSAgICAgICAgdmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICBp
ZiAoZV90YXJnZXQoZSkgIT0gZC5zY3JvbGxiYXJWICYmIGVfdGFyZ2V0KGUpICE9IGQuc2Nyb2xs
YmFySCkKLSAgICAgICAgICAgIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKGUpOwotICAgICAg
ICB9OwotICAgICAgICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24p
OwotICAgICAgICBvbihkLnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwot
ICAgICAgfQotICAgICAgY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgPSB0cnVlOwot
ICAgIH0KLSAgfQotCi0gIC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4g
YSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHMKLSAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBw
b3NpdGlvbikuIHZpZXdQb3J0IG1heSBjb250YWluIHRvcCwKLSAgLy8gaGVpZ2h0LCBhbmQgZW5z
dXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCi0gIGZ1bmN0aW9uIHZpc2libGVM
aW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRvcCA9IHZpZXdQb3J0ICYm
IHZpZXdQb3J0LnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld1BvcnQudG9wKSA6IGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIHRvcCA9IE1hdGguZmxvb3IodG9wIC0gcGFkZGlu
Z1RvcChkaXNwbGF5KSk7Ci0gICAgdmFyIGJvdHRvbSA9IHZpZXdQb3J0ICYmIHZpZXdQb3J0LmJv
dHRvbSAhPSBudWxsID8gdmlld1BvcnQuYm90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNs
aWVudEhlaWdodDsKLQotICAgIHZhciBmcm9tID0gbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG8g
PSBsaW5lQXRIZWlnaHQoZG9jLCBib3R0b20pOwotICAgIC8vIEVuc3VyZSBpcyBhIHtmcm9tOiB7
bGluZSwgY2h9LCB0bzoge2xpbmUsIGNofX0gb2JqZWN0LCBhbmQKLSAgICAvLyBmb3JjZXMgdGhv
c2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4KLSAgICBpZiAodmlld1Bv
cnQgJiYgdmlld1BvcnQuZW5zdXJlKSB7Ci0gICAgICB2YXIgZW5zdXJlRnJvbSA9IHZpZXdQb3J0
LmVuc3VyZS5mcm9tLmxpbmUsIGVuc3VyZVRvID0gdmlld1BvcnQuZW5zdXJlLnRvLmxpbmU7Ci0g
ICAgICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pCi0gICAgICAgIHJldHVybiB7ZnJvbTogZW5zdXJl
RnJvbSwKLSAgICAgICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5l
KGdldExpbmUoZG9jLCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0
KX07Ci0gICAgICBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykK
LSAgICAgICAgcmV0dXJuIHtmcm9tOiBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0
TGluZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KSwKLSAg
ICAgICAgICAgICAgICB0bzogZW5zdXJlVG99OwotICAgIH0KLSAgICByZXR1cm4ge2Zyb206IGZy
b20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfTsKLSAgfQotCi0gIC8vIExJTkUgTlVNQkVS
UwotCi0gIC8vIFJlLWFsaWduIGxpbmUgbnVtYmVycyBhbmQgZ3V0dGVyIG1hcmtzIHRvIGNvbXBl
bnNhdGUgZm9yCi0gIC8vIGhvcml6b250YWwgc2Nyb2xsaW5nLgotICBmdW5jdGlvbiBhbGlnbkhv
cml6b250YWxseShjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgdmlldyA9IGRp
c3BsYXkudmlldzsKLSAgICBpZiAoIWRpc3BsYXkuYWxpZ25XaWRnZXRzICYmICghZGlzcGxheS5n
dXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpKSByZXR1cm47Ci0g
ICAgdmFyIGNvbXAgPSBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSAtIGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsTGVmdCArIGNtLmRvYy5zY3JvbGxMZWZ0OwotICAgIHZhciBndXR0ZXJXID0g
ZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLCBsZWZ0ID0gY29tcCArICJweCI7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7
Ci0gICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlciAmJiB2aWV3W2ldLmd1dHRlcikKLSAg
ICAgICAgdmlld1tpXS5ndXR0ZXIuc3R5bGUubGVmdCA9IGxlZnQ7Ci0gICAgICB2YXIgYWxpZ24g
PSB2aWV3W2ldLmFsaWduYWJsZTsKLSAgICAgIGlmIChhbGlnbikgZm9yICh2YXIgaiA9IDA7IGog
PCBhbGlnbi5sZW5ndGg7IGorKykKLSAgICAgICAgYWxpZ25bal0uc3R5bGUubGVmdCA9IGxlZnQ7
Ci0gICAgfQotICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKQotICAgICAgZGlzcGxheS5n
dXR0ZXJzLnN0eWxlLmxlZnQgPSAoY29tcCArIGd1dHRlclcpICsgInB4IjsKLSAgfQotCi0gIC8v
IFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciBpcyBzdGlsbCB0aGUg
cmlnaHQKLSAgLy8gc2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4gUmV0dXJucyB0
cnVlIHdoZW4gYW4gdXBkYXRlCi0gIC8vIGlzIG5lZWRlZC4KLSAgZnVuY3Rpb24gbWF5YmVVcGRh
dGVMaW5lTnVtYmVyV2lkdGgoY20pIHsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZU51bWJlcnMp
IHJldHVybiBmYWxzZTsKLSAgICB2YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZv
cihjbS5vcHRpb25zLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlz
cGxheTsKLSAgICBpZiAobGFzdC5sZW5ndGggIT0gZGlzcGxheS5saW5lTnVtQ2hhcnMpIHsKLSAg
ICAgIHZhciB0ZXN0ID0gZGlzcGxheS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2Vs
dCgiZGl2IiwgbGFzdCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0Iikp
OwotICAgICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGlu
ZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBpbm5lclc7Ci0gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIu
c3R5bGUud2lkdGggPSAiIjsKLSAgICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRo
Lm1heChpbm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpOwot
ICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsg
cGFkZGluZzsKLSAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5u
ZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7Ci0gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5
bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7Ci0gICAgICB1cGRhdGVHdXR0
ZXJTcGFjZShjbSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRpb25zLCBpKSB7Ci0gICAgcmV0
dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RM
aW5lTnVtYmVyKSk7Ci0gIH0KLQotICAvLyBDb21wdXRlcyBkaXNwbGF5LnNjcm9sbGVyLnNjcm9s
bExlZnQgKyBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsCi0gIC8vIGJ1dCB1c2luZyBnZXRC
b3VuZGluZ0NsaWVudFJlY3QgdG8gZ2V0IGEgc3ViLXBpeGVsLWFjY3VyYXRlCi0gIC8vIHJlc3Vs
dC4KLSAgZnVuY3Rpb24gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgewotICAgIHJldHVy
biBkaXNwbGF5LnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkaXNwbGF5
LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7Ci0gIH0KLQotICAvLyBESVNQTEFZ
IERSQVdJTkcKLQotICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LCBzZWxlY3Rpb24sIGFuZCBzY3Jv
bGxiYXJzLCB1c2luZyB0aGUKLSAgLy8gaW5mb3JtYXRpb24gaW4gZGlzcGxheS52aWV3IHRvIGZp
bmQgb3V0IHdoaWNoIG5vZGVzIGFyZSBubyBsb25nZXIKLSAgLy8gdXAtdG8tZGF0ZS4gVHJpZXMg
dG8gYmFpbCBvdXQgZWFybHkgd2hlbiBubyBjaGFuZ2VzIGFyZSBuZWVkZWQsCi0gIC8vIHVubGVz
cyBmb3JjZWQgaXMgdHJ1ZS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFuIGFjdHVhbCB1cGRhdGUg
aGFwcGVuZWQsIGZhbHNlIG90aGVyd2lzZS4KLSAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjbSwg
dmlld1BvcnQsIGZvcmNlZCkgewotICAgIHZhciBvbGRGcm9tID0gY20uZGlzcGxheS52aWV3RnJv
bSwgb2xkVG8gPSBjbS5kaXNwbGF5LnZpZXdUbywgdXBkYXRlZDsKLSAgICB2YXIgdmlzaWJsZSA9
IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0KTsKLSAgICBmb3IgKHZh
ciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7Ci0gICAgICB2YXIgb2xkV2lkdGggPSBj
bS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOwotICAgICAgaWYgKCF1cGRhdGVEaXNwbGF5
SW5uZXIoY20sIHZpc2libGUsIGZvcmNlZCkpIGJyZWFrOwotICAgICAgdXBkYXRlZCA9IHRydWU7
Ci0KLSAgICAgIC8vIElmIHRoZSBtYXggbGluZSBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBsYXN0IG1l
YXN1cmVkLCBtZWFzdXJlIGl0LAotICAgICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3
aWR0aCBtYXRjaGVzIGl0LgotICAgICAgaWYgKGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYg
IWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKQotICAgICAgICBhZGp1c3RDb250ZW50V2lkdGgoY20p
OwotCi0gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKLSAg
ICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7Ci0gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFy
TWVhc3VyZSk7Ci0gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKLSAgICAg
IGlmICh3ZWJraXQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIGNoZWNrRm9y
V2Via2l0V2lkdGhCdWcoY20sIGJhck1lYXN1cmUpOyAvLyAoSXNzdWUgIzI0MjApCi0gICAgICBp
ZiAoZmlyc3QgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgb2xkV2lkdGggIT0gY20uZGlz
cGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCkgewotICAgICAgICBmb3JjZWQgPSB0cnVlOwotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGZvcmNlZCA9IGZhbHNlOwotCi0gICAgICAv
LyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgotICAgICAg
aWYgKHZpZXdQb3J0ICYmIHZpZXdQb3J0LnRvcCAhPSBudWxsKQotICAgICAgICB2aWV3UG9ydCA9
IHt0b3A6IE1hdGgubWluKGJhck1lYXN1cmUuZG9jSGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYgLSBi
YXJNZWFzdXJlLmNsaWVudEhlaWdodCwgdmlld1BvcnQudG9wKX07Ci0gICAgICAvLyBVcGRhdGVk
IGxpbmUgaGVpZ2h0cyBtaWdodCByZXN1bHQgaW4gdGhlIGRyYXduIGFyZWEgbm90Ci0gICAgICAv
LyBhY3R1YWxseSBjb3ZlcmluZyB0aGUgdmlld3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBk
b2VzLgotICAgICAgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZp
ZXdQb3J0KTsKLSAgICAgIGlmICh2aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAm
JiB2aXNpYmxlLnRvIDw9IGNtLmRpc3BsYXkudmlld1RvKQotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjbS5kaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKLSAgICBpZiAodXBk
YXRlZCkgewotICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICBpZiAo
Y20uZGlzcGxheS52aWV3RnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IG9s
ZFRvKQotICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRp
c3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVw
ZGF0ZWQ7Ci0gIH0KLQotICAvLyBEb2VzIHRoZSBhY3R1YWwgdXBkYXRpbmcgb2YgdGhlIGxpbmUg
ZGlzcGxheS4gQmFpbHMgb3V0Ci0gIC8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMg
bm90aGluZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXMKLSAgLy8gZmFsc2UuCi0gIGZ1bmN0aW9u
IHVwZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSB7Ci0gICAgdmFyIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFkaXNwbGF5LndyYXBwZXIu
b2Zmc2V0V2lkdGgpIHsKLSAgICAgIHJlc2V0VmlldyhjbSk7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRl
cmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCi0gICAgaWYgKCFmb3JjZWQgJiYgdmlzaWJsZS5mcm9t
ID49IGRpc3BsYXkudmlld0Zyb20gJiYgdmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJgot
ICAgICAgICBjb3VudERpcnR5VmlldyhjbSkgPT0gMCkKLSAgICAgIHJldHVybjsKLQotICAgIGlm
IChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpCi0gICAgICByZXNldFZpZXcoY20pOwot
ICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7Ci0KLSAgICAvLyBDb21wdXRlIGEgc3Vp
dGFibGUgbmV3IHZpZXdwb3J0IChmcm9tICYgdG8pCi0gICAgdmFyIGVuZCA9IGRvYy5maXJzdCAr
IGRvYy5zaXplOwotICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gY20ub3B0
aW9ucy52aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTsKLSAgICB2YXIgdG8gPSBNYXRoLm1pbihl
bmQsIHZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKLSAgICBpZiAoZGlz
cGxheS52aWV3RnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJv
bSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7Ci0gICAgaWYgKGRpc3Bs
YXkudmlld1RvID4gdG8gJiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWlu
KGVuZCwgZGlzcGxheS52aWV3VG8pOwotICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewotICAg
ICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pOwotICAgICAgdG8gPSB2aXN1YWxM
aW5lRW5kTm8oY20uZG9jLCB0byk7Ci0gICAgfQotCi0gICAgdmFyIGRpZmZlcmVudCA9IGZyb20g
IT0gZGlzcGxheS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fAotICAgICAgZGlz
cGxheS5sYXN0U2l6ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICBhZGp1
c3RWaWV3KGNtLCBmcm9tLCB0byk7Ci0KLSAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRB
dExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKLSAgICAvLyBQb3NpdGlv
biB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9u
Ci0gICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAi
cHgiOwotCi0gICAgdmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXcoY20pOwotICAgIGlmICgh
ZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAgJiYgIWZvcmNlZCkgcmV0dXJuOwotCi0gICAgLy8g
Rm9yIGJpZyBjaGFuZ2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhl
Ci0gICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBt
b3N0IGJyb3dzZXJzLgotICAgIHZhciBmb2N1c2VkID0gYWN0aXZlRWx0KCk7Ci0gICAgaWYgKHRv
VXBkYXRlID4gNCkgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAg
cGF0Y2hEaXNwbGF5KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCBkaW1zKTsKLSAgICBp
ZiAodG9VcGRhdGUgPiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwotICAg
IC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50
IHRoYXQgZ290Ci0gICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0Lgot
ICAgIGlmIChmb2N1c2VkICYmIGFjdGl2ZUVsdCgpICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZz
ZXRIZWlnaHQpIGZvY3VzZWQuZm9jdXMoKTsKLQotICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFu
ZCBjdXJzb3JzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc2Nyb2xsCi0gICAgLy8gd2lkdGgu
Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOwotICAgIHJlbW92ZUNoaWxk
cmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTsKLQotICAgIGlmIChkaWZmZXJlbnQpIHsKLSAgICAg
IGRpc3BsYXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICAg
IHN0YXJ0V29ya2VyKGNtLCA0MDApOwotICAgIH0KLQotICAgIHVwZGF0ZUhlaWdodHNJblZpZXdw
b3J0KGNtKTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRqdXN0Q29u
dGVudFdpZHRoKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciB3
aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50
ZXh0Lmxlbmd0aCkubGVmdDsKLSAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgdmFyIG1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzKTsKLSAgICB2YXIgbWF4U2Ny
b2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG1pbldpZHRo
ICsgc2Nyb2xsZXJDdXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBk
aXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGggKyAicHgiOwotICAgIGlmICht
YXhTY3JvbGxMZWZ0IDwgY20uZG9jLnNjcm9sbExlZnQpCi0gICAgICBzZXRTY3JvbGxMZWZ0KGNt
LCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0
cnVlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldERvY3VtZW50SGVpZ2h0KGNtLCBtZWFzdXJlKSB7
Ci0gICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBjbS5kaXNwbGF5LmhlaWdo
dEZvcmNlci5zdHlsZS50b3AgPSBtZWFzdXJlLmRvY0hlaWdodCArICJweCI7Ci0gICAgY20uZGlz
cGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KG1lYXN1cmUuZG9jSGVpZ2h0LCBt
ZWFzdXJlLmNsaWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7Ci0gIH0KLQotICBm
dW5jdGlvbiBjaGVja0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBtZWFzdXJlKSB7Ci0gICAgLy8gV29y
ayBhcm91bmQgV2Via2l0IGJ1ZyB3aGVyZSBpdCBzb21ldGltZXMgcmVzZXJ2ZXMgc3BhY2UgZm9y
IGEKLSAgICAvLyBub24tZXhpc3RpbmcgcGhhbnRvbSBzY3JvbGxiYXIgaW4gdGhlIHNjcm9sbGVy
IChJc3N1ZSAjMjQyMCkKLSAgICBpZiAoY20uZGlzcGxheS5zaXplci5vZmZzZXRXaWR0aCArIGNt
LmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA8IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50
V2lkdGggLSAxKSB7Ci0gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGNt
LmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9ICIwcHgiOwotICAgICAgY20uZGlzcGxh
eS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsKLSAgICB9
Ci0gIH0KLQotICAvLyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0aGUgcmVuZGVyZWQgbGlu
ZXMsIGFuZCB1cGRhdGUgdGhlaXIKLSAgLy8gc3RvcmVkIGhlaWdodHMgdG8gbWF0Y2guCi0gIGZ1
bmN0aW9uIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5OwotICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2Lm9mZnNldFRv
cDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykgewot
ICAgICAgdmFyIGN1ciA9IGRpc3BsYXkudmlld1tpXSwgaGVpZ2h0OwotICAgICAgaWYgKGN1ci5o
aWRkZW4pIGNvbnRpbnVlOwotICAgICAgaWYgKGllX3VwdG83KSB7Ci0gICAgICAgIHZhciBib3Qg
PSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgIGhl
aWdodCA9IGJvdCAtIHByZXZCb3R0b207Ci0gICAgICAgIHByZXZCb3R0b20gPSBib3Q7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB2YXIgYm94ID0gY3VyLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7Ci0gICAgICAgIGhlaWdodCA9IGJveC5ib3R0b20gLSBib3gudG9wOwotICAgICAgfQot
ICAgICAgdmFyIGRpZmYgPSBjdXIubGluZS5oZWlnaHQgLSBoZWlnaHQ7Ci0gICAgICBpZiAoaGVp
Z2h0IDwgMikgaGVpZ2h0ID0gdGV4dEhlaWdodChkaXNwbGF5KTsKLSAgICAgIGlmIChkaWZmID4g
LjAwMSB8fCBkaWZmIDwgLS4wMDEpIHsKLSAgICAgICAgdXBkYXRlTGluZUhlaWdodChjdXIubGlu
ZSwgaGVpZ2h0KTsKLSAgICAgICAgdXBkYXRlV2lkZ2V0SGVpZ2h0KGN1ci5saW5lKTsKLSAgICAg
ICAgaWYgKGN1ci5yZXN0KSBmb3IgKHZhciBqID0gMDsgaiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisr
KQotICAgICAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdl
dHMgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAvLyBnaXZlbiBsaW5lLgotICBmdW5jdGlvbiB1cGRh
dGVXaWRnZXRIZWlnaHQobGluZSkgewotICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGkg
PSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgKytpKQotICAgICAgbGluZS53aWRnZXRzW2ld
LmhlaWdodCA9IGxpbmUud2lkZ2V0c1tpXS5ub2RlLm9mZnNldEhlaWdodDsKLSAgfQotCi0gIC8v
IERvIGEgYnVsay1yZWFkIG9mIHRoZSBET00gcG9zaXRpb25zIGFuZCBzaXplcyBuZWVkZWQgdG8g
ZHJhdyB0aGUKLSAgLy8gdmlldywgc28gdGhhdCB3ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcg
YW5kIHdyaXRpbmcgdG8gdGhlIERPTS4KLSAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgewot
ICAgIHZhciBkID0gY20uZGlzcGxheSwgbGVmdCA9IHt9LCB3aWR0aCA9IHt9OwotICAgIGZvciAo
dmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5n
LCArK2kpIHsKLSAgICAgIGxlZnRbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0TGVm
dDsKLSAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldFdpZHRoOwot
ICAgIH0KLSAgICByZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwKLSAg
ICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCwKLSAgICAg
ICAgICAgIGd1dHRlckxlZnQ6IGxlZnQsCi0gICAgICAgICAgICBndXR0ZXJXaWR0aDogd2lkdGgs
Ci0gICAgICAgICAgICB3cmFwcGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH07Ci0gIH0K
LQotICAvLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxh
eS52aWV3LCByZW1vdmluZwotICAvLyBub2RlcyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2Vy
IGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25lcwotICAvLyB0aGF0IGFyZSBub3QgdGhlcmUg
eWV0LCBhbmQgdXBkYXRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgb3V0IG9mCi0gIC8vIGRhdGUuCi0g
IGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVyc0Zyb20sIGRpbXMpIHsKLSAg
ICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxpbmVOdW1iZXJzID0gY20ub3B0aW9ucy5saW5l
TnVtYmVyczsKLSAgICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250
YWluZXIuZmlyc3RDaGlsZDsKLQotICAgIGZ1bmN0aW9uIHJtKG5vZGUpIHsKLSAgICAgIHZhciBu
ZXh0ID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNj
cm9sbCBidWcgaW4gT1MgWCBXZWJraXQKLSAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRp
c3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUpCi0gICAgICAgIG5vZGUuc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKLSAgICAgIGVsc2UKLSAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKG5vZGUpOwotICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgfQotCi0gICAgdmFyIHZpZXcg
PSBkaXNwbGF5LnZpZXcsIGxpbmVOID0gZGlzcGxheS52aWV3RnJvbTsKLSAgICAvLyBMb29wIG92
ZXIgdGhlIGVsZW1lbnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2Rlcwot
ICAgIC8vIGluIGRpc3BsYXkubGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby4KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBsaW5lVmll
dyA9IHZpZXdbaV07Ci0gICAgICBpZiAobGluZVZpZXcuaGlkZGVuKSB7Ci0gICAgICB9IGVsc2Ug
aWYgKCFsaW5lVmlldy5ub2RlKSB7IC8vIE5vdCBkcmF3biB5ZXQKLSAgICAgICAgdmFyIG5vZGUg
PSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwotICAgICAgICBj
b250YWluZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGN1cik7Ci0gICAgICB9IGVsc2UgeyAvLyBBbHJl
YWR5IGRyYXduCi0gICAgICAgIHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgY3VyID0gcm0o
Y3VyKTsKLSAgICAgICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51
bWJlcnNGcm9tICE9IG51bGwgJiYKLSAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5l
TiAmJiBsaW5lVmlldy5saW5lTnVtYmVyOwotICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykg
ewotICAgICAgICAgIGlmIChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsICJndXR0ZXIiKSA+IC0x
KSB1cGRhdGVOdW1iZXIgPSBmYWxzZTsKLSAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhj
bSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXBkYXRl
TnVtYmVyKSB7Ci0gICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7
Ci0gICAgICAgICAgbGluZVZpZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpOwotICAgICAgICB9
Ci0gICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICB9Ci0gICAg
ICBsaW5lTiArPSBsaW5lVmlldy5zaXplOwotICAgIH0KLSAgICB3aGlsZSAoY3VyKSBjdXIgPSBy
bShjdXIpOwotICB9Ci0KLSAgLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMsIGEg
c3RyaW5nIGlzIGFkZGVkIHRvCi0gIC8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMgdXBkYXRlcyB0
aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgbGluZSdzCi0gIC8vIERPTSBzdHJ1Y3R1cmUuCi0gIGZ1
bmN0aW9uIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHsK
LSAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKyspIHsK
LSAgICAgIHZhciB0eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKLSAgICAgIGlmICh0eXBlID09
ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGlt
cyk7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2VzKGxp
bmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVXaWRn
ZXRzKGxpbmVWaWV3LCBkaW1zKTsKLSAgICB9Ci0gICAgbGluZVZpZXcuY2hhbmdlcyA9IG51bGw7
Ci0gIH0KLQotICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJh
Y2tncm91bmQgY2xhc3MgbmVlZCB0bwotICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0
cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2Ci0gIGZ1bmN0aW9uIGVuc3VyZUxp
bmVXcmFwcGVkKGxpbmVWaWV3KSB7Ci0gICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcu
dGV4dCkgewotICAgICAgbGluZVZpZXcubm9kZSA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiByZWxhdGl2ZSIpOwotICAgICAgaWYgKGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZSkK
LSAgICAgICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5u
b2RlLCBsaW5lVmlldy50ZXh0KTsKLSAgICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGlu
ZVZpZXcudGV4dCk7Ci0gICAgICBpZiAoaWVfdXB0bzcpIGxpbmVWaWV3Lm5vZGUuc3R5bGUueklu
ZGV4ID0gMjsKLSAgICB9Ci0gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7Ci0gIH0KLQotICBmdW5j
dGlvbiB1cGRhdGVMaW5lQmFja2dyb3VuZChsaW5lVmlldykgewotICAgIHZhciBjbHMgPSBsaW5l
Vmlldy5iZ0NsYXNzID8gbGluZVZpZXcuYmdDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLmJn
Q2xhc3MgfHwgIiIpIDogbGluZVZpZXcubGluZS5iZ0NsYXNzOwotICAgIGlmIChjbHMpIGNscyAr
PSAiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiOwotICAgIGlmIChsaW5lVmlldy5iYWNrZ3Jv
dW5kKSB7Ci0gICAgICBpZiAoY2xzKSBsaW5lVmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNs
czsKLSAgICAgIGVsc2UgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQobGluZVZpZXcuYmFja2dyb3VuZCk7IGxpbmVWaWV3LmJhY2tncm91bmQgPSBudWxsOyB9Ci0g
ICAgfSBlbHNlIGlmIChjbHMpIHsKLSAgICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQo
bGluZVZpZXcpOwotICAgICAgbGluZVZpZXcuYmFja2dyb3VuZCA9IHdyYXAuaW5zZXJ0QmVmb3Jl
KGVsdCgiZGl2IiwgbnVsbCwgY2xzKSwgd3JhcC5maXJzdENoaWxkKTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBXcmFwcGVyIGFyb3VuZCBidWlsZExpbmVDb250ZW50IHdoaWNoIHdpbGwgcmV1c2UgdGhl
IHN0cnVjdHVyZQotICAvLyBpbiBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgd2hlbiBwb3NzaWJs
ZS4KLSAgZnVuY3Rpb24gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7Ci0gICAgdmFyIGV4
dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDsKLSAgICBpZiAoZXh0ICYmIGV4dC5saW5l
ID09IGxpbmVWaWV3LmxpbmUpIHsKLSAgICAgIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9
IG51bGw7Ci0gICAgICBsaW5lVmlldy5tZWFzdXJlID0gZXh0Lm1lYXN1cmU7Ci0gICAgICByZXR1
cm4gZXh0LmJ1aWx0OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGlu
ZVZpZXcpOwotICB9Ci0KLSAgLy8gUmVkcmF3IHRoZSBsaW5lJ3MgdGV4dC4gSW50ZXJhY3RzIHdp
dGggdGhlIGJhY2tncm91bmQgYW5kIHRleHQKLSAgLy8gY2xhc3NlcyBiZWNhdXNlIHRoZSBtb2Rl
IG1heSBvdXRwdXQgdG9rZW5zIHRoYXQgaW5mbHVlbmNlIHRoZXNlCi0gIC8vIGNsYXNzZXMuCi0g
IGZ1bmN0aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykgewotICAgIHZhciBjbHMgPSBs
aW5lVmlldy50ZXh0LmNsYXNzTmFtZTsKLSAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChj
bSwgbGluZVZpZXcpOwotICAgIGlmIChsaW5lVmlldy50ZXh0ID09IGxpbmVWaWV3Lm5vZGUpIGxp
bmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7Ci0gICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJl
cGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpOwotICAgIGxpbmVWaWV3LnRleHQg
PSBidWlsdC5wcmU7Ci0gICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8
fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7Ci0gICAgICBsaW5lVmll
dy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzczsKLSAgICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1
aWx0LnRleHRDbGFzczsKLSAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKLSAgICB9
IGVsc2UgaWYgKGNscykgewotICAgICAgbGluZVZpZXcudGV4dC5jbGFzc05hbWUgPSBjbHM7Ci0g
ICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcpIHsKLSAg
ICB1cGRhdGVMaW5lQmFja2dyb3VuZChsaW5lVmlldyk7Ci0gICAgaWYgKGxpbmVWaWV3LmxpbmUu
d3JhcENsYXNzKQotICAgICAgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9
IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOwotICAgIGVsc2UgaWYgKGxpbmVWaWV3Lm5vZGUgIT0g
bGluZVZpZXcudGV4dCkKLSAgICAgIGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gIiI7Ci0gICAg
dmFyIHRleHRDbGFzcyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/IGxpbmVWaWV3LnRleHRDbGFzcyAr
ICIgIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5lLnRl
eHRDbGFzczsKLSAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IHRleHRDbGFzcyB8fCAiIjsK
LSAgfQotCi0gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwg
ZGltcykgewotICAgIGlmIChsaW5lVmlldy5ndXR0ZXIpIHsKLSAgICAgIGxpbmVWaWV3Lm5vZGUu
cmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyKTsKLSAgICAgIGxpbmVWaWV3Lmd1dHRlciA9IG51
bGw7Ci0gICAgfQotICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJz
OwotICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKLSAgICAgIHZh
ciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOwotICAgICAgdmFyIGd1dHRlcldy
YXAgPSBsaW5lVmlldy5ndXR0ZXIgPQotICAgICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwgInBvc2l0aW9uOiBhYnNvbHV0
ZTsgbGVmdDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5m
aXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJw
eCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlldy50ZXh0KTsKLSAgICAgIGlm
IChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1p
cnJvci1saW5lbnVtYmVycyJdKSkKLSAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRl
cldyYXAuYXBwZW5kQ2hpbGQoCi0gICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNt
Lm9wdGlvbnMsIGxpbmVOKSwKLSAgICAgICAgICAgICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBD
b2RlTWlycm9yLWd1dHRlci1lbHQiLAotICAgICAgICAgICAgICAibGVmdDogIiArIGRpbXMuZ3V0
dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdICsgInB4OyB3aWR0aDogIgotICAgICAg
ICAgICAgICArIGNtLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7Ci0gICAgICBp
ZiAobWFya2VycykgZm9yICh2YXIgayA9IDA7IGsgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3Ro
OyArK2spIHsKLSAgICAgICAgdmFyIGlkID0gY20ub3B0aW9ucy5ndXR0ZXJzW2tdLCBmb3VuZCA9
IG1hcmtlcnMuaGFzT3duUHJvcGVydHkoaWQpICYmIG1hcmtlcnNbaWRdOwotICAgICAgICBpZiAo
Zm91bmQpCi0gICAgICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3Vu
ZF0sICJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGltcy5ndXR0ZXJMZWZ0W2lkXSArICJweDsgd2lkdGg6ICIg
KyBkaW1zLmd1dHRlcldpZHRoW2lkXSArICJweCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiB1cGRhdGVMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgewotICAgIGlmIChs
aW5lVmlldy5hbGlnbmFibGUpIGxpbmVWaWV3LmFsaWduYWJsZSA9IG51bGw7Ci0gICAgZm9yICh2
YXIgbm9kZSA9IGxpbmVWaWV3Lm5vZGUuZmlyc3RDaGlsZCwgbmV4dDsgbm9kZTsgbm9kZSA9IG5l
eHQpIHsKLSAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgIGlmIChub2Rl
LmNsYXNzTmFtZSA9PSAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikKLSAgICAgICAgbGluZVZpZXcu
bm9kZS5yZW1vdmVDaGlsZChub2RlKTsKLSAgICB9Ci0gICAgaW5zZXJ0TGluZVdpZGdldHMobGlu
ZVZpZXcsIGRpbXMpOwotICB9Ci0KLSAgLy8gQnVpbGQgYSBsaW5lJ3MgRE9NIHJlcHJlc2VudGF0
aW9uIGZyb20gc2NyYXRjaAotICBmdW5jdGlvbiBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmll
dywgbGluZU4sIGRpbXMpIHsKLSAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGlu
ZVZpZXcpOwotICAgIGxpbmVWaWV3LnRleHQgPSBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOwot
ICAgIGlmIChidWlsdC5iZ0NsYXNzKSBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzczsK
LSAgICBpZiAoYnVpbHQudGV4dENsYXNzKSBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0
Q2xhc3M7Ci0KLSAgICB1cGRhdGVMaW5lQ2xhc3NlcyhsaW5lVmlldyk7Ci0gICAgdXBkYXRlTGlu
ZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsKLSAgICBpbnNlcnRMaW5lV2lkZ2V0
cyhsaW5lVmlldywgZGltcyk7Ci0gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7Ci0gIH0KLQotICAv
LyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVy
Z2VkIGJ5Ci0gIC8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZvciBhbGwgb2YgdGhl
bSBuZWVkIHRvIGJlIGRyYXduLgotICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmll
dywgZGltcykgewotICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LmxpbmUsIGxpbmVW
aWV3LCBkaW1zLCB0cnVlKTsKLSAgICBpZiAobGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7
IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgaW5zZXJ0TGluZVdpZGdldHNG
b3IobGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmUsIGxpbmVWaWV3LCBkaW1zLCBhbGxvd0Fi
b3ZlKSB7Ci0gICAgaWYgKCFsaW5lLndpZGdldHMpIHJldHVybjsKLSAgICB2YXIgd3JhcCA9IGVu
c3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKLSAgICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5l
LndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHdpZGdldCA9IHdzW2ld
LCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0
Iik7Ci0gICAgICBpZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5pZ25vcmVFdmVu
dHMgPSB0cnVlOwotICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZp
ZXcsIGRpbXMpOwotICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKQotICAgICAg
ICB3cmFwLmluc2VydEJlZm9yZShub2RlLCBsaW5lVmlldy5ndXR0ZXIgfHwgbGluZVZpZXcudGV4
dCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7Ci0gICAgICBz
aWduYWxMYXRlcih3aWRnZXQsICJyZWRyYXciKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBw
b3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykgewotICAgIGlm
ICh3aWRnZXQubm9IU2Nyb2xsKSB7Ci0gICAgICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5l
Vmlldy5hbGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7Ci0gICAgICB2YXIgd2lkdGggPSBkaW1z
LndyYXBwZXJXaWR0aDsKLSAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAi
cHgiOwotICAgICAgaWYgKCF3aWRnZXQuY292ZXJHdXR0ZXIpIHsKLSAgICAgICAgd2lkdGggLT0g
ZGltcy5ndXR0ZXJUb3RhbFdpZHRoOwotICAgICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0g
ZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IjsKLSAgICAgIH0KLSAgICAgIG5vZGUuc3R5bGUu
d2lkdGggPSB3aWR0aCArICJweCI7Ci0gICAgfQotICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIp
IHsKLSAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTsKLSAgICAgIG5vZGUuc3R5bGUucG9zaXRp
b24gPSAicmVsYXRpdmUiOwotICAgICAgaWYgKCF3aWRnZXQubm9IU2Nyb2xsKSBub2RlLnN0eWxl
Lm1hcmdpbkxlZnQgPSAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IjsKLSAgICB9Ci0gIH0K
LQotICAvLyBQT1NJVElPTiBPQkpFQ1QKLQotICAvLyBBIFBvcyBpbnN0YW5jZSByZXByZXNlbnRz
IGEgcG9zaXRpb24gd2l0aGluIHRoZSB0ZXh0LgotICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3Mg
PSBmdW5jdGlvbihsaW5lLCBjaCkgewotICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSBy
ZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCk7Ci0gICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9
IGNoOwotICB9OwotCi0gIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhl
eSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmUKLSAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBh
bmQgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgotICB2YXIgY21wID0gQ29kZU1pcnJvci5j
bXBQb3MgPSBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAt
IGIuY2g7IH07Ci0KLSAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHgu
Y2gpO30KLSAgZnVuY3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBi
IDogYTsgfQotICBmdW5jdGlvbiBtaW5Qb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/
IGEgOiBiOyB9Ci0KLSAgLy8gU0VMRUNUSU9OIC8gQ1VSU09SCi0KLSAgLy8gU2VsZWN0aW9uIG9i
amVjdHMgYXJlIGltbXV0YWJsZS4gQSBuZXcgb25lIGlzIGNyZWF0ZWQgZXZlcnkgdGltZQotICAv
LyB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuIEEgc2VsZWN0aW9uIGlzIG9uZSBvciBtb3JlIG5vbi1v
dmVybGFwcGluZwotICAvLyAoYW5kIG5vbi10b3VjaGluZykgcmFuZ2VzLCBzb3J0ZWQsIGFuZCBh
biBpbnRlZ2VyIHRoYXQgaW5kaWNhdGVzCi0gIC8vIHdoaWNoIG9uZSBpcyB0aGUgcHJpbWFyeSBz
ZWxlY3Rpb24gKHRoZSBvbmUgdGhhdCdzIHNjcm9sbGVkIGludG8KLSAgLy8gdmlldywgdGhhdCBn
ZXRDdXJzb3IgcmV0dXJucywgZXRjKS4KLSAgZnVuY3Rpb24gU2VsZWN0aW9uKHJhbmdlcywgcHJp
bUluZGV4KSB7Ci0gICAgdGhpcy5yYW5nZXMgPSByYW5nZXM7Ci0gICAgdGhpcy5wcmltSW5kZXgg
PSBwcmltSW5kZXg7Ci0gIH0KLQotICBTZWxlY3Rpb24ucHJvdG90eXBlID0gewotICAgIHByaW1h
cnk6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdOyB9LAot
ICAgIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSB0aGlzKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXgg
fHwgb3RoZXIucmFuZ2VzLmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgdmFyIGhlcmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNb
aV07Ci0gICAgICAgIGlmIChjbXAoaGVyZS5hbmNob3IsIHRoZXJlLmFuY2hvcikgIT0gMCB8fCBj
bXAoaGVyZS5oZWFkLCB0aGVyZS5oZWFkKSAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotICAgIGRlZXBDb3B5OiBmdW5jdGlvbigpIHsKLSAg
ICAgIGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsr
KQotICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0aGlzLnJhbmdlc1tpXS5hbmNo
b3IpLCBjb3B5UG9zKHRoaXMucmFuZ2VzW2ldLmhlYWQpKTsKLSAgICAgIHJldHVybiBuZXcgU2Vs
ZWN0aW9uKG91dCwgdGhpcy5wcmltSW5kZXgpOwotICAgIH0sCi0gICAgc29tZXRoaW5nU2VsZWN0
ZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5s
ZW5ndGg7IGkrKykKLSAgICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4g
dHJ1ZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotICAgIGNvbnRhaW5zOiBmdW5jdGlv
bihwb3MsIGVuZCkgewotICAgICAgaWYgKCFlbmQpIGVuZCA9IHBvczsKLSAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdl
ID0gdGhpcy5yYW5nZXNbaV07Ci0gICAgICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49
IDAgJiYgY21wKHBvcywgcmFuZ2UudG8oKSkgPD0gMCkKLSAgICAgICAgICByZXR1cm4gaTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUmFuZ2Uo
YW5jaG9yLCBoZWFkKSB7Ci0gICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhl
YWQ7Ci0gIH0KLQotICBSYW5nZS5wcm90b3R5cGUgPSB7Ci0gICAgZnJvbTogZnVuY3Rpb24oKSB7
IHJldHVybiBtaW5Qb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7IH0sCi0gICAgdG86IGZ1bmN0
aW9uKCkgeyByZXR1cm4gbWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9LAotICAgIGVt
cHR5OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLmhlYWQubGluZSA9PSB0aGlzLmFu
Y2hvci5saW5lICYmIHRoaXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaDsKLSAgICB9Ci0gIH07
Ci0KLSAgLy8gVGFrZSBhbiB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9m
IHJhbmdlcywgYW5kCi0gIC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVz
JyByYW5nZXMgYXJyYXkgKG1vZGlmeWluZwotICAvLyBpdCkuCi0gIGZ1bmN0aW9uIG5vcm1hbGl6
ZVNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCkgewotICAgIHZhciBwcmltID0gcmFuZ2VzW3By
aW1JbmRleF07Ci0gICAgcmFuZ2VzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gY21wKGEu
ZnJvbSgpLCBiLmZyb20oKSk7IH0pOwotICAgIHByaW1JbmRleCA9IGluZGV4T2YocmFuZ2VzLCBw
cmltKTsKLSAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAg
ICAgdmFyIGN1ciA9IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07Ci0gICAgICBpZiAo
Y21wKHByZXYudG8oKSwgY3VyLmZyb20oKSkgPj0gMCkgewotICAgICAgICB2YXIgZnJvbSA9IG1p
blBvcyhwcmV2LmZyb20oKSwgY3VyLmZyb20oKSksIHRvID0gbWF4UG9zKHByZXYudG8oKSwgY3Vy
LnRvKCkpOwotICAgICAgICB2YXIgaW52ID0gcHJldi5lbXB0eSgpID8gY3VyLmZyb20oKSA9PSBj
dXIuaGVhZCA6IHByZXYuZnJvbSgpID09IHByZXYuaGVhZDsKLSAgICAgICAgaWYgKGkgPD0gcHJp
bUluZGV4KSAtLXByaW1JbmRleDsKLSAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBS
YW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpOwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCk7Ci0gIH0KLQotICBm
dW5jdGlvbiBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSB7Ci0gICAgcmV0dXJuIG5ldyBT
ZWxlY3Rpb24oW25ldyBSYW5nZShhbmNob3IsIGhlYWQgfHwgYW5jaG9yKV0sIDApOwotICB9Ci0K
LSAgLy8gTW9zdCBvZiB0aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBt
YWtlIHN1cmUgdGhleQotICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50Lgot
ICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBN
YXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKTt9Ci0gIGZ1bmN0aW9uIGNsaXBQ
b3MoZG9jLCBwb3MpIHsKLSAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QpIHJldHVybiBQb3Mo
ZG9jLmZpcnN0LCAwKTsKLSAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsK
LSAgICBpZiAocG9zLmxpbmUgPiBsYXN0KSByZXR1cm4gUG9zKGxhc3QsIGdldExpbmUoZG9jLCBs
YXN0KS50ZXh0Lmxlbmd0aCk7Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9j
LCBwb3MubGluZSkudGV4dC5sZW5ndGgpOwotICB9Ci0gIGZ1bmN0aW9uIGNsaXBUb0xlbihwb3Ms
IGxpbmVsZW4pIHsKLSAgICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgaWYgKGNoID09IG51bGwgfHwg
Y2ggPiBsaW5lbGVuKSByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKTsKLSAgICBlbHNlIGlm
IChjaCA8IDApIHJldHVybiBQb3MocG9zLmxpbmUsIDApOwotICAgIGVsc2UgcmV0dXJuIHBvczsK
LSAgfQotICBmdW5jdGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYm
IGwgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZTt9Ci0gIGZ1bmN0aW9uIGNsaXBQb3NBcnJheShkb2Ms
IGFycmF5KSB7Ci0gICAgZm9yICh2YXIgb3V0ID0gW10sIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3Ro
OyBpKyspIG91dFtpXSA9IGNsaXBQb3MoZG9jLCBhcnJheVtpXSk7Ci0gICAgcmV0dXJuIG91dDsK
LSAgfQotCi0gIC8vIFNFTEVDVElPTiBVUERBVEVTCi0KLSAgLy8gVGhlICdzY3JvbGwnIHBhcmFt
ZXRlciBnaXZlbiB0byBtYW55IG9mIHRoZXNlIGluZGljYXRlZCB3aGV0aGVyCi0gIC8vIHRoZSBu
ZXcgY3Vyc29yIHBvc2l0aW9uIHNob3VsZCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcgYWZ0ZXIKLSAg
Ly8gbW9kaWZ5aW5nIHRoZSBzZWxlY3Rpb24uCi0KLSAgLy8gSWYgc2hpZnQgaXMgaGVsZCBvciB0
aGUgZXh0ZW5kIGZsYWcgaXMgc2V0LCBleHRlbmRzIGEgcmFuZ2UgdG8KLSAgLy8gaW5jbHVkZSBh
IGdpdmVuIHBvc2l0aW9uIChhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBwb3NpdGlvbikuCi0gIC8v
IE90aGVyd2lzZSwgc2ltcGx5IHJldHVybnMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIGdpdmVuIHBv
c2l0aW9ucy4KLSAgLy8gVXNlZCBmb3IgY3Vyc29yIG1vdGlvbiBhbmQgc3VjaC4KLSAgZnVuY3Rp
b24gZXh0ZW5kUmFuZ2UoZG9jLCByYW5nZSwgaGVhZCwgb3RoZXIpIHsKLSAgICBpZiAoZG9jLmNt
ICYmIGRvYy5jbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpIHsKLSAgICAgIHZhciBhbmNo
b3IgPSByYW5nZS5hbmNob3I7Ci0gICAgICBpZiAob3RoZXIpIHsKLSAgICAgICAgdmFyIHBvc0Jl
Zm9yZSA9IGNtcChoZWFkLCBhbmNob3IpIDwgMDsKLSAgICAgICAgaWYgKHBvc0JlZm9yZSAhPSAo
Y21wKG90aGVyLCBhbmNob3IpIDwgMCkpIHsKLSAgICAgICAgICBhbmNob3IgPSBoZWFkOwotICAg
ICAgICAgIGhlYWQgPSBvdGhlcjsKLSAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNt
cChoZWFkLCBvdGhlcikgPCAwKSkgewotICAgICAgICAgIGhlYWQgPSBvdGhlcjsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBSYW5nZShhbmNob3IsIGhlYWQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICByZXR1cm4gbmV3IFJhbmdlKG90aGVyIHx8IGhlYWQsIGhlYWQpOwotICAg
IH0KLSAgfQotCi0gIC8vIEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gcmFuZ2UsIGRpc2Nh
cmQgdGhlIHJlc3QuCi0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVy
LCBvcHRpb25zKSB7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbZXh0ZW5k
UmFuZ2UoZG9jLCBkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIpXSwgMCksIG9wdGlvbnMp
OwotICB9Ci0KLSAgLy8gRXh0ZW5kIGFsbCBzZWxlY3Rpb25zIChwb3MgaXMgYW4gYXJyYXkgb2Yg
c2VsZWN0aW9ucyB3aXRoIGxlbmd0aAotICAvLyBlcXVhbCB0aGUgbnVtYmVyIG9mIHNlbGVjdGlv
bnMpCi0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykgewot
ICAgIGZvciAodmFyIG91dCA9IFtdLCBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsg
aSsrKQotICAgICAgb3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLCBkb2Muc2VsLnJhbmdlc1tpXSwg
aGVhZHNbaV0sIG51bGwpOwotICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0
LCBkb2Muc2VsLnByaW1JbmRleCk7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3U2VsLCBvcHRp
b25zKTsKLSAgfQotCi0gIC8vIFVwZGF0ZXMgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIHNlbGVjdGlv
bi4KLSAgZnVuY3Rpb24gcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGksIHJhbmdlLCBvcHRpb25z
KSB7Ci0gICAgdmFyIHJhbmdlcyA9IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApOwotICAgIHJhbmdl
c1tpXSA9IHJhbmdlOwotICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihy
YW5nZXMsIGRvYy5zZWwucHJpbUluZGV4KSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvLyBSZXNldCB0
aGUgc2VsZWN0aW9uIHRvIGEgc2luZ2xlIHJhbmdlLgotICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxl
Y3Rpb24oZG9jLCBhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKLSAgICBzZXRTZWxlY3Rpb24oZG9j
LCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvLyBH
aXZlIGJlZm9yZVNlbGVjdGlvbkNoYW5nZSBoYW5kbGVycyBhIGNoYW5nZSB0byBpbmZsdWVuY2Ug
YQotICAvLyBzZWxlY3Rpb24gdXBkYXRlLgotICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFu
Z2UoZG9jLCBzZWwpIHsKLSAgICB2YXIgb2JqID0gewotICAgICAgcmFuZ2VzOiBzZWwucmFuZ2Vz
LAotICAgICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHsKLSAgICAgICAgdGhpcy5yYW5nZXMg
PSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgdGhpcy5yYW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tp
XS5hbmNob3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3Mo
ZG9jLCByYW5nZXNbaV0uaGVhZCkpOwotICAgICAgfQotICAgIH07Ci0gICAgc2lnbmFsKGRvYywg
ImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsIGRvYywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWdu
YWwoZG9jLmNtLCAiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIiwgZG9jLmNtLCBvYmopOwotICAgIGlm
IChvYmoucmFuZ2VzICE9IHNlbC5yYW5nZXMpIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob2Jq
LnJhbmdlcywgb2JqLnJhbmdlcy5sZW5ndGggLSAxKTsKLSAgICBlbHNlIHJldHVybiBzZWw7Ci0g
IH0KLQotICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShkb2MsIHNlbCwgb3B0
aW9ucykgewotICAgIHZhciBkb25lID0gZG9jLmhpc3RvcnkuZG9uZSwgbGFzdCA9IGxzdChkb25l
KTsKLSAgICBpZiAobGFzdCAmJiBsYXN0LnJhbmdlcykgewotICAgICAgZG9uZVtkb25lLmxlbmd0
aCAtIDFdID0gc2VsOwotICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25z
KTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsLCBvcHRpb25zKTsK
LSAgICB9Ci0gIH0KLQotICAvLyBTZXQgYSBuZXcgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBzZXRT
ZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHsKLSAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9j
LCBzZWwsIG9wdGlvbnMpOwotICAgIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIGRvYy5zZWws
IGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTiwgb3B0aW9ucyk7Ci0gIH0KLQotICBmdW5j
dGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHsKLSAgICBpZiAoaGFz
SGFuZGxlcihkb2MsICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFu
ZGxlcihkb2MuY20sICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSkKLSAgICAgIHNlbCA9IGZpbHRl
clNlbGVjdGlvbkNoYW5nZShkb2MsIHNlbCk7Ci0KLSAgICB2YXIgYmlhcyA9IG9wdGlvbnMgJiYg
b3B0aW9ucy5iaWFzIHx8Ci0gICAgICAoY21wKHNlbC5wcmltYXJ5KCkuaGVhZCwgZG9jLnNlbC5w
cmltYXJ5KCkuaGVhZCkgPCAwID8gLTEgOiAxKTsKLSAgICBzZXRTZWxlY3Rpb25Jbm5lcihkb2Ms
IHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgdHJ1ZSkpOwotCi0gICAgaWYg
KCEob3B0aW9ucyAmJiBvcHRpb25zLnNjcm9sbCA9PT0gZmFsc2UpICYmIGRvYy5jbSkKLSAgICAg
IGVuc3VyZUN1cnNvclZpc2libGUoZG9jLmNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldFNlbGVj
dGlvbklubmVyKGRvYywgc2VsKSB7Ci0gICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHJldHVy
bjsKLQotICAgIGRvYy5zZWwgPSBzZWw7Ci0KLSAgICBpZiAoZG9jLmNtKSB7Ci0gICAgICBkb2Mu
Y20uY3VyT3AudXBkYXRlSW5wdXQgPSBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRy
dWU7Ci0gICAgICBzaWduYWxDdXJzb3JBY3Rpdml0eShkb2MuY20pOwotICAgIH0KLSAgICBzaWdu
YWxMYXRlcihkb2MsICJjdXJzb3JBY3Rpdml0eSIsIGRvYyk7Ci0gIH0KLQotICAvLyBWZXJpZnkg
dGhhdCB0aGUgc2VsZWN0aW9uIGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pYwot
ICAvLyBtYXJrZWQgcmFuZ2VzLgotICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGRvYykgewot
ICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9j
LnNlbCwgbnVsbCwgZmFsc2UpLCBzZWxfZG9udFNjcm9sbCk7Ci0gIH0KLQotICAvLyBSZXR1cm4g
YSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5vdCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKLSAg
Ly8gcmFuZ2VzLgotICBmdW5jdGlvbiBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJp
YXMsIG1heUNsZWFyKSB7Ci0gICAgdmFyIG91dDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNl
bC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07
Ci0gICAgICB2YXIgbmV3QW5jaG9yID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgYmlh
cywgbWF5Q2xlYXIpOwotICAgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2Uu
aGVhZCwgYmlhcywgbWF5Q2xlYXIpOwotICAgICAgaWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFu
Z2UuYW5jaG9yIHx8IG5ld0hlYWQgIT0gcmFuZ2UuaGVhZCkgewotICAgICAgICBpZiAoIW91dCkg
b3V0ID0gc2VsLnJhbmdlcy5zbGljZSgwLCBpKTsKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdl
KG5ld0FuY2hvciwgbmV3SGVhZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvdXQgPyBu
b3JtYWxpemVTZWxlY3Rpb24ob3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbDsKLSAgfQotCi0gIC8v
IEVuc3VyZSBhIGdpdmVuIHBvc2l0aW9uIGlzIG5vdCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLgot
ICBmdW5jdGlvbiBza2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCBtYXlDbGVhcikgewotICAgIHZh
ciBmbGlwcGVkID0gZmFsc2UsIGN1clBvcyA9IHBvczsKLSAgICB2YXIgZGlyID0gYmlhcyB8fCAx
OwotICAgIGRvYy5jYW50RWRpdCA9IGZhbHNlOwotICAgIHNlYXJjaDogZm9yICg7OykgewotICAg
ICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpOwotICAgICAgaWYgKGxpbmUu
bWFya2VkU3BhbnMpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNw
YW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tp
XSwgbSA9IHNwLm1hcmtlcjsKLSAgICAgICAgICBpZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5p
bmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8PSBjdXJQb3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNo
KSkgJiYKLSAgICAgICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQg
PyBzcC50byA+PSBjdXJQb3MuY2ggOiBzcC50byA+IGN1clBvcy5jaCkpKSB7Ci0gICAgICAgICAg
ICBpZiAobWF5Q2xlYXIpIHsKLSAgICAgICAgICAgICAgc2lnbmFsKG0sICJiZWZvcmVDdXJzb3JF
bnRlciIpOwotICAgICAgICAgICAgICBpZiAobS5leHBsaWNpdGx5Q2xlYXJlZCkgewotICAgICAg
ICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFucykgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7LS1pOyBjb250aW51ZTt9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghbS5hdG9taWMpIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIG5ld1Bv
cyA9IG0uZmluZChkaXIgPCAwID8gLTEgOiAxKTsKLSAgICAgICAgICAgIGlmIChjbXAobmV3UG9z
LCBjdXJQb3MpID09IDApIHsKLSAgICAgICAgICAgICAgbmV3UG9zLmNoICs9IGRpcjsKLSAgICAg
ICAgICAgICAgaWYgKG5ld1Bvcy5jaCA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UG9z
LmxpbmUgPiBkb2MuZmlyc3QpIG5ld1BvcyA9IGNsaXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUg
LSAxKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOwotICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+IGxpbmUudGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobmV3UG9zLmxpbmUgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9
IFBvcyhuZXdQb3MubGluZSArIDEsIDApOwotICAgICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0g
bnVsbDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoIW5ld1BvcykgewotICAg
ICAgICAgICAgICAgIGlmIChmbGlwcGVkKSB7Ci0gICAgICAgICAgICAgICAgICAvLyBEcml2ZW4g
aW4gYSBjb3JuZXIgLS0gbm8gdmFsaWQgY3Vyc29yIHBvc2l0aW9uIGZvdW5kIGF0IGFsbAotICAg
ICAgICAgICAgICAgICAgLy8gLS0gdHJ5IGFnYWluICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlk
bid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgIGlmICghbWF5Q2xlYXIpIHJldHVybiBza2lw
QXRvbWljKGRvYywgcG9zLCBiaWFzLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgdHVybiBvZmYgZWRpdGluZyB1bnRpbCBmdXJ0aGVyIG5vdGljZSwgYW5kIHJldHVybiB0
aGUgc3RhcnQgb2YgdGhlIGRvYwotICAgICAgICAgICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBQb3MoZG9jLmZpcnN0LCAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmxpcHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsg
ZGlyID0gLWRpcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y3VyUG9zID0gbmV3UG9zOwotICAgICAgICAgICAgY29udGludWUgc2VhcmNoOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGN1clBvczsKLSAgICB9Ci0gIH0K
LQotICAvLyBTRUxFQ1RJT04gRFJBV0lORwotCi0gIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFu
ZC9vciBjdXJzb3IKLSAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uKGNtKSB7Ci0gICAgdmFyIGRp
c3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAgdmFyIGN1ckZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIHZhciBzZWxGcmFnbWVudCA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IGRv
Yy5zZWwucmFuZ2VzW2ldOwotICAgICAgdmFyIGNvbGxhcHNlZCA9IHJhbmdlLmVtcHR5KCk7Ci0g
ICAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmcp
Ci0gICAgICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLCBjdXJGcmFnbWVudCk7Ci0g
ICAgICBpZiAoIWNvbGxhcHNlZCkKLSAgICAgICAgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5n
ZSwgc2VsRnJhZ21lbnQpOwotICAgIH0KLQotICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJl
YSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzCi0gICAgaWYg
KGNtLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikgewotICAgICAgdmFyIGhlYWRQb3MgPSBj
dXJzb3JDb29yZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKTsKLSAgICAgIHZh
ciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5l
T2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgdmFy
IHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQg
LSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCAr
IGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTsKLSAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgo
MCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVmdCAt
IHdyYXBPZmYubGVmdCkpOwotICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSB0b3Ag
KyAicHgiOwotICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7
Ci0gICAgfQotCi0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JEaXYsIGN1
ckZyYWdtZW50KTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRp
diwgc2VsRnJhZ21lbnQpOwotICB9Ci0KLSAgLy8gRHJhd3MgYSBjdXJzb3IgZm9yIHRoZSBnaXZl
biByYW5nZQotICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5nZSwgb3V0cHV0
KSB7Ci0gICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVhZCwgImRpdiIpOwot
Ci0gICAgdmFyIGN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAi
LCAiQ29kZU1pcnJvci1jdXJzb3IiKSk7Ci0gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVm
dCArICJweCI7Ci0gICAgY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOwotICAgIGN1
cnNvci5zdHlsZS5oZWlnaHQgPSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBj
bS5vcHRpb25zLmN1cnNvckhlaWdodCArICJweCI7Ci0KLSAgICBpZiAocG9zLm90aGVyKSB7Ci0g
ICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRp
cmVjdGlvbmFsIHRleHQKLSAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGls
ZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNv
bmRhcnljdXJzb3IiKSk7Ci0gICAgICBvdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0g
ICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyAicHgiOwotICAg
ICAgb3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7Ci0gICAgICBv
dGhlckN1cnNvci5zdHlsZS5oZWlnaHQgPSAocG9zLm90aGVyLmJvdHRvbSAtIHBvcy5vdGhlci50
b3ApICogLjg1ICsgInB4IjsKLSAgICB9Ci0gIH0KLQotICAvLyBEcmF3cyB0aGUgZ2l2ZW4gcmFu
Z2UgYXMgYSBoaWdobGlnaHRlZCBzZWxlY3Rpb24KLSAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJh
bmdlKGNtLCByYW5nZSwgb3V0cHV0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBk
b2MgPSBjbS5kb2M7Ci0gICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpOwotICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRT
aWRlID0gcGFkZGluZy5sZWZ0LCByaWdodFNpZGUgPSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRX
aWR0aCAtIHBhZGRpbmcucmlnaHQ7Ci0KLSAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0
aCwgYm90dG9tKSB7Ci0gICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKLSAgICAgIHRvcCA9IE1h
dGgucm91bmQodG9wKTsKLSAgICAgIGJvdHRvbSA9IE1hdGgucm91bmQoYm90dG9tKTsKLSAgICAg
IGZyYWdtZW50LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2VsZWN0
ZWQiLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiICsgbGVmdCArCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7IHdpZHRoOiAiICsgKHdp
ZHRoID09IG51bGwgPyByaWdodFNpZGUgLSBsZWZ0IDogd2lkdGgpICsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0b3ApICsgInB4Iikp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJn
KSB7Ci0gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICAgIHZhciBs
aW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAgICAgIHZhciBzdGFydCwgZW5kOwotICAg
ICAgZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7Ci0gICAgICAgIHJldHVybiBjaGFyQ29vcmRz
KGNtLCBQb3MobGluZSwgY2gpLCAiZGl2IiwgbGluZU9iaiwgYmlhcyk7Ci0gICAgICB9Ci0KLSAg
ICAgIGl0ZXJhdGVCaWRpU2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwgMCwg
dG9BcmcgPT0gbnVsbCA/IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24oZnJvbSwgdG8sIGRpcikg
ewotICAgICAgICB2YXIgbGVmdFBvcyA9IGNvb3Jkcyhmcm9tLCAibGVmdCIpLCByaWdodFBvcywg
bGVmdCwgcmlnaHQ7Ci0gICAgICAgIGlmIChmcm9tID09IHRvKSB7Ci0gICAgICAgICAgcmlnaHRQ
b3MgPSBsZWZ0UG9zOwotICAgICAgICAgIGxlZnQgPSByaWdodCA9IGxlZnRQb3MubGVmdDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0byAtIDEsICJyaWdo
dCIpOwotICAgICAgICAgIGlmIChkaXIgPT0gInJ0bCIpIHsgdmFyIHRtcCA9IGxlZnRQb3M7IGxl
ZnRQb3MgPSByaWdodFBvczsgcmlnaHRQb3MgPSB0bXA7IH0KLSAgICAgICAgICBsZWZ0ID0gbGVm
dFBvcy5sZWZ0OwotICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBsZWZ0U2lk
ZTsKLSAgICAgICAgaWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZm
ZXJlbnQgbGluZXMsIGRyYXcgdG9wIHBhcnQKLSAgICAgICAgICBhZGQobGVmdCwgbGVmdFBvcy50
b3AsIG51bGwsIGxlZnRQb3MuYm90dG9tKTsKLSAgICAgICAgICBsZWZ0ID0gbGVmdFNpZGU7Ci0g
ICAgICAgICAgaWYgKGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVmdCwgbGVm
dFBvcy5ib3R0b20sIG51bGwsIHJpZ2h0UG9zLnRvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSByaWdodFNpZGU7Ci0gICAg
ICAgIGlmICghc3RhcnQgfHwgbGVmdFBvcy50b3AgPCBzdGFydC50b3AgfHwgbGVmdFBvcy50b3Ag
PT0gc3RhcnQudG9wICYmIGxlZnRQb3MubGVmdCA8IHN0YXJ0LmxlZnQpCi0gICAgICAgICAgc3Rh
cnQgPSBsZWZ0UG9zOwotICAgICAgICBpZiAoIWVuZCB8fCByaWdodFBvcy5ib3R0b20gPiBlbmQu
Ym90dG9tIHx8IHJpZ2h0UG9zLmJvdHRvbSA9PSBlbmQuYm90dG9tICYmIHJpZ2h0UG9zLnJpZ2h0
ID4gZW5kLnJpZ2h0KQotICAgICAgICAgIGVuZCA9IHJpZ2h0UG9zOwotICAgICAgICBpZiAobGVm
dCA8IGxlZnRTaWRlICsgMSkgbGVmdCA9IGxlZnRTaWRlOwotICAgICAgICBhZGQobGVmdCwgcmln
aHRQb3MudG9wLCByaWdodCAtIGxlZnQsIHJpZ2h0UG9zLmJvdHRvbSk7Ci0gICAgICB9KTsKLSAg
ICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07Ci0gICAgfQotCi0gICAgdmFyIHNG
cm9tID0gcmFuZ2UuZnJvbSgpLCBzVG8gPSByYW5nZS50bygpOwotICAgIGlmIChzRnJvbS5saW5l
ID09IHNUby5saW5lKSB7Ci0gICAgICBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwg
c1RvLmNoKTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIGZyb21MaW5lID0gZ2V0TGluZShkb2Ms
IHNGcm9tLmxpbmUpLCB0b0xpbmUgPSBnZXRMaW5lKGRvYywgc1RvLmxpbmUpOwotICAgICAgdmFy
IHNpbmdsZVZMaW5lID0gdmlzdWFsTGluZShmcm9tTGluZSkgPT0gdmlzdWFsTGluZSh0b0xpbmUp
OwotICAgICAgdmFyIGxlZnRFbmQgPSBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwg
c2luZ2xlVkxpbmUgPyBmcm9tTGluZS50ZXh0Lmxlbmd0aCArIDEgOiBudWxsKS5lbmQ7Ci0gICAg
ICB2YXIgcmlnaHRTdGFydCA9IGRyYXdGb3JMaW5lKHNUby5saW5lLCBzaW5nbGVWTGluZSA/IDAg
OiBudWxsLCBzVG8uY2gpLnN0YXJ0OwotICAgICAgaWYgKHNpbmdsZVZMaW5lKSB7Ci0gICAgICAg
IGlmIChsZWZ0RW5kLnRvcCA8IHJpZ2h0U3RhcnQudG9wIC0gMikgewotICAgICAgICAgIGFkZChs
ZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLnRvcCwgbnVsbCwgbGVmdEVuZC5ib3R0b20pOwotICAgICAg
ICAgIGFkZChsZWZ0U2lkZSwgcmlnaHRTdGFydC50b3AsIHJpZ2h0U3RhcnQubGVmdCwgcmlnaHRT
dGFydC5ib3R0b20pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFkZChsZWZ0RW5kLnJp
Z2h0LCBsZWZ0RW5kLnRvcCwgcmlnaHRTdGFydC5sZWZ0IC0gbGVmdEVuZC5yaWdodCwgbGVmdEVu
ZC5ib3R0b20pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAobGVmdEVuZC5ib3R0b20g
PCByaWdodFN0YXJ0LnRvcCkKLSAgICAgICAgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwg
bnVsbCwgcmlnaHRTdGFydC50b3ApOwotICAgIH0KLQotICAgIG91dHB1dC5hcHBlbmRDaGlsZChm
cmFnbWVudCk7Ci0gIH0KLQotICAvLyBDdXJzb3ItYmxpbmtpbmcKLSAgZnVuY3Rpb24gcmVzdGFy
dEJsaW5rKGNtKSB7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSByZXR1cm47Ci0gICAgdmFy
IGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGNsZWFySW50ZXJ2YWwoZGlzcGxheS5ibGlua2Vy
KTsKLSAgICB2YXIgb24gPSB0cnVlOwotICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2li
aWxpdHkgPSAiIjsKLSAgICBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPiAwKQotICAg
ICAgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRp
c3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlk
ZGVuIjsKLSAgICAgIH0sIGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlKTsKLSAgfQotCi0gIC8v
IEhJR0hMSUdIVCBXT1JLRVIKLQotICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkgewot
ICAgIGlmIChjbS5kb2MubW9kZS5zdGFydFN0YXRlICYmIGNtLmRvYy5mcm9udGllciA8IGNtLmRp
c3BsYXkudmlld1RvKQotICAgICAgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhp
Z2hsaWdodFdvcmtlciwgY20pKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihj
bSkgewotICAgIHZhciBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKGRvYy5mcm9udGllciA8IGRvYy5m
aXJzdCkgZG9jLmZyb250aWVyID0gZG9jLmZpcnN0OwotICAgIGlmIChkb2MuZnJvbnRpZXIgPj0g
Y20uZGlzcGxheS52aWV3VG8pIHJldHVybjsKLSAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20u
b3B0aW9ucy53b3JrVGltZTsKLSAgICB2YXIgc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIGdl
dFN0YXRlQmVmb3JlKGNtLCBkb2MuZnJvbnRpZXIpKTsKLQotICAgIHJ1bkluT3AoY20sIGZ1bmN0
aW9uKCkgewotICAgIGRvYy5pdGVyKGRvYy5mcm9udGllciwgTWF0aC5taW4oZG9jLmZpcnN0ICsg
ZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24obGluZSkgewotICAg
ICAgaWYgKGRvYy5mcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFZpc2libGUK
LSAgICAgICAgdmFyIG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzOwotICAgICAgICB2YXIgaGlnaGxp
Z2h0ZWQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgIGxp
bmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzOwotICAgICAgICBpZiAoaGlnaGxpZ2h0ZWQu
Y2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSBoaWdobGlnaHRlZC5jbGFzc2VzOwotICAgICAg
ICBlbHNlIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOwot
ICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0g
bGluZS5zdHlsZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgIWlzY2hhbmdlICYm
IGkgPCBvbGRTdHlsZXMubGVuZ3RoOyArK2kpIGlzY2hhbmdlID0gb2xkU3R5bGVzW2ldICE9IGxp
bmUuc3R5bGVzW2ldOwotICAgICAgICBpZiAoaXNjaGFuZ2UpIHJlZ0xpbmVDaGFuZ2UoY20sIGRv
Yy5mcm9udGllciwgInRleHQiKTsKLSAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRl
KGRvYy5tb2RlLCBzdGF0ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcm9jZXNzTGluZShj
bSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGRvYy5mcm9u
dGllciAlIDUgPT0gMCA/IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpIDogbnVsbDsKLSAgICAg
IH0KLSAgICAgICsrZG9jLmZyb250aWVyOwotICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewot
ICAgICAgICBzdGFydFdvcmtlcihjbSwgY20ub3B0aW9ucy53b3JrRGVsYXkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIEZpbmRz
IHRoZSBsaW5lIHRvIHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwot
ICAvLyBmaW5kIGEgbGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQg
d2l0aCBhCi0gIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBs
aW5lIHdpdGggdGhlCi0gIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBu
ZWVkIHRoZSBsZWFzdCBjb250ZXh0IHRvCi0gIC8vIHBhcnNlIGNvcnJlY3RseS4KLSAgZnVuY3Rp
b24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBtaW5pbmRlbnQsIG1p
bmxpbmUsIGRvYyA9IGNtLmRvYzsKLSAgICB2YXIgbGltID0gcHJlY2lzZSA/IC0xIDogbiAtIChj
bS5kb2MubW9kZS5pbm5lck1vZGUgPyAxMDAwIDogMTAwKTsKLSAgICBmb3IgKHZhciBzZWFyY2gg
PSBuOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7Ci0gICAgICBpZiAoc2VhcmNoIDw9IGRvYy5m
aXJzdCkgcmV0dXJuIGRvYy5maXJzdDsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNl
YXJjaCAtIDEpOwotICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlciAmJiAoIXByZWNpc2UgfHwgc2Vh
cmNoIDw9IGRvYy5mcm9udGllcikpIHJldHVybiBzZWFyY2g7Ci0gICAgICB2YXIgaW5kZW50ZWQg
PSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6ZSk7Ci0gICAg
ICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7Ci0gICAgICAg
IG1pbmxpbmUgPSBzZWFyY2ggLSAxOwotICAgICAgICBtaW5pbmRlbnQgPSBpbmRlbnRlZDsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1pbmxpbmU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRT
dGF0ZUJlZm9yZShjbSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5OwotICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRy
dWU7Ci0gICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9
IHBvcyA+IGRvYy5maXJzdCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7Ci0gICAg
aWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRlKGRvYy5tb2RlKTsKLSAgICBlbHNlIHN0YXRl
ID0gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSk7Ci0gICAgZG9jLml0ZXIocG9zLCBuLCBmdW5j
dGlvbihsaW5lKSB7Ci0gICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0g
ICAgICB2YXIgc2F2ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRp
c3BsYXkudmlld0Zyb20gJiYgcG9zIDwgZGlzcGxheS52aWV3VG87Ci0gICAgICBsaW5lLnN0YXRl
QWZ0ZXIgPSBzYXZlID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwotICAgICAg
Kytwb3M7Ci0gICAgfSk7Ci0gICAgaWYgKHByZWNpc2UpIGRvYy5mcm9udGllciA9IHBvczsKLSAg
ICByZXR1cm4gc3RhdGU7Ci0gIH0KLQotICAvLyBQT1NJVElPTiBNRUFTVVJFTUVOVAotCi0gIGZ1
bmN0aW9uIHBhZGRpbmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZz
ZXRUb3A7fQotICBmdW5jdGlvbiBwYWRkaW5nVmVydChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXku
bW92ZXIub2Zmc2V0SGVpZ2h0IC0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0O30KLSAg
ZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRp
bmdIKSByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSDsKLSAgICB2YXIgZSA9IHJlbW92ZUNo
aWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCAieCIpKTsKLSAgICB2YXIg
c3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxl
KGUpIDogZS5jdXJyZW50U3R5bGU7Ci0gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5
bGUucGFkZGluZ0xlZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07Ci0g
ICAgaWYgKCFpc05hTihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgZGlzcGxheS5j
YWNoZWRQYWRkaW5nSCA9IGRhdGE7Ci0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KLQotICAvLyBFbnN1
cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlz
IGlzCi0gIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBt
YWtlIHVwIGEgZHJhd24KLSAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJl
IG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUKLSAgLy8gaGVpZ2h0LgotICBmdW5jdGlvbiBlbnN1cmVM
aW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsKLSAgICB2YXIgd3JhcHBpbmcgPSBjbS5v
cHRpb25zLmxpbmVXcmFwcGluZzsKLSAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBjbS5k
aXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOwotICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5o
ZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgp
IHsKLSAgICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107Ci0g
ICAgICBpZiAod3JhcHBpbmcpIHsKLSAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1
cldpZHRoOwotICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0
Q2xpZW50UmVjdHMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGgg
LSAxOyBpKyspIHsKLSAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tp
ICsgMV07Ci0gICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkg
PiAyKQotICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4dC50b3ApIC8g
MiAtIHJlY3QudG9wKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaGVpZ2h0cy5wdXNoKHJl
Y3QuYm90dG9tIC0gcmVjdC50b3ApOwotICAgIH0KLSAgfQotCi0gIC8vIEZpbmQgYSBsaW5lIG1h
cCAobWFwcGluZyBjaGFyYWN0ZXIgb2Zmc2V0cyB0byB0ZXh0IG5vZGVzKSBhbmQgYQotICAvLyBt
ZWFzdXJlbWVudCBjYWNoZSBmb3IgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAoQSBsaW5lIHZpZXcg
bWlnaHQKLSAgLy8gY29udGFpbiBtdWx0aXBsZSBsaW5lcyB3aGVuIGNvbGxhcHNlZCByYW5nZXMg
YXJlIHByZXNlbnQuKQotICBmdW5jdGlvbiBtYXBGcm9tTGluZVZpZXcobGluZVZpZXcsIGxpbmUs
IGxpbmVOKSB7Ci0gICAgaWYgKGxpbmVWaWV3LmxpbmUgPT0gbGluZSkKLSAgICAgIHJldHVybiB7
bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKLSAg
ICAgIGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUpCi0gICAgICAgIHJldHVybiB7bWFwOiBs
aW5lVmlldy5tZWFzdXJlLm1hcHNbaV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tp
XX07Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQot
ICAgICAgaWYgKGxpbmVObyhsaW5lVmlldy5yZXN0W2ldKSA+IGxpbmVOKQotICAgICAgICByZXR1
cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZpZXcubWVhc3Vy
ZS5jYWNoZXNbaV0sIGJlZm9yZTogdHJ1ZX07Ci0gIH0KLQotICAvLyBSZW5kZXIgYSBsaW5lIGlu
dG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZAotICAvLyB3
aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZp
ZXdwb3J0LgotICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7
Ci0gICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7Ci0gICAgdmFyIGxpbmVOID0gbGluZU5vKGxp
bmUpOwotICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExp
bmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pOwotICAgIHZpZXcubGluZU4gPSBsaW5lTjsKLSAg
ICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7Ci0g
ICAgdmlldy50ZXh0ID0gYnVpbHQucHJlOwotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRp
c3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7Ci0gICAgcmV0dXJuIHZpZXc7Ci0gIH0KLQot
ICAvLyBHZXQgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxpbmUtbG9jYWwg
Y29vcmRpbmF0ZXMpCi0gIC8vIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4KLSAgZnVuY3Rpb24gbWVh
c3VyZUNoYXIoY20sIGxpbmUsIGNoLCBiaWFzKSB7Ci0gICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJl
cGFyZWQoY20sIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBiaWFzKTsKLSAg
fQotCi0gIC8vIEZpbmQgYSBsaW5lIHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4g
bGluZSBudW1iZXIuCi0gIGZ1bmN0aW9uIGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pIHsKLSAg
ICBpZiAobGluZU4gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBsaW5lTiA8IGNtLmRpc3BsYXku
dmlld1RvKQotICAgICAgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBs
aW5lTildOwotICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAg
aWYgKGV4dCAmJiBsaW5lTiA+PSBleHQubGluZU4gJiYgbGluZU4gPCBleHQubGluZU4gKyBleHQu
c2l6ZSkKLSAgICAgIHJldHVybiBleHQ7Ci0gIH0KLQotICAvLyBNZWFzdXJlbWVudCBjYW4gYmUg
c3BsaXQgaW4gdHdvIHN0ZXBzLCB0aGUgc2V0LXVwIHdvcmsgdGhhdAotICAvLyBhcHBsaWVzIHRv
IHRoZSB3aG9sZSBsaW5lLCBhbmQgdGhlIG1lYXN1cmVtZW50IG9mIHRoZSBhY3R1YWwKLSAgLy8g
Y2hhcmFjdGVyLiBGdW5jdGlvbnMgbGlrZSBjb29yZHNDaGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBs
b3Qgb2YKLSAgLy8gbWVhc3VyZW1lbnRzIGluIGEgcm93LCBjYW4gdGh1cyBlbnN1cmUgdGhhdCB0
aGUgc2V0LXVwIHdvcmsgaXMKLSAgLy8gb25seSBkb25lIG9uY2UuCi0gIGZ1bmN0aW9uIHByZXBh
cmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkgewotICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5l
KTsKLSAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOwotICAgIGlmICh2
aWV3ICYmICF2aWV3LnRleHQpCi0gICAgICB2aWV3ID0gbnVsbDsKLSAgICBlbHNlIGlmICh2aWV3
ICYmIHZpZXcuY2hhbmdlcykKLSAgICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBs
aW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpOwotICAgIGlmICghdmlldykKLSAgICAgIHZpZXcgPSB1
cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLQotICAgIHZhciBpbmZvID0gbWFw
RnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIGxpbmVOKTsKLSAgICByZXR1cm4gewotICAgICAgbGlu
ZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCwKLSAgICAgIG1hcDogaW5mby5tYXAsIGNh
Y2hlOiBpbmZvLmNhY2hlLCBiZWZvcmU6IGluZm8uYmVmb3JlLAotICAgICAgaGFzSGVpZ2h0czog
ZmFsc2UKLSAgICB9OwotICB9Ci0KLSAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBv
YmplY3QsIG1lYXN1cmVzIHRoZSBwb3NpdGlvbiBvZiBhbgotICAvLyBhY3R1YWwgY2hhcmFjdGVy
IChvciBmZXRjaGVzIGl0IGZyb20gdGhlIGNhY2hlKS4KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQ
cmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7Ci0gICAgaWYgKHByZXBhcmVkLmJlZm9y
ZSkgY2ggPSAtMTsKLSAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiksIGZvdW5kOwotICAg
IGlmIChwcmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICBmb3VuZCA9
IHByZXBhcmVkLmNhY2hlW2tleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghcHJlcGFyZWQu
cmVjdCkKLSAgICAgICAgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgIGlmICghcHJlcGFyZWQuaGFzSGVpZ2h0cykgewotICAg
ICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7
Ci0gICAgICAgIHByZXBhcmVkLmhhc0hlaWdodHMgPSB0cnVlOwotICAgICAgfQotICAgICAgZm91
bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpOwotICAgICAgaWYg
KCFmb3VuZC5ib2d1cykgcHJlcGFyZWQuY2FjaGVba2V5XSA9IGZvdW5kOwotICAgIH0KLSAgICBy
ZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCwgdG9wOiBmb3VuZC50
b3AsIGJvdHRvbTogZm91bmQuYm90dG9tfTsKLSAgfQotCi0gIHZhciBudWxsUmVjdCA9IHtsZWZ0
OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9OwotCi0gIGZ1bmN0aW9uIG1lYXN1cmVD
aGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykgewotICAgIHZhciBtYXAgPSBwcmVwYXJl
ZC5tYXA7Ci0KLSAgICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2U7Ci0gICAgLy8gRmly
c3QsIHNlYXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0
bywKLSAgICAvLyBvciBjbG9zZXN0IHRvLCB0aGUgdGFyZ2V0IGNoYXJhY3Rlci4KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkgKz0gMykgewotICAgICAgdmFyIG1TdGFydCA9
IG1hcFtpXSwgbUVuZCA9IG1hcFtpICsgMV07Ci0gICAgICBpZiAoY2ggPCBtU3RhcnQpIHsKLSAg
ICAgICAgc3RhcnQgPSAwOyBlbmQgPSAxOwotICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKLSAg
ICAgIH0gZWxzZSBpZiAoY2ggPCBtRW5kKSB7Ci0gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7
Ci0gICAgICAgIGVuZCA9IHN0YXJ0ICsgMTsKLSAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVu
Z3RoIC0gMyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkgewotICAgICAgICBlbmQg
PSBtRW5kIC0gbVN0YXJ0OwotICAgICAgICBzdGFydCA9IGVuZCAtIDE7Ci0gICAgICAgIGlmIChj
aCA+PSBtRW5kKSBjb2xsYXBzZSA9ICJyaWdodCI7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhcnQg
IT0gbnVsbCkgewotICAgICAgICBub2RlID0gbWFwW2kgKyAyXTsKLSAgICAgICAgaWYgKG1TdGFy
dCA9PSBtRW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/ICJsZWZ0IiA6ICJyaWdodCIp
KQotICAgICAgICAgIGNvbGxhcHNlID0gYmlhczsKLSAgICAgICAgaWYgKGJpYXMgPT0gImxlZnQi
ICYmIHN0YXJ0ID09IDApCi0gICAgICAgICAgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBb
aSAtIDNdICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9kZSA9IG1h
cFsoaSAtPSAzKSArIDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAibGVmdCI7Ci0gICAgICAg
ICAgfQotICAgICAgICBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3Rh
cnQpCi0gICAgICAgICAgd2hpbGUgKGkgPCBtYXAubGVuZ3RoIC0gMyAmJiBtYXBbaSArIDNdID09
IG1hcFtpICsgNF0gJiYgIW1hcFtpICsgNV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9k
ZSA9IG1hcFsoaSArPSAzKSArIDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOwot
ICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIHJl
Y3Q7Ci0gICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBpcyBhIHRleHQgbm9k
ZSwgdXNlIGEgcmFuZ2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLgotICAgICAgd2hpbGUg
KHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1TdGFy
dCArIHN0YXJ0KSkpIC0tc3RhcnQ7Ci0gICAgICB3aGlsZSAobVN0YXJ0ICsgZW5kIDwgbUVuZCAm
JiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChtU3RhcnQgKyBlbmQp
KSkgKytlbmQ7Ci0gICAgICBpZiAoaWVfdXB0bzggJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gbUVu
ZCAtIG1TdGFydCkgewotICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFw
cGluZykgewotICAgICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRD
bGllbnRSZWN0cygpOwotICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQotICAgICAgICAgIHJlY3Qg
PSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZWN0ID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkg
fHwgbnVsbFJlY3Q7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQs
IHNpbXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC4KLSAgICAgIGlmIChzdGFy
dCA+IDApIGNvbGxhcHNlID0gYmlhcyA9ICJyaWdodCI7Ci0gICAgICB2YXIgcmVjdHM7Ci0gICAg
ICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRS
ZWN0cygpKS5sZW5ndGggPiAxKQotICAgICAgICByZWN0ID0gcmVjdHNbYmlhcyA9PSAicmlnaHQi
ID8gcmVjdHMubGVuZ3RoIC0gMSA6IDBdOwotICAgICAgZWxzZQotICAgICAgICByZWN0ID0gbm9k
ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICB9Ci0gICAgaWYgKGllX3VwdG84ICYmICFz
dGFydCAmJiAoIXJlY3QgfHwgIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkpIHsKLSAgICAgIHZh
ciByU3BhbiA9IG5vZGUucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdOwotICAgICAgaWYg
KHJTcGFuKQotICAgICAgICByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5s
ZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bh
bi5ib3R0b219OwotICAgICAgZWxzZQotICAgICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgfQot
Ci0gICAgdmFyIHRvcCwgYm90ID0gKHJlY3QuYm90dG9tICsgcmVjdC50b3ApIC8gMiAtIHByZXBh
cmVkLnJlY3QudG9wOwotICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJlLmhl
aWdodHM7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKykK
LSAgICAgIGlmIChib3QgPCBoZWlnaHRzW2ldKSBicmVhazsKLSAgICB0b3AgPSBpID8gaGVpZ2h0
c1tpIC0gMV0gOiAwOyBib3QgPSBoZWlnaHRzW2ldOwotICAgIHZhciByZXN1bHQgPSB7bGVmdDog
KGNvbGxhcHNlID09ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVk
LnJlY3QubGVmdCwKLSAgICAgICAgICAgICAgICAgIHJpZ2h0OiAoY29sbGFwc2UgPT0gImxlZnQi
ID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCi0gICAgICAg
ICAgICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9OwotICAgIGlmICghcmVjdC5sZWZ0ICYm
ICFyZWN0LnJpZ2h0KSByZXN1bHQuYm9ndXMgPSB0cnVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0g
IH0KLQotICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7
Ci0gICAgaWYgKGxpbmVWaWV3Lm1lYXN1cmUpIHsKLSAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2Fj
aGUgPSB7fTsKLSAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IG51bGw7Ci0gICAgICBp
ZiAobGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0
aDsgaSsrKQotICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pIHsKLSAgICBj
bS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZSA9IG51bGw7Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oY20u
ZGlzcGxheS5saW5lTWVhc3VyZSk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5
LnZpZXcubGVuZ3RoOyBpKyspCi0gICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGNt
LmRpc3BsYXkudmlld1tpXSk7Ci0gIH0KLQotICBmdW5jdGlvbiBjbGVhckNhY2hlcyhjbSkgewot
ICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pOwotICAgIGNtLmRpc3BsYXkuY2FjaGVk
Q2hhcldpZHRoID0gY20uZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gY20uZGlzcGxheS5jYWNo
ZWRQYWRkaW5nSCA9IG51bGw7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgY20u
ZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgY20uZGlzcGxheS5saW5lTnVtQ2hh
cnMgPSBudWxsOwotICB9Ci0KLSAgZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7IHJldHVybiB3aW5k
b3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5i
b2R5KS5zY3JvbGxMZWZ0OyB9Ci0gIGZ1bmN0aW9uIHBhZ2VTY3JvbGxZKCkgeyByZXR1cm4gd2lu
ZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQu
Ym9keSkuc2Nyb2xsVG9wOyB9Ci0KLSAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0b20sIGxlZnQs
IHJpZ2h0fSBib3ggZnJvbSBsaW5lLWxvY2FsCi0gIC8vIGNvb3JkaW5hdGVzIGludG8gYW5vdGhl
ciBjb29yZGluYXRlIHN5c3RlbS4gQ29udGV4dCBtYXkgYmUgb25lIG9mCi0gIC8vICJsaW5lIiwg
ImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2Ui
LgotICBmdW5jdGlvbiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHJlY3QsIGNvbnRleHQp
IHsKLSAgICBpZiAobGluZU9iai53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmou
d2lkZ2V0cy5sZW5ndGg7ICsraSkgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSkgewotICAg
ICAgdmFyIHNpemUgPSB3aWRnZXRIZWlnaHQobGluZU9iai53aWRnZXRzW2ldKTsKLSAgICAgIHJl
Y3QudG9wICs9IHNpemU7IHJlY3QuYm90dG9tICs9IHNpemU7Ci0gICAgfQotICAgIGlmIChjb250
ZXh0ID09ICJsaW5lIikgcmV0dXJuIHJlY3Q7Ci0gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0g
ImxvY2FsIjsKLSAgICB2YXIgeU9mZiA9IGhlaWdodEF0TGluZShsaW5lT2JqKTsKLSAgICBpZiAo
Y29udGV4dCA9PSAibG9jYWwiKSB5T2ZmICs9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7Ci0gICAg
ZWxzZSB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoY29udGV4dCA9PSAi
cGFnZSIgfHwgY29udGV4dCA9PSAid2luZG93IikgewotICAgICAgdmFyIGxPZmYgPSBjbS5kaXNw
bGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgIHlPZmYgKz0gbE9m
Zi50b3AgKyAoY29udGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTsKLSAgICAg
IHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAwIDogcGFnZVNj
cm9sbFgoKSk7Ci0gICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVjdC5yaWdodCArPSB4T2ZmOwot
ICAgIH0KLSAgICByZWN0LnRvcCArPSB5T2ZmOyByZWN0LmJvdHRvbSArPSB5T2ZmOwotICAgIHJl
dHVybiByZWN0OwotICB9Ci0KLSAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tICJkaXYiIGNvb3JkcyB0
byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLgotICAvLyBDb250ZXh0IG1heSBiZSAid2luZG93
IiwgInBhZ2UiLCAiZGl2Iiwgb3IgImxvY2FsIi9udWxsLgotICBmdW5jdGlvbiBmcm9tQ29vcmRT
eXN0ZW0oY20sIGNvb3JkcywgY29udGV4dCkgewotICAgIGlmIChjb250ZXh0ID09ICJkaXYiKSBy
ZXR1cm4gY29vcmRzOwotICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQsIHRvcCA9IGNvb3Jkcy50
b3A7Ci0gICAgLy8gRmlyc3QgbW92ZSBpbnRvICJwYWdlIiBjb29yZGluYXRlIHN5c3RlbQotICAg
IGlmIChjb250ZXh0ID09ICJwYWdlIikgewotICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpOwot
ICAgICAgdG9wIC09IHBhZ2VTY3JvbGxZKCk7Ci0gICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJs
b2NhbCIgfHwgIWNvbnRleHQpIHsKLSAgICAgIHZhciBsb2NhbEJveCA9IGNtLmRpc3BsYXkuc2l6
ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICBsZWZ0ICs9IGxvY2FsQm94LmxlZnQ7
Ci0gICAgICB0b3AgKz0gbG9jYWxCb3gudG9wOwotICAgIH0KLQotICAgIHZhciBsaW5lU3BhY2VC
b3ggPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICBy
ZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3Bh
Y2VCb3gudG9wfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4
dCwgbGluZU9iaiwgYmlhcykgewotICAgIGlmICghbGluZU9iaikgbGluZU9iaiA9IGdldExpbmUo
Y20uZG9jLCBwb3MubGluZSk7Ci0gICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9i
aiwgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCwgYmlhcyksIGNvbnRleHQpOwotICB9
Ci0KLSAgLy8gUmV0dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNo
IG1heSBoYXZlIGFuCi0gIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRp
b24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3IKLSAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LgotICBm
dW5jdGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgcHJlcGFyZWRN
ZWFzdXJlKSB7Ci0gICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5s
aW5lKTsKLSAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFy
ZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKLSAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0
KSB7Ci0gICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3Vy
ZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7Ci0gICAgICBpZiAocmlnaHQpIG0ubGVm
dCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdodCA9IG0ubGVmdDsKLSAgICAgIHJldHVybiBpbnRvQ29v
cmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQpOwotICAgIH0KLSAgICBmdW5jdGlvbiBn
ZXRCaWRpKGNoLCBwYXJ0UG9zKSB7Ci0gICAgICB2YXIgcGFydCA9IG9yZGVyW3BhcnRQb3NdLCBy
aWdodCA9IHBhcnQubGV2ZWwgJSAyOwotICAgICAgaWYgKGNoID09IGJpZGlMZWZ0KHBhcnQpICYm
IHBhcnRQb3MgJiYgcGFydC5sZXZlbCA8IG9yZGVyW3BhcnRQb3MgLSAxXS5sZXZlbCkgewotICAg
ICAgICBwYXJ0ID0gb3JkZXJbLS1wYXJ0UG9zXTsKLSAgICAgICAgY2ggPSBiaWRpUmlnaHQocGFy
dCkgLSAocGFydC5sZXZlbCAlIDIgPyAwIDogMSk7Ci0gICAgICAgIHJpZ2h0ID0gdHJ1ZTsKLSAg
ICAgIH0gZWxzZSBpZiAoY2ggPT0gYmlkaVJpZ2h0KHBhcnQpICYmIHBhcnRQb3MgPCBvcmRlci5s
ZW5ndGggLSAxICYmIHBhcnQubGV2ZWwgPCBvcmRlcltwYXJ0UG9zICsgMV0ubGV2ZWwpIHsKLSAg
ICAgICAgcGFydCA9IG9yZGVyWysrcGFydFBvc107Ci0gICAgICAgIGNoID0gYmlkaUxlZnQocGFy
dCkgLSBwYXJ0LmxldmVsICUgMjsKLSAgICAgICAgcmlnaHQgPSBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIGlmIChyaWdodCAmJiBjaCA9PSBwYXJ0LnRvICYmIGNoID4gcGFydC5mcm9tKSByZXR1cm4g
Z2V0KGNoIC0gMSk7Ci0gICAgICByZXR1cm4gZ2V0KGNoLCByaWdodCk7Ci0gICAgfQotICAgIHZh
ciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmopLCBjaCA9IHBvcy5jaDsKLSAgICBpZiAoIW9yZGVy
KSByZXR1cm4gZ2V0KGNoKTsKLSAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIs
IGNoKTsKLSAgICB2YXIgdmFsID0gZ2V0QmlkaShjaCwgcGFydFBvcyk7Ci0gICAgaWYgKGJpZGlP
dGhlciAhPSBudWxsKSB2YWwub3RoZXIgPSBnZXRCaWRpKGNoLCBiaWRpT3RoZXIpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH0KLQotICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3Jk
aW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvcgotICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xs
IHVwZGF0ZXMuCi0gIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHsKLSAgICB2YXIg
bGVmdCA9IDAsIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOwotICAgIGlmICghY20ub3B0aW9u
cy5saW5lV3JhcHBpbmcpIGxlZnQgPSBjaGFyV2lkdGgoY20uZGlzcGxheSkgKiBwb3MuY2g7Ci0g
ICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHZhciB0b3Ag
PSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOwotICAgIHJl
dHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxp
bmVPYmouaGVpZ2h0fTsKLSAgfQotCi0gIC8vIFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHND
aGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZvcm1hdGlvbi4KLSAgLy8geFJlbCBpcyB0aGUgcmVs
YXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgaW5wdXQgY29vcmRpbmF0ZXMgY29tcGFyZWQKLSAgLy8g
dG8gdGhlIGZvdW5kIHBvc2l0aW9uIChzbyB4UmVsID4gMCBtZWFucyB0aGUgY29vcmRpbmF0ZXMg
YXJlIHRvCi0gIC8vIHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhh
bXBsZSkuIFdoZW4gb3V0c2lkZQotICAvLyBpcyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGlu
YXRlcyBsaWUgb3V0c2lkZSB0aGUgbGluZSdzCi0gIC8vIHZlcnRpY2FsIHJhbmdlLgotICBmdW5j
dGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgewotICAgIHZhciBwb3Mg
PSBQb3MobGluZSwgY2gpOwotICAgIHBvcy54UmVsID0geFJlbDsKLSAgICBpZiAob3V0c2lkZSkg
cG9zLm91dHNpZGUgPSB0cnVlOwotICAgIHJldHVybiBwb3M7Ci0gIH0KLQotICAvLyBDb21wdXRl
IHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMu
Ci0gIC8vIElucHV0IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsICgiZGl2IiBjb29yZGluYXRlIHN5
c3RlbSkuCi0gIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoY20sIHgsIHkpIHsKLSAgICB2YXIgZG9jID0g
Y20uZG9jOwotICAgIHkgKz0gY20uZGlzcGxheS52aWV3T2Zmc2V0OwotICAgIGlmICh5IDwgMCkg
cmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCwgMCwgdHJ1ZSwgLTEpOwotICAgIHZhciBsaW5l
TiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAx
OwotICAgIGlmIChsaW5lTiA+IGxhc3QpCi0gICAgICByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZp
cnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUs
IDEpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0KLSAgICB2YXIgbGluZU9iaiA9IGdldExpbmUo
ZG9jLCBsaW5lTik7Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIGZvdW5kID0gY29vcmRzQ2hh
cklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTiwgeCwgeSk7Ci0gICAgICB2YXIgbWVyZ2VkID0gY29s
bGFwc2VkU3BhbkF0RW5kKGxpbmVPYmopOwotICAgICAgdmFyIG1lcmdlZFBvcyA9IG1lcmdlZCAm
JiBtZXJnZWQuZmluZCgwLCB0cnVlKTsKLSAgICAgIGlmIChtZXJnZWQgJiYgKGZvdW5kLmNoID4g
bWVyZ2VkUG9zLmZyb20uY2ggfHwgZm91bmQuY2ggPT0gbWVyZ2VkUG9zLmZyb20uY2ggJiYgZm91
bmQueFJlbCA+IDApKQotICAgICAgICBsaW5lTiA9IGxpbmVObyhsaW5lT2JqID0gbWVyZ2VkUG9z
LnRvLmxpbmUpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotICB9
Ci0KLSAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkp
IHsKLSAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwotICAgIHZh
ciB3cm9uZ0xpbmUgPSBmYWxzZSwgYWRqdXN0ID0gMiAqIGNtLmRpc3BsYXkud3JhcHBlci5jbGll
bnRXaWR0aDsKLSAgICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5l
KGNtLCBsaW5lT2JqKTsKLQotICAgIGZ1bmN0aW9uIGdldFgoY2gpIHsKLSAgICAgIHZhciBzcCA9
IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgY2gpLCAibGluZSIsIGxpbmVPYmosIHByZXBh
cmVkTWVhc3VyZSk7Ci0gICAgICB3cm9uZ0xpbmUgPSB0cnVlOwotICAgICAgaWYgKGlubmVyT2Zm
ID4gc3AuYm90dG9tKSByZXR1cm4gc3AubGVmdCAtIGFkanVzdDsKLSAgICAgIGVsc2UgaWYgKGlu
bmVyT2ZmIDwgc3AudG9wKSByZXR1cm4gc3AubGVmdCArIGFkanVzdDsKLSAgICAgIGVsc2Ugd3Jv
bmdMaW5lID0gZmFsc2U7Ci0gICAgICByZXR1cm4gc3AubGVmdDsKLSAgICB9Ci0KLSAgICB2YXIg
YmlkaSA9IGdldE9yZGVyKGxpbmVPYmopLCBkaXN0ID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAg
ICB2YXIgZnJvbSA9IGxpbmVMZWZ0KGxpbmVPYmopLCB0byA9IGxpbmVSaWdodChsaW5lT2JqKTsK
LSAgICB2YXIgZnJvbVggPSBnZXRYKGZyb20pLCBmcm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9Y
ID0gZ2V0WCh0byksIHRvT3V0c2lkZSA9IHdyb25nTGluZTsKLQotICAgIGlmICh4ID4gdG9YKSBy
ZXR1cm4gUG9zV2l0aEluZm8obGluZU5vLCB0bywgdG9PdXRzaWRlLCAxKTsKLSAgICAvLyBEbyBh
IGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCi0gICAgZm9yICg7OykgewotICAg
ICAgaWYgKGJpZGkgPyB0byA9PSBmcm9tIHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBm
cm9tLCAxKSA6IHRvIC0gZnJvbSA8PSAxKSB7Ci0gICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8
fCB4IC0gZnJvbVggPD0gdG9YIC0geCA/IGZyb20gOiB0bzsKLSAgICAgICAgdmFyIHhEaWZmID0g
eCAtIChjaCA9PSBmcm9tID8gZnJvbVggOiB0b1gpOwotICAgICAgICB3aGlsZSAoaXNFeHRlbmRp
bmdDaGFyKGxpbmVPYmoudGV4dC5jaGFyQXQoY2gpKSkgKytjaDsKLSAgICAgICAgdmFyIHBvcyA9
IFBvc1dpdGhJbmZvKGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0
c2lkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgLTEgPyAtMSA6IHhE
aWZmID4gMSA/IDEgOiAwKTsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICAgIH0KLSAgICAgIHZh
ciBzdGVwID0gTWF0aC5jZWlsKGRpc3QgLyAyKSwgbWlkZGxlID0gZnJvbSArIHN0ZXA7Ci0gICAg
ICBpZiAoYmlkaSkgewotICAgICAgICBtaWRkbGUgPSBmcm9tOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0ZXA7ICsraSkgbWlkZGxlID0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIG1pZGRs
ZSwgMSk7Ci0gICAgICB9Ci0gICAgICB2YXIgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKLSAgICAg
IGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRz
aWRlID0gd3JvbmdMaW5lKSB0b1ggKz0gMTAwMDsgZGlzdCA9IHN0ZXA7fQotICAgICAgZWxzZSB7
ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsg
ZGlzdCAtPSBzdGVwO30KLSAgICB9Ci0gIH0KLQotICB2YXIgbWVhc3VyZVRleHQ7Ci0gIC8vIENv
bXB1dGUgdGhlIGRlZmF1bHQgdGV4dCBoZWlnaHQuCi0gIGZ1bmN0aW9uIHRleHRIZWlnaHQoZGlz
cGxheSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJu
IGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKLSAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkg
ewotICAgICAgbWVhc3VyZVRleHQgPSBlbHQoInByZSIpOwotICAgICAgLy8gTWVhc3VyZSBhIGJ1
bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMgdGhhdCBjb21wdXRlCi0gICAgICAvLyBmcmFjdGlv
bmFsIGhlaWdodHMuCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIHsKLSAgICAg
ICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7
Ci0gICAgICAgIG1lYXN1cmVUZXh0LmFwcGVuZENoaWxkKGVsdCgiYnIiKSk7Ci0gICAgICB9Ci0g
ICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIp
KTsKLSAgICB9Ci0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFz
dXJlVGV4dCk7Ci0gICAgdmFyIGhlaWdodCA9IG1lYXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUw
OwotICAgIGlmIChoZWlnaHQgPiAzKSBkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTsKLSAgICByZXR1cm4gaGVpZ2h0
IHx8IDE7Ci0gIH0KLQotICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC4K
LSAgZnVuY3Rpb24gY2hhcldpZHRoKGRpc3BsYXkpIHsKLSAgICBpZiAoZGlzcGxheS5jYWNoZWRD
aGFyV2lkdGggIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoOwotICAgIHZh
ciBhbmNob3IgPSBlbHQoInNwYW4iLCAieHh4eHh4eHh4eCIpOwotICAgIHZhciBwcmUgPSBlbHQo
InByZSIsIFthbmNob3JdKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1
cmUsIHByZSk7Ci0gICAgdmFyIHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCks
IHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMTA7Ci0gICAgaWYgKHdpZHRoID4g
MikgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsKLSAgICByZXR1cm4gd2lkdGggfHwg
MTA7Ci0gIH0KLQotICAvLyBPUEVSQVRJT05TCi0KLSAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0
byB3cmFwIGEgc2VyaWVzIG9mIGNoYW5nZXMgdG8gdGhlIGVkaXRvcgotICAvLyBzdGF0ZSBpbiBz
dWNoIGEgd2F5IHRoYXQgZWFjaCBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlCi0gIC8v
IGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQgYmUgYXdrd2FyZCwgc2xvdywgYW5kCi0g
IC8vIGVycm9yLXByb25lKS4gSW5zdGVhZCwgZGlzcGxheSB1cGRhdGVzIGFyZSBiYXRjaGVkIGFu
ZCB0aGVuIGFsbAotICAvLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KLQotICB2YXIg
bmV4dE9wSWQgPSAwOwotICAvLyBTdGFydCBhIG5ldyBvcGVyYXRpb24uCi0gIGZ1bmN0aW9uIHN0
YXJ0T3BlcmF0aW9uKGNtKSB7Ci0gICAgY20uY3VyT3AgPSB7Ci0gICAgICB2aWV3Q2hhbmdlZDog
ZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQg
dG8gYmUgcmVkcmF3bgotICAgICAgc3RhcnRIZWlnaHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVzZWQg
dG8gZGV0ZWN0IG5lZWQgdG8gdXBkYXRlIHNjcm9sbGJhcgotICAgICAgZm9yY2VVcGRhdGU6IGZh
bHNlLCAgICAgIC8vIFVzZWQgdG8gZm9yY2UgYSByZWRyYXcKLSAgICAgIHVwZGF0ZUlucHV0OiBu
dWxsLCAgICAgICAvLyBXaGV0aGVyIHRvIHJlc2V0IHRoZSBpbnB1dCB0ZXh0YXJlYQotICAgICAg
dHlwaW5nOiBmYWxzZSwgICAgICAgICAgIC8vIFdoZXRoZXIgdGhpcyByZXNldCBzaG91bGQgYmUg
Y2FyZWZ1bCB0byBsZWF2ZSBleGlzdGluZyB0ZXh0IChmb3IgY29tcG9zaXRpbmcpCi0gICAgICBj
aGFuZ2VPYmpzOiBudWxsLCAgICAgICAgLy8gQWNjdW11bGF0ZWQgY2hhbmdlcywgZm9yIGZpcmlu
ZyBjaGFuZ2UgZXZlbnRzCi0gICAgICBjdXJzb3JBY3Rpdml0eUhhbmRsZXJzOiBudWxsLCAvLyBT
ZXQgb2YgaGFuZGxlcnMgdG8gZmlyZSBjdXJzb3JBY3Rpdml0eSBvbgotICAgICAgc2VsZWN0aW9u
Q2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRy
YXduCi0gICAgICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVz
dCBsaW5lIG5lZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldwotICAgICAgc2Nyb2xsTGVmdDogbnVs
bCwgc2Nyb2xsVG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3Qg
cHVzaGVkIHRvIERPTSB5ZXQKLSAgICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2Vk
IHRvIHNjcm9sbCB0byBhIHNwZWNpZmljIHBvc2l0aW9uCi0gICAgICBpZDogKytuZXh0T3BJZCAg
ICAgICAgICAgLy8gVW5pcXVlIElECi0gICAgfTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja0Rl
cHRoKyspIGRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKLSAgfQotCi0gIC8vIEZpbmlzaCBhbiBvcGVy
YXRpb24sIHVwZGF0aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRz
Ci0gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbihjbSkgewotICAgIHZhciBvcCA9IGNtLmN1ck9wLCBk
b2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGNtLmN1ck9wID0gbnVsbDsK
LQotICAgIGlmIChvcC51cGRhdGVNYXhMaW5lKSBmaW5kTWF4TGluZShjbSk7Ci0KLSAgICAvLyBJ
ZiBpdCBsb29rcyBsaWtlIGFuIHVwZGF0ZSBtaWdodCBiZSBuZWVkZWQsIGNhbGwgdXBkYXRlRGlz
cGxheQotICAgIGlmIChvcC52aWV3Q2hhbmdlZCB8fCBvcC5mb3JjZVVwZGF0ZSB8fCBvcC5zY3Jv
bGxUb3AgIT0gbnVsbCB8fAotICAgICAgICBvcC5zY3JvbGxUb1BvcyAmJiAob3Auc2Nyb2xsVG9Q
b3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHwKLSAgICAg
ICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewot
ICAgICAgdmFyIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNtLCB7dG9wOiBvcC5zY3JvbGxUb3As
IGVuc3VyZTogb3Auc2Nyb2xsVG9Qb3N9LCBvcC5mb3JjZVVwZGF0ZSk7Ci0gICAgICBpZiAoY20u
ZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQpIGNtLmRvYy5zY3JvbGxUb3AgPSBjbS5kaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKLSAgICB9Ci0gICAgLy8gSWYgbm8gdXBkYXRlIHdhcyBy
dW4sIGJ1dCB0aGUgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGF0LgotICAgIGlmICghdXBk
YXRlZCAmJiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oY20pOwotICAgIGlm
ICghdXBkYXRlZCAmJiBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KSB1cGRhdGVTY3Jv
bGxiYXJzKGNtKTsKLQotICAgIC8vIEFib3J0IG1vdXNlIHdoZWVsIGRlbHRhIG1lYXN1cmVtZW50
LCB3aGVuIHNjcm9sbGluZyBleHBsaWNpdGx5Ci0gICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFgg
IT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xsTGVmdCAhPSBudWxs
IHx8IG9wLnNjcm9sbFRvUG9zKSkKLSAgICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5
LndoZWVsU3RhcnRZID0gbnVsbDsKLQotICAgIC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0
aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyCi0gICAgaWYgKG9wLnNjcm9sbFRvcCAhPSBu
dWxsICYmIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9sbFRvcCkgewotICAg
ICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xs
SGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNjcm9sbFRvcCkpOwot
ICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGJhclYuc2Ny
b2xsVG9wID0gZG9jLnNjcm9sbFRvcCA9IHRvcDsKLSAgICB9Ci0gICAgaWYgKG9wLnNjcm9sbExl
ZnQgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gb3Auc2Nyb2xsTGVm
dCkgewotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgb3Auc2Nyb2xs
TGVmdCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gZGlzcGxheS5zY3Jv
bGxiYXJILnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IGxlZnQ7Ci0gICAgICBhbGlnbkhv
cml6b250YWxseShjbSk7Ci0gICAgfQotICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3Bl
Y2lmaWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby4KLSAgICBpZiAob3Auc2Nyb2xsVG9Qb3Mp
IHsKLSAgICAgIHZhciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhjbS5k
b2MsIG9wLnNjcm9sbFRvUG9zLmZyb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsaXBQb3MoY20uZG9jLCBvcC5zY3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9z
Lm1hcmdpbik7Ci0gICAgICBpZiAob3Auc2Nyb2xsVG9Qb3MuaXNDdXJzb3IgJiYgY20uc3RhdGUu
Zm9jdXNlZCkgbWF5YmVTY3JvbGxXaW5kb3coY20sIGNvb3Jkcyk7Ci0gICAgfQotCi0gICAgaWYg
KG9wLnNlbGVjdGlvbkNoYW5nZWQpIHJlc3RhcnRCbGluayhjbSk7Ci0KLSAgICBpZiAoY20uc3Rh
dGUuZm9jdXNlZCAmJiBvcC51cGRhdGVJbnB1dCkKLSAgICAgIHJlc2V0SW5wdXQoY20sIG9wLnR5
cGluZyk7Ci0KLSAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4v
dW5pZGRlbiBieSBlZGl0aW5nIG9yCi0gICAgLy8gdW5kb2luZwotICAgIHZhciBoaWRkZW4gPSBv
cC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7
Ci0gICAgaWYgKGhpZGRlbikgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW4ubGVuZ3RoOyArK2kp
Ci0gICAgICBpZiAoIWhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbChoaWRkZW5baV0sICJo
aWRlIik7Ci0gICAgaWYgKHVuaGlkZGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IHVuaGlkZGVuLmxl
bmd0aDsgKytpKQotICAgICAgaWYgKHVuaGlkZGVuW2ldLmxpbmVzLmxlbmd0aCkgc2lnbmFsKHVu
aGlkZGVuW2ldLCAidW5oaWRlIik7Ci0KLSAgICB2YXIgZGVsYXllZDsKLSAgICBpZiAoIS0tZGVs
YXllZENhbGxiYWNrRGVwdGgpIHsKLSAgICAgIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwot
ICAgICAgZGVsYXllZENhbGxiYWNrcyA9IG51bGw7Ci0gICAgfQotICAgIC8vIEZpcmUgY2hhbmdl
IGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnMKLSAgICBpZiAob3AuY2hhbmdlT2Jq
cykKLSAgICAgIHNpZ25hbChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hhbmdlT2Jqcyk7Ci0gICAg
aWYgKGRlbGF5ZWQpIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgZGVs
YXllZFtpXSgpOwotICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKQotICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzLmxlbmd0aDsgaSsrKQot
ICAgICAgICBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW2ldKGNtKTsKLSAgfQotCi0gIC8vIFJ1
biB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uCi0gIGZ1bmN0aW9uIHJ1bkluT3Ao
Y20sIGYpIHsKLSAgICBpZiAoY20uY3VyT3ApIHJldHVybiBmKCk7Ci0gICAgc3RhcnRPcGVyYXRp
b24oY20pOwotICAgIHRyeSB7IHJldHVybiBmKCk7IH0KLSAgICBmaW5hbGx5IHsgZW5kT3BlcmF0
aW9uKGNtKTsgfQotICB9Ci0gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBS
ZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLgotICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYp
IHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoY20uY3VyT3ApIHJldHVybiBm
LmFwcGx5KGNtLCBhcmd1bWVudHMpOwotICAgICAgc3RhcnRPcGVyYXRpb24oY20pOwotICAgICAg
dHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBl
bmRPcGVyYXRpb24oY20pOyB9Ci0gICAgfTsKLSAgfQotICAvLyBVc2VkIHRvIGFkZCBtZXRob2Rz
IHRvIGVkaXRvciBhbmQgZG9jIGluc3RhbmNlcywgd3JhcHBpbmcgdGhlbSBpbgotICAvLyBvcGVy
YXRpb25zLgotICBmdW5jdGlvbiBtZXRob2RPcChmKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkg
ewotICAgICAgaWYgKHRoaXMuY3VyT3ApIHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
Ci0gICAgICBzdGFydE9wZXJhdGlvbih0aGlzKTsKLSAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7
IH0KLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGRvY01ldGhvZE9wKGYpIHsKLSAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgY20gPSB0aGlzLmNtOwotICAgICAgaWYgKCFjbSB8fCBj
bS5jdXJPcCkgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHN0YXJ0T3Bl
cmF0aW9uKGNtKTsKLSAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgfTsKLSAgfQotCi0g
IC8vIFZJRVcgVFJBQ0tJTkcKLQotICAvLyBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJl
c2VudCB0aGUgdmlzaWJsZSAoY3VycmVudGx5IGRyYXduKQotICAvLyBwYXJ0IG9mIHRoZSBkb2N1
bWVudC4gQSBMaW5lVmlldyBtYXkgY29ycmVzcG9uZCB0byBtdWx0aXBsZQotICAvLyBsb2dpY2Fs
IGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNlZCByYW5nZXMuCi0gIGZ1
bmN0aW9uIExpbmVWaWV3KGRvYywgbGluZSwgbGluZU4pIHsKLSAgICAvLyBUaGUgc3RhcnRpbmcg
bGluZQotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgLy8gQ29udGludWluZyBsaW5lcywgaWYg
YW55Ci0gICAgdGhpcy5yZXN0ID0gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKTsKLSAgICAvLyBO
dW1iZXIgb2YgbG9naWNhbCBsaW5lcyBpbiB0aGlzIHZpc3VhbCBsaW5lCi0gICAgdGhpcy5zaXpl
ID0gdGhpcy5yZXN0ID8gbGluZU5vKGxzdCh0aGlzLnJlc3QpKSAtIGxpbmVOICsgMSA6IDE7Ci0g
ICAgdGhpcy5ub2RlID0gdGhpcy50ZXh0ID0gbnVsbDsKLSAgICB0aGlzLmhpZGRlbiA9IGxpbmVJ
c0hpZGRlbihkb2MsIGxpbmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgTGluZVZp
ZXcgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGxpbmVzLgotICBmdW5jdGlvbiBidWlsZFZpZXdBcnJh
eShjbSwgZnJvbSwgdG8pIHsKLSAgICB2YXIgYXJyYXkgPSBbXSwgbmV4dFBvczsKLSAgICBmb3Ig
KHZhciBwb3MgPSBmcm9tOyBwb3MgPCB0bzsgcG9zID0gbmV4dFBvcykgewotICAgICAgdmFyIHZp
ZXcgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBnZXRMaW5lKGNtLmRvYywgcG9zKSwgcG9zKTsKLSAg
ICAgIG5leHRQb3MgPSBwb3MgKyB2aWV3LnNpemU7Ci0gICAgICBhcnJheS5wdXNoKHZpZXcpOwot
ICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci0gIH0KLQotICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5
LnZpZXcgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gY2hhbmdlIHRvIHRoZQotICAvLyBkb2N1
bWVudC4gRnJvbSBhbmQgdG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRpbmF0ZXMuIExlbmRpZmYg
aXMKLSAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBhZGRlZCBvciBzdWJ0cmFjdGVkIGJ5IHRoZSBj
aGFuZ2UuIFRoaXMgaXMKLSAgLy8gdXNlZCBmb3IgY2hhbmdlcyB0aGF0IHNwYW4gbXVsdGlwbGUg
bGluZXMsIG9yIGNoYW5nZSB0aGUgd2F5Ci0gIC8vIGxpbmVzIGFyZSBkaXZpZGVkIGludG8gdmlz
dWFsIGxpbmVzLiByZWdMaW5lQ2hhbmdlIChiZWxvdykKLSAgLy8gcmVnaXN0ZXJzIHNpbmdsZS1s
aW5lIGNoYW5nZXMuCi0gIGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJvbSwgdG8sIGxlbmRpZmYp
IHsKLSAgICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZpcnN0OwotICAgIGlmICh0
byA9PSBudWxsKSB0byA9IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplOwotICAgIGlmICghbGVu
ZGlmZikgbGVuZGlmZiA9IDA7Ci0KLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAg
aWYgKGxlbmRpZmYgJiYgdG8gPCBkaXNwbGF5LnZpZXdUbyAmJgotICAgICAgICAoZGlzcGxheS51
cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPiBm
cm9tKSkKLSAgICAgIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOwotCi0gICAgY20u
Y3VyT3Audmlld0NoYW5nZWQgPSB0cnVlOwotCi0gICAgaWYgKGZyb20gPj0gZGlzcGxheS52aWV3
VG8pIHsgLy8gQ2hhbmdlIGFmdGVyCi0gICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlz
dWFsTGluZU5vKGNtLmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKLSAgICAgICAgcmVzZXRW
aWV3KGNtKTsKLSAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hh
bmdlIGJlZm9yZQotICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRO
byhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7Ci0gICAgICAgIHJl
c2V0VmlldyhjbSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9
IGxlbmRpZmY7Ci0gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52
aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwCi0gICAgICByZXNldFZpZXcoY20pOwotICAgIH0gZWxz
ZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwCi0gICAgICB2
YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7Ci0gICAg
ICBpZiAoY3V0KSB7Ci0gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShj
dXQuaW5kZXgpOwotICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOOwotICAgICAg
ICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVz
ZXRWaWV3KGNtKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1Rv
KSB7IC8vIEJvdHRvbSBvdmVybGFwCi0gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChj
bSwgZnJvbSwgZnJvbSwgLTEpOwotICAgICAgaWYgKGN1dCkgewotICAgICAgICBkaXNwbGF5LnZp
ZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0LmluZGV4KTsKLSAgICAgICAgZGlzcGxheS52
aWV3VG8gPSBjdXQubGluZU47Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNldFZpZXcoY20p
OwotICAgICAgfQotICAgIH0gZWxzZSB7IC8vIEdhcCBpbiB0aGUgbWlkZGxlCi0gICAgICB2YXIg
Y3V0VG9wID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOwotICAgICAgdmFy
IGN1dEJvdCA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIHRvLCB0byArIGxlbmRpZmYsIDEpOwotICAg
ICAgaWYgKGN1dFRvcCAmJiBjdXRCb3QpIHsKLSAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxh
eS52aWV3LnNsaWNlKDAsIGN1dFRvcC5pbmRleCkKLSAgICAgICAgICAuY29uY2F0KGJ1aWxkVmll
d0FycmF5KGNtLCBjdXRUb3AubGluZU4sIGN1dEJvdC5saW5lTikpCi0gICAgICAgICAgLmNvbmNh
dChkaXNwbGF5LnZpZXcuc2xpY2UoY3V0Qm90LmluZGV4KSk7Ci0gICAgICAgIGRpc3BsYXkudmll
d1RvICs9IGxlbmRpZmY7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNldFZpZXcoY20pOwot
ICAgICAgfQotICAgIH0KLQotICAgIHZhciBleHQgPSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7
Ci0gICAgaWYgKGV4dCkgewotICAgICAgaWYgKHRvIDwgZXh0LmxpbmVOKQotICAgICAgICBleHQu
bGluZU4gKz0gbGVuZGlmZjsKLSAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQu
c2l6ZSkKLSAgICAgICAgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKLSAgICB9Ci0g
IH0KLQotICAvLyBSZWdpc3RlciBhIGNoYW5nZSB0byBhIHNpbmdsZSBsaW5lLiBUeXBlIG11c3Qg
YmUgb25lIG9mICJ0ZXh0IiwKLSAgLy8gImd1dHRlciIsICJjbGFzcyIsICJ3aWRnZXQiCi0gIGZ1
bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHsKLSAgICBjbS5jdXJPcC52aWV3
Q2hhbmdlZCA9IHRydWU7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5k
aXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5l
TiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpCi0gICAgICBkaXNwbGF5LmV4dGVybmFs
TWVhc3VyZWQgPSBudWxsOwotCi0gICAgaWYgKGxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IGxp
bmUgPj0gZGlzcGxheS52aWV3VG8pIHJldHVybjsKLSAgICB2YXIgbGluZVZpZXcgPSBkaXNwbGF5
LnZpZXdbZmluZFZpZXdJbmRleChjbSwgbGluZSldOwotICAgIGlmIChsaW5lVmlldy5ub2RlID09
IG51bGwpIHJldHVybjsKLSAgICB2YXIgYXJyID0gbGluZVZpZXcuY2hhbmdlcyB8fCAobGluZVZp
ZXcuY2hhbmdlcyA9IFtdKTsKLSAgICBpZiAoaW5kZXhPZihhcnIsIHR5cGUpID09IC0xKSBhcnIu
cHVzaCh0eXBlKTsKLSAgfQotCi0gIC8vIENsZWFyIHRoZSB2aWV3LgotICBmdW5jdGlvbiByZXNl
dFZpZXcoY20pIHsKLSAgICBjbS5kaXNwbGF5LnZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3VG8g
PSBjbS5kb2MuZmlyc3Q7Ci0gICAgY20uZGlzcGxheS52aWV3ID0gW107Ci0gICAgY20uZGlzcGxh
eS52aWV3T2Zmc2V0ID0gMDsKLSAgfQotCi0gIC8vIEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3Jy
ZXNwb25kaW5nIHRvIGEgZ2l2ZW4gbGluZS4gUmV0dXJuIG51bGwKLSAgLy8gd2hlbiB0aGUgbGlu
ZSBpc24ndCB2aXNpYmxlLgotICBmdW5jdGlvbiBmaW5kVmlld0luZGV4KGNtLCBuKSB7Ci0gICAg
aWYgKG4gPj0gY20uZGlzcGxheS52aWV3VG8pIHJldHVybiBudWxsOwotICAgIG4gLT0gY20uZGlz
cGxheS52aWV3RnJvbTsKLSAgICBpZiAobiA8IDApIHJldHVybiBudWxsOwotICAgIHZhciB2aWV3
ID0gY20uZGlzcGxheS52aWV3OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7
IGkrKykgewotICAgICAgbiAtPSB2aWV3W2ldLnNpemU7Ci0gICAgICBpZiAobiA8IDApIHJldHVy
biBpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHZpZXdDdXR0aW5nUG9pbnQoY20sIG9sZE4s
IG5ld04sIGRpcikgewotICAgIHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBk
aWZmLCB2aWV3ID0gY20uZGlzcGxheS52aWV3OwotICAgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMg
fHwgbmV3TiA9PSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZSkKLSAgICAgIHJldHVybiB7aW5k
ZXg6IGluZGV4LCBsaW5lTjogbmV3Tn07Ci0gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjbS5kaXNw
bGF5LnZpZXdGcm9tOyBpIDwgaW5kZXg7IGkrKykKLSAgICAgIG4gKz0gdmlld1tpXS5zaXplOwot
ICAgIGlmIChuICE9IG9sZE4pIHsKLSAgICAgIGlmIChkaXIgPiAwKSB7Ci0gICAgICAgIGlmIChp
bmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOwotICAgICAgICBkaWZmID0gKG4g
KyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBkaWZmID0gbiAtIG9sZE47Ci0gICAgICB9Ci0gICAgICBvbGROICs9IGRp
ZmY7IG5ld04gKz0gZGlmZjsKLSAgICB9Ci0gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2Ms
IG5ld04pICE9IG5ld04pIHsKLSAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3
Lmxlbmd0aCAtIDEpKSByZXR1cm4gbnVsbDsKLSAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRl
eCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplOwotICAgICAgaW5kZXggKz0gZGlyOwotICAgIH0K
LSAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059OwotICB9Ci0KLSAgLy8gRm9y
Y2UgdGhlIHZpZXcgdG8gY292ZXIgYSBnaXZlbiByYW5nZSwgYWRkaW5nIGVtcHR5IHZpZXcgZWxl
bWVudAotICAvLyBvciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBhcyBuZWVkZWQuCi0gIGZ1
bmN0aW9uIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3OwotICAgIGlmICh2aWV3Lmxlbmd0aCA9PSAwIHx8
IGZyb20gPj0gZGlzcGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52aWV3RnJvbSkgewotICAg
ICAgZGlzcGxheS52aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKTsKLSAgICAgIGRp
c3BsYXkudmlld0Zyb20gPSBmcm9tOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZGlzcGxheS52
aWV3RnJvbSA+IGZyb20pCi0gICAgICAgIGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0FycmF5KGNt
LCBmcm9tLCBkaXNwbGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52aWV3KTsKLSAgICAgIGVs
c2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKQotICAgICAgICBkaXNwbGF5LnZpZXcgPSBk
aXNwbGF5LnZpZXcuc2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkpOwotICAgICAgZGlzcGxh
eS52aWV3RnJvbSA9IGZyb207Ci0gICAgICBpZiAoZGlzcGxheS52aWV3VG8gPCB0bykKLSAgICAg
ICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwg
ZGlzcGxheS52aWV3VG8sIHRvKSk7Ci0gICAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRv
KQotICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgZmluZFZpZXdJ
bmRleChjbSwgdG8pKTsKLSAgICB9Ci0gICAgZGlzcGxheS52aWV3VG8gPSB0bzsKLSAgfQotCi0g
IC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJl
c2VudGF0aW9uIGlzCi0gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuCi0gIGZ1bmN0
aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7Ci0gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcs
IGRpcnR5ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsK
LSAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07Ci0gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRl
biAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpICsrZGlydHk7Ci0gICAg
fQotICAgIHJldHVybiBkaXJ0eTsKLSAgfQotCi0gIC8vIElOUFVUIEhBTkRMSU5HCi0KLSAgLy8g
UG9sbCBmb3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcu
IFRoaXMKLSAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KLSAgZnVu
Y3Rpb24gc2xvd1BvbGwoY20pIHsKLSAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkgcmV0
dXJuOwotICAgIGNtLmRpc3BsYXkucG9sbC5zZXQoY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1
bmN0aW9uKCkgewotICAgICAgcmVhZElucHV0KGNtKTsKLSAgICAgIGlmIChjbS5zdGF0ZS5mb2N1
c2VkKSBzbG93UG9sbChjbSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBXaGVuIGFuIGV2ZW50IGhh
cyBqdXN0IGNvbWUgaW4gdGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZQotICAvLyBzb21l
dGhpbmcgaW4gdGhlIGlucHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRo
YXQKLSAgLy8gdGhlIGNoYW5nZSBhcHBlYXJzIG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KLSAgZnVu
Y3Rpb24gZmFzdFBvbGwoY20pIHsKLSAgICB2YXIgbWlzc2VkID0gZmFsc2U7Ci0gICAgY20uZGlz
cGxheS5wb2xsaW5nRmFzdCA9IHRydWU7Ci0gICAgZnVuY3Rpb24gcCgpIHsKLSAgICAgIHZhciBj
aGFuZ2VkID0gcmVhZElucHV0KGNtKTsKLSAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7
bWlzc2VkID0gdHJ1ZTsgY20uZGlzcGxheS5wb2xsLnNldCg2MCwgcCk7fQotICAgICAgZWxzZSB7
Y20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOyBzbG93UG9sbChjbSk7fQotICAgIH0KLSAg
ICBjbS5kaXNwbGF5LnBvbGwuc2V0KDIwLCBwKTsKLSAgfQotCi0gIC8vIFJlYWQgaW5wdXQgZnJv
bSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLgotICAvLyBX
aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEs
IGFuZAotICAvLyBzZWxlY3RlZCAodW5sZXNzIGl0IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBw
bGFjZWhvbGRlciBpcwotICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUg
Y3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseQotICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0
eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3QKLSAgLy8gbm90IHJlc2V0
IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywgYmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLgotICBm
dW5jdGlvbiByZWFkSW5wdXQoY20pIHsKLSAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0
LCBwcmV2SW5wdXQgPSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jOwotICAgIC8v
IFNpbmNlIHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5
IGFzCi0gICAgLy8gcG9zc2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVu
ZWQuIGhhc1NlbGVjdGlvbgotICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBh
IGxvdCBvZiB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwKLSAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRp
bmcgaXRzIHZhbHVlIHdvdWxkIGJlIGV4cGVuc2l2ZS4KLSAgICBpZiAoIWNtLnN0YXRlLmZvY3Vz
ZWQgfHwgKGhhc1NlbGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCkgfHwgaXNSZWFkT25seShj
bSkgfHwgY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ly8gU2VlIHBhc3RlIGhhbmRsZXIgZm9yIG1vcmUgb24gdGhlIGZha2VkTGFzdENoYXIga2x1ZGdl
Ci0gICAgaWYgKGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20uc3RhdGUuZmFrZWRMYXN0Q2hh
cikgewotICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dC52YWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXQu
dmFsdWUubGVuZ3RoIC0gMSk7Ci0gICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gZmFsc2U7
Ci0gICAgfQotICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7Ci0gICAgLy8gSWYgbm90aGluZyBj
aGFuZ2VkLCBiYWlsLgotICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCAmJiAhY20uc29tZXRoaW5n
U2VsZWN0ZWQoKSkgcmV0dXJuIGZhbHNlOwotICAgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNpY2Fs
IHNlbGVjdGlvbiByZXNldHRpbmcgaW4gSUU5LzEwCi0gICAgaWYgKGllICYmICFpZV91cHRvOCAm
JiBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID09PSB0ZXh0KSB7Ci0gICAgICByZXNldElu
cHV0KGNtKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgd2l0aE9wID0g
IWNtLmN1ck9wOwotICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICBjbS5k
aXNwbGF5LnNoaWZ0ID0gZmFsc2U7Ci0KLSAgICBpZiAodGV4dC5jaGFyQ29kZUF0KDApID09IDB4
MjAwYiAmJiBkb2Muc2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgJiYgIXByZXZJ
bnB1dCkKLSAgICAgIHByZXZJbnB1dCA9ICJcdTIwMGIiOwotICAgIC8vIEZpbmQgdGhlIHBhcnQg
b2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3Ci0gICAgdmFyIHNhbWUgPSAwLCBsID0g
TWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwotICAgIHdoaWxlIChzYW1l
IDwgbCAmJiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2Ft
ZSkpICsrc2FtZTsKLSAgICB2YXIgaW5zZXJ0ZWQgPSB0ZXh0LnNsaWNlKHNhbWUpLCB0ZXh0TGlu
ZXMgPSBzcGxpdExpbmVzKGluc2VydGVkKTsKLQotICAgIC8vIFdoZW4gcGFzaW5nIE4gbGluZXMg
aW50byBOIHNlbGVjdGlvbnMsIGluc2VydCBvbmUgbGluZSBwZXIgc2VsZWN0aW9uCi0gICAgdmFy
IG11bHRpUGFzdGUgPSBjbS5zdGF0ZS5wYXN0ZUluY29taW5nICYmIHRleHRMaW5lcy5sZW5ndGgg
PiAxICYmIGRvYy5zZWwucmFuZ2VzLmxlbmd0aCA9PSB0ZXh0TGluZXMubGVuZ3RoOwotCi0gICAg
Ly8gTm9ybWFsIGJlaGF2aW9yIGlzIHRvIGluc2VydCB0aGUgbmV3IHRleHQgaW50byBldmVyeSBz
ZWxlY3Rpb24KLSAgICBmb3IgKHZhciBpID0gZG9jLnNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKLSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwotICAgICAg
dmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTsKLSAgICAgIC8vIEhhbmRs
ZSBkZWxldGlvbgotICAgICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQotICAgICAgICBm
cm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSkp
OwotICAgICAgLy8gSGFuZGxlIG92ZXJ3cml0ZQotICAgICAgZWxzZSBpZiAoY20uc3RhdGUub3Zl
cndyaXRlICYmIHJhbmdlLmVtcHR5KCkgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcpCi0gICAg
ICAgIHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0
Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsKLSAgICAgIHZhciB1cGRh
dGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0OwotICAgICAgdmFyIGNoYW5nZUV2ZW50ID0g
e2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQYXN0ZSA/IFt0ZXh0TGluZXNbaV1dIDog
dGV4dExpbmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFz
dGVJbmNvbWluZyA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/ICJjdXQiIDogIitp
bnB1dCJ9OwotICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZUV2ZW50KTsKLSAgICAgIHNp
Z25hbExhdGVyKGNtLCAiaW5wdXRSZWFkIiwgY20sIGNoYW5nZUV2ZW50KTsKLSAgICAgIC8vIFdo
ZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdn
ZXIgYSByZWluZGVudAotICAgICAgaWYgKGluc2VydGVkICYmICFjbS5zdGF0ZS5wYXN0ZUluY29t
aW5nICYmIGNtLm9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJgotICAgICAgICAgIGNtLm9wdGlvbnMu
c21hcnRJbmRlbnQgJiYgcmFuZ2UuaGVhZC5jaCA8IDEwMCAmJgotICAgICAgICAgICghaSB8fCBk
b2Muc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lICE9IHJhbmdlLmhlYWQubGluZSkpIHsKLSAg
ICAgICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2UuaGVhZCk7Ci0gICAgICAgIGlmICht
b2RlLmVsZWN0cmljQ2hhcnMpIHsKLSAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1vZGUu
ZWxlY3RyaWNDaGFycy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIGlmIChpbnNlcnRlZC5pbmRl
eE9mKG1vZGUuZWxlY3RyaWNDaGFycy5jaGFyQXQoaikpID4gLTEpIHsKLSAgICAgICAgICAgICAg
aW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKLSAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobW9kZS5lbGVjdHJpY0lu
cHV0KSB7Ci0gICAgICAgICAgdmFyIGVuZCA9IGNoYW5nZUVuZChjaGFuZ2VFdmVudCk7Ci0gICAg
ICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoZG9jLCBlbmQubGluZSku
dGV4dC5zbGljZSgwLCBlbmQuY2gpKSkKLSAgICAgICAgICAgIGluZGVudExpbmUoY20sIHJhbmdl
LmhlYWQubGluZSwgInNtYXJ0Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZW5z
dXJlQ3Vyc29yVmlzaWJsZShjbSk7Ci0gICAgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJ
bnB1dDsKLSAgICBjbS5jdXJPcC50eXBpbmcgPSB0cnVlOwotCi0gICAgLy8gRG9uJ3QgbGVhdmUg
bG9uZyB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMgZnVydGhlciBwb2xsaW5n
IHNsb3cKLSAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+
IC0xKSBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7Ci0gICAgZWxzZSBj
bS5kaXNwbGF5LnByZXZJbnB1dCA9IHRleHQ7Ci0gICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9u
KGNtKTsKLSAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcg
PSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFJlc2V0IHRoZSBpbnB1dCB0
byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LAotICAvLyB3aGVu
IG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMgc2VsZWN0ZWQpCi0gIGZ1bmN0aW9uIHJlc2V0SW5w
dXQoY20sIHR5cGluZykgewotICAgIHZhciBtaW5pbWFsLCBzZWxlY3RlZCwgZG9jID0gY20uZG9j
OwotICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7Ci0gICAgICBjbS5kaXNwbGF5LnBy
ZXZJbnB1dCA9ICIiOwotICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5wcmltYXJ5KCk7Ci0gICAg
ICBtaW5pbWFsID0gaGFzQ29weUV2ZW50ICYmCi0gICAgICAgIChyYW5nZS50bygpLmxpbmUgLSBy
YW5nZS5mcm9tKCkubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRTZWxlY3Rpb24oKSku
bGVuZ3RoID4gMTAwMCk7Ci0gICAgICB2YXIgY29udGVudCA9IG1pbmltYWwgPyAiLSIgOiBzZWxl
Y3RlZCB8fCBjbS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQudmFsdWUg
PSBjb250ZW50OwotICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNlbGVjdElucHV0KGNtLmRp
c3BsYXkuaW5wdXQpOwotICAgICAgaWYgKGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1
dEhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7Ci0gICAgfSBlbHNlIGlmICghdHlwaW5nKSB7Ci0gICAg
ICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKLSAg
ICAgIGlmIChpZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBu
dWxsOwotICAgIH0KLSAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFs
OwotICB9Ci0KLSAgZnVuY3Rpb24gZm9jdXNJbnB1dChjbSkgewotICAgIGlmIChjbS5vcHRpb25z
LnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKCFtb2JpbGUgfHwgYWN0aXZlRWx0KCkgIT0gY20u
ZGlzcGxheS5pbnB1dCkpCi0gICAgICBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBlbnN1cmVGb2N1cyhjbSkgewotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkg
eyBmb2N1c0lucHV0KGNtKTsgb25Gb2N1cyhjbSk7IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGlzUmVh
ZE9ubHkoY20pIHsKLSAgICByZXR1cm4gY20ub3B0aW9ucy5yZWFkT25seSB8fCBjbS5kb2MuY2Fu
dEVkaXQ7Ci0gIH0KLQotICAvLyBFVkVOVCBIQU5ETEVSUwotCi0gIC8vIEF0dGFjaCB0aGUgbmVj
ZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBlZGl0b3IKLSAgZnVu
Y3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7Ci0gICAgdmFyIGQgPSBjbS5kaXNwbGF5
OwotICAgIG9uKGQuc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VE
b3duKSk7Ci0gICAgLy8gT2xkZXIgSUUncyB3aWxsIG5vdCBmaXJlIGEgc2Vjb25kIG1vdXNlZG93
biBmb3IgYSBkb3VibGUgY2xpY2sKLSAgICBpZiAoaWVfdXB0bzEwKQotICAgICAgb24oZC5zY3Jv
bGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlm
IChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKLSAgICAgICAgdmFyIHBvcyA9IHBvc0Zy
b21Nb3VzZShjbSwgZSk7Ci0gICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUp
IHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAgICAgZV9wcmV2
ZW50RGVmYXVsdChlKTsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGNtLCBwb3MpOwot
ICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTsK
LSAgICAgIH0pKTsKLSAgICBlbHNlCi0gICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBm
dW5jdGlvbihlKSB7IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUp
OyB9KTsKLSAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2Ug
aGFuZGxlIG91ciBvd24pCi0gICAgb24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGZ1bmN0
aW9uKGUpIHsKLSAgICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICB9KTsKLSAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFm
dGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAotICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1l
c3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKLSAgICAvLyBoYW5kbGVkIGluIG9u
TW91c2VEb3duIGZvciB0aGVzZSBicm93c2Vycy4KLSAgICBpZiAoIWNhcHR1cmVSaWdodENsaWNr
KSBvbihkLnNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0TWVu
dShjbSwgZSk7fSk7Ci0KLSAgICAvLyBTeW5jIHNjcm9sbGluZyBiZXR3ZWVuIGZha2Ugc2Nyb2xs
YmFycyBhbmQgcmVhbCBzY3JvbGxhYmxlCi0gICAgLy8gYXJlYSwgZW5zdXJlIHZpZXdwb3J0IGlz
IHVwZGF0ZWQgd2hlbiBzY3JvbGxpbmcuCi0gICAgb24oZC5zY3JvbGxlciwgInNjcm9sbCIsIGZ1
bmN0aW9uKCkgewotICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7Ci0gICAgICAg
IHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApOwotICAgICAgICBzZXRTY3Jv
bGxMZWZ0KGNtLCBkLnNjcm9sbGVyLnNjcm9sbExlZnQsIHRydWUpOwotICAgICAgICBzaWduYWwo
Y20sICJzY3JvbGwiLCBjbSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgb24oZC5zY3JvbGxiYXJW
LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWln
aHQpIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCk7Ci0gICAgfSk7Ci0g
ICAgb24oZC5zY3JvbGxiYXJILCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5z
Y3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsYmFySC5zY3Jv
bGxMZWZ0KTsKLSAgICB9KTsKLQotICAgIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3Jk
ZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuCi0gICAgb24oZC5zY3Jv
bGxlciwgIm1vdXNld2hlZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsK
LSAgICBvbihkLnNjcm9sbGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9s
bFdoZWVsKGNtLCBlKTt9KTsKLQotICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxi
YXJzIGZyb20ga2lsbGluZyBmb2N1cwotICAgIGZ1bmN0aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5z
dGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAwKTsgfQotICAg
IG9uKGQuc2Nyb2xsYmFySCwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwotICAgIG9uKGQuc2Nyb2xs
YmFyViwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwotICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9t
IGV2ZXIgc2Nyb2xsaW5nCi0gICAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7
IGQud3JhcHBlci5zY3JvbGxUb3AgPSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwotCi0g
ICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBvbktleVVwKSk7Ci0gICAgb24o
ZC5pbnB1dCwgImlucHV0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoaWUgJiYgIWllX3VwdG84
ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxl
Y3Rpb24gPSBudWxsOwotICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOwotICAgIG9uKGQuaW5w
dXQsICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTsKLSAgICBvbihkLmlucHV0
LCAia2V5cHJlc3MiLCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKLSAgICBvbihkLmlucHV0
LCAiZm9jdXMiLCBiaW5kKG9uRm9jdXMsIGNtKSk7Ci0gICAgb24oZC5pbnB1dCwgImJsdXIiLCBi
aW5kKG9uQmx1ciwgY20pKTsKLQotICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKLSAgICAgIGlmICgh
c2lnbmFsRE9NRXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7Ci0gICAgfQotICAgIGlmIChjbS5vcHRp
b25zLmRyYWdEcm9wKSB7Ci0gICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rp
b24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30pOwotICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdl
bnRlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsK
LSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGNtLCBvbkRyb3ApKTsKLSAg
ICB9Ci0gICAgb24oZC5zY3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewotICAgICAgaWYg
KGV2ZW50SW5XaWRnZXQoZCwgZSkpIHJldHVybjsKLSAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21p
bmcgPSB0cnVlOwotICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgICBmYXN0UG9sbChjbSk7Ci0g
ICAgfSk7Ci0gICAgb24oZC5pbnB1dCwgInBhc3RlIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBX
b3JrYXJvdW5kIGZvciB3ZWJraXQgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MDIwNgotICAgICAgLy8gQWRkIGEgY2hhciB0byB0aGUgZW5kIG9mIHRleHRhcmVh
IGJlZm9yZSBwYXN0ZSBvY2N1ciBzbyB0aGF0Ci0gICAgICAvLyBzZWxlY3Rpb24gZG9lc24ndCBz
cGFuIHRvIHRoZSBlbmQgb2YgdGV4dGFyZWEuCi0gICAgICBpZiAod2Via2l0ICYmICFjbS5zdGF0
ZS5mYWtlZExhc3RDaGFyICYmICEobmV3IERhdGUgLSBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8
IDIwMCkpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gZC5pbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5k
ID0gZC5pbnB1dC5zZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGQuaW5wdXQudmFsdWUgKz0gIiQiOwot
ICAgICAgICBkLmlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQu
c2VsZWN0aW9uRW5kID0gZW5kOwotICAgICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1
ZTsKLSAgICAgIH0KLSAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAg
ZmFzdFBvbGwoY20pOwotICAgIH0pOwotCi0gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkg
ewotICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKLSAgICAgICAgaWYgKGQuaW5h
Y2N1cmF0ZVNlbGVjdGlvbikgewotICAgICAgICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgICAg
ICAgZC5pbmFjY3VyYXRlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgZC5pbnB1dC52YWx1
ZSA9IGNtLmdldFNlbGVjdGlvbigpOwotICAgICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOwot
ICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgdGV4dCA9ICIiLCByYW5nZXMg
PSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kb2Muc2VsLnJhbmdlcy5sZW5n
dGg7IGkrKykgewotICAgICAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVh
ZC5saW5lOwotICAgICAgICAgIHZhciBsaW5lUmFuZ2UgPSB7YW5jaG9yOiBQb3MobGluZSwgMCks
IGhlYWQ6IFBvcyhsaW5lICsgMSwgMCl9OwotICAgICAgICAgIHJhbmdlcy5wdXNoKGxpbmVSYW5n
ZSk7Ci0gICAgICAgICAgdGV4dCArPSBjbS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5l
UmFuZ2UuaGVhZCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGUudHlwZSA9PSAiY3V0Iikgewot
ICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMocmFuZ2VzLCBudWxsLCBzZWxfZG9udFNjcm9sbCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAgICAgICAg
ICBkLmlucHV0LnZhbHVlID0gdGV4dDsKLSAgICAgICAgICBzZWxlY3RJbnB1dChkLmlucHV0KTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgY20uc3RhdGUu
Y3V0SW5jb21pbmcgPSB0cnVlOwotICAgIH0KLSAgICBvbihkLmlucHV0LCAiY3V0IiwgcHJlcGFy
ZUNvcHlDdXQpOwotICAgIG9uKGQuaW5wdXQsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwotCi0g
ICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBUYWIga2V5IGluIEtIVE1MCi0gICAgaWYgKGtodG1sKSBv
bihkLnNpemVyLCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGFjdGl2ZUVsdCgp
ID09IGQuaW5wdXQpIGQuaW5wdXQuYmx1cigpOwotICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAg
fSk7Ci0gIH0KLQotICAvLyBDYWxsZWQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXMKLSAgZnVuY3Rp
b24gb25SZXNpemUoY20pIHsKLSAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRp
b24sIGNsZWFyIHNpemUgY2FjaGVzLgotICAgIHZhciBkID0gY20uZGlzcGxheTsKLSAgICBkLmNh
Y2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBu
dWxsOwotICAgIGNtLnNldFNpemUoKTsKLSAgfQotCi0gIC8vIE1PVVNFIEVWRU5UUwotCi0gIC8v
IFJldHVybiB0cnVlIHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2ZW50IGhhcHBlbmVkIGluIGEgd2lk
Z2V0Ci0gIGZ1bmN0aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgewotICAgIGZvciAodmFy
IG4gPSBlX3RhcmdldChlKTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUp
IHsKLSAgICAgIGlmICghbiB8fCBuLmlnbm9yZUV2ZW50cyB8fCBuLnBhcmVudE5vZGUgPT0gZGlz
cGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOwotICAgIH0KLSAg
fQotCi0gIC8vIEdpdmVuIGEgbW91c2UgZXZlbnQsIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcG9z
aXRpb24uIElmIGxpYmVyYWwKLSAgLy8gaXMgZmFsc2UsIGl0IGNoZWNrcyB3aGV0aGVyIGEgZ3V0
dGVyIG9yIHNjcm9sbGJhciB3YXMgY2xpY2tlZCwKLSAgLy8gYW5kIHJldHVybnMgbnVsbCBpZiBp
dCB3YXMuIGZvclJlY3QgaXMgdXNlZCBieSByZWN0YW5ndWxhcgotICAvLyBzZWxlY3Rpb25zLCBh
bmQgdHJpZXMgdG8gZXN0aW1hdGUgYSBjaGFyYWN0ZXIgcG9zaXRpb24gZXZlbiBmb3IKLSAgLy8g
Y29vcmRpbmF0ZXMgYmV5b25kIHRoZSByaWdodCBvZiB0aGUgdGV4dC4KLSAgZnVuY3Rpb24gcG9z
RnJvbU1vdXNlKGNtLCBlLCBsaWJlcmFsLCBmb3JSZWN0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5OwotICAgIGlmICghbGliZXJhbCkgewotICAgICAgdmFyIHRhcmdldCA9IGVfdGFy
Z2V0KGUpOwotICAgICAgaWYgKHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckggfHwgdGFyZ2V0
ID09IGRpc3BsYXkuc2Nyb2xsYmFyViB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNj
cm9sbGJhckZpbGxlciB8fCB0YXJnZXQgPT0gZGlzcGxheS5ndXR0ZXJGaWxsZXIpIHJldHVybiBu
dWxsOwotICAgIH0KLSAgICB2YXIgeCwgeSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3
XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCi0gICAgdHJ5IHsgeCA9IGUu
Y2xpZW50WCAtIHNwYWNlLmxlZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KLSAgICBj
YXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQotICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNt
LCB4LCB5KSwgbGluZTsKLSAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA9PSAxICYmIChs
aW5lID0gZ2V0TGluZShjbS5kb2MsIGNvb3Jkcy5saW5lKS50ZXh0KS5sZW5ndGggPT0gY29vcmRz
LmNoKSB7Ci0gICAgICB2YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3Ro
LCBjbS5vcHRpb25zLnRhYlNpemUpIC0gbGluZS5sZW5ndGg7Ci0gICAgICBjb29yZHMgPSBQb3Mo
Y29vcmRzLmxpbmUsIE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNw
bGF5KS5sZWZ0KSAvIGNoYXJXaWR0aChjbS5kaXNwbGF5KSkgLSBjb2xEaWZmKSk7Ci0gICAgfQot
ICAgIHJldHVybiBjb29yZHM7Ci0gIH0KLQotICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2lu
Z2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljaywKLSAgLy8gc3RhcnQgb2Ygc2Vs
ZWN0aW9uIGRyYWcsIHN0YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvcgotICAvLyAoY3RybC1j
bGljayksIHJlY3RhbmdsZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW4KLSAgLy8gbWlkZGxlLWNs
aWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQK
LSAgLy8gbm90IGludGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC4K
LSAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkgewotICAgIGlmIChzaWduYWxET01FdmVudCh0aGlz
LCBlKSkgcmV0dXJuOwotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owot
ICAgIGRpc3BsYXkuc2hpZnQgPSBlLnNoaWZ0S2V5OwotCi0gICAgaWYgKGV2ZW50SW5XaWRnZXQo
ZGlzcGxheSwgZSkpIHsKLSAgICAgIGlmICghd2Via2l0KSB7Ci0gICAgICAgIC8vIEJyaWVmbHkg
dHVybiBvZmYgZHJhZ2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvCi0gICAgICAgIC8v
IG5vcm1hbCBkcmFnZ2luZyB0aGluZ3MuCi0gICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dh
YmxlID0gZmFsc2U7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9s
bGVyLmRyYWdnYWJsZSA9IHRydWU7fSwgMTAwKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKGNsaWNrSW5HdXR0ZXIoY20sIGUpKSByZXR1cm47Ci0gICAgdmFyIHN0YXJ0
ID0gcG9zRnJvbU1vdXNlKGNtLCBlKTsKLSAgICB3aW5kb3cuZm9jdXMoKTsKLQotICAgIHN3aXRj
aCAoZV9idXR0b24oZSkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICBpZiAoc3RhcnQpCi0gICAgICAg
IGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCk7Ci0gICAgICBlbHNlIGlmIChlX3RhcmdldChl
KSA9PSBkaXNwbGF5LnNjcm9sbGVyKQotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgaWYgKHdlYmtpdCkgY20uc3RhdGUubGFzdE1p
ZGRsZURvd24gPSArbmV3IERhdGU7Ci0gICAgICBpZiAoc3RhcnQpIGV4dGVuZFNlbGVjdGlvbihj
bS5kb2MsIHN0YXJ0KTsKLSAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIw
KTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6
Ci0gICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIG9uQ29udGV4dE1lbnUoY20sIGUpOwotICAg
ICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNr
OwotICBmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpIHsKLSAgICBzZXRUaW1l
b3V0KGJpbmQoZW5zdXJlRm9jdXMsIGNtKSwgMCk7Ci0KLSAgICB2YXIgbm93ID0gK25ldyBEYXRl
LCB0eXBlOwotICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUg
PiBub3cgLSA0MDAgJiYgY21wKGxhc3REb3VibGVDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7Ci0g
ICAgICB0eXBlID0gInRyaXBsZSI7Ci0gICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENs
aWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgY21wKGxhc3RDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7
Ci0gICAgICB0eXBlID0gImRvdWJsZSI7Ci0gICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTog
bm93LCBwb3M6IHN0YXJ0fTsKLSAgICB9IGVsc2UgewotICAgICAgdHlwZSA9ICJzaW5nbGUiOwot
ICAgICAgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07Ci0gICAgfQotCi0gICAg
dmFyIHNlbCA9IGNtLmRvYy5zZWwsIG1vZGlmaWVyID0gbWFjID8gZS5tZXRhS2V5IDogZS5jdHJs
S2V5OwotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFpc1Jl
YWRPbmx5KGNtKSAmJgotICAgICAgICB0eXBlID09ICJzaW5nbGUiICYmIHNlbC5jb250YWlucyhz
dGFydCkgPiAtMSAmJiBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSkKLSAgICAgIGxlZnRCdXR0b25T
dGFydERyYWcoY20sIGUsIHN0YXJ0LCBtb2RpZmllcik7Ci0gICAgZWxzZQotICAgICAgbGVmdEJ1
dHRvblNlbGVjdChjbSwgZSwgc3RhcnQsIHR5cGUsIG1vZGlmaWVyKTsKLSAgfQotCi0gIC8vIFN0
YXJ0IGEgdGV4dCBkcmFnLiBXaGVuIGl0IGVuZHMsIHNlZSBpZiBhbnkgZHJhZ2dpbmcgYWN0dWFs
bHkKLSAgLy8gaGFwcGVuLCBhbmQgdHJlYXQgYXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuCi0gIGZ1
bmN0aW9uIGxlZnRCdXR0b25TdGFydERyYWcoY20sIGUsIHN0YXJ0LCBtb2RpZmllcikgewotICAg
IHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihj
bSwgZnVuY3Rpb24oZTIpIHsKLSAgICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJh
Z2dhYmxlID0gZmFsc2U7Ci0gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxzZTsKLSAg
ICAgIG9mZihkb2N1bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAgICAgIG9mZihkaXNwbGF5
LnNjcm9sbGVyLCAiZHJvcCIsIGRyYWdFbmQpOwotICAgICAgaWYgKE1hdGguYWJzKGUuY2xpZW50
WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xpZW50WSkgPCAxMCkg
ewotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUyKTsKLSAgICAgICAgaWYgKCFtb2RpZmllcikK
LSAgICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgIGZvY3Vz
SW5wdXQoY20pOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3VzIHBy
b2JsZW0gaW4gSUU5ICgjMjEyNykKLSAgICAgICAgaWYgKGllX3VwdG8xMCAmJiAhaWVfdXB0bzgp
Ci0gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVudC5ib2R5LmZvY3VzKCk7
IGZvY3VzSW5wdXQoY20pO30sIDIwKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAvLyBMZXQgdGhl
IGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KLSAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9s
bGVyLmRyYWdnYWJsZSA9IHRydWU7Ci0gICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0Vu
ZDsKLSAgICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQotICAgIGlmIChkaXNwbGF5LnNj
cm9sbGVyLmRyYWdEcm9wKSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7Ci0gICAgb24oZG9j
dW1lbnQsICJtb3VzZXVwIiwgZHJhZ0VuZCk7Ci0gICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRy
b3AiLCBkcmFnRW5kKTsKLSAgfQotCi0gIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQg
dG8gdGV4dCBkcmFnZ2luZy4KLSAgZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZSwgc3Rh
cnQsIHR5cGUsIGFkZE5ldykgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0g
Y20uZG9jOwotICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0KLSAgICB2YXIgb3VyUmFuZ2UsIG91
ckluZGV4LCBzdGFydFNlbCA9IGRvYy5zZWw7Ci0gICAgaWYgKGFkZE5ldyAmJiAhZS5zaGlmdEtl
eSkgewotICAgICAgb3VySW5kZXggPSBkb2Muc2VsLmNvbnRhaW5zKHN0YXJ0KTsKLSAgICAgIGlm
IChvdXJJbmRleCA+IC0xKQotICAgICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucmFuZ2VzW291cklu
ZGV4XTsKLSAgICAgIGVsc2UKLSAgICAgICAgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0
YXJ0KTsKLSAgICB9IGVsc2UgewotICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsK
LSAgICB9Ci0KLSAgICBpZiAoZS5hbHRLZXkpIHsKLSAgICAgIHR5cGUgPSAicmVjdCI7Ci0gICAg
ICBpZiAoIWFkZE5ldykgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKLSAgICAg
IHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlLCB0cnVlKTsKLSAgICAgIG91ckluZGV4
ID0gLTE7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJkb3VibGUiKSB7Ci0gICAgICB2YXIgd29y
ZCA9IGZpbmRXb3JkQXQoY20sIHN0YXJ0KTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8
IGRvYy5leHRlbmQpCi0gICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5n
ZSwgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG91clJhbmdl
ID0gd29yZDsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgIHZhciBs
aW5lID0gbmV3IFJhbmdlKFBvcyhzdGFydC5saW5lLCAwKSwgY2xpcFBvcyhkb2MsIFBvcyhzdGFy
dC5saW5lICsgMSwgMCkpKTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRl
bmQpCi0gICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgbGluZS5h
bmNob3IsIGxpbmUuaGVhZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG91clJhbmdlID0gbGluZTsK
LSAgICB9IGVsc2UgewotICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdl
LCBzdGFydCk7Ci0gICAgfQotCi0gICAgaWYgKCFhZGROZXcpIHsKLSAgICAgIG91ckluZGV4ID0g
MDsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCks
IHNlbF9tb3VzZSk7Ci0gICAgICBzdGFydFNlbCA9IGRvYy5zZWw7Ci0gICAgfSBlbHNlIGlmIChv
dXJJbmRleCA+IC0xKSB7Ci0gICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgs
IG91clJhbmdlLCBzZWxfbW91c2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXJJbmRleCA9IGRv
Yy5zZWwucmFuZ2VzLmxlbmd0aDsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNl
bGVjdGlvbihkb2Muc2VsLnJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKLSAg
ICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOwotICAg
IH0KLQotICAgIHZhciBsYXN0UG9zID0gc3RhcnQ7Ci0gICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9z
KSB7Ci0gICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgcmV0dXJuOwotICAgICAgbGFz
dFBvcyA9IHBvczsKLQotICAgICAgaWYgKHR5cGUgPT0gInJlY3QiKSB7Ci0gICAgICAgIHZhciBy
YW5nZXMgPSBbXSwgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgICAgdmFyIHN0
YXJ0Q29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0
LmNoLCB0YWJTaXplKTsKLSAgICAgICAgdmFyIHBvc0NvbCA9IGNvdW50Q29sdW1uKGdldExpbmUo
ZG9jLCBwb3MubGluZSkudGV4dCwgcG9zLmNoLCB0YWJTaXplKTsKLSAgICAgICAgdmFyIGxlZnQg
PSBNYXRoLm1pbihzdGFydENvbCwgcG9zQ29sKSwgcmlnaHQgPSBNYXRoLm1heChzdGFydENvbCwg
cG9zQ29sKTsKLSAgICAgICAgZm9yICh2YXIgbGluZSA9IE1hdGgubWluKHN0YXJ0LmxpbmUsIHBv
cy5saW5lKSwgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgTWF0aC5tYXgoc3RhcnQubGlu
ZSwgcG9zLmxpbmUpKTsKLSAgICAgICAgICAgICBsaW5lIDw9IGVuZDsgbGluZSsrKSB7Ci0gICAg
ICAgICAgdmFyIHRleHQgPSBnZXRMaW5lKGRvYywgbGluZSkudGV4dCwgbGVmdFBvcyA9IGZpbmRD
b2x1bW4odGV4dCwgbGVmdCwgdGFiU2l6ZSk7Ci0gICAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQp
Ci0gICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQ
b3MobGluZSwgbGVmdFBvcykpKTsKLSAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxl
ZnRQb3MpCi0gICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQ
b3MpLCBQb3MobGluZSwgZmluZENvbHVtbih0ZXh0LCByaWdodCwgdGFiU2l6ZSkpKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSByYW5nZXMucHVzaChuZXcgUmFuZ2Uo
c3RhcnQsIHN0YXJ0KSk7Ci0gICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVj
dGlvbihzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBv
dXJJbmRleCksCi0gICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiAiKm1vdXNlIiwgc2Nyb2xs
OiBmYWxzZX0pOwotICAgICAgICBjbS5zY3JvbGxJbnRvVmlldyhwb3MpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgdmFyIG9sZFJhbmdlID0gb3VyUmFuZ2U7Ci0gICAgICAgIHZhciBhbmNob3Ig
PSBvbGRSYW5nZS5hbmNob3IsIGhlYWQgPSBwb3M7Ci0gICAgICAgIGlmICh0eXBlICE9ICJzaW5n
bGUiKSB7Ci0gICAgICAgICAgaWYgKHR5cGUgPT0gImRvdWJsZSIpCi0gICAgICAgICAgICB2YXIg
cmFuZ2UgPSBmaW5kV29yZEF0KGNtLCBwb3MpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZhciByYW5nZSA9IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9z
KHBvcy5saW5lICsgMSwgMCkpKTsKLSAgICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5j
aG9yKSA+IDApIHsKLSAgICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkOwotICAgICAgICAgICAg
YW5jaG9yID0gbWluUG9zKG9sZFJhbmdlLmZyb20oKSwgcmFuZ2UuYW5jaG9yKTsKLSAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjsKLSAgICAgICAgICAg
IGFuY2hvciA9IG1heFBvcyhvbGRSYW5nZS50bygpLCByYW5nZS5oZWFkKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHJhbmdlcyA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgw
KTsKLSAgICAgICAgcmFuZ2VzW291ckluZGV4XSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5j
aG9yKSwgaGVhZCk7Ci0gICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlv
bihyYW5nZXMsIG91ckluZGV4KSwgc2VsX21vdXNlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2
YXIgZWRpdG9yU2l6ZSA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsK
LSAgICAvLyBVc2VkIHRvIGVuc3VyZSB0aW1lb3V0IHJlLXRyaWVzIGRvbid0IGZpcmUgd2hlbiBh
bm90aGVyIGV4dGVuZAotICAgIC8vIGhhcHBlbmVkIGluIHRoZSBtZWFudGltZSAoY2xlYXJUaW1l
b3V0IGlzbid0IHJlbGlhYmxlIC0tIGF0Ci0gICAgLy8gbGVhc3Qgb24gQ2hyb21lLCB0aGUgdGlt
ZW91dHMgc3RpbGwgaGFwcGVuIGV2ZW4gd2hlbiBjbGVhcmVkLAotICAgIC8vIGlmIHRoZSBjbGVh
ciBoYXBwZW5zIGFmdGVyIHRoZWlyIHNjaGVkdWxlZCBmaXJpbmcgdGltZSkuCi0gICAgdmFyIGNv
dW50ZXIgPSAwOwotCi0gICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKLSAgICAgIHZhciBjdXJDb3Vu
dCA9ICsrY291bnRlcjsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUs
IHR5cGUgPT0gInJlY3QiKTsKLSAgICAgIGlmICghY3VyKSByZXR1cm47Ci0gICAgICBpZiAoY21w
KGN1ciwgbGFzdFBvcykgIT0gMCkgewotICAgICAgICBlbnN1cmVGb2N1cyhjbSk7Ci0gICAgICAg
IGV4dGVuZFRvKGN1cik7Ci0gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3Bs
YXksIGRvYyk7Ci0gICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5l
IDwgdmlzaWJsZS5mcm9tKQotICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5j
dGlvbigpe2lmIChjb3VudGVyID09IGN1ckNvdW50KSBleHRlbmQoZSk7fSksIDE1MCk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB2YXIgb3V0c2lkZSA9IGUuY2xpZW50WSA8IGVkaXRvclNpemUu
dG9wID8gLTIwIDogZS5jbGllbnRZID4gZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6IDA7Ci0gICAg
ICAgIGlmIChvdXRzaWRlKSBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgaWYgKGNvdW50ZXIgIT0gY3VyQ291bnQpIHJldHVybjsKLSAgICAgICAgICBkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcCArPSBvdXRzaWRlOwotICAgICAgICAgIGV4dGVuZChlKTsK
LSAgICAgICAgfSksIDUwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkb25lKGUp
IHsKLSAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7
Ci0gICAgICBmb2N1c0lucHV0KGNtKTsKLSAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlbW92ZSIs
IG1vdmUpOwotICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKLSAgICAgIGRvYy5o
aXN0b3J5Lmxhc3RTZWxPcmlnaW4gPSBudWxsOwotICAgIH0KLQotICAgIHZhciBtb3ZlID0gb3Bl
cmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoKGllICYmICFpZV91cHRvOSkgPyAg
IWUuYnV0dG9ucyA6ICFlX2J1dHRvbihlKSkgZG9uZShlKTsKLSAgICAgIGVsc2UgZXh0ZW5kKGUp
OwotICAgIH0pOwotICAgIHZhciB1cCA9IG9wZXJhdGlvbihjbSwgZG9uZSk7Ci0gICAgb24oZG9j
dW1lbnQsICJtb3VzZW1vdmUiLCBtb3ZlKTsKLSAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1
cCk7Ci0gIH0KLQotICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaGFwcGVuZWQgaW4g
dGhlIGd1dHRlciwgYW5kIGZpcmVzIHRoZQotICAvLyBoYW5kbGVycyBmb3IgdGhlIGNvcnJlc3Bv
bmRpbmcgZXZlbnQuCi0gIGZ1bmN0aW9uIGd1dHRlckV2ZW50KGNtLCBlLCB0eXBlLCBwcmV2ZW50
LCBzaWduYWxmbikgewotICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVu
dFk7IH0KLSAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlmIChtWCA+PSBNYXRo
LmZsb29yKGNtLmRpc3BsYXkuZ3V0dGVycy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkp
IHJldHVybiBmYWxzZTsKLSAgICBpZiAocHJldmVudCkgZV9wcmV2ZW50RGVmYXVsdChlKTsKLQot
ICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIgbGluZUJveCA9IGRpc3BsYXku
bGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLQotICAgIGlmIChtWSA+IGxpbmVCb3gu
Ym90dG9tIHx8ICFoYXNIYW5kbGVyKGNtLCB0eXBlKSkgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRl
ZChlKTsKLSAgICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDsKLQotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICB2YXIgZyA9IGRpc3BsYXkuZ3V0dGVycy5jaGlsZE5vZGVzW2ldOwotICAgICAgaWYgKGcg
JiYgZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+PSBtWCkgewotICAgICAgICB2YXIg
bGluZSA9IGxpbmVBdEhlaWdodChjbS5kb2MsIG1ZKTsKLSAgICAgICAgdmFyIGd1dHRlciA9IGNt
Lm9wdGlvbnMuZ3V0dGVyc1tpXTsKLSAgICAgICAgc2lnbmFsZm4oY20sIHR5cGUsIGNtLCBsaW5l
LCBndXR0ZXIsIGUpOwotICAgICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpOwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKLSAg
ICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDbGljayIsIHRydWUsIHNpZ25hbExh
dGVyKTsKLSAgfQotCi0gIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCBzdHJhbmdlIElFIGJlaGF2
aW9yIHdoZXJlIGl0J2xsIHNvbWV0aW1lcwotICAvLyByZS1maXJlIGEgc2VyaWVzIG9mIGRyYWct
cmVsYXRlZCBldmVudHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKQotICB2YXIgbGFzdERy
b3AgPSAwOwotCi0gIGZ1bmN0aW9uIG9uRHJvcChlKSB7Ci0gICAgdmFyIGNtID0gdGhpczsKLSAg
ICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwg
ZSkpCi0gICAgICByZXR1cm47Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBpZiAoaWUp
IGxhc3REcm9wID0gK25ldyBEYXRlOwotICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUs
IHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwotICAgIGlmICghcG9zIHx8IGlz
UmVhZE9ubHkoY20pKSByZXR1cm47Ci0gICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdo
aWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKLSAgICAvLyBhbmQgaW5zZXJ0IGl0
LgotICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYg
d2luZG93LkZpbGUpIHsKLSAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXko
biksIHJlYWQgPSAwOwotICAgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgaSkgewot
ICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7Ci0gICAgICAgIHJlYWRlci5vbmxv
YWQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRleHRbaV0gPSByZWFk
ZXIucmVzdWx0OwotICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewotICAgICAgICAgICAgcG9z
ID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7Ci0gICAgICAgICAgICB2YXIgY2hhbmdlID0ge2Zyb206
IHBvcywgdG86IHBvcywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikpLCBvcmlnaW46
ICJwYXN0ZSJ9OwotICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZSk7Ci0gICAg
ICAgICAgICBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShjbS5kb2MsIHNpbXBsZVNlbGVjdGlv
bihwb3MsIGNoYW5nZUVuZChjaGFuZ2UpKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7Ci0gICAgICB9OwotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuOyArK2kpIGxvYWRGaWxlKGZpbGVzW2ldLCBpKTsKLSAgICB9IGVsc2UgeyAv
LyBOb3JtYWwgZHJvcAotICAgICAgLy8gRG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhh
cHBlbmVkIGluc2lkZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dC4KLSAgICAgIGlmIChjbS5zdGF0ZS5k
cmFnZ2luZ1RleHQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID4gLTEpIHsKLSAgICAgICAg
Y20uc3RhdGUuZHJhZ2dpbmdUZXh0KGUpOwotICAgICAgICAvLyBFbnN1cmUgdGhlIGVkaXRvciBp
cyByZS1mb2N1c2VkCi0gICAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIw
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHRl
eHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7Ci0gICAgICAgIGlmICh0ZXh0KSB7
Ci0gICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKG1hYyA/IGUubWV0YUtl
eSA6IGUuY3RybEtleSkpCi0gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0
aW9ucygpOwotICAgICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVj
dGlvbihwb3MsIHBvcykpOwotICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7
IGkgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbS5k
b2MsICIiLCBzZWxlY3RlZFtpXS5hbmNob3IsIHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7Ci0g
ICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7Ci0g
ICAgICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNo
KGUpe30KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkgewotICAg
IGlmIChpZSAmJiAoIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8fCArbmV3IERhdGUgLSBsYXN0RHJv
cCA8IDEwMCkpIHsgZV9zdG9wKGUpOyByZXR1cm47IH0KLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQo
Y20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKLQotICAgIGUu
ZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCBjbS5nZXRTZWxlY3Rpb24oKSk7Ci0KLSAgICAv
LyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgotICAg
IC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdo
ZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KLSAgICBpZiAoZS5kYXRh
VHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpIHsKLSAgICAgIHZhciBpbWcgPSBlbHQo
ImltZyIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsK
LSAgICAgIGltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFB
Q0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOwotICAgICAgaWYgKHByZXN0bykg
ewotICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKLSAgICAgICAgY20uZGlzcGxh
eS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7Ci0gICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQs
IG9yIE9wZXJhIHdvbid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24KLSAg
ICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wOwotICAgICAgfQotICAgICAgZS5kYXRhVHJh
bnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7Ci0gICAgICBpZiAocHJlc3RvKSBpbWcucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChpbWcpOwotICAgIH0KLSAgfQotCi0gIC8vIFNDUk9MTCBFVkVO
VFMKLQotICAvLyBTeW5jIHRoZSBzY3JvbGxhYmxlIGFyZWEgYW5kIHNjcm9sbGJhcnMsIGVuc3Vy
ZSB0aGUgdmlld3BvcnQKLSAgLy8gY292ZXJzIHRoZSB2aXNpYmxlIGFyZWEuCi0gIGZ1bmN0aW9u
IHNldFNjcm9sbFRvcChjbSwgdmFsKSB7Ci0gICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxU
b3AgLSB2YWwpIDwgMikgcmV0dXJuOwotICAgIGNtLmRvYy5zY3JvbGxUb3AgPSB2YWw7Ci0gICAg
aWYgKCFnZWNrbykgdXBkYXRlRGlzcGxheShjbSwge3RvcDogdmFsfSk7Ci0gICAgaWYgKGNtLmRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3AgPSB2YWw7Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgIT0g
dmFsKSBjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gdmFsOwotICAgIGlmIChnZWNr
bykgdXBkYXRlRGlzcGxheShjbSk7Ci0gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7Ci0gIH0KLSAg
Ly8gU3luYyBzY3JvbGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50
cyBhcmUKLSAgLy8gYWxpZ25lZC4KLSAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBp
c1Njcm9sbGVyKSB7Ci0gICAgaWYgKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExl
ZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSByZXR1cm47Ci0gICAg
dmFsID0gTWF0aC5taW4odmFsLCBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gY20u
ZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCk7Ci0gICAgY20uZG9jLnNjcm9sbExlZnQgPSB2
YWw7Ci0gICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOwotICAgIGlmIChjbS5kaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2
YWw7Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ICE9IHZhbCkgY20u
ZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSB2YWw7Ci0gIH0KLQotICAvLyBTaW5jZSB0
aGUgZGVsdGEgdmFsdWVzIHJlcG9ydGVkIG9uIG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKLSAgLy8g
dW5zdGFuZGFyZGl6ZWQgYmV0d2VlbiBicm93c2VycyBhbmQgZXZlbiBicm93c2VyIHZlcnNpb25z
LCBhbmQKLSAgLy8gZ2VuZXJhbGx5IGhvcnJpYmx5IHVucHJlZGljdGFibGUsIHRoaXMgY29kZSBz
dGFydHMgYnkgbWVhc3VyaW5nCi0gIC8vIHRoZSBzY3JvbGwgZWZmZWN0IHRoYXQgdGhlIGZpcnN0
IGZldyBtb3VzZSB3aGVlbCBldmVudHMgaGF2ZSwKLSAgLy8gYW5kLCBmcm9tIHRoYXQsIGRldGVj
dHMgdGhlIHdheSBpdCBjYW4gY29udmVydCBkZWx0YXMgdG8gcGl4ZWwKLSAgLy8gb2Zmc2V0cyBh
ZnRlcndhcmRzLgotICAvLwotICAvLyBUaGUgcmVhc29uIHdlIHdhbnQgdG8ga25vdyB0aGUgYW1v
dW50IGEgd2hlZWwgZXZlbnQgd2lsbCBzY3JvbGwKLSAgLy8gaXMgdGhhdCBpdCBnaXZlcyB1cyBh
IGNoYW5jZSB0byB1cGRhdGUgdGhlIGRpc3BsYXkgYmVmb3JlIHRoZQotICAvLyBhY3R1YWwgc2Ny
b2xsaW5nIGhhcHBlbnMsIHJlZHVjaW5nIGZsaWNrZXJpbmcuCi0KLSAgdmFyIHdoZWVsU2FtcGxl
cyA9IDAsIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IG51bGw7Ci0gIC8vIEZpbGwgaW4gYSBicm93c2Vy
LWRldGVjdGVkIHN0YXJ0aW5nIHZhbHVlIG9uIGJyb3dzZXJzIHdoZXJlIHdlCi0gIC8vIGtub3cg
b25lLiBUaGVzZSBkb24ndCBoYXZlIHRvIGJlIGFjY3VyYXRlIC0tIHRoZSByZXN1bHQgb2YgdGhl
bQotICAvLyBiZWluZyB3cm9uZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0IGZsaWNrZXIgb24gdGhl
IGZpcnN0IHdoZWVsCi0gIC8vIHNjcm9sbCAoaWYgaXQgaXMgbGFyZ2UgZW5vdWdoKS4KLSAgaWYg
KGllKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjUzOwotICBlbHNlIGlmIChnZWNrbykgd2hlZWxQ
aXhlbHNQZXJVbml0ID0gMTU7Ci0gIGVsc2UgaWYgKGNocm9tZSkgd2hlZWxQaXhlbHNQZXJVbml0
ID0gLS43OwotICBlbHNlIGlmIChzYWZhcmkpIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7Ci0K
LSAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkgewotICAgIHZhciBkeCA9IGUud2hlZWxE
ZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTsKLSAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFp
bCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIGR4ID0gZS5kZXRhaWw7Ci0gICAgaWYg
KGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuVkVSVElDQUxfQVhJUykgZHkg
PSBlLmRldGFpbDsKLSAgICBlbHNlIGlmIChkeSA9PSBudWxsKSBkeSA9IGUud2hlZWxEZWx0YTsK
LQotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2Nyb2xsID0gZGlzcGxheS5zY3JvbGxl
cjsKLSAgICAvLyBRdWl0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzY3JvbGwgaGVyZQotICAgIGlm
ICghKGR4ICYmIHNjcm9sbC5zY3JvbGxXaWR0aCA+IHNjcm9sbC5jbGllbnRXaWR0aCB8fAotICAg
ICAgICAgIGR5ICYmIHNjcm9sbC5zY3JvbGxIZWlnaHQgPiBzY3JvbGwuY2xpZW50SGVpZ2h0KSkg
cmV0dXJuOwotCi0gICAgLy8gV2Via2l0IGJyb3dzZXJzIG9uIE9TIFggYWJvcnQgbW9tZW50dW0g
c2Nyb2xscyB3aGVuIHRoZSB0YXJnZXQKLSAgICAvLyBvZiB0aGUgc2Nyb2xsIGV2ZW50IGlzIHJl
bW92ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LgotICAgIC8vIFRoaXMgaGFjayAoc2Vl
IHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlCi0gICAgLy8gZWxl
bWVudCBpcyBrZXB0IGFyb3VuZC4KLSAgICBpZiAoZHkgJiYgbWFjICYmIHdlYmtpdCkgewotICAg
ICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBj
dXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAodmlld1tpXS5ub2Rl
ID09IGN1cikgewotICAgICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBj
dXI7Ci0gICAgICAgICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBPbiBzb21lIGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9s
bGluZyB3aWxsIGNhdXNlIHJlZHJhd3MgdG8KLSAgICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0
ZXIgaGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvCi0gICAgLy8gd3JpZ2dsZSBhcm91
bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuCi0gICAgLy8gZXN0aW1h
dGVkIHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbAotICAgIC8v
IHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRp
dmUsIGJ1dAotICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCi0gICAgaWYgKGR4ICYm
ICFnZWNrbyAmJiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7Ci0gICAg
ICBpZiAoZHkpCi0gICAgICAgIHNldFNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4o
c2Nyb2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xs
SGVpZ2h0IC0gc2Nyb2xsLmNsaWVudEhlaWdodCkpKTsKLSAgICAgIHNldFNjcm9sbExlZnQoY20s
IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVs
c1BlclVuaXQsIHNjcm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRXaWR0aCkpKTsKLSAg
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVs
bDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzCi0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gJ1Byb2plY3QnIHRoZSB2aXNpYmxlIHZpZXdwb3J0IHRvIGNvdmVyIHRo
ZSBhcmVhIHRoYXQgaXMgYmVpbmcKLSAgICAvLyBzY3JvbGxlZCBpbnRvIHZpZXcgKGlmIHdlIGtu
b3cgZW5vdWdoIHRvIGVzdGltYXRlIGl0KS4KLSAgICBpZiAoZHkgJiYgd2hlZWxQaXhlbHNQZXJV
bml0ICE9IG51bGwpIHsKLSAgICAgIHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5p
dDsKLSAgICAgIHZhciB0b3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBkaXNwbGF5
LndyYXBwZXIuY2xpZW50SGVpZ2h0OwotICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9IE1hdGgu
bWF4KDAsIHRvcCArIHBpeGVscyAtIDUwKTsKLSAgICAgIGVsc2UgYm90ID0gTWF0aC5taW4oY20u
ZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzICsgNTApOwotICAgICAgdXBkYXRlRGlzcGxheShjbSwg
e3RvcDogdG9wLCBib3R0b206IGJvdH0pOwotICAgIH0KLQotICAgIGlmICh3aGVlbFNhbXBsZXMg
PCAyMCkgewotICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgewotICAgICAg
ICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxT
dGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wOwotICAgICAgICBkaXNwbGF5LndoZWVsRFggPSBkeDsg
ZGlzcGxheS53aGVlbERZID0gZHk7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgcmV0dXJuOwotICAgICAg
ICAgIHZhciBtb3ZlZFggPSBzY3JvbGwuc2Nyb2xsTGVmdCAtIGRpc3BsYXkud2hlZWxTdGFydFg7
Ci0gICAgICAgICAgdmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSBkaXNwbGF5LndoZWVs
U3RhcnRZOwotICAgICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIGRpc3BsYXkud2hlZWxE
WSAmJiBtb3ZlZFkgLyBkaXNwbGF5LndoZWVsRFkpIHx8Ci0gICAgICAgICAgICAobW92ZWRYICYm
IGRpc3BsYXkud2hlZWxEWCAmJiBtb3ZlZFggLyBkaXNwbGF5LndoZWVsRFgpOwotICAgICAgICAg
IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKLSAgICAg
ICAgICBpZiAoIXNhbXBsZSkgcmV0dXJuOwotICAgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5pdCA9
ICh3aGVlbFBpeGVsc1BlclVuaXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVsU2Ft
cGxlcyArIDEpOwotICAgICAgICAgICsrd2hlZWxTYW1wbGVzOwotICAgICAgICB9LCAyMDApOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlzcGxheS53aGVlbERYICs9IGR4OyBkaXNwbGF5Lndo
ZWVsRFkgKz0gZHk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gS0VZIEVWRU5UUwotCi0g
IC8vIFJ1biBhIGhhbmRsZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCi0gIGZ1bmN0aW9uIGRv
SGFuZGxlQmluZGluZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkgewotICAgIGlmICh0eXBlb2YgYm91
bmQgPT0gInN0cmluZyIpIHsKLSAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwotICAgICAg
aWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBFbnN1cmUgcHJldmlvdXMg
aW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKLSAgICAvLyBj
b25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50Ci0gICAgaWYgKGNtLmRpc3BsYXkucG9sbGlu
Z0Zhc3QgJiYgcmVhZElucHV0KGNtKSkgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOwot
ICAgIHZhciBwcmV2U2hpZnQgPSBjbS5kaXNwbGF5LnNoaWZ0LCBkb25lID0gZmFsc2U7Ci0gICAg
dHJ5IHsKLSAgICAgIGlmIChpc1JlYWRPbmx5KGNtKSkgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9
IHRydWU7Ci0gICAgICBpZiAoZHJvcFNoaWZ0KSBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7Ci0g
ICAgICBkb25lID0gYm91bmQoY20pICE9IFBhc3M7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIGNt
LmRpc3BsYXkuc2hpZnQgPSBwcmV2U2hpZnQ7Ci0gICAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRz
ID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBkb25lOwotICB9Ci0KLSAgLy8gQ29sbGVjdCB0
aGUgY3VycmVudGx5IGFjdGl2ZSBrZXltYXBzLgotICBmdW5jdGlvbiBhbGxLZXlNYXBzKGNtKSB7
Ci0gICAgdmFyIG1hcHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNsaWNlKDApOwotICAgIGlmIChjbS5v
cHRpb25zLmV4dHJhS2V5cykgbWFwcy5wdXNoKGNtLm9wdGlvbnMuZXh0cmFLZXlzKTsKLSAgICBt
YXBzLnB1c2goY20ub3B0aW9ucy5rZXlNYXApOwotICAgIHJldHVybiBtYXBzOwotICB9Ci0KLSAg
dmFyIG1heWJlVHJhbnNpdGlvbjsKLSAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24g
ZXZlbnQuCi0gIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHsKLSAgICAvLyBIYW5k
bGUgYXV0b21hdGljIGtleW1hcCB0cmFuc2l0aW9ucwotICAgIHZhciBzdGFydE1hcCA9IGdldEtl
eU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwotICAgIGNsZWFy
VGltZW91dChtYXliZVRyYW5zaXRpb24pOwotICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5
KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApIHsKLSAgICAgICAgY20u
b3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGNtKSA6IG5leHQp
OwotICAgICAgICBrZXlNYXBDaGFuZ2VkKGNtKTsKLSAgICAgIH0KLSAgICB9LCA1MCk7Ci0KLSAg
ICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAo
IW5hbWUpIHJldHVybiBmYWxzZTsKLSAgICB2YXIga2V5bWFwcyA9IGFsbEtleU1hcHMoY20pOwot
Ci0gICAgaWYgKGUuc2hpZnRLZXkpIHsKLSAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1
bGwgbmFtZSAoaW5jbHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZwotICAgICAgLy8gdGhhdCwgc2Vl
IGlmIHRoZXJlIGlzIGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoCi0gICAg
ICAvLyAnZ28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLgotICAgICAg
aGFuZGxlZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIp
IHtyZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9KQotICAgICAgICAgICAgIHx8
IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7Ci0gICAgICAgICAgICAgICAg
ICBpZiAodHlwZW9mIGIgPT0gInN0cmluZyIgPyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGhhbmRsZWQgPSBsb29rdXBL
ZXkobmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNt
LCBiKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgIGVfcHJldmVudERl
ZmF1bHQoZSk7Ci0gICAgICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0ZXIoY20s
ICJrZXlIYW5kbGVkIiwgY20sIG5hbWUsIGUpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZGxlZDsK
LSAgfQotCi0gIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudAotICBmdW5j
dGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKLSAgICB2YXIgaGFuZGxlZCA9IGxv
b2t1cEtleSgiJyIgKyBjaCArICInIiwgYWxsS2V5TWFwcyhjbSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0
cnVlKTsgfSk7Ci0gICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7
Ci0gICAgICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5k
bGVkIiwgY20sICInIiArIGNoICsgIiciLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmRsZWQ7
Ci0gIH0KLQotICB2YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsOwotICBmdW5jdGlvbiBvbktleURv
d24oZSkgewotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgZW5zdXJlRm9jdXMoY20pOwotICAgIGlm
IChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKLSAgICAvLyBJRSBkb2VzIHN0cmFuZ2Ug
dGhpbmdzIHdpdGggZXNjYXBlLgotICAgIGlmIChpZV91cHRvMTAgJiYgZS5rZXlDb2RlID09IDI3
KSBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7Ci0gICAg
Y20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsKLSAgICB2YXIgaGFu
ZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpOwotICAgIGlmIChwcmVzdG8pIHsKLSAgICAg
IGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwotICAgICAgLy8gT3BlcmEg
aGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21i
bwotICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAmJiAo
bWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSkKLSAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlv
bigiIiwgbnVsbCwgImN1dCIpOwotICAgIH0KLQotICAgIC8vIFR1cm4gbW91c2UgaW50byBjcm9z
c2hhaXIgd2hlbiBBbHQgaXMgaGVsZCBvbiBNYWMuCi0gICAgaWYgKGNvZGUgPT0gMTggJiYgIS9c
YkNvZGVNaXJyb3ItY3Jvc3NoYWlyXGIvLnRlc3QoY20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFt
ZSkpCi0gICAgICBzaG93Q3Jvc3NIYWlyKGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dDcm9z
c0hhaXIoY20pIHsKLSAgICB2YXIgbGluZURpdiA9IGNtLmRpc3BsYXkubGluZURpdjsKLSAgICBh
ZGRDbGFzcyhsaW5lRGl2LCAiQ29kZU1pcnJvci1jcm9zc2hhaXIiKTsKLQotICAgIGZ1bmN0aW9u
IHVwKGUpIHsKLSAgICAgIGlmIChlLmtleUNvZGUgPT0gMTggfHwgIWUuYWx0S2V5KSB7Ci0gICAg
ICAgIHJtQ2xhc3MobGluZURpdiwgIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIik7Ci0gICAgICAgIG9m
Zihkb2N1bWVudCwgImtleXVwIiwgdXApOwotICAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW92
ZXIiLCB1cCk7Ci0gICAgICB9Ci0gICAgfQotICAgIG9uKGRvY3VtZW50LCAia2V5dXAiLCB1cCk7
Ci0gICAgb24oZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7Ci0gIH0KLQotICBmdW5jdGlvbiBv
bktleVVwKGUpIHsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQodGhpcywgZSkpIHJldHVybjsKLSAg
ICBpZiAoZS5rZXlDb2RlID09IDE2KSB0aGlzLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgewotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYg
KHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwotICAgIHZhciBrZXlDb2RlID0gZS5rZXlD
b2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7Ci0gICAgaWYgKHByZXN0byAmJiBrZXlDb2RlID09
IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0
KGUpOyByZXR1cm47fQotICAgIGlmICgoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8
IDEwKSkgfHwga2h0bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47Ci0gICAg
dmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6
IGNoYXJDb2RlKTsKLSAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJu
OwotICAgIGlmIChpZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24g
PSBudWxsOwotICAgIGZhc3RQb2xsKGNtKTsKLSAgfQotCi0gIC8vIEZPQ1VTL0JMVVIgRVZFTlRT
Ci0KLSAgZnVuY3Rpb24gb25Gb2N1cyhjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5
ID09ICJub2N1cnNvciIpIHJldHVybjsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsKLSAg
ICAgIHNpZ25hbChjbSwgImZvY3VzIiwgY20pOwotICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRy
dWU7Ci0gICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3Vz
ZWQiKTsKLSAgICAgIC8vIFRoZSBwcmV2SW5wdXQgdGVzdCBwcmV2ZW50cyB0aGlzIGZyb20gZmly
aW5nIHdoZW4gYSBjb250ZXh0Ci0gICAgICAvLyBtZW51IGlzIGNsb3NlZCAoc2luY2UgdGhlIHJl
c2V0SW5wdXQgd291bGQga2lsbCB0aGUKLSAgICAgIC8vIHNlbGVjdC1hbGwgZGV0ZWN0aW9uIGhh
Y2spCi0gICAgICBpZiAoIWNtLmN1ck9wICYmIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUg
IT0gY20uZG9jLnNlbCkgewotICAgICAgICByZXNldElucHV0KGNtKTsKLSAgICAgICAgaWYgKHdl
YmtpdCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0cnVlKSwgMCk7IC8vIElzc3Vl
ICMxNzMwCi0gICAgICB9Ci0gICAgfQotICAgIHNsb3dQb2xsKGNtKTsKLSAgICByZXN0YXJ0Qmxp
bmsoY20pOwotICB9Ci0gIGZ1bmN0aW9uIG9uQmx1cihjbSkgewotICAgIGlmIChjbS5zdGF0ZS5m
b2N1c2VkKSB7Ci0gICAgICBzaWduYWwoY20sICJibHVyIiwgY20pOwotICAgICAgY20uc3RhdGUu
Zm9jdXNlZCA9IGZhbHNlOwotICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2Rl
TWlycm9yLWZvY3VzZWQiKTsKLSAgICB9Ci0gICAgY2xlYXJJbnRlcnZhbChjbS5kaXNwbGF5LmJs
aW5rZXIpOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFjbS5zdGF0ZS5mb2N1c2Vk
KSBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsKLSAgfQotCi0gIC8vIENPTlRFWFQg
TUVOVSBIQU5ETElORwotCi0gIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBu
ZWVkIHRvIGJyaWVmbHkgdW5oaWRlIHRoZQotICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVu
b2J0cnVzaXZlIGFzIHBvc3NpYmxlKSB0byBsZXQgdGhlCi0gIC8vIHJpZ2h0LWNsaWNrIHRha2Ug
ZWZmZWN0IG9uIGl0LgotICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7Ci0gICAgaWYg
KHNpZ25hbERPTUV2ZW50KGNtLCBlLCAiY29udGV4dG1lbnUiKSkgcmV0dXJuOwotICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB8
fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgcmV0dXJuOwotCi0gICAgdmFyIHBvcyA9IHBv
c0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9w
OwotICAgIGlmICghcG9zIHx8IHByZXN0bykgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQu
Ci0KLSAgICAvLyBSZXNldCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBj
bGljayBpcyBkb25lIG91dHNpZGUgb2YgdGhlIHNlbGVjdGlvbgotICAgIC8vIGFuZCAncmVzZXRT
ZWxlY3Rpb25PbkNvbnRleHRNZW51JyBvcHRpb24gaXMgdHJ1ZS4KLSAgICB2YXIgcmVzZXQgPSBj
bS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTsKLSAgICBpZiAocmVzZXQgJiYg
Y20uZG9jLnNlbC5jb250YWlucyhwb3MpID09IC0xKQotICAgICAgb3BlcmF0aW9uKGNtLCBzZXRT
ZWxlY3Rpb24pKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcyksIHNlbF9kb250U2Nyb2xsKTsK
LQotICAgIHZhciBvbGRDU1MgPSBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQ7Ci0gICAgZGlz
cGxheS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgZGlzcGxheS5p
bnB1dC5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdo
dDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKLSAgICAgICJweDsgbGVmdDogIiAr
IChlLmNsaWVudFggLSA1KSArICJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIiArCi0g
ICAgICAoaWUgPyAicmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIiA6ICJ0cmFuc3BhcmVudCIpICsK
LSAgICAgICI7IG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsg
b3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7
IjsKLSAgICBmb2N1c0lucHV0KGNtKTsKLSAgICByZXNldElucHV0KGNtKTsKLSAgICAvLyBBZGRz
ICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKLSAgICBpZiAoIWNtLnNvbWV0aGlu
Z1NlbGVjdGVkKCkpIGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNwbGF5LnByZXZJbnB1dCA9ICIg
IjsKLSAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDsKLSAgICBjbGVh
clRpbWVvdXQoZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwpOwotCi0gICAgLy8gU2VsZWN0LWFs
bCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KLSAg
ICAvLyB0aGlzIGFkZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNo
ZWNrIHdoZXRoZXIKLSAgICAvLyBpdCBnb3Qgc2VsZWN0ZWQuCi0gICAgZnVuY3Rpb24gcHJlcGFy
ZVNlbGVjdEFsbEhhY2soKSB7Ci0gICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFy
dCAhPSBudWxsKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0aGluZ1NlbGVjdGVk
KCk7Ci0gICAgICAgIHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIlx1MjAwYiIg
KyAoc2VsZWN0ZWQgPyBkaXNwbGF5LmlucHV0LnZhbHVlIDogIiIpOwotICAgICAgICBkaXNwbGF5
LnByZXZJbnB1dCA9IHNlbGVjdGVkID8gIiIgOiAiXHUyMDBiIjsKLSAgICAgICAgZGlzcGxheS5p
bnB1dC5zZWxlY3Rpb25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uRW5kID0gZXh0
dmFsLmxlbmd0aDsKLSAgICAgICAgLy8gUmUtc2V0IHRoaXMsIGluIGNhc2Ugc29tZSBvdGhlciBo
YW5kbGVyIHRvdWNoZWQgdGhlCi0gICAgICAgIC8vIHNlbGVjdGlvbiBpbiB0aGUgbWVhbnRpbWUu
Ci0gICAgICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOwotICAgICAg
fQotICAgIH0KLSAgICBmdW5jdGlvbiByZWhpZGUoKSB7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2
LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICAgIGRpc3BsYXkuaW5wdXQuc3R5bGUu
Y3NzVGV4dCA9IG9sZENTUzsKLSAgICAgIGlmIChpZV91cHRvOCkgZGlzcGxheS5zY3JvbGxiYXJW
LnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zOwotICAg
ICAgc2xvd1BvbGwoY20pOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2VyIGNob29z
aW5nIHNlbGVjdC1hbGwKLSAgICAgIGlmIChkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ICE9
IG51bGwpIHsKLSAgICAgICAgaWYgKCFpZSB8fCBpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhh
Y2soKTsKLSAgICAgICAgdmFyIGkgPSAwLCBwb2xsID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
aWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiBkaXNwbGF5Lmlu
cHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCi0gICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1h
bmRzLnNlbGVjdEFsbCkoY20pOwotICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkaXNwbGF5
LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKLSAgICAgICAgICBl
bHNlIHJlc2V0SW5wdXQoY20pOwotICAgICAgICB9OwotICAgICAgICBkaXNwbGF5LmRldGVjdGlu
Z1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgMjAwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoaWUgJiYgIWllX3VwdG84KSBwcmVwYXJlU2VsZWN0QWxsSGFjaygpOwotICAgIGlmIChj
YXB0dXJlUmlnaHRDbGljaykgewotICAgICAgZV9zdG9wKGUpOwotICAgICAgdmFyIG1vdXNldXAg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgb2ZmKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsK
LSAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKLSAgICAgIH07Ci0gICAgICBvbih3aW5k
b3csICJtb3VzZXVwIiwgbW91c2V1cCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFRpbWVvdXQo
cmVoaWRlLCA1MCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRl
cihjbSwgZSkgewotICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNvbnRleHRNZW51Iikp
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDb250
ZXh0TWVudSIsIGZhbHNlLCBzaWduYWwpOwotICB9Ci0KLSAgLy8gVVBEQVRJTkcKLQotICAvLyBD
b21wdXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIGEgY2hhbmdlIChpdHMgJ3RvJyBwcm9w
ZXJ0eQotICAvLyByZWZlcnMgdG8gdGhlIHByZS1jaGFuZ2UgZW5kKS4KLSAgdmFyIGNoYW5nZUVu
ZCA9IENvZGVNaXJyb3IuY2hhbmdlRW5kID0gZnVuY3Rpb24oY2hhbmdlKSB7Ci0gICAgaWYgKCFj
aGFuZ2UudGV4dCkgcmV0dXJuIGNoYW5nZS50bzsKLSAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9t
LmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLAotICAgICAgICAgICAgICAgbHN0KGNoYW5n
ZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5j
aCA6IDApKTsKLSAgfTsKLQotICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0byB0aGUg
cG9zdC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlCi0gIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBv
ZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgotICBmdW5jdGlvbiBhZGp1c3RG
b3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZyb20pIDwg
MCkgcmV0dXJuIHBvczsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSByZXR1cm4g
Y2hhbmdlRW5kKGNoYW5nZSk7Ci0KLSAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRl
eHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9
IHBvcy5jaDsKLSAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNoICs9IGNoYW5n
ZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOwotICAgIHJldHVybiBQb3MobGluZSwgY2gp
OwotICB9Ci0KLSAgZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7
Ci0gICAgdmFyIG91dCA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5n
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwot
ICAgICAgb3V0LnB1c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5hbmNob3IsIGNo
YW5nZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhl
YWQsIGNoYW5nZSkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQs
IGRvYy5zZWwucHJpbUluZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIG9mZnNldFBvcyhwb3MsIG9s
ZCwgbncpIHsKLSAgICBpZiAocG9zLmxpbmUgPT0gb2xkLmxpbmUpCi0gICAgICByZXR1cm4gUG9z
KG53LmxpbmUsIHBvcy5jaCAtIG9sZC5jaCArIG53LmNoKTsKLSAgICBlbHNlCi0gICAgICByZXR1
cm4gUG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCk7Ci0gIH0KLQot
ICAvLyBVc2VkIGJ5IHJlcGxhY2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0
aW9uIHRvIHRoZQotICAvLyBzdGFydCBvciBhcm91bmQgdGhlIHJlcGxhY2VkIHRlc3QuIEhpbnQg
bWF5IGJlICJzdGFydCIgb3IgImFyb3VuZCIuCi0gIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNl
bChkb2MsIGNoYW5nZXMsIGhpbnQpIHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgdmFyIG9sZFBy
ZXYgPSBQb3MoZG9jLmZpcnN0LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgY2hhbmdlID0gY2hh
bmdlc1tpXTsKLSAgICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2
LCBuZXdQcmV2KTsKLSAgICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwg
b2xkUHJldiwgbmV3UHJldik7Ci0gICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvOwotICAgICAgbmV3
UHJldiA9IHRvOwotICAgICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHsKLSAgICAgICAgdmFyIHJh
bmdlID0gZG9jLnNlbC5yYW5nZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNo
b3IpIDwgMDsKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52
ID8gZnJvbSA6IHRvKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dFtpXSA9IG5ldyBSYW5n
ZShmcm9tLCBmcm9tKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24o
b3V0LCBkb2Muc2VsLnByaW1JbmRleCk7Ci0gIH0KLQotICAvLyBBbGxvdyAiYmVmb3JlQ2hhbmdl
IiBldmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2UKLSAgZnVuY3Rpb24gZmlsdGVy
Q2hhbmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHsKLSAgICB2YXIgb2JqID0gewotICAgICAgY2Fu
Y2VsZWQ6IGZhbHNlLAotICAgICAgZnJvbTogY2hhbmdlLmZyb20sCi0gICAgICB0bzogY2hhbmdl
LnRvLAotICAgICAgdGV4dDogY2hhbmdlLnRleHQsCi0gICAgICBvcmlnaW46IGNoYW5nZS5vcmln
aW4sCi0gICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkgeyB0aGlzLmNhbmNlbGVkID0gdHJ1ZTsgfQot
ICAgIH07Ci0gICAgaWYgKHVwZGF0ZSkgb2JqLnVwZGF0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCB0
ZXh0LCBvcmlnaW4pIHsKLSAgICAgIGlmIChmcm9tKSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywg
ZnJvbSk7Ci0gICAgICBpZiAodG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOwotICAgICAg
aWYgKHRleHQpIHRoaXMudGV4dCA9IHRleHQ7Ci0gICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmlu
ZWQpIHRoaXMub3JpZ2luID0gb3JpZ2luOwotICAgIH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9y
ZUNoYW5nZSIsIGRvYywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVm
b3JlQ2hhbmdlIiwgZG9jLmNtLCBvYmopOwotCi0gICAgaWYgKG9iai5jYW5jZWxlZCkgcmV0dXJu
IG51bGw7Ci0gICAgcmV0dXJuIHtmcm9tOiBvYmouZnJvbSwgdG86IG9iai50bywgdGV4dDogb2Jq
LnRleHQsIG9yaWdpbjogb2JqLm9yaWdpbn07Ci0gIH0KLQotICAvLyBBcHBseSBhIGNoYW5nZSB0
byBhIGRvY3VtZW50LCBhbmQgYWRkIGl0IHRvIHRoZSBkb2N1bWVudCdzCi0gIC8vIGhpc3Rvcnks
IGFuZCBwcm9wYWdhdGluZyBpdCB0byBhbGwgbGlua2VkIGRvY3VtZW50cy4KLSAgZnVuY3Rpb24g
bWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIHsKLSAgICBpZiAoZG9jLmNt
KSB7Ci0gICAgICBpZiAoIWRvYy5jbS5jdXJPcCkgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1h
a2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSk7Ci0gICAgICBpZiAoZG9jLmNt
LnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzSGFuZGxl
cihkb2MsICJiZWZvcmVDaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJi
ZWZvcmVDaGFuZ2UiKSkgewotICAgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdl
LCB0cnVlKTsKLSAgICAgIGlmICghY2hhbmdlKSByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUG9z
c2libHkgc3BsaXQgb3Igc3VwcHJlc3MgdGhlIHVwZGF0ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UK
LSAgICAvLyBvZiByZWFkLW9ubHkgc3BhbnMgaW4gaXRzIHJhbmdlLgotICAgIHZhciBzcGxpdCA9
IHNhd1JlYWRPbmx5U3BhbnMgJiYgIWlnbm9yZVJlYWRPbmx5ICYmIHJlbW92ZVJlYWRPbmx5UmFu
Z2VzKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7Ci0gICAgaWYgKHNwbGl0KSB7Ci0gICAg
ICBmb3IgKHZhciBpID0gc3BsaXQubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgIG1h
a2VDaGFuZ2VJbm5lcihkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8s
IHRleHQ6IGkgPyBbIiJdIDogY2hhbmdlLnRleHR9KTsKLSAgICB9IGVsc2UgewotICAgICAgbWFr
ZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBtYWtl
Q2hhbmdlSW5uZXIoZG9jLCBjaGFuZ2UpIHsKLSAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09
IDEgJiYgY2hhbmdlLnRleHRbMF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8p
ID09IDApIHJldHVybjsKLSAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2Uo
ZG9jLCBjaGFuZ2UpOwotICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0
ZXIsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7Ci0KLSAgICBtYWtlQ2hhbmdlU2lu
Z2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2Ms
IGNoYW5nZSkpOwotICAgIHZhciByZWJhc2VkID0gW107Ci0KLSAgICBsaW5rZWREb2NzKGRvYywg
ZnVuY3Rpb24oZG9jLCBzaGFyZWRIaXN0KSB7Ci0gICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5k
ZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKLSAgICAgICAgcmViYXNlSGlzdChk
b2MuaGlzdG9yeSwgY2hhbmdlKTsKLSAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTsK
LSAgICAgIH0KLSAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0
cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKLSAgICB9KTsKLSAgfQotCi0gIC8v
IFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuCi0gIGZ1bmN0
aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkg
ewotICAgIGlmIChkb2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsK
LQotICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7
Ci0gICAgdmFyIHNvdXJjZSA9IHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRv
bmUsIGRlc3QgPSB0eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lOwotCi0g
ICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwt
eiB3b24ndAotICAgIC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cykKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewotICAgICAgZXZlbnQgPSBz
b3VyY2VbaV07Ci0gICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYm
ICFldmVudC5lcXVhbHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgaWYgKGkgPT0gc291cmNlLmxlbmd0aCkgcmV0dXJuOwotICAgIGhpc3QubGFz
dE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdpbiA9IG51bGw7Ci0KLSAgICBmb3IgKDs7KSB7Ci0g
ICAgICBldmVudCA9IHNvdXJjZS5wb3AoKTsKLSAgICAgIGlmIChldmVudC5yYW5nZXMpIHsKLSAg
ICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShldmVudCwgZGVzdCk7Ci0gICAgICAgIGlmIChh
bGxvd1NlbGVjdGlvbk9ubHkgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSkgewotICAgICAgICAg
IHNldFNlbGVjdGlvbihkb2MsIGV2ZW50LCB7Y2xlYXJSZWRvOiBmYWxzZX0pOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZWxBZnRlciA9IGV2ZW50OwotICAgICAgfQot
ICAgICAgZWxzZSBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hh
bmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhpc3RvcnkKLSAgICAvLyBzdGFjayAo
cmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS4KLSAgICB2YXIgYW50aUNoYW5nZXMg
PSBbXTsKLSAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbEFmdGVyLCBkZXN0KTsKLSAgICBk
ZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRp
b259KTsKLSAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5t
YXhHZW5lcmF0aW9uOwotCi0gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3Jl
Q2hhbmdlIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7
Ci0KLSAgICBmb3IgKHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07Ci0gICAgICBjaGFuZ2Uu
b3JpZ2luID0gdHlwZTsKLSAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNo
YW5nZSwgZmFsc2UpKSB7Ci0gICAgICAgIHNvdXJjZS5sZW5ndGggPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0KLSAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21D
aGFuZ2UoZG9jLCBjaGFuZ2UpKTsKLQotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxB
ZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCkgOiBsc3Qoc291cmNlKTsKLSAgICAgIG1ha2VD
aGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hh
bmdlKSk7Ci0gICAgICBpZiAoIWkgJiYgZG9jLmNtKSBkb2MuY20uc2Nyb2xsSW50b1ZpZXcoY2hh
bmdlKTsKLSAgICAgIHZhciByZWJhc2VkID0gW107Ci0KLSAgICAgIC8vIFByb3BhZ2F0ZSB0byB0
aGUgbGlua2VkIGRvY3VtZW50cwotICAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYywg
c2hhcmVkSGlzdCkgewotICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2Vk
LCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKLSAgICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0b3J5
LCBjaGFuZ2UpOwotICAgICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7Ci0gICAgICAg
IH0KLSAgICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VP
bGRTcGFucyhkb2MsIGNoYW5nZSkpOwotICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gU3Vi
LXZpZXdzIG5lZWQgdGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVk
Ci0gIC8vIGFib3ZlIG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KLSAgZnVu
Y3Rpb24gc2hpZnREb2MoZG9jLCBkaXN0YW5jZSkgewotICAgIGlmIChkaXN0YW5jZSA9PSAwKSBy
ZXR1cm47Ci0gICAgZG9jLmZpcnN0ICs9IGRpc3RhbmNlOwotICAgIGRvYy5zZWwgPSBuZXcgU2Vs
ZWN0aW9uKG1hcChkb2Muc2VsLnJhbmdlcywgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgIHJldHVy
biBuZXcgUmFuZ2UoUG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hv
ci5jaCksCi0gICAgICAgICAgICAgICAgICAgICAgIFBvcyhyYW5nZS5oZWFkLmxpbmUgKyBkaXN0
YW5jZSwgcmFuZ2UuaGVhZC5jaCkpOwotICAgIH0pLCBkb2Muc2VsLnByaW1JbmRleCk7Ci0gICAg
aWYgKGRvYy5jbSkgewotICAgICAgcmVnQ2hhbmdlKGRvYy5jbSwgZG9jLmZpcnN0LCBkb2MuZmly
c3QgLSBkaXN0YW5jZSwgZGlzdGFuY2UpOwotICAgICAgZm9yICh2YXIgZCA9IGRvYy5jbS5kaXNw
bGF5LCBsID0gZC52aWV3RnJvbTsgbCA8IGQudmlld1RvOyBsKyspCi0gICAgICAgIHJlZ0xpbmVD
aGFuZ2UoZG9jLmNtLCBsLCAiZ3V0dGVyIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gTW9yZSBsb3dl
ci1sZXZlbCBjaGFuZ2UgZnVuY3Rpb24sIGhhbmRsaW5nIG9ubHkgYSBzaW5nbGUgZG9jdW1lbnQK
LSAgLy8gKG5vdCBsaW5rZWQgb25lcykuCi0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2Mo
ZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgewotICAgIGlmIChkb2MuY20gJiYgIWRvYy5j
bS5jdXJPcCkKLSAgICAgIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlU2luZ2xl
RG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKTsKLQotICAgIGlmIChjaGFuZ2UudG8u
bGluZSA8IGRvYy5maXJzdCkgewotICAgICAgc2hpZnREb2MoZG9jLCBjaGFuZ2UudGV4dC5sZW5n
dGggLSAxIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkpOwotICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSBy
ZXR1cm47Ci0KLSAgICAvLyBDbGlwIHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhpcyBkb2MK
LSAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA8IGRvYy5maXJzdCkgewotICAgICAgdmFyIHNoaWZ0
ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5l
KTsKLSAgICAgIHNoaWZ0RG9jKGRvYywgc2hpZnQpOwotICAgICAgY2hhbmdlID0ge2Zyb206IFBv
cyhkb2MuZmlyc3QsIDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50
by5jaCksCi0gICAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46
IGNoYW5nZS5vcmlnaW59OwotICAgIH0KLSAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGluZSgpOwot
ICAgIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHsKLSAgICAgIGNoYW5nZSA9IHtmcm9tOiBj
aGFuZ2UuZnJvbSwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgp
LAotICAgICAgICAgICAgICAgIHRleHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdl
Lm9yaWdpbn07Ci0gICAgfQotCi0gICAgY2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywg
Y2hhbmdlLmZyb20sIGNoYW5nZS50byk7Ci0KLSAgICBpZiAoIXNlbEFmdGVyKSBzZWxBZnRlciA9
IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCk7Ci0gICAgaWYgKGRvYy5j
bSkgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7Ci0g
ICAgZWxzZSB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKLSAgICBzZXRTZWxlY3Rpb25O
b1VuZG8oZG9jLCBzZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpOwotICB9Ci0KLSAgLy8gSGFuZGxl
IHRoZSBpbnRlcmFjdGlvbiBvZiBhIGNoYW5nZSB0byBhIGRvY3VtZW50IHdpdGggdGhlIGVkaXRv
cgotICAvLyB0aGF0IHRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZi4KLSAgZnVuY3Rpb24gbWFrZUNo
YW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7Ci0gICAgdmFyIGRvYyA9
IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBj
aGFuZ2UudG87Ci0KLSAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lk
dGhTdGFydCA9IGZyb20ubGluZTsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7
Ci0gICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShnZXRMaW5lKGRvYywg
ZnJvbS5saW5lKSkpOwotICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsg
MSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICBpZiAobGluZSA9PSBkaXNwbGF5Lm1heExpbmUp
IHsKLSAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSB0cnVlOwotICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoZG9jLnNlbC5j
b250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKQotICAgICAgc2lnbmFsQ3Vyc29y
QWN0aXZpdHkoY20pOwotCi0gICAgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucywgZXN0aW1h
dGVIZWlnaHQoY20pKTsKLQotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAg
ICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVu
Z3RoLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUp
OwotICAgICAgICBpZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7Ci0gICAgICAgICAg
ZGlzcGxheS5tYXhMaW5lID0gbGluZTsKLSAgICAgICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGgg
PSBsZW47Ci0gICAgICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
ICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7
Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IGZyb250aWVyLCBzY2hlZHVsZSB3b3JrZXIKLSAgICBk
b2MuZnJvbnRpZXIgPSBNYXRoLm1pbihkb2MuZnJvbnRpZXIsIGZyb20ubGluZSk7Ci0gICAgc3Rh
cnRXb3JrZXIoY20sIDQwMCk7Ci0KLSAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0
aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7Ci0gICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVz
ZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKLSAgICBpZiAoZnJvbS5s
aW5lID09IHRvLmxpbmUgJiYgY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgIWlzV2hvbGVMaW5l
VXBkYXRlKGNtLmRvYywgY2hhbmdlKSkKLSAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGZyb20ubGlu
ZSwgInRleHQiKTsKLSAgICBlbHNlCi0gICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8u
bGluZSArIDEsIGxlbmRpZmYpOwotCi0gICAgdmFyIGNoYW5nZXNIYW5kbGVyID0gaGFzSGFuZGxl
cihjbSwgImNoYW5nZXMiKSwgY2hhbmdlSGFuZGxlciA9IGhhc0hhbmRsZXIoY20sICJjaGFuZ2Ui
KTsKLSAgICBpZiAoY2hhbmdlSGFuZGxlciB8fCBjaGFuZ2VzSGFuZGxlcikgewotICAgICAgdmFy
IG9iaiA9IHsKLSAgICAgICAgZnJvbTogZnJvbSwgdG86IHRvLAotICAgICAgICB0ZXh0OiBjaGFu
Z2UudGV4dCwKLSAgICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCi0gICAgICAgIG9yaWdp
bjogY2hhbmdlLm9yaWdpbgotICAgICAgfTsKLSAgICAgIGlmIChjaGFuZ2VIYW5kbGVyKSBzaWdu
YWxMYXRlcihjbSwgImNoYW5nZSIsIGNtLCBvYmopOwotICAgICAgaWYgKGNoYW5nZXNIYW5kbGVy
KSAoY20uY3VyT3AuY2hhbmdlT2JqcyB8fCAoY20uY3VyT3AuY2hhbmdlT2JqcyA9IFtdKSkucHVz
aChvYmopOwotICAgIH0KLSAgICBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDsK
LSAgfQotCi0gIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmln
aW4pIHsKLSAgICBpZiAoIXRvKSB0byA9IGZyb207Ci0gICAgaWYgKGNtcCh0bywgZnJvbSkgPCAw
KSB7IHZhciB0bXAgPSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wOyB9Ci0gICAgaWYgKHR5cGVv
ZiBjb2RlID09ICJzdHJpbmciKSBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKLSAgICBtYWtlQ2hh
bmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59
KTsKLSAgfQotCi0gIC8vIFNDUk9MTElORyBUSElOR1MgSU5UTyBWSUVXCi0KLSAgLy8gSWYgYW4g
ZWRpdG9yIHNpdHMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5
Ci0gIC8vIHNjcm9sbGVkIG91dCBvZiB2aWV3LCB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgY3Vyc29y
IGlzIHZpc2libGUuCi0gIGZ1bmN0aW9uIG1heWJlU2Nyb2xsV2luZG93KGNtLCBjb29yZHMpIHsK
LSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRpc3BsYXkuc2l6ZXIuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCksIGRvU2Nyb2xsID0gbnVsbDsKLSAgICBpZiAoY29vcmRzLnRvcCAr
IGJveC50b3AgPCAwKSBkb1Njcm9sbCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoY29vcmRzLmJvdHRv
bSArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5jbGllbnRIZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwotICAgIGlmIChkb1Njcm9sbCAh
PSBudWxsICYmICFwaGFudG9tKSB7Ci0gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdCgiZGl2Iiwg
Ilx1MjAwYiIsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogIiArCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNldCAtIHBhZGRp
bmdUb3AoY20uZGlzcGxheSkpICsgInB4OyBoZWlnaHQ6ICIgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wICsgc2Nyb2xsZXJDdXRPZmYpICsg
InB4OyBsZWZ0OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5sZWZ0ICsg
InB4OyB3aWR0aDogMnB4OyIpOwotICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hp
bGQoc2Nyb2xsTm9kZSk7Ci0gICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRvU2Nyb2xs
KTsKLSAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKHNjcm9sbE5vZGUpOwot
ICAgIH0KLSAgfQotCi0gIC8vIFNjcm9sbCBhIGdpdmVuIHBvc2l0aW9uIGludG8gdmlldyAoaW1t
ZWRpYXRlbHkpLCB2ZXJpZnlpbmcgdGhhdAotICAvLyBpdCBhY3R1YWxseSBiZWNhbWUgdmlzaWJs
ZSAoYXMgbGluZSBoZWlnaHRzIGFyZSBhY2N1cmF0ZWx5Ci0gIC8vIG1lYXN1cmVkLCB0aGUgcG9z
aXRpb24gb2Ygc29tZXRoaW5nIG1heSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4KLSAgZnVuY3Rp
b24gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIHBvcywgZW5kLCBtYXJnaW4pIHsKLSAgICBpZiAobWFy
Z2luID09IG51bGwpIG1hcmdpbiA9IDA7Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIGNoYW5n
ZWQgPSBmYWxzZSwgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpOwotICAgICAgdmFyIGVu
ZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwg
ZW5kKTsKLSAgICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIE1hdGgu
bWluKGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hdGgubWluKGNvb3Jkcy50b3AsIGVuZENvb3Jkcy50b3ApIC0g
bWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1h
eChjb29yZHMubGVmdCwgZW5kQ29vcmRzLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNYXRoLm1heChjb29yZHMuYm90dG9tLCBlbmRDb29yZHMuYm90dG9t
KSArIG1hcmdpbik7Ci0gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFy
dExlZnQgPSBjbS5kb2Muc2Nyb2xsTGVmdDsKLSAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9w
ICE9IG51bGwpIHsKLSAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9w
KTsKLSAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAx
KSBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVm
dCAhPSBudWxsKSB7Ci0gICAgICAgIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxM
ZWZ0KTsKLSAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gc3RhcnRMZWZ0
KSA+IDEpIGNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKCFjaGFuZ2VkKSByZXR1
cm4gY29vcmRzOwotICAgIH0KLSAgfQotCi0gIC8vIFNjcm9sbCBhIGdpdmVuIHNldCBvZiBjb29y
ZGluYXRlcyBpbnRvIHZpZXcgKGltbWVkaWF0ZWx5KS4KLSAgZnVuY3Rpb24gc2Nyb2xsSW50b1Zp
ZXcoY20sIHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNj
cm9sbFBvcyhjbSwgeDEsIHkxLCB4MiwgeTIpOwotICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9w
ICE9IG51bGwpIHNldFNjcm9sbFRvcChjbSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7Ci0gICAgaWYg
KHNjcm9sbFBvcy5zY3JvbGxMZWZ0ICE9IG51bGwpIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBv
cy5zY3JvbGxMZWZ0KTsKLSAgfQotCi0gIC8vIENhbGN1bGF0ZSBhIG5ldyBzY3JvbGwgcG9zaXRp
b24gbmVlZGVkIHRvIHNjcm9sbCB0aGUgZ2l2ZW4KLSAgLy8gcmVjdGFuZ2xlIGludG8gdmlldy4g
UmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzY3JvbGxUb3AgYW5kCi0gIC8vIHNjcm9sbExlZnQgcHJv
cGVydGllcy4gV2hlbiB0aGVzZSBhcmUgdW5kZWZpbmVkLCB0aGUKLSAgLy8gdmVydGljYWwvaG9y
aXpvbnRhbCBwb3NpdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlIGFkanVzdGVkLgotICBmdW5jdGlv
biBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIGRpc3Bs
YXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKLSAg
ICBpZiAoeTEgPCAwKSB5MSA9IDA7Ci0gICAgdmFyIHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNt
LmN1ck9wLnNjcm9sbFRvcCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxUb3A7Ci0gICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xp
ZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHJlc3VsdCA9IHt9OwotICAgIHZhciBkb2NCb3R0
b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxheSk7Ci0gICAgdmFyIGF0VG9w
ID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdp
bjsKLSAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsKLSAgICAgIHJlc3VsdC5zY3JvbGxUb3AgPSBh
dFRvcCA/IDAgOiB5MTsKLSAgICB9IGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7
Ci0gICAgICB2YXIgbmV3VG9wID0gTWF0aC5taW4oeTEsIChhdEJvdHRvbSA/IGRvY0JvdHRvbSA6
IHkyKSAtIHNjcmVlbik7Ci0gICAgICBpZiAobmV3VG9wICE9IHNjcmVlbnRvcCkgcmVzdWx0LnNj
cm9sbFRvcCA9IG5ld1RvcDsKLSAgICB9Ci0KLSAgICB2YXIgc2NyZWVubGVmdCA9IGNtLmN1ck9w
ICYmIGNtLmN1ck9wLnNjcm9sbExlZnQgIT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbExlZnQgOiBk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ7Ci0gICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNj
cm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmY7Ci0gICAgeDEgKz0gZGlzcGxheS5n
dXR0ZXJzLm9mZnNldFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0g
ICAgdmFyIGd1dHRlcncgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGF0
TGVmdCA9IHgxIDwgZ3V0dGVydyArIDEwOwotICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0
ZXJ3IHx8IGF0TGVmdCkgewotICAgICAgaWYgKGF0TGVmdCkgeDEgPSAwOwotICAgICAgcmVzdWx0
LnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7Ci0gICAgfSBlbHNl
IGlmICh4MiA+IHNjcmVlbncgKyBzY3JlZW5sZWZ0IC0gMykgewotICAgICAgcmVzdWx0LnNjcm9s
bExlZnQgPSB4MiArIDEwIC0gc2NyZWVudzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fQotCi0gIC8vIFN0b3JlIGEgcmVsYXRpdmUgYWRqdXN0bWVudCB0byB0aGUgc2Nyb2xsIHBvc2l0
aW9uIGluIHRoZSBjdXJyZW50Ci0gIC8vIG9wZXJhdGlvbiAodG8gYmUgYXBwbGllZCB3aGVuIHRo
ZSBvcGVyYXRpb24gZmluaXNoZXMpLgotICBmdW5jdGlvbiBhZGRUb1Njcm9sbFBvcyhjbSwgbGVm
dCwgdG9wKSB7Ci0gICAgaWYgKGxlZnQgIT0gbnVsbCB8fCB0b3AgIT0gbnVsbCkgcmVzb2x2ZVNj
cm9sbFRvUG9zKGNtKTsKLSAgICBpZiAobGVmdCAhPSBudWxsKQotICAgICAgY20uY3VyT3Auc2Ny
b2xsTGVmdCA9IChjbS5jdXJPcC5zY3JvbGxMZWZ0ID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsTGVm
dCA6IGNtLmN1ck9wLnNjcm9sbExlZnQpICsgbGVmdDsKLSAgICBpZiAodG9wICE9IG51bGwpCi0g
ICAgICBjbS5jdXJPcC5zY3JvbGxUb3AgPSAoY20uY3VyT3Auc2Nyb2xsVG9wID09IG51bGwgPyBj
bS5kb2Muc2Nyb2xsVG9wIDogY20uY3VyT3Auc2Nyb2xsVG9wKSArIHRvcDsKLSAgfQotCi0gIC8v
IE1ha2Ugc3VyZSB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiB0aGUgY3VycmVudCBj
dXJzb3IgaXMKLSAgLy8gc2hvd24uCi0gIGZ1bmN0aW9uIGVuc3VyZUN1cnNvclZpc2libGUoY20p
IHsKLSAgICByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOwotICAgIHZhciBjdXIgPSBjbS5nZXRDdXJz
b3IoKSwgZnJvbSA9IGN1ciwgdG8gPSBjdXI7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFw
cGluZykgewotICAgICAgZnJvbSA9IGN1ci5jaCA/IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSkg
OiBjdXI7Ci0gICAgICB0byA9IFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSk7Ci0gICAgfQotICAg
IGNtLmN1ck9wLnNjcm9sbFRvUG9zID0ge2Zyb206IGZyb20sIHRvOiB0bywgbWFyZ2luOiBjbS5v
cHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbiwgaXNDdXJzb3I6IHRydWV9OwotICB9Ci0KLSAgLy8g
V2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBh
bm90aGVyCi0gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0
aGUgb3BlcmF0aW9uLCB0aGlzCi0gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0
aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc28KLSAgLy8gdGhhdCB0aGUgZWZmZWN0IG9m
IGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCi0gIGZ1bmN0aW9u
IHJlc29sdmVTY3JvbGxUb1BvcyhjbSkgewotICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9s
bFRvUG9zOwotICAgIGlmIChyYW5nZSkgewotICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBu
dWxsOwotICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRv
ID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTsKLSAgICAgIHZhciBzUG9zID0gY2FsY3Vs
YXRlU2Nyb2xsUG9zKGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSBy
YW5nZS5tYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1h
eChmcm9tLnJpZ2h0LCB0by5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7Ci0g
ICAgICBjbS5zY3JvbGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBBUEkgVVRJTElUSUVTCi0KLSAgLy8gSW5kZW50IHRoZSBnaXZlbiBsaW5l
LiBUaGUgaG93IHBhcmFtZXRlciBjYW4gYmUgInNtYXJ0IiwKLSAgLy8gImFkZCIvbnVsbCwgInN1
YnRyYWN0Iiwgb3IgInByZXYiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2UKLSAgLy8gKHR5cGlj
YWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eQot
ICAvLyBsaW5lcyBhcmUgbm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRoZSBtb2RlIHJl
dHVybnMgUGFzcwotICAvLyBhcmUgbGVmdCBhbG9uZS4KLSAgZnVuY3Rpb24gaW5kZW50TGluZShj
bSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYywgc3RhdGU7Ci0g
ICAgaWYgKGhvdyA9PSBudWxsKSBob3cgPSAiYWRkIjsKLSAgICBpZiAoaG93ID09ICJzbWFydCIp
IHsKLSAgICAgIC8vIEZhbGwgYmFjayB0byAicHJldiIgd2hlbiB0aGUgbW9kZSBkb2Vzbid0IGhh
dmUgYW4gaW5kZW50YXRpb24KLSAgICAgIC8vIG1ldGhvZC4KLSAgICAgIGlmICghY20uZG9jLm1v
ZGUuaW5kZW50KSBob3cgPSAicHJldiI7Ci0gICAgICBlbHNlIHN0YXRlID0gZ2V0U3RhdGVCZWZv
cmUoY20sIG4pOwotICAgIH0KLQotICAgIHZhciB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXpl
OwotICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIG4pLCBjdXJTcGFjZSA9IGNvdW50Q29sdW1u
KGxpbmUudGV4dCwgbnVsbCwgdGFiU2l6ZSk7Ci0gICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgbGlu
ZS5zdGF0ZUFmdGVyID0gbnVsbDsKLSAgICB2YXIgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQu
bWF0Y2goL15ccyovKVswXSwgaW5kZW50YXRpb247Ci0gICAgaWYgKCFhZ2dyZXNzaXZlICYmICEv
XFMvLnRlc3QobGluZS50ZXh0KSkgewotICAgICAgaW5kZW50YXRpb24gPSAwOwotICAgICAgaG93
ID0gIm5vdCI7Ci0gICAgfSBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgewotICAgICAgaW5kZW50
YXRpb24gPSBjbS5kb2MubW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFj
ZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOwotICAgICAgaWYgKGluZGVudGF0aW9uID09IFBh
c3MpIHsKLSAgICAgICAgaWYgKCFhZ2dyZXNzaXZlKSByZXR1cm47Ci0gICAgICAgIGhvdyA9ICJw
cmV2IjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGhvdyA9PSAicHJldiIpIHsKLSAgICAgIGlm
IChuID4gZG9jLmZpcnN0KSBpbmRlbnRhdGlvbiA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBu
LTEpLnRleHQsIG51bGwsIHRhYlNpemUpOwotICAgICAgZWxzZSBpbmRlbnRhdGlvbiA9IDA7Ci0g
ICAgfSBlbHNlIGlmIChob3cgPT0gImFkZCIpIHsKLSAgICAgIGluZGVudGF0aW9uID0gY3VyU3Bh
Y2UgKyBjbS5vcHRpb25zLmluZGVudFVuaXQ7Ci0gICAgfSBlbHNlIGlmIChob3cgPT0gInN1YnRy
YWN0IikgewotICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50
VW5pdDsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0gIm51bWJlciIpIHsKLSAgICAgIGlu
ZGVudGF0aW9uID0gY3VyU3BhY2UgKyBob3c7Ci0gICAgfQotICAgIGluZGVudGF0aW9uID0gTWF0
aC5tYXgoMCwgaW5kZW50YXRpb24pOwotCi0gICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3Mg
PSAwOwotICAgIGlmIChjbS5vcHRpb25zLmluZGVudFdpdGhUYWJzKQotICAgICAgZm9yICh2YXIg
aSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRh
YlNpemU7IGluZGVudFN0cmluZyArPSAiXHQiO30KLSAgICBpZiAocG9zIDwgaW5kZW50YXRpb24p
IGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7Ci0KLSAgICBpZiAo
aW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKSB7Ci0gICAgICByZXBsYWNlUmFuZ2UoY20u
ZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0
aCksICIraW5wdXQiKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRW5zdXJlIHRoYXQsIGlmIHRo
ZSBjdXJzb3Igd2FzIGluIHRoZSB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydAotICAgICAgLy8gb2Yg
dGhlIGxpbmUsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhhdCBzcGFjZS4KLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
dmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07Ci0gICAgICAgIGlmIChyYW5nZS5oZWFkLmxp
bmUgPT0gbiAmJiByYW5nZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSB7Ci0gICAg
ICAgICAgdmFyIHBvcyA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpOwotICAgICAgICAg
IHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCBuZXcgUmFuZ2UocG9zLCBwb3MpKTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBsaW5lLnN0YXRlQWZ0
ZXIgPSBudWxsOwotICB9Ci0KLSAgLy8gVXRpbGl0eSBmb3IgYXBwbHlpbmcgYSBjaGFuZ2UgdG8g
YSBsaW5lIGJ5IGhhbmRsZSBvciBudW1iZXIsCi0gIC8vIHJldHVybmluZyB0aGUgbnVtYmVyIGFu
ZCBvcHRpb25hbGx5IHJlZ2lzdGVyaW5nIHRoZSBsaW5lIGFzCi0gIC8vIGNoYW5nZWQuCi0gIGZ1
bmN0aW9uIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHsKLSAgICB2YXIg
bm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGUsIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAodHlwZW9m
IGhhbmRsZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhh
bmRsZSkpOwotICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKLSAgICBpZiAobm8gPT0gbnVs
bCkgcmV0dXJuIG51bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnTGluZUNoYW5nZShjbSwg
bm8sIGNoYW5nZVR5cGUpOwotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgLy8gSGVscGVyIGZv
ciBkZWxldGluZyB0ZXh0IG5lYXIgdGhlIHNlbGVjdGlvbihzKSwgdXNlZCB0byBpbXBsZW1lbnQK
LSAgLy8gYmFja3NwYWNlLCBkZWxldGUsIGFuZCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuCi0gIGZ1
bmN0aW9uIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGNvbXB1dGUpIHsKLSAgICB2YXIgcmFuZ2Vz
ID0gY20uZG9jLnNlbC5yYW5nZXMsIGtpbGwgPSBbXTsKLSAgICAvLyBCdWlsZCB1cCBhIHNldCBv
ZiByYW5nZXMgdG8ga2lsbCBmaXJzdCwgbWVyZ2luZyBvdmVybGFwcGluZwotICAgIC8vIHJhbmdl
cy4KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAg
dmFyIHRvS2lsbCA9IGNvbXB1dGUocmFuZ2VzW2ldKTsKLSAgICAgIHdoaWxlIChraWxsLmxlbmd0
aCAmJiBjbXAodG9LaWxsLmZyb20sIGxzdChraWxsKS50bykgPD0gMCkgewotICAgICAgICB2YXIg
cmVwbGFjZWQgPSBraWxsLnBvcCgpOwotICAgICAgICBpZiAoY21wKHJlcGxhY2VkLmZyb20sIHRv
S2lsbC5mcm9tKSA8IDApIHsKLSAgICAgICAgICB0b0tpbGwuZnJvbSA9IHJlcGxhY2VkLmZyb207
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGtpbGwucHVzaCh0
b0tpbGwpOwotICAgIH0KLSAgICAvLyBOZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy4K
LSAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKLSAgICAgIGZvciAodmFyIGkgPSBraWxsLmxl
bmd0aCAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwg
a2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCAiK2RlbGV0ZSIpOwotICAgICAgZW5zdXJlQ3Vyc29y
VmlzaWJsZShjbSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBVc2VkIGZvciBob3Jpem9udGFsIHJl
bGF0aXZlIG1vdGlvbi4gRGlyIGlzIC0xIG9yIDEgKGxlZnQgb3IKLSAgLy8gcmlnaHQpLCB1bml0
IGNhbiBiZSAiY2hhciIsICJjb2x1bW4iIChsaWtlIGNoYXIsIGJ1dCBkb2Vzbid0Ci0gIC8vIGNy
b3NzIGxpbmUgYm91bmRhcmllcyksICJ3b3JkIiAoYWNyb3NzIG5leHQgd29yZCksIG9yICJncm91
cCIgKHRvCi0gIC8vIHRoZSBzdGFydCBvZiBuZXh0IGdyb3VwIG9mIHdvcmQgb3Igbm9uLXdvcmQt
bm9uLXdoaXRlc3BhY2UKLSAgLy8gY2hhcnMpLiBUaGUgdmlzdWFsbHkgcGFyYW0gY29udHJvbHMg
d2hldGhlciwgaW4gcmlnaHQtdG8tbGVmdAotICAvLyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0
byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlCi0gIC8vIHN0cmluZywgb3IgdG93
YXJkcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSByaWdodCBvZiB0aGUgY3VycmVudAotICAvLyBwb3Np
dGlvbi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWUKLSAg
Ly8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KLSAgZnVu
Y3Rpb24gZmluZFBvc0goZG9jLCBwb3MsIGRpciwgdW5pdCwgdmlzdWFsbHkpIHsKLSAgICB2YXIg
bGluZSA9IHBvcy5saW5lLCBjaCA9IHBvcy5jaCwgb3JpZ0RpciA9IGRpcjsKLSAgICB2YXIgbGlu
ZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICB2YXIgcG9zc2libGUgPSB0cnVlOwotICAg
IGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHsKLSAgICAgIHZhciBsID0gbGluZSArIGRpcjsKLSAg
ICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwgPj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHJldHVy
biAocG9zc2libGUgPSBmYWxzZSk7Ci0gICAgICBsaW5lID0gbDsKLSAgICAgIHJldHVybiBsaW5l
T2JqID0gZ2V0TGluZShkb2MsIGwpOwotICAgIH0KLSAgICBmdW5jdGlvbiBtb3ZlT25jZShib3Vu
ZFRvTGluZSkgewotICAgICAgdmFyIG5leHQgPSAodmlzdWFsbHkgPyBtb3ZlVmlzdWFsbHkgOiBt
b3ZlTG9naWNhbGx5KShsaW5lT2JqLCBjaCwgZGlyLCB0cnVlKTsKLSAgICAgIGlmIChuZXh0ID09
IG51bGwpIHsKLSAgICAgICAgaWYgKCFib3VuZFRvTGluZSAmJiBmaW5kTmV4dExpbmUoKSkgewot
ICAgICAgICAgIGlmICh2aXN1YWxseSkgY2ggPSAoZGlyIDwgMCA/IGxpbmVSaWdodCA6IGxpbmVM
ZWZ0KShsaW5lT2JqKTsKLSAgICAgICAgICBlbHNlIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4
dC5sZW5ndGggOiAwOwotICAgICAgICB9IGVsc2UgcmV0dXJuIChwb3NzaWJsZSA9IGZhbHNlKTsK
LSAgICAgIH0gZWxzZSBjaCA9IG5leHQ7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAodW5pdCA9PSAiY2hhciIpIG1vdmVPbmNlKCk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAi
Y29sdW1uIikgbW92ZU9uY2UodHJ1ZSk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwg
dW5pdCA9PSAiZ3JvdXAiKSB7Ci0gICAgICB2YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5p
dCA9PSAiZ3JvdXAiOwotICAgICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVs
cGVyKHBvcywgIndvcmRDaGFycyIpOwotICAgICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmly
c3QgPSBmYWxzZSkgewotICAgICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkg
YnJlYWs7Ci0gICAgICAgIHZhciBjdXIgPSBsaW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4i
OwotICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gInciCi0gICAg
ICAgICAgOiBncm91cCAmJiBjdXIgPT0gIlxuIiA/ICJuIgotICAgICAgICAgIDogIWdyb3VwIHx8
IC9ccy8udGVzdChjdXIpID8gbnVsbAotICAgICAgICAgIDogInAiOwotICAgICAgICBpZiAoZ3Jv
dXAgJiYgIWZpcnN0ICYmICF0eXBlKSB0eXBlID0gInMiOwotICAgICAgICBpZiAoc2F3VHlwZSAm
JiBzYXdUeXBlICE9IHR5cGUpIHsKLSAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1v
dmVPbmNlKCk7fQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5
cGUpIHNhd1R5cGUgPSB0eXBlOwotICAgICAgICBpZiAoZGlyID4gMCAmJiAhbW92ZU9uY2UoIWZp
cnN0KSkgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWlj
KGRvYywgUG9zKGxpbmUsIGNoKSwgb3JpZ0RpciwgdHJ1ZSk7Ci0gICAgaWYgKCFwb3NzaWJsZSkg
cmVzdWx0LmhpdFNpZGUgPSB0cnVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBG
b3IgcmVsYXRpdmUgdmVydGljYWwgbW92ZW1lbnQuIERpciBtYXkgYmUgLTEgb3IgMS4gVW5pdCBj
YW4gYmUKLSAgLy8gInBhZ2UiIG9yICJsaW5lIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxs
IGhhdmUgYSBoaXRTaWRlPXRydWUKLSAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5k
IG9mIHRoZSBkb2N1bWVudC4KLSAgZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0
KSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5OwotICAgIGlmICh1bml0
ID09ICJwYWdlIikgewotICAgICAgdmFyIHBhZ2VTaXplID0gTWF0aC5taW4oY20uZGlzcGxheS53
cmFwcGVyLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOwotICAgICAgeSA9IHBvcy50b3AgKyBkaXIgKiAocGFn
ZVNpemUgLSAoZGlyIDwgMCA/IDEuNSA6IC41KSAqIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOwot
ICAgIH0gZWxzZSBpZiAodW5pdCA9PSAibGluZSIpIHsKLSAgICAgIHkgPSBkaXIgPiAwID8gcG9z
LmJvdHRvbSArIDMgOiBwb3MudG9wIC0gMzsKLSAgICB9Ci0gICAgZm9yICg7OykgewotICAgICAg
dmFyIHRhcmdldCA9IGNvb3Jkc0NoYXIoY20sIHgsIHkpOwotICAgICAgaWYgKCF0YXJnZXQub3V0
c2lkZSkgYnJlYWs7Ci0gICAgICBpZiAoZGlyIDwgMCA/IHkgPD0gMCA6IHkgPj0gZG9jLmhlaWdo
dCkgeyB0YXJnZXQuaGl0U2lkZSA9IHRydWU7IGJyZWFrOyB9Ci0gICAgICB5ICs9IGRpciAqIDU7
Ci0gICAgfQotICAgIHJldHVybiB0YXJnZXQ7Ci0gIH0KLQotICAvLyBGaW5kIHRoZSB3b3JkIGF0
IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuCi0gIGZ1bmN0
aW9uIGZpbmRXb3JkQXQoY20sIHBvcykgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGxpbmUgPSBn
ZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7Ci0gICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQg
PSBwb3MuY2g7Ci0gICAgaWYgKGxpbmUpIHsKLSAgICAgIHZhciBoZWxwZXIgPSBjbS5nZXRIZWxw
ZXIocG9zLCAid29yZENoYXJzIik7Ci0gICAgICBpZiAoKHBvcy54UmVsIDwgMCB8fCBlbmQgPT0g
bGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwotICAgICAgdmFyIHN0
YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKLSAgICAgIHZhciBjaGVjayA9IGlzV29yZENo
YXIoc3RhcnRDaGFyLCBoZWxwZXIpCi0gICAgICAgID8gZnVuY3Rpb24oY2gpIHsgcmV0dXJuIGlz
V29yZENoYXIoY2gsIGhlbHBlcik7IH0KLSAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/
IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQotICAgICAgICA6IGZ1bmN0aW9u
KGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9OwotICAgICAg
d2hpbGUgKHN0YXJ0ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFy
dDsKLSAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChl
bmQpKSkgKytlbmQ7Ci0gICAgfQotICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBz
dGFydCksIFBvcyhwb3MubGluZSwgZW5kKSk7Ci0gIH0KLQotICAvLyBFRElUT1IgTUVUSE9EUwot
Ci0gIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1l
YW5zCi0gIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlz
YCBwYXJhbWV0ZXInLgotCi0gIC8vIFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRp
dG9yIG1ldGhvZHMuIE1vc3Qgb2YgdGhlCi0gIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9j
IHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50bwotICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwg
Zm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZAotICAvLyBjb252ZW5pZW5jZS4KLQotICBD
b2RlTWlycm9yLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvciwKLSAg
ICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJbnB1dCh0aGlzKTsgZmFz
dFBvbGwodGhpcyk7fSwKLQotICAgIHNldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uLCB2YWx1ZSkg
ewotICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNbb3B0aW9u
XTsKLSAgICAgIGlmIChvcHRpb25zW29wdGlvbl0gPT0gdmFsdWUgJiYgb3B0aW9uICE9ICJtb2Rl
IikgcmV0dXJuOwotICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7Ci0gICAgICBpZiAob3B0
aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkKLSAgICAgICAgb3BlcmF0aW9uKHRo
aXMsIG9wdGlvbkhhbmRsZXJzW29wdGlvbl0pKHRoaXMsIHZhbHVlLCBvbGQpOwotICAgIH0sCi0K
LSAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbikge3JldHVybiB0aGlzLm9wdGlvbnNbb3B0
aW9uXTt9LAotICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jO30sCi0KLSAg
ICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1hcCwgYm90dG9tKSB7Ci0gICAgICB0aGlzLnN0YXRlLmtl
eU1hcHNbYm90dG9tID8gInB1c2giIDogInVuc2hpZnQiXShtYXApOwotICAgIH0sCi0gICAgcmVt
b3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHsKLSAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5r
ZXlNYXBzOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAg
ICAgICBpZiAobWFwc1tpXSA9PSBtYXAgfHwgKHR5cGVvZiBtYXBzW2ldICE9ICJzdHJpbmciICYm
IG1hcHNbaV0ubmFtZSA9PSBtYXApKSB7Ci0gICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7Ci0g
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgYWRkT3Zlcmxh
eTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYywgb3B0aW9ucykgewotICAgICAgdmFyIG1vZGUgPSBz
cGVjLnRva2VuID8gc3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsIHNwZWMp
OwotICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBt
YXkgbm90IGJlIHN0YXRlZnVsLiIpOwotICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5cy5wdXNoKHtt
b2RlOiBtb2RlLCBtb2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMub3Bh
cXVlfSk7Ci0gICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKLSAgICAgIHJlZ0NoYW5nZSh0aGlz
KTsKLSAgICB9KSwKLSAgICByZW1vdmVPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjKSB7
Ci0gICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzOwotICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBvdmVybGF5cy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY3VyID0g
b3ZlcmxheXNbaV0ubW9kZVNwZWM7Ci0gICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Yg
c3BlYyA9PSAic3RyaW5nIiAmJiBjdXIubmFtZSA9PSBzcGVjKSB7Ci0gICAgICAgICAgb3Zlcmxh
eXMuc3BsaWNlKGksIDEpOwotICAgICAgICAgIHRoaXMuc3RhdGUubW9kZUdlbisrOwotICAgICAg
ICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9KSwKLQotICAgIGluZGVudExpbmU6IG1ldGhvZE9wKGZ1bmN0aW9uKG4sIGRpciwg
YWdncmVzc2l2ZSkgewotICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIgJiYgdHlwZW9m
IGRpciAhPSAibnVtYmVyIikgewotICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IHRoaXMu
b3B0aW9ucy5zbWFydEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7Ci0gICAgICAgIGVsc2UgZGly
ID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiOwotICAgICAgfQotICAgICAgaWYgKGlzTGluZSh0
aGlzLmRvYywgbikpIGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZlKTsKLSAgICB9
KSwKLSAgICBpbmRlbnRTZWxlY3Rpb246IG1ldGhvZE9wKGZ1bmN0aW9uKGhvdykgewotICAgICAg
dmFyIHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xOwotICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdlID0g
cmFuZ2VzW2ldOwotICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkpIHsKLSAgICAgICAgICB2YXIg
c3RhcnQgPSBNYXRoLm1heChlbmQsIHJhbmdlLmZyb20oKS5saW5lKTsKLSAgICAgICAgICB2YXIg
dG8gPSByYW5nZS50bygpOwotICAgICAgICAgIGVuZCA9IE1hdGgubWluKHRoaXMubGFzdExpbmUo
KSwgdG8ubGluZSAtICh0by5jaCA/IDAgOiAxKSkgKyAxOwotICAgICAgICAgIGZvciAodmFyIGog
PSBzdGFydDsgaiA8IGVuZDsgKytqKQotICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCBqLCBo
b3cpOwotICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmhlYWQubGluZSA+IGVuZCkgewotICAgICAg
ICAgIGluZGVudExpbmUodGhpcywgcmFuZ2UuaGVhZC5saW5lLCBob3csIHRydWUpOwotICAgICAg
ICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZTsKLSAgICAgICAgICBpZiAoaSA9PSB0aGlzLmRvYy5z
ZWwucHJpbUluZGV4KSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSksCi0KLSAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVu
IGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrcwotICAgIC8vIHRoYXQgd2FudCB0byBpbnNwZWN0
IHRoZSBtb2RlIHN0YXRlIChzYXksIGZvciBjb21wbGV0aW9uKS4KLSAgICBnZXRUb2tlbkF0OiBm
dW5jdGlvbihwb3MsIHByZWNpc2UpIHsKLSAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKLSAgICAg
IHBvcyA9IGNsaXBQb3MoZG9jLCBwb3MpOwotICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZv
cmUodGhpcywgcG9zLmxpbmUsIHByZWNpc2UpLCBtb2RlID0gdGhpcy5kb2MubW9kZTsKLSAgICAg
IHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTsKLSAgICAgIHZhciBzdHJlYW0gPSBu
ZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwotICAgICAg
d2hpbGUgKHN0cmVhbS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewotICAgICAgICBz
dHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwotICAgICAgICB2YXIgc3R5bGUgPSByZWFkVG9rZW4o
bW9kZSwgc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge3N0YXJ0OiBzdHJl
YW0uc3RhcnQsCi0gICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKLSAgICAgICAgICAgICAg
c3RyaW5nOiBzdHJlYW0uY3VycmVudCgpLAotICAgICAgICAgICAgICB0eXBlOiBzdHlsZSB8fCBu
dWxsLAotICAgICAgICAgICAgICBzdGF0ZTogc3RhdGV9OwotICAgIH0sCi0KLSAgICBnZXRUb2tl
blR5cGVBdDogZnVuY3Rpb24ocG9zKSB7Ci0gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBw
b3MpOwotICAgICAgdmFyIHN0eWxlcyA9IGdldExpbmVTdHlsZXModGhpcywgZ2V0TGluZSh0aGlz
LmRvYywgcG9zLmxpbmUpKTsKLSAgICAgIHZhciBiZWZvcmUgPSAwLCBhZnRlciA9IChzdHlsZXMu
bGVuZ3RoIC0gMSkgLyAyLCBjaCA9IHBvcy5jaDsKLSAgICAgIHZhciB0eXBlOwotICAgICAgaWYg
KGNoID09IDApIHR5cGUgPSBzdHlsZXNbMl07Ci0gICAgICBlbHNlIGZvciAoOzspIHsKLSAgICAg
ICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMTsKLSAgICAgICAgaWYgKChtaWQgPyBz
dHlsZXNbbWlkICogMiAtIDFdIDogMCkgPj0gY2gpIGFmdGVyID0gbWlkOwotICAgICAgICBlbHNl
IGlmIChzdHlsZXNbbWlkICogMiArIDFdIDwgY2gpIGJlZm9yZSA9IG1pZCArIDE7Ci0gICAgICAg
IGVsc2UgeyB0eXBlID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWs7IH0KLSAgICAgIH0KLSAg
ICAgIHZhciBjdXQgPSB0eXBlID8gdHlwZS5pbmRleE9mKCJjbS1vdmVybGF5ICIpIDogLTE7Ci0g
ICAgICByZXR1cm4gY3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNl
KDAsIGN1dCAtIDEpOwotICAgIH0sCi0KLSAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykgewot
ICAgICAgdmFyIG1vZGUgPSB0aGlzLmRvYy5tb2RlOwotICAgICAgaWYgKCFtb2RlLmlubmVyTW9k
ZSkgcmV0dXJuIG1vZGU7Ci0gICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwg
dGhpcy5nZXRUb2tlbkF0KHBvcykuc3RhdGUpLm1vZGU7Ci0gICAgfSwKLQotICAgIGdldEhlbHBl
cjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7Ci0gICAgICByZXR1cm4gdGhpcy5nZXRIZWxwZXJzKHBv
cywgdHlwZSlbMF07Ci0gICAgfSwKLQotICAgIGdldEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlw
ZSkgewotICAgICAgdmFyIGZvdW5kID0gW107Ci0gICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJv
cGVydHkodHlwZSkpIHJldHVybiBoZWxwZXJzOwotICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5
cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKTsKLSAgICAgIGlmICh0eXBlb2YgbW9kZVt0
eXBlXSA9PSAic3RyaW5nIikgewotICAgICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgZm91bmQu
cHVzaChoZWxwW21vZGVbdHlwZV1dKTsKLSAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkgewot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVbdHlwZV0ubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICB2YXIgdmFsID0gaGVscFttb2RlW3R5cGVdW2ldXTsKLSAgICAgICAgICBpZiAodmFs
KSBmb3VuZC5wdXNoKHZhbCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobW9kZS5oZWxw
ZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSkgewotICAgICAgICBmb3VuZC5wdXNoKGhl
bHBbbW9kZS5oZWxwZXJUeXBlXSk7Ci0gICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkg
ewotICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5uYW1lXSk7Ci0gICAgICB9Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGhlbHAuX2dsb2JhbC5sZW5ndGg7IGkrKykgewotICAgICAgICB2
YXIgY3VyID0gaGVscC5fZ2xvYmFsW2ldOwotICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhp
cykgJiYgaW5kZXhPZihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpCi0gICAgICAgICAgZm91bmQucHVz
aChjdXIudmFsKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmb3VuZDsKLSAgICB9LAotCi0gICAg
Z2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgewotICAgICAgdmFyIGRvYyA9
IHRoaXMuZG9jOwotICAgICAgbGluZSA9IGNsaXBMaW5lKGRvYywgbGluZSA9PSBudWxsID8gZG9j
LmZpcnN0ICsgZG9jLnNpemUgLSAxOiBsaW5lKTsKLSAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9y
ZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSk7Ci0gICAgfSwKLQotICAgIGN1cnNvckNvb3Jkczog
ZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKLSAgICAgIHZhciBwb3MsIHJhbmdlID0gdGhpcy5kb2Mu
c2VsLnByaW1hcnkoKTsKLSAgICAgIGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSByYW5nZS5oZWFk
OwotICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9z
KHRoaXMuZG9jLCBzdGFydCk7Ci0gICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gcmFuZ2UuZnJvbSgp
IDogcmFuZ2UudG8oKTsKLSAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2Rl
IHx8ICJwYWdlIik7Ci0gICAgfSwKLQotICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcywgbW9k
ZSkgewotICAgICAgcmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9z
KSwgbW9kZSB8fCAicGFnZSIpOwotICAgIH0sCi0KLSAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihj
b29yZHMsIG1vZGUpIHsKLSAgICAgIGNvb3JkcyA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCBjb29y
ZHMsIG1vZGUgfHwgInBhZ2UiKTsKLSAgICAgIHJldHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jk
cy5sZWZ0LCBjb29yZHMudG9wKTsKLSAgICB9LAotCi0gICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlv
bihoZWlnaHQsIG1vZGUpIHsKLSAgICAgIGhlaWdodCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7
dG9wOiBoZWlnaHQsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wOwotICAgICAgcmV0dXJu
IGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQp
OwotICAgIH0sCi0gICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlKSB7Ci0gICAg
ICB2YXIgZW5kID0gZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUg
LSAxOwotICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZp
cnN0OwotICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRy
dWU7IH0KLSAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAg
ICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9
LCBtb2RlIHx8ICJwYWdlIikudG9wICsKLSAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAt
IGhlaWdodEF0TGluZShsaW5lT2JqKSA6IDApOwotICAgIH0sCi0KLSAgICBkZWZhdWx0VGV4dEhl
aWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSk7IH0sCi0g
ICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgodGhpcy5k
aXNwbGF5KTsgfSwKLQotICAgIHNldEd1dHRlck1hcmtlcjogbWV0aG9kT3AoZnVuY3Rpb24obGlu
ZSwgZ3V0dGVySUQsIHZhbHVlKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5l
LCAiZ3V0dGVyIiwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgbWFya2VycyA9IGxpbmUu
Z3V0dGVyTWFya2VycyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pOwotICAgICAgICBtYXJr
ZXJzW2d1dHRlcklEXSA9IHZhbHVlOwotICAgICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFy
a2VycykpIGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBjbGVhckd1dHRlcjogbWV0aG9kT3AoZnVuY3Rpb24o
Z3V0dGVySUQpIHsKLSAgICAgIHZhciBjbSA9IHRoaXMsIGRvYyA9IGNtLmRvYywgaSA9IGRvYy5m
aXJzdDsKLSAgICAgIGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYgKGxpbmUu
Z3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7Ci0gICAgICAg
ICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7Ci0gICAgICAgICAgcmVnTGlu
ZUNoYW5nZShjbSwgaSwgImd1dHRlciIpOwotICAgICAgICAgIGlmIChpc0VtcHR5KGxpbmUuZ3V0
dGVyTWFya2VycykpIGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAg
ICAgKytpOwotICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBhZGRMaW5lQ2xhc3M6IG1ldGhvZE9w
KGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUo
dGhpcywgaGFuZGxlLCAiY2xhc3MiLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9w
ID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIg
PyAiYmdDbGFzcyIgOiAid3JhcENsYXNzIjsKLSAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBsaW5l
W3Byb3BdID0gY2xzOwotICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKCIoPzpefFxccykiICsg
Y2xzICsgIig/OiR8XFxzKSIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9KTsKLSAgICB9KSwKLQotICAgIHJlbW92ZUxpbmVDbGFzczogbWV0aG9kT3AoZnVuY3Rp
b24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBo
YW5kbGUsICJjbGFzcyIsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHByb3AgPSB3aGVy
ZSA9PSAidGV4dCIgPyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0Ns
YXNzIiA6ICJ3cmFwQ2xhc3MiOwotICAgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXTsKLSAgICAg
ICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwp
IGxpbmVbcHJvcF0gPSBudWxsOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB2YXIgZm91bmQg
PSBjdXIubWF0Y2gobmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIgKyBjbHMgKyAiKD86JHxcXHMrKSIp
KTsKLSAgICAgICAgICBpZiAoIWZvdW5kKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgdmFyIGVu
ZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoOwotICAgICAgICAgIGxpbmVbcHJvcF0g
PSBjdXIuc2xpY2UoMCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5pbmRleCB8fCBlbmQgPT0gY3Vy
Lmxlbmd0aCA/ICIiIDogIiAiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGw7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGFkZExpbmVX
aWRnZXQ6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewotICAgICAg
cmV0dXJuIGFkZExpbmVXaWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKTsKLSAgICB9
KSwKLQotICAgIHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xl
YXIoKTsgfSwKLQotICAgIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAodHlw
ZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKLSAgICAgICAgaWYgKCFpc0xpbmUodGhpcy5kb2MsIGxp
bmUpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIG4gPSBsaW5lOwotICAgICAgICBsaW5lID0g
Z2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKLSAgICAgICAg
aWYgKG4gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge2xpbmU6
IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1
dHRlck1hcmtlcnMsCi0gICAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJn
Q2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcywKLSAgICAgICAg
ICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfTsKLSAgICB9LAotCi0gICAgZ2V0Vmlld3BvcnQ6
IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRo
aXMuZGlzcGxheS52aWV3VG99O30sCi0KLSAgICBhZGRXaWRnZXQ6IGZ1bmN0aW9uKHBvcywgbm9k
ZSwgc2Nyb2xsLCB2ZXJ0LCBob3JpeikgewotICAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3Bs
YXk7Ci0gICAgICBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9z
KSk7Ci0gICAgICB2YXIgdG9wID0gcG9zLmJvdHRvbSwgbGVmdCA9IHBvcy5sZWZ0OwotICAgICAg
bm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgICBkaXNwbGF5LnNpemVyLmFw
cGVuZENoaWxkKG5vZGUpOwotICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB7Ci0gICAgICAgIHRv
cCA9IHBvcy50b3A7Ci0gICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gImFib3ZlIiB8fCB2ZXJ0ID09
ICJuZWFyIikgewotICAgICAgICB2YXIgdnNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS53cmFwcGVy
LmNsaWVudEhlaWdodCwgdGhpcy5kb2MuaGVpZ2h0KSwKLSAgICAgICAgaHNwYWNlID0gTWF0aC5t
YXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xpZW50V2lk
dGgpOwotICAgICAgICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBzcGVjaWZp
ZWQgYW5kIHBvc3NpYmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcgYmVsb3cK
LSAgICAgICAgaWYgKCh2ZXJ0ID09ICdhYm92ZScgfHwgcG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0
SGVpZ2h0ID4gdnNwYWNlKSAmJiBwb3MudG9wID4gbm9kZS5vZmZzZXRIZWlnaHQpCi0gICAgICAg
ICAgdG9wID0gcG9zLnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OwotICAgICAgICBlbHNlIGlmIChw
b3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKQotICAgICAgICAgIHRvcCA9
IHBvcy5ib3R0b207Ci0gICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFj
ZSkKLSAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKLSAgICAgIH0K
LSAgICAgIG5vZGUuc3R5bGUudG9wID0gdG9wICsgInB4IjsKLSAgICAgIG5vZGUuc3R5bGUubGVm
dCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKLSAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7
Ci0gICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRX
aWR0aDsKLSAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKGhvcml6ID09ICJsZWZ0IikgbGVmdCA9IDA7Ci0gICAgICAgIGVsc2UgaWYg
KGhvcml6ID09ICJtaWRkbGUiKSBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBu
b2RlLm9mZnNldFdpZHRoKSAvIDI7Ci0gICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyAi
cHgiOwotICAgICAgfQotICAgICAgaWYgKHNjcm9sbCkKLSAgICAgICAgc2Nyb2xsSW50b1ZpZXco
dGhpcywgbGVmdCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZz
ZXRIZWlnaHQpOwotICAgIH0sCi0KLSAgICB0cmlnZ2VyT25LZXlEb3duOiBtZXRob2RPcChvbktl
eURvd24pLAotICAgIHRyaWdnZXJPbktleVByZXNzOiBtZXRob2RPcChvbktleVByZXNzKSwKLSAg
ICB0cmlnZ2VyT25LZXlVcDogbWV0aG9kT3Aob25LZXlVcCksCi0KLSAgICBleGVjQ29tbWFuZDog
ZnVuY3Rpb24oY21kKSB7Ci0gICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSkK
LSAgICAgICAgcmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7Ci0gICAgfSwKLQotICAgIGZpbmRQ
b3NIOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7Ci0gICAgICB2YXIg
ZGlyID0gMTsKLSAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1v
dW50OyB9Ci0gICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJv
bSk7IGkgPCBhbW91bnQ7ICsraSkgewotICAgICAgICBjdXIgPSBmaW5kUG9zSCh0aGlzLmRvYywg
Y3VyLCBkaXIsIHVuaXQsIHZpc3VhbGx5KTsKLSAgICAgICAgaWYgKGN1ci5oaXRTaWRlKSBicmVh
azsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjdXI7Ci0gICAgfSwKLQotICAgIG1vdmVIOiBtZXRo
b2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHsKLSAgICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgICBj
bS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgaWYgKGNtLmRp
c3BsYXkuc2hpZnQgfHwgY20uZG9jLmV4dGVuZCB8fCByYW5nZS5lbXB0eSgpKQotICAgICAgICAg
IHJldHVybiBmaW5kUG9zSChjbS5kb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgY20ub3B0aW9u
cy5ydGxNb3ZlVmlzdWFsbHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGRpciA8
IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOwotICAgICAgfSwgc2VsX21vdmUpOwotICAg
IH0pLAotCi0gICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7Ci0gICAg
ICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYzsKLSAgICAgIGlmIChzZWwu
c29tZXRoaW5nU2VsZWN0ZWQoKSkKLSAgICAgICAgZG9jLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51
bGwsICIrZGVsZXRlIik7Ci0gICAgICBlbHNlCi0gICAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24o
dGhpcywgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9zSChk
b2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpOwotICAgICAgICAgIHJldHVybiBkaXIg
PCAwID8ge2Zyb206IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTogcmFuZ2UuaGVhZCwg
dG86IG90aGVyfTsKLSAgICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBmaW5kUG9zVjogZnVuY3Rp
b24oZnJvbSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7Ci0gICAgICB2YXIgZGlyID0gMSwg
eCA9IGdvYWxDb2x1bW47Ci0gICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50
ID0gLWFtb3VudDsgfQotICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IGNsaXBQb3ModGhpcy5k
b2MsIGZyb20pOyBpIDwgYW1vdW50OyArK2kpIHsKLSAgICAgICAgdmFyIGNvb3JkcyA9IGN1cnNv
ckNvb3Jkcyh0aGlzLCBjdXIsICJkaXYiKTsKLSAgICAgICAgaWYgKHggPT0gbnVsbCkgeCA9IGNv
b3Jkcy5sZWZ0OwotICAgICAgICBlbHNlIGNvb3Jkcy5sZWZ0ID0geDsKLSAgICAgICAgY3VyID0g
ZmluZFBvc1YodGhpcywgY29vcmRzLCBkaXIsIHVuaXQpOwotICAgICAgICBpZiAoY3VyLmhpdFNp
ZGUpIGJyZWFrOwotICAgICAgfQotICAgICAgcmV0dXJuIGN1cjsKLSAgICB9LAotCi0gICAgbW92
ZVY6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkgewotICAgICAgdmFyIGNtID0gdGhpcywg
ZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107Ci0gICAgICB2YXIgY29sbGFwc2UgPSAhY20uZGlz
cGxheS5zaGlmdCAmJiAhZG9jLmV4dGVuZCAmJiBkb2Muc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7
Ci0gICAgICBkb2MuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAg
IGlmIChjb2xsYXBzZSkKLSAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6
IHJhbmdlLnRvKCk7Ci0gICAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCByYW5n
ZS5oZWFkLCAiZGl2Iik7Ci0gICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwpIGhl
YWRQb3MubGVmdCA9IHJhbmdlLmdvYWxDb2x1bW47Ci0gICAgICAgIGdvYWxzLnB1c2goaGVhZFBv
cy5sZWZ0KTsKLSAgICAgICAgdmFyIHBvcyA9IGZpbmRQb3NWKGNtLCBoZWFkUG9zLCBkaXIsIHVu
aXQpOwotICAgICAgICBpZiAodW5pdCA9PSAicGFnZSIgJiYgcmFuZ2UgPT0gZG9jLnNlbC5wcmlt
YXJ5KCkpCi0gICAgICAgICAgYWRkVG9TY3JvbGxQb3MoY20sIG51bGwsIGNoYXJDb29yZHMoY20s
IHBvcywgImRpdiIpLnRvcCAtIGhlYWRQb3MudG9wKTsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAg
ICAgIH0sIHNlbF9tb3ZlKTsKLSAgICAgIGlmIChnb2Fscy5sZW5ndGgpIGZvciAodmFyIGkgPSAw
OyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGRvYy5zZWwucmFuZ2Vz
W2ldLmdvYWxDb2x1bW4gPSBnb2Fsc1tpXTsKLSAgICB9KSwKLQotICAgIHRvZ2dsZU92ZXJ3cml0
ZTogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09
IHRoaXMuc3RhdGUub3ZlcndyaXRlKSByZXR1cm47Ci0gICAgICBpZiAodGhpcy5zdGF0ZS5vdmVy
d3JpdGUgPSAhdGhpcy5zdGF0ZS5vdmVyd3JpdGUpCi0gICAgICAgIGFkZENsYXNzKHRoaXMuZGlz
cGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOwotICAgICAgZWxzZQotICAg
ICAgICBybUNsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0
ZSIpOwotCi0gICAgICBzaWduYWwodGhpcywgIm92ZXJ3cml0ZVRvZ2dsZSIsIHRoaXMsIHRoaXMu
c3RhdGUub3ZlcndyaXRlKTsKLSAgICB9LAotICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0
dXJuIGFjdGl2ZUVsdCgpID09IHRoaXMuZGlzcGxheS5pbnB1dDsgfSwKLQotICAgIHNjcm9sbFRv
OiBtZXRob2RPcChmdW5jdGlvbih4LCB5KSB7Ci0gICAgICBpZiAoeCAhPSBudWxsIHx8IHkgIT0g
bnVsbCkgcmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpOwotICAgICAgaWYgKHggIT0gbnVsbCkgdGhp
cy5jdXJPcC5zY3JvbGxMZWZ0ID0geDsKLSAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuY3VyT3Au
c2Nyb2xsVG9wID0geTsKLSAgICB9KSwKLSAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHsK
LSAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3JvbGxl
ckN1dE9mZjsKLSAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBz
Y3JvbGxlci5zY3JvbGxUb3AsCi0gICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xs
SGVpZ2h0IC0gY28sIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNvLAotICAgICAgICAg
ICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0
aDogc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBjb307Ci0gICAgfSwKLQotICAgIHNjcm9sbEludG9W
aWV3OiBtZXRob2RPcChmdW5jdGlvbihyYW5nZSwgbWFyZ2luKSB7Ci0gICAgICBpZiAocmFuZ2Ug
PT0gbnVsbCkgewotICAgICAgICByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwucHJpbWFyeSgp
LmhlYWQsIHRvOiBudWxsfTsKLSAgICAgICAgaWYgKG1hcmdpbiA9PSBudWxsKSBtYXJnaW4gPSB0
aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luOwotICAgICAgfSBlbHNlIGlmICh0eXBlb2Yg
cmFuZ2UgPT0gIm51bWJlciIpIHsKLSAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAw
KSwgdG86IG51bGx9OwotICAgICAgfSBlbHNlIGlmIChyYW5nZS5mcm9tID09IG51bGwpIHsKLSAg
ICAgICAgcmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTsKLSAgICAgIH0KLSAgICAgIGlm
ICghcmFuZ2UudG8pIHJhbmdlLnRvID0gcmFuZ2UuZnJvbTsKLSAgICAgIHJhbmdlLm1hcmdpbiA9
IG1hcmdpbiB8fCAwOwotCi0gICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHsKLSAg
ICAgICAgcmVzb2x2ZVNjcm9sbFRvUG9zKHRoaXMpOwotICAgICAgICB0aGlzLmN1ck9wLnNjcm9s
bFRvUG9zID0gcmFuZ2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgc1BvcyA9IGNhbGN1
bGF0ZVNjcm9sbFBvcyh0aGlzLCBNYXRoLm1pbihyYW5nZS5mcm9tLmxlZnQsIHJhbmdlLnRvLmxl
ZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihyYW5n
ZS5mcm9tLnRvcCwgcmFuZ2UudG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgocmFuZ2UuZnJvbS5yaWdodCwgcmFuZ2Uu
dG8ucmlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1h
eChyYW5nZS5mcm9tLmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7Ci0g
ICAgICAgIHRoaXMuc2Nyb2xsVG8oc1Bvcy5zY3JvbGxMZWZ0LCBzUG9zLnNjcm9sbFRvcCk7Ci0g
ICAgICB9Ci0gICAgfSksCi0KLSAgICBzZXRTaXplOiBtZXRob2RPcChmdW5jdGlvbih3aWR0aCwg
aGVpZ2h0KSB7Ci0gICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7Ci0gICAgICAgIHJldHVy
biB0eXBlb2YgdmFsID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJpbmcodmFsKSkgPyB2
YWwgKyAicHgiIDogdmFsOwotICAgICAgfQotICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHRoaXMu
ZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsKLSAgICAgIGlm
IChoZWlnaHQgIT0gbnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50
ZXJwcmV0KGhlaWdodCk7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgY2xl
YXJMaW5lTWVhc3VyZW1lbnRDYWNoZSh0aGlzKTsKLSAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRh
dGUgPSB0cnVlOwotICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7Ci0gICAgfSks
Ci0KLSAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30s
Ci0KLSAgICByZWZyZXNoOiBtZXRob2RPcChmdW5jdGlvbigpIHsKLSAgICAgIHZhciBvbGRIZWln
aHQgPSB0aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKLSAgICAgIHJlZ0NoYW5nZSh0aGlz
KTsKLSAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwotICAgICAgY2xlYXJDYWNo
ZXModGhpcyk7Ci0gICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZG9jLnNjcm9sbExlZnQsIHRoaXMu
ZG9jLnNjcm9sbFRvcCk7Ci0gICAgICB1cGRhdGVHdXR0ZXJTcGFjZSh0aGlzKTsKLSAgICAgIGlm
IChvbGRIZWlnaHQgPT0gbnVsbCB8fCBNYXRoLmFicyhvbGRIZWlnaHQgLSB0ZXh0SGVpZ2h0KHRo
aXMuZGlzcGxheSkpID4gLjUpCi0gICAgICAgIGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7Ci0g
ICAgICBzaWduYWwodGhpcywgInJlZnJlc2giLCB0aGlzKTsKLSAgICB9KSwKLQotICAgIHN3YXBE
b2M6IG1ldGhvZE9wKGZ1bmN0aW9uKGRvYykgewotICAgICAgdmFyIG9sZCA9IHRoaXMuZG9jOwot
ICAgICAgb2xkLmNtID0gbnVsbDsKLSAgICAgIGF0dGFjaERvYyh0aGlzLCBkb2MpOwotICAgICAg
Y2xlYXJDYWNoZXModGhpcyk7Ci0gICAgICByZXNldElucHV0KHRoaXMpOwotICAgICAgdGhpcy5z
Y3JvbGxUbyhkb2Muc2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7Ci0gICAgICBzaWduYWxMYXRl
cih0aGlzLCAic3dhcERvYyIsIHRoaXMsIG9sZCk7Ci0gICAgICByZXR1cm4gb2xkOwotICAgIH0p
LAotCi0gICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmlu
cHV0O30sCi0gICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlz
cGxheS53cmFwcGVyO30sCi0gICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVy
biB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7fSwKLSAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlv
bigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyczt9Ci0gIH07Ci0gIGV2ZW50TWl4aW4oQ29k
ZU1pcnJvcik7Ci0KLSAgLy8gT1BUSU9OIERFRkFVTFRTCi0KLSAgLy8gVGhlIGRlZmF1bHQgY29u
ZmlndXJhdGlvbiBvcHRpb25zLgotICB2YXIgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRz
ID0ge307Ci0gIC8vIEZ1bmN0aW9ucyB0byBydW4gd2hlbiBvcHRpb25zIGFyZSBjaGFuZ2VkLgot
ICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzID0ge307Ci0K
LSAgZnVuY3Rpb24gb3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkgewotICAg
IENvZGVNaXJyb3IuZGVmYXVsdHNbbmFtZV0gPSBkZWZsdDsKLSAgICBpZiAoaGFuZGxlKSBvcHRp
b25IYW5kbGVyc1tuYW1lXSA9Ci0gICAgICBub3RPbkluaXQgPyBmdW5jdGlvbihjbSwgdmFsLCBv
bGQpIHtpZiAob2xkICE9IEluaXQpIGhhbmRsZShjbSwgdmFsLCBvbGQpO30gOiBoYW5kbGU7Ci0g
IH0KLQotICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xk
IHZhbHVlLgotICB2YXIgSW5pdCA9IENvZGVNaXJyb3IuSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rp
b24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuSW5pdCI7fX07Ci0KLSAgLy8gVGhlc2UgdHdvIGFyZSwg
b24gaW5pdCwgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleQotICAvLyBo
YXZlIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZWRpdG9yIGNhbiBzdGFydCBhdCBhbGwu
Ci0gIG9wdGlvbigidmFsdWUiLCAiIiwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLnNldFZh
bHVlKHZhbCk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oIm1vZGUiLCBudWxsLCBmdW5jdGlvbihj
bSwgdmFsKSB7Ci0gICAgY20uZG9jLm1vZGVPcHRpb24gPSB2YWw7Ci0gICAgbG9hZE1vZGUoY20p
OwotICB9LCB0cnVlKTsKLQotICBvcHRpb24oImluZGVudFVuaXQiLCAyLCBsb2FkTW9kZSwgdHJ1
ZSk7Ci0gIG9wdGlvbigiaW5kZW50V2l0aFRhYnMiLCBmYWxzZSk7Ci0gIG9wdGlvbigic21hcnRJ
bmRlbnQiLCB0cnVlKTsKLSAgb3B0aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20pIHsKLSAg
ICByZXNldE1vZGVTdGF0ZShjbSk7Ci0gICAgY2xlYXJDYWNoZXMoY20pOwotICAgIHJlZ0NoYW5n
ZShjbSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oInNwZWNpYWxDaGFycyIsIC9bXHRcdTAwMDAt
XHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLCBmdW5jdGlvbihjbSwgdmFs
KSB7Ci0gICAgY20ub3B0aW9ucy5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2Ug
KyAodmFsLnRlc3QoIlx0IikgPyAiIiA6ICJ8XHQiKSwgImciKTsKLSAgICBjbS5yZWZyZXNoKCk7
Ci0gIH0sIHRydWUpOwotICBvcHRpb24oInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLCBkZWZhdWx0
U3BlY2lhbENoYXJQbGFjZWhvbGRlciwgZnVuY3Rpb24oY20pIHtjbS5yZWZyZXNoKCk7fSwgdHJ1
ZSk7Ci0gIG9wdGlvbigiZWxlY3RyaWNDaGFycyIsIHRydWUpOwotICBvcHRpb24oInJ0bE1vdmVW
aXN1YWxseSIsICF3aW5kb3dzKTsKLSAgb3B0aW9uKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCB0
cnVlKTsKLQotICBvcHRpb24oInRoZW1lIiwgImRlZmF1bHQiLCBmdW5jdGlvbihjbSkgewotICAg
IHRoZW1lQ2hhbmdlZChjbSk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9LCB0cnVlKTsK
LSAgb3B0aW9uKCJrZXlNYXAiLCAiZGVmYXVsdCIsIGtleU1hcENoYW5nZWQpOwotICBvcHRpb24o
ImV4dHJhS2V5cyIsIG51bGwpOwotCi0gIG9wdGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2UsIHdy
YXBwaW5nQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigiZ3V0dGVycyIsIFtdLCBmdW5jdGlvbihj
bSkgewotICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKLSAgICBndXR0
ZXJzQ2hhbmdlZChjbSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oImZpeGVkR3V0dGVyIiwgdHJ1
ZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0
ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAiOwot
ICAgIGNtLnJlZnJlc2goKTsKLSAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY292ZXJHdXR0ZXJOZXh0
VG9TY3JvbGxiYXIiLCBmYWxzZSwgdXBkYXRlU2Nyb2xsYmFycywgdHJ1ZSk7Ci0gIG9wdGlvbigi
bGluZU51bWJlcnMiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHsKLSAgICBzZXRHdXR0ZXJzRm9yTGlu
ZU51bWJlcnMoY20ub3B0aW9ucyk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9LCB0cnVl
KTsKLSAgb3B0aW9uKCJmaXJzdExpbmVOdW1iZXIiLCAxLCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7
Ci0gIG9wdGlvbigibGluZU51bWJlckZvcm1hdHRlciIsIGZ1bmN0aW9uKGludGVnZXIpIHtyZXR1
cm4gaW50ZWdlcjt9LCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigic2hvd0N1cnNv
cldoZW5TZWxlY3RpbmciLCBmYWxzZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKLQotICBvcHRp
b24oInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIsIHRydWUpOwotCi0gIG9wdGlvbigicmVh
ZE9ubHkiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGlmICh2YWwgPT0gIm5vY3Vy
c29yIikgewotICAgICAgb25CbHVyKGNtKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQuYmx1cigp
OwotICAgICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNtLmRpc3BsYXkuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgIGlmICghdmFsKSByZXNldElucHV0
KGNtKTsKLSAgICB9Ci0gIH0pOwotICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5j
dGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIHJlc2V0SW5wdXQoY20pO30sIHRydWUpOwotICBvcHRp
b24oImRyYWdEcm9wIiwgdHJ1ZSk7Ci0KLSAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzAp
OwotICBvcHRpb24oImN1cnNvclNjcm9sbE1hcmdpbiIsIDApOwotICBvcHRpb24oImN1cnNvckhl
aWdodCIsIDEpOwotICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKLSAgb3B0aW9uKCJ3b3JrRGVs
YXkiLCAxMDApOwotICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUsIHJlc2V0TW9kZVN0YXRl
LCB0cnVlKTsKLSAgb3B0aW9uKCJhZGRNb2RlQ2xhc3MiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUs
IHRydWUpOwotICBvcHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7Ci0gIG9wdGlvbigidW5kb0Rl
cHRoIiwgMjAwLCBmdW5jdGlvbihjbSwgdmFsKXtjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2
YWw7fSk7Ci0gIG9wdGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCAxMjUwKTsKLSAgb3B0aW9uKCJ2
aWV3cG9ydE1hcmdpbiIsIDEwLCBmdW5jdGlvbihjbSl7Y20ucmVmcmVzaCgpO30sIHRydWUpOwot
ICBvcHRpb24oIm1heEhpZ2hsaWdodExlbmd0aCIsIDEwMDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1
ZSk7Ci0gIG9wdGlvbigibW92ZUlucHV0V2l0aEN1cnNvciIsIHRydWUsIGZ1bmN0aW9uKGNtLCB2
YWwpIHsKLSAgICBpZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSBjbS5k
aXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSAwOwotICB9KTsKLQotICBvcHRpb24oInRhYmlu
ZGV4IiwgbnVsbCwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLmRpc3BsYXkuaW5wdXQudGFi
SW5kZXggPSB2YWwgfHwgIiI7Ci0gIH0pOwotICBvcHRpb24oImF1dG9mb2N1cyIsIG51bGwpOwot
Ci0gIC8vIE1PREUgREVGSU5JVElPTiBBTkQgUVVFUllJTkcKLQotICAvLyBLbm93biBtb2Rlcywg
YnkgbmFtZSBhbmQgYnkgTUlNRQotICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1vZGVzID0ge30s
IG1pbWVNb2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307Ci0KLSAgLy8gRXh0cmEgYXJn
dW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzCi0g
IC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9t
YXRpY2FsbHkKLSAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSBy
ZXF1aXJlL2RlZmluZSBjYWxscy4pCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9u
KG5hbWUsIG1vZGUpIHsKLSAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1l
ICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsKLSAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA+IDIpIHsKLSAgICAgIG1vZGUuZGVwZW5kZW5jaWVzID0gW107Ci0gICAg
ICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgbW9kZS5kZXBlbmRl
bmNpZXMucHVzaChhcmd1bWVudHNbaV0pOwotICAgIH0KLSAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7
Ci0gIH07Ci0KLSAgQ29kZU1pcnJvci5kZWZpbmVNSU1FID0gZnVuY3Rpb24obWltZSwgc3BlYykg
ewotICAgIG1pbWVNb2Rlc1ttaW1lXSA9IHNwZWM7Ci0gIH07Ci0KLSAgLy8gR2l2ZW4gYSBNSU1F
IHR5cGUsIGEge25hbWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZQotICAv
LyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC4KLSAgQ29kZU1pcnJvci5yZXNv
bHZlTW9kZSA9IGZ1bmN0aW9uKHNwZWMpIHsKLSAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmlu
ZyIgJiYgbWltZU1vZGVzLmhhc093blByb3BlcnR5KHNwZWMpKSB7Ci0gICAgICBzcGVjID0gbWlt
ZU1vZGVzW3NwZWNdOwotICAgIH0gZWxzZSBpZiAoc3BlYyAmJiB0eXBlb2Ygc3BlYy5uYW1lID09
ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7Ci0gICAg
ICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5uYW1lXTsKLSAgICAgIGlmICh0eXBlb2YgZm91
bmQgPT0gInN0cmluZyIpIGZvdW5kID0ge25hbWU6IGZvdW5kfTsKLSAgICAgIHNwZWMgPSBjcmVh
dGVPYmooZm91bmQsIHNwZWMpOwotICAgICAgc3BlYy5uYW1lID0gZm91bmQubmFtZTsKLSAgICB9
IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wr
eG1sJC8udGVzdChzcGVjKSkgewotICAgICAgcmV0dXJuIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUo
ImFwcGxpY2F0aW9uL3htbCIpOwotICAgIH0KLSAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmlu
ZyIpIHJldHVybiB7bmFtZTogc3BlY307Ci0gICAgZWxzZSByZXR1cm4gc3BlYyB8fCB7bmFtZTog
Im51bGwifTsKLSAgfTsKLQotICAvLyBHaXZlbiBhIG1vZGUgc3BlYyAoYW55dGhpbmcgdGhhdCBy
ZXNvbHZlTW9kZSBhY2NlcHRzKSwgZmluZCBhbmQKLSAgLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwg
bW9kZSBvYmplY3QuCi0gIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNw
ZWMpIHsKLSAgICB2YXIgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7Ci0gICAg
dmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1lXTsKLSAgICBpZiAoIW1mYWN0b3J5KSByZXR1
cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWluIik7Ci0gICAgdmFyIG1v
ZGVPYmogPSBtZmFjdG9yeShvcHRpb25zLCBzcGVjKTsKLSAgICBpZiAobW9kZUV4dGVuc2lvbnMu
aGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkgewotICAgICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5z
aW9uc1tzcGVjLm5hbWVdOwotICAgICAgZm9yICh2YXIgcHJvcCBpbiBleHRzKSB7Ci0gICAgICAg
IGlmICghZXh0cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7Ci0gICAgICAgIGlmICht
b2RlT2JqLmhhc093blByb3BlcnR5KHByb3ApKSBtb2RlT2JqWyJfIiArIHByb3BdID0gbW9kZU9i
altwcm9wXTsKLSAgICAgICAgbW9kZU9ialtwcm9wXSA9IGV4dHNbcHJvcF07Ci0gICAgICB9Ci0g
ICAgfQotICAgIG1vZGVPYmoubmFtZSA9IHNwZWMubmFtZTsKLSAgICBpZiAoc3BlYy5oZWxwZXJU
eXBlKSBtb2RlT2JqLmhlbHBlclR5cGUgPSBzcGVjLmhlbHBlclR5cGU7Ci0gICAgaWYgKHNwZWMu
bW9kZVByb3BzKSBmb3IgKHZhciBwcm9wIGluIHNwZWMubW9kZVByb3BzKQotICAgICAgbW9kZU9i
altwcm9wXSA9IHNwZWMubW9kZVByb3BzW3Byb3BdOwotCi0gICAgcmV0dXJuIG1vZGVPYmo7Ci0g
IH07Ci0KLSAgLy8gTWluaW1hbCBkZWZhdWx0IG1vZGUuCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgibnVsbCIsIGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB7dG9rZW46IGZ1bmN0aW9uKHN0cmVh
bSkge3N0cmVhbS5za2lwVG9FbmQoKTt9fTsKLSAgfSk7Ci0gIENvZGVNaXJyb3IuZGVmaW5lTUlN
RSgidGV4dC9wbGFpbiIsICJudWxsIik7Ci0KLSAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRh
Y2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbQotICAvLyBvdXRzaWRlIHRoZSBhY3R1
YWwgbW9kZSBkZWZpbml0aW9uLgotICB2YXIgbW9kZUV4dGVuc2lvbnMgPSBDb2RlTWlycm9yLm1v
ZGVFeHRlbnNpb25zID0ge307Ci0gIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGZ1bmN0aW9uKG1v
ZGUsIHByb3BlcnRpZXMpIHsKLSAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zLmhhc093blBy
b3BlcnR5KG1vZGUpID8gbW9kZUV4dGVuc2lvbnNbbW9kZV0gOiAobW9kZUV4dGVuc2lvbnNbbW9k
ZV0gPSB7fSk7Ci0gICAgY29weU9iaihwcm9wZXJ0aWVzLCBleHRzKTsKLSAgfTsKLQotICAvLyBF
WFRFTlNJT05TCi0KLSAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1l
LCBmdW5jKSB7Ci0gICAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jOwotICB9Owot
ICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsK
LSAgICBEb2MucHJvdG90eXBlW25hbWVdID0gZnVuYzsKLSAgfTsKLSAgQ29kZU1pcnJvci5kZWZp
bmVPcHRpb24gPSBvcHRpb247Ci0KLSAgdmFyIGluaXRIb29rcyA9IFtdOwotICBDb2RlTWlycm9y
LmRlZmluZUluaXRIb29rID0gZnVuY3Rpb24oZikge2luaXRIb29rcy5wdXNoKGYpO307Ci0KLSAg
dmFyIGhlbHBlcnMgPSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7fTsKLSAgQ29kZU1pcnJvci5yZWdp
c3RlckhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKCFoZWxw
ZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBl
XSA9IHtfZ2xvYmFsOiBbXX07Ci0gICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwotICB9
OwotICBDb2RlTWlycm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFt
ZSwgcHJlZGljYXRlLCB2YWx1ZSkgewotICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlw
ZSwgbmFtZSwgdmFsdWUpOwotICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNoKHtwcmVkOiBw
cmVkaWNhdGUsIHZhbDogdmFsdWV9KTsKLSAgfTsKLQotICAvLyBNT0RFIFNUQVRFIEhBTkRMSU5H
Ci0KLSAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0
ZWQgYmVjYXVzZSBuZXN0ZWQKLSAgLy8gbW9kZXMgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVpciBp
bm5lciBtb2Rlcy4KLQotICB2YXIgY29weVN0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBm
dW5jdGlvbihtb2RlLCBzdGF0ZSkgewotICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHN0
YXRlOwotICAgIGlmIChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRl
KTsKLSAgICB2YXIgbnN0YXRlID0ge307Ci0gICAgZm9yICh2YXIgbiBpbiBzdGF0ZSkgewotICAg
ICAgdmFyIHZhbCA9IHN0YXRlW25dOwotICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2
YWwgPSB2YWwuY29uY2F0KFtdKTsKLSAgICAgIG5zdGF0ZVtuXSA9IHZhbDsKLSAgICB9Ci0gICAg
cmV0dXJuIG5zdGF0ZTsKLSAgfTsKLQotICB2YXIgc3RhcnRTdGF0ZSA9IENvZGVNaXJyb3Iuc3Rh
cnRTdGF0ZSA9IGZ1bmN0aW9uKG1vZGUsIGExLCBhMikgewotICAgIHJldHVybiBtb2RlLnN0YXJ0
U3RhdGUgPyBtb2RlLnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7Ci0gIH07Ci0KLSAgLy8gR2l2
ZW4gYSBtb2RlIGFuZCBhIHN0YXRlIChmb3IgdGhhdCBtb2RlKSwgZmluZCB0aGUgaW5uZXIgbW9k
ZSBhbmQKLSAgLy8gc3RhdGUgYXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHN0YXRlIHJlZmVycyB0
by4KLSAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewotICAg
IHdoaWxlIChtb2RlLmlubmVyTW9kZSkgewotICAgICAgdmFyIGluZm8gPSBtb2RlLmlubmVyTW9k
ZShzdGF0ZSk7Ci0gICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIGJyZWFrOwot
ICAgICAgc3RhdGUgPSBpbmZvLnN0YXRlOwotICAgICAgbW9kZSA9IGluZm8ubW9kZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX07Ci0gIH07Ci0K
LSAgLy8gU1RBTkRBUkQgQ09NTUFORFMKLQotICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxl
c3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW4KLSAgLy8gZWRpdG9yLCBtb3N0
bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuCi0gIHZhciBjb21tYW5kcyA9IENvZGVNaXJyb3IuY29t
bWFuZHMgPSB7Ci0gICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbihQ
b3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xs
KTt9LAotICAgIHNpbmdsZVNlbGVjdGlvbjogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLnNldFNl
bGVjdGlvbihjbS5nZXRDdXJzb3IoImFuY2hvciIpLCBjbS5nZXRDdXJzb3IoImhlYWQiKSwgc2Vs
X2RvbnRTY3JvbGwpOwotICAgIH0sCi0gICAga2lsbExpbmU6IGZ1bmN0aW9uKGNtKSB7Ci0gICAg
ICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICBpZiAo
cmFuZ2UuZW1wdHkoKSkgewotICAgICAgICAgIHZhciBsZW4gPSBnZXRMaW5lKGNtLmRvYywgcmFu
Z2UuaGVhZC5saW5lKS50ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9
PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSkKLSAgICAgICAgICAgIHJl
dHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX07
Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0
bzogUG9zKHJhbmdlLmhlYWQubGluZSwgbGVuKX07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpfTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgfSwKLSAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkgewotICAg
ICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0
dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLAotICAgICAgICAgICAgICAgIHRv
OiBjbGlwUG9zKGNtLmRvYywgUG9zKHJhbmdlLnRvKCkubGluZSArIDEsIDApKX07Ci0gICAgICB9
KTsKLSAgICB9LAotICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAgICAgZGVsZXRl
TmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIHtmcm9t
OiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJvbSgpfTsKLSAgICAgIH0p
OwotICAgIH0sCi0gICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKLSAgICByZWRv
OiBmdW5jdGlvbihjbSkge2NtLnJlZG8oKTt9LAotICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9u
KGNtKSB7Y20udW5kb1NlbGVjdGlvbigpO30sCi0gICAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24o
Y20pIHtjbS5yZWRvU2VsZWN0aW9uKCk7fSwKLSAgICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkg
e2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApKTt9LAotICAgIGdvRG9j
RW5kOiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkp
O30sCi0gICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxl
Y3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVh
ZC5saW5lKTsgfSwgc2VsX21vdmUpOwotICAgIH0sCi0gICAgZ29MaW5lU3RhcnRTbWFydDogZnVu
Y3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkg
ewotICAgICAgICB2YXIgc3RhcnQgPSBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7Ci0g
ICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKLSAgICAgICAg
dmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJb
MF0ubGV2ZWwgPT0gMCkgewotICAgICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwg
bGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICAgICAgdmFyIGluV1MgPSByYW5nZS5oZWFk
LmxpbmUgPT0gc3RhcnQubGluZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcmFu
Z2UuaGVhZC5jaDsKLSAgICAgICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDog
Zmlyc3ROb25XUyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgfSwg
c2VsX21vdmUpOwotICAgIH0sCi0gICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewotICAgICAg
Y20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNt
LCByYW5nZS5oZWFkLmxpbmUpOyB9LCBzZWxfbW92ZSk7Ci0gICAgfSwKLSAgICBnb0xpbmVSaWdo
dDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihy
YW5nZSkgewotICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2
IikudG9wICsgNTsKLSAgICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3Bs
YXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7Ci0gICAgICB9
LCBzZWxfbW92ZSk7Ci0gICAgfSwKLSAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAg
ICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHZhciB0
b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OwotICAgICAgICBy
ZXR1cm4gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7Ci0gICAgICB9
LCBzZWxfbW92ZSk7Ci0gICAgfSwKLSAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3Zl
VigtMSwgImxpbmUiKTt9LAotICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYo
MSwgImxpbmUiKTt9LAotICAgIGdvUGFnZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAi
cGFnZSIpO30sCi0gICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFn
ZSIpO30sCi0gICAgZ29DaGFyTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgImNoYXIi
KTt9LAotICAgIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJjaGFyIik7
fSwKLSAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4i
KTt9LAotICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwgImNvbHVt
biIpO30sCi0gICAgZ29Xb3JkTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgIndvcmQi
KTt9LAotICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiZ3JvdXAi
KTt9LAotICAgIGdvR3JvdXBMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiZ3JvdXAi
KTt9LAotICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3b3JkIik7
fSwKLSAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFy
Iik7fSwKLSAgICBkZWxDaGFyQWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiY2hh
ciIpO30sCi0gICAgZGVsV29yZEJlZm9yZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAi
d29yZCIpO30sCi0gICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoMSwg
IndvcmQiKTt9LAotICAgIGRlbEdyb3VwQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgo
LTEsICJncm91cCIpO30sCi0gICAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24oY20pIHtjbS5kZWxl
dGVIKDEsICJncm91cCIpO30sCi0gICAgaW5kZW50QXV0bzogZnVuY3Rpb24oY20pIHtjbS5pbmRl
bnRTZWxlY3Rpb24oInNtYXJ0Iik7fSwKLSAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2Nt
LmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKLSAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbihjbSkg
e2NtLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LAotICAgIGluc2VydFRhYjogZnVuY3Rp
b24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKCJcdCIpO30sCi0gICAgaW5zZXJ0U29mdFRhYjog
ZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBzcGFjZXMgPSBbXSwgcmFuZ2VzID0gY20ubGlzdFNl
bGVjdGlvbnMoKSwgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBwb3MgPSByYW5n
ZXNbaV0uZnJvbSgpOwotICAgICAgICB2YXIgY29sID0gY291bnRDb2x1bW4oY20uZ2V0TGluZShw
b3MubGluZSksIHBvcy5jaCwgdGFiU2l6ZSk7Ci0gICAgICAgIHNwYWNlcy5wdXNoKG5ldyBBcnJh
eSh0YWJTaXplIC0gY29sICUgdGFiU2l6ZSArIDEpLmpvaW4oIiAiKSk7Ci0gICAgICB9Ci0gICAg
ICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhzcGFjZXMpOwotICAgIH0sCi0gICAgZGVmYXVsdFRhYjog
ZnVuY3Rpb24oY20pIHsKLSAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBjbS5pbmRl
bnRTZWxlY3Rpb24oImFkZCIpOwotICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiaW5zZXJ0VGFi
Iik7Ci0gICAgfSwKLSAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24oY20pIHsKLSAgICAgIHJ1
bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVj
dGlvbnMoKSwgbmV3U2VsID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2Vz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkLCBsaW5l
ID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lKS50ZXh0OwotICAgICAgICAgIGlmIChsaW5lKSB7
Ci0gICAgICAgICAgICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoKSBjdXIgPSBuZXcgUG9zKGN1
ci5saW5lLCBjdXIuY2ggLSAxKTsKLSAgICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7Ci0gICAg
ICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpOwotICAgICAgICAg
ICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoIC0gMSkgKyBsaW5lLmNoYXJB
dChjdXIuY2ggLSAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGlu
ZSwgY3VyLmNoIC0gMiksIGN1ciwgIit0cmFuc3Bvc2UiKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHsKLSAgICAgICAgICAgICAgdmFyIHByZXYgPSBn
ZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50ZXh0OwotICAgICAgICAgICAgICBpZiAocHJl
dikKLSAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyAiXG4i
ICsgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUG9zKGN1ci5saW5lIC0gMSwgcHJldi5sZW5ndGggLSAxKSwgUG9zKGN1ci5saW5l
LCAxKSwgIit0cmFuc3Bvc2UiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
ICAgbmV3U2VsLnB1c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y20uc2V0U2VsZWN0aW9ucyhuZXdTZWwpOwotICAgICAgfSk7Ci0gICAgfSwKLSAgICBuZXdsaW5l
QW5kSW5kZW50OiBmdW5jdGlvbihjbSkgewotICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHZhciBsZW4gPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgIHZhciByYW5nZSA9IGNt
Lmxpc3RTZWxlY3Rpb25zKClbaV07Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIsIHJh
bmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgIitpbnB1dCIpOwotICAgICAgICAgIGNtLmluZGVudExp
bmUocmFuZ2UuZnJvbSgpLmxpbmUgKyAxLCBudWxsLCB0cnVlKTsKLSAgICAgICAgICBlbnN1cmVD
dXJzb3JWaXNpYmxlKGNtKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfSwKLSAgICB0b2dn
bGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQotICB9Owot
Ci0gIC8vIFNUQU5EQVJEIEtFWU1BUFMKLQotICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlN
YXAgPSB7fTsKLSAga2V5TWFwLmJhc2ljID0gewotICAgICJMZWZ0IjogImdvQ2hhckxlZnQiLCAi
UmlnaHQiOiAiZ29DaGFyUmlnaHQiLCAiVXAiOiAiZ29MaW5lVXAiLCAiRG93biI6ICJnb0xpbmVE
b3duIiwKLSAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQi
LCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAotICAgICJE
ZWxldGUiOiAiZGVsQ2hhckFmdGVyIiwgIkJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwgIlNo
aWZ0LUJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwKLSAgICAiVGFiIjogImRlZmF1bHRUYWIi
LCAiU2hpZnQtVGFiIjogImluZGVudEF1dG8iLAotICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5k
ZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiLAotICAgICJFc2MiOiAic2luZ2xlU2Vs
ZWN0aW9uIgotICB9OwotICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBj
b21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQotICAvLyBkZWZhdWx0LiBVc2VyIGNvZGUgb3IgYWRk
b25zIGNhbiBkZWZpbmUgdGhlbS4gVW5rbm93biBjb21tYW5kcwotICAvLyBhcmUgc2ltcGx5IGln
bm9yZWQuCi0gIGtleU1hcC5wY0RlZmF1bHQgPSB7Ci0gICAgIkN0cmwtQSI6ICJzZWxlY3RBbGwi
LCAiQ3RybC1EIjogImRlbGV0ZUxpbmUiLCAiQ3RybC1aIjogInVuZG8iLCAiU2hpZnQtQ3RybC1a
IjogInJlZG8iLCAiQ3RybC1ZIjogInJlZG8iLAotICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFy
dCIsICJDdHJsLVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3Ry
bC1Eb3duIjogImdvRG9jRW5kIiwKLSAgICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0
cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFs
dC1SaWdodCI6ICJnb0xpbmVFbmQiLAotICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxHcm91cEJl
Zm9yZSIsICJDdHJsLURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkN0cmwtUyI6ICJzYXZlIiwg
IkN0cmwtRiI6ICJmaW5kIiwKLSAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwt
RyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIi
OiAicmVwbGFjZUFsbCIsCi0gICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJp
bmRlbnRNb3JlIiwKLSAgICAiQ3RybC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ3RybC1V
IjogInJlZG9TZWxlY3Rpb24iLCAiQWx0LVUiOiAicmVkb1NlbGVjdGlvbiIsCi0gICAgZmFsbHRo
cm91Z2g6ICJiYXNpYyIKLSAgfTsKLSAga2V5TWFwLm1hY0RlZmF1bHQgPSB7Ci0gICAgIkNtZC1B
IjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAi
U2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKLSAgICAiQ21kLVVwIjogImdv
RG9jU3RhcnQiLCAiQ21kLUVuZCI6ICJnb0RvY0VuZCIsICJDbWQtRG93biI6ICJnb0RvY0VuZCIs
ICJBbHQtTGVmdCI6ICJnb0dyb3VwTGVmdCIsCi0gICAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmln
aHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lU3RhcnQiLCAiQ21kLVJpZ2h0IjogImdvTGluZUVuZCIs
ICJBbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwKLSAgICAiQ3RybC1BbHQtQmFja3Nw
YWNlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNt
ZC1TIjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIsCi0gICAgIkNtZC1HIjogImZpbmROZXh0Iiwg
IlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0
LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKLSAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJD
bWQtXSI6ICJpbmRlbnRNb3JlIiwgIkNtZC1CYWNrc3BhY2UiOiAiZGVsTGluZUxlZnQiLAotICAg
ICJDbWQtVSI6ICJ1bmRvU2VsZWN0aW9uIiwgIlNoaWZ0LUNtZC1VIjogInJlZG9TZWxlY3Rpb24i
LAotICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCi0gIH07Ci0gIC8vIFZlcnkg
YmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBv
biBNYWMuCi0gIGtleU1hcC5lbWFjc3kgPSB7Ci0gICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIs
ICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjog
ImdvTGluZURvd24iLAotICAgICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJnb1dv
cmRMZWZ0IiwgIkN0cmwtQSI6ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5kIiwK
LSAgICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdvUGFnZVVwIiwg
IkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAotICAg
ICJBbHQtRCI6ICJkZWxXb3JkQWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3Jl
IiwgIkN0cmwtSyI6ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hhcnMiCi0gIH07
Ci0gIGtleU1hcFsiZGVmYXVsdCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQgOiBrZXlNYXAu
cGNEZWZhdWx0OwotCi0gIC8vIEtFWU1BUCBESVNQQVRDSAotCi0gIGZ1bmN0aW9uIGdldEtleU1h
cCh2YWwpIHsKLSAgICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2
YWxdOwotICAgIGVsc2UgcmV0dXJuIHZhbDsKLSAgfQotCi0gIC8vIEdpdmVuIGFuIGFycmF5IG9m
IGtleW1hcHMgYW5kIGEga2V5IG5hbWUsIGNhbGwgaGFuZGxlIG9uIGFueQotICAvLyBiaW5kaW5n
cyBmb3VuZCwgdW50aWwgdGhhdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCBhdCB3aGljaCBwb2lu
dAotICAvLyB3ZSBjb25zaWRlciB0aGUga2V5IGhhbmRsZWQuIEltcGxlbWVudHMgdGhpbmdzIGxp
a2UgYmluZGluZyBhIGtleQotICAvLyB0byBmYWxzZSBzdG9wcGluZyBmdXJ0aGVyIGhhbmRsaW5n
IGFuZCBrZXltYXAgZmFsbHRocm91Z2guCi0gIHZhciBsb29rdXBLZXkgPSBDb2RlTWlycm9yLmxv
b2t1cEtleSA9IGZ1bmN0aW9uKG5hbWUsIG1hcHMsIGhhbmRsZSkgewotICAgIGZ1bmN0aW9uIGxv
b2t1cChtYXApIHsKLSAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOwotICAgICAgdmFyIGZvdW5k
ID0gbWFwW25hbWVdOwotICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgcmV0dXJuICJzdG9wIjsK
LSAgICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOwot
ICAgICAgaWYgKG1hcC5ub2ZhbGx0aHJvdWdoKSByZXR1cm4gInN0b3AiOwotCi0gICAgICB2YXIg
ZmFsbHRocm91Z2ggPSBtYXAuZmFsbHRocm91Z2g7Ci0gICAgICBpZiAoZmFsbHRocm91Z2ggPT0g
bnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbChmYWxsdGhyb3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKLSAgICAgICAgcmV0dXJuIGxv
b2t1cChmYWxsdGhyb3VnaCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGx0aHJvdWdo
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBkb25lID0gbG9va3VwKGZhbGx0aHJvdWdoW2ld
KTsKLSAgICAgICAgaWYgKGRvbmUpIHJldHVybiBkb25lOwotICAgICAgfQotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIGRvbmUgPSBsb29rdXAobWFwc1tpXSk7Ci0gICAgICBpZiAoZG9uZSkg
cmV0dXJuIGRvbmUgIT0gInN0b3AiOwotICAgIH0KLSAgfTsKLQotICAvLyBNb2RpZmllciBrZXkg
cHJlc3NlcyBkb24ndCBjb3VudCBhcyAncmVhbCcga2V5IHByZXNzZXMgZm9yIHRoZQotICAvLyBw
dXJwb3NlIG9mIGtleW1hcCBmYWxsdGhyb3VnaC4KLSAgdmFyIGlzTW9kaWZpZXJLZXkgPSBDb2Rl
TWlycm9yLmlzTW9kaWZpZXJLZXkgPSBmdW5jdGlvbihldmVudCkgewotICAgIHZhciBuYW1lID0g
a2V5TmFtZXNbZXZlbnQua2V5Q29kZV07Ci0gICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5h
bWUgPT0gIkFsdCIgfHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0gIH07Ci0K
LSAgLy8gTG9vayB1cCB0aGUgbmFtZSBvZiBhIGtleSBhcyBpbmRpY2F0ZWQgYnkgYW4gZXZlbnQg
b2JqZWN0LgotICB2YXIga2V5TmFtZSA9IENvZGVNaXJyb3Iua2V5TmFtZSA9IGZ1bmN0aW9uKGV2
ZW50LCBub1NoaWZ0KSB7Ci0gICAgaWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYm
IGV2ZW50WyJjaGFyIl0pIHJldHVybiBmYWxzZTsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2
ZW50LmtleUNvZGVdOwotICAgIGlmIChuYW1lID09IG51bGwgfHwgZXZlbnQuYWx0R3JhcGhLZXkp
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZXZlbnQuYWx0S2V5KSBuYW1lID0gIkFsdC0iICsgbmFt
ZTsKLSAgICBpZiAoZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSkg
bmFtZSA9ICJDdHJsLSIgKyBuYW1lOwotICAgIGlmIChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxL
ZXkgOiBldmVudC5tZXRhS2V5KSBuYW1lID0gIkNtZC0iICsgbmFtZTsKLSAgICBpZiAoIW5vU2hp
ZnQgJiYgZXZlbnQuc2hpZnRLZXkpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7Ci0gICAgcmV0dXJu
IG5hbWU7Ci0gIH07Ci0KLSAgLy8gRlJPTVRFWFRBUkVBCi0KLSAgQ29kZU1pcnJvci5mcm9tVGV4
dEFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSwgb3B0aW9ucykgewotICAgIGlmICghb3B0aW9ucykg
b3B0aW9ucyA9IHt9OwotICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKLSAgICBp
ZiAoIW9wdGlvbnMudGFiaW5kZXggJiYgdGV4dGFyZWEudGFiaW5kZXgpCi0gICAgICBvcHRpb25z
LnRhYmluZGV4ID0gdGV4dGFyZWEudGFiaW5kZXg7Ci0gICAgaWYgKCFvcHRpb25zLnBsYWNlaG9s
ZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKQotICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlciA9
IHRleHRhcmVhLnBsYWNlaG9sZGVyOwotICAgIC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBpZiB0
aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9yIGlmIGl0IGhhcwotICAgIC8vIGF1dG9mb2N1cyBh
bmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLgotICAgIGlmIChvcHRpb25zLmF1dG9mb2N1
cyA9PSBudWxsKSB7Ci0gICAgICB2YXIgaGFzRm9jdXMgPSBhY3RpdmVFbHQoKTsKLSAgICAgIG9w
dGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwKLSAgICAgICAgdGV4dGFy
ZWEuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3Vt
ZW50LmJvZHk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9
IGNtLmdldFZhbHVlKCk7fQotICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICBvbih0ZXh0
YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8g
bWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICBpZiAoIW9w
dGlvbnMubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkgewotICAgICAgICB2YXIgZm9ybSA9IHRleHRh
cmVhLmZvcm0sIHJlYWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDsKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICB2YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBzYXZlKCk7Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7Ci0g
ICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwotICAgICAgICAgICAgZm9ybS5zdWJtaXQgPSB3cmFw
cGVkU3VibWl0OwotICAgICAgICAgIH07Ci0gICAgICAgIH0gY2F0Y2goZSkge30KLSAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHZhciBj
bSA9IENvZGVNaXJyb3IoZnVuY3Rpb24obm9kZSkgewotICAgICAgdGV4dGFyZWEucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwotICAgIH0sIG9wdGlv
bnMpOwotICAgIGNtLnNhdmUgPSBzYXZlOwotICAgIGNtLmdldFRleHRBcmVhID0gZnVuY3Rpb24o
KSB7IHJldHVybiB0ZXh0YXJlYTsgfTsKLSAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7
Ci0gICAgICBzYXZlKCk7Ci0gICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNt
LmdldFdyYXBwZXJFbGVtZW50KCkpOwotICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICIi
OwotICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKLSAgICAgICAgb2ZmKHRleHRhcmVhLmZvcm0s
ICJzdWJtaXQiLCBzYXZlKTsKLSAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1p
dCA9PSAiZnVuY3Rpb24iKQotICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1
Ym1pdDsKLSAgICAgIH0KLSAgICB9OwotICAgIHJldHVybiBjbTsKLSAgfTsKLQotICAvLyBTVFJJ
TkcgU1RSRUFNCi0KLSAgLy8gRmVkIHRvIHRoZSBtb2RlIHBhcnNlcnMsIHByb3ZpZGVzIGhlbHBl
ciBmdW5jdGlvbnMgdG8gbWFrZQotICAvLyBwYXJzZXJzIG1vcmUgc3VjY2luY3QuCi0KLSAgdmFy
IFN0cmluZ1N0cmVhbSA9IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5n
LCB0YWJTaXplKSB7Ci0gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDsKLSAgICB0aGlzLnN0
cmluZyA9IHN0cmluZzsKLSAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7Ci0gICAgdGhp
cy5sYXN0Q29sdW1uUG9zID0gdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSAwOwotICAgIHRoaXMubGlu
ZVN0YXJ0ID0gMDsKLSAgfTsKLQotICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewotICAgIGVv
bDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAot
ICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IHRoaXMubGluZVN0YXJ0O30s
Ci0gICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBv
cykgfHwgdW5kZWZpbmVkO30sCi0gICAgbmV4dDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhp
cy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5j
aGFyQXQodGhpcy5wb3MrKyk7Ci0gICAgfSwKLSAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7Ci0g
ICAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpOwotICAgICAgaWYgKHR5
cGVvZiBtYXRjaCA9PSAic3RyaW5nIikgdmFyIG9rID0gY2ggPT0gbWF0Y2g7Ci0gICAgICBlbHNl
IHZhciBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkp
OwotICAgICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNoO30KLSAgICB9LAotICAgIGVh
dFdoaWxlOiBmdW5jdGlvbihtYXRjaCkgewotICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7Ci0g
ICAgICB3aGlsZSAodGhpcy5lYXQobWF0Y2gpKXt9Ci0gICAgICByZXR1cm4gdGhpcy5wb3MgPiBz
dGFydDsKLSAgICB9LAotICAgIGVhdFNwYWNlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzdGFy
dCA9IHRoaXMucG9zOwotICAgICAgd2hpbGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5n
LmNoYXJBdCh0aGlzLnBvcykpKSArK3RoaXMucG9zOwotICAgICAgcmV0dXJuIHRoaXMucG9zID4g
c3RhcnQ7Ci0gICAgfSwKLSAgICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhp
cy5zdHJpbmcubGVuZ3RoO30sCi0gICAgc2tpcFRvOiBmdW5jdGlvbihjaCkgewotICAgICAgdmFy
IGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpOwotICAgICAgaWYgKGZv
dW5kID4gLTEpIHt0aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZTt9Ci0gICAgfSwKLSAgICBi
YWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCi0gICAgY29sdW1uOiBmdW5jdGlv
bigpIHsKLSAgICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7Ci0gICAg
ICAgIHRoaXMubGFzdENvbHVtblZhbHVlID0gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMu
c3RhcnQsIHRoaXMudGFiU2l6ZSwgdGhpcy5sYXN0Q29sdW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5W
YWx1ZSk7Ci0gICAgICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gdGhpcy5sYXN0Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQgPyBj
b3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAw
KTsKLSAgICB9LAotICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBj
b3VudENvbHVtbih0aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKSAtCi0gICAgICAgICh0
aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwg
dGhpcy50YWJTaXplKSA6IDApOwotICAgIH0sCi0gICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4s
IGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkgewotICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09
ICJzdHJpbmciKSB7Ci0gICAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBj
YXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9OwotICAgICAgICB2YXIg
c3Vic3RyID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7Ci0g
ICAgICAgIGlmIChjYXNlZChzdWJzdHIpID09IGNhc2VkKHBhdHRlcm4pKSB7Ci0gICAgICAgICAg
aWYgKGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKLSAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFy
IG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pOwotICAg
ICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPiAwKSByZXR1cm4gbnVsbDsKLSAgICAgICAg
aWYgKG1hdGNoICYmIGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5n
dGg7Ci0gICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgIH0KLSAgICB9LAotICAgIGN1cnJlbnQ6
IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9z
KTt9LAotICAgIGhpZGVGaXJzdENoYXJzOiBmdW5jdGlvbihuLCBpbm5lcikgewotICAgICAgdGhp
cy5saW5lU3RhcnQgKz0gbjsKLSAgICAgIHRyeSB7IHJldHVybiBpbm5lcigpOyB9Ci0gICAgICBm
aW5hbGx5IHsgdGhpcy5saW5lU3RhcnQgLT0gbjsgfQotICAgIH0KLSAgfTsKLQotICAvLyBURVhU
TUFSS0VSUwotCi0gIC8vIENyZWF0ZWQgd2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0
aG9kcy4gQSBUZXh0TWFya2VyIGlzIGEKLSAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8g
Y2xlYXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGUKLSAgLy8gZG9jdW1lbnQuIExp
bmUgb2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmcKLSAgLy8ge2Zy
b20sIHRvLCBtYXJrZXJ9IG9iamVjdCBwb2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBh
bmQKLSAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0
IGxpbmUuIE11bHRpcGxlCi0gIC8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIg
d2hlbiBpdCBzcGFucyBhY3Jvc3MgbGluZXMuCi0gIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVs
bCBmb3IgdGhlaXIgZnJvbS90byBwcm9wZXJ0aWVzIHdoZW4gdGhlCi0gIC8vIG1hcmtlciBjb250
aW51ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQotICAv
LyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC4KLQotICB2YXIg
VGV4dE1hcmtlciA9IENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkg
ewotICAgIHRoaXMubGluZXMgPSBbXTsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMu
ZG9jID0gZG9jOwotICB9OwotICBldmVudE1peGluKFRleHRNYXJrZXIpOwotCi0gIC8vIENsZWFy
IHRoZSBtYXJrZXIuCi0gIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKLSAgICB2YXIgY20gPSB0
aGlzLmRvYy5jbSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wOwotICAgIGlmICh3aXRoT3ApIHN0
YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICBpZiAoaGFzSGFuZGxlcih0aGlzLCAiY2xlYXIiKSkgewot
ICAgICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKCk7Ci0gICAgICBpZiAoZm91bmQpIHNpZ25hbExh
dGVyKHRoaXMsICJjbGVhciIsIGZvdW5kLmZyb20sIGZvdW5kLnRvKTsKLSAgICB9Ci0gICAgdmFy
IG1pbiA9IG51bGwsIG1heCA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxp
bmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07Ci0gICAg
ICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7Ci0g
ICAgICBpZiAoY20gJiYgIXRoaXMuY29sbGFwc2VkKSByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lTm8o
bGluZSksICJ0ZXh0Iik7Ci0gICAgICBlbHNlIGlmIChjbSkgewotICAgICAgICBpZiAoc3Bhbi50
byAhPSBudWxsKSBtYXggPSBsaW5lTm8obGluZSk7Ci0gICAgICAgIGlmIChzcGFuLmZyb20gIT0g
bnVsbCkgbWluID0gbGluZU5vKGxpbmUpOwotICAgICAgfQotICAgICAgbGluZS5tYXJrZWRTcGFu
cyA9IHJlbW92ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bhbik7Ci0gICAgICBpZiAo
c3Bhbi5mcm9tID09IG51bGwgJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWxpbmVJc0hpZGRlbih0aGlz
LmRvYywgbGluZSkgJiYgY20pCi0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhl
aWdodChjbS5kaXNwbGF5KSk7Ci0gICAgfQotICAgIGlmIChjbSAmJiB0aGlzLmNvbGxhcHNlZCAm
JiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5l
cy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUodGhpcy5saW5l
c1tpXSksIGxlbiA9IGxpbmVMZW5ndGgodmlzdWFsKTsKLSAgICAgIGlmIChsZW4gPiBjbS5kaXNw
bGF5Lm1heExpbmVMZW5ndGgpIHsKLSAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lID0gdmlzdWFs
OwotICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47Ci0gICAgICAgIGNtLmRp
c3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICht
aW4gIT0gbnVsbCAmJiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkgcmVnQ2hhbmdlKGNtLCBtaW4sIG1h
eCArIDEpOwotICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDsKLSAgICB0aGlzLmV4cGxpY2l0bHlD
bGVhcmVkID0gdHJ1ZTsKLSAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQp
IHsKLSAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgICBpZiAoY20pIHJlQ2hl
Y2tTZWxlY3Rpb24oY20uZG9jKTsKLSAgICB9Ci0gICAgaWYgKGNtKSBzaWduYWxMYXRlcihjbSwg
Im1hcmtlckNsZWFyZWQiLCBjbSwgdGhpcyk7Ci0gICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9u
KGNtKTsKLSAgICBpZiAodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50LmNsZWFyKCk7Ci0gIH07Ci0K
LSAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgdGhlIG1hcmtlciBpbiB0aGUgZG9jdW1lbnQuIFJl
dHVybnMgYSB7ZnJvbSwKLSAgLy8gdG99IG9iamVjdCBieSBkZWZhdWx0LiBTaWRlIGNhbiBiZSBw
YXNzZWQgdG8gZ2V0IGEgc3BlY2lmaWMgc2lkZQotICAvLyAtLSAwIChib3RoKSwgLTEgKGxlZnQp
LCBvciAxIChyaWdodCkuIFdoZW4gbGluZU9iaiBpcyB0cnVlLCB0aGUKLSAgLy8gUG9zIG9iamVj
dHMgcmV0dXJuZWQgY29udGFpbiBhIGxpbmUgb2JqZWN0LCByYXRoZXIgdGhhbiBhIGxpbmUKLSAg
Ly8gbnVtYmVyICh1c2VkIHRvIHByZXZlbnQgbG9va2luZyB1cCB0aGUgc2FtZSBsaW5lIHR3aWNl
KS4KLSAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmop
IHsKLSAgICBpZiAoc2lkZSA9PSBudWxsICYmIHRoaXMudHlwZSA9PSAiYm9va21hcmsiKSBzaWRl
ID0gMTsKLSAgICB2YXIgZnJvbSwgdG87Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxp
bmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07Ci0gICAg
ICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7Ci0g
ICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHsKLSAgICAgICAgZnJvbSA9IFBvcyhsaW5lT2Jq
ID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi5mcm9tKTsKLSAgICAgICAgaWYgKHNpZGUgPT0g
LTEpIHJldHVybiBmcm9tOwotICAgICAgfQotICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgewot
ICAgICAgICB0byA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi50byk7
Ci0gICAgICAgIGlmIChzaWRlID09IDEpIHJldHVybiB0bzsKLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b307Ci0gIH07Ci0KLSAgLy8gU2lnbmFs
cyB0aGF0IHRoZSBtYXJrZXIncyB3aWRnZXQgY2hhbmdlZCwgYW5kIHN1cnJvdW5kaW5nIGxheW91
dAotICAvLyBzaG91bGQgYmUgcmVjb21wdXRlZC4KLSAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2hh
bmdlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3
aWRnZXQgPSB0aGlzLCBjbSA9IHRoaXMuZG9jLmNtOwotICAgIGlmICghcG9zIHx8ICFjbSkgcmV0
dXJuOwotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGxpbmUgPSBwb3Mu
bGluZSwgbGluZU4gPSBsaW5lTm8ocG9zLmxpbmUpOwotICAgICAgdmFyIHZpZXcgPSBmaW5kVmll
d0ZvckxpbmUoY20sIGxpbmVOKTsKLSAgICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIGNsZWFyTGlu
ZU1lYXN1cmVtZW50Q2FjaGVGb3Iodmlldyk7Ci0gICAgICAgIGNtLmN1ck9wLnNlbGVjdGlvbkNo
YW5nZWQgPSBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBjbS5j
dXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKLSAgICAgIGlmICghbGluZUlzSGlkZGVuKHdpZGdl
dC5kb2MsIGxpbmUpICYmIHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgewotICAgICAgICB2YXIgb2xk
SGVpZ2h0ID0gd2lkZ2V0LmhlaWdodDsKLSAgICAgICAgd2lkZ2V0LmhlaWdodCA9IG51bGw7Ci0g
ICAgICAgIHZhciBkSGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgLSBvbGRIZWlnaHQ7Ci0g
ICAgICAgIGlmIChkSGVpZ2h0KQotICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGlu
ZS5oZWlnaHQgKyBkSGVpZ2h0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfTsKLQotICBUZXh0TWFy
a2VyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkgewotICAgIGlmICghdGhp
cy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHsKLSAgICAgIHZhciBvcCA9IHRoaXMuZG9j
LmNtLmN1ck9wOwotICAgICAgaWYgKCFvcC5tYXliZUhpZGRlbk1hcmtlcnMgfHwgaW5kZXhPZihv
cC5tYXliZUhpZGRlbk1hcmtlcnMsIHRoaXMpID09IC0xKQotICAgICAgICAob3AubWF5YmVVbmhp
ZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMp
OwotICAgIH0KLSAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7Ci0gIH07Ci0gIFRleHRNYXJrZXIu
cHJvdG90eXBlLmRldGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7Ci0gICAgdGhpcy5saW5lcy5z
cGxpY2UoaW5kZXhPZih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7Ci0gICAgaWYgKCF0aGlzLmxpbmVz
Lmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkgewotICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3Vy
T3A7Ci0gICAgICAob3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZUhpZGRlbk1hcmtl
cnMgPSBbXSkpLnB1c2godGhpcyk7Ci0gICAgfQotICB9OwotCi0gIC8vIENvbGxhcHNlZCBtYXJr
ZXJzIGhhdmUgdW5pcXVlIGlkcywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvcmRlcgotICAvLyB0
aGVtLCB3aGljaCBpcyBuZWVkZWQgZm9yIHVuaXF1ZWx5IGRldGVybWluaW5nIGFuIG91dGVyIG1h
cmtlcgotICAvLyB3aGVuIHRoZXkgb3ZlcmxhcCAodGhleSBtYXkgbmVzdCwgYnV0IG5vdCBwYXJ0
aWFsbHkgb3ZlcmxhcCkuCi0gIHZhciBuZXh0TWFya2VySWQgPSAwOwotCi0gIC8vIENyZWF0ZSBh
IG1hcmtlciwgd2lyZSBpdCB1cCB0byB0aGUgcmlnaHQgbGluZXMsIGFuZAotICBmdW5jdGlvbiBt
YXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7Ci0gICAgLy8gU2hhcmVkIG1h
cmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5Ci0g
ICAgLy8gKG1hcmtUZXh0U2hhcmVkIHdpbGwgY2FsbCBvdXQgdG8gdGhpcyBhZ2Fpbiwgb25jZSBw
ZXIKLSAgICAvLyBkb2N1bWVudCkuCi0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQp
IHJldHVybiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKTsKLSAg
ICAvLyBFbnN1cmUgd2UgYXJlIGluIGFuIG9wZXJhdGlvbi4KLSAgICBpZiAoZG9jLmNtICYmICFk
b2MuY20uY3VyT3ApIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYXJrVGV4dCkoZG9jLCBmcm9t
LCB0bywgb3B0aW9ucywgdHlwZSk7Ci0KLSAgICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIo
ZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0byk7Ci0gICAgaWYgKG9wdGlvbnMpIGNvcHlP
Ymoob3B0aW9ucywgbWFya2VyLCBmYWxzZSk7Ci0gICAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBt
YXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZQotICAgIGlmIChkaWZmID4gMCB8
fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSkKLSAgICAgIHJl
dHVybiBtYXJrZXI7Ci0gICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKLSAgICAgIC8vIFNo
b3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0
ZXh0KQotICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7Ci0gICAgICBtYXJrZXIud2lkZ2V0
Tm9kZSA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVNaXJyb3Itd2lk
Z2V0Iik7Ci0gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci53aWRn
ZXROb2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7Ci0gICAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0
KSBtYXJrZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG1h
cmtlci5jb2xsYXBzZWQpIHsKLSAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRv
YywgZnJvbS5saW5lLCBmcm9tLCB0bywgbWFya2VyKSB8fAotICAgICAgICAgIGZyb20ubGluZSAh
PSB0by5saW5lICYmIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9t
LCB0bywgbWFya2VyKSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFw
c2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7Ci0gICAg
ICBzYXdDb2xsYXBzZWRTcGFucyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1hcmtlci5hZGRU
b0hpc3RvcnkpCi0gICAgICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCB7ZnJvbTogZnJvbSwgdG86
IHRvLCBvcmlnaW46ICJtYXJrVGV4dCJ9LCBkb2Muc2VsLCBOYU4pOwotCi0gICAgdmFyIGN1ckxp
bmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lOwotICAgIGRvYy5pdGVy
KGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAoY20gJiYg
bWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGlu
ZShsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpCi0gICAgICAgIHVwZGF0ZU1heExpbmUgPSB0
cnVlOwotICAgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQgJiYgY3VyTGluZSAhPSBmcm9tLmxpbmUp
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIG5l
dyBNYXJrZWRTcGFuKG1hcmtlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5lID8gdG8uY2gg
OiBudWxsKSk7Ci0gICAgICArK2N1ckxpbmU7Ci0gICAgfSk7Ci0gICAgLy8gbGluZUlzSGlkZGVu
IGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQg
cGFzcwotICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxp
bmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGlu
ZSkpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7Ci0gICAgfSk7Ci0KLSAgICBpZiAobWFya2Vy
LmNsZWFyT25FbnRlcikgb24obWFya2VyLCAiYmVmb3JlQ3Vyc29yRW50ZXIiLCBmdW5jdGlvbigp
IHsgbWFya2VyLmNsZWFyKCk7IH0pOwotCi0gICAgaWYgKG1hcmtlci5yZWFkT25seSkgewotICAg
ICAgc2F3UmVhZE9ubHlTcGFucyA9IHRydWU7Ci0gICAgICBpZiAoZG9jLmhpc3RvcnkuZG9uZS5s
ZW5ndGggfHwgZG9jLmhpc3RvcnkudW5kb25lLmxlbmd0aCkKLSAgICAgICAgZG9jLmNsZWFySGlz
dG9yeSgpOwotICAgIH0KLSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewotICAgICAgbWFya2Vy
LmlkID0gKytuZXh0TWFya2VySWQ7Ci0gICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKGNtKSB7Ci0gICAgICAvLyBTeW5jIGVkaXRvciBzdGF0ZQotICAgICAgaWYgKHVw
ZGF0ZU1heExpbmUpIGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgaWYgKG1h
cmtlci5jb2xsYXBzZWQpCi0gICAgICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5l
ICsgMSk7Ci0gICAgICBlbHNlIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci50aXRsZSB8
fCBtYXJrZXIuc3RhcnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUpCi0gICAgICAgIGZvciAodmFy
IGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSByZWdMaW5lQ2hhbmdlKGNtLCBpLCAi
dGV4dCIpOwotICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9j
KTsKLSAgICAgIHNpZ25hbExhdGVyKGNtLCAibWFya2VyQWRkZWQiLCBjbSwgbWFya2VyKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1hcmtlcjsKLSAgfQotCi0gIC8vIFNIQVJFRCBURVhUTUFSS0VSUwot
Ci0gIC8vIEEgc2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJ
dCBpcwotICAvLyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGlu
ZyBtdWx0aXBsZSBub3JtYWwKLSAgLy8gbWFya2Vycy4KLSAgdmFyIFNoYXJlZFRleHRNYXJrZXIg
PSBDb2RlTWlycm9yLlNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5
KSB7Ci0gICAgdGhpcy5tYXJrZXJzID0gbWFya2VyczsKLSAgICB0aGlzLnByaW1hcnkgPSBwcmlt
YXJ5OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkKLSAgICAg
IG1hcmtlcnNbaV0ucGFyZW50ID0gdGhpczsKLSAgfTsKLSAgZXZlbnRNaXhpbihTaGFyZWRUZXh0
TWFya2VyKTsKLQotICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9u
KCkgewotICAgIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47Ci0gICAgdGhpcy5l
eHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1h
cmtlcnMubGVuZ3RoOyArK2kpCi0gICAgICB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsKLSAgICBz
aWduYWxMYXRlcih0aGlzLCAiY2xlYXIiKTsKLSAgfTsKLSAgU2hhcmVkVGV4dE1hcmtlci5wcm90
b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKLSAgICByZXR1cm4gdGhpcy5w
cmltYXJ5LmZpbmQoc2lkZSwgbGluZU9iaik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gbWFya1RleHRT
aGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgewotICAgIG9wdGlvbnMgPSBjb3B5
T2JqKG9wdGlvbnMpOwotICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7Ci0gICAgdmFyIG1hcmtl
cnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSldLCBwcmltYXJ5ID0g
bWFya2Vyc1swXTsKLSAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlOwotICAgIGxp
bmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHsKLSAgICAgIGlmICh3aWRnZXQpIG9wdGlvbnMu
d2lkZ2V0Tm9kZSA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICBtYXJrZXJzLnB1c2go
bWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlv
bnMsIHR5cGUpKTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7
ICsraSkKLSAgICAgICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJldHVybjsKLSAgICAg
IHByaW1hcnkgPSBsc3QobWFya2Vycyk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG5ldyBTaGFyZWRU
ZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpOwotICB9Ci0KLSAgZnVuY3Rpb24gZmluZFNoYXJl
ZE1hcmtlcnMoZG9jKSB7Ci0gICAgcmV0dXJuIGRvYy5maW5kTWFya3MoUG9zKGRvYy5maXJzdCwg
MCksIGRvYy5jbGlwUG9zKFBvcyhkb2MubGFzdExpbmUoKSkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKG0pIHsgcmV0dXJuIG0ucGFyZW50OyB9KTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2VycykgewotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNb
aV0sIHBvcyA9IG1hcmtlci5maW5kKCk7Ci0gICAgICB2YXIgbUZyb20gPSBkb2MuY2xpcFBvcyhw
b3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7Ci0gICAgICBpZiAoY21wKG1Gcm9t
LCBtVG8pKSB7Ci0gICAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9jLCBtRnJvbSwgbVRv
LCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7Ci0gICAgICAgIG1hcmtlci5t
YXJrZXJzLnB1c2goc3ViTWFyayk7Ci0gICAgICAgIHN1Yk1hcmsucGFyZW50ID0gbWFya2VyOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFy
a2VycykgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewot
ICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIGxpbmtlZCA9IFttYXJrZXIucHJpbWFyeS5k
b2NdOzsKLSAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBmdW5jdGlvbihkKSB7
IGxpbmtlZC5wdXNoKGQpOyB9KTsKLSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFya2VyLm1h
cmtlcnMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgdmFyIHN1Yk1hcmtlciA9IG1hcmtlci5tYXJr
ZXJzW2pdOwotICAgICAgICBpZiAoaW5kZXhPZihsaW5rZWQsIHN1Yk1hcmtlci5kb2MpID09IC0x
KSB7Ci0gICAgICAgICAgc3ViTWFya2VyLnBhcmVudCA9IG51bGw7Ci0gICAgICAgICAgbWFya2Vy
Lm1hcmtlcnMuc3BsaWNlKGotLSwgMSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICAvLyBURVhUTUFSS0VSIFNQQU5TCi0KLSAgZnVuY3Rpb24gTWFya2VkU3BhbihtYXJrZXIs
IGZyb20sIHRvKSB7Ci0gICAgdGhpcy5tYXJrZXIgPSBtYXJrZXI7Ci0gICAgdGhpcy5mcm9tID0g
ZnJvbTsgdGhpcy50byA9IHRvOwotICB9Ci0KLSAgLy8gU2VhcmNoIGFuIGFycmF5IG9mIHNwYW5z
IGZvciBhIHNwYW4gbWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci4KLSAgZnVuY3Rpb24gZ2V0TWFy
a2VkU3BhbkZvcihzcGFucywgbWFya2VyKSB7Ci0gICAgaWYgKHNwYW5zKSBmb3IgKHZhciBpID0g
MDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwot
ICAgICAgaWYgKHNwYW4ubWFya2VyID09IG1hcmtlcikgcmV0dXJuIHNwYW47Ci0gICAgfQotICB9
Ci0gIC8vIFJlbW92ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBp
ZiBubyBzcGFucyBhcmUKLSAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5l
cyB3aXRob3V0IHNwYW5zKS4KLSAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3Bh
bikgewotICAgIGZvciAodmFyIHIsIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAg
ICBpZiAoc3BhbnNbaV0gIT0gc3BhbikgKHIgfHwgKHIgPSBbXSkpLnB1c2goc3BhbnNbaV0pOwot
ICAgIHJldHVybiByOwotICB9Ci0gIC8vIEFkZCBhIHNwYW4gdG8gYSBsaW5lLgotICBmdW5jdGlv
biBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0gbGlu
ZS5tYXJrZWRTcGFucyA/IGxpbmUubWFya2VkU3BhbnMuY29uY2F0KFtzcGFuXSkgOiBbc3Bhbl07
Ci0gICAgc3Bhbi5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgfQotCi0gIC8vIFVzZWQgZm9y
IHRoZSBhbGdvcml0aG0gdGhhdCBhZGp1c3RzIG1hcmtlcnMgZm9yIGEgY2hhbmdlIGluIHRoZQot
ICAvLyBkb2N1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBvZiBzcGFucyBhdCBh
IGdpdmVuCi0gIC8vIGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJl
bWFpbmluZyBjaHVua3MgKG9yCi0gIC8vIHVuZGVmaW5lZCBpZiBub3RoaW5nIHJlbWFpbnMpLgot
ICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlzSW5zZXJ0KSB7Ci0g
ICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7Ci0gICAgICB2YXIg
c3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0
ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTsKLSAgICAgIGlm
IChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0g
ImJvb2ttYXJrIiAmJiAoIWlzSW5zZXJ0IHx8ICFzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewot
ICAgICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVz
aXZlUmlnaHQgPyBzcGFuLnRvID49IHN0YXJ0Q2ggOiBzcGFuLnRvID4gc3RhcnRDaCk7Ci0gICAg
ICAgIChudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzcGFuLmZy
b20sIGVuZHNBZnRlciA/IG51bGwgOiBzcGFuLnRvKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBudzsKLSAgfQotICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlz
SW5zZXJ0KSB7Ci0gICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0
aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7
Ci0gICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVz
aXZlUmlnaHQgPyBzcGFuLnRvID49IGVuZENoIDogc3Bhbi50byA+IGVuZENoKTsKLSAgICAgIGlm
IChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50eXBlID09ICJib29r
bWFyayIgJiYgKCFpc0luc2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewotICAgICAg
ICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNp
dmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5kQ2gpOwotICAgICAg
ICAobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtlciwgc3RhcnRzQmVm
b3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwgOiBzcGFuLnRvIC0g
ZW5kQ2gpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgLy8gR2l2
ZW4gYSBjaGFuZ2Ugb2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1hcmtlciBzcGFucyB0
aGF0Ci0gIC8vIGNvdmVyIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBjaGFuZ2UgdG9vayBwbGFjZS4g
UmVtb3ZlcyBzcGFucwotICAvLyBlbnRpcmVseSB3aXRoaW4gdGhlIGNoYW5nZSwgcmVjb25uZWN0
cyBzcGFucyBiZWxvbmdpbmcgdG8gdGhlCi0gIC8vIHNhbWUgbWFya2VyIHRoYXQgYXBwZWFyIG9u
IGJvdGggc2lkZXMgb2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmCi0gIC8vIHNwYW5zIHBhcnRp
YWxseSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBzcGFuCi0gIC8vIGFy
cmF5cyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFmdGVyKSB0aGUgY2hhbmdl
LgotICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7Ci0gICAg
dmFyIG9sZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShk
b2MsIGNoYW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zOwotICAgIHZhciBvbGRMYXN0ID0gaXNM
aW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSku
bWFya2VkU3BhbnM7Ci0gICAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkgcmV0dXJuIG51bGw7
Ci0KLSAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9IGNoYW5nZS50by5j
aCwgaXNJbnNlcnQgPSBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMDsKLSAgICAvLyBH
ZXQgdGhlIHNwYW5zIHRoYXQgJ3N0aWNrIG91dCcgb24gYm90aCBzaWRlcwotICAgIHZhciBmaXJz
dCA9IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7Ci0gICAg
dmFyIGxhc3QgPSBtYXJrZWRTcGFuc0FmdGVyKG9sZExhc3QsIGVuZENoLCBpc0luc2VydCk7Ci0K
LSAgICAvLyBOZXh0LCBtZXJnZSB0aG9zZSB0d28gZW5kcwotICAgIHZhciBzYW1lTGluZSA9IGNo
YW5nZS50ZXh0Lmxlbmd0aCA9PSAxLCBvZmZzZXQgPSBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCAr
IChzYW1lTGluZSA/IHN0YXJ0Q2ggOiAwKTsKLSAgICBpZiAoZmlyc3QpIHsKLSAgICAgIC8vIEZp
eCB1cCAudG8gcHJvcGVydGllcyBvZiBmaXJzdAotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
aXJzdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3BhbiA9IGZpcnN0W2ldOwotICAgICAg
ICBpZiAoc3Bhbi50byA9PSBudWxsKSB7Ci0gICAgICAgICAgdmFyIGZvdW5kID0gZ2V0TWFya2Vk
U3BhbkZvcihsYXN0LCBzcGFuLm1hcmtlcik7Ci0gICAgICAgICAgaWYgKCFmb3VuZCkgc3Bhbi50
byA9IHN0YXJ0Q2g7Ci0gICAgICAgICAgZWxzZSBpZiAoc2FtZUxpbmUpIHNwYW4udG8gPSBmb3Vu
ZC50byA9PSBudWxsID8gbnVsbCA6IGZvdW5kLnRvICsgb2Zmc2V0OwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIGlmIChsYXN0KSB7Ci0gICAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFz
dCAob3IgbW92ZSB0aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSkKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGFzdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3BhbiA9
IGxhc3RbaV07Ci0gICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHNwYW4udG8gKz0gb2Zmc2V0
OwotICAgICAgICBpZiAoc3Bhbi5mcm9tID09IG51bGwpIHsKLSAgICAgICAgICB2YXIgZm91bmQg
PSBnZXRNYXJrZWRTcGFuRm9yKGZpcnN0LCBzcGFuLm1hcmtlcik7Ci0gICAgICAgICAgaWYgKCFm
b3VuZCkgewotICAgICAgICAgICAgc3Bhbi5mcm9tID0gb2Zmc2V0OwotICAgICAgICAgICAgaWYg
KHNhbWVMaW5lKSAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4pOwotICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzcGFuLmZyb20gKz0gb2Zmc2V0OwotICAg
ICAgICAgIGlmIChzYW1lTGluZSkgKGZpcnN0IHx8IChmaXJzdCA9IFtdKSkucHVzaChzcGFuKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNy
ZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnMKLSAgICBpZiAoZmlyc3QpIGZpcnN0ID0gY2xlYXJF
bXB0eVNwYW5zKGZpcnN0KTsKLSAgICBpZiAobGFzdCAmJiBsYXN0ICE9IGZpcnN0KSBsYXN0ID0g
Y2xlYXJFbXB0eVNwYW5zKGxhc3QpOwotCi0gICAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdOwot
ICAgIGlmICghc2FtZUxpbmUpIHsKLSAgICAgIC8vIEZpbGwgZ2FwIHdpdGggd2hvbGUtbGluZS1z
cGFucwotICAgICAgdmFyIGdhcCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDIsIGdhcE1hcmtlcnM7
Ci0gICAgICBpZiAoZ2FwID4gMCAmJiBmaXJzdCkKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmaXJzdC5sZW5ndGg7ICsraSkKLSAgICAgICAgICBpZiAoZmlyc3RbaV0udG8gPT0gbnVsbCkK
LSAgICAgICAgICAgIChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKG5ldyBN
YXJrZWRTcGFuKGZpcnN0W2ldLm1hcmtlciwgbnVsbCwgbnVsbCkpOwotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBnYXA7ICsraSkKLSAgICAgICAgbmV3TWFya2Vycy5wdXNoKGdhcE1hcmtlcnMp
OwotICAgICAgbmV3TWFya2Vycy5wdXNoKGxhc3QpOwotICAgIH0KLSAgICByZXR1cm4gbmV3TWFy
a2VyczsKLSAgfQotCi0gIC8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3Qg
aGF2ZSBhIGNsZWFyV2hlbkVtcHR5Ci0gIC8vIG9wdGlvbiBvZiBmYWxzZS4KLSAgZnVuY3Rpb24g
Y2xlYXJFbXB0eVNwYW5zKHNwYW5zKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5s
ZW5ndGg7ICsraSkgewotICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKLSAgICAgIGlmIChzcGFu
LmZyb20gIT0gbnVsbCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVh
cldoZW5FbXB0eSAhPT0gZmFsc2UpCi0gICAgICAgIHNwYW5zLnNwbGljZShpLS0sIDEpOwotICAg
IH0KLSAgICBpZiAoIXNwYW5zLmxlbmd0aCkgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHNwYW5z
OwotICB9Ci0KLSAgLy8gVXNlZCBmb3IgdW4vcmUtZG9pbmcgY2hhbmdlcyBmcm9tIHRoZSBoaXN0
b3J5LiBDb21iaW5lcyB0aGUKLSAgLy8gcmVzdWx0IG9mIGNvbXB1dGluZyB0aGUgZXhpc3Rpbmcg
c3BhbnMgd2l0aCB0aGUgc2V0IG9mIHNwYW5zIHRoYXQKLSAgLy8gZXhpc3RlZCBpbiB0aGUgaGlz
dG9yeSAoc28gdGhhdCBkZWxldGluZyBhcm91bmQgYSBzcGFuIGFuZCB0aGVuCi0gIC8vIHVuZG9p
bmcgYnJpbmdzIGJhY2sgdGhlIHNwYW4pLgotICBmdW5jdGlvbiBtZXJnZU9sZFNwYW5zKGRvYywg
Y2hhbmdlKSB7Ci0gICAgdmFyIG9sZCA9IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKTsKLSAgICB2
YXIgc3RyZXRjaGVkID0gc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSk7Ci0gICAg
aWYgKCFvbGQpIHJldHVybiBzdHJldGNoZWQ7Ci0gICAgaWYgKCFzdHJldGNoZWQpIHJldHVybiBv
bGQ7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewotICAgICAg
dmFyIG9sZEN1ciA9IG9sZFtpXSwgc3RyZXRjaEN1ciA9IHN0cmV0Y2hlZFtpXTsKLSAgICAgIGlm
IChvbGRDdXIgJiYgc3RyZXRjaEN1cikgewotICAgICAgICBzcGFuczogZm9yICh2YXIgaiA9IDA7
IGogPCBzdHJldGNoQ3VyLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgdmFyIHNwYW4gPSBzdHJl
dGNoQ3VyW2pdOwotICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb2xkQ3VyLmxlbmd0aDsg
KytrKQotICAgICAgICAgICAgaWYgKG9sZEN1cltrXS5tYXJrZXIgPT0gc3Bhbi5tYXJrZXIpIGNv
bnRpbnVlIHNwYW5zOwotICAgICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pOwotICAgICAgICB9Ci0g
ICAgICB9IGVsc2UgaWYgKHN0cmV0Y2hDdXIpIHsKLSAgICAgICAgb2xkW2ldID0gc3RyZXRjaEN1
cjsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9sZDsKLSAgfQotCi0gIC8vIFVzZWQgdG8g
J2NsaXAnIG91dCByZWFkT25seSByYW5nZXMgd2hlbiBtYWtpbmcgYSBjaGFuZ2UuCi0gIGZ1bmN0
aW9uIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgZnJvbSwgdG8pIHsKLSAgICB2YXIgbWFya2Vy
cyA9IG51bGw7Ci0gICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24o
bGluZSkgewotICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwg
bGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgbWFyayA9IGxpbmUu
bWFya2VkU3BhbnNbaV0ubWFya2VyOwotICAgICAgICBpZiAobWFyay5yZWFkT25seSAmJiAoIW1h
cmtlcnMgfHwgaW5kZXhPZihtYXJrZXJzLCBtYXJrKSA9PSAtMSkpCi0gICAgICAgICAgKG1hcmtl
cnMgfHwgKG1hcmtlcnMgPSBbXSkpLnB1c2gobWFyayk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAg
aWYgKCFtYXJrZXJzKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgcGFydHMgPSBbe2Zyb206IGZyb20s
IHRvOiB0b31dOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkg
ewotICAgICAgdmFyIG1rID0gbWFya2Vyc1tpXSwgbSA9IG1rLmZpbmQoMCk7Ci0gICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgIHZhciBwID0gcGFy
dHNbal07Ci0gICAgICAgIGlmIChjbXAocC50bywgbS5mcm9tKSA8IDAgfHwgY21wKHAuZnJvbSwg
bS50bykgPiAwKSBjb250aW51ZTsKLSAgICAgICAgdmFyIG5ld1BhcnRzID0gW2osIDFdLCBkZnJv
bSA9IGNtcChwLmZyb20sIG0uZnJvbSksIGR0byA9IGNtcChwLnRvLCBtLnRvKTsKLSAgICAgICAg
aWYgKGRmcm9tIDwgMCB8fCAhbWsuaW5jbHVzaXZlTGVmdCAmJiAhZGZyb20pCi0gICAgICAgICAg
bmV3UGFydHMucHVzaCh7ZnJvbTogcC5mcm9tLCB0bzogbS5mcm9tfSk7Ci0gICAgICAgIGlmIChk
dG8gPiAwIHx8ICFtay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKQotICAgICAgICAgIG5ld1BhcnRz
LnB1c2goe2Zyb206IG0udG8sIHRvOiBwLnRvfSk7Ci0gICAgICAgIHBhcnRzLnNwbGljZS5hcHBs
eShwYXJ0cywgbmV3UGFydHMpOwotICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0aCAtIDE7Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIC8vIENvbm5lY3Qgb3Ig
ZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS4KLSAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3Bh
bnMobGluZSkgewotICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgaWYgKCFz
cGFucykgcmV0dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kp
Ci0gICAgICBzcGFuc1tpXS5tYXJrZXIuZGV0YWNoTGluZShsaW5lKTsKLSAgICBsaW5lLm1hcmtl
ZFNwYW5zID0gbnVsbDsKLSAgfQotICBmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBz
cGFucykgewotICAgIGlmICghc3BhbnMpIHJldHVybjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNwYW5zLmxlbmd0aDsgKytpKQotICAgICAgc3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGlu
ZSk7Ci0gICAgbGluZS5tYXJrZWRTcGFucyA9IHNwYW5zOwotICB9Ci0KLSAgLy8gSGVscGVycyB1
c2VkIHdoZW4gY29tcHV0aW5nIHdoaWNoIG92ZXJsYXBwaW5nIGNvbGxhcHNlZCBzcGFuCi0gIC8v
IGNvdW50cyBhcyB0aGUgbGFyZ2VyIG9uZS4KLSAgZnVuY3Rpb24gZXh0cmFMZWZ0KG1hcmtlcikg
eyByZXR1cm4gbWFya2VyLmluY2x1c2l2ZUxlZnQgPyAtMSA6IDA7IH0KLSAgZnVuY3Rpb24gZXh0
cmFSaWdodChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IDEgOiAwOyB9
Ci0KLSAgLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFw
cGluZyBjb2xsYXBzZWQKLSAgLy8gc3BhbnMgaXMgbGFyZ2VyIChhbmQgdGh1cyBpbmNsdWRlcyB0
aGUgb3RoZXIpLiBGYWxscyBiYWNrIHRvCi0gIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3Bh
bnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS4KLSAgZnVuY3Rpb24gY29tcGFyZUNvbGxh
cHNlZE1hcmtlcnMoYSwgYikgewotICAgIHZhciBsZW5EaWZmID0gYS5saW5lcy5sZW5ndGggLSBi
LmxpbmVzLmxlbmd0aDsKLSAgICBpZiAobGVuRGlmZiAhPSAwKSByZXR1cm4gbGVuRGlmZjsKLSAg
ICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7Ci0gICAgdmFyIGZyb21DbXAg
PSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVmdChhKSAtIGV4dHJhTGVmdChi
KTsKLSAgICBpZiAoZnJvbUNtcCkgcmV0dXJuIC1mcm9tQ21wOwotICAgIHZhciB0b0NtcCA9IGNt
cChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTsKLSAg
ICBpZiAodG9DbXApIHJldHVybiB0b0NtcDsKLSAgICByZXR1cm4gYi5pZCAtIGEuaWQ7Ci0gIH0K
LQotICAvLyBGaW5kIG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9yIHN0YXJ0cyBpbiBhIGNvbGxh
cHNlZCBzcGFuLiBJZgotICAvLyBzbywgcmV0dXJuIHRoZSBtYXJrZXIgZm9yIHRoYXQgc3Bhbi4K
LSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCBzdGFydCkgewotICAgIHZhciBz
cHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDsKLSAgICBp
ZiAoc3BzKSBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHsKLSAgICAg
IHNwID0gc3BzW2ldOwotICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8g
c3AuZnJvbSA6IHNwLnRvKSA9PSBudWxsICYmCi0gICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJl
Q29sbGFwc2VkTWFya2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKQotICAgICAgICBmb3VuZCA9
IHNwLm1hcmtlcjsKLSAgICB9Ci0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0gIGZ1bmN0aW9uIGNv
bGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGlu
ZSwgdHJ1ZSk7IH0KLSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJu
IGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgZmFsc2UpOyB9Ci0KLSAgLy8gVGVzdCB3aGV0aGVy
IHRoZXJlIGV4aXN0cyBhIGNvbGxhcHNlZCBzcGFuIHRoYXQgcGFydGlhbGx5Ci0gIC8vIG92ZXJs
YXBzIChjb3ZlcnMgdGhlIHN0YXJ0IG9yIGVuZCwgYnV0IG5vdCBib3RoKSBvZiBhIG5ldyBzcGFu
LgotICAvLyBTdWNoIG92ZXJsYXAgaXMgbm90IGFsbG93ZWQuCi0gIGZ1bmN0aW9uIGNvbmZsaWN0
aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBsaW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHsKLSAgICB2
YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTm8pOwotICAgIHZhciBzcHMgPSBzYXdDb2xsYXBz
ZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwotICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAw
OyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3AgPSBzcHNbaV07Ci0gICAgICBp
ZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVlOwotICAgICAgdmFyIGZvdW5kID0gc3Au
bWFya2VyLmZpbmQoMCk7Ci0gICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9t
KSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpOwotICAgICAgdmFy
IHRvQ21wID0gY21wKGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0
cmFSaWdodChtYXJrZXIpOwotICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8
IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSBjb250aW51ZTsKLSAgICAgIGlmIChmcm9tQ21w
IDw9IDAgJiYgKGNtcChmb3VuZC50bywgZnJvbSkgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0g
ZXh0cmFMZWZ0KG1hcmtlcikpID4gMCB8fAotICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21w
KGZvdW5kLmZyb20sIHRvKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFy
a2VyKSkgPCAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBBIHZp
c3VhbCBsaW5lIGlzIGEgbGluZSBhcyBkcmF3biBvbiB0aGUgc2NyZWVuLiBGb2xkaW5nLCBmb3IK
LSAgLy8gZXhhbXBsZSwgY2FuIGNhdXNlIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgdG8gYXBwZWFy
IG9uIHRoZSBzYW1lCi0gIC8vIHZpc3VhbCBsaW5lLiBUaGlzIGZpbmRzIHRoZSBzdGFydCBvZiB0
aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGUKLSAgLy8gZ2l2ZW4gbGluZSBpcyBwYXJ0IG9mICh1c3Vh
bGx5IHRoYXQgaXMgdGhlIGxpbmUgaXRzZWxmKS4KLSAgZnVuY3Rpb24gdmlzdWFsTGluZShsaW5l
KSB7Ci0gICAgdmFyIG1lcmdlZDsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0
U3RhcnQobGluZSkpCi0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoLTEsIHRydWUpLmxpbmU7Ci0g
ICAgcmV0dXJuIGxpbmU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxvZ2ljYWwg
bGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmUKLSAgLy8gc3RhcnRlZCBieSB0aGUg
YXJndW1lbnQsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy4KLSAgZnVu
Y3Rpb24gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZXM7
Ci0gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgewotICAgICAg
bGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7Ci0gICAgICAobGluZXMgfHwgKGxpbmVz
ID0gW10pKS5wdXNoKGxpbmUpOwotICAgIH0KLSAgICByZXR1cm4gbGluZXM7Ci0gIH0KLQotICAv
LyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhh
dCB0aGUKLSAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi4KLSAgZnVuY3Rpb24gdmlz
dWFsTGluZU5vKGRvYywgbGluZU4pIHsKLSAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5l
TiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7Ci0gICAgaWYgKGxpbmUgPT0gdmlzKSByZXR1cm4g
bGluZU47Ci0gICAgcmV0dXJuIGxpbmVObyh2aXMpOwotICB9Ci0gIC8vIEdldCB0aGUgbGluZSBu
dW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyCi0gIC8vIHRo
ZSBnaXZlbiBsaW5lLgotICBmdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5lTikgewot
ICAgIGlmIChsaW5lTiA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm4gbGluZU47Ci0gICAgdmFyIGxp
bmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCBtZXJnZWQ7Ci0gICAgaWYgKCFsaW5lSXNIaWRkZW4o
ZG9jLCBsaW5lKSkgcmV0dXJuIGxpbmVOOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRT
cGFuQXRFbmQobGluZSkpCi0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsK
LSAgICByZXR1cm4gbGluZU5vKGxpbmUpICsgMTsKLSAgfQotCi0gIC8vIENvbXB1dGUgd2hldGhl
ciBhIGxpbmUgaXMgaGlkZGVuLiBMaW5lcyBjb3VudCBhcyBoaWRkZW4gd2hlbiB0aGV5Ci0gIC8v
IGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxpbmUs
IG9yIHdoZW4KLSAgLy8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJlZCBieSBjb2xsYXBzZWQsIG5v
bi13aWRnZXQgc3Bhbi4KLSAgZnVuY3Rpb24gbGluZUlzSGlkZGVuKGRvYywgbGluZSkgewotICAg
IHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwotICAgIGlm
IChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewotICAgICAg
c3AgPSBzcHNbaV07Ci0gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVlOwot
ICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoc3AubWFy
a2VyLndpZGdldE5vZGUpIGNvbnRpbnVlOwotICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5t
YXJrZXIuaW5jbHVzaXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGxpbmVJc0hpZGRl
bklubmVyKGRvYywgbGluZSwgc3BhbikgewotICAgIGlmIChzcGFuLnRvID09IG51bGwpIHsKLSAg
ICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpOwotICAgICAgcmV0dXJuIGxp
bmVJc0hpZGRlbklubmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kLmxpbmUu
bWFya2VkU3BhbnMsIHNwYW4ubWFya2VyKSk7Ci0gICAgfQotICAgIGlmIChzcGFuLm1hcmtlci5p
bmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCi0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxl
bmd0aDsgKytpKSB7Ci0gICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAo
c3AubWFya2VyLmNvbGxhcHNlZCAmJiAhc3AubWFya2VyLndpZGdldE5vZGUgJiYgc3AuZnJvbSA9
PSBzcGFuLnRvICYmCi0gICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgc3AudG8gIT0gc3Bhbi5m
cm9tKSAmJgotICAgICAgICAgIChzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtl
ci5pbmNsdXNpdmVSaWdodCkgJiYKLSAgICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxp
bmUsIHNwKSkgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLy8gTElORSBXSURHRVRTCi0K
LSAgLy8gTGluZSB3aWRnZXRzIGFyZSBibG9jayBlbGVtZW50cyBkaXNwbGF5ZWQgYWJvdmUgb3Ig
YmVsb3cgYSBsaW5lLgotCi0gIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0
ID0gZnVuY3Rpb24oY20sIG5vZGUsIG9wdGlvbnMpIHsKLSAgICBpZiAob3B0aW9ucykgZm9yICh2
YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCi0gICAg
ICB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07Ci0gICAgdGhpcy5jbSA9IGNtOwotICAgIHRoaXMu
bm9kZSA9IG5vZGU7Ci0gIH07Ci0gIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7Ci0KLSAgZnVuY3Rp
b24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikgewotICAgIGlm
IChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCkg
fHwgY20uZG9jLnNjcm9sbFRvcCkpCi0gICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgZGlm
Zik7Ci0gIH0KLQotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciBjbSA9IHRoaXMuY20sIHdzID0gdGhpcy5saW5lLndpZGdldHMsIGxpbmUgPSB0aGlz
LmxpbmUsIG5vID0gbGluZU5vKGxpbmUpOwotICAgIGlmIChubyA9PSBudWxsIHx8ICF3cykgcmV0
dXJuOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9
PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKLSAgICBpZiAoIXdzLmxlbmd0aCkgbGluZS53aWRn
ZXRzID0gbnVsbDsKLSAgICB2YXIgaGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0KHRoaXMpOwotICAgIHJ1
bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJs
ZShjbSwgbGluZSwgLWhlaWdodCk7Ci0gICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdl
dCIpOwotICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdo
dCAtIGhlaWdodCkpOwotICAgIH0pOwotICB9OwotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFu
Z2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9sZEggPSB0aGlzLmhlaWdodCwgY20gPSB0aGlz
LmNtLCBsaW5lID0gdGhpcy5saW5lOwotICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKLSAgICB2YXIg
ZGlmZiA9IHdpZGdldEhlaWdodCh0aGlzKSAtIG9sZEg7Ci0gICAgaWYgKCFkaWZmKSByZXR1cm47
Ci0gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0
ZSA9IHRydWU7Ci0gICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBk
aWZmKTsKLSAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsK
LSAgICB9KTsKLSAgfTsKLQotICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7Ci0gICAg
aWYgKHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7Ci0gICAgaWYg
KCFjb250YWlucyhkb2N1bWVudC5ib2R5LCB3aWRnZXQubm9kZSkpCi0gICAgICByZW1vdmVDaGls
ZHJlbkFuZEFkZCh3aWRnZXQuY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoImRpdiIsIFt3aWRnZXQu
bm9kZV0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKSk7Ci0gICAgcmV0dXJuIHdpZGdldC5o
ZWlnaHQgPSB3aWRnZXQubm9kZS5vZmZzZXRIZWlnaHQ7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRM
aW5lV2lkZ2V0KGNtLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICB2YXIgd2lkZ2V0ID0g
bmV3IExpbmVXaWRnZXQoY20sIG5vZGUsIG9wdGlvbnMpOwotICAgIGlmICh3aWRnZXQubm9IU2Ny
b2xsKSBjbS5kaXNwbGF5LmFsaWduV2lkZ2V0cyA9IHRydWU7Ci0gICAgY2hhbmdlTGluZShjbSwg
aGFuZGxlLCAid2lkZ2V0IiwgZnVuY3Rpb24obGluZSkgewotICAgICAgdmFyIHdpZGdldHMgPSBs
aW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTsKLSAgICAgIGlmICh3aWRnZXQuaW5z
ZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0cy5wdXNoKHdpZGdldCk7Ci0gICAgICBlbHNlIHdpZGdldHMu
c3BsaWNlKE1hdGgubWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmlu
c2VydEF0KSksIDAsIHdpZGdldCk7Ci0gICAgICB3aWRnZXQubGluZSA9IGxpbmU7Ci0gICAgICBp
ZiAoIWxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2li
bGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBjbS5kb2Muc2Nyb2xsVG9wOwotICAgICAgICB1cGRh
dGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpOwot
ICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgd2lkZ2V0
LmhlaWdodCk7Ci0gICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotICAgIHJldHVybiB3aWRnZXQ7Ci0gIH0KLQot
ICAvLyBMSU5FIERBVEEgU1RSVUNUVVJFCi0KLSAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xk
IHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKLSAgLy8gaGlnaGxpZ2h0aW5nIGlu
Zm8gKHRoZSBzdHlsZXMgYXJyYXkpLgotICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1
bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAgIHRoaXMudGV4
dCA9IHRleHQ7Ci0gICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpOwotICAg
IHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7
Ci0gIH07Ci0gIGV2ZW50TWl4aW4oTGluZSk7Ci0gIExpbmUucHJvdG90eXBlLmxpbmVObyA9IGZ1
bmN0aW9uKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpOyB9OwotCi0gIC8vIENoYW5nZSB0aGUgY29u
dGVudCAodGV4dCwgbWFya2Vycykgb2YgYSBsaW5lLiBBdXRvbWF0aWNhbGx5Ci0gIC8vIGludmFs
aWRhdGVzIGNhY2hlZCBpbmZvcm1hdGlvbiBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhlCi0g
IC8vIGxpbmUncyBoZWlnaHQuCi0gIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFy
a2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7Ci0gICAgbGluZS50ZXh0ID0gdGV4dDsKLSAgICBp
ZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgIGlmIChsaW5l
LnN0eWxlcykgbGluZS5zdHlsZXMgPSBudWxsOwotICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwp
IGxpbmUub3JkZXIgPSBudWxsOwotICAgIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpOwotICAgIGF0
dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKTsKLSAgICB2YXIgZXN0SGVpZ2h0ID0g
ZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodChsaW5lKSA6IDE7Ci0gICAgaWYgKGVzdEhl
aWdodCAhPSBsaW5lLmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwot
ICB9Ci0KLSAgLy8gRGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMg
bWFya2Vycy4KLSAgZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkgewotICAgIGxpbmUucGFyZW50
ID0gbnVsbDsKLSAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBvdXRwdXQpIHsKLSAgICBpZiAodHlwZSkgZm9yICg7
OykgewotICAgICAgdmFyIGxpbmVDbGFzcyA9IHR5cGUubWF0Y2goLyg/Ol58XHMrKWxpbmUtKGJh
Y2tncm91bmQtKT8oXFMrKS8pOwotICAgICAgaWYgKCFsaW5lQ2xhc3MpIGJyZWFrOwotICAgICAg
dHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNs
YXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7Ci0gICAgICB2YXIgcHJvcCA9IGxpbmVD
bGFzc1sxXSA/ICJiZ0NsYXNzIiA6ICJ0ZXh0Q2xhc3MiOwotICAgICAgaWYgKG91dHB1dFtwcm9w
XSA9PSBudWxsKQotICAgICAgICBvdXRwdXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07Ci0gICAgICBl
bHNlIGlmICghKG5ldyBSZWdFeHAoIig/Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxz
KSIpKS50ZXN0KG91dHB1dFtwcm9wXSkpCi0gICAgICAgIG91dHB1dFtwcm9wXSArPSAiICIgKyBs
aW5lQ2xhc3NbMl07Ci0gICAgfQotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgZnVuY3Rpb24g
Y2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSkgewotICAgIGlmIChtb2RlLmJsYW5rTGluZSkgcmV0
dXJuIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKLSAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSByZXR1
cm47Ci0gICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpOwot
ICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGluZSkgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5l
KGlubmVyLnN0YXRlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0s
IHN0YXRlKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgICB2YXIg
c3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHN0cmVhbS5wb3Mg
PiBzdHJlYW0uc3RhcnQpIHJldHVybiBzdHlsZTsKLSAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9y
KCJNb2RlICIgKyBtb2RlLm5hbWUgKyAiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKTsKLSAg
fQotCi0gIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgY2FsbGlu
ZyBmIGZvciBlYWNoIHRva2VuLgotICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2RlLCBz
dGF0ZSwgZiwgbGluZUNsYXNzZXMsIGZvcmNlVG9FbmQpIHsKLSAgICB2YXIgZmxhdHRlblNwYW5z
ID0gbW9kZS5mbGF0dGVuU3BhbnM7Ci0gICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSBmbGF0
dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKLSAgICB2YXIgY3VyU3RhcnQgPSAw
LCBjdXJTdHlsZSA9IG51bGw7Ci0gICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4
dCwgY20ub3B0aW9ucy50YWJTaXplKSwgc3R5bGU7Ci0gICAgaWYgKHRleHQgPT0gIiIpIGV4dHJh
Y3RMaW5lQ2xhc3NlcyhjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSwgbGluZUNsYXNzZXMpOwot
ICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7Ci0gICAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9w
dGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKSB7Ci0gICAgICAgIGZsYXR0ZW5TcGFucyA9IGZhbHNl
OwotICAgICAgICBpZiAoZm9yY2VUb0VuZCkgcHJvY2Vzc0xpbmUoY20sIHRleHQsIHN0YXRlLCBz
dHJlYW0ucG9zKTsKLSAgICAgICAgc3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwotICAgICAgICBz
dHlsZSA9IG51bGw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5l
Q2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKLSAg
ICAgIH0KLSAgICAgIGlmIChjbS5vcHRpb25zLmFkZE1vZGVDbGFzcykgewotICAgICAgICB2YXIg
bU5hbWUgPSBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCBzdGF0ZSkubW9kZS5uYW1lOwotICAg
ICAgICBpZiAobU5hbWUpIHN0eWxlID0gIm0tIiArIChzdHlsZSA/IG1OYW1lICsgIiAiICsgc3R5
bGUgOiBtTmFtZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHls
ZSAhPSBzdHlsZSkgewotICAgICAgICBpZiAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIGYoc3Ry
ZWFtLnN0YXJ0LCBjdXJTdHlsZSk7Ci0gICAgICAgIGN1clN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyBj
dXJTdHlsZSA9IHN0eWxlOwotICAgICAgfQotICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBv
czsKLSAgICB9Ci0gICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnBvcykgewotICAgICAgLy8g
V2Via2l0IHNlZW1zIHRvIHJlZnVzZSB0byByZW5kZXIgdGV4dCBub2RlcyBsb25nZXIgdGhhbiA1
NzQ0NCBjaGFyYWN0ZXJzCi0gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3Vy
U3RhcnQgKyA1MDAwMCk7Ci0gICAgICBmKHBvcywgY3VyU3R5bGUpOwotICAgICAgY3VyU3RhcnQg
PSBwb3M7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChhbiBhcnJh
eSBzdGFydGluZyB3aXRoIGEgbW9kZSBnZW5lcmF0aW9uCi0gIC8vIC0tIGZvciBpbnZhbGlkYXRp
b24gLS0gZm9sbG93ZWQgYnkgcGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKLSAgLy8gc3R5bGUg
c3RyaW5ncyksIHdoaWNoIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSB0b2tlbnMgb24gdGhlCi0g
IC8vIGxpbmUuCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCBmb3Jj
ZVRvRW5kKSB7Ci0gICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVt
YmVyIGlkZW50aWZ5aW5nIHRoZQotICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNl
ZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS4KLSAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9k
ZUdlbl0sIGxpbmVDbGFzc2VzID0ge307Ci0gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBv
ZiBzdHlsZXMKLSAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBzdGF0ZSwg
ZnVuY3Rpb24oZW5kLCBzdHlsZSkgewotICAgICAgc3QucHVzaChlbmQsIHN0eWxlKTsKLSAgICB9
LCBsaW5lQ2xhc3NlcywgZm9yY2VUb0VuZCk7Ci0KLSAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVz
dCBzdHlsZSBhcnJheS4KLSAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlz
Lmxlbmd0aDsgKytvKSB7Ci0gICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29d
LCBpID0gMSwgYXQgPSAwOwotICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1v
ZGUsIHRydWUsIGZ1bmN0aW9uKGVuZCwgc3R5bGUpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gaTsK
LSAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1cnJlbnQgcG9z
aXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAgICAgIHdoaWxlIChhdCA8IGVuZCkg
ewotICAgICAgICAgIHZhciBpX2VuZCA9IHN0W2ldOwotICAgICAgICAgIGlmIChpX2VuZCA+IGVu
ZCkKLSAgICAgICAgICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0W2krMV0sIGlfZW5kKTsKLSAg
ICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm47Ci0gICAgICAgIGlmIChvdmVybGF5
Lm9wYXF1ZSkgewotICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsICJj
bS1vdmVybGF5ICIgKyBzdHlsZSk7Ci0gICAgICAgICAgaSA9IHN0YXJ0ICsgMjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7Ci0gICAg
ICAgICAgICB2YXIgY3VyID0gc3Rbc3RhcnQrMV07Ci0gICAgICAgICAgICBzdFtzdGFydCsxXSA9
IChjdXIgPyBjdXIgKyAiICIgOiAiIikgKyAiY20tb3ZlcmxheSAiICsgc3R5bGU7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9LCBsaW5lQ2xhc3Nlcyk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHtzdHlsZXM6IHN0LCBjbGFzc2VzOiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFz
c2VzLnRleHRDbGFzcyA/IGxpbmVDbGFzc2VzIDogbnVsbH07Ci0gIH0KLQotICBmdW5jdGlvbiBn
ZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSB7Ci0gICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0
eWxlc1swXSAhPSBjbS5zdGF0ZS5tb2RlR2VuKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gaGlnaGxp
Z2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxp
bmVObyhsaW5lKSkpOwotICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzOwotICAgICAg
aWYgKHJlc3VsdC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOwot
ICAgICAgZWxzZSBpZiAobGluZS5zdHlsZUNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVs
bDsKLSAgICB9Ci0gICAgcmV0dXJuIGxpbmUuc3R5bGVzOwotICB9Ci0KLSAgLy8gTGlnaHR3ZWln
aHQgZm9ybSBvZiBoaWdobGlnaHQgLS0gcHJvY2VlZCBvdmVyIHRoaXMgbGluZSBhbmQKLSAgLy8g
dXBkYXRlIHN0YXRlLCBidXQgZG9uJ3Qgc2F2ZSBhIHN0eWxlIGFycmF5LiBVc2VkIGZvciBsaW5l
cyB0aGF0Ci0gIC8vIGFyZW4ndCBjdXJyZW50bHkgdmlzaWJsZS4KLSAgZnVuY3Rpb24gcHJvY2Vz
c0xpbmUoY20sIHRleHQsIHN0YXRlLCBzdGFydEF0KSB7Ci0gICAgdmFyIG1vZGUgPSBjbS5kb2Mu
bW9kZTsKLSAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25z
LnRhYlNpemUpOwotICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFydEF0IHx8IDA7
Ci0gICAgaWYgKHRleHQgPT0gIiIpIGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpOwotICAgIHdo
aWxlICghc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wb3MgPD0gY20ub3B0aW9ucy5tYXhIaWdobGln
aHRMZW5ndGgpIHsKLSAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKTsKLSAgICAg
IHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBh
IHN0eWxlIGFzIHJldHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9yIGEgc3RyaW5nCi0g
IC8vIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0byBhIENTUyBzdHlsZS4gVGhpcyBp
cyBjYWNoZWQsCi0gIC8vIGFuZCBhbHNvIGxvb2tzIGZvciBsaW5lLXdpZGUgc3R5bGVzLgotICB2
YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA9IHt9
OwotICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBvcHRpb25zKSB7Ci0gICAg
aWYgKCFzdHlsZSB8fCAvXlxzKiQvLnRlc3Qoc3R5bGUpKSByZXR1cm4gbnVsbDsKLSAgICB2YXIg
Y2FjaGUgPSBvcHRpb25zLmFkZE1vZGVDbGFzcyA/IHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUg
OiBzdHlsZVRvQ2xhc3NDYWNoZTsKLSAgICByZXR1cm4gY2FjaGVbc3R5bGVdIHx8Ci0gICAgICAo
Y2FjaGVbc3R5bGVdID0gc3R5bGUucmVwbGFjZSgvXFMrL2csICJjbS0kJiIpKTsKLSAgfQotCi0g
IC8vIFJlbmRlciB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IG9mIGEgbGluZS4g
QWxzbyBidWlsZHMKLSAgLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2ludHMgYXQgdGhlIERP
TSBub2RlcyB0aGF0IHJlcHJlc2VudAotICAvLyBzcGVjaWZpYyBzdHJldGNoZXMgb2YgdGV4dCwg
YW5kIGlzIHVzZWQgYnkgdGhlIG1lYXN1cmluZyBjb2RlLgotICAvLyBUaGUgcmV0dXJuZWQgb2Jq
ZWN0IGNvbnRhaW5zIHRoZSBET00gbm9kZSwgdGhpcyBtYXAsIGFuZAotICAvLyBpbmZvcm1hdGlv
biBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIG1vZGUuCi0gIGZ1
bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7Ci0gICAgLy8gVGhlIHBhZGRp
bmctcmlnaHQgZm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSAnYm9yZGVyJywgd2hpY2gKLSAg
ICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUtbGV2ZWwgYm91
bmRpbmcKLSAgICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNoYXIpLgotICAgIHZh
ciBjb250ZW50ID0gZWx0KCJzcGFuIiwgbnVsbCwgbnVsbCwgd2Via2l0ID8gInBhZGRpbmctcmln
aHQ6IC4xcHgiIDogbnVsbCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIsIFtj
b250ZW50XSksIGNvbnRlbnQ6IGNvbnRlbnQsIGNvbDogMCwgcG9zOiAwLCBjbTogY219OwotICAg
IGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbG9naWNh
bCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGluZS4KLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3RoIDogMCk7IGkrKykg
ewotICAgICAgdmFyIGxpbmUgPSBpID8gbGluZVZpZXcucmVzdFtpIC0gMV0gOiBsaW5lVmlldy5s
aW5lLCBvcmRlcjsKLSAgICAgIGJ1aWxkZXIucG9zID0gMDsKLSAgICAgIGJ1aWxkZXIuYWRkVG9r
ZW4gPSBidWlsZFRva2VuOwotICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3Mg
aW50byB0aGUgdG9rZW4tcmVuZGVyaW5nCi0gICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0
aCBicm93c2VyIHF1aXJrcy4KLSAgICAgIGlmICgoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRp
b24oImxpbmVXcmFwcGluZyIpKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tl
blNwbGl0U3BhY2VzKGJ1aWxkZXIuYWRkVG9rZW4pOwotICAgICAgaWYgKGhhc0JhZEJpZGlSZWN0
cyhjbS5kaXNwbGF5Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUpKSkKLSAgICAg
ICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4s
IG9yZGVyKTsKLSAgICAgIGJ1aWxkZXIubWFwID0gW107Ci0gICAgICBpbnNlcnRMaW5lQ29udGVu
dChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSk7Ci0gICAgICBpZiAobGlu
ZS5zdHlsZUNsYXNzZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3Mp
Ci0gICAgICAgICAgYnVpbGRlci5iZ0NsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNz
ZXMuYmdDbGFzcywgYnVpbGRlci5iZ0NsYXNzIHx8ICIiKTsKLSAgICAgICAgaWYgKGxpbmUuc3R5
bGVDbGFzc2VzLnRleHRDbGFzcykKLSAgICAgICAgICBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5D
bGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcywgYnVpbGRlci50ZXh0Q2xhc3MgfHwg
IiIpOwotICAgICAgfQotCi0gICAgICAvLyBFbnN1cmUgYXQgbGVhc3QgYSBzaW5nbGUgbm9kZSBp
cyBwcmVzZW50LCBmb3IgbWVhc3VyaW5nLgotICAgICAgaWYgKGJ1aWxkZXIubWFwLmxlbmd0aCA9
PSAwKQotICAgICAgICBidWlsZGVyLm1hcC5wdXNoKDAsIDAsIGJ1aWxkZXIuY29udGVudC5hcHBl
bmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpKTsKLQotICAgICAg
Ly8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2lj
YWwgbGluZQotICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICBsaW5lVmlldy5tZWFzdXJlLm1h
cCA9IGJ1aWxkZXIubWFwOwotICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmll
dy5tZWFzdXJlLm1hcHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApOwotICAgICAgICAobGluZVZp
ZXcubWVhc3VyZS5jYWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNo
KHt9KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20s
IGxpbmVWaWV3LmxpbmUsIGJ1aWxkZXIucHJlKTsKLSAgICBpZiAoYnVpbGRlci5wcmUuY2xhc3NO
YW1lKQotICAgICAgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhidWlsZGVyLnByZS5j
bGFzc05hbWUsIGJ1aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKLSAgICByZXR1cm4gYnVpbGRlcjsK
LSAgfQotCi0gIGZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7Ci0g
ICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgIlx1MjAyMiIsICJjbS1pbnZhbGlkY2hhciIpOwot
ICAgIHRva2VuLnRpdGxlID0gIlxcdSIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsK
LSAgICByZXR1cm4gdG9rZW47Ci0gIH0KLQotICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJlc2Vu
dGF0aW9uIGZvciBhIHNpbmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0bwotICAvLyB0aGUgbGluZSBt
YXAuIFRha2VzIGNhcmUgdG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5Lgot
ICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBl
bmRTdHlsZSwgdGl0bGUpIHsKLSAgICBpZiAoIXRleHQpIHJldHVybjsKLSAgICB2YXIgc3BlY2lh
bCA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhcnMsIG11c3RXcmFwID0gZmFsc2U7Ci0g
ICAgaWYgKCFzcGVjaWFsLnRlc3QodGV4dCkpIHsKLSAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQu
bGVuZ3RoOwotICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0
KTsKLSAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4
dC5sZW5ndGgsIGNvbnRlbnQpOwotICAgICAgaWYgKGllX3VwdG84KSBtdXN0V3JhcCA9IHRydWU7
Ci0gICAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAg
dmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIHBvcyA9IDA7
Ci0gICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvczsK
LSAgICAgICAgdmFyIG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7Ci0gICAgICAgIHZhciBza2lwcGVk
ID0gbSA/IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvczsKLSAgICAgICAgaWYgKHNr
aXBwZWQpIHsKLSAgICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4
dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKTsKLSAgICAgICAgICBpZiAoaWVfdXB0bzgpIGNv
bnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKLSAgICAgICAgICBlbHNlIGNv
bnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKLSAgICAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxk
ZXIucG9zLCBidWlsZGVyLnBvcyArIHNraXBwZWQsIHR4dCk7Ci0gICAgICAgICAgYnVpbGRlci5j
b2wgKz0gc2tpcHBlZDsKLSAgICAgICAgICBidWlsZGVyLnBvcyArPSBza2lwcGVkOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghbSkgYnJlYWs7Ci0gICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsK
LSAgICAgICAgaWYgKG1bMF0gPT0gIlx0IikgewotICAgICAgICAgIHZhciB0YWJTaXplID0gYnVp
bGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29s
ICUgdGFiU2l6ZTsKLSAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQo
InNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7Ci0gICAgICAgICAgYnVpbGRl
ci5jb2wgKz0gdGFiV2lkdGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFyIHR4dCA9
IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pOwotICAgICAg
ICAgIGlmIChpZV91cHRvOCkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0XSkp
OwotICAgICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwotICAgICAgICAgIGJ1
aWxkZXIuY29sICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWls
ZGVyLnBvcywgYnVpbGRlci5wb3MgKyAxLCB0eHQpOwotICAgICAgICBidWlsZGVyLnBvcysrOwot
ICAgICAgfQotICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8
fCBtdXN0V3JhcCkgewotICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIiOwotICAgICAg
aWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOwotICAgICAgaWYgKGVuZFN0
eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7Ci0gICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4i
LCBbY29udGVudF0sIGZ1bGxTdHlsZSk7Ci0gICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0g
dGl0bGU7Ci0gICAgICByZXR1cm4gYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHRva2VuKTsK
LSAgICB9Ci0gICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOwotICB9Ci0K
LSAgZnVuY3Rpb24gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGlubmVyKSB7Ci0gICAgZnVuY3Rpb24g
c3BsaXQob2xkKSB7Ci0gICAgICB2YXIgb3V0ID0gIiAiOwotICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvbGQubGVuZ3RoIC0gMjsgKytpKSBvdXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsK
LSAgICAgIG91dCArPSAiICI7Ci0gICAgICByZXR1cm4gb3V0OwotICAgIH0KLSAgICByZXR1cm4g
ZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRs
ZSkgewotICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdCks
IHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpOwotICAgIH07Ci0gIH0KLQotICAv
LyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJl
dGNoZXMgb2YKLSAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0LgotICBmdW5jdGlvbiBidWlsZFRva2Vu
QmFkQmlkaShpbm5lciwgb3JkZXIpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4
dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSkgewotICAgICAgc3R5bGUgPSBz
dHlsZSA/IHN0eWxlICsgIiBjbS1mb3JjZS1ib3JkZXIiIDogImNtLWZvcmNlLWJvcmRlciI7Ci0g
ICAgICB2YXIgc3RhcnQgPSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDsK
LSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBz
IHdpdGggdGhlIHN0YXJ0IG9mIHRoaXMgdGV4dAotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG9yZGVyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKLSAg
ICAgICAgICBpZiAocGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIoYnVp
bGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Ci0gICAgICAg
IGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0
YXJ0U3R5bGUsIG51bGwsIHRpdGxlKTsKLSAgICAgICAgc3RhcnRTdHlsZSA9IG51bGw7Ci0gICAg
ICAgIHRleHQgPSB0ZXh0LnNsaWNlKHBhcnQudG8gLSBzdGFydCk7Ci0gICAgICAgIHN0YXJ0ID0g
cGFydC50bzsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRDb2xsYXBz
ZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7Ci0gICAgdmFyIHdp
ZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7Ci0gICAgaWYgKHdpZGdl
dCkgewotICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBz
aXplLCB3aWRnZXQpOwotICAgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHdpZGdldCk7
Ci0gICAgfQotICAgIGJ1aWxkZXIucG9zICs9IHNpemU7Ci0gIH0KLQotICAvLyBPdXRwdXRzIGEg
bnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nCi0g
IC8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291bnQuCi0gIGZ1bmN0aW9uIGluc2VydExpbmVD
b250ZW50KGxpbmUsIGJ1aWxkZXIsIHN0eWxlcykgewotICAgIHZhciBzcGFucyA9IGxpbmUubWFy
a2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKLSAgICBpZiAoIXNwYW5zKSB7
Ci0gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrPTIpCi0gICAgICAg
IGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNb
aV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKzFdLCBidWlsZGVyLmNtLm9wdGlvbnMp
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgs
IHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gIiIsIHN0eWxlOwotICAgIHZhciBuZXh0Q2hhbmdlID0g
MCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFw
c2VkOwotICAgIGZvciAoOzspIHsKLSAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBV
cGRhdGUgY3VycmVudCBtYXJrZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHls
ZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSAiIjsKLSAgICAgICAgY29sbGFwc2VkID0gbnVs
bDsgbmV4dENoYW5nZSA9IEluZmluaXR5OwotICAgICAgICB2YXIgZm91bmRCb29rbWFya3MgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewotICAg
ICAgICAgIHZhciBzcCA9IHNwYW5zW2pdLCBtID0gc3AubWFya2VyOwotICAgICAgICAgIGlmIChz
cC5mcm9tIDw9IHBvcyAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA+IHBvcykpIHsKLSAgICAg
ICAgICAgIGlmIChzcC50byAhPSBudWxsICYmIG5leHRDaGFuZ2UgPiBzcC50bykgeyBuZXh0Q2hh
bmdlID0gc3AudG87IHNwYW5FbmRTdHlsZSA9ICIiOyB9Ci0gICAgICAgICAgICBpZiAobS5jbGFz
c05hbWUpIHNwYW5TdHlsZSArPSAiICIgKyBtLmNsYXNzTmFtZTsKLSAgICAgICAgICAgIGlmICht
LnN0YXJ0U3R5bGUgJiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0u
c3RhcnRTdHlsZTsKLSAgICAgICAgICAgIGlmIChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRD
aGFuZ2UpIHNwYW5FbmRTdHlsZSArPSAiICIgKyBtLmVuZFN0eWxlOwotICAgICAgICAgICAgaWYg
KG0udGl0bGUgJiYgIXRpdGxlKSB0aXRsZSA9IG0udGl0bGU7Ci0gICAgICAgICAgICBpZiAobS5j
b2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFw
c2VkLm1hcmtlciwgbSkgPCAwKSkKLSAgICAgICAgICAgICAgY29sbGFwc2VkID0gc3A7Ci0gICAg
ICAgICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7
Ci0gICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ud2lkZ2V0
Tm9kZSkgZm91bmRCb29rbWFya3MucHVzaChtKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29s
bGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHsKLSAgICAgICAgICBidWls
ZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6
IGNvbGxhcHNlZC50bykgLSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxh
cHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpOwotICAgICAgICAgIGlmIChjb2xs
YXBzZWQudG8gPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY29sbGFw
c2VkICYmIGZvdW5kQm9va21hcmtzLmxlbmd0aCkgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZEJv
b2ttYXJrcy5sZW5ndGg7ICsraikKLSAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRl
ciwgMCwgZm91bmRCb29rbWFya3Nbal0pOwotICAgICAgfQotICAgICAgaWYgKHBvcyA+PSBsZW4p
IGJyZWFrOwotCi0gICAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENoYW5nZSk7Ci0g
ICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAodGV4dCkgewotICAgICAgICAgIHZhciBl
bmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAoIWNvbGxhcHNlZCkgewotICAg
ICAgICAgICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8g
LSBwb3MpIDogdGV4dDsKLSAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9r
ZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0
aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIsIHRpdGxlKTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2UodXB0byAtIHBv
cyk7IHBvcyA9IHVwdG87IGJyZWFrO30KLSAgICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgICAg
c3BhblN0YXJ0U3R5bGUgPSAiIjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0ID0gYWxsVGV4dC5z
bGljZShhdCwgYXQgPSBzdHlsZXNbaSsrXSk7Ci0gICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9r
ZW5TdHlsZShzdHlsZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25zKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRQotCi0gIC8vIEJ5IGRlZmF1bHQs
IHVwZGF0ZXMgdGhhdCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0g
IC8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRp
b24gb2YgbGluZQotICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4
dCBiZWhhdmUgbW9yZSBpbnR1aXRpdmUuCi0gIGZ1bmN0aW9uIGlzV2hvbGVMaW5lVXBkYXRlKGRv
YywgY2hhbmdlKSB7Ci0gICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRv
LmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSAiIiAmJgotICAgICAgKCFkb2MuY20gfHwg
ZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTsKLSAgfQotCi0gIC8vIFBlcmZv
cm0gYSBjaGFuZ2Ugb24gdGhlIGRvY3VtZW50IGRhdGEgc3RydWN0dXJlLgotICBmdW5jdGlvbiB1
cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAg
IGZ1bmN0aW9uIHNwYW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3BhbnMgPyBtYXJrZWRTcGFuc1tu
XSA6IG51bGw7fQotICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykgewotICAg
ICAgdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpOwotICAgICAg
c2lnbmFsTGF0ZXIobGluZSwgImNoYW5nZSIsIGxpbmUsIGNoYW5nZSk7Ci0gICAgfQotCi0gICAg
dmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4
dDsKLSAgICB2YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5l
ID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpOwotICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwg
bGFzdFNwYW5zID0gc3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAt
IGZyb20ubGluZTsKLQotICAgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAo
aXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpKSB7Ci0gICAgICAvLyBUaGlzIGlzIGEgd2hv
bGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCi0gICAgICAvLyBzdXJl
IGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCi0gICAgICBm
b3IgKHZhciBpID0gMCwgYWRkZWQgPSBbXTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQotICAg
ICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhl
aWdodCkpOwotICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMp
OwotICAgICAgaWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcyk7Ci0gICAg
ICBpZiAoYWRkZWQubGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwotICAgIH0g
ZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7Ci0gICAgICBpZiAodGV4dC5sZW5ndGgg
PT0gMSkgewotICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgw
LCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0
U3BhbnMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9
IDE7IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsraSkKLSAgICAgICAgICBhZGRlZC5wdXNoKG5ldyBM
aW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwotICAgICAgICBhZGRl
ZC5wdXNoKG5ldyBMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBs
YXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7Ci0gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZp
cnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwot
ICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKLSAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKHRleHQubGVuZ3RoID09IDEpIHsKLSAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZp
cnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQu
c2xpY2UodG8uY2gpLCBzcGFuc0ZvcigwKSk7Ci0gICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSAr
IDEsIG5saW5lcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0
TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwotICAg
ICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBsYXN0U3BhbnMpOwotICAgICAgZm9yICh2YXIgaSA9IDEsIGFkZGVkID0gW107IGkgPCB0ZXh0
Lmxlbmd0aCAtIDE7ICsraSkKLSAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBz
cGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKLSAgICAgIGlmIChubGluZXMgPiAxKSBkb2Mu
cmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOwotICAgICAgZG9jLmluc2VydChmcm9t
LmxpbmUgKyAxLCBhZGRlZCk7Ci0gICAgfQotCi0gICAgc2lnbmFsTGF0ZXIoZG9jLCAiY2hhbmdl
IiwgZG9jLCBjaGFuZ2UpOwotICB9Ci0KLSAgLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVk
IGFzIGEgQlRyZWUgY29uc2lzdGluZyBvZiBsZWF2ZXMsIHdpdGgKLSAgLy8gY2h1bmsgb2YgbGlu
ZXMgaW4gdGhlbSwgYW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3IKLSAgLy8g
b3RoZXIgYnJhbmNoIG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBi
cmFuY2gKLSAgLy8gbm9kZSwgYW5kIGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFu
aW5nIGl0IGhhcwotICAvLyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLgotICAv
LwotICAvLyBBbGwgbm9kZXMgaGF2ZSBwYXJlbnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90
aCB0byBnbyBmcm9tCi0gIC8vIGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBn
byBmcm9tIG9iamVjdHMgdG8gbnVtYmVycy4KLSAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdo
dCwgYW5kIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGhlaWdodAotICAvLyBhbmQgbGluZSBv
YmplY3QsIGFuZCB0byBmaW5kIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LgotICAv
LwotICAvLyBTZWUgYWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJv
ci1saW5lLXRyZWUuaHRtbAotCi0gIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykgewotICAgIHRo
aXMubGluZXMgPSBsaW5lczsKLSAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gICAgZm9yICh2YXIg
aSA9IDAsIGhlaWdodCA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgbGluZXNb
aV0ucGFyZW50ID0gdGhpczsKLSAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7Ci0gICAg
fQotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICB9Ci0KLSAgTGVhZkNodW5rLnByb3RvdHlw
ZSA9IHsKLSAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5n
dGg7IH0sCi0gICAgLy8gUmVtb3ZlIHRoZSBuIGxpbmVzIGF0IG9mZnNldCAnYXQnLgotICAgIHJl
bW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewotICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0g
YXQgKyBuOyBpIDwgZTsgKytpKSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsK
LSAgICAgICAgdGhpcy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7Ci0gICAgICAgIGNsZWFuVXBMaW5l
KGxpbmUpOwotICAgICAgICBzaWduYWxMYXRlcihsaW5lLCAiZGVsZXRlIik7Ci0gICAgICB9Ci0g
ICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7Ci0gICAgfSwKLSAgICAvLyBIZWxwZXIgdXNl
ZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuCi0gICAgY29s
bGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0gICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0
aGlzLmxpbmVzKTsKLSAgICB9LAotICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gYXJyYXkgb2YgbGlu
ZXMgYXQgb2Zmc2V0ICdhdCcsIGNvdW50IHRoZW0gYXMKLSAgICAvLyBoYXZpbmcgdGhlIGdpdmVu
IGhlaWdodC4KLSAgICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsK
LSAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDsKLSAgICAgIHRoaXMubGluZXMgPSB0aGlzLmxp
bmVzLnNsaWNlKDAsIGF0KS5jb25jYXQobGluZXMpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKGF0
KSk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSBsaW5lc1tp
XS5wYXJlbnQgPSB0aGlzOwotICAgIH0sCi0gICAgLy8gVXNlZCB0byBpdGVyYXRlIG92ZXIgYSBw
YXJ0IG9mIHRoZSB0cmVlLgotICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKLSAgICAg
IGZvciAodmFyIGUgPSBhdCArIG47IGF0IDwgZTsgKythdCkKLSAgICAgICAgaWYgKG9wKHRoaXMu
bGluZXNbYXRdKSkgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIEJyYW5j
aENodW5rKGNoaWxkcmVuKSB7Ci0gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwotICAgIHZh
ciBzaXplID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTsKLSAgICAgIHNpemUg
Kz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7Ci0gICAgICBjaC5wYXJlbnQg
PSB0aGlzOwotICAgIH0KLSAgICB0aGlzLnNpemUgPSBzaXplOwotICAgIHRoaXMuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIHRoaXMucGFyZW50ID0gbnVsbDsKLSAgfQotCi0gIEJyYW5jaENodW5rLnBy
b3RvdHlwZSA9IHsKLSAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zaXpl
OyB9LAotICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewotICAgICAgdGhpcy5zaXpl
IC09IG47Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5j
aHVua1NpemUoKTsKLSAgICAgICAgaWYgKGF0IDwgc3opIHsKLSAgICAgICAgICB2YXIgcm0gPSBN
YXRoLm1pbihuLCBzeiAtIGF0KSwgb2xkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0OwotICAgICAgICAg
IGNoaWxkLnJlbW92ZUlubmVyKGF0LCBybSk7Ci0gICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xk
SGVpZ2h0IC0gY2hpbGQuaGVpZ2h0OwotICAgICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzLmNo
aWxkcmVuLnNwbGljZShpLS0sIDEpOyBjaGlsZC5wYXJlbnQgPSBudWxsOyB9Ci0gICAgICAgICAg
aWYgKChuIC09IHJtKSA9PSAwKSBicmVhazsKLSAgICAgICAgICBhdCA9IDA7Ci0gICAgICAgIH0g
ZWxzZSBhdCAtPSBzejsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgc21hbGxl
ciB0aGFuIDI1IGxpbmVzLCBlbnN1cmUgdGhhdCBpdCBpcyBhCi0gICAgICAvLyBzaW5nbGUgbGVh
ZiBub2RlLgotICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSAmJgotICAgICAgICAgICh0aGlz
LmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgISh0aGlzLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgTGVh
ZkNodW5rKSkpIHsKLSAgICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIHRoaXMuY29sbGFw
c2UobGluZXMpOwotICAgICAgICB0aGlzLmNoaWxkcmVuID0gW25ldyBMZWFmQ2h1bmsobGluZXMp
XTsKLSAgICAgICAgdGhpcy5jaGlsZHJlblswXS5wYXJlbnQgPSB0aGlzOwotICAgICAgfQotICAg
IH0sCi0gICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFw
c2UobGluZXMpOwotICAgIH0sCi0gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywg
aGVpZ2h0KSB7Ci0gICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwotICAgICAgdGhpcy5o
ZWlnaHQgKz0gaGVpZ2h0OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6
ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChhdCA8PSBzeikgewotICAgICAgICAg
IGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTsKLSAgICAgICAgICBpZiAoY2hp
bGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKLSAgICAgICAgICAgIHdoaWxl
IChjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkgewotICAgICAgICAgICAgICB2YXIgc3BpbGxlZCA9
IGNoaWxkLmxpbmVzLnNwbGljZShjaGlsZC5saW5lcy5sZW5ndGggLSAyNSwgMjUpOwotICAgICAg
ICAgICAgICB2YXIgbmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7Ci0gICAgICAgICAg
ICAgIGNoaWxkLmhlaWdodCAtPSBuZXdsZWFmLmhlaWdodDsKLSAgICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbi5zcGxpY2UoaSArIDEsIDAsIG5ld2xlYWYpOwotICAgICAgICAgICAgICBuZXdsZWFm
LnBhcmVudCA9IHRoaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLm1heWJlU3Bp
bGwoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YXQgLT0gc3o7Ci0gICAgICB9Ci0gICAgfSwKLSAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24s
IGNoZWNrIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHNwbGl0LgotICAgIG1heWJlU3BpbGw6IGZ1bmN0
aW9uKCkgewotICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSByZXR1cm47Ci0g
ICAgICB2YXIgbWUgPSB0aGlzOwotICAgICAgZG8gewotICAgICAgICB2YXIgc3BpbGxlZCA9IG1l
LmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTsKLSAgICAgICAgdmFy
IHNpYmxpbmcgPSBuZXcgQnJhbmNoQ2h1bmsoc3BpbGxlZCk7Ci0gICAgICAgIGlmICghbWUucGFy
ZW50KSB7IC8vIEJlY29tZSB0aGUgcGFyZW50IG5vZGUKLSAgICAgICAgICB2YXIgY29weSA9IG5l
dyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7Ci0gICAgICAgICAgY29weS5wYXJlbnQgPSBtZTsK
LSAgICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTsKLSAgICAgICAgICBtZSA9
IGNvcHk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbWUuc2l6ZSAtPSBzaWJsaW5nLnNp
emU7Ci0gICAgICAgICAgbWUuaGVpZ2h0IC09IHNpYmxpbmcuaGVpZ2h0OwotICAgICAgICAgIHZh
ciBteUluZGV4ID0gaW5kZXhPZihtZS5wYXJlbnQuY2hpbGRyZW4sIG1lKTsKLSAgICAgICAgICBt
ZS5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKG15SW5kZXggKyAxLCAwLCBzaWJsaW5nKTsKLSAgICAg
ICAgfQotICAgICAgICBzaWJsaW5nLnBhcmVudCA9IG1lLnBhcmVudDsKLSAgICAgIH0gd2hpbGUg
KG1lLmNoaWxkcmVuLmxlbmd0aCA+IDEwKTsKLSAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7
Ci0gICAgfSwKLSAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7Ci0gICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKLSAgICAgICAg
aWYgKGF0IDwgc3opIHsKLSAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQp
OwotICAgICAgICAgIGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgYnJlYWs7Ci0gICAgICAgICAgYXQgPSAw
OwotICAgICAgICB9IGVsc2UgYXQgLT0gc3o7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIHZh
ciBuZXh0RG9jSWQgPSAwOwotICB2YXIgRG9jID0gQ29kZU1pcnJvci5Eb2MgPSBmdW5jdGlvbih0
ZXh0LCBtb2RlLCBmaXJzdExpbmUpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkg
cmV0dXJuIG5ldyBEb2ModGV4dCwgbW9kZSwgZmlyc3RMaW5lKTsKLSAgICBpZiAoZmlyc3RMaW5l
ID09IG51bGwpIGZpcnN0TGluZSA9IDA7Ci0KLSAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtu
ZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIiwgbnVsbCldKV0pOwotICAgIHRoaXMuZmlyc3QgPSBm
aXJzdExpbmU7Ci0gICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbExlZnQgPSAwOwotICAg
IHRoaXMuY2FudEVkaXQgPSBmYWxzZTsKLSAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IDE7Ci0g
ICAgdGhpcy5mcm9udGllciA9IGZpcnN0TGluZTsKLSAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RM
aW5lLCAwKTsKLSAgICB0aGlzLnNlbCA9IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7Ci0gICAgdGhp
cy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7Ci0gICAgdGhpcy5pZCA9ICsrbmV4dERvY0lk
OwotICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7Ci0KLSAgICBpZiAodHlwZW9mIHRleHQgPT0g
InN0cmluZyIpIHRleHQgPSBzcGxpdExpbmVzKHRleHQpOwotICAgIHVwZGF0ZURvYyh0aGlzLCB7
ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pOwotICAgIHNldFNlbGVjdGlvbih0
aGlzLCBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7Ci0gIH07Ci0KLSAg
RG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHsKLSAgICBj
b25zdHJ1Y3RvcjogRG9jLAotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZG9jdW1lbnQuIFN1cHBv
cnRzIHR3byBmb3JtcyAtLSB3aXRoIG9ubHkgb25lCi0gICAgLy8gYXJndW1lbnQsIGl0IGNhbGxz
IHRoYXQgZm9yIGVhY2ggbGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGgKLSAgICAvLyB0aHJlZSwg
aXQgaXRlcmF0ZXMgb3ZlciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aAot
ICAgIC8vIHRoZSBzZWNvbmQgYmVpbmcgbm9uLWluY2x1c2l2ZSkuCi0gICAgaXRlcjogZnVuY3Rp
b24oZnJvbSwgdG8sIG9wKSB7Ci0gICAgICBpZiAob3ApIHRoaXMuaXRlck4oZnJvbSAtIHRoaXMu
Zmlyc3QsIHRvIC0gZnJvbSwgb3ApOwotICAgICAgZWxzZSB0aGlzLml0ZXJOKHRoaXMuZmlyc3Qs
IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUsIGZyb20pOwotICAgIH0sCi0KLSAgICAvLyBOb24tcHVi
bGljIGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy4KLSAgICBpbnNlcnQ6
IGZ1bmN0aW9uKGF0LCBsaW5lcykgewotICAgICAgdmFyIGhlaWdodCA9IDA7Ci0gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVp
Z2h0OwotICAgICAgdGhpcy5pbnNlcnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWln
aHQpOwotICAgIH0sCi0gICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlu
bmVyKGF0IC0gdGhpcy5maXJzdCwgbik7IH0sCi0KLSAgICAvLyBGcm9tIGhlcmUsIHRoZSBtZXRo
b2RzIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBNb3N0Ci0gICAgLy8gYXJlIGFs
c28gYXZhaWxhYmxlIGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuCi0KLSAgICBn
ZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkgewotICAgICAgdmFyIGxpbmVzID0gZ2V0TGluZXMo
dGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7Ci0gICAgICBpZiAobGlu
ZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKLSAgICAgIHJldHVybiBsaW5lcy5qb2luKGxp
bmVTZXAgfHwgIlxuIik7Ci0gICAgfSwKLSAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oY29kZSkgewotICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRo
aXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwotICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTog
dG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAic2V0
VmFsdWUifSwgdHJ1ZSk7Ci0gICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9u
KHRvcCkpOwotICAgIH0pLAotICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwg
dG8sIG9yaWdpbikgewotICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7Ci0gICAgICB0
byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tOwotICAgICAgcmVwbGFjZVJhbmdlKHRo
aXMsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pOwotICAgIH0sCi0gICAgZ2V0UmFuZ2U6IGZ1bmN0
aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7Ci0gICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRo
aXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKLSAgICAgIGlmIChs
aW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4o
bGluZVNlcCB8fCAiXG4iKTsKLSAgICB9LAotCi0gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkg
e3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwK
LQotICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxp
bmUpKSByZXR1cm4gZ2V0TGluZSh0aGlzLCBsaW5lKTt9LAotICAgIGdldExpbmVOdW1iZXI6IGZ1
bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpO30sCi0KLSAgICBnZXRMaW5lSGFuZGxl
VmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAi
bnVtYmVyIikgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlzdWFs
TGluZShsaW5lKTsKLSAgICB9LAotCi0gICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4g
dGhpcy5zaXplO30sCi0gICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJz
dDt9LAotICAgIGxhc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMu
c2l6ZSAtIDE7fSwKLQotICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9z
KHRoaXMsIHBvcyk7fSwKLQotICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAg
IHZhciByYW5nZSA9IHRoaXMuc2VsLnByaW1hcnkoKSwgcG9zOwotICAgICAgaWYgKHN0YXJ0ID09
IG51bGwgfHwgc3RhcnQgPT0gImhlYWQiKSBwb3MgPSByYW5nZS5oZWFkOwotICAgICAgZWxzZSBp
ZiAoc3RhcnQgPT0gImFuY2hvciIpIHBvcyA9IHJhbmdlLmFuY2hvcjsKLSAgICAgIGVsc2UgaWYg
KHN0YXJ0ID09ICJlbmQiIHx8IHN0YXJ0ID09ICJ0byIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3Mg
PSByYW5nZS50bygpOwotICAgICAgZWxzZSBwb3MgPSByYW5nZS5mcm9tKCk7Ci0gICAgICByZXR1
cm4gcG9zOwotICAgIH0sCi0gICAgbGlzdFNlbGVjdGlvbnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
dGhpcy5zZWwucmFuZ2VzOyB9LAotICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHty
ZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTt9LAotCi0gICAgc2V0Q3Vyc29yOiBk
b2NNZXRob2RPcChmdW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykgewotICAgICAgc2V0U2ltcGxl
U2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgdHlwZW9mIGxpbmUgPT0gIm51bWJlciIgPyBQ
b3MobGluZSwgY2ggfHwgMCkgOiBsaW5lKSwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgfSksCi0gICAg
c2V0U2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMp
IHsKLSAgICAgIHNldFNpbXBsZVNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciks
IGNsaXBQb3ModGhpcywgaGVhZCB8fCBhbmNob3IpLCBvcHRpb25zKTsKLSAgICB9KSwKLSAgICBl
eHRlbmRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25z
KSB7Ci0gICAgICBleHRlbmRTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBoZWFkKSwgb3Ro
ZXIgJiYgY2xpcFBvcyh0aGlzLCBvdGhlciksIG9wdGlvbnMpOwotICAgIH0pLAotICAgIGV4dGVu
ZFNlbGVjdGlvbnM6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7Ci0gICAg
ICBleHRlbmRTZWxlY3Rpb25zKHRoaXMsIGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcywgb3B0aW9u
cykpOwotICAgIH0pLAotICAgIGV4dGVuZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oZiwgb3B0aW9ucykgewotICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBtYXAodGhpcy5z
ZWwucmFuZ2VzLCBmKSwgb3B0aW9ucyk7Ci0gICAgfSksCi0gICAgc2V0U2VsZWN0aW9uczogZG9j
TWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7Ci0gICAgICBpZiAo
IXJhbmdlcy5sZW5ndGgpIHJldHVybjsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBvdXQgPSBbXTsg
aSA8IHJhbmdlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQ
b3ModGhpcywgcmFuZ2VzW2ldLmFuY2hvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5oZWFkKSk7Ci0gICAgICBpZiAocHJpbWFyeSA9PSBudWxs
KSBwcmltYXJ5ID0gTWF0aC5taW4ocmFuZ2VzLmxlbmd0aCAtIDEsIHRoaXMuc2VsLnByaW1JbmRl
eCk7Ci0gICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgcHJp
bWFyeSksIG9wdGlvbnMpOwotICAgIH0pLAotICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3Ao
ZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhp
cy5zZWwucmFuZ2VzLnNsaWNlKDApOwotICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQ
b3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTsKLSAgICAg
IHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5nZXMubGVu
Z3RoIC0gMSksIG9wdGlvbnMpOwotICAgIH0pLAotCi0gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlv
bihsaW5lU2VwKSB7Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lczsK
LSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50
bygpKTsKLSAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsOwot
ICAgICAgfQotICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAg
ICBlbHNlIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxuIik7Ci0gICAgfSwKLSAgICBn
ZXRTZWxlY3Rpb25zOiBmdW5jdGlvbihsaW5lU2VwKSB7Ci0gICAgICB2YXIgcGFydHMgPSBbXSwg
cmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5n
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4odGhpcywgcmFu
Z2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkpOwotICAgICAgICBpZiAobGluZVNlcCAhPT0g
ZmFsc2UpIHNlbCA9IHNlbC5qb2luKGxpbmVTZXAgfHwgIlxuIik7Ci0gICAgICAgIHBhcnRzW2ld
ID0gc2VsOwotICAgICAgfQotICAgICAgcmV0dXJuIHBhcnRzOwotICAgIH0sCi0gICAgcmVwbGFj
ZVNlbGVjdGlvbjogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgewotICAgICAgdmFy
IGR1cCA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlbC5yYW5nZXMubGVu
Z3RoOyBpKyspCi0gICAgICAgIGR1cFtpXSA9IGNvZGU7Ci0gICAgICB0aGlzLnJlcGxhY2VTZWxl
Y3Rpb25zKGR1cCwgY29sbGFwc2UsIG9yaWdpbiB8fCAiK2lucHV0Iik7Ci0gICAgfSwKLSAgICBy
ZXBsYWNlU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9y
aWdpbikgewotICAgICAgdmFyIGNoYW5nZXMgPSBbXSwgc2VsID0gdGhpcy5zZWw7Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKLSAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5n
ZS5mcm9tKCksIHRvOiByYW5nZS50bygpLCB0ZXh0OiBzcGxpdExpbmVzKGNvZGVbaV0pLCBvcmln
aW46IG9yaWdpbn07Ci0gICAgICB9Ci0gICAgICB2YXIgbmV3U2VsID0gY29sbGFwc2UgJiYgY29s
bGFwc2UgIT0gImVuZCIgJiYgY29tcHV0ZVJlcGxhY2VkU2VsKHRoaXMsIGNoYW5nZXMsIGNvbGxh
cHNlKTsKLSAgICAgIGZvciAodmFyIGkgPSBjaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0t
KQotICAgICAgICBtYWtlQ2hhbmdlKHRoaXMsIGNoYW5nZXNbaV0pOwotICAgICAgaWYgKG5ld1Nl
bCkgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkodGhpcywgbmV3U2VsKTsKLSAgICAgIGVsc2Ug
aWYgKHRoaXMuY20pIGVuc3VyZUN1cnNvclZpc2libGUodGhpcy5jbSk7Ci0gICAgfSksCi0gICAg
dW5kbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMs
ICJ1bmRvIik7fSksCi0gICAgcmVkbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5n
ZUZyb21IaXN0b3J5KHRoaXMsICJyZWRvIik7fSksCi0gICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0
aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIiwgdHJ1
ZSk7fSksCi0gICAgcmVkb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNo
YW5nZUZyb21IaXN0b3J5KHRoaXMsICJyZWRvIiwgdHJ1ZSk7fSksCi0KLSAgICBzZXRFeHRlbmRp
bmc6IGZ1bmN0aW9uKHZhbCkge3RoaXMuZXh0ZW5kID0gdmFsO30sCi0gICAgZ2V0RXh0ZW5kaW5n
OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5leHRlbmQ7fSwKLQotICAgIGhpc3RvcnlTaXplOiBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5LCBkb25lID0gMCwgdW5k
b25lID0gMDsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC5kb25lLmxlbmd0aDsgaSsr
KSBpZiAoIWhpc3QuZG9uZVtpXS5yYW5nZXMpICsrZG9uZTsKLSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpKyspIGlmICghaGlzdC51bmRvbmVbaV0ucmFuZ2Vz
KSArK3VuZG9uZTsKLSAgICAgIHJldHVybiB7dW5kbzogZG9uZSwgcmVkbzogdW5kb25lfTsKLSAg
ICB9LAotICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0gbmV3IEhp
c3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO30sCi0KLSAgICBtYXJrQ2xlYW46IGZ1
bmN0aW9uKCkgewotICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVy
YXRpb24odHJ1ZSk7Ci0gICAgfSwKLSAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3Jj
ZVNwbGl0KSB7Ci0gICAgICBpZiAoZm9yY2VTcGxpdCkKLSAgICAgICAgdGhpcy5oaXN0b3J5Lmxh
c3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKLSAgICAgIHJldHVybiB0aGlz
Lmhpc3RvcnkuZ2VuZXJhdGlvbjsKLSAgICB9LAotICAgIGlzQ2xlYW46IGZ1bmN0aW9uIChnZW4p
IHsKLSAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbiA9PSAoZ2VuIHx8IHRoaXMu
Y2xlYW5HZW5lcmF0aW9uKTsKLSAgICB9LAotCi0gICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7
Ci0gICAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUp
LAotICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVu
ZG9uZSl9OwotICAgIH0sCi0gICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsKLSAg
ICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1h
eEdlbmVyYXRpb24pOwotICAgICAgaGlzdC5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0
YS5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTsKLSAgICAgIGhpc3QudW5kb25lID0gY29weUhp
c3RvcnlBcnJheShoaXN0RGF0YS51bmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpOwotICAgIH0s
Ci0KLSAgICBtYXJrVGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKLSAgICAgIHJl
dHVybiBtYXJrVGV4dCh0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRv
KSwgb3B0aW9ucywgInJhbmdlIik7Ci0gICAgfSwKLSAgICBzZXRCb29rbWFyazogZnVuY3Rpb24o
cG9zLCBvcHRpb25zKSB7Ci0gICAgICB2YXIgcmVhbE9wdHMgPSB7cmVwbGFjZWRXaXRoOiBvcHRp
b25zICYmIChvcHRpb25zLm5vZGVUeXBlID09IG51bGwgPyBvcHRpb25zLndpZGdldCA6IG9wdGlv
bnMpLAotICAgICAgICAgICAgICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9u
cy5pbnNlcnRMZWZ0LAotICAgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBmYWxz
ZSwgc2hhcmVkOiBvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkfTsKLSAgICAgIHBvcyA9IGNsaXBQ
b3ModGhpcywgcG9zKTsKLSAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVh
bE9wdHMsICJib29rbWFyayIpOwotICAgIH0sCi0gICAgZmluZE1hcmtzQXQ6IGZ1bmN0aW9uKHBv
cykgewotICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLCBwb3MpOwotICAgICAgdmFyIG1hcmtlcnMg
PSBbXSwgc3BhbnMgPSBnZXRMaW5lKHRoaXMsIHBvcy5saW5lKS5tYXJrZWRTcGFuczsKLSAgICAg
IGlmIChzcGFucykgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewotICAg
ICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwotICAgICAgICBpZiAoKHNwYW4uZnJvbSA9PSBudWxs
IHx8IHNwYW4uZnJvbSA8PSBwb3MuY2gpICYmCi0gICAgICAgICAgICAoc3Bhbi50byA9PSBudWxs
IHx8IHNwYW4udG8gPj0gcG9zLmNoKSkKLSAgICAgICAgICBtYXJrZXJzLnB1c2goc3Bhbi5tYXJr
ZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtYXJrZXJz
OwotICAgIH0sCi0gICAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7Ci0g
ICAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRoaXMsIHRvKTsK
LSAgICAgIHZhciBmb3VuZCA9IFtdLCBsaW5lTm8gPSBmcm9tLmxpbmU7Ci0gICAgICB0aGlzLml0
ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIg
c3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zOwotICAgICAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkg
PSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgc3BhbiA9IHNwYW5z
W2ldOwotICAgICAgICAgIGlmICghKGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJvbS5jaCA+IHNw
YW4udG8gfHwKLSAgICAgICAgICAgICAgICBzcGFuLmZyb20gPT0gbnVsbCAmJiBsaW5lTm8gIT0g
ZnJvbS5saW5lfHwKLSAgICAgICAgICAgICAgICBsaW5lTm8gPT0gdG8ubGluZSAmJiBzcGFuLmZy
b20gPiB0by5jaCkgJiYKLSAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNwYW4ubWFy
a2VyKSkpCi0gICAgICAgICAgICBmb3VuZC5wdXNoKHNwYW4ubWFya2VyLnBhcmVudCB8fCBzcGFu
Lm1hcmtlcik7Ci0gICAgICAgIH0KLSAgICAgICAgKytsaW5lTm87Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiBmb3VuZDsKLSAgICB9LAotICAgIGdldEFsbE1hcmtzOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciBtYXJrZXJzID0gW107Ci0gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24obGluZSkgewot
ICAgICAgICB2YXIgc3BzID0gbGluZS5tYXJrZWRTcGFuczsKLSAgICAgICAgaWYgKHNwcykgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgaWYgKHNwc1tpXS5m
cm9tICE9IG51bGwpIG1hcmtlcnMucHVzaChzcHNbaV0ubWFya2VyKTsKLSAgICAgIH0pOwotICAg
ICAgcmV0dXJuIG1hcmtlcnM7Ci0gICAgfSwKLQotICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24o
b2ZmKSB7Ci0gICAgICB2YXIgY2gsIGxpbmVObyA9IHRoaXMuZmlyc3Q7Ci0gICAgICB0aGlzLml0
ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsg
MTsKLSAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQotICAg
ICAgICBvZmYgLT0gc3o7Ci0gICAgICAgICsrbGluZU5vOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gY2xpcFBvcyh0aGlzLCBQb3MobGluZU5vLCBjaCkpOwotICAgIH0sCi0gICAgaW5kZXhGcm9t
UG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7Ci0gICAgICBjb29yZHMgPSBjbGlwUG9zKHRoaXMsIGNv
b3Jkcyk7Ci0gICAgICB2YXIgaW5kZXggPSBjb29yZHMuY2g7Ci0gICAgICBpZiAoY29vcmRzLmxp
bmUgPCB0aGlzLmZpcnN0IHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOwotICAgICAgdGhpcy5p
dGVyKHRoaXMuZmlyc3QsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgewotICAgICAgICBp
bmRleCArPSBsaW5lLnRleHQubGVuZ3RoICsgMTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIGlu
ZGV4OwotICAgIH0sCi0KLSAgICBjb3B5OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkgewotICAgICAg
dmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCAr
IHRoaXMuc2l6ZSksIHRoaXMubW9kZU9wdGlvbiwgdGhpcy5maXJzdCk7Ci0gICAgICBkb2Muc2Ny
b2xsVG9wID0gdGhpcy5zY3JvbGxUb3A7IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0
OwotICAgICAgZG9jLnNlbCA9IHRoaXMuc2VsOwotICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwot
ICAgICAgaWYgKGNvcHlIaXN0b3J5KSB7Ci0gICAgICAgIGRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9
IHRoaXMuaGlzdG9yeS51bmRvRGVwdGg7Ci0gICAgICAgIGRvYy5zZXRIaXN0b3J5KHRoaXMuZ2V0
SGlzdG9yeSgpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfSwKLQotICAgIGxp
bmtlZERvYzogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25z
ID0ge307Ci0gICAgICB2YXIgZnJvbSA9IHRoaXMuZmlyc3QsIHRvID0gdGhpcy5maXJzdCArIHRo
aXMuc2l6ZTsKLSAgICAgIGlmIChvcHRpb25zLmZyb20gIT0gbnVsbCAmJiBvcHRpb25zLmZyb20g
PiBmcm9tKSBmcm9tID0gb3B0aW9ucy5mcm9tOwotICAgICAgaWYgKG9wdGlvbnMudG8gIT0gbnVs
bCAmJiBvcHRpb25zLnRvIDwgdG8pIHRvID0gb3B0aW9ucy50bzsKLSAgICAgIHZhciBjb3B5ID0g
bmV3IERvYyhnZXRMaW5lcyh0aGlzLCBmcm9tLCB0byksIG9wdGlvbnMubW9kZSB8fCB0aGlzLm1v
ZGVPcHRpb24sIGZyb20pOwotICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0
b3J5ID0gdGhpcy5oaXN0b3J5OwotICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9
IFtdKSkucHVzaCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9KTsK
LSAgICAgIGNvcHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFyZWRI
aXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9XTsKLSAgICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHks
IGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTsKLSAgICAgIHJldHVybiBjb3B5OwotICAgIH0sCi0g
ICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikgewotICAgICAgaWYgKG90aGVyIGluc3RhbmNl
b2YgQ29kZU1pcnJvcikgb3RoZXIgPSBvdGhlci5kb2M7Ci0gICAgICBpZiAodGhpcy5saW5rZWQp
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5rZWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
dmFyIGxpbmsgPSB0aGlzLmxpbmtlZFtpXTsKLSAgICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVy
KSBjb250aW51ZTsKLSAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEpOwotICAgICAgICBv
dGhlci51bmxpbmtEb2ModGhpcyk7Ci0gICAgICAgIGRldGFjaFNoYXJlZE1hcmtlcnMoZmluZFNo
YXJlZE1hcmtlcnModGhpcykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIElm
IHRoZSBoaXN0b3JpZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4KLSAgICAgIGlmIChv
dGhlci5oaXN0b3J5ID09IHRoaXMuaGlzdG9yeSkgewotICAgICAgICB2YXIgc3BsaXRJZHMgPSBb
b3RoZXIuaWRdOwotICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlvbihkb2MpIHtzcGxp
dElkcy5wdXNoKGRvYy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcg
SGlzdG9yeShudWxsKTsKLSAgICAgICAgb3RoZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlB
cnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3BsaXRJZHMpOwotICAgICAgICBvdGhlci5oaXN0b3J5
LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSwgc3BsaXRJZHMp
OwotICAgICAgfQotICAgIH0sCi0gICAgaXRlckxpbmtlZERvY3M6IGZ1bmN0aW9uKGYpIHtsaW5r
ZWREb2NzKHRoaXMsIGYpO30sCi0KLSAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhp
cy5tb2RlO30sCi0gICAgZ2V0RWRpdG9yOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5jbTt9Ci0g
IH0pOwotCi0gIC8vIFB1YmxpYyBhbGlhcy4KLSAgRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERv
Yy5wcm90b3R5cGUuaXRlcjsKLQotICAvLyBTZXQgdXAgbWV0aG9kcyBvbiBDb2RlTWlycm9yJ3Mg
cHJvdG90eXBlIHRvIHJlZGlyZWN0IHRvIHRoZSBlZGl0b3IncyBkb2N1bWVudC4KLSAgdmFyIGRv
bnREZWxlZ2F0ZSA9ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIg
Iik7Ci0gIGZvciAodmFyIHByb3AgaW4gRG9jLnByb3RvdHlwZSkgaWYgKERvYy5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHByb3ApIDwgMCkK
LSAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHsKLSAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1
bWVudHMpO307Ci0gICAgfSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7Ci0KLSAgZXZlbnRNaXhpbihE
b2MpOwotCi0gIC8vIENhbGwgZiBmb3IgYWxsIGxpbmtlZCBkb2N1bWVudHMuCi0gIGZ1bmN0aW9u
IGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewotICAgIGZ1bmN0aW9uIHByb3Bh
Z2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHsKLSAgICAgIGlmIChkb2MubGlua2VkKSBmb3Ig
KHZhciBpID0gMDsgaSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJl
bCA9IGRvYy5saW5rZWRbaV07Ci0gICAgICAgIGlmIChyZWwuZG9jID09IHNraXApIGNvbnRpbnVl
OwotICAgICAgICB2YXIgc2hhcmVkID0gc2hhcmVkSGlzdCAmJiByZWwuc2hhcmVkSGlzdDsKLSAg
ICAgICAgaWYgKHNoYXJlZEhpc3RPbmx5ICYmICFzaGFyZWQpIGNvbnRpbnVlOwotICAgICAgICBm
KHJlbC5kb2MsIHNoYXJlZCk7Ci0gICAgICAgIHByb3BhZ2F0ZShyZWwuZG9jLCBkb2MsIHNoYXJl
ZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpOwotICB9
Ci0KLSAgLy8gQXR0YWNoIGEgZG9jdW1lbnQgdG8gYW4gZWRpdG9yLgotICBmdW5jdGlvbiBhdHRh
Y2hEb2MoY20sIGRvYykgewotICAgIGlmIChkb2MuY20pIHRocm93IG5ldyBFcnJvcigiVGhpcyBk
b2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTsKLSAgICBjbS5kb2MgPSBkb2M7Ci0gICAgZG9j
LmNtID0gY207Ci0gICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7Ci0gICAgbG9hZE1vZGUoY20p
OwotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGZpbmRNYXhMaW5lKGNtKTsKLSAg
ICBjbS5vcHRpb25zLm1vZGUgPSBkb2MubW9kZU9wdGlvbjsKLSAgICByZWdDaGFuZ2UoY20pOwot
ICB9Ci0KLSAgLy8gTElORSBVVElMSVRJRVMKLQotICAvLyBGaW5kIHRoZSBsaW5lIG9iamVjdCBj
b3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci4KLSAgZnVuY3Rpb24gZ2V0TGlu
ZShkb2MsIG4pIHsKLSAgICBuIC09IGRvYy5maXJzdDsKLSAgICBpZiAobiA8IDAgfHwgbiA+PSBk
b2Muc2l6ZSkgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIgKyAobiArIGRvYy5m
aXJzdCkgKyAiIGluIHRoZSBkb2N1bWVudC4iKTsKLSAgICBmb3IgKHZhciBjaHVuayA9IGRvYzsg
IWNodW5rLmxpbmVzOykgewotICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKLSAgICAgICAg
dmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0g
ICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KLSAgICAgICAgbiAt
PSBzejsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNodW5rLmxpbmVzW25dOwotICB9Ci0K
LSAgLy8gR2V0IHRoZSBwYXJ0IG9mIGEgZG9jdW1lbnQgYmV0d2VlbiB0d28gcG9zaXRpb25zLCBh
cyBhbiBhcnJheSBvZgotICAvLyBzdHJpbmdzLgotICBmdW5jdGlvbiBnZXRCZXR3ZWVuKGRvYywg
c3RhcnQsIGVuZCkgewotICAgIHZhciBvdXQgPSBbXSwgbiA9IHN0YXJ0LmxpbmU7Ci0gICAgZG9j
Lml0ZXIoc3RhcnQubGluZSwgZW5kLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2
YXIgdGV4dCA9IGxpbmUudGV4dDsKLSAgICAgIGlmIChuID09IGVuZC5saW5lKSB0ZXh0ID0gdGV4
dC5zbGljZSgwLCBlbmQuY2gpOwotICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgdGV4dCA9IHRl
eHQuc2xpY2Uoc3RhcnQuY2gpOwotICAgICAgb3V0LnB1c2godGV4dCk7Ci0gICAgICArK247Ci0g
ICAgfSk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotICAvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4g
ZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3MuCi0gIGZ1bmN0aW9uIGdldExpbmVzKGRv
YywgZnJvbSwgdG8pIHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgZG9jLml0ZXIoZnJvbSwgdG8s
IGZ1bmN0aW9uKGxpbmUpIHsgb3V0LnB1c2gobGluZS50ZXh0KTsgfSk7Ci0gICAgcmV0dXJuIG91
dDsKLSAgfQotCi0gIC8vIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgcHJvcGFnYXRpbmcg
dGhlIGhlaWdodCBjaGFuZ2UKLSAgLy8gdXB3YXJkcyB0byBwYXJlbnQgbm9kZXMuCi0gIGZ1bmN0
aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7Ci0gICAgdmFyIGRpZmYgPSBoZWln
aHQgLSBsaW5lLmhlaWdodDsKLSAgICBpZiAoZGlmZikgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4g
PSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKLSAgfQotCi0gIC8vIEdpdmVuIGEgbGluZSBv
YmplY3QsIGZpbmQgaXRzIGxpbmUgbnVtYmVyIGJ5IHdhbGtpbmcgdXAgdGhyb3VnaAotICAvLyBp
dHMgcGFyZW50IGxpbmtzLgotICBmdW5jdGlvbiBsaW5lTm8obGluZSkgewotICAgIGlmIChsaW5l
LnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgY3VyID0gbGluZS5wYXJlbnQs
IG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwotICAgIGZvciAodmFyIGNodW5rID0gY3Vy
LnBhcmVudDsgY2h1bms7IGN1ciA9IGNodW5rLCBjaHVuayA9IGNodW5rLnBhcmVudCkgewotICAg
ICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKLSAgICAgICAgaWYgKGNodW5rLmNoaWxkcmVuW2ld
ID09IGN1cikgYnJlYWs7Ci0gICAgICAgIG5vICs9IGNodW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6
ZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbm8gKyBjdXIuZmlyc3Q7Ci0gIH0KLQot
ICAvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcg
dGhlIGhlaWdodAotICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS4KLSAgZnVu
Y3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7Ci0gICAgdmFyIG4gPSBjaHVuay5maXJzdDsK
LSAgICBvdXRlcjogZG8gewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5jaGlsZHJl
bi5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwg
Y2ggPSBjaGlsZC5oZWlnaHQ7Ci0gICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsg
Y29udGludWUgb3V0ZXI7IH0KLSAgICAgICAgaCAtPSBjaDsKLSAgICAgICAgbiArPSBjaGlsZC5j
aHVua1NpemUoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuOwotICAgIH0gd2hpbGUgKCFjaHVu
ay5saW5lcyk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDsK
LSAgICAgIGlmIChoIDwgbGgpIGJyZWFrOwotICAgICAgaCAtPSBsaDsKLSAgICB9Ci0gICAgcmV0
dXJuIG4gKyBpOwotICB9Ci0KLQotICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVu
IGxpbmUuCi0gIGZ1bmN0aW9uIGhlaWdodEF0TGluZShsaW5lT2JqKSB7Ci0gICAgbGluZU9iaiA9
IHZpc3VhbExpbmUobGluZU9iaik7Ci0KLSAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5w
YXJlbnQ7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkg
ewotICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXTsKLSAgICAgIGlmIChsaW5lID09IGxp
bmVPYmopIGJyZWFrOwotICAgICAgZWxzZSBoICs9IGxpbmUuaGVpZ2h0OwotICAgIH0KLSAgICBm
b3IgKHZhciBwID0gY2h1bmsucGFyZW50OyBwOyBjaHVuayA9IHAsIHAgPSBjaHVuay5wYXJlbnQp
IHsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgY3VyID0gcC5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKGN1ciA9PSBjaHVu
aykgYnJlYWs7Ci0gICAgICAgIGVsc2UgaCArPSBjdXIuaGVpZ2h0OwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gaDsKLSAgfQotCi0gIC8vIEdldCB0aGUgYmlkaSBvcmRlcmluZyBmb3IgdGhl
IGdpdmVuIGxpbmUgKGFuZCBjYWNoZSBpdCkuIFJldHVybnMKLSAgLy8gZmFsc2UgZm9yIGxpbmVz
IHRoYXQgYXJlIGZ1bGx5IGxlZnQtdG8tcmlnaHQsIGFuZCBhbiBhcnJheSBvZgotICAvLyBCaWRp
U3BhbiBvYmplY3RzIG90aGVyd2lzZS4KLSAgZnVuY3Rpb24gZ2V0T3JkZXIobGluZSkgewotICAg
IHZhciBvcmRlciA9IGxpbmUub3JkZXI7Ci0gICAgaWYgKG9yZGVyID09IG51bGwpIG9yZGVyID0g
bGluZS5vcmRlciA9IGJpZGlPcmRlcmluZyhsaW5lLnRleHQpOwotICAgIHJldHVybiBvcmRlcjsK
LSAgfQotCi0gIC8vIEhJU1RPUlkKLQotICBmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7Ci0g
ICAgLy8gQXJyYXlzIG9mIGNoYW5nZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0
aGluZyBhZGRzIGFuCi0gICAgLy8gZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9p
bmcgbW92ZXMgZXZlbnRzIGZyb20gZG9uZQotICAgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3Zl
cyB0aGVtIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uCi0gICAgdGhpcy5kb25lID0gW107IHRoaXMu
dW5kb25lID0gW107Ci0gICAgdGhpcy51bmRvRGVwdGggPSBJbmZpbml0eTsKLSAgICAvLyBVc2Vk
IHRvIHRyYWNrIHdoZW4gY2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbwot
ICAgIC8vIGV2ZW50Ci0gICAgdGhpcy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAw
OwotICAgIHRoaXMubGFzdE9wID0gbnVsbDsKLSAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxh
c3RTZWxPcmlnaW4gPSBudWxsOwotICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QK
LSAgICB0aGlzLmdlbmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAx
OwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRh
dGVEb2Mtc3R5bGUgY2hhbmdlCi0gIC8vIG9iamVjdC4KLSAgZnVuY3Rpb24gaGlzdG9yeUNoYW5n
ZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpIHsKLSAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBj
b3B5UG9zKGNoYW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3
ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9OwotICAgIGF0dGFjaExvY2FsU3BhbnMo
ZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOwot
ICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbihkb2MpIHthdHRhY2hMb2NhbFNwYW5zKGRvYywg
aGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTt9LCB0cnVl
KTsKLSAgICByZXR1cm4gaGlzdENoYW5nZTsKLSAgfQotCi0gIC8vIFBvcCBhbGwgc2VsZWN0aW9u
IGV2ZW50cyBvZmYgdGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3AgYXQKLSAgLy8gYSBj
aGFuZ2UgZXZlbnQuCi0gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGFycmF5KSB7Ci0g
ICAgd2hpbGUgKGFycmF5Lmxlbmd0aCkgewotICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpOwot
ICAgICAgaWYgKGxhc3QucmFuZ2VzKSBhcnJheS5wb3AoKTsKLSAgICAgIGVsc2UgYnJlYWs7Ci0g
ICAgfQotICB9Ci0KLSAgLy8gRmluZCB0aGUgdG9wIGNoYW5nZSBldmVudCBpbiB0aGUgaGlzdG9y
eS4gUG9wIG9mZiBzZWxlY3Rpb24KLSAgLy8gZXZlbnRzIHRoYXQgYXJlIGluIHRoZSB3YXkuCi0g
IGZ1bmN0aW9uIGxhc3RDaGFuZ2VFdmVudChoaXN0LCBmb3JjZSkgewotICAgIGlmIChmb3JjZSkg
ewotICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC5kb25lKTsKLSAgICAgIHJldHVybiBs
c3QoaGlzdC5kb25lKTsKLSAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdCho
aXN0LmRvbmUpLnJhbmdlcykgewotICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpOwotICAgIH0g
ZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVu
Z3RoIC0gMl0ucmFuZ2VzKSB7Ci0gICAgICBoaXN0LmRvbmUucG9wKCk7Ci0gICAgICByZXR1cm4g
bHN0KGhpc3QuZG9uZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgaW4g
dGhlIGhpc3RvcnkuIE1lcmdlcyBjaGFuZ2VzIHRoYXQgYXJlIHdpdGhpbgotICAvLyBhIHNpbmds
ZSBvcGVyYXRpb24sIG9yZSBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdAot
ICAvLyBhbGxvd3MgbWVyZ2luZyAoc3RhcnRpbmcgd2l0aCAiKyIpIGludG8gYSBzaW5nbGUgZXZl
bnQuCi0gIGZ1bmN0aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIs
IG9wSWQpIHsKLSAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwotICAgIGhpc3QudW5kb25lLmxl
bmd0aCA9IDA7Ci0gICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1cjsKLQotICAgIGlmICgoaGlz
dC5sYXN0T3AgPT0gb3BJZCB8fAotICAgICAgICAgaGlzdC5sYXN0T3JpZ2luID09IGNoYW5nZS5v
cmlnaW4gJiYgY2hhbmdlLm9yaWdpbiAmJgotICAgICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJB
dCgwKSA9PSAiKyIgJiYgZG9jLmNtICYmIGhpc3QubGFzdE1vZFRpbWUgPiB0aW1lIC0gZG9jLmNt
Lm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkpIHx8Ci0gICAgICAgICAgY2hhbmdlLm9yaWdpbi5j
aGFyQXQoMCkgPT0gIioiKSkgJiYKLSAgICAgICAgKGN1ciA9IGxhc3RDaGFuZ2VFdmVudChoaXN0
LCBoaXN0Lmxhc3RPcCA9PSBvcElkKSkpIHsKLSAgICAgIC8vIE1lcmdlIHRoaXMgY2hhbmdlIGlu
dG8gdGhlIGxhc3QgZXZlbnQKLSAgICAgIHZhciBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKTsKLSAg
ICAgIGlmIChjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZy
b20sIGxhc3QudG8pID09IDApIHsKLSAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBs
ZSBpbnNlcnRpb24gLS0gZG9uJ3Qgd2FudCB0byBhZGQKLSAgICAgICAgLy8gbmV3IGNoYW5nZXNl
dHMgZm9yIGV2ZXJ5IGNoYXJhY3RlciB0eXBlZAotICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5k
KGNoYW5nZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBBZGQgbmV3IHN1Yi1ldmVudAot
ICAgICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hh
bmdlKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2Vk
LCBzdGFydCBhIG5ldyBldmVudC4KLSAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTsK
LSAgICAgIGlmICghYmVmb3JlIHx8ICFiZWZvcmUucmFuZ2VzKQotICAgICAgICBwdXNoU2VsZWN0
aW9uVG9IaXN0b3J5KGRvYy5zZWwsIGhpc3QuZG9uZSk7Ci0gICAgICBjdXIgPSB7Y2hhbmdlczog
W2hpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0sCi0gICAgICAgICAgICAgZ2Vu
ZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufTsKLSAgICAgIGhpc3QuZG9uZS5wdXNoKGN1cik7Ci0g
ICAgICB3aGlsZSAoaGlzdC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0RlcHRoKSB7Ci0gICAgICAg
IGhpc3QuZG9uZS5zaGlmdCgpOwotICAgICAgICBpZiAoIWhpc3QuZG9uZVswXS5yYW5nZXMpIGhp
c3QuZG9uZS5zaGlmdCgpOwotICAgICAgfQotICAgIH0KLSAgICBoaXN0LmRvbmUucHVzaChzZWxB
ZnRlcik7Ci0gICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247Ci0gICAg
aGlzdC5sYXN0TW9kVGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lOwotICAgIGhpc3QubGFz
dE9wID0gb3BJZDsKLSAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBj
aGFuZ2Uub3JpZ2luOwotCi0gICAgaWYgKCFsYXN0KSBzaWduYWwoZG9jLCAiaGlzdG9yeUFkZGVk
Iik7Ci0gIH0KLQotICBmdW5jdGlvbiBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3Jp
Z2luLCBwcmV2LCBzZWwpIHsKLSAgICB2YXIgY2ggPSBvcmlnaW4uY2hhckF0KDApOwotICAgIHJl
dHVybiBjaCA9PSAiKiIgfHwKLSAgICAgIGNoID09ICIrIiAmJgotICAgICAgcHJldi5yYW5nZXMu
bGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoICYmCi0gICAgICBwcmV2LnNvbWV0aGluZ1NlbGVj
dGVkKCkgPT0gc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkgJiYKLSAgICAgIG5ldyBEYXRlIC0gZG9j
Lmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlF
dmVudERlbGF5IDogNTAwKTsKLSAgfQotCi0gIC8vIENhbGxlZCB3aGVuZXZlciB0aGUgc2VsZWN0
aW9uIGNoYW5nZXMsIHNldHMgdGhlIG5ldyBzZWxlY3Rpb24gYXMKLSAgLy8gdGhlIHBlbmRpbmcg
c2VsZWN0aW9uIGluIHRoZSBoaXN0b3J5LCBhbmQgcHVzaGVzIHRoZSBvbGQgcGVuZGluZwotICAv
LyBzZWxlY3Rpb24gaW50byB0aGUgJ2RvbmUnIGFycmF5IHdoZW4gaXQgd2FzIHNpZ25pZmljYW50
bHkKLSAgLy8gZGlmZmVyZW50IChpbiBudW1iZXIgb2Ygc2VsZWN0ZWQgcmFuZ2VzLCBlbXB0aW5l
c3MsIG9yIHRpbWUpLgotICBmdW5jdGlvbiBhZGRTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLCBzZWws
IG9wSWQsIG9wdGlvbnMpIHsKLSAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBvcmlnaW4gPSBv
cHRpb25zICYmIG9wdGlvbnMub3JpZ2luOwotCi0gICAgLy8gQSBuZXcgZXZlbnQgaXMgc3RhcnRl
ZCB3aGVuIHRoZSBwcmV2aW91cyBvcmlnaW4gZG9lcyBub3QgbWF0Y2gKLSAgICAvLyB0aGUgY3Vy
cmVudCwgb3IgdGhlIG9yaWdpbnMgZG9uJ3QgYWxsb3cgbWF0Y2hpbmcuIE9yaWdpbnMKLSAgICAv
LyBzdGFydGluZyB3aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGgg
KyBhcmUKLSAgICAvLyBtZXJnZWQgd2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhlciBpbiB0
aW1lLgotICAgIGlmIChvcElkID09IGhpc3QubGFzdE9wIHx8Ci0gICAgICAgIChvcmlnaW4gJiYg
aGlzdC5sYXN0U2VsT3JpZ2luID09IG9yaWdpbiAmJgotICAgICAgICAgKGhpc3QubGFzdE1vZFRp
bWUgPT0gaGlzdC5sYXN0U2VsVGltZSAmJiBoaXN0Lmxhc3RPcmlnaW4gPT0gb3JpZ2luIHx8Ci0g
ICAgICAgICAgc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgbHN0KGhpc3Qu
ZG9uZSksIHNlbCkpKSkKLSAgICAgIGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBz
ZWw7Ci0gICAgZWxzZQotICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGhpc3QuZG9u
ZSk7Ci0KLSAgICBoaXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRlOwotICAgIGhpc3QubGFzdFNl
bE9yaWdpbiA9IG9yaWdpbjsKLSAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7Ci0gICAgaWYgKG9wdGlv
bnMgJiYgb3B0aW9ucy5jbGVhclJlZG8gIT09IGZhbHNlKQotICAgICAgY2xlYXJTZWxlY3Rpb25F
dmVudHMoaGlzdC51bmRvbmUpOwotICB9Ci0KLSAgZnVuY3Rpb24gcHVzaFNlbGVjdGlvblRvSGlz
dG9yeShzZWwsIGRlc3QpIHsKLSAgICB2YXIgdG9wID0gbHN0KGRlc3QpOwotICAgIGlmICghKHRv
cCAmJiB0b3AucmFuZ2VzICYmIHRvcC5lcXVhbHMoc2VsKSkpCi0gICAgICBkZXN0LnB1c2goc2Vs
KTsKLSAgfQotCi0gIC8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4g
dGhlIGhpc3RvcnkuCi0gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZy
b20sIHRvKSB7Ci0gICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwg
biA9IDA7Ci0gICAgZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4o
ZG9jLmZpcnN0ICsgZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxp
bmUubWFya2VkU3BhbnMpCi0gICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2Vb
InNwYW5zXyIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgICAr
K247Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQg
Y29udGFpbmluZyBtYXJrZWQgc3BhbnMsIHRob3NlCi0gIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxp
Y2l0bHkgY2xlYXJlZCBzaG91bGQgbm90IGJlIHJlc3RvcmVkLgotICBmdW5jdGlvbiByZW1vdmVD
bGVhcmVkU3BhbnMoc3BhbnMpIHsKLSAgICBpZiAoIXNwYW5zKSByZXR1cm4gbnVsbDsKLSAgICBm
b3IgKHZhciBpID0gMCwgb3V0OyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGlmIChz
cGFuc1tpXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIG91dCA9IHNwYW5z
LnNsaWNlKDAsIGkpOyB9Ci0gICAgICBlbHNlIGlmIChvdXQpIG91dC5wdXNoKHNwYW5zW2ldKTsK
LSAgICB9Ci0gICAgcmV0dXJuICFvdXQgPyBzcGFucyA6IG91dC5sZW5ndGggPyBvdXQgOiBudWxs
OwotICB9Ci0KLSAgLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUgb2xkIG1hcmtlZCBzcGFucyBz
dG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuCi0gIGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hh
bmdlKSB7Ci0gICAgdmFyIGZvdW5kID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXTsKLSAgICBp
ZiAoIWZvdW5kKSByZXR1cm4gbnVsbDsKLSAgICBmb3IgKHZhciBpID0gMCwgbncgPSBbXTsgaSA8
IGNoYW5nZS50ZXh0Lmxlbmd0aDsgKytpKQotICAgICAgbncucHVzaChyZW1vdmVDbGVhcmVkU3Bh
bnMoZm91bmRbaV0pKTsKLSAgICByZXR1cm4gbnc7Ci0gIH0KLQotICAvLyBVc2VkIGJvdGggdG8g
cHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwgd2hlbgotICAv
LyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvCi0gIGZ1
bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlhdGVTZWwp
IHsKLSAgICBmb3IgKHZhciBpID0gMCwgY29weSA9IFtdOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07Ci0gICAgICBpZiAoZXZlbnQucmFuZ2Vz
KSB7Ci0gICAgICAgIGNvcHkucHVzaChpbnN0YW50aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5
cGUuZGVlcENvcHkuY2FsbChldmVudCkgOiBldmVudCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotICAgICAgdmFyIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107
Ci0gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXN9KTsKLSAgICAgIGZvciAodmFy
IGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7ICsraikgewotICAgICAgICB2YXIgY2hhbmdlID0g
Y2hhbmdlc1tqXSwgbTsKLSAgICAgICAgbmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJv
bSwgdG86IGNoYW5nZS50bywgdGV4dDogY2hhbmdlLnRleHR9KTsKLSAgICAgICAgaWYgKG5ld0dy
b3VwKSBmb3IgKHZhciBwcm9wIGluIGNoYW5nZSkgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3BhbnNf
KFxkKykkLykpIHsKLSAgICAgICAgICBpZiAoaW5kZXhPZihuZXdHcm91cCwgTnVtYmVyKG1bMV0p
KSA+IC0xKSB7Ci0gICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2VbcHJv
cF07Ci0gICAgICAgICAgICBkZWxldGUgY2hhbmdlW3Byb3BdOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY29weTsKLSAgfQotCi0gIC8vIFJlYmFz
aW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hh
bmdlcwotCi0gIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBmcm9tLCB0bywgZGlm
ZikgewotICAgIGlmICh0byA8IHBvcy5saW5lKSB7Ci0gICAgICBwb3MubGluZSArPSBkaWZmOwot
ICAgIH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7Ci0gICAgICBwb3MubGluZSA9IGZyb207
Ci0gICAgICBwb3MuY2ggPSAwOwotICAgIH0KLSAgfQotCi0gIC8vIFRyaWVzIHRvIHJlYmFzZSBh
biBhcnJheSBvZiBoaXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGUKLSAgLy8gZG9j
dW1lbnQuIElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQs
IHRoZQotICAvLyBldmVudCwgYW5kIGV2ZXJ5dGhpbmcgJ2JlaGluZCcgaXQsIGlzIGRpc2NhcmRl
ZC4gSWYgdGhlIGNoYW5nZSBpcwotICAvLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBw
b3NpdGlvbnMgYXJlIHVwZGF0ZWQuIFVzZXMgYQotICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBm
b3IgdGhlIHBvc2l0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvCi0gIC8vIHJlYWxsb2NhdGUgdGhl
bSBhbGwgb24gZXZlcnkgcmViYXNlLCBidXQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoCi0gIC8v
IHNoYXJlZCBwb3NpdGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuCi0gIGZ1bmN0
aW9uIHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3ViID0gYXJyYXlb
aV0sIG9rID0gdHJ1ZTsKLSAgICAgIGlmIChzdWIucmFuZ2VzKSB7Ci0gICAgICAgIGlmICghc3Vi
LmNvcGllZCkgeyBzdWIgPSBhcnJheVtpXSA9IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0g
dHJ1ZTsgfQotICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBq
KyspIHsKLSAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9y
LCBmcm9tLCB0bywgZGlmZik7Ci0gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFu
Z2VzW2pdLmhlYWQsIGZyb20sIHRvLCBkaWZmKTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KLSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViLmNoYW5nZXMubGVuZ3Ro
OyArK2opIHsKLSAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2pdOwotICAgICAgICBpZiAo
dG8gPCBjdXIuZnJvbS5saW5lKSB7Ci0gICAgICAgICAgY3VyLmZyb20gPSBQb3MoY3VyLmZyb20u
bGluZSArIGRpZmYsIGN1ci5mcm9tLmNoKTsKLSAgICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRv
LmxpbmUgKyBkaWZmLCBjdXIudG8uY2gpOwotICAgICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3Vy
LnRvLmxpbmUpIHsKLSAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGFycmF5LnNwbGljZSgw
LCBpICsgMSk7Ci0gICAgICAgIGkgPSAwOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0
aW9uIHJlYmFzZUhpc3QoaGlzdCwgY2hhbmdlKSB7Ci0gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJv
bS5saW5lLCB0byA9IGNoYW5nZS50by5saW5lLCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0g
KHRvIC0gZnJvbSkgLSAxOwotICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRv
LCBkaWZmKTsKLSAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZm
KTsKLSAgfQotCi0gIC8vIEVWRU5UIFVUSUxJVElFUwotCi0gIC8vIER1ZSB0byB0aGUgZmFjdCB0
aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWUKLSAgLy8gY29t
cGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLgotCi0gIHZhciBlX3ByZXZlbnREZWZhdWx0
ID0gQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewotICAgIGlmIChl
LnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgZWxzZSBlLnJldHVyblZh
bHVlID0gZmFsc2U7Ci0gIH07Ci0gIHZhciBlX3N0b3BQcm9wYWdhdGlvbiA9IENvZGVNaXJyb3Iu
ZV9zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbihlKSB7Ci0gICAgaWYgKGUuc3RvcFByb3BhZ2F0
aW9uKSBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVl
OwotICB9OwotICBmdW5jdGlvbiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkgewotICAgIHJldHVybiBl
LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJu
VmFsdWUgPT0gZmFsc2U7Ci0gIH0KLSAgdmFyIGVfc3RvcCA9IENvZGVNaXJyb3IuZV9zdG9wID0g
ZnVuY3Rpb24oZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO307
Ci0KLSAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1l
bnQ7fQotICBmdW5jdGlvbiBlX2J1dHRvbihlKSB7Ci0gICAgdmFyIGIgPSBlLndoaWNoOwotICAg
IGlmIChiID09IG51bGwpIHsKLSAgICAgIGlmIChlLmJ1dHRvbiAmIDEpIGIgPSAxOwotICAgICAg
ZWxzZSBpZiAoZS5idXR0b24gJiAyKSBiID0gMzsKLSAgICAgIGVsc2UgaWYgKGUuYnV0dG9uICYg
NCkgYiA9IDI7Ci0gICAgfQotICAgIGlmIChtYWMgJiYgZS5jdHJsS2V5ICYmIGIgPT0gMSkgYiA9
IDM7Ci0gICAgcmV0dXJuIGI7Ci0gIH0KLQotICAvLyBFVkVOVCBIQU5ETElORwotCi0gIC8vIExp
Z2h0d2VpZ2h0IGV2ZW50IGZyYW1ld29yay4gb24vb2ZmIGFsc28gd29yayBvbiBET00gbm9kZXMs
Ci0gIC8vIHJlZ2lzdGVyaW5nIG5hdGl2ZSBET00gaGFuZGxlcnMuCi0KLSAgdmFyIG9uID0gQ29k
ZU1pcnJvci5vbiA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKLSAgICBpZiAoZW1pdHRl
ci5hZGRFdmVudExpc3RlbmVyKQotICAgICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKHR5cGUs
IGYsIGZhbHNlKTsKLSAgICBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KQotICAgICAgZW1p
dHRlci5hdHRhY2hFdmVudCgib24iICsgdHlwZSwgZik7Ci0gICAgZWxzZSB7Ci0gICAgICB2YXIg
bWFwID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pOwotICAg
ICAgdmFyIGFyciA9IG1hcFt0eXBlXSB8fCAobWFwW3R5cGVdID0gW10pOwotICAgICAgYXJyLnB1
c2goZik7Ci0gICAgfQotICB9OwotCi0gIHZhciBvZmYgPSBDb2RlTWlycm9yLm9mZiA9IGZ1bmN0
aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKLSAgICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3Rl
bmVyKQotICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsK
LSAgICBlbHNlIGlmIChlbWl0dGVyLmRldGFjaEV2ZW50KQotICAgICAgZW1pdHRlci5kZXRhY2hF
dmVudCgib24iICsgdHlwZSwgZik7Ci0gICAgZWxzZSB7Ci0gICAgICB2YXIgYXJyID0gZW1pdHRl
ci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgICBpZiAoIWFycikg
cmV0dXJuOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAg
ICAgIGlmIChhcnJbaV0gPT0gZikgeyBhcnIuc3BsaWNlKGksIDEpOyBicmVhazsgfQotICAgIH0K
LSAgfTsKLQotICB2YXIgc2lnbmFsID0gQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihlbWl0
dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewotICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5k
bGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsKLSAgICBpZiAoIWFycikgcmV0dXJuOwot
ICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51
bGwsIGFyZ3MpOwotICB9OwotCi0gIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBldmVudHMg
YXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlCi0gIC8vIG1pZGRsZSBvZiBzb21lIHdvcmss
IGJ1dCBkb24ndCB3YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNhbGxpbmcKLSAgLy8gb3RoZXIg
bWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnQK
LSAgLy8gc3RhdGUgb3Igc2ltcGx5IG5vdCBleHBlY3QgYW55IG90aGVyIGV2ZW50cyB0byBoYXBw
ZW4uCi0gIC8vIHNpZ25hbExhdGVyIGxvb2tzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoYW5kbGVy
cywgYW5kIHNjaGVkdWxlcwotICAvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qg
b3BlcmF0aW9uIGVuZHMsIG9yLCBpZiBubwotICAvLyBvcGVyYXRpb24gaXMgYWN0aXZlLCB3aGVu
IGEgdGltZW91dCBmaXJlcy4KLSAgdmFyIGRlbGF5ZWRDYWxsYmFja3MsIGRlbGF5ZWRDYWxsYmFj
a0RlcHRoID0gMDsKLSAgZnVuY3Rpb24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAvKiwgdmFs
dWVzLi4uKi8pIHsKLSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5f
aGFuZGxlcnNbdHlwZV07Ci0gICAgaWYgKCFhcnIpIHJldHVybjsKLSAgICB2YXIgYXJncyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgaWYgKCFkZWxheWVk
Q2FsbGJhY2tzKSB7Ci0gICAgICArK2RlbGF5ZWRDYWxsYmFja0RlcHRoOwotICAgICAgZGVsYXll
ZENhbGxiYWNrcyA9IFtdOwotICAgICAgc2V0VGltZW91dChmaXJlRGVsYXllZCwgMCk7Ci0gICAg
fQotICAgIGZ1bmN0aW9uIGJuZChmKSB7cmV0dXJuIGZ1bmN0aW9uKCl7Zi5hcHBseShudWxsLCBh
cmdzKTt9O307Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAg
ICBkZWxheWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFycltpXSkpOwotICB9Ci0KLSAgZnVuY3Rpb24g
ZmlyZURlbGF5ZWQoKSB7Ci0gICAgLS1kZWxheWVkQ2FsbGJhY2tEZXB0aDsKLSAgICB2YXIgZGVs
YXllZCA9IGRlbGF5ZWRDYWxsYmFja3M7Ci0gICAgZGVsYXllZENhbGxiYWNrcyA9IG51bGw7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7
Ci0gIH0KLQotICAvLyBUaGUgRE9NIGV2ZW50cyB0aGF0IENvZGVNaXJyb3IgaGFuZGxlcyBjYW4g
YmUgb3ZlcnJpZGRlbiBieQotICAvLyByZWdpc3RlcmluZyBhIChub24tRE9NKSBoYW5kbGVyIG9u
IHRoZSBlZGl0b3IgZm9yIHRoZSBldmVudCBuYW1lLAotICAvLyBhbmQgcHJldmVudERlZmF1bHQt
aW5nIHRoZSBldmVudCBpbiB0aGF0IGhhbmRsZXIuCi0gIGZ1bmN0aW9uIHNpZ25hbERPTUV2ZW50
KGNtLCBlLCBvdmVycmlkZSkgewotICAgIHNpZ25hbChjbSwgb3ZlcnJpZGUgfHwgZS50eXBlLCBj
bSwgZSk7Ci0gICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKSB8fCBlLmNvZGVtaXJyb3JJ
Z25vcmU7Ci0gIH0KLQotICBmdW5jdGlvbiBzaWduYWxDdXJzb3JBY3Rpdml0eShjbSkgewotICAg
IHZhciBhcnIgPSBjbS5faGFuZGxlcnMgJiYgY20uX2hhbmRsZXJzLmN1cnNvckFjdGl2aXR5Owot
ICAgIGlmICghYXJyKSByZXR1cm47Ci0gICAgdmFyIHNldCA9IGNtLmN1ck9wLmN1cnNvckFjdGl2
aXR5SGFuZGxlcnMgfHwgKGNtLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMgPSBbXSk7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGlmIChpbmRleE9mKHNldCwg
YXJyW2ldKSA9PSAtMSkKLSAgICAgIHNldC5wdXNoKGFycltpXSk7Ci0gIH0KLQotICBmdW5jdGlv
biBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHsKLSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFu
ZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgcmV0dXJuIGFyciAmJiBhcnIu
bGVuZ3RoID4gMDsKLSAgfQotCi0gIC8vIEFkZCBvbiBhbmQgb2ZmIG1ldGhvZHMgdG8gYSBjb25z
dHJ1Y3RvcidzIHByb3RvdHlwZSwgdG8gbWFrZQotICAvLyByZWdpc3RlcmluZyBldmVudHMgb24g
c3VjaCBvYmplY3RzIG1vcmUgY29udmVuaWVudC4KLSAgZnVuY3Rpb24gZXZlbnRNaXhpbihjdG9y
KSB7Ci0gICAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywg
dHlwZSwgZik7fTsKLSAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7
b2ZmKHRoaXMsIHR5cGUsIGYpO307Ci0gIH0KLQotICAvLyBNSVNDIFVUSUxJVElFUwotCi0gIC8v
IE51bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xsZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Ny
b2xsYmFyCi0gIHZhciBzY3JvbGxlckN1dE9mZiA9IDMwOwotCi0gIC8vIFJldHVybmVkIG9yIHRo
cm93biBieSB2YXJpb3VzIHByb3RvY29scyB0byBzaWduYWwgJ0knbSBub3QKLSAgLy8gaGFuZGxp
bmcgdGhpcycuCi0gIHZhciBQYXNzID0gQ29kZU1pcnJvci5QYXNzID0ge3RvU3RyaW5nOiBmdW5j
dGlvbigpe3JldHVybiAiQ29kZU1pcnJvci5QYXNzIjt9fTsKLQotICAvLyBSZXVzZWQgb3B0aW9u
IG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHMKLSAgdmFyIHNlbF9kb250U2Nyb2xs
ID0ge3Njcm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiAiKm1vdXNlIn0sIHNlbF9t
b3ZlID0ge29yaWdpbjogIittb3ZlIn07Ci0KLSAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlk
ID0gbnVsbDt9Ci0gIERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG1zLCBmKSB7Ci0g
ICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpOwotICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1z
KTsKLSAgfTsKLQotICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRh
a2luZyB0YWJzIGludG8gYWNjb3VudC4KLSAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRh
dGlvbi4KLSAgdmFyIGNvdW50Q29sdW1uID0gQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGZ1bmN0
aW9uKHN0cmluZywgZW5kLCB0YWJTaXplLCBzdGFydEluZGV4LCBzdGFydFZhbHVlKSB7Ci0gICAg
aWYgKGVuZCA9PSBudWxsKSB7Ci0gICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEw
XS8pOwotICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKLSAgICB9Ci0g
ICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7
Ci0gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKCJcdCIsIGkpOwotICAgICAgaWYg
KG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKQotICAgICAgICByZXR1cm4gbiArIChlbmQg
LSBpKTsKLSAgICAgIG4gKz0gbmV4dFRhYiAtIGk7Ci0gICAgICBuICs9IHRhYlNpemUgLSAobiAl
IHRhYlNpemUpOwotICAgICAgaSA9IG5leHRUYWIgKyAxOwotICAgIH0KLSAgfTsKLQotICAvLyBU
aGUgaW52ZXJzZSBvZiBjb3VudENvbHVtbiAtLSBmaW5kIHRoZSBvZmZzZXQgdGhhdCBjb3JyZXNw
b25kcyB0bwotICAvLyBhIHBhcnRpY3VsYXIgY29sdW1uLgotICBmdW5jdGlvbiBmaW5kQ29sdW1u
KHN0cmluZywgZ29hbCwgdGFiU2l6ZSkgewotICAgIGZvciAodmFyIHBvcyA9IDAsIGNvbCA9IDA7
OykgewotICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBwb3MpOwotICAg
ICAgaWYgKG5leHRUYWIgPT0gLTEpIG5leHRUYWIgPSBzdHJpbmcubGVuZ3RoOwotICAgICAgdmFy
IHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zOwotICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxl
bmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpCi0gICAgICAgIHJldHVybiBwb3MgKyBNYXRo
Lm1pbihza2lwcGVkLCBnb2FsIC0gY29sKTsKLSAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zOwot
ICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7Ci0gICAgICBwb3MgPSBuZXh0
VGFiICsgMTsKLSAgICAgIGlmIChjb2wgPj0gZ29hbCkgcmV0dXJuIHBvczsKLSAgICB9Ci0gIH0K
LQotICB2YXIgc3BhY2VTdHJzID0gWyIiXTsKLSAgZnVuY3Rpb24gc3BhY2VTdHIobikgewotICAg
IHdoaWxlIChzcGFjZVN0cnMubGVuZ3RoIDw9IG4pCi0gICAgICBzcGFjZVN0cnMucHVzaChsc3Qo
c3BhY2VTdHJzKSArICIgIik7Ci0gICAgcmV0dXJuIHNwYWNlU3Ryc1tuXTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGxzdChhcnIpIHsgcmV0dXJuIGFyclthcnIubGVuZ3RoLTFdOyB9Ci0KLSAgdmFyIHNl
bGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdCgpOyB9OwotICBpZiAoaW9z
KSAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlz
IGJyb2tlbi4KLSAgICBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3Rp
b25TdGFydCA9IDA7IG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7IH07Ci0g
IGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzCi0gICAgc2Vs
ZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0gY2F0Y2go
X2UpIHt9IH07Ci0KLSAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWx0KSB7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkKLSAgICAgIGlmIChhcnJheVtpXSA9PSBl
bHQpIHJldHVybiBpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoW10uaW5kZXhPZikgaW5k
ZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBlbHQpIHsgcmV0dXJuIGFycmF5LmluZGV4T2YoZWx0KTsg
fTsKLSAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7Ci0gICAgdmFyIG91dCA9IFtdOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9IGYoYXJyYXlbaV0s
IGkpOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLSAgaWYgKFtdLm1hcCkgbWFwID0gZnVuY3Rpb24o
YXJyYXksIGYpIHsgcmV0dXJuIGFycmF5Lm1hcChmKTsgfTsKLQotICBmdW5jdGlvbiBjcmVhdGVP
YmooYmFzZSwgcHJvcHMpIHsKLSAgICB2YXIgaW5zdDsKLSAgICBpZiAoT2JqZWN0LmNyZWF0ZSkg
ewotICAgICAgaW5zdCA9IE9iamVjdC5jcmVhdGUoYmFzZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHZhciBjdG9yID0gZnVuY3Rpb24oKSB7fTsKLSAgICAgIGN0b3IucHJvdG90eXBlID0gYmFzZTsK
LSAgICAgIGluc3QgPSBuZXcgY3RvcigpOwotICAgIH0KLSAgICBpZiAocHJvcHMpIGNvcHlPYmoo
cHJvcHMsIGluc3QpOwotICAgIHJldHVybiBpbnN0OwotICB9OwotCi0gIGZ1bmN0aW9uIGNvcHlP
Ymoob2JqLCB0YXJnZXQsIG92ZXJ3cml0ZSkgewotICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB7
fTsKLSAgICBmb3IgKHZhciBwcm9wIGluIG9iaikKLSAgICAgIGlmIChvYmouaGFzT3duUHJvcGVy
dHkocHJvcCkgJiYgKG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5oYXNPd25Qcm9wZXJ0
eShwcm9wKSkpCi0gICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTsKLSAgICByZXR1cm4g
dGFyZ2V0OwotICB9Ci0KLSAgZnVuY3Rpb24gYmluZChmKSB7Ci0gICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJldHVybiBmdW5jdGlv
bigpe3JldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO307Ci0gIH0KLQotICB2YXIgbm9uQVNDSUlT
aW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MDBkZlx1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZmXHUz
NDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87Ci0gIHZhciBpc1dvcmRDaGFy
QmFzaWMgPSBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBmdW5jdGlvbihjaCkgewotICAgIHJldHVy
biAvXHcvLnRlc3QoY2gpIHx8IGNoID4gIlx4ODAiICYmCi0gICAgICAoY2gudG9VcHBlckNhc2Uo
KSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3Qo
Y2gpKTsKLSAgfTsKLSAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCwgaGVscGVyKSB7Ci0gICAgaWYg
KCFoZWxwZXIpIHJldHVybiBpc1dvcmRDaGFyQmFzaWMoY2gpOwotICAgIGlmIChoZWxwZXIuc291
cmNlLmluZGV4T2YoIlxcdyIpID4gLTEgJiYgaXNXb3JkQ2hhckJhc2ljKGNoKSkgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIGhlbHBlci50ZXN0KGNoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzRW1w
dHkob2JqKSB7Ci0gICAgZm9yICh2YXIgbiBpbiBvYmopIGlmIChvYmouaGFzT3duUHJvcGVydHko
bikgJiYgb2JqW25dKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAv
LyBFeHRlbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLiBBIHNlcmllcyBvZiBhIG5vbi1leHRlbmRp
bmcgY2hhciArCi0gIC8vIGFueSBudW1iZXIgb2YgZXh0ZW5kaW5nIGNoYXJzIGlzIHRyZWF0ZWQg
YXMgYSBzaW5nbGUgdW5pdCBhcyBmYXIKLSAgLy8gYXMgZWRpdGluZyBhbmQgbWVhc3VyaW5nIGlz
IGNvbmNlcm5lZC4gVGhpcyBpcyBub3QgZnVsbHkgY29ycmVjdCwKLSAgLy8gc2luY2Ugc29tZSBz
Y3JpcHRzL2ZvbnRzL2Jyb3dzZXJzIGFsc28gdHJlYXQgb3RoZXIgY29uZmlndXJhdGlvbnMKLSAg
Ly8gb2YgY29kZSBwb2ludHMgYXMgYSBncm91cC4KLSAgdmFyIGV4dGVuZGluZ0NoYXJzID0gL1tc
dTAzMDAtXHUwMzZmXHUwNDgzLVx1MDQ4OVx1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJc
dTA1YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1ZVx1MDY3MFx1MDZkNi1c
dTA2ZGNcdTA2ZGUtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVhLVx1MDZlZFx1MDcxMVx1MDczMC1c
dTA3NGFcdTA3YTYtXHUwN2IwXHUwN2ViLVx1MDdmM1x1MDgxNi1cdTA4MTlcdTA4MWItXHUwODIz
XHUwODI1LVx1MDgyN1x1MDgyOS1cdTA4MmRcdTA5MDAtXHUwOTAyXHUwOTNjXHUwOTQxLVx1MDk0
OFx1MDk0ZFx1MDk1MS1cdTA5NTVcdTA5NjJcdTA5NjNcdTA5ODFcdTA5YmNcdTA5YmVcdTA5YzEt
XHUwOWM0XHUwOWNkXHUwOWQ3XHUwOWUyXHUwOWUzXHUwYTAxXHUwYTAyXHUwYTNjXHUwYTQxXHUw
YTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE3MFx1MGE3MVx1MGE3NVx1MGE4
MVx1MGE4Mlx1MGFiY1x1MGFjMS1cdTBhYzVcdTBhYzdcdTBhYzhcdTBhY2RcdTBhZTJcdTBhZTNc
dTBiMDFcdTBiM2NcdTBiM2VcdTBiM2ZcdTBiNDEtXHUwYjQ0XHUwYjRkXHUwYjU2XHUwYjU3XHUw
YjYyXHUwYjYzXHUwYjgyXHUwYmJlXHUwYmMwXHUwYmNkXHUwYmQ3XHUwYzNlLVx1MGM0MFx1MGM0
Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwY2JjXHUwY2Jm
XHUwY2MyXHUwY2M2XHUwY2NjXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2UyXHUwY2UzXHUwZDNlXHUw
ZDQxLVx1MGQ0NFx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGRjYVx1MGRjZlx1MGRkMi1cdTBk
ZDRcdTBkZDZcdTBkZGZcdTBlMzFcdTBlMzQtXHUwZTNhXHUwZTQ3LVx1MGU0ZVx1MGViMVx1MGVi
NC1cdTBlYjlcdTBlYmJcdTBlYmNcdTBlYzgtXHUwZWNkXHUwZjE4XHUwZjE5XHUwZjM1XHUwZjM3
XHUwZjM5XHUwZjcxLVx1MGY3ZVx1MGY4MC1cdTBmODRcdTBmODZcdTBmODdcdTBmOTAtXHUwZjk3
XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAyZC1cdTEwMzBcdTEwMzItXHUxMDM3XHUxMDM5XHUxMDNh
XHUxMDNkXHUxMDNlXHUxMDU4XHUxMDU5XHUxMDVlLVx1MTA2MFx1MTA3MS1cdTEwNzRcdTEwODJc
dTEwODVcdTEwODZcdTEwOGRcdTEwOWRcdTEzNWZcdTE3MTItXHUxNzE0XHUxNzMyLVx1MTczNFx1
MTc1Mlx1MTc1M1x1MTc3Mlx1MTc3M1x1MTdiNy1cdTE3YmRcdTE3YzZcdTE3YzktXHUxN2QzXHUx
N2RkXHUxODBiLVx1MTgwZFx1MThhOVx1MTkyMC1cdTE5MjJcdTE5MjdcdTE5MjhcdTE5MzJcdTE5
MzktXHUxOTNiXHUxYTE3XHUxYTE4XHUxYTU2XHUxYTU4LVx1MWE1ZVx1MWE2MFx1MWE2Mlx1MWE2
NS1cdTFhNmNcdTFhNzMtXHUxYTdjXHUxYTdmXHUxYjAwLVx1MWIwM1x1MWIzNFx1MWIzNi1cdTFi
M2FcdTFiM2NcdTFiNDJcdTFiNmItXHUxYjczXHUxYjgwXHUxYjgxXHUxYmEyLVx1MWJhNVx1MWJh
OFx1MWJhOVx1MWMyYy1cdTFjMzNcdTFjMzZcdTFjMzdcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNl
MFx1MWNlMi1cdTFjZThcdTFjZWRcdTFkYzAtXHUxZGU2XHUxZGZkLVx1MWRmZlx1MjAwY1x1MjAw
ZFx1MjBkMC1cdTIwZjBcdTJjZWYtXHUyY2YxXHUyZGUwLVx1MmRmZlx1MzAyYS1cdTMwMmZcdTMw
OTlcdTMwOWFcdWE2NmYtXHVhNjcyXHVhNjdjXHVhNjdkXHVhNmYwXHVhNmYxXHVhODAyXHVhODA2
XHVhODBiXHVhODI1XHVhODI2XHVhOGM0XHVhOGUwLVx1YThmMVx1YTkyNi1cdWE5MmRcdWE5NDct
XHVhOTUxXHVhOTgwLVx1YTk4Mlx1YTliM1x1YTliNi1cdWE5YjlcdWE5YmNcdWFhMjktXHVhYTJl
XHVhYTMxXHVhYTMyXHVhYTM1XHVhYTM2XHVhYTQzXHVhYTRjXHVhYWIwXHVhYWIyLVx1YWFiNFx1
YWFiN1x1YWFiOFx1YWFiZVx1YWFiZlx1YWFjMVx1YWJlNVx1YWJlOFx1YWJlZFx1ZGMwMC1cdWRm
ZmZcdWZiMWVcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmY5ZVx1ZmY5Zl0vOwotICBmdW5j
dGlvbiBpc0V4dGVuZGluZ0NoYXIoY2gpIHsgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkgPj0gNzY4
ICYmIGV4dGVuZGluZ0NoYXJzLnRlc3QoY2gpOyB9Ci0KLSAgLy8gRE9NIFVUSUxJVElFUwotCi0g
IGZ1bmN0aW9uIGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHsKLSAgICB2YXIg
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKLSAgICBpZiAoY2xhc3NOYW1lKSBlLmNs
YXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9IHN0
eWxlOwotICAgIGlmICh0eXBlb2YgY29udGVudCA9PSAic3RyaW5nIikgZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7Ci0gICAgZWxzZSBpZiAoY29udGVudCkg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgKytpKSBlLmFwcGVuZENoaWxkKGNv
bnRlbnRbaV0pOwotICAgIHJldHVybiBlOwotICB9Ci0KLSAgdmFyIHJhbmdlOwotICBpZiAoZG9j
dW1lbnQuY3JlYXRlUmFuZ2UpIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgewot
ICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICByLnNldEVuZChub2RlLCBl
bmQpOwotICAgIHIuc2V0U3RhcnQobm9kZSwgc3RhcnQpOwotICAgIHJldHVybiByOwotICB9Owot
ICBlbHNlIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgewotICAgIHZhciByID0g
ZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKLSAgICByLm1vdmVUb0VsZW1lbnRUZXh0
KG5vZGUucGFyZW50Tm9kZSk7Ci0gICAgci5jb2xsYXBzZSh0cnVlKTsKLSAgICByLm1vdmVFbmQo
ImNoYXJhY3RlciIsIGVuZCk7Ci0gICAgci5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIHN0YXJ0KTsK
LSAgICByZXR1cm4gcjsKLSAgfTsKLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihlKSB7Ci0g
ICAgZm9yICh2YXIgY291bnQgPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBjb3VudCA+IDA7IC0tY291
bnQpCi0gICAgICBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Ci0gICAgcmV0dXJuIGU7Ci0g
IH0KLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHsKLSAgICBy
ZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHsKLSAgICBpZiAocGFyZW50LmNvbnRhaW5z
KQotICAgICAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7Ci0gICAgd2hpbGUgKGNoaWxk
ID0gY2hpbGQucGFyZW50Tm9kZSkKLSAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWN0aXZlRWx0KCkgeyByZXR1cm4gZG9jdW1lbnQuYWN0
aXZlRWxlbWVudDsgfQotICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSB0aHJvd3MgdW5zcGVjaWZp
ZWQgZXJyb3Igd2hlbiB0b3VjaGluZwotICAvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIHNv
bWUgY2FzZXMgKGR1cmluZyBsb2FkaW5nLCBpbiBpZnJhbWUpCi0gIGlmIChpZV91cHRvMTApIGFj
dGl2ZUVsdCA9IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVF
bGVtZW50OyB9Ci0gICAgY2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9keTsgfQotICB9Owot
Ci0gIGZ1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIlxcYiIgKyBj
bHMgKyAiXFxiXFxzKiIpOyB9Ci0gIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwgY2xzKSB7Ci0gICAg
dmFyIHRlc3QgPSBjbGFzc1Rlc3QoY2xzKTsKLSAgICBpZiAodGVzdC50ZXN0KG5vZGUuY2xhc3NO
YW1lKSkgbm9kZS5jbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKHRlc3QsICIiKTsK
LSAgfQotICBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHsKLSAgICBpZiAoIWNsYXNzVGVz
dChjbHMpLnRlc3Qobm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSArPSAiICIgKyBjbHM7
Ci0gIH0KLSAgZnVuY3Rpb24gam9pbkNsYXNzZXMoYSwgYikgewotICAgIHZhciBhcyA9IGEuc3Bs
aXQoIiAiKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQotICAgICAg
aWYgKGFzW2ldICYmICFjbGFzc1Rlc3QoYXNbaV0pLnRlc3QoYikpIGIgKz0gIiAiICsgYXNbaV07
Ci0gICAgcmV0dXJuIGI7Ci0gIH0KLQotICAvLyBXSU5ET1ctV0lERSBFVkVOVFMKLQotICAvLyBU
aGVzZSBtdXN0IGJlIGhhbmRsZWQgY2FyZWZ1bGx5LCBiZWNhdXNlIG5haXZlbHkgcmVnaXN0ZXJp
bmcgYQotICAvLyBoYW5kbGVyIGZvciBlYWNoIGVkaXRvciB3aWxsIGNhdXNlIHRoZSBlZGl0b3Jz
IHRvIG5ldmVyIGJlCi0gIC8vIGdhcmJhZ2UgY29sbGVjdGVkLgotCi0gIGZ1bmN0aW9uIGZvckVh
Y2hDb2RlTWlycm9yKGYpIHsKLSAgICBpZiAoIWRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSkgcmV0dXJuOwotICAgIHZhciBieUNsYXNzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCJDb2RlTWlycm9yIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
eUNsYXNzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgY20gPSBieUNsYXNzW2ldLkNvZGVNaXJy
b3I7Ci0gICAgICBpZiAoY20pIGYoY20pOwotICAgIH0KLSAgfQotCi0gIHZhciBnbG9iYWxzUmVn
aXN0ZXJlZCA9IGZhbHNlOwotICBmdW5jdGlvbiBlbnN1cmVHbG9iYWxIYW5kbGVycygpIHsKLSAg
ICBpZiAoZ2xvYmFsc1JlZ2lzdGVyZWQpIHJldHVybjsKLSAgICByZWdpc3Rlckdsb2JhbEhhbmRs
ZXJzKCk7Ci0gICAgZ2xvYmFsc1JlZ2lzdGVyZWQgPSB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIHJl
Z2lzdGVyR2xvYmFsSGFuZGxlcnMoKSB7Ci0gICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMs
IHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy4KLSAgICB2YXIgcmVzaXplVGltZXI7
Ci0gICAgb24od2luZG93LCAicmVzaXplIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAocmVzaXpl
VGltZXIgPT0gbnVsbCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAg
ICAgICByZXNpemVUaW1lciA9IG51bGw7Ci0gICAgICAgIGtub3duU2Nyb2xsYmFyV2lkdGggPSBu
dWxsOwotICAgICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7Ci0gICAgICB9LCAxMDAp
OwotICAgIH0pOwotICAgIC8vIFdoZW4gdGhlIHdpbmRvdyBsb3NlcyBmb2N1cywgd2Ugd2FudCB0
byBzaG93IHRoZSBlZGl0b3IgYXMgYmx1cnJlZAotICAgIG9uKHdpbmRvdywgImJsdXIiLCBmdW5j
dGlvbigpIHsKLSAgICAgIGZvckVhY2hDb2RlTWlycm9yKG9uQmx1cik7Ci0gICAgfSk7Ci0gIH0K
LQotICAvLyBGRUFUVVJFIERFVEVDVElPTgotCi0gIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wCi0g
IHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewotICAgIC8vIFRoZXJlIGlzICpzb21lKiBr
aW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IEkKLSAgICAvLyBjb3Vs
ZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuCi0gICAgaWYgKGllX3VwdG84KSByZXR1cm4gZmFsc2U7
Ci0gICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7Ci0gICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRp
diB8fCAiZHJhZ0Ryb3AiIGluIGRpdjsKLSAgfSgpOwotCi0gIHZhciBrbm93blNjcm9sbGJhcldp
ZHRoOwotICBmdW5jdGlvbiBzY3JvbGxiYXJXaWR0aChtZWFzdXJlKSB7Ci0gICAgaWYgKGtub3du
U2Nyb2xsYmFyV2lkdGggIT0gbnVsbCkgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGg7Ci0gICAg
dmFyIHRlc3QgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1
MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFz
dXJlLCB0ZXN0KTsKLSAgICBpZiAodGVzdC5vZmZzZXRXaWR0aCkKLSAgICAgIGtub3duU2Nyb2xs
YmFyV2lkdGggPSB0ZXN0Lm9mZnNldEhlaWdodCAtIHRlc3QuY2xpZW50SGVpZ2h0OwotICAgIHJl
dHVybiBrbm93blNjcm9sbGJhcldpZHRoIHx8IDA7Ci0gIH0KLQotICB2YXIgendzcFN1cHBvcnRl
ZDsKLSAgZnVuY3Rpb24gemVyb1dpZHRoRWxlbWVudChtZWFzdXJlKSB7Ci0gICAgaWYgKHp3c3BT
dXBwb3J0ZWQgPT0gbnVsbCkgewotICAgICAgdmFyIHRlc3QgPSBlbHQoInNwYW4iLCAiXHUyMDBi
Iik7Ci0gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoInNwYW4iLCBbdGVz
dCwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKTsKLSAgICAgIGlmIChtZWFzdXJlLmZp
cnN0Q2hpbGQub2Zmc2V0SGVpZ2h0ICE9IDApCi0gICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0
Lm9mZnNldFdpZHRoIDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICFpZV91cHRvNzsK
LSAgICB9Ci0gICAgaWYgKHp3c3BTdXBwb3J0ZWQpIHJldHVybiBlbHQoInNwYW4iLCAiXHUyMDBi
Iik7Ci0gICAgZWxzZSByZXR1cm4gZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51bGwsICJkaXNwbGF5
OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpOwotICB9Ci0K
LSAgLy8gRmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZv
ciBiaWRpIHRleHQKLSAgdmFyIGJhZEJpZGlSZWN0czsKLSAgZnVuY3Rpb24gaGFzQmFkQmlkaVJl
Y3RzKG1lYXN1cmUpIHsKLSAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHJldHVybiBiYWRC
aWRpUmVjdHM7Ci0gICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCJBXHUwNjJlQSIpKTsKLSAgICB2YXIgcjAgPSByYW5nZSh0
eHQsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIGlmIChyMC5sZWZ0ID09IHIw
LnJpZ2h0KSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIHIxID0gcmFuZ2UodHh0LCAxLCAyKS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0
IC0gcjAucmlnaHQgPCAzKTsKLSAgfQotCi0gIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJv
a2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCi0gIC8vIGFsdGVybmF0aXZlIHdheSB0
byBzcGxpdCBsaW5lcy4KLSAgdmFyIHNwbGl0TGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMg
PSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7Ci0g
ICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDsKLSAgICB3aGls
ZSAocG9zIDw9IGwpIHsKLSAgICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcyk7
Ci0gICAgICBpZiAobmwgPT0gLTEpIG5sID0gc3RyaW5nLmxlbmd0aDsKLSAgICAgIHZhciBsaW5l
ID0gc3RyaW5nLnNsaWNlKHBvcywgc3RyaW5nLmNoYXJBdChubCAtIDEpID09ICJcciIgPyBubCAt
IDEgOiBubCk7Ci0gICAgICB2YXIgcnQgPSBsaW5lLmluZGV4T2YoIlxyIik7Ci0gICAgICBpZiAo
cnQgIT0gLTEpIHsKLSAgICAgICAgcmVzdWx0LnB1c2gobGluZS5zbGljZSgwLCBydCkpOwotICAg
ICAgICBwb3MgKz0gcnQgKyAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0LnB1c2go
bGluZSk7Ci0gICAgICAgIHBvcyA9IG5sICsgMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfSA6IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgvXHJc
bj98XG4vKTt9OwotCi0gIHZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8g
ZnVuY3Rpb24odGUpIHsKLSAgICB0cnkgeyByZXR1cm4gdGUuc2VsZWN0aW9uU3RhcnQgIT0gdGUu
c2VsZWN0aW9uRW5kOyB9Ci0gICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgfSA6IGZ1
bmN0aW9uKHRlKSB7Ci0gICAgdHJ5IHt2YXIgcmFuZ2UgPSB0ZS5vd25lckRvY3VtZW50LnNlbGVj
dGlvbi5jcmVhdGVSYW5nZSgpO30KLSAgICBjYXRjaChlKSB7fQotICAgIGlmICghcmFuZ2UgfHwg
cmFuZ2UucGFyZW50RWxlbWVudCgpICE9IHRlKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJh
bmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLCByYW5nZSkgIT0gMDsKLSAgfTsKLQot
ICB2YXIgaGFzQ29weUV2ZW50ID0gKGZ1bmN0aW9uKCkgewotICAgIHZhciBlID0gZWx0KCJkaXYi
KTsKLSAgICBpZiAoIm9uY29weSIgaW4gZSkgcmV0dXJuIHRydWU7Ci0gICAgZS5zZXRBdHRyaWJ1
dGUoIm9uY29weSIsICJyZXR1cm47Iik7Ci0gICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAi
ZnVuY3Rpb24iOwotICB9KSgpOwotCi0gIC8vIEtFWSBOQU1FUwotCi0gIHZhciBrZXlOYW1lcyA9
IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEzOiAiRW50ZXIiLCAxNjog
IlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLAotICAgICAgICAgICAgICAgICAgMTk6ICJQ
YXVzZSIsIDIwOiAiQ2Fwc0xvY2siLCAyNzogIkVzYyIsIDMyOiAiU3BhY2UiLCAzMzogIlBhZ2VV
cCIsIDM0OiAiUGFnZURvd24iLCAzNTogIkVuZCIsCi0gICAgICAgICAgICAgICAgICAzNjogIkhv
bWUiLCAzNzogIkxlZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQwOiAiRG93biIsIDQ0OiAi
UHJpbnRTY3JuIiwgNDU6ICJJbnNlcnQiLAotICAgICAgICAgICAgICAgICAgNDY6ICJEZWxldGUi
LCA1OTogIjsiLCA2MTogIj0iLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxMDc6
ICI9IiwgMTA5OiAiLSIsIDEyNzogIkRlbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAxNzM6ICIt
IiwgMTg2OiAiOyIsIDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6
ICIvIiwgMTkyOiAiYCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsCi0gICAgICAgICAgICAgICAgICAy
MjE6ICJdIiwgMjIyOiAiJyIsIDYzMjMyOiAiVXAiLCA2MzIzMzogIkRvd24iLCA2MzIzNDogIkxl
ZnQiLCA2MzIzNTogIlJpZ2h0IiwgNjMyNzI6ICJEZWxldGUiLAotICAgICAgICAgICAgICAgICAg
NjMyNzM6ICJIb21lIiwgNjMyNzU6ICJFbmQiLCA2MzI3NjogIlBhZ2VVcCIsIDYzMjc3OiAiUGFn
ZURvd24iLCA2MzMwMjogIkluc2VydCJ9OwotICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFt
ZXM7Ci0gIChmdW5jdGlvbigpIHsKLSAgICAvLyBOdW1iZXIga2V5cwotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTA7IGkrKykga2V5TmFtZXNbaSArIDQ4XSA9IGtleU5hbWVzW2kgKyA5Nl0gPSBT
dHJpbmcoaSk7Ci0gICAgLy8gQWxwaGFiZXRpYyBrZXlzCi0gICAgZm9yICh2YXIgaSA9IDY1OyBp
IDw9IDkwOyBpKyspIGtleU5hbWVzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsKLSAgICAv
LyBGdW5jdGlvbiBrZXlzCi0gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykga2V5TmFt
ZXNbaSArIDExMV0gPSBrZXlOYW1lc1tpICsgNjMyMzVdID0gIkYiICsgaTsKLSAgfSkoKTsKLQot
ICAvLyBCSURJIEhFTFBFUlMKLQotICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVy
LCBmcm9tLCB0bywgZikgewotICAgIGlmICghb3JkZXIpIHJldHVybiBmKGZyb20sIHRvLCAibHRy
Iik7Ci0gICAgdmFyIGZvdW5kID0gZmFsc2U7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRl
ci5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKLSAgICAgIGlmIChw
YXJ0LmZyb20gPCB0byAmJiBwYXJ0LnRvID4gZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8g
PT0gZnJvbSkgewotICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWlu
KHBhcnQudG8sIHRvKSwgcGFydC5sZXZlbCA9PSAxID8gInJ0bCIgOiAibHRyIik7Ci0gICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgZihmcm9tLCB0
bywgImx0ciIpOwotICB9Ci0KLSAgZnVuY3Rpb24gYmlkaUxlZnQocGFydCkgeyByZXR1cm4gcGFy
dC5sZXZlbCAlIDIgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9Ci0gIGZ1bmN0aW9uIGJpZGlSaWdo
dChwYXJ0KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQuZnJvbSA6IHBhcnQudG87IH0K
LQotICBmdW5jdGlvbiBsaW5lTGVmdChsaW5lKSB7IHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUp
OyByZXR1cm4gb3JkZXIgPyBiaWRpTGVmdChvcmRlclswXSkgOiAwOyB9Ci0gIGZ1bmN0aW9uIGxp
bmVSaWdodChsaW5lKSB7Ci0gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgaWYg
KCFvcmRlcikgcmV0dXJuIGxpbmUudGV4dC5sZW5ndGg7Ci0gICAgcmV0dXJuIGJpZGlSaWdodChs
c3Qob3JkZXIpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxpbmVTdGFydChjbSwgbGluZU4pIHsKLSAg
ICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7Ci0gICAgdmFyIHZpc3VhbCA9IHZp
c3VhbExpbmUobGluZSk7Ci0gICAgaWYgKHZpc3VhbCAhPSBsaW5lKSBsaW5lTiA9IGxpbmVObyh2
aXN1YWwpOwotICAgIHZhciBvcmRlciA9IGdldE9yZGVyKHZpc3VhbCk7Ci0gICAgdmFyIGNoID0g
IW9yZGVyID8gMCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVSaWdodCh2aXN1YWwpIDogbGlu
ZUxlZnQodmlzdWFsKTsKLSAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7Ci0gIH0KLSAgZnVuY3Rp
b24gbGluZUVuZChjbSwgbGluZU4pIHsKLSAgICB2YXIgbWVyZ2VkLCBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIGxpbmVOKTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxp
bmUpKSB7Ci0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsKLSAgICAgIGxp
bmVOID0gbnVsbDsKLSAgICB9Ci0gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAg
dmFyIGNoID0gIW9yZGVyID8gbGluZS50ZXh0Lmxlbmd0aCA6IG9yZGVyWzBdLmxldmVsICUgMiA/
IGxpbmVMZWZ0KGxpbmUpIDogbGluZVJpZ2h0KGxpbmUpOwotICAgIHJldHVybiBQb3MobGluZU4g
PT0gbnVsbCA/IGxpbmVObyhsaW5lKSA6IGxpbmVOLCBjaCk7Ci0gIH0KLQotICBmdW5jdGlvbiBj
b21wYXJlQmlkaUxldmVsKG9yZGVyLCBhLCBiKSB7Ci0gICAgdmFyIGxpbmVkaXIgPSBvcmRlclsw
XS5sZXZlbDsKLSAgICBpZiAoYSA9PSBsaW5lZGlyKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYiA9
PSBsaW5lZGlyKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEgPCBiOwotICB9Ci0gIHZhciBi
aWRpT3RoZXI7Ci0gIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgewotICAgIGJp
ZGlPdGhlciA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGZvdW5kOyBpIDwgb3JkZXIubGVu
Z3RoOyArK2kpIHsKLSAgICAgIHZhciBjdXIgPSBvcmRlcltpXTsKLSAgICAgIGlmIChjdXIuZnJv
bSA8IHBvcyAmJiBjdXIudG8gPiBwb3MpIHJldHVybiBpOwotICAgICAgaWYgKChjdXIuZnJvbSA9
PSBwb3MgfHwgY3VyLnRvID09IHBvcykpIHsKLSAgICAgICAgaWYgKGZvdW5kID09IG51bGwpIHsK
LSAgICAgICAgICBmb3VuZCA9IGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZl
bChvcmRlciwgY3VyLmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7Ci0gICAgICAgICAgaWYg
KGN1ci5mcm9tICE9IGN1ci50bykgYmlkaU90aGVyID0gZm91bmQ7Ci0gICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50bykg
YmlkaU90aGVyID0gaTsKLSAgICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUluTGlu
ZShsaW5lLCBwb3MsIGRpciwgYnlVbml0KSB7Ci0gICAgaWYgKCFieVVuaXQpIHJldHVybiBwb3Mg
KyBkaXI7Ci0gICAgZG8gcG9zICs9IGRpcjsKLSAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVu
ZGluZ0NoYXIobGluZS50ZXh0LmNoYXJBdChwb3MpKSk7Ci0gICAgcmV0dXJuIHBvczsKLSAgfQot
Ci0gIC8vIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIG1vdmUgJ3Zpc3VhbGx5JyB0aHJvdWdo
IGJpLWRpcmVjdGlvbmFsCi0gIC8vIHRleHQgLS0gaS5lLiwgcHJlc3NpbmcgbGVmdCBzaG91bGQg
bWFrZSB0aGUgY3Vyc29yIGdvIGxlZnQsIGV2ZW4KLSAgLy8gd2hlbiBpbiBSVEwgdGV4dC4gVGhl
IHRyaWNreSBwYXJ0IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kCi0gIC8vIExUUiB0ZXh0
IHRvdWNoIGVhY2ggb3RoZXIuIFRoaXMgb2Z0ZW4gcmVxdWlyZXMgdGhlIGN1cnNvciBvZmZzZXQK
LSAgLy8gdG8gbW92ZSBtb3JlIHRoYW4gb25lIHVuaXQsIGluIG9yZGVyIHRvIHZpc3VhbGx5IG1v
dmUgb25lIHVuaXQuCi0gIGZ1bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBi
eVVuaXQpIHsKLSAgICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmUpOwotICAgIGlmICghYmlkaSkg
cmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKLSAgICB2YXIg
cG9zID0gZ2V0QmlkaVBhcnRBdChiaWRpLCBzdGFydCksIHBhcnQgPSBiaWRpW3Bvc107Ci0gICAg
dmFyIHRhcmdldCA9IG1vdmVJbkxpbmUobGluZSwgc3RhcnQsIHBhcnQubGV2ZWwgJSAyID8gLWRp
ciA6IGRpciwgYnlVbml0KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgIGlmICh0YXJnZXQgPiBw
YXJ0LmZyb20gJiYgdGFyZ2V0IDwgcGFydC50bykgcmV0dXJuIHRhcmdldDsKLSAgICAgIGlmICh0
YXJnZXQgPT0gcGFydC5mcm9tIHx8IHRhcmdldCA9PSBwYXJ0LnRvKSB7Ci0gICAgICAgIGlmIChn
ZXRCaWRpUGFydEF0KGJpZGksIHRhcmdldCkgPT0gcG9zKSByZXR1cm4gdGFyZ2V0OwotICAgICAg
ICBwYXJ0ID0gYmlkaVtwb3MgKz0gZGlyXTsKLSAgICAgICAgcmV0dXJuIChkaXIgPiAwKSA9PSBw
YXJ0LmxldmVsICUgMiA/IHBhcnQudG8gOiBwYXJ0LmZyb207Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBwYXJ0ID0gYmlkaVtwb3MgKz0gZGlyXTsKLSAgICAgICAgaWYgKCFwYXJ0KSByZXR1cm4g
bnVsbDsKLSAgICAgICAgaWYgKChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUgMikKLSAgICAgICAg
ICB0YXJnZXQgPSBtb3ZlSW5MaW5lKGxpbmUsIHBhcnQudG8sIC0xLCBieVVuaXQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBwYXJ0LmZyb20sIDEs
IGJ5VW5pdCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxs
eShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKLSAgICB2YXIgdGFyZ2V0ID0gc3RhcnQgKyBk
aXI7Ci0gICAgaWYgKGJ5VW5pdCkgd2hpbGUgKHRhcmdldCA+IDAgJiYgaXNFeHRlbmRpbmdDaGFy
KGxpbmUudGV4dC5jaGFyQXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7Ci0gICAgcmV0dXJuIHRh
cmdldCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7Ci0g
IH0KLQotICAvLyBCaWRpcmVjdGlvbmFsIG9yZGVyaW5nIGFsZ29yaXRobQotICAvLyBTZWUgaHR0
cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5L3RyOS0xMy5odG1sIGZvciB0aGUgYWxnb3JpdGht
Ci0gIC8vIHRoYXQgdGhpcyAocGFydGlhbGx5KSBpbXBsZW1lbnRzLgotCi0gIC8vIE9uZS1jaGFy
IGNvZGVzIHVzZWQgZm9yIGNoYXJhY3RlciB0eXBlczoKLSAgLy8gTCAoTCk6ICAgTGVmdC10by1S
aWdodAotICAvLyBSIChSKTogICBSaWdodC10by1MZWZ0Ci0gIC8vIHIgKEFMKTogIFJpZ2h0LXRv
LUxlZnQgQXJhYmljCi0gIC8vIDEgKEVOKTogIEV1cm9wZWFuIE51bWJlcgotICAvLyArIChFUyk6
ICBFdXJvcGVhbiBOdW1iZXIgU2VwYXJhdG9yCi0gIC8vICUgKEVUKTogIEV1cm9wZWFuIE51bWJl
ciBUZXJtaW5hdG9yCi0gIC8vIG4gKEFOKTogIEFyYWJpYyBOdW1iZXIKLSAgLy8gLCAoQ1MpOiAg
Q29tbW9uIE51bWJlciBTZXBhcmF0b3IKLSAgLy8gbSAoTlNNKTogTm9uLVNwYWNpbmcgTWFyawot
ICAvLyBiIChCTik6ICBCb3VuZGFyeSBOZXV0cmFsCi0gIC8vIHMgKEIpOiAgIFBhcmFncmFwaCBT
ZXBhcmF0b3IKLSAgLy8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0b3IKLSAgLy8gdyAoV1MpOiAg
V2hpdGVzcGFjZQotICAvLyBOIChPTik6ICBPdGhlciBOZXV0cmFscwotCi0gIC8vIFJldHVybnMg
bnVsbCBpZiBjaGFyYWN0ZXJzIGFyZSBvcmRlcmVkIGFzIHRoZXkgYXBwZWFyCi0gIC8vIChsZWZ0
LXRvLXJpZ2h0KSwgb3IgYW4gYXJyYXkgb2Ygc2VjdGlvbnMgKHtmcm9tLCB0bywgbGV2ZWx9Ci0g
IC8vIG9iamVjdHMpIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIHZpc3VhbGx5Lgot
ICB2YXIgYmlkaU9yZGVyaW5nID0gKGZ1bmN0aW9uKCkgewotICAgIC8vIENoYXJhY3RlciB0eXBl
cyBmb3IgY29kZXBvaW50cyAwIHRvIDB4ZmYKLSAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJi
dHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5M
TExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExM
Tk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTEx
TkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExM
TExMTExMTExMTE4iOwotICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYw
MCB0byAweDZmZgotICAgIHZhciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1t
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1t
bW1tbW1tbW1tbXJycnJycnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tIjsKLSAgICBmdW5j
dGlvbiBjaGFyVHlwZShjb2RlKSB7Ci0gICAgICBpZiAoY29kZSA8PSAweGY3KSByZXR1cm4gbG93
VHlwZXMuY2hhckF0KGNvZGUpOwotICAgICAgZWxzZSBpZiAoMHg1OTAgPD0gY29kZSAmJiBjb2Rl
IDw9IDB4NWY0KSByZXR1cm4gIlIiOwotICAgICAgZWxzZSBpZiAoMHg2MDAgPD0gY29kZSAmJiBj
b2RlIDw9IDB4NmVkKSByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCk7Ci0g
ICAgICBlbHNlIGlmICgweDZlZSA8PSBjb2RlICYmIGNvZGUgPD0gMHg4YWMpIHJldHVybiAiciI7
Ci0gICAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgcmV0dXJu
ICJ3IjsKLSAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSByZXR1cm4gImIiOwotICAgICAg
ZWxzZSByZXR1cm4gIkwiOwotICAgIH0KLQotICAgIHZhciBiaWRpUkUgPSAvW1x1MDU5MC1cdTA1
ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vOwotICAgIHZhciBpc05ldXRyYWwgPSAvW3N0
d05dLywgaXNTdHJvbmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywgY291bnRz
QXNOdW0gPSAvWzFuXS87Ci0gICAgLy8gQnJvd3NlcnMgc2VlbSB0byBhbHdheXMgdHJlYXQgdGhl
IGJvdW5kYXJpZXMgb2YgYmxvY2sgZWxlbWVudHMgYXMgYmVpbmcgTC4KLSAgICB2YXIgb3V0ZXJU
eXBlID0gIkwiOwotCi0gICAgZnVuY3Rpb24gQmlkaVNwYW4obGV2ZWwsIGZyb20sIHRvKSB7Ci0g
ICAgICB0aGlzLmxldmVsID0gbGV2ZWw7Ci0gICAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRv
ID0gdG87Ci0gICAgfQotCi0gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cikgewotICAgICAgaWYgKCFi
aWRpUkUudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB2YXIgbGVuID0gc3RyLmxlbmd0
aCwgdHlwZXMgPSBbXTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCB0eXBlOyBpIDwgbGVuOyArK2kp
Ci0gICAgICAgIHR5cGVzLnB1c2godHlwZSA9IGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7
Ci0KLSAgICAgIC8vIFcxLiBFeGFtaW5lIGVhY2ggbm9uLXNwYWNpbmcgbWFyayAoTlNNKSBpbiB0
aGUgbGV2ZWwgcnVuLCBhbmQKLSAgICAgIC8vIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgTlNNIHRv
IHRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cwotICAgICAgLy8gY2hhcmFjdGVyLiBJZiB0aGUgTlNN
IGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGV2ZWwgcnVuLCBpdCB3aWxsCi0gICAgICAvLyBnZXQg
dGhlIHR5cGUgb2Ygc29yLgotICAgICAgZm9yICh2YXIgaSA9IDAsIHByZXYgPSBvdXRlclR5cGU7
IGkgPCBsZW47ICsraSkgewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBp
ZiAodHlwZSA9PSAibSIpIHR5cGVzW2ldID0gcHJldjsKLSAgICAgICAgZWxzZSBwcmV2ID0gdHlw
ZTsKLSAgICAgIH0KLQotICAgICAgLy8gVzIuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGlu
c3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyCi0gICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ry
b25nIHR5cGUgKFIsIEwsIEFMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbgotICAgICAgLy8gQUwg
aXMgZm91bmQsIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyIHRvIEFyYWJp
YwotICAgICAgLy8gbnVtYmVyLgotICAgICAgLy8gVzMuIENoYW5nZSBhbGwgQUxzIHRvIFIuCi0g
ICAgICBmb3IgKHZhciBpID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpIDwgbGVuOyArK2kpIHsKLSAg
ICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKLSAgICAgICAgaWYgKHR5cGUgPT0gIjEiICYmIGN1
ciA9PSAiciIpIHR5cGVzW2ldID0gIm4iOwotICAgICAgICBlbHNlIGlmIChpc1N0cm9uZy50ZXN0
KHR5cGUpKSB7IGN1ciA9IHR5cGU7IGlmICh0eXBlID09ICJyIikgdHlwZXNbaV0gPSAiUiI7IH0K
LSAgICAgIH0KLQotICAgICAgLy8gVzQuIEEgc2luZ2xlIEV1cm9wZWFuIHNlcGFyYXRvciBiZXR3
ZWVuIHR3byBFdXJvcGVhbiBudW1iZXJzCi0gICAgICAvLyBjaGFuZ2VzIHRvIGEgRXVyb3BlYW4g
bnVtYmVyLiBBIHNpbmdsZSBjb21tb24gc2VwYXJhdG9yIGJldHdlZW4KLSAgICAgIC8vIHR3byBu
dW1iZXJzIG9mIHRoZSBzYW1lIHR5cGUgY2hhbmdlcyB0byB0aGF0IHR5cGUuCi0gICAgICBmb3Ig
KHZhciBpID0gMSwgcHJldiA9IHR5cGVzWzBdOyBpIDwgbGVuIC0gMTsgKytpKSB7Ci0gICAgICAg
IHZhciB0eXBlID0gdHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlID09ICIrIiAmJiBwcmV2ID09
ICIxIiAmJiB0eXBlc1tpKzFdID09ICIxIikgdHlwZXNbaV0gPSAiMSI7Ci0gICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gIiwiICYmIHByZXYgPT0gdHlwZXNbaSsxXSAmJgotICAgICAgICAgICAgICAg
ICAocHJldiA9PSAiMSIgfHwgcHJldiA9PSAibiIpKSB0eXBlc1tpXSA9IHByZXY7Ci0gICAgICAg
IHByZXYgPSB0eXBlOwotICAgICAgfQotCi0gICAgICAvLyBXNS4gQSBzZXF1ZW5jZSBvZiBFdXJv
cGVhbiB0ZXJtaW5hdG9ycyBhZGphY2VudCB0byBFdXJvcGVhbgotICAgICAgLy8gbnVtYmVycyBj
aGFuZ2VzIHRvIGFsbCBFdXJvcGVhbiBudW1iZXJzLgotICAgICAgLy8gVzYuIE90aGVyd2lzZSwg
c2VwYXJhdG9ycyBhbmQgdGVybWluYXRvcnMgY2hhbmdlIHRvIE90aGVyCi0gICAgICAvLyBOZXV0
cmFsLgotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICB2YXIg
dHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBpZiAodHlwZSA9PSAiLCIpIHR5cGVzW2ldID0gIk4i
OwotICAgICAgICBlbHNlIGlmICh0eXBlID09ICIlIikgewotICAgICAgICAgIGZvciAodmFyIGVu
ZCA9IGkgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSAiJSI7ICsrZW5kKSB7fQotICAg
ICAgICAgIHZhciByZXBsYWNlID0gKGkgJiYgdHlwZXNbaS0xXSA9PSAiISIpIHx8IChlbmQgPCBs
ZW4gJiYgdHlwZXNbZW5kXSA9PSAiMSIpID8gIjEiIDogIk4iOwotICAgICAgICAgIGZvciAodmFy
IGogPSBpOyBqIDwgZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKLSAgICAgICAgICBpID0g
ZW5kIC0gMTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBXNy4gU2VhcmNoIGJhY2t3
YXJkcyBmcm9tIGVhY2ggaW5zdGFuY2Ugb2YgYSBFdXJvcGVhbiBudW1iZXIKLSAgICAgIC8vIHVu
dGlsIHRoZSBmaXJzdCBzdHJvbmcgdHlwZSAoUiwgTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW4g
TCBpcwotICAgICAgLy8gZm91bmQsIHRoZW4gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVh
biBudW1iZXIgdG8gTC4KLSAgICAgIGZvciAodmFyIGkgPSAwLCBjdXIgPSBvdXRlclR5cGU7IGkg
PCBsZW47ICsraSkgewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBpZiAo
Y3VyID09ICJMIiAmJiB0eXBlID09ICIxIikgdHlwZXNbaV0gPSAiTCI7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzU3Ryb25nLnRlc3QodHlwZSkpIGN1ciA9IHR5cGU7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IE4xLiBBIHNlcXVlbmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlCi0g
ICAgICAvLyBzdXJyb3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVz
IGhhcyB0aGUgc2FtZQotICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51
bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBSIGluCi0gICAgICAvLyB0ZXJtcyBvZiB0aGVpciBp
bmZsdWVuY2Ugb24gbmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKQotICAgICAgLy8g
YW5kIGVuZC1vZi1sZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJp
ZXMuCi0gICAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRp
bmcgZGlyZWN0aW9uLgotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAg
ICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlwZXNbaV0pKSB7Ci0gICAgICAgICAgZm9yICh2YXIg
ZW5kID0gaSArIDE7IGVuZCA8IGxlbiAmJiBpc05ldXRyYWwudGVzdCh0eXBlc1tlbmRdKTsgKytl
bmQpIHt9Ci0gICAgICAgICAgdmFyIGJlZm9yZSA9IChpID8gdHlwZXNbaS0xXSA6IG91dGVyVHlw
ZSkgPT0gIkwiOwotICAgICAgICAgIHZhciBhZnRlciA9IChlbmQgPCBsZW4gPyB0eXBlc1tlbmRd
IDogb3V0ZXJUeXBlKSA9PSAiTCI7Ci0gICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwg
YWZ0ZXIgPyAiTCIgOiAiUiI7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsr
aikgdHlwZXNbal0gPSByZXBsYWNlOwotICAgICAgICAgIGkgPSBlbmQgLSAxOwotICAgICAgICB9
Ci0gICAgICB9Ci0KLSAgICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQg
YWxnb3JpdGhtLCBpbiBvcmRlciB0byBhdm9pZAotICAgICAgLy8gYnVpbGRpbmcgdXAgYW4gYWN0
dWFsIGxldmVscyBhcnJheS4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUKLSAgICAgIC8vIGxl
dmVscyAoMCwgMSwgMikgaW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHRha2UKLSAg
ICAgIC8vIGV4cGxpY2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0
aGUgb3JkZXIgb24KLSAgICAgIC8vIHRoZSBmbHksIHdpdGhvdXQgZm9sbG93aW5nIHRoZSBsZXZl
bC1iYXNlZCBhbGdvcml0aG0uCi0gICAgICB2YXIgb3JkZXIgPSBbXSwgbTsKLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuOykgewotICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlw
ZXNbaV0pKSB7Ci0gICAgICAgICAgdmFyIHN0YXJ0ID0gaTsKLSAgICAgICAgICBmb3IgKCsraTsg
aSA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KLSAgICAgICAg
ICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBzdGFydCwgaSkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHZhciBwb3MgPSBpLCBhdCA9IG9yZGVyLmxlbmd0aDsKLSAgICAgICAgICBm
b3IgKCsraTsgaSA8IGxlbiAmJiB0eXBlc1tpXSAhPSAiTCI7ICsraSkge30KLSAgICAgICAgICBm
b3IgKHZhciBqID0gcG9zOyBqIDwgaTspIHsKLSAgICAgICAgICAgIGlmIChjb3VudHNBc051bS50
ZXN0KHR5cGVzW2pdKSkgewotICAgICAgICAgICAgICBpZiAocG9zIDwgaikgb3JkZXIuc3BsaWNl
KGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBqKSk7Ci0gICAgICAgICAgICAgIHZhciBuc3Rh
cnQgPSBqOwotICAgICAgICAgICAgICBmb3IgKCsrajsgaiA8IGkgJiYgY291bnRzQXNOdW0udGVz
dCh0eXBlc1tqXSk7ICsraikge30KLSAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBu
ZXcgQmlkaVNwYW4oMiwgbnN0YXJ0LCBqKSk7Ci0gICAgICAgICAgICAgIHBvcyA9IGo7Ci0gICAg
ICAgICAgICB9IGVsc2UgKytqOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9zIDwgaSkg
b3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGlmIChvcmRlclswXS5sZXZlbCA9PSAxICYmIChtID0gc3RyLm1hdGNo
KC9eXHMrLykpKSB7Ci0gICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDsKLSAgICAg
ICAgb3JkZXIudW5zaGlmdChuZXcgQmlkaVNwYW4oMCwgMCwgbVswXS5sZW5ndGgpKTsKLSAgICAg
IH0KLSAgICAgIGlmIChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xz
KyQvKSkpIHsKLSAgICAgICAgbHN0KG9yZGVyKS50byAtPSBtWzBdLmxlbmd0aDsKLSAgICAgICAg
b3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgbGVuIC0gbVswXS5sZW5ndGgsIGxlbikpOwotICAg
ICAgfQotICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRlcikubGV2ZWwpCi0gICAg
ICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKG9yZGVyWzBdLmxldmVsLCBsZW4sIGxlbikpOwot
Ci0gICAgICByZXR1cm4gb3JkZXI7Ci0gICAgfTsKLSAgfSkoKTsKLQotICAvLyBUSEUgRU5ECi0K
LSAgQ29kZU1pcnJvci52ZXJzaW9uID0gIjQuMi4wIjsKLQotICByZXR1cm4gQ29kZU1pcnJvcjsK
LX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL2Nzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9j
c3MuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDQ2ZGYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcworKysg
L2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi0vLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMp
IGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVycwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4g
TUlUIGxpY2Vuc2U6IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCi0KLShmdW5jdGlvbiht
b2QpIHsKLSAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUg
PT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCi0gICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2Rl
bWlycm9yIikpOwotICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVm
aW5lLmFtZCkgLy8gQU1ECi0gICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9k
KTsKLSAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgotICAgIG1vZChDb2RlTWlycm9yKTsKLX0p
KGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKLSJ1c2Ugc3RyaWN0IjsKLQotQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewotICBpZiAoIXBh
cnNlckNvbmZpZy5wcm9wZXJ0eUtleXdvcmRzKSBwYXJzZXJDb25maWcgPSBDb2RlTWlycm9yLnJl
c29sdmVNb2RlKCJ0ZXh0L2NzcyIpOwotCi0gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVu
dFVuaXQsCi0gICAgICB0b2tlbkhvb2tzID0gcGFyc2VyQ29uZmlnLnRva2VuSG9va3MsCi0gICAg
ICBtZWRpYVR5cGVzID0gcGFyc2VyQ29uZmlnLm1lZGlhVHlwZXMgfHwge30sCi0gICAgICBtZWRp
YUZlYXR1cmVzID0gcGFyc2VyQ29uZmlnLm1lZGlhRmVhdHVyZXMgfHwge30sCi0gICAgICBwcm9w
ZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMgfHwge30sCi0gICAg
ICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcubm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzIHx8IHt9LAotICAgICAgY29sb3JLZXl3b3JkcyA9IHBhcnNlckNvbmZp
Zy5jb2xvcktleXdvcmRzIHx8IHt9LAotICAgICAgdmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZp
Zy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25m
aWcuZm9udFByb3BlcnRpZXMgfHwge30sCi0gICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZp
Zy5hbGxvd05lc3RlZDsKLQotICB2YXIgdHlwZSwgb3ZlcnJpZGU7Ci0gIGZ1bmN0aW9uIHJldChz
dHlsZSwgdHApIHsgdHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7IH0KLQotICAvLyBUb2tlbml6ZXJz
Ci0KLSAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKLSAgICB2YXIgY2ggPSBz
dHJlYW0ubmV4dCgpOwotICAgIGlmICh0b2tlbkhvb2tzW2NoXSkgewotICAgICAgdmFyIHJlc3Vs
dCA9IHRva2VuSG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHJlc3VsdCAhPT0g
ZmFsc2UpIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChjaCA9PSAiQCIpIHsKLSAgICAg
IHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgIHJldHVybiByZXQoImRlZiIsIHN0
cmVhbS5jdXJyZW50KCkpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iIHx8IChjaCA9PSAifiIg
fHwgY2ggPT0gInwiKSAmJiBzdHJlYW0uZWF0KCI9IikpIHsKLSAgICAgIHJldHVybiByZXQobnVs
bCwgImNvbXBhcmUiKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7
Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKLSAgICAgIHJldHVybiBz
dGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICIjIikg
ewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwotICAgICAgcmV0dXJuIHJldCgi
YXRvbSIsICJoYXNoIik7Ci0gICAgfSBlbHNlIGlmIChjaCA9PSAiISIpIHsKLSAgICAgIHN0cmVh
bS5tYXRjaCgvXlxzKlx3Ki8pOwotICAgICAgcmV0dXJuIHJldCgia2V5d29yZCIsICJpbXBvcnRh
bnQiKTsKLSAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVh
bS5lYXQoL1xkLykpIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7Ci0gICAgICBy
ZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwotICAgIH0gZWxzZSBpZiAoY2ggPT09ICItIikg
ewotICAgICAgaWYgKC9bXGQuXS8udGVzdChzdHJlYW0ucGVlaygpKSkgewotICAgICAgICBzdHJl
YW0uZWF0V2hpbGUoL1tcdy4lXS8pOwotICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5p
dCIpOwotICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cdystLykpIHsKLSAgICAgICAg
cmV0dXJuIHJldCgibWV0YSIsICJtZXRhIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICgvWywr
PipcL10vLnRlc3QoY2gpKSB7Ci0gICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsK
LSAgICB9IGVsc2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16XVtfYS16
MC05LV0qL2kpKSB7Ci0gICAgICByZXR1cm4gcmV0KCJxdWFsaWZpZXIiLCAicXVhbGlmaWVyIik7
Ci0gICAgfSBlbHNlIGlmICgvWzo7e31cW1xdXChcKV0vLnRlc3QoY2gpKSB7Ci0gICAgICByZXR1
cm4gcmV0KG51bGwsIGNoKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICJ1IiAmJiBzdHJlYW0ubWF0
Y2goInJsKCIpKSB7Ci0gICAgICBzdHJlYW0uYmFja1VwKDEpOwotICAgICAgc3RhdGUudG9rZW5p
emUgPSB0b2tlblBhcmVudGhlc2l6ZWQ7Ci0gICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3
b3JkIik7Ci0gICAgfSBlbHNlIGlmICgvW1x3XFxcLV0vLnRlc3QoY2gpKSB7Ci0gICAgICBzdHJl
YW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7Ci0gICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3
b3JkIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiByZXQobnVsbCwgbnVsbCk7Ci0gICAg
fQotICB9Ci0KLSAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKLSAgICByZXR1cm4gZnVu
Y3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7Ci0g
ICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICBpZiAo
Y2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHsKLSAgICAgICAgICBpZiAocXVvdGUgPT0gIikiKSBz
dHJlYW0uYmFja1VwKDEpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVz
Y2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSAiXFwiOwotICAgICAgfQotICAgICAgaWYgKGNoID09
IHF1b3RlIHx8ICFlc2NhcGVkICYmIHF1b3RlICE9ICIpIikgc3RhdGUudG9rZW5pemUgPSBudWxs
OwotICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwotICAgIH07Ci0gIH0KLQot
ICBmdW5jdGlvbiB0b2tlblBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgewotICAgIHN0cmVh
bS5uZXh0KCk7IC8vIE11c3QgYmUgJygnCi0gICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwn
KV0vLCBmYWxzZSkpCi0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKCIpIik7Ci0g
ICAgZWxzZQotICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwotICAgIHJldHVybiByZXQobnVs
bCwgIigiKTsKLSAgfQotCi0gIC8vIENvbnRleHQgbWFuYWdlbWVudAotCi0gIGZ1bmN0aW9uIENv
bnRleHQodHlwZSwgaW5kZW50LCBwcmV2KSB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0
aGlzLmluZGVudCA9IGluZGVudDsKLSAgICB0aGlzLnByZXYgPSBwcmV2OwotICB9Ci0KLSAgZnVu
Y3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSkgewotICAgIHN0YXRlLmNvbnRl
eHQgPSBuZXcgQ29udGV4dCh0eXBlLCBzdHJlYW0uaW5kZW50YXRpb24oKSArIGluZGVudFVuaXQs
IHN0YXRlLmNvbnRleHQpOwotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgZnVuY3Rpb24gcG9w
Q29udGV4dChzdGF0ZSkgewotICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7
Ci0gICAgcmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBhc3Mo
dHlwZSwgc3RyZWFtLCBzdGF0ZSkgewotICAgIHJldHVybiBzdGF0ZXNbc3RhdGUuY29udGV4dC50
eXBlXSh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgfQotICBmdW5jdGlvbiBwb3BBbmRQYXNzKHR5
cGUsIHN0cmVhbSwgc3RhdGUsIG4pIHsKLSAgICBmb3IgKHZhciBpID0gbiB8fCAxOyBpID4gMDsg
aS0tKQotICAgICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKLSAgICByZXR1
cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgfQotCi0gIC8vIFBhcnNlcgotCi0gIGZ1
bmN0aW9uIHdvcmRBc1ZhbHVlKHN0cmVhbSkgewotICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJl
bnQoKS50b0xvd2VyQ2FzZSgpOwotICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blByb3BlcnR5
KHdvcmQpKQotICAgICAgb3ZlcnJpZGUgPSAiYXRvbSI7Ci0gICAgZWxzZSBpZiAoY29sb3JLZXl3
b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKLSAgICAgIG92ZXJyaWRlID0gImtleXdvcmQiOwot
ICAgIGVsc2UKLSAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlIjsKLSAgfQotCi0gIHZhciBzdGF0
ZXMgPSB7fTsKLQotICBzdGF0ZXMudG9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkg
ewotICAgIGlmICh0eXBlID09ICJ7IikgewotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRl
LCBzdHJlYW0sICJibG9jayIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAifSIgJiYgc3RhdGUu
Y29udGV4dC5wcmV2KSB7Ci0gICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSB7Ci0gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3Rh
dGUsIHN0cmVhbSwgIm1lZGlhIik7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJAZm9udC1mYWNl
IikgewotICAgICAgcmV0dXJuICJmb250X2ZhY2VfYmVmb3JlIjsKLSAgICB9IGVsc2UgaWYgKC9e
QCgtKG1venxtc3xvfHdlYmtpdCktKT9rZXlmcmFtZXMkLy50ZXN0KHR5cGUpKSB7Ci0gICAgICBy
ZXR1cm4gImtleWZyYW1lcyI7Ci0gICAgfSBlbHNlIGlmICh0eXBlICYmIHR5cGUuY2hhckF0KDAp
ID09ICJAIikgewotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJhdCIp
OwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaGFzaCIpIHsKLSAgICAgIG92ZXJyaWRlID0gImJ1
aWx0aW4iOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHsKLSAgICAgIG92ZXJyaWRl
ID0gInRhZyI7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJ2YXJpYWJsZS1kZWZpbml0aW9uIikg
ewotICAgICAgcmV0dXJuICJtYXliZXByb3AiOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaW50
ZXJwb2xhdGlvbiIpIHsKLSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAi
aW50ZXJwb2xhdGlvbiIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiOiIpIHsKLSAgICAgIHJl
dHVybiAicHNldWRvIjsKLSAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkICYmIHR5cGUgPT0gIigi
KSB7Ci0gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOwot
ICAgIH0KLSAgICByZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOwotICB9OwotCi0gIHN0YXRlcy5i
bG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAi
d29yZCIpIHsKLSAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgp
OwotICAgICAgaWYgKHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAg
ICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHkiOwotICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7
Ci0gICAgICB9IGVsc2UgaWYgKG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9w
ZXJ0eSh3b3JkKSkgewotICAgICAgICBvdmVycmlkZSA9ICJzdHJpbmctMiI7Ci0gICAgICAgIHJl
dHVybiAibWF5YmVwcm9wIjsKLSAgICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQpIHsKLSAgICAg
ICAgb3ZlcnJpZGUgPSBzdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpID8gInByb3BlcnR5IiA6
ICJ0YWciOwotICAgICAgICByZXR1cm4gImJsb2NrIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IG92ZXJyaWRlICs9ICIgZXJyb3IiOwotICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJtZXRhIikgewotICAgICAgcmV0dXJuICJibG9j
ayI7Ci0gICAgfSBlbHNlIGlmICghYWxsb3dOZXN0ZWQgJiYgKHR5cGUgPT0gImhhc2giIHx8IHR5
cGUgPT0gInF1YWxpZmllciIpKSB7Ci0gICAgICBvdmVycmlkZSA9ICJlcnJvciI7Ci0gICAgICBy
ZXR1cm4gImJsb2NrIjsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0YXRlcy50b3AodHlw
ZSwgc3RyZWFtLCBzdGF0ZSk7Ci0gICAgfQotICB9OwotCi0gIHN0YXRlcy5tYXliZXByb3AgPSBm
dW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1
cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInByb3AiKTsKLSAgICByZXR1cm4gcGFzcyh0
eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgfTsKLQotICBzdGF0ZXMucHJvcCA9IGZ1bmN0aW9uKHR5
cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybiBwb3BDb250
ZXh0KHN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIgJiYgYWxsb3dOZXN0ZWQpIHJldHVybiBw
dXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicHJvcEJsb2NrIik7Ci0gICAgaWYgKHR5cGUgPT0g
In0iIHx8IHR5cGUgPT0gInsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRl
KTsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFt
LCAicGFyZW5zIik7Ci0KLSAgICBpZiAodHlwZSA9PSAiaGFzaCIgJiYgIS9eIyhbMC05YS1mQS1m
XXszfXxbMC05YS1mQS1mXXs2fSkkLy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7Ci0gICAgICBv
dmVycmlkZSArPSAiIGVycm9yIjsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIndvcmQiKSB7Ci0g
ICAgICB3b3JkQXNWYWx1ZShzdHJlYW0pOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaW50ZXJw
b2xhdGlvbiIpIHsKLSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiaW50
ZXJwb2xhdGlvbiIpOwotICAgIH0KLSAgICByZXR1cm4gInByb3AiOwotICB9OwotCi0gIHN0YXRl
cy5wcm9wQmxvY2sgPSBmdW5jdGlvbih0eXBlLCBfc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmICh0
eXBlID09ICJ9IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09ICJ3
b3JkIikgeyBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7IHJldHVybiAibWF5YmVwcm9wIjsgfQotICAg
IHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Ci0gIH07Ci0KLSAgc3RhdGVzLnBhcmVucyA9IGZ1
bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlw
ZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICAgIGlm
ICh0eXBlID09ICIpIikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJwYXJlbnMiKTsKLSAgICBp
ZiAodHlwZSA9PSAid29yZCIpIHdvcmRBc1ZhbHVlKHN0cmVhbSk7Ci0gICAgcmV0dXJuICJwYXJl
bnMiOwotICB9OwotCi0gIHN0YXRlcy5wc2V1ZG8gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7Ci0gICAgICBvdmVycmlkZSA9ICJ2YXJp
YWJsZS0zIjsKLSAgICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Ci0gICAgfQotICAgIHJl
dHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICB9OwotCi0gIHN0YXRlcy5tZWRpYSA9
IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJl
dHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAibWVkaWFfcGFyZW5zIik7Ci0gICAgaWYg
KHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAg
ICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKSAmJiBwdXNoQ29udGV4
dChzdGF0ZSwgc3RyZWFtLCBhbGxvd05lc3RlZCA/ICJibG9jayIgOiAidG9wIik7Ci0KLSAgICBp
ZiAodHlwZSA9PSAid29yZCIpIHsKLSAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50
b0xvd2VyQ2FzZSgpOwotICAgICAgaWYgKHdvcmQgPT0gIm9ubHkiIHx8IHdvcmQgPT0gIm5vdCIg
fHwgd29yZCA9PSAiYW5kIikKLSAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7Ci0gICAgICBl
bHNlIGlmIChtZWRpYVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKQotICAgICAgICBvdmVycmlk
ZSA9ICJhdHRyaWJ1dGUiOwotICAgICAgZWxzZSBpZiAobWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9w
ZXJ0eSh3b3JkKSkKLSAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHkiOwotICAgICAgZWxzZQot
ICAgICAgICBvdmVycmlkZSA9ICJlcnJvciI7Ci0gICAgfQotICAgIHJldHVybiBzdGF0ZS5jb250
ZXh0LnR5cGU7Ci0gIH07Ci0KLSAgc3RhdGVzLm1lZGlhX3BhcmVucyA9IGZ1bmN0aW9uKHR5cGUs
IHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0
KHN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAifSIpIHJldHVybiBwb3BB
bmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUsIDIpOwotICAgIHJldHVybiBzdGF0ZXMubWVkaWEo
dHlwZSwgc3RyZWFtLCBzdGF0ZSk7Ci0gIH07Ci0KLSAgc3RhdGVzLmZvbnRfZmFjZV9iZWZvcmUg
PSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKQot
ICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJmb250X2ZhY2UiKTsKLSAg
ICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgfTsKLQotICBzdGF0ZXMuZm9u
dF9mYWNlID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmICh0eXBlID09
ICJ9IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09ICJ3b3JkIikg
ewotICAgICAgaWYgKCFmb250UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVu
dCgpLnRvTG93ZXJDYXNlKCkpKQotICAgICAgICBvdmVycmlkZSA9ICJlcnJvciI7Ci0gICAgICBl
bHNlCi0gICAgICAgIG92ZXJyaWRlID0gInByb3BlcnR5IjsKLSAgICAgIHJldHVybiAibWF5YmVw
cm9wIjsKLSAgICB9Ci0gICAgcmV0dXJuICJmb250X2ZhY2UiOwotICB9OwotCi0gIHN0YXRlcy5r
ZXlmcmFtZXMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUg
PT0gIndvcmQiKSB7IG92ZXJyaWRlID0gInZhcmlhYmxlIjsgcmV0dXJuICJrZXlmcmFtZXMiOyB9
Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwg
InRvcCIpOwotICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICB9OwotCi0g
IHN0YXRlcy5hdCA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlw
ZSA9PSAiOyIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIg
fHwgdHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwot
ICAgIGlmICh0eXBlID09ICJ3b3JkIikgb3ZlcnJpZGUgPSAidGFnIjsKLSAgICBlbHNlIGlmICh0
eXBlID09ICJoYXNoIikgb3ZlcnJpZGUgPSAiYnVpbHRpbiI7Ci0gICAgcmV0dXJuICJhdCI7Ci0g
IH07Ci0KLSAgc3RhdGVzLmludGVycG9sYXRpb24gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0
YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Ci0g
ICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIjsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKLSAgICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSBvdmVycmlkZSA9
ICJlcnJvciI7Ci0gICAgcmV0dXJuICJpbnRlcnBvbGF0aW9uIjsKLSAgfTsKLQotICByZXR1cm4g
ewotICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKLSAgICAgIHJldHVybiB7dG9rZW5p
emU6IG51bGwsCi0gICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKLSAgICAgICAgICAgICAgY29u
dGV4dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OwotICAgIH0sCi0KLSAg
ICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgaWYgKCFzdGF0ZS50b2tl
bml6ZSAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7Ci0gICAgICB2YXIgc3R5bGUg
PSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKLSAgICAgIGlm
IChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT0gIm9iamVjdCIpIHsKLSAgICAgICAgdHlwZSA9IHN0
eWxlWzFdOwotICAgICAgICBzdHlsZSA9IHN0eWxlWzBdOwotICAgICAgfQotICAgICAgb3ZlcnJp
ZGUgPSBzdHlsZTsKLSAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0YXRlLnN0YXRlXSh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKLSAgICAgIHJldHVybiBvdmVycmlkZTsKLSAgICB9LAotCi0gICAg
aW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Ci0gICAgICB2YXIgY3ggPSBzdGF0
ZS5jb250ZXh0LCBjaCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwotICAgICAg
dmFyIGluZGVudCA9IGN4LmluZGVudDsKLSAgICAgIGlmIChjeC50eXBlID09ICJwcm9wIiAmJiAo
Y2ggPT0gIn0iIHx8IGNoID09ICIpIikpIGN4ID0gY3gucHJldjsKLSAgICAgIGlmIChjeC5wcmV2
ICYmCi0gICAgICAgICAgKGNoID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8IGN4LnR5
cGUgPT0gInRvcCIgfHwgY3gudHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlwZSA9PSAi
Zm9udF9mYWNlIikgfHwKLSAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09ICJwYXJl
bnMiIHx8IGN4LnR5cGUgPT0gIm1lZGlhX3BhcmVucyIpIHx8Ci0gICAgICAgICAgIGNoID09ICJ7
IiAmJiAoY3gudHlwZSA9PSAiYXQiIHx8IGN4LnR5cGUgPT0gIm1lZGlhIikpKSB7Ci0gICAgICAg
IGluZGVudCA9IGN4LmluZGVudCAtIGluZGVudFVuaXQ7Ci0gICAgICAgIGN4ID0gY3gucHJldjsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBpbmRlbnQ7Ci0gICAgfSwKLQotICAgIGVsZWN0cmljQ2hh
cnM6ICJ9IiwKLSAgICBibG9ja0NvbW1lbnRTdGFydDogIi8qIiwKLSAgICBibG9ja0NvbW1lbnRF
bmQ6ICIqLyIsCi0gICAgZm9sZDogImJyYWNlIgotICB9OwotfSk7Ci0KLSAgZnVuY3Rpb24ga2V5
U2V0KGFycmF5KSB7Ci0gICAgdmFyIGtleXMgPSB7fTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICBrZXlzW2FycmF5W2ldXSA9IHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBrZXlzOwotICB9Ci0KLSAgdmFyIG1lZGlhVHlwZXNfID0gWwotICAgICJh
bGwiLCAiYXVyYWwiLCAiYnJhaWxsZSIsICJoYW5kaGVsZCIsICJwcmludCIsICJwcm9qZWN0aW9u
IiwgInNjcmVlbiIsCi0gICAgInR0eSIsICJ0diIsICJlbWJvc3NlZCIKLSAgXSwgbWVkaWFUeXBl
cyA9IGtleVNldChtZWRpYVR5cGVzXyk7Ci0KLSAgdmFyIG1lZGlhRmVhdHVyZXNfID0gWwotICAg
ICJ3aWR0aCIsICJtaW4td2lkdGgiLCAibWF4LXdpZHRoIiwgImhlaWdodCIsICJtaW4taGVpZ2h0
IiwgIm1heC1oZWlnaHQiLAotICAgICJkZXZpY2Utd2lkdGgiLCAibWluLWRldmljZS13aWR0aCIs
ICJtYXgtZGV2aWNlLXdpZHRoIiwgImRldmljZS1oZWlnaHQiLAotICAgICJtaW4tZGV2aWNlLWhl
aWdodCIsICJtYXgtZGV2aWNlLWhlaWdodCIsICJhc3BlY3QtcmF0aW8iLAotICAgICJtaW4tYXNw
ZWN0LXJhdGlvIiwgIm1heC1hc3BlY3QtcmF0aW8iLCAiZGV2aWNlLWFzcGVjdC1yYXRpbyIsCi0g
ICAgIm1pbi1kZXZpY2UtYXNwZWN0LXJhdGlvIiwgIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvIiwg
ImNvbG9yIiwgIm1pbi1jb2xvciIsCi0gICAgIm1heC1jb2xvciIsICJjb2xvci1pbmRleCIsICJt
aW4tY29sb3ItaW5kZXgiLCAibWF4LWNvbG9yLWluZGV4IiwKLSAgICAibW9ub2Nocm9tZSIsICJt
aW4tbW9ub2Nocm9tZSIsICJtYXgtbW9ub2Nocm9tZSIsICJyZXNvbHV0aW9uIiwKLSAgICAibWlu
LXJlc29sdXRpb24iLCAibWF4LXJlc29sdXRpb24iLCAic2NhbiIsICJncmlkIgotICBdLCBtZWRp
YUZlYXR1cmVzID0ga2V5U2V0KG1lZGlhRmVhdHVyZXNfKTsKLQotICB2YXIgcHJvcGVydHlLZXl3
b3Jkc18gPSBbCi0gICAgImFsaWduLWNvbnRlbnQiLCAiYWxpZ24taXRlbXMiLCAiYWxpZ24tc2Vs
ZiIsICJhbGlnbm1lbnQtYWRqdXN0IiwKLSAgICAiYWxpZ25tZW50LWJhc2VsaW5lIiwgImFuY2hv
ci1wb2ludCIsICJhbmltYXRpb24iLCAiYW5pbWF0aW9uLWRlbGF5IiwKLSAgICAiYW5pbWF0aW9u
LWRpcmVjdGlvbiIsICJhbmltYXRpb24tZHVyYXRpb24iLCAiYW5pbWF0aW9uLWZpbGwtbW9kZSIs
Ci0gICAgImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiLCAiYW5pbWF0aW9uLW5hbWUiLCAiYW5p
bWF0aW9uLXBsYXktc3RhdGUiLAotICAgICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwgImFw
cGVhcmFuY2UiLCAiYXppbXV0aCIsICJiYWNrZmFjZS12aXNpYmlsaXR5IiwKLSAgICAiYmFja2dy
b3VuZCIsICJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiLCAiYmFja2dyb3VuZC1jbGlwIiwgImJhY2tn
cm91bmQtY29sb3IiLAotICAgICJiYWNrZ3JvdW5kLWltYWdlIiwgImJhY2tncm91bmQtb3JpZ2lu
IiwgImJhY2tncm91bmQtcG9zaXRpb24iLAotICAgICJiYWNrZ3JvdW5kLXJlcGVhdCIsICJiYWNr
Z3JvdW5kLXNpemUiLCAiYmFzZWxpbmUtc2hpZnQiLCAiYmluZGluZyIsCi0gICAgImJsZWVkIiwg
ImJvb2ttYXJrLWxhYmVsIiwgImJvb2ttYXJrLWxldmVsIiwgImJvb2ttYXJrLXN0YXRlIiwKLSAg
ICAiYm9va21hcmstdGFyZ2V0IiwgImJvcmRlciIsICJib3JkZXItYm90dG9tIiwgImJvcmRlci1i
b3R0b20tY29sb3IiLAotICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwgImJvcmRlci1i
b3R0b20tcmlnaHQtcmFkaXVzIiwKLSAgICAiYm9yZGVyLWJvdHRvbS1zdHlsZSIsICJib3JkZXIt
Ym90dG9tLXdpZHRoIiwgImJvcmRlci1jb2xsYXBzZSIsCi0gICAgImJvcmRlci1jb2xvciIsICJi
b3JkZXItaW1hZ2UiLCAiYm9yZGVyLWltYWdlLW91dHNldCIsCi0gICAgImJvcmRlci1pbWFnZS1y
ZXBlYXQiLCAiYm9yZGVyLWltYWdlLXNsaWNlIiwgImJvcmRlci1pbWFnZS1zb3VyY2UiLAotICAg
ICJib3JkZXItaW1hZ2Utd2lkdGgiLCAiYm9yZGVyLWxlZnQiLCAiYm9yZGVyLWxlZnQtY29sb3Ii
LAotICAgICJib3JkZXItbGVmdC1zdHlsZSIsICJib3JkZXItbGVmdC13aWR0aCIsICJib3JkZXIt
cmFkaXVzIiwgImJvcmRlci1yaWdodCIsCi0gICAgImJvcmRlci1yaWdodC1jb2xvciIsICJib3Jk
ZXItcmlnaHQtc3R5bGUiLCAiYm9yZGVyLXJpZ2h0LXdpZHRoIiwKLSAgICAiYm9yZGVyLXNwYWNp
bmciLCAiYm9yZGVyLXN0eWxlIiwgImJvcmRlci10b3AiLCAiYm9yZGVyLXRvcC1jb2xvciIsCi0g
ICAgImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCAiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCAi
Ym9yZGVyLXRvcC1zdHlsZSIsCi0gICAgImJvcmRlci10b3Atd2lkdGgiLCAiYm9yZGVyLXdpZHRo
IiwgImJvdHRvbSIsICJib3gtZGVjb3JhdGlvbi1icmVhayIsCi0gICAgImJveC1zaGFkb3ciLCAi
Ym94LXNpemluZyIsICJicmVhay1hZnRlciIsICJicmVhay1iZWZvcmUiLCAiYnJlYWstaW5zaWRl
IiwKLSAgICAiY2FwdGlvbi1zaWRlIiwgImNsZWFyIiwgImNsaXAiLCAiY29sb3IiLCAiY29sb3It
cHJvZmlsZSIsICJjb2x1bW4tY291bnQiLAotICAgICJjb2x1bW4tZmlsbCIsICJjb2x1bW4tZ2Fw
IiwgImNvbHVtbi1ydWxlIiwgImNvbHVtbi1ydWxlLWNvbG9yIiwKLSAgICAiY29sdW1uLXJ1bGUt
c3R5bGUiLCAiY29sdW1uLXJ1bGUtd2lkdGgiLCAiY29sdW1uLXNwYW4iLCAiY29sdW1uLXdpZHRo
IiwKLSAgICAiY29sdW1ucyIsICJjb250ZW50IiwgImNvdW50ZXItaW5jcmVtZW50IiwgImNvdW50
ZXItcmVzZXQiLCAiY3JvcCIsICJjdWUiLAotICAgICJjdWUtYWZ0ZXIiLCAiY3VlLWJlZm9yZSIs
ICJjdXJzb3IiLCAiZGlyZWN0aW9uIiwgImRpc3BsYXkiLAotICAgICJkb21pbmFudC1iYXNlbGlu
ZSIsICJkcm9wLWluaXRpYWwtYWZ0ZXItYWRqdXN0IiwKLSAgICAiZHJvcC1pbml0aWFsLWFmdGVy
LWFsaWduIiwgImRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0IiwKLSAgICAiZHJvcC1pbml0aWFs
LWJlZm9yZS1hbGlnbiIsICJkcm9wLWluaXRpYWwtc2l6ZSIsICJkcm9wLWluaXRpYWwtdmFsdWUi
LAotICAgICJlbGV2YXRpb24iLCAiZW1wdHktY2VsbHMiLCAiZml0IiwgImZpdC1wb3NpdGlvbiIs
ICJmbGV4IiwgImZsZXgtYmFzaXMiLAotICAgICJmbGV4LWRpcmVjdGlvbiIsICJmbGV4LWZsb3ci
LCAiZmxleC1ncm93IiwgImZsZXgtc2hyaW5rIiwgImZsZXgtd3JhcCIsCi0gICAgImZsb2F0Iiwg
ImZsb2F0LW9mZnNldCIsICJmbG93LWZyb20iLCAiZmxvdy1pbnRvIiwgImZvbnQiLCAiZm9udC1m
ZWF0dXJlLXNldHRpbmdzIiwKLSAgICAiZm9udC1mYW1pbHkiLCAiZm9udC1rZXJuaW5nIiwgImZv
bnQtbGFuZ3VhZ2Utb3ZlcnJpZGUiLCAiZm9udC1zaXplIiwgImZvbnQtc2l6ZS1hZGp1c3QiLAot
ICAgICJmb250LXN0cmV0Y2giLCAiZm9udC1zdHlsZSIsICJmb250LXN5bnRoZXNpcyIsICJmb250
LXZhcmlhbnQiLAotICAgICJmb250LXZhcmlhbnQtYWx0ZXJuYXRlcyIsICJmb250LXZhcmlhbnQt
Y2FwcyIsICJmb250LXZhcmlhbnQtZWFzdC1hc2lhbiIsCi0gICAgImZvbnQtdmFyaWFudC1saWdh
dHVyZXMiLCAiZm9udC12YXJpYW50LW51bWVyaWMiLCAiZm9udC12YXJpYW50LXBvc2l0aW9uIiwK
LSAgICAiZm9udC13ZWlnaHQiLCAiZ3JpZCIsICJncmlkLWFyZWEiLCAiZ3JpZC1hdXRvLWNvbHVt
bnMiLCAiZ3JpZC1hdXRvLWZsb3ciLAotICAgICJncmlkLWF1dG8tcG9zaXRpb24iLCAiZ3JpZC1h
dXRvLXJvd3MiLCAiZ3JpZC1jb2x1bW4iLCAiZ3JpZC1jb2x1bW4tZW5kIiwKLSAgICAiZ3JpZC1j
b2x1bW4tc3RhcnQiLCAiZ3JpZC1yb3ciLCAiZ3JpZC1yb3ctZW5kIiwgImdyaWQtcm93LXN0YXJ0
IiwKLSAgICAiZ3JpZC10ZW1wbGF0ZSIsICJncmlkLXRlbXBsYXRlLWFyZWFzIiwgImdyaWQtdGVt
cGxhdGUtY29sdW1ucyIsCi0gICAgImdyaWQtdGVtcGxhdGUtcm93cyIsICJoYW5naW5nLXB1bmN0
dWF0aW9uIiwgImhlaWdodCIsICJoeXBoZW5zIiwKLSAgICAiaWNvbiIsICJpbWFnZS1vcmllbnRh
dGlvbiIsICJpbWFnZS1yZW5kZXJpbmciLCAiaW1hZ2UtcmVzb2x1dGlvbiIsCi0gICAgImlubGlu
ZS1ib3gtYWxpZ24iLCAianVzdGlmeS1jb250ZW50IiwgImxlZnQiLCAibGV0dGVyLXNwYWNpbmci
LAotICAgICJsaW5lLWJyZWFrIiwgImxpbmUtaGVpZ2h0IiwgImxpbmUtc3RhY2tpbmciLCAibGlu
ZS1zdGFja2luZy1ydWJ5IiwKLSAgICAibGluZS1zdGFja2luZy1zaGlmdCIsICJsaW5lLXN0YWNr
aW5nLXN0cmF0ZWd5IiwgImxpc3Qtc3R5bGUiLAotICAgICJsaXN0LXN0eWxlLWltYWdlIiwgImxp
c3Qtc3R5bGUtcG9zaXRpb24iLCAibGlzdC1zdHlsZS10eXBlIiwgIm1hcmdpbiIsCi0gICAgIm1h
cmdpbi1ib3R0b20iLCAibWFyZ2luLWxlZnQiLCAibWFyZ2luLXJpZ2h0IiwgIm1hcmdpbi10b3Ai
LAotICAgICJtYXJrZXItb2Zmc2V0IiwgIm1hcmtzIiwgIm1hcnF1ZWUtZGlyZWN0aW9uIiwgIm1h
cnF1ZWUtbG9vcCIsCi0gICAgIm1hcnF1ZWUtcGxheS1jb3VudCIsICJtYXJxdWVlLXNwZWVkIiwg
Im1hcnF1ZWUtc3R5bGUiLCAibWF4LWhlaWdodCIsCi0gICAgIm1heC13aWR0aCIsICJtaW4taGVp
Z2h0IiwgIm1pbi13aWR0aCIsICJtb3ZlLXRvIiwgIm5hdi1kb3duIiwgIm5hdi1pbmRleCIsCi0g
ICAgIm5hdi1sZWZ0IiwgIm5hdi1yaWdodCIsICJuYXYtdXAiLCAib2JqZWN0LWZpdCIsICJvYmpl
Y3QtcG9zaXRpb24iLAotICAgICJvcGFjaXR5IiwgIm9yZGVyIiwgIm9ycGhhbnMiLCAib3V0bGlu
ZSIsCi0gICAgIm91dGxpbmUtY29sb3IiLCAib3V0bGluZS1vZmZzZXQiLCAib3V0bGluZS1zdHls
ZSIsICJvdXRsaW5lLXdpZHRoIiwKLSAgICAib3ZlcmZsb3ciLCAib3ZlcmZsb3ctc3R5bGUiLCAi
b3ZlcmZsb3ctd3JhcCIsICJvdmVyZmxvdy14IiwgIm92ZXJmbG93LXkiLAotICAgICJwYWRkaW5n
IiwgInBhZGRpbmctYm90dG9tIiwgInBhZGRpbmctbGVmdCIsICJwYWRkaW5nLXJpZ2h0IiwgInBh
ZGRpbmctdG9wIiwKLSAgICAicGFnZSIsICJwYWdlLWJyZWFrLWFmdGVyIiwgInBhZ2UtYnJlYWst
YmVmb3JlIiwgInBhZ2UtYnJlYWstaW5zaWRlIiwKLSAgICAicGFnZS1wb2xpY3kiLCAicGF1c2Ui
LCAicGF1c2UtYWZ0ZXIiLCAicGF1c2UtYmVmb3JlIiwgInBlcnNwZWN0aXZlIiwKLSAgICAicGVy
c3BlY3RpdmUtb3JpZ2luIiwgInBpdGNoIiwgInBpdGNoLXJhbmdlIiwgInBsYXktZHVyaW5nIiwg
InBvc2l0aW9uIiwKLSAgICAicHJlc2VudGF0aW9uLWxldmVsIiwgInB1bmN0dWF0aW9uLXRyaW0i
LCAicXVvdGVzIiwgInJlZ2lvbi1icmVhay1hZnRlciIsCi0gICAgInJlZ2lvbi1icmVhay1iZWZv
cmUiLCAicmVnaW9uLWJyZWFrLWluc2lkZSIsICJyZWdpb24tZnJhZ21lbnQiLAotICAgICJyZW5k
ZXJpbmctaW50ZW50IiwgInJlc2l6ZSIsICJyZXN0IiwgInJlc3QtYWZ0ZXIiLCAicmVzdC1iZWZv
cmUiLCAicmljaG5lc3MiLAotICAgICJyaWdodCIsICJyb3RhdGlvbiIsICJyb3RhdGlvbi1wb2lu
dCIsICJydWJ5LWFsaWduIiwgInJ1Ynktb3ZlcmhhbmciLAotICAgICJydWJ5LXBvc2l0aW9uIiwg
InJ1Ynktc3BhbiIsICJzaGFwZS1pbWFnZS10aHJlc2hvbGQiLCAic2hhcGUtaW5zaWRlIiwgInNo
YXBlLW1hcmdpbiIsCi0gICAgInNoYXBlLW91dHNpZGUiLCAic2l6ZSIsICJzcGVhayIsICJzcGVh
ay1hcyIsICJzcGVhay1oZWFkZXIiLAotICAgICJzcGVhay1udW1lcmFsIiwgInNwZWFrLXB1bmN0
dWF0aW9uIiwgInNwZWVjaC1yYXRlIiwgInN0cmVzcyIsICJzdHJpbmctc2V0IiwKLSAgICAidGFi
LXNpemUiLCAidGFibGUtbGF5b3V0IiwgInRhcmdldCIsICJ0YXJnZXQtbmFtZSIsICJ0YXJnZXQt
bmV3IiwKLSAgICAidGFyZ2V0LXBvc2l0aW9uIiwgInRleHQtYWxpZ24iLCAidGV4dC1hbGlnbi1s
YXN0IiwgInRleHQtZGVjb3JhdGlvbiIsCi0gICAgInRleHQtZGVjb3JhdGlvbi1jb2xvciIsICJ0
ZXh0LWRlY29yYXRpb24tbGluZSIsICJ0ZXh0LWRlY29yYXRpb24tc2tpcCIsCi0gICAgInRleHQt
ZGVjb3JhdGlvbi1zdHlsZSIsICJ0ZXh0LWVtcGhhc2lzIiwgInRleHQtZW1waGFzaXMtY29sb3Ii
LAotICAgICJ0ZXh0LWVtcGhhc2lzLXBvc2l0aW9uIiwgInRleHQtZW1waGFzaXMtc3R5bGUiLCAi
dGV4dC1oZWlnaHQiLAotICAgICJ0ZXh0LWluZGVudCIsICJ0ZXh0LWp1c3RpZnkiLCAidGV4dC1v
dXRsaW5lIiwgInRleHQtb3ZlcmZsb3ciLCAidGV4dC1zaGFkb3ciLAotICAgICJ0ZXh0LXNpemUt
YWRqdXN0IiwgInRleHQtc3BhY2UtY29sbGFwc2UiLCAidGV4dC10cmFuc2Zvcm0iLCAidGV4dC11
bmRlcmxpbmUtcG9zaXRpb24iLAotICAgICJ0ZXh0LXdyYXAiLCAidG9wIiwgInRyYW5zZm9ybSIs
ICJ0cmFuc2Zvcm0tb3JpZ2luIiwgInRyYW5zZm9ybS1zdHlsZSIsCi0gICAgInRyYW5zaXRpb24i
LCAidHJhbnNpdGlvbi1kZWxheSIsICJ0cmFuc2l0aW9uLWR1cmF0aW9uIiwKLSAgICAidHJhbnNp
dGlvbi1wcm9wZXJ0eSIsICJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsICJ1bmljb2RlLWJp
ZGkiLAotICAgICJ2ZXJ0aWNhbC1hbGlnbiIsICJ2aXNpYmlsaXR5IiwgInZvaWNlLWJhbGFuY2Ui
LCAidm9pY2UtZHVyYXRpb24iLAotICAgICJ2b2ljZS1mYW1pbHkiLCAidm9pY2UtcGl0Y2giLCAi
dm9pY2UtcmFuZ2UiLCAidm9pY2UtcmF0ZSIsICJ2b2ljZS1zdHJlc3MiLAotICAgICJ2b2ljZS12
b2x1bWUiLCAidm9sdW1lIiwgIndoaXRlLXNwYWNlIiwgIndpZG93cyIsICJ3aWR0aCIsICJ3b3Jk
LWJyZWFrIiwKLSAgICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwKLSAg
ICAvLyBTVkctc3BlY2lmaWMKLSAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIsICJtYXNrIiwg
ImVuYWJsZS1iYWNrZ3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCi0gICAgImZsb29k
LW9wYWNpdHkiLCAibGlnaHRpbmctY29sb3IiLCAic3RvcC1jb2xvciIsICJzdG9wLW9wYWNpdHki
LCAicG9pbnRlci1ldmVudHMiLAotICAgICJjb2xvci1pbnRlcnBvbGF0aW9uIiwgImNvbG9yLWlu
dGVycG9sYXRpb24tZmlsdGVycyIsCi0gICAgImNvbG9yLXJlbmRlcmluZyIsICJmaWxsIiwgImZp
bGwtb3BhY2l0eSIsICJmaWxsLXJ1bGUiLCAiaW1hZ2UtcmVuZGVyaW5nIiwKLSAgICAibWFya2Vy
IiwgIm1hcmtlci1lbmQiLCAibWFya2VyLW1pZCIsICJtYXJrZXItc3RhcnQiLCAic2hhcGUtcmVu
ZGVyaW5nIiwgInN0cm9rZSIsCi0gICAgInN0cm9rZS1kYXNoYXJyYXkiLCAic3Ryb2tlLWRhc2hv
ZmZzZXQiLCAic3Ryb2tlLWxpbmVjYXAiLCAic3Ryb2tlLWxpbmVqb2luIiwKLSAgICAic3Ryb2tl
LW1pdGVybGltaXQiLCAic3Ryb2tlLW9wYWNpdHkiLCAic3Ryb2tlLXdpZHRoIiwgInRleHQtcmVu
ZGVyaW5nIiwKLSAgICAiYmFzZWxpbmUtc2hpZnQiLCAiZG9taW5hbnQtYmFzZWxpbmUiLCAiZ2x5
cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsCi0gICAgImdseXBoLW9yaWVudGF0aW9uLXZlcnRp
Y2FsIiwgInRleHQtYW5jaG9yIiwgIndyaXRpbmctbW9kZSIKLSAgXSwgcHJvcGVydHlLZXl3b3Jk
cyA9IGtleVNldChwcm9wZXJ0eUtleXdvcmRzXyk7Ci0KLSAgdmFyIG5vblN0YW5kYXJkUHJvcGVy
dHlLZXl3b3JkcyA9IFsKLSAgICAic2Nyb2xsYmFyLWFycm93LWNvbG9yIiwgInNjcm9sbGJhci1i
YXNlLWNvbG9yIiwgInNjcm9sbGJhci1kYXJrLXNoYWRvdy1jb2xvciIsCi0gICAgInNjcm9sbGJh
ci1mYWNlLWNvbG9yIiwgInNjcm9sbGJhci1oaWdobGlnaHQtY29sb3IiLCAic2Nyb2xsYmFyLXNo
YWRvdy1jb2xvciIsCi0gICAgInNjcm9sbGJhci0zZC1saWdodC1jb2xvciIsICJzY3JvbGxiYXIt
dHJhY2stY29sb3IiLCAic2hhcGUtaW5zaWRlIiwKLSAgICAic2VhcmNoZmllbGQtY2FuY2VsLWJ1
dHRvbiIsICJzZWFyY2hmaWVsZC1kZWNvcmF0aW9uIiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0
dG9uIiwKLSAgICAic2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwgInpvb20iCi0gIF0s
IG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9IGtleVNldChub25TdGFuZGFyZFByb3BlcnR5
S2V5d29yZHMpOwotCi0gIHZhciBjb2xvcktleXdvcmRzXyA9IFsKLSAgICAiYWxpY2VibHVlIiwg
ImFudGlxdWV3aGl0ZSIsICJhcXVhIiwgImFxdWFtYXJpbmUiLCAiYXp1cmUiLCAiYmVpZ2UiLAot
ICAgICJiaXNxdWUiLCAiYmxhY2siLCAiYmxhbmNoZWRhbG1vbmQiLCAiYmx1ZSIsICJibHVldmlv
bGV0IiwgImJyb3duIiwKLSAgICAiYnVybHl3b29kIiwgImNhZGV0Ymx1ZSIsICJjaGFydHJldXNl
IiwgImNob2NvbGF0ZSIsICJjb3JhbCIsICJjb3JuZmxvd2VyYmx1ZSIsCi0gICAgImNvcm5zaWxr
IiwgImNyaW1zb24iLCAiY3lhbiIsICJkYXJrYmx1ZSIsICJkYXJrY3lhbiIsICJkYXJrZ29sZGVu
cm9kIiwKLSAgICAiZGFya2dyYXkiLCAiZGFya2dyZWVuIiwgImRhcmtraGFraSIsICJkYXJrbWFn
ZW50YSIsICJkYXJrb2xpdmVncmVlbiIsCi0gICAgImRhcmtvcmFuZ2UiLCAiZGFya29yY2hpZCIs
ICJkYXJrcmVkIiwgImRhcmtzYWxtb24iLCAiZGFya3NlYWdyZWVuIiwKLSAgICAiZGFya3NsYXRl
Ymx1ZSIsICJkYXJrc2xhdGVncmF5IiwgImRhcmt0dXJxdW9pc2UiLCAiZGFya3Zpb2xldCIsCi0g
ICAgImRlZXBwaW5rIiwgImRlZXBza3libHVlIiwgImRpbWdyYXkiLCAiZG9kZ2VyYmx1ZSIsICJm
aXJlYnJpY2siLAotICAgICJmbG9yYWx3aGl0ZSIsICJmb3Jlc3RncmVlbiIsICJmdWNoc2lhIiwg
ImdhaW5zYm9ybyIsICJnaG9zdHdoaXRlIiwKLSAgICAiZ29sZCIsICJnb2xkZW5yb2QiLCAiZ3Jh
eSIsICJncmV5IiwgImdyZWVuIiwgImdyZWVueWVsbG93IiwgImhvbmV5ZGV3IiwKLSAgICAiaG90
cGluayIsICJpbmRpYW5yZWQiLCAiaW5kaWdvIiwgIml2b3J5IiwgImtoYWtpIiwgImxhdmVuZGVy
IiwKLSAgICAibGF2ZW5kZXJibHVzaCIsICJsYXduZ3JlZW4iLCAibGVtb25jaGlmZm9uIiwgImxp
Z2h0Ymx1ZSIsICJsaWdodGNvcmFsIiwKLSAgICAibGlnaHRjeWFuIiwgImxpZ2h0Z29sZGVucm9k
eWVsbG93IiwgImxpZ2h0Z3JheSIsICJsaWdodGdyZWVuIiwgImxpZ2h0cGluayIsCi0gICAgImxp
Z2h0c2FsbW9uIiwgImxpZ2h0c2VhZ3JlZW4iLCAibGlnaHRza3libHVlIiwgImxpZ2h0c2xhdGVn
cmF5IiwKLSAgICAibGlnaHRzdGVlbGJsdWUiLCAibGlnaHR5ZWxsb3ciLCAibGltZSIsICJsaW1l
Z3JlZW4iLCAibGluZW4iLCAibWFnZW50YSIsCi0gICAgIm1hcm9vbiIsICJtZWRpdW1hcXVhbWFy
aW5lIiwgIm1lZGl1bWJsdWUiLCAibWVkaXVtb3JjaGlkIiwgIm1lZGl1bXB1cnBsZSIsCi0gICAg
Im1lZGl1bXNlYWdyZWVuIiwgIm1lZGl1bXNsYXRlYmx1ZSIsICJtZWRpdW1zcHJpbmdncmVlbiIs
ICJtZWRpdW10dXJxdW9pc2UiLAotICAgICJtZWRpdW12aW9sZXRyZWQiLCAibWlkbmlnaHRibHVl
IiwgIm1pbnRjcmVhbSIsICJtaXN0eXJvc2UiLCAibW9jY2FzaW4iLAotICAgICJuYXZham93aGl0
ZSIsICJuYXZ5IiwgIm9sZGxhY2UiLCAib2xpdmUiLCAib2xpdmVkcmFiIiwgIm9yYW5nZSIsICJv
cmFuZ2VyZWQiLAotICAgICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIsICJwYWxlZ3JlZW4iLCAi
cGFsZXR1cnF1b2lzZSIsICJwYWxldmlvbGV0cmVkIiwKLSAgICAicGFwYXlhd2hpcCIsICJwZWFj
aHB1ZmYiLCAicGVydSIsICJwaW5rIiwgInBsdW0iLCAicG93ZGVyYmx1ZSIsCi0gICAgInB1cnBs
ZSIsICJyZWQiLCAicm9zeWJyb3duIiwgInJveWFsYmx1ZSIsICJzYWRkbGVicm93biIsICJzYWxt
b24iLAotICAgICJzYW5keWJyb3duIiwgInNlYWdyZWVuIiwgInNlYXNoZWxsIiwgInNpZW5uYSIs
ICJzaWx2ZXIiLCAic2t5Ymx1ZSIsCi0gICAgInNsYXRlYmx1ZSIsICJzbGF0ZWdyYXkiLCAic25v
dyIsICJzcHJpbmdncmVlbiIsICJzdGVlbGJsdWUiLCAidGFuIiwKLSAgICAidGVhbCIsICJ0aGlz
dGxlIiwgInRvbWF0byIsICJ0dXJxdW9pc2UiLCAidmlvbGV0IiwgIndoZWF0IiwgIndoaXRlIiwK
LSAgICAid2hpdGVzbW9rZSIsICJ5ZWxsb3ciLCAieWVsbG93Z3JlZW4iCi0gIF0sIGNvbG9yS2V5
d29yZHMgPSBrZXlTZXQoY29sb3JLZXl3b3Jkc18pOwotCi0gIHZhciB2YWx1ZUtleXdvcmRzXyA9
IFsKLSAgICAiYWJvdmUiLCAiYWJzb2x1dGUiLCAiYWN0aXZlYm9yZGVyIiwgImFjdGl2ZWNhcHRp
b24iLCAiYWZhciIsCi0gICAgImFmdGVyLXdoaXRlLXNwYWNlIiwgImFoZWFkIiwgImFsaWFzIiwg
ImFsbCIsICJhbGwtc2Nyb2xsIiwgImFsdGVybmF0ZSIsCi0gICAgImFsd2F5cyIsICJhbWhhcmlj
IiwgImFtaGFyaWMtYWJlZ2VkZSIsICJhbnRpYWxpYXNlZCIsICJhcHB3b3Jrc3BhY2UiLAotICAg
ICJhcmFiaWMtaW5kaWMiLCAiYXJtZW5pYW4iLCAiYXN0ZXJpc2tzIiwgImF1dG8iLCAiYXZvaWQi
LCAiYXZvaWQtY29sdW1uIiwgImF2b2lkLXBhZ2UiLAotICAgICJhdm9pZC1yZWdpb24iLCAiYmFj
a2dyb3VuZCIsICJiYWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ciLCAiYmlkaS1vdmVycmlk
ZSIsICJiaW5hcnkiLAotICAgICJiZW5nYWxpIiwgImJsaW5rIiwgImJsb2NrIiwgImJsb2NrLWF4
aXMiLCAiYm9sZCIsICJib2xkZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLAotICAgICJib3Ro
IiwgImJvdHRvbSIsICJicmVhayIsICJicmVhay1hbGwiLCAiYnJlYWstd29yZCIsICJidXR0b24i
LCAiYnV0dG9uLWJldmVsIiwKLSAgICAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAi
YnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FtYm9kaWFuIiwKLSAgICAiY2FwaXRhbGl6
ZSIsICJjYXBzLWxvY2staW5kaWNhdG9yIiwgImNhcHRpb24iLCAiY2FwdGlvbnRleHQiLCAiY2Fy
ZXQiLAotICAgICJjZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWVh
cnRobHktYnJhbmNoIiwKLSAgICAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGlj
IiwgImNsZWFyIiwgImNsaXAiLCAiY2xvc2UtcXVvdGUiLAotICAgICJjb2wtcmVzaXplIiwgImNv
bGxhcHNlIiwgImNvbHVtbiIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNv
bnRlbnQiLAotICAgICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIs
ICJjb3B5IiwgImNvdmVyIiwgImNyb3AiLAotICAgICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3Vy
cmVudGNvbG9yIiwgImN1cnNpdmUiLCAiZGFzaGVkIiwgImRlY2ltYWwiLAotICAgICJkZWNpbWFs
LWxlYWRpbmctemVybyIsICJkZWZhdWx0IiwgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9u
LWF0b3AiLAotICAgICJkZXN0aW5hdGlvbi1pbiIsICJkZXN0aW5hdGlvbi1vdXQiLCAiZGVzdGlu
YXRpb24tb3ZlciIsICJkZXZhbmFnYXJpIiwKLSAgICAiZGlzYyIsICJkaXNjYXJkIiwgImRvY3Vt
ZW50IiwgImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJkb3R0ZWQiLAotICAgICJkb3VibGUi
LCAiZG93biIsICJlLXJlc2l6ZSIsICJlYXNlIiwgImVhc2UtaW4iLCAiZWFzZS1pbi1vdXQiLCAi
ZWFzZS1vdXQiLAotICAgICJlbGVtZW50IiwgImVsbGlwc2UiLCAiZWxsaXBzaXMiLCAiZW1iZWQi
LCAiZW5kIiwgImV0aGlvcGljIiwgImV0aGlvcGljLWFiZWdlZGUiLAotICAgICJldGhpb3BpYy1h
YmVnZWRlLWFtLWV0IiwgImV0aGlvcGljLWFiZWdlZGUtZ2V6IiwgImV0aGlvcGljLWFiZWdlZGUt
dGktZXIiLAotICAgICJldGhpb3BpYy1hYmVnZWRlLXRpLWV0IiwgImV0aGlvcGljLWhhbGVoYW1l
LWFhLWVyIiwKLSAgICAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXQiLCAiZXRoaW9waWMtaGFsZWhh
bWUtYW0tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCAiZXRoaW9waWMtaGFsZWhh
bWUtb20tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS1zaWQtZXQiLCAiZXRoaW9waWMtaGFs
ZWhhbWUtc28tZXQiLAotICAgICJldGhpb3BpYy1oYWxlaGFtZS10aS1lciIsICJldGhpb3BpYy1o
YWxlaGFtZS10aS1ldCIsCi0gICAgImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsICJldy1yZXNpemUi
LCAiZXhwYW5kZWQiLCAiZXh0cmEtY29uZGVuc2VkIiwKLSAgICAiZXh0cmEtZXhwYW5kZWQiLCAi
ZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmb290bm90ZXMiLAot
ICAgICJmb3J3YXJkcyIsICJmcm9tIiwgImdlb21ldHJpY1ByZWNpc2lvbiIsICJnZW9yZ2lhbiIs
ICJncmF5dGV4dCIsICJncm9vdmUiLAotICAgICJndWphcmF0aSIsICJndXJtdWtoaSIsICJoYW5k
IiwgImhhbmd1bCIsICJoYW5ndWwtY29uc29uYW50IiwgImhlYnJldyIsCi0gICAgImhlbHAiLCAi
aGlkZGVuIiwgImhpZGUiLCAiaGlnaGVyIiwgImhpZ2hsaWdodCIsICJoaWdobGlnaHR0ZXh0IiwK
LSAgICAiaGlyYWdhbmEiLCAiaGlyYWdhbmEtaXJvaGEiLCAiaG9yaXpvbnRhbCIsICJoc2wiLCAi
aHNsYSIsICJpY29uIiwgImlnbm9yZSIsCi0gICAgImluYWN0aXZlYm9yZGVyIiwgImluYWN0aXZl
Y2FwdGlvbiIsICJpbmFjdGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwKLSAgICAiaW5mb2Jh
Y2tncm91bmQiLCAiaW5mb3RleHQiLCAiaW5oZXJpdCIsICJpbml0aWFsIiwgImlubGluZSIsICJp
bmxpbmUtYXhpcyIsCi0gICAgImlubGluZS1ibG9jayIsICJpbmxpbmUtdGFibGUiLCAiaW5zZXQi
LCAiaW5zaWRlIiwgImludHJpbnNpYyIsICJpbnZlcnQiLAotICAgICJpdGFsaWMiLCAianVzdGlm
eSIsICJrYW5uYWRhIiwgImthdGFrYW5hIiwgImthdGFrYW5hLWlyb2hhIiwgImtlZXAtYWxsIiwg
ImtobWVyIiwKLSAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVm
dCIsICJsZXZlbCIsICJsaWdodGVyIiwKLSAgICAibGluZS10aHJvdWdoIiwgImxpbmVhciIsICJs
aW5lcyIsICJsaXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCi0gICAgImxvY2FsIiwg
ImxvZ2ljYWwiLCAibG91ZCIsICJsb3dlciIsICJsb3dlci1hbHBoYSIsICJsb3dlci1hcm1lbmlh
biIsCi0gICAgImxvd2VyLWdyZWVrIiwgImxvd2VyLWhleGFkZWNpbWFsIiwgImxvd2VyLWxhdGlu
IiwgImxvd2VyLW5vcndlZ2lhbiIsCi0gICAgImxvd2VyLXJvbWFuIiwgImxvd2VyY2FzZSIsICJs
dHIiLCAibWFsYXlhbGFtIiwgIm1hdGNoIiwKLSAgICAibWVkaWEtY29udHJvbHMtYmFja2dyb3Vu
ZCIsICJtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheSIsCi0gICAgIm1lZGlhLWZ1bGxzY3JlZW4t
YnV0dG9uIiwgIm1lZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwKLSAgICAi
bWVkaWEtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiIsICJtZWRpYS1yZXdpbmQtYnV0dG9uIiwK
LSAgICAibWVkaWEtc2Vlay1iYWNrLWJ1dHRvbiIsICJtZWRpYS1zZWVrLWZvcndhcmQtYnV0dG9u
IiwgIm1lZGlhLXNsaWRlciIsCi0gICAgIm1lZGlhLXNsaWRlcnRodW1iIiwgIm1lZGlhLXRpbWUt
cmVtYWluaW5nLWRpc3BsYXkiLCAibWVkaWEtdm9sdW1lLXNsaWRlciIsCi0gICAgIm1lZGlhLXZv
bHVtZS1zbGlkZXItY29udGFpbmVyIiwgIm1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYiIsICJtZWRp
dW0iLAotICAgICJtZW51IiwgIm1lbnVsaXN0IiwgIm1lbnVsaXN0LWJ1dHRvbiIsICJtZW51bGlz
dC10ZXh0IiwKLSAgICAibWVudWxpc3QtdGV4dGZpZWxkIiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2Ut
Ym94IiwgIm1pZGRsZSIsICJtaW4taW50cmluc2ljIiwKLSAgICAibWl4IiwgIm1vbmdvbGlhbiIs
ICJtb25vc3BhY2UiLCAibW92ZSIsICJtdWx0aXBsZSIsICJteWFubWFyIiwgIm4tcmVzaXplIiwK
LSAgICAibmFycm93ZXIiLCAibmUtcmVzaXplIiwgIm5lc3ctcmVzaXplIiwgIm5vLWNsb3NlLXF1
b3RlIiwgIm5vLWRyb3AiLAotICAgICJuby1vcGVuLXF1b3RlIiwgIm5vLXJlcGVhdCIsICJub25l
IiwgIm5vcm1hbCIsICJub3QtYWxsb3dlZCIsICJub3dyYXAiLAotICAgICJucy1yZXNpemUiLCAi
bnctcmVzaXplIiwgIm53c2UtcmVzaXplIiwgIm9ibGlxdWUiLCAib2N0YWwiLCAib3Blbi1xdW90
ZSIsCi0gICAgIm9wdGltaXplTGVnaWJpbGl0eSIsICJvcHRpbWl6ZVNwZWVkIiwgIm9yaXlhIiwg
Im9yb21vIiwgIm91dHNldCIsCi0gICAgIm91dHNpZGUiLCAib3V0c2lkZS1zaGFwZSIsICJvdmVy
bGF5IiwgIm92ZXJsaW5lIiwgInBhZGRpbmciLCAicGFkZGluZy1ib3giLAotICAgICJwYWludGVk
IiwgInBhZ2UiLCAicGF1c2VkIiwgInBlcnNpYW4iLCAicGx1cy1kYXJrZXIiLCAicGx1cy1saWdo
dGVyIiwgInBvaW50ZXIiLAotICAgICJwb2x5Z29uIiwgInBvcnRyYWl0IiwgInByZSIsICJwcmUt
bGluZSIsICJwcmUtd3JhcCIsICJwcmVzZXJ2ZS0zZCIsICJwcm9ncmVzcyIsICJwdXNoLWJ1dHRv
biIsCi0gICAgInJhZGlvIiwgInJlYWQtb25seSIsICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUt
cGxhaW50ZXh0LW9ubHkiLCAicmVjdGFuZ2xlIiwgInJlZ2lvbiIsCi0gICAgInJlbGF0aXZlIiwg
InJlcGVhdCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwgInJn
YiIsICJyZ2JhIiwKLSAgICAicmlkZ2UiLCAicmlnaHQiLCAicm91bmQiLCAicm93LXJlc2l6ZSIs
ICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLAotICAgICJzLXJlc2l6ZSIsICJzYW5zLXNlcmlm
IiwgInNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2UtcmVzaXplIiwgInNlYXJjaGZpZWxkIiwKLSAg
ICAic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1kZWNvcmF0aW9uIiwK
LSAgICAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1k
ZWNvcmF0aW9uIiwKLSAgICAic2VtaS1jb25kZW5zZWQiLCAic2VtaS1leHBhbmRlZCIsICJzZXBh
cmF0ZSIsICJzZXJpZiIsICJzaG93IiwgInNpZGFtYSIsCi0gICAgInNpbmdsZSIsICJza2lwLXdo
aXRlLXNwYWNlIiwgInNsaWRlIiwgInNsaWRlci1ob3Jpem9udGFsIiwKLSAgICAic2xpZGVyLXZl
cnRpY2FsIiwgInNsaWRlcnRodW1iLWhvcml6b250YWwiLCAic2xpZGVydGh1bWItdmVydGljYWwi
LCAic2xvdyIsCi0gICAgInNtYWxsIiwgInNtYWxsLWNhcHMiLCAic21hbGwtY2FwdGlvbiIsICJz
bWFsbGVyIiwgInNvbGlkIiwgInNvbWFsaSIsCi0gICAgInNvdXJjZS1hdG9wIiwgInNvdXJjZS1p
biIsICJzb3VyY2Utb3V0IiwgInNvdXJjZS1vdmVyIiwgInNwYWNlIiwgInNxdWFyZSIsCi0gICAg
InNxdWFyZS1idXR0b24iLCAic3RhcnQiLCAic3RhdGljIiwgInN0YXR1cy1iYXIiLCAic3RyZXRj
aCIsICJzdHJva2UiLAotICAgICJzdWIiLCAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAic3VwZXIi
LCAic3ctcmVzaXplIiwgInRhYmxlIiwKLSAgICAidGFibGUtY2FwdGlvbiIsICJ0YWJsZS1jZWxs
IiwgInRhYmxlLWNvbHVtbiIsICJ0YWJsZS1jb2x1bW4tZ3JvdXAiLAotICAgICJ0YWJsZS1mb290
ZXItZ3JvdXAiLCAidGFibGUtaGVhZGVyLWdyb3VwIiwgInRhYmxlLXJvdyIsICJ0YWJsZS1yb3ct
Z3JvdXAiLAotICAgICJ0ZWx1Z3UiLCAidGV4dCIsICJ0ZXh0LWJvdHRvbSIsICJ0ZXh0LXRvcCIs
ICJ0ZXh0YXJlYSIsICJ0ZXh0ZmllbGQiLCAidGhhaSIsCi0gICAgInRoaWNrIiwgInRoaW4iLCAi
dGhyZWVkZGFya3NoYWRvdyIsICJ0aHJlZWRmYWNlIiwgInRocmVlZGhpZ2hsaWdodCIsCi0gICAg
InRocmVlZGxpZ2h0c2hhZG93IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3JlIiwg
InRpZ3JpbnlhLWVyIiwKLSAgICAidGlncmlueWEtZXItYWJlZ2VkZSIsICJ0aWdyaW55YS1ldCIs
ICJ0aWdyaW55YS1ldC1hYmVnZWRlIiwgInRvIiwgInRvcCIsCi0gICAgInRyYW5zcGFyZW50Iiwg
InVsdHJhLWNvbmRlbnNlZCIsICJ1bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidXAiLAot
ICAgICJ1cHBlci1hbHBoYSIsICJ1cHBlci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1cHBl
ci1oZXhhZGVjaW1hbCIsCi0gICAgInVwcGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1
cHBlci1yb21hbiIsICJ1cHBlcmNhc2UiLCAidXJkdSIsICJ1cmwiLAotICAgICJ2ZXJ0aWNhbCIs
ICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2libGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJsZVBhaW50
ZWQiLAotICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0Iiwg
IndhdmUiLCAid2lkZXIiLAotICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4
dCIsICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKLSAgICAieHgtbGFyZ2UiLCAieHgtc21h
bGwiCi0gIF0sIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pOwotCi0gIHZh
ciBmb250UHJvcGVydGllc18gPSBbCi0gICAgImZvbnQtZmFtaWx5IiwgInNyYyIsICJ1bmljb2Rl
LXJhbmdlIiwgImZvbnQtdmFyaWFudCIsICJmb250LWZlYXR1cmUtc2V0dGluZ3MiLAotICAgICJm
b250LXN0cmV0Y2giLCAiZm9udC13ZWlnaHQiLCAiZm9udC1zdHlsZSIKLSAgXSwgZm9udFByb3Bl
cnRpZXMgPSBrZXlTZXQoZm9udFByb3BlcnRpZXNfKTsKLQotICB2YXIgYWxsV29yZHMgPSBtZWRp
YVR5cGVzXy5jb25jYXQobWVkaWFGZWF0dXJlc18pLmNvbmNhdChwcm9wZXJ0eUtleXdvcmRzXykK
LSAgICAuY29uY2F0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcykuY29uY2F0KGNvbG9yS2V5
d29yZHNfKS5jb25jYXQodmFsdWVLZXl3b3Jkc18pOwotICBDb2RlTWlycm9yLnJlZ2lzdGVySGVs
cGVyKCJoaW50V29yZHMiLCAiY3NzIiwgYWxsV29yZHMpOwotCi0gIGZ1bmN0aW9uIHRva2VuQ0Nv
bW1lbnQoc3RyZWFtLCBzdGF0ZSkgewotICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKLSAg
ICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgaWYgKG1heWJl
RW5kICYmIGNoID09ICIvIikgewotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKLSAgICB9
Ci0gICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gIH0KLQotICBmdW5jdGlvbiB0
b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLnNraXBUbygi
LS0+IikpIHsKLSAgICAgIHN0cmVhbS5tYXRjaCgiLS0+Iik7Ci0gICAgICBzdGF0ZS50b2tlbml6
ZSA9IG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gIH0KLQotICBDb2RlTWlycm9y
LmRlZmluZU1JTUUoInRleHQvY3NzIiwgewotICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCi0g
ICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKLSAgICBwcm9wZXJ0eUtleXdvcmRzOiBw
cm9wZXJ0eUtleXdvcmRzLAotICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3Rh
bmRhcmRQcm9wZXJ0eUtleXdvcmRzLAotICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMs
Ci0gICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcywKLSAgICBmb250UHJvcGVydGllczog
Zm9udFByb3BlcnRpZXMsCi0gICAgdG9rZW5Ib29rczogewotICAgICAgIjwiOiBmdW5jdGlvbihz
dHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmICghc3RyZWFtLm1hdGNoKCIhLS0iKSkgcmV0dXJu
IGZhbHNlOwotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7Ci0gICAg
ICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfSwKLSAg
ICAgICIvIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBpZiAoIXN0cmVhbS5l
YXQoIioiKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0Nv
bW1lbnQ7Ci0gICAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAg
ICAgfQotICAgIH0sCi0gICAgbmFtZTogImNzcyIKLSAgfSk7Ci0KLSAgQ29kZU1pcnJvci5kZWZp
bmVNSU1FKCJ0ZXh0L3gtc2NzcyIsIHsKLSAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAotICAg
IG1lZGlhRmVhdHVyZXM6IG1lZGlhRmVhdHVyZXMsCi0gICAgcHJvcGVydHlLZXl3b3JkczogcHJv
cGVydHlLZXl3b3JkcywKLSAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5k
YXJkUHJvcGVydHlLZXl3b3JkcywKLSAgICBjb2xvcktleXdvcmRzOiBjb2xvcktleXdvcmRzLAot
ICAgIHZhbHVlS2V5d29yZHM6IHZhbHVlS2V5d29yZHMsCi0gICAgZm9udFByb3BlcnRpZXM6IGZv
bnRQcm9wZXJ0aWVzLAotICAgIGFsbG93TmVzdGVkOiB0cnVlLAotICAgIHRva2VuSG9va3M6IHsK
LSAgICAgICIvIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBpZiAoc3RyZWFt
LmVhdCgiLyIpKSB7Ci0gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwotICAgICAgICAgIHJl
dHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5l
YXQoIioiKSkgewotICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKLSAg
ICAgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJvcGVyYXRvciJdOwotICAgICAg
ICB9Ci0gICAgICB9LAotICAgICAgIjoiOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgICAgaWYg
KHN0cmVhbS5tYXRjaCgvXHMqey8pKQotICAgICAgICAgIHJldHVybiBbbnVsbCwgInsiXTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfSwKLSAgICAgICIkIjogZnVuY3Rpb24oc3RyZWFt
KSB7Ci0gICAgICAgIHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pOwotICAgICAgICBpZiAoc3RyZWFt
Lm1hdGNoKC9eXHMqOi8sIGZhbHNlKSkKLSAgICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZS0yIiwg
InZhcmlhYmxlLWRlZmluaXRpb24iXTsKLSAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2
YXJpYWJsZSJdOwotICAgICAgfSwKLSAgICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAg
ICAgIGlmICghc3RyZWFtLmVhdCgieyIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBb
bnVsbCwgImludGVycG9sYXRpb24iXTsKLSAgICAgIH0KLSAgICB9LAotICAgIG5hbWU6ICJjc3Mi
LAotICAgIGhlbHBlclR5cGU6ICJzY3NzIgotICB9KTsKLQotICBDb2RlTWlycm9yLmRlZmluZU1J
TUUoInRleHQveC1sZXNzIiwgewotICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCi0gICAgbWVk
aWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKLSAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0
eUtleXdvcmRzLAotICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzLAotICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCi0gICAg
dmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcywKLSAgICBmb250UHJvcGVydGllczogZm9udFBy
b3BlcnRpZXMsCi0gICAgYWxsb3dOZXN0ZWQ6IHRydWUsCi0gICAgdG9rZW5Ib29rczogewotICAg
ICAgIi8iOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0
KCIvIikpIHsKLSAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7Ci0gICAgICAgICAgcmV0dXJu
IFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgi
KiIpKSB7Ci0gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwotICAgICAg
ICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHJldHVybiBbIm9wZXJhdG9yIiwgIm9wZXJhdG9yIl07Ci0gICAgICAgIH0K
LSAgICAgIH0sCi0gICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgewotICAgICAgICBpZiAoc3Ry
ZWFtLm1hdGNoKC9eKGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8
b3x3ZWJraXQpLSk/a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywg
ZmFsc2UpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0v
KTsKLSAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpCi0gICAgICAgICAg
cmV0dXJuIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZS1kZWZpbml0aW9uIl07Ci0gICAgICAgIHJl
dHVybiBbInZhcmlhYmxlLTIiLCAidmFyaWFibGUiXTsKLSAgICAgIH0sCi0gICAgICAiJiI6IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gWyJhdG9tIiwgImF0b20iXTsKLSAgICAgIH0KLSAg
ICB9LAotICAgIG5hbWU6ICJjc3MiLAotICAgIGhlbHBlclR5cGU6ICJsZXNzIgotICB9KTsKLQot
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvaW5kZXguaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGlu
Zy9pbmRleC5odG1sCmluZGV4IDFiYzNmMzguLjI3M2FjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sCkBAIC0yLDE2
ICsyLDE2IEBACiA8aHRtbD4KIDxoZWFkPgogICAgIDx0aXRsZT5EZWJ1ZzwvdGl0bGU+Ci0gICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjb2RlbWlycm9yLmNzcyI+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY29kZW1pcnJvci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Y29kZW1pcnJvci1hZGRpdGlvbnMuY3NzIj4KLSAgICA8c2NyaXB0IHNyYz0iY29kZW1pcnJvci5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPSJjc3MuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJVdGls
aXRpZXMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJGb3JtYXR0ZXIuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2Nzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvRm9ybWF0dGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRm9y
bWF0dGVyRGVidWcuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJGb3JtYXR0ZXJDb250
ZW50QnVpbGRlci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IkNvZGVNaXJyb3JGb3Jt
YXR0ZXJzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ii4uLy4uL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRl
cnMuanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MjJlYzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw2NjMgKzAsMCBAQAotLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBN
YXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLS8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBs
aWNlbnNlOiBodHRwOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRQotCi0vLyBUT0RPIGFjdHVhbGx5
IHJlY29nbml6ZSBzeW50YXggb2YgVHlwZVNjcmlwdCBjb25zdHJ1Y3RzCi0KLShmdW5jdGlvbiht
b2QpIHsKLSAgaWYgKHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUg
PT0gIm9iamVjdCIpIC8vIENvbW1vbkpTCi0gICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2Rl
bWlycm9yIikpOwotICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVm
aW5lLmFtZCkgLy8gQU1ECi0gICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9k
KTsKLSAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudgotICAgIG1vZChDb2RlTWlycm9yKTsKLX0p
KGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKLSJ1c2Ugc3RyaWN0IjsKLQotQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKLSAg
dmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKLSAgdmFyIHN0YXRlbWVudEluZGVu
dCA9IHBhcnNlckNvbmZpZy5zdGF0ZW1lbnRJbmRlbnQ7Ci0gIHZhciBqc29ubGRNb2RlID0gcGFy
c2VyQ29uZmlnLmpzb25sZDsKLSAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpzb24gfHwg
anNvbmxkTW9kZTsKLSAgdmFyIGlzVFMgPSBwYXJzZXJDb25maWcudHlwZXNjcmlwdDsKLQotICAv
LyBUb2tlbml6ZXIKLQotICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpewotICAgIGZ1bmN0aW9u
IGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KLSAgICB2
YXIgQSA9IGt3KCJrZXl3b3JkIGEiKSwgQiA9IGt3KCJrZXl3b3JkIGIiKSwgQyA9IGt3KCJrZXl3
b3JkIGMiKTsKLSAgICB2YXIgb3BlcmF0b3IgPSBrdygib3BlcmF0b3IiKSwgYXRvbSA9IHt0eXBl
OiAiYXRvbSIsIHN0eWxlOiAiYXRvbSJ9OwotCi0gICAgdmFyIGpzS2V5d29yZHMgPSB7Ci0gICAg
ICAiaWYiOiBrdygiaWYiKSwgIndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIsICJkbyI6
IEIsICJ0cnkiOiBCLCAiZmluYWxseSI6IEIsCi0gICAgICAicmV0dXJuIjogQywgImJyZWFrIjog
QywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLCAiZGVi
dWdnZXIiOiBDLAotICAgICAgInZhciI6IGt3KCJ2YXIiKSwgImNvbnN0Ijoga3coInZhciIpLCAi
bGV0Ijoga3coInZhciIpLAotICAgICAgImZ1bmN0aW9uIjoga3coImZ1bmN0aW9uIiksICJjYXRj
aCI6IGt3KCJjYXRjaCIpLAotICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJz
d2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCi0g
ICAgICAiaW4iOiBvcGVyYXRvciwgInR5cGVvZiI6IG9wZXJhdG9yLCAiaW5zdGFuY2VvZiI6IG9w
ZXJhdG9yLAotICAgICAgInRydWUiOiBhdG9tLCAiZmFsc2UiOiBhdG9tLCAibnVsbCI6IGF0b20s
ICJ1bmRlZmluZWQiOiBhdG9tLCAiTmFOIjogYXRvbSwgIkluZmluaXR5IjogYXRvbSwKLSAgICAg
ICJ0aGlzIjoga3coInRoaXMiKSwgIm1vZHVsZSI6IGt3KCJtb2R1bGUiKSwgImNsYXNzIjoga3co
ImNsYXNzIiksICJzdXBlciI6IGt3KCJhdG9tIiksCi0gICAgICAieWllbGQiOiBDLCAiZXhwb3J0
Ijoga3coImV4cG9ydCIpLCAiaW1wb3J0Ijoga3coImltcG9ydCIpLCAiZXh0ZW5kcyI6IEMKLSAg
ICB9OwotCi0gICAgLy8gRXh0ZW5kIHRoZSAnbm9ybWFsJyBrZXl3b3JkcyB3aXRoIHRoZSBUeXBl
U2NyaXB0IGxhbmd1YWdlIGV4dGVuc2lvbnMKLSAgICBpZiAoaXNUUykgewotICAgICAgdmFyIHR5
cGUgPSB7dHlwZTogInZhcmlhYmxlIiwgc3R5bGU6ICJ2YXJpYWJsZS0zIn07Ci0gICAgICB2YXIg
dHNLZXl3b3JkcyA9IHsKLSAgICAgICAgLy8gb2JqZWN0LWxpa2UgdGhpbmdzCi0gICAgICAgICJp
bnRlcmZhY2UiOiBrdygiaW50ZXJmYWNlIiksCi0gICAgICAgICJleHRlbmRzIjoga3coImV4dGVu
ZHMiKSwKLSAgICAgICAgImNvbnN0cnVjdG9yIjoga3coImNvbnN0cnVjdG9yIiksCi0KLSAgICAg
ICAgLy8gc2NvcGUgbW9kaWZpZXJzCi0gICAgICAgICJwdWJsaWMiOiBrdygicHVibGljIiksCi0g
ICAgICAgICJwcml2YXRlIjoga3coInByaXZhdGUiKSwKLSAgICAgICAgInByb3RlY3RlZCI6IGt3
KCJwcm90ZWN0ZWQiKSwKLSAgICAgICAgInN0YXRpYyI6IGt3KCJzdGF0aWMiKSwKLQotICAgICAg
ICAvLyB0eXBlcwotICAgICAgICAic3RyaW5nIjogdHlwZSwgIm51bWJlciI6IHR5cGUsICJib29s
IjogdHlwZSwgImFueSI6IHR5cGUKLSAgICAgIH07Ci0KLSAgICAgIGZvciAodmFyIGF0dHIgaW4g
dHNLZXl3b3JkcykgewotICAgICAgICBqc0tleXdvcmRzW2F0dHJdID0gdHNLZXl3b3Jkc1thdHRy
XTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4ganNLZXl3b3JkczsKLSAgfSgpOwotCi0g
IHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1wtKiYlPTw+IT98fl5dLzsKLSAgdmFyIGlzSnNvbmxk
S2V5d29yZCA9IC9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxp
c3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaCkiLzsKLQotICBmdW5jdGlvbiBy
ZWFkUmVnZXhwKHN0cmVhbSkgewotICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGluU2V0
ID0gZmFsc2U7Ci0gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewot
ICAgICAgaWYgKCFlc2NhcGVkKSB7Ci0gICAgICAgIGlmIChuZXh0ID09ICIvIiAmJiAhaW5TZXQp
IHJldHVybjsKLSAgICAgICAgaWYgKG5leHQgPT0gIlsiKSBpblNldCA9IHRydWU7Ci0gICAgICAg
IGVsc2UgaWYgKGluU2V0ICYmIG5leHQgPT0gIl0iKSBpblNldCA9IGZhbHNlOwotICAgICAgfQot
ICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKLSAgICB9Ci0gIH0KLQot
ICAvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZh
bHVlcyB3aXRob3V0Ci0gIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgotICB2YXIgdHlw
ZSwgY29udGVudDsKLSAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkgewotICAgIHR5cGUg
PSB0cDsgY29udGVudCA9IGNvbnQ7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0gIGZ1bmN0aW9u
IHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsK
LSAgICBpZiAoY2ggPT0gJyInIHx8IGNoID09ICInIikgewotICAgICAgc3RhdGUudG9rZW5pemUg
PSB0b2tlblN0cmluZyhjaCk7Ci0gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBz
dGF0ZSk7Ci0gICAgfSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLm1hdGNoKC9eXGQrKD86
W2VFXVsrXC1dP1xkKyk/LykpIHsKLSAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIi
KTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goIi4uIikpIHsKLSAg
ICAgIHJldHVybiByZXQoInNwcmVhZCIsICJtZXRhIik7Ci0gICAgfSBlbHNlIGlmICgvW1xbXF17
fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewotICAgICAgcmV0dXJuIHJldChjaCk7Ci0gICAgfSBl
bHNlIGlmIChjaCA9PSAiPSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7Ci0gICAgICByZXR1cm4gcmV0
KCI9PiIsICJvcGVyYXRvciIpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5l
YXQoL3gvaSkpIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKLSAgICAgIHJl
dHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKLSAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChj
aCkpIHsKLSAgICAgIHN0cmVhbS5tYXRjaCgvXlxkKig/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQr
KT8vKTsKLSAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKLSAgICB9IGVsc2Ug
aWYgKGNoID09ICIvIikgewotICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewotICAgICAgICBz
dGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsKLSAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVu
dChzdHJlYW0sIHN0YXRlKTsKLSAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7Ci0g
ICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKLSAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIs
ICJjb21tZW50Iik7Ci0gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRv
ciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtleXdvcmQgYyIgfHwKLSAgICAgICAgICAgICAgIHN0
YXRlLmxhc3RUeXBlID09ICJzb2YiIHx8IC9eW1xbe31cKCw7Ol0kLy50ZXN0KHN0YXRlLmxhc3RU
eXBlKSkgewotICAgICAgICByZWFkUmVnZXhwKHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbS5lYXRX
aGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQotICAg
ICAgICByZXR1cm4gcmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICAgIHJldHVybiBy
ZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1cnJlbnQoKSk7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChjaCA9PSAiYCIpIHsKLSAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5R
dWFzaTsKLSAgICAgIHJldHVybiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpOwotICAgIH0gZWxz
ZSBpZiAoY2ggPT0gIiMiKSB7Ci0gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7Ci0gICAgICByZXR1
cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIu
dGVzdChjaCkpIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAg
ICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIsIHN0cmVhbS5jdXJyZW50KCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKLSAgICAgIHZh
ciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51
bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKLSAgICAgIHJldHVybiAoa25vd24gJiYg
c3RhdGUubGFzdFR5cGUgIT0gIi4iKSA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29y
ZCkgOgotICAgICAgICAgICAgICAgICAgICAgcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIsIHdv
cmQpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7Ci0gICAg
cmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgIHZhciBlc2NhcGVkID0gZmFs
c2UsIG5leHQ7Ci0gICAgICBpZiAoanNvbmxkTW9kZSAmJiBzdHJlYW0ucGVlaygpID09ICJAIiAm
JiBzdHJlYW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7Ci0gICAgICAgIHN0YXRlLnRva2VuaXpl
ID0gdG9rZW5CYXNlOwotICAgICAgICByZXR1cm4gcmV0KCJqc29ubGQta2V5d29yZCIsICJtZXRh
Iik7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxs
KSB7Ci0gICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKLSAgICAg
ICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKLSAgICAgIH0KLSAgICAgIGlm
ICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Ci0gICAgICByZXR1cm4gcmV0
KCJzdHJpbmciLCAic3RyaW5nIik7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRva2VuQ29t
bWVudChzdHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwotICAg
IHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKLSAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5
YmVFbmQpIHsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7Ci0gIH0KLQotICBmdW5jdGlvbiB0b2tl
blF1YXNpKHN0cmVhbSwgc3RhdGUpIHsKLSAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0Owot
ICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKLSAgICAgIGlmICgh
ZXNjYXBlZCAmJiAobmV4dCA9PSAiYCIgfHwgbmV4dCA9PSAiJCIgJiYgc3RyZWFtLmVhdCgieyIp
KSkgewotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwotICAg
IH0KLSAgICByZXR1cm4gcmV0KCJxdWFzaSIsICJzdHJpbmctMiIsIHN0cmVhbS5jdXJyZW50KCkp
OwotICB9Ci0KLSAgdmFyIGJyYWNrZXRzID0gIihbe31dKSI7Ci0gIC8vIFRoaXMgaXMgYSBjcnVk
ZSBsb29rYWhlYWQgdHJpY2sgdG8gdHJ5IGFuZCBub3RpY2UgdGhhdCB3ZSdyZQotICAvLyBwYXJz
aW5nIHRoZSBhcmd1bWVudCBwYXR0ZXJucyBmb3IgYSBmYXQtYXJyb3cgZnVuY3Rpb24gYmVmb3Jl
IHdlCi0gIC8vIGFjdHVhbGx5IGhpdCB0aGUgYXJyb3cgdG9rZW4uIEl0IG9ubHkgd29ya3MgaWYg
dGhlIGFycm93IGlzIG9uCi0gIC8vIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFyZ3VtZW50cyBhbmQg
dGhlcmUncyBubyBzdHJhbmdlIG5vaXNlCi0gIC8vIChjb21tZW50cykgaW4gYmV0d2Vlbi4gRmFs
bGJhY2sgaXMgdG8gb25seSBub3RpY2Ugd2hlbiB3ZSBoaXQgdGhlCi0gIC8vIGFycm93LCBhbmQg
bm90IGRlY2xhcmUgdGhlIGFyZ3VtZW50cyBhcyBsb2NhbHMgZm9yIHRoZSBhcnJvdwotICAvLyBi
b2R5LgotICBmdW5jdGlvbiBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmIChz
dGF0ZS5mYXRBcnJvd0F0KSBzdGF0ZS5mYXRBcnJvd0F0ID0gbnVsbDsKLSAgICB2YXIgYXJyb3cg
PSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoIj0+Iiwgc3RyZWFtLnN0YXJ0KTsKLSAgICBpZiAoYXJy
b3cgPCAwKSByZXR1cm47Ci0KLSAgICB2YXIgZGVwdGggPSAwLCBzYXdTb21ldGhpbmcgPSBmYWxz
ZTsKLSAgICBmb3IgKHZhciBwb3MgPSBhcnJvdyAtIDE7IHBvcyA+PSAwOyAtLXBvcykgewotICAg
ICAgdmFyIGNoID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKTsKLSAgICAgIHZhciBicmFja2V0
ID0gYnJhY2tldHMuaW5kZXhPZihjaCk7Ci0gICAgICBpZiAoYnJhY2tldCA+PSAwICYmIGJyYWNr
ZXQgPCAzKSB7Ci0gICAgICAgIGlmICghZGVwdGgpIHsgKytwb3M7IGJyZWFrOyB9Ci0gICAgICAg
IGlmICgtLWRlcHRoID09IDApIGJyZWFrOwotICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMg
JiYgYnJhY2tldCA8IDYpIHsKLSAgICAgICAgKytkZXB0aDsKLSAgICAgIH0gZWxzZSBpZiAoL1sk
XHddLy50ZXN0KGNoKSkgewotICAgICAgICBzYXdTb21ldGhpbmcgPSB0cnVlOwotICAgICAgfSBl
bHNlIGlmIChzYXdTb21ldGhpbmcgJiYgIWRlcHRoKSB7Ci0gICAgICAgICsrcG9zOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgp
IHN0YXRlLmZhdEFycm93QXQgPSBwb3M7Ci0gIH0KLQotICAvLyBQYXJzZXIKLQotICB2YXIgYXRv
bWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlhYmxlIjogdHJ1
ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlLCAidGhpcyI6IHRydWUsICJqc29ubGQt
a2V5d29yZCI6IHRydWV9OwotCi0gIGZ1bmN0aW9uIEpTTGV4aWNhbChpbmRlbnRlZCwgY29sdW1u
LCB0eXBlLCBhbGlnbiwgcHJldiwgaW5mbykgewotICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRl
ZDsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAg
IHRoaXMucHJldiA9IHByZXY7Ci0gICAgdGhpcy5pbmZvID0gaW5mbzsKLSAgICBpZiAoYWxpZ24g
IT0gbnVsbCkgdGhpcy5hbGlnbiA9IGFsaWduOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5TY29wZShz
dGF0ZSwgdmFybmFtZSkgewotICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYg
PSB2Lm5leHQpCi0gICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlOwotICAg
IGZvciAodmFyIGN4ID0gc3RhdGUuY29udGV4dDsgY3g7IGN4ID0gY3gucHJldikgewotICAgICAg
Zm9yICh2YXIgdiA9IGN4LnZhcnM7IHY7IHYgPSB2Lm5leHQpCi0gICAgICAgIGlmICh2Lm5hbWUg
PT0gdmFybmFtZSkgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcGFyc2VK
UyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkgewotICAgIHZhciBjYyA9IHN0
YXRlLmNjOwotICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9y
cy4KLSAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1
cmVzIG9uIGV2ZXJ5IGNhbGwuKQotICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0
cmVhbTsgY3gubWFya2VkID0gbnVsbCwgY3guY2MgPSBjYzsKLQotICAgIGlmICghc3RhdGUubGV4
aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKLSAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24g
PSB0cnVlOwotCi0gICAgd2hpbGUodHJ1ZSkgewotICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5s
ZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDsKLSAg
ICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7Ci0gICAgICAgIHdoaWxlKGNjLmxl
bmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCi0gICAgICAgICAgY2MucG9wKCkoKTsKLSAg
ICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKLSAgICAgICAgaWYgKHR5cGUg
PT0gInZhcmlhYmxlIiAmJiBpblNjb3BlKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuICJ2YXJpYWJs
ZS0yIjsKLSAgICAgICAgcmV0dXJuIHN0eWxlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8v
IENvbWJpbmF0b3IgdXRpbHMKLQotICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVs
bCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07Ci0gIGZ1bmN0aW9uIHBhc3MoKSB7Ci0gICAgZm9y
ICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChh
cmd1bWVudHNbaV0pOwotICB9Ci0gIGZ1bmN0aW9uIGNvbnQoKSB7Ci0gICAgcGFzcy5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIHJlZ2lz
dGVyKHZhcm5hbWUpIHsKLSAgICBmdW5jdGlvbiBpbkxpc3QobGlzdCkgewotICAgICAgZm9yICh2
YXIgdiA9IGxpc3Q7IHY7IHYgPSB2Lm5leHQpCi0gICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFt
ZSkgcmV0dXJuIHRydWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciBzdGF0
ZSA9IGN4LnN0YXRlOwotICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7Ci0gICAgICBjeC5tYXJrZWQg
PSAiZGVmIjsKLSAgICAgIGlmIChpbkxpc3Qoc3RhdGUubG9jYWxWYXJzKSkgcmV0dXJuOwotICAg
ICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2FsVmFy
c307Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChpbkxpc3Qoc3RhdGUuZ2xvYmFsVmFycykpIHJl
dHVybjsKLSAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycykKLSAgICAgICAgc3RhdGUu
Z2xvYmFsVmFycyA9IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0ZS5nbG9iYWxWYXJzfTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBDb21iaW5hdG9ycwotCi0gIHZhciBkZWZhdWx0VmFycyA9IHtuYW1l
OiAidGhpcyIsIG5leHQ6IHtuYW1lOiAiYXJndW1lbnRzIn19OwotICBmdW5jdGlvbiBwdXNoY29u
dGV4dCgpIHsKLSAgICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4LnN0YXRlLmNvbnRleHQs
IHZhcnM6IGN4LnN0YXRlLmxvY2FsVmFyc307Ci0gICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVm
YXVsdFZhcnM7Ci0gIH0KLSAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKLSAgICBjeC5zdGF0ZS5s
b2NhbFZhcnMgPSBjeC5zdGF0ZS5jb250ZXh0LnZhcnM7Ci0gICAgY3guc3RhdGUuY29udGV4dCA9
IGN4LnN0YXRlLmNvbnRleHQucHJldjsKLSAgfQotICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGlu
Zm8pIHsKLSAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgc3RhdGUgPSBj
eC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7Ci0gICAgICBpZiAoc3RhdGUubGV4aWNh
bC50eXBlID09ICJzdGF0IikgaW5kZW50ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKLSAgICAg
IHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2FsKGluZGVudCwgY3guc3RyZWFtLmNvbHVtbigp
LCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKLSAgICB9OwotICAgIHJlc3VsdC5s
ZXggPSB0cnVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgZnVuY3Rpb24gcG9wbGV4KCkg
ewotICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwotICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYp
IHsKLSAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gIikiKQotICAgICAgICBzdGF0ZS5p
bmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0g
c3RhdGUubGV4aWNhbC5wcmV2OwotICAgIH0KLSAgfQotICBwb3BsZXgubGV4ID0gdHJ1ZTsKLQot
ICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7Ci0gICAgZnVuY3Rpb24gZXhwKHR5cGUpIHsKLSAg
ICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIGVsc2UgaWYgKHdh
bnRlZCA9PSAiOyIpIHJldHVybiBwYXNzKCk7Ci0gICAgICBlbHNlIHJldHVybiBjb250KGV4cCk7
Ci0gICAgfTsKLSAgICByZXR1cm4gZXhwOwotICB9Ci0KLSAgZnVuY3Rpb24gc3RhdGVtZW50KHR5
cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHB1c2hsZXgo
InZhcmRlZiIsIHZhbHVlLmxlbmd0aCksIHZhcmRlZiwgZXhwZWN0KCI7IiksIHBvcGxleCk7Ci0g
ICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwg
ZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICJrZXl3b3Jk
IGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKLSAg
ICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxl
eCk7Ci0gICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwotICAgIGlmICh0eXBlID09
ICJpZiIpIHsKLSAgICAgIGlmIChjeC5zdGF0ZS5sZXhpY2FsLmluZm8gPT0gImVsc2UiICYmIGN4
LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleCkKLSAgICAgICAgY3gu
c3RhdGUuY2MucG9wKCkoKTsKLSAgICAgIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhw
cmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7Ci0gICAgfQotICAgIGlmICh0
eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlw
ZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBmb3JzcGVjLCBzdGF0ZW1l
bnQsIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVz
aGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKLSAgICBpZiAodHlwZSA9PSAic3dpdGNoIikgcmV0
dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3aXRj
aCIpLCBleHBlY3QoInsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKLSAgICBpZiAodHlwZSA9PSAiY2FzZSIpIHJldHVybiBj
b250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKLSAgICBpZiAodHlwZSA9PSAiZGVmYXVsdCIp
IHJldHVybiBjb250KGV4cGVjdCgiOiIpKTsKLSAgICBpZiAodHlwZSA9PSAiY2F0Y2giKSByZXR1
cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBleHBlY3QoIigiKSwgZnVuYXJn
LCBleHBlY3QoIikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7Ci0gICAgaWYgKHR5cGUgPT0gIm1vZHVsZSIpIHJl
dHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGFmdGVyTW9kdWxlLCBwb3Bj
b250ZXh0LCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICJjbGFzcyIpIHJldHVybiBjb250KHB1
c2hsZXgoImZvcm0iKSwgY2xhc3NOYW1lLCBvYmpsaXQsIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUg
PT0gImV4cG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0ZXJFeHBvcnQsIHBv
cGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gImltcG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoImZv
cm0iKSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7Ci0gICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3Rh
dCIpLCBleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKLSAgfQotICBmdW5jdGlvbiBl
eHByZXNzaW9uKHR5cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIGZhbHNl
KTsKLSAgfQotICBmdW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlKSB7Ci0gICAgcmV0dXJu
IGV4cHJlc3Npb25Jbm5lcih0eXBlLCB0cnVlKTsKLSAgfQotICBmdW5jdGlvbiBleHByZXNzaW9u
SW5uZXIodHlwZSwgbm9Db21tYSkgewotICAgIGlmIChjeC5zdGF0ZS5mYXRBcnJvd0F0ID09IGN4
LnN0cmVhbS5zdGFydCkgewotICAgICAgdmFyIGJvZHkgPSBub0NvbW1hID8gYXJyb3dCb2R5Tm9D
b21tYSA6IGFycm93Qm9keTsKLSAgICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVz
aGNvbnRleHQsIHB1c2hsZXgoIikiKSwgY29tbWFzZXAocGF0dGVybiwgIikiKSwgcG9wbGV4LCBl
eHBlY3QoIj0+IiksIGJvZHksIHBvcGNvbnRleHQpOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
dmFyaWFibGUiKSByZXR1cm4gcGFzcyhwdXNoY29udGV4dCwgcGF0dGVybiwgZXhwZWN0KCI9PiIp
LCBib2R5LCBwb3Bjb250ZXh0KTsKLSAgICB9Ci0KLSAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEg
PyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYTsKLSAgICBpZiAoYXRv
bWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3ApOwotICAg
IGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9w
KTsKLSAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IG1h
eWJlZXhwcmVzc2lvbk5vQ29tbWEgOiBtYXliZWV4cHJlc3Npb24pOwotICAgIGlmICh0eXBlID09
ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGNvbXByZWhl
bnNpb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3ApOwotICAgIGlmICh0eXBlID09ICJv
cGVyYXRvciIgfHwgdHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IGV4cHJl
c3Npb25Ob0NvbW1hIDogZXhwcmVzc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4g
Y29udChwdXNobGV4KCJdIiksIGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTsKLSAgICBp
ZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250Q29tbWFzZXAob2JqcHJvcCwgIn0iLCBudWxsLCBt
YXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAicXVhc2kiKSB7IHJldHVybiBwYXNzKHF1YXNpLCBt
YXliZW9wKTsgfQotICAgIHJldHVybiBjb250KCk7Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVleHBy
ZXNzaW9uKHR5cGUpIHsKLSAgICBpZiAodHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4g
cGFzcygpOwotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIG1h
eWJlZXhwcmVzc2lvbk5vQ29tbWEodHlwZSkgewotICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClc
XSxdLykpIHJldHVybiBwYXNzKCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEp
OwotICB9Ci0KLSAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7Ci0g
ICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKLSAgICByZXR1cm4g
bWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIGZhbHNlKTsKLSAgfQotICBmdW5jdGlv
biBtYXliZW9wZXJhdG9yTm9Db21tYSh0eXBlLCB2YWx1ZSwgbm9Db21tYSkgewotICAgIHZhciBt
ZSA9IG5vQ29tbWEgPT0gZmFsc2UgPyBtYXliZW9wZXJhdG9yQ29tbWEgOiBtYXliZW9wZXJhdG9y
Tm9Db21tYTsKLSAgICB2YXIgZXhwciA9IG5vQ29tbWEgPT0gZmFsc2UgPyBleHByZXNzaW9uIDog
ZXhwcmVzc2lvbk5vQ29tbWE7Ci0gICAgaWYgKHZhbHVlID09ICI9PiIpIHJldHVybiBjb250KHB1
c2hjb250ZXh0LCBub0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFycm93Qm9keSwgcG9wY29u
dGV4dCk7Ci0gICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgewotICAgICAgaWYgKC9cK1wrfC0t
Ly50ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWUpOwotICAgICAgaWYgKHZhbHVlID09ICI/Iikg
cmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IiksIGV4cHIpOwotICAgICAgcmV0dXJu
IGNvbnQoZXhwcik7Ci0gICAgfQotICAgIGlmICh0eXBlID09ICJxdWFzaSIpIHsgcmV0dXJuIHBh
c3MocXVhc2ksIG1lKTsgfQotICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwotICAgIGlmICh0
eXBlID09ICIoIikgcmV0dXJuIGNvbnRDb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiLCAi
Y2FsbCIsIG1lKTsKLSAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVybiBjb250KHByb3BlcnR5LCBt
ZSk7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIG1heWJl
ZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwotICB9Ci0gIGZ1bmN0aW9uIHF1
YXNpKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgIT0gInF1YXNpIikgcmV0dXJuIHBhc3Mo
KTsKLSAgICBpZiAodmFsdWUuc2xpY2UodmFsdWUubGVuZ3RoIC0gMikgIT0gIiR7IikgcmV0dXJu
IGNvbnQocXVhc2kpOwotICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNvbnRpbnVlUXVhc2kp
OwotICB9Ci0gIGZ1bmN0aW9uIGNvbnRpbnVlUXVhc2kodHlwZSkgewotICAgIGlmICh0eXBlID09
ICJ9IikgewotICAgICAgY3gubWFya2VkID0gInN0cmluZy0yIjsKLSAgICAgIGN4LnN0YXRlLnRv
a2VuaXplID0gdG9rZW5RdWFzaTsKLSAgICAgIHJldHVybiBjb250KHF1YXNpKTsKLSAgICB9Ci0g
IH0KLSAgZnVuY3Rpb24gYXJyb3dCb2R5KHR5cGUpIHsKLSAgICBmaW5kRmF0QXJyb3coY3guc3Ry
ZWFtLCBjeC5zdGF0ZSk7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhzdGF0ZW1l
bnQpOwotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIGFycm93
Qm9keU5vQ29tbWEodHlwZSkgewotICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRl
KTsKLSAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBwYXNzKHN0YXRlbWVudCk7Ci0gICAgcmV0
dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEpOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJlbGFiZWwo
dHlwZSkgewotICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1l
bnQpOwotICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3JDb21tYSwgZXhwZWN0KCI7IiksIHBv
cGxleCk7Ci0gIH0KLSAgZnVuY3Rpb24gcHJvcGVydHkodHlwZSkgewotICAgIGlmICh0eXBlID09
ICJ2YXJpYWJsZSIpIHtjeC5tYXJrZWQgPSAicHJvcGVydHkiOyByZXR1cm4gY29udCgpO30KLSAg
fQotICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInZh
cmlhYmxlIikgewotICAgICAgY3gubWFya2VkID0gInByb3BlcnR5IjsKLSAgICAgIGlmICh2YWx1
ZSA9PSAiZ2V0IiB8fCB2YWx1ZSA9PSAic2V0IikgcmV0dXJuIGNvbnQoZ2V0dGVyU2V0dGVyKTsK
LSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIm51bWJlciIgfHwgdHlwZSA9PSAic3RyaW5nIikgewot
ICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/ICJwcm9wZXJ0eSIgOiAodHlwZSArICIgcHJv
cGVydHkiKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIlsiKSB7Ci0gICAgICByZXR1cm4gY29u
dChleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgYWZ0ZXJwcm9wKTsKLSAgICB9Ci0gICAgaWYgKGF0
b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChhZnRlcnByb3ApOwot
ICB9Ci0gIGZ1bmN0aW9uIGdldHRlclNldHRlcih0eXBlKSB7Ci0gICAgaWYgKHR5cGUgIT0gInZh
cmlhYmxlIikgcmV0dXJuIHBhc3MoYWZ0ZXJwcm9wKTsKLSAgICBjeC5tYXJrZWQgPSAicHJvcGVy
dHkiOwotICAgIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKLSAgfQotICBmdW5jdGlvbiBhZnRl
cnByb3AodHlwZSkgewotICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lv
bk5vQ29tbWEpOwotICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYp
OwotICB9Ci0gIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkgewotICAgIGZ1bmN0aW9uIHBy
b2NlZWQodHlwZSkgewotICAgICAgaWYgKHR5cGUgPT0gIiwiKSB7Ci0gICAgICAgIHZhciBsZXgg
PSBjeC5zdGF0ZS5sZXhpY2FsOwotICAgICAgICBpZiAobGV4LmluZm8gPT0gImNhbGwiKSBsZXgu
cG9zID0gKGxleC5wb3MgfHwgMCkgKyAxOwotICAgICAgICByZXR1cm4gY29udCh3aGF0LCBwcm9j
ZWVkKTsKLSAgICAgIH0KLSAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAg
ICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9u
KHR5cGUpIHsKLSAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIHJl
dHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gY29udENv
bW1hc2VwKHdoYXQsIGVuZCwgaW5mbykgewotICAgIGZvciAodmFyIGkgPSAzOyBpIDwgYXJndW1l
bnRzLmxlbmd0aDsgaSsrKQotICAgICAgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwotICAgIHJl
dHVybiBjb250KHB1c2hsZXgoZW5kLCBpbmZvKSwgY29tbWFzZXAod2hhdCwgZW5kKSwgcG9wbGV4
KTsKLSAgfQotICBmdW5jdGlvbiBibG9jayh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSBy
ZXR1cm4gY29udCgpOwotICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spOwotICB9Ci0g
IGZ1bmN0aW9uIG1heWJldHlwZSh0eXBlKSB7Ci0gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSAiOiIp
IHJldHVybiBjb250KHR5cGVkZWYpOwotICB9Ci0gIGZ1bmN0aW9uIHR5cGVkZWYodHlwZSkgewot
ICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpe2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZS0zIjsgcmV0
dXJuIGNvbnQoKTt9Ci0gIH0KLSAgZnVuY3Rpb24gdmFyZGVmKCkgewotICAgIHJldHVybiBwYXNz
KHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVBc3NpZ24sIHZhcmRlZkNvbnQpOwotICB9Ci0gIGZ1
bmN0aW9uIHBhdHRlcm4odHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUi
KSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTsgfQotICAgIGlmICh0eXBlID09ICJb
IikgcmV0dXJuIGNvbnRDb21tYXNlcChwYXR0ZXJuLCAiXSIpOwotICAgIGlmICh0eXBlID09ICJ7
IikgcmV0dXJuIGNvbnRDb21tYXNlcChwcm9wcGF0dGVybiwgIn0iKTsKLSAgfQotICBmdW5jdGlv
biBwcm9wcGF0dGVybih0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIg
JiYgIWN4LnN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpIHsKLSAgICAgIHJlZ2lzdGVyKHZh
bHVlKTsKLSAgICAgIHJldHVybiBjb250KG1heWJlQXNzaWduKTsKLSAgICB9Ci0gICAgaWYgKHR5
cGUgPT0gInZhcmlhYmxlIikgY3gubWFya2VkID0gInByb3BlcnR5IjsKLSAgICByZXR1cm4gY29u
dChleHBlY3QoIjoiKSwgcGF0dGVybiwgbWF5YmVBc3NpZ24pOwotICB9Ci0gIGZ1bmN0aW9uIG1h
eWJlQXNzaWduKF90eXBlLCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBj
b250KGV4cHJlc3Npb25Ob0NvbW1hKTsKLSAgfQotICBmdW5jdGlvbiB2YXJkZWZDb250KHR5cGUp
IHsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZik7Ci0gIH0KLSAgZnVu
Y3Rpb24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQg
YiIgJiYgdmFsdWUgPT0gImVsc2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiwgImVsc2Ui
KSwgc3RhdGVtZW50LCBwb3BsZXgpOwotICB9Ci0gIGZ1bmN0aW9uIGZvcnNwZWModHlwZSkgewot
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwg
ZXhwZWN0KCIpIiksIHBvcGxleCk7Ci0gIH0KLSAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewot
ICAgIGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYsIGV4cGVjdCgiOyIpLCBm
b3JzcGVjMik7Ci0gICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMik7Ci0g
ICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbm9mKTsKLSAg
ICByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgZm9yc3BlYzIpOwotICB9Ci0g
IGZ1bmN0aW9uIGZvcm1heWJlaW5vZihfdHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0g
ImluIiB8fCB2YWx1ZSA9PSAib2YiKSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNv
bnQoZXhwcmVzc2lvbik7IH0KLSAgICByZXR1cm4gY29udChtYXliZW9wZXJhdG9yQ29tbWEsIGZv
cnNwZWMyKTsKLSAgfQotICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkgewotICAgIGlm
ICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpOwotICAgIGlmICh2YWx1ZSA9PSAi
aW4iIHx8IHZhbHVlID09ICJvZiIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29u
dChleHByZXNzaW9uKTsgfQotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGV4cGVjdCgiOyIp
LCBmb3JzcGVjMyk7Ci0gIH0KLSAgZnVuY3Rpb24gZm9yc3BlYzModHlwZSkgewotICAgIGlmICh0
eXBlICE9ICIpIikgY29udChleHByZXNzaW9uKTsKLSAgfQotICBmdW5jdGlvbiBmdW5jdGlvbmRl
Zih0eXBlLCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiKiIpIHtjeC5tYXJrZWQgPSAia2V5
d29yZCI7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlh
YmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KLSAgICBp
ZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KCIpIiksIGNv
bW1hc2VwKGZ1bmFyZywgIikiKSwgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpOwotICB9
Ci0gIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJl
dHVybiBjb250KGZ1bmFyZyk7Ci0gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlKTsK
LSAgfQotICBmdW5jdGlvbiBjbGFzc05hbWUodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9
PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChjbGFzc05hbWVBZnRl
cik7fQotICB9Ci0gIGZ1bmN0aW9uIGNsYXNzTmFtZUFmdGVyKF90eXBlLCB2YWx1ZSkgewotICAg
IGlmICh2YWx1ZSA9PSAiZXh0ZW5kcyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwotICB9Ci0g
IGZ1bmN0aW9uIG9iamxpdCh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29u
dENvbW1hc2VwKG9ianByb3AsICJ9Iik7Ci0gIH0KLSAgZnVuY3Rpb24gYWZ0ZXJNb2R1bGUodHlw
ZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoc3RhdGVt
ZW50KTsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0
dXJuIGNvbnQobWF5YmVGcm9tKTsgfQotICB9Ci0gIGZ1bmN0aW9uIGFmdGVyRXhwb3J0KF90eXBl
LCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiKiIpIHsgY3gubWFya2VkID0gImtleXdvcmQi
OyByZXR1cm4gY29udChtYXliZUZyb20sIGV4cGVjdCgiOyIpKTsgfQotICAgIGlmICh2YWx1ZSA9
PSAiZGVmYXVsdCIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNz
aW9uLCBleHBlY3QoIjsiKSk7IH0KLSAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQpOwotICB9Ci0g
IGZ1bmN0aW9uIGFmdGVySW1wb3J0KHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAic3RyaW5nIikg
cmV0dXJuIGNvbnQoKTsKLSAgICByZXR1cm4gcGFzcyhpbXBvcnRTcGVjLCBtYXliZUZyb20pOwot
ICB9Ci0gIGZ1bmN0aW9uIGltcG9ydFNwZWModHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9
PSAieyIpIHJldHVybiBjb250Q29tbWFzZXAoaW1wb3J0U3BlYywgIn0iKTsKLSAgICBpZiAodHlw
ZSA9PSAidmFyaWFibGUiKSByZWdpc3Rlcih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnQoKTsKLSAg
fQotICBmdW5jdGlvbiBtYXliZUZyb20oX3R5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09
ICJmcm9tIikgeyBjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KGV4cHJlc3Npb24p
OyB9Ci0gIH0KLSAgZnVuY3Rpb24gYXJyYXlMaXRlcmFsKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9
PSAiXSIpIHJldHVybiBjb250KCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEs
IG1heWJlQXJyYXlDb21wcmVoZW5zaW9uKTsKLSAgfQotICBmdW5jdGlvbiBtYXliZUFycmF5Q29t
cHJlaGVuc2lvbih0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBwYXNzKGNv
bXByZWhlbnNpb24sIGV4cGVjdCgiXSIpKTsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBj
b250KGNvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIpKTsKLSAgICByZXR1cm4gcGFzcyhj
b21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSk7Ci0gIH0KLSAgZnVuY3Rpb24gY29tcHJl
aGVuc2lvbih0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KGZvcnNw
ZWMsIGNvbXByZWhlbnNpb24pOwotICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KGV4
cHJlc3Npb24sIGNvbXByZWhlbnNpb24pOwotICB9Ci0KLSAgLy8gSW50ZXJmYWNlCi0KLSAgcmV0
dXJuIHsKLSAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7Ci0gICAgICB2YXIg
c3RhdGUgPSB7Ci0gICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCi0gICAgICAgIGxhc3RUeXBl
OiAic29mIiwKLSAgICAgICAgY2M6IFtdLAotICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2Fs
KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgImJsb2NrIiwgZmFsc2UpLAotICAg
ICAgICBsb2NhbFZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsCi0gICAgICAgIGNvbnRleHQ6
IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9
LAotICAgICAgICBpbmRlbnRlZDogMAotICAgICAgfTsKLSAgICAgIGlmIChwYXJzZXJDb25maWcu
Z2xvYmFsVmFycyAmJiB0eXBlb2YgcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgPT0gIm9iamVjdCIp
Ci0gICAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFsVmFyczsKLSAg
ICAgIHJldHVybiBzdGF0ZTsKLSAgICB9LAotCi0gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwg
c3RhdGUpIHsKLSAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKLSAgICAgICAgaWYgKCFzdGF0ZS5s
ZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQotICAgICAgICAgIHN0YXRlLmxleGljYWwu
YWxpZ24gPSBmYWxzZTsKLSAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRp
b24oKTsKLSAgICAgICAgZmluZEZhdEFycm93KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfQotICAg
ICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQ29tbWVudCAmJiBzdHJlYW0uZWF0U3BhY2Uo
KSkgcmV0dXJuIG51bGw7Ci0gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0s
IHN0YXRlKTsKLSAgICAgIGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwotICAg
ICAgc3RhdGUubGFzdFR5cGUgPSB0eXBlID09ICJvcGVyYXRvciIgJiYgKGNvbnRlbnQgPT0gIisr
IiB8fCBjb250ZW50ID09ICItLSIpID8gImluY2RlYyIgOiB0eXBlOwotICAgICAgcmV0dXJuIHBh
cnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pOwotICAgIH0sCi0KLSAg
ICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKLSAgICAgIGlmIChzdGF0ZS50
b2tlbml6ZSA9PSB0b2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICBp
ZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKLSAgICAgIHZhciBmaXJz
dENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRl
LmxleGljYWw7Ci0gICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20gYmxv
Y2tpbmcgbGV4aWNhbCBzY29wZSBwb3BzCi0gICAgICBpZiAoIS9eXHMqZWxzZVxiLy50ZXN0KHRl
eHRBZnRlcikpIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICB2YXIgYyA9IHN0YXRlLmNjW2ldOwotICAgICAgICBpZiAoYyA9PSBwb3BsZXgp
IGxleGljYWwgPSBsZXhpY2FsLnByZXY7Ci0gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNl
KSBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiICYmIGZp
cnN0Q2hhciA9PSAifSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7Ci0gICAgICBpZiAoc3RhdGVt
ZW50SW5kZW50ICYmIGxleGljYWwudHlwZSA9PSAiKSIgJiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0g
InN0YXQiKQotICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwotICAgICAgdmFyIHR5cGUg
PSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKLQotICAgICAgaWYg
KHR5cGUgPT0gInZhcmRlZiIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RU
eXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gbGV4aWNhbC5pbmZv
ICsgMSA6IDApOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIgJiYgZmlyc3RDaGFyID09
ICJ7IikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQ7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJm
b3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwotICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAic3RhdCIpCi0gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0
YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gc3Rh
dGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwu
aW5mbyA9PSAic3dpdGNoIiAmJiAhY2xvc2luZyAmJiBwYXJzZXJDb25maWcuZG91YmxlSW5kZW50
U3dpdGNoICE9IGZhbHNlKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/
OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRl
bnRVbml0KTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNv
bHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwotICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRl
bnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwotICAgIH0sCi0KLSAgICBlbGVjdHJp
Y0NoYXJzOiAiOnt9IiwKLSAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDog
Ii8qIiwKLSAgICBibG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCi0gICAg
bGluZUNvbW1lbnQ6IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCi0gICAgZm9sZDogImJyYWNlIiwK
LQotICAgIGhlbHBlclR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAotICAg
IGpzb25sZE1vZGU6IGpzb25sZE1vZGUsCi0gICAganNvbk1vZGU6IGpzb25Nb2RlCi0gIH07Ci19
KTsKLQotQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcigid29yZENoYXJzIiwgImphdmFzY3JpcHQi
LCAvW1xcdyRdLyk7Ci0KLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9qYXZhc2NyaXB0Iiwg
ImphdmFzY3JpcHQiKTsKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9lY21hc2NyaXB0Iiwg
ImphdmFzY3JpcHQiKTsKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNj
cmlwdCIsICJqYXZhc2NyaXB0Iik7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9u
L2VjbWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwotQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBs
aWNhdGlvbi9qc29uIiwge25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwotQ29kZU1p
cnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQi
LCBqc29uOiB0cnVlfSk7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2xkK2pz
b24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29ubGQ6IHRydWV9KTsKLUNvZGVNaXJyb3IuZGVm
aW5lTUlNRSgidGV4dC90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3Jp
cHQ6IHRydWUgfSk7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3Jp
cHQiLCB7IG5hbWU6ICJqYXZhc2NyaXB0IiwgdHlwZXNjcmlwdDogdHJ1ZSB9KTsKLQotfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db2Rl
TWlycm9yRm9ybWF0dGVycy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCmluZGV4IDcxNDM5Y2QuLjRmNWNmYjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVN
aXJyb3JGb3JtYXR0ZXJzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCkBAIC0yMTEsNyArMjExLDcgQEAgQ29k
ZU1pcnJvci5leHRlbmRNb2RlKCJqYXZhc2NyaXB0IiwgewogICAgICAgICBpZiAoIWlzQ29tbWVu
dCAmJiBzdGF0ZS5sZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJm
b3JtIiAmJiAhc3RhdGUubGV4aWNhbC5wcmV2Ll9qc1ByZXR0eVByaW50TWFya2VyICYmIChsYXN0
Q29udGVudCA9PT0gIikiIHx8IGxhc3RDb250ZW50ID09PSAiZWxzZSIgfHwgbGFzdENvbnRlbnQg
PT09ICJkbyIpICYmIChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICIpIikpIHsKICAgICAgICAgICAg
IGlmIChjb250ZW50ID09PSAieyIpIHsKICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBzdGF0
ZSBhdCB0aGUgb3BlbmluZyBicmFjZSBzbyB3ZSBjYW4gcmV0dXJuIHRvIGl0IHdoZW4gd2Ugc2Vl
ICJ9Ii4KLSAgICAgICAgICAgICAgICB2YXIgc2F2ZWRTdGF0ZSA9IHtpbmRlbnRDb3VudDpzdGF0
ZS5fanNQcmV0dHlQcmludC5pbmRlbnRDb3VudCwgb3BlbkJyYWNlVHJhY2tpbmdDb3VudDpzdGF0
ZS5fanNQcmV0dHlQcmludC5vcGVuQnJhY2VUcmFja2luZ0NvdW50fTsKKyAgICAgICAgICAgICAg
ICB2YXIgc2F2ZWRTdGF0ZSA9IHtpbmRlbnRDb3VudDogc3RhdGUuX2pzUHJldHR5UHJpbnQuaW5k
ZW50Q291bnQsIG9wZW5CcmFjZVRyYWNraW5nQ291bnQ6IHN0YXRlLl9qc1ByZXR0eVByaW50Lm9w
ZW5CcmFjZVRyYWNraW5nQ291bnR9OwogICAgICAgICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVBy
aW50Lm9wZW5CcmFjZVN0YXJ0TWFya2Vycy5wdXNoKHNhdmVkU3RhdGUpOwogICAgICAgICAgICAg
ICAgIHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnQgPSAxOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICJ9IikgewpAQCAtMzMz
LDcgKzMzMyw3IEBAIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSgiY3NzIiwgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3RhdGUgPT09
ICJwcm9wIikgLy8gLXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC4uLil0cmFuc2xhdGUoLi4uKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0
YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IHN0YXRlLnN0YXRlID09PSAibWVkaWFfcGFyZW5zIikg
Ly8gU3BhY2UgaW4gIm5vdChmb28pYW5kIiBidXQgbm90IGF0IHRoZSBlbmQgb2YgIm5vdChub3Qo
Zm9vKSkiIAorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBz
dGF0ZS5zdGF0ZSA9PT0gIm1lZGlhX3BhcmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9vKWFuZCIg
YnV0IG5vdCBhdCB0aGUgZW5kIG9mICJub3Qobm90KGZvbykpIgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNvbG9yOiBy
Z2IoLi4uKTsKICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251200</attachid>
            <date>2015-04-20 16:16:34 -0700</date>
            <delta_ts>2015-04-20 21:36:52 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>better.patch</filename>
            <type>text/plain</type>
            <size>417936</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDRlNjE2NDEuLjdkMjZiMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE1LTA0LTIwICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
UHJldHR5UHJpbnRpbmcgVG9vbCBhbmQgVXNlckludGVyZmFjZSByZXNvdXJjZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mzk2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmUgdGhlIFByZXR0eVBy
aW50aW5nIHRvb2wganVzdCB1c2UgdGhlIENvZGVNaXJyb3IgYW5kIFdlYkluc3BlY3RvcgorICAg
ICAgICByZXNvdXJjZXMgZnJvbSB0aGUgcmVsYXRpdmUgVXNlckludGVyZmFjZSBkaXJlY3Rvcnku
IFRoaXMgYXZvaWRzCisgICAgICAgIGhhdmluZyBkdXBsaWNhdGUgcmVzb3VyY2VzIGluIHRoZSB0
cmVlIHdoaWNoIG9mZmVyZWQgZmV3IGFkdmFudGFnZXMuCisKKyAgICAgICAgKiBTY3JpcHRzL3Vw
ZGF0ZS1wcmV0dHktcHJpbnRlci5yYjogUmVtb3ZlZC4KKyAgICAgICAgKiBUb29scy9QcmV0dHlQ
cmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBUb29s
cy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanM6IFJlbW92ZWQuCisgICAgICAgICogVG9vbHMv
UHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanM6IFJlbW92ZWQuCisgICAg
ICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5jc3M6IFJlbW92ZWQuCisgICAg
ICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJvci5qczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBUb29scy9QcmV0dHlQcmludGluZy9jc3MuanM6IFJlbW92ZWQuCisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvaW5kZXguaHRtbDoKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmlu
dGluZy9qYXZhc2NyaXB0LmpzOiBSZW1vdmVkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9Db2RlTWlycm9yRm9ybWF0dGVycy5qczoKKyAgICAgICAgRml4IHN0eWxlIGlzc3Vlcy4K
KworMjAxNS0wNC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcHJvdmUgU3VwcG9ydCBmb3IgV2Vha1NldCBpbiBDb25z
b2xlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM5
NTEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLXBy
ZXR0eS1wcmludGVyLnJiIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvdXBkYXRlLXBy
ZXR0eS1wcmludGVyLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmYjc2MjQxLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL3VwZGF0ZS1wcmV0dHkt
cHJpbnRlci5yYgorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMhL3Vzci9iaW4vcnVi
eQotCi1yZXF1aXJlICdmaWxldXRpbHMnCi0KLWRlZiB1c2FnZQotICBwdXRzICJ1c2FnZTogI3tG
aWxlLmJhc2VuYW1lICQwfSA8ZGVzdGluYXRpb24tdG8tdXBkYXRlPiIKLSAgcHV0cwotICBwdXRz
ICI8ZGVzdGluYXRpb24tdG8tdXBkYXRlPiB2YWx1ZXM6IgotICBwdXRzCi0gIHB1dHMgIiAgVG9v
bHMgICAgICAgICAtIENvcHkgdGhlIFVzZXJJbnRlcmZhY2UgZmlsZXMgdG8gdGhlIFRvb2xzIGRp
cmVjdG9yeSIKLSAgcHV0cyAiICBVc2VySW50ZXJmYWNlIC0gQ29weSB0aGUgVG9vbHMgZmlsZXMg
dG8gdGhlIFVzZXJJbnRlcmZhY2UgZGlyZWN0b3J5IgotICBleGl0IDEKLWVuZAotCi1pZiBBUkdW
LnNpemUgIT0gMQotICB1c2FnZQotZW5kCi0KLWRlc3RpbmF0aW9uID0gQVJHVlswXQotaWYgZGVz
dGluYXRpb24gIT0gIlRvb2xzIiAmJiBkZXN0aW5hdGlvbiAhPSAiVXNlckludGVyZmFjZSIKLSAg
dXNhZ2UKLWVuZAotCi0jIENvcHkgdGhlIGZvcm1hdHRlciBhbmQgQ29kZU1pcnJvciBmaWxlcyBm
cm9tIFVzZXJJbnRlcmZhY2UgdG8gVG9vbHMuCi1VU0VSX0lOVEVSRkFDRV9UT19UT09MU19NQVAg
PSB7Ci0gICJVc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIiAgICAg
ICAgICA9PiAiVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMiLAot
ICAiVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMiICAgICAgICAgICAgICAg
PT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5qcyIsCi0gICJVc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiA9PiAiVG9vbHMvUHJldHR5
UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMiLAotCi0gICJVc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5jc3MiICAgICA9PiAiVG9vbHMvUHJldHR5
UHJpbnRpbmcvY29kZW1pcnJvci5jc3MiLAotICAiVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2NvZGVtaXJyb3IuanMiICAgICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVt
aXJyb3IuanMiLAotICAiVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3Jp
cHQuanMiICAgICAgPT4gIlRvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMiLAotICAi
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyIgICAgICAgICAgICAgPT4g
IlRvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcyIsCi19Ci0KLSMgQ29weSBvbmx5IHRoZSBmb3Jt
YXR0ZXIgZmlsZXMgZnJvbSBUb29scyB0byBVc2VySW50ZXJmYWNlLgotVE9PTFNfVE9fVVNFUl9J
TlRFUkZBQ0VfTUFQID0gewotICAiVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1h
dHRlcnMuanMiICAgICAgICAgPT4gIlVzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1h
dHRlcnMuanMiLAotICAiVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzIiAgICAgICAg
ICAgICAgICAgICAgPT4gIlVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzIiwK
LSAgIlRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzIiAgICAg
ID0+ICJVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpz
IgotfQotCi13ZWJfaW5zcGVjdG9yX3BhdGggPSBGaWxlLmV4cGFuZF9wYXRoIEZpbGUuam9pbihG
aWxlLmRpcm5hbWUoX19GSUxFX18pLCAiLi4iKQotbWFwID0gZGVzdGluYXRpb24gPT0gIlRvb2xz
IiA/IFVTRVJfSU5URVJGQUNFX1RPX1RPT0xTX01BUCA6IFRPT0xTX1RPX1VTRVJfSU5URVJGQUNF
X01BUAotCi1hbGxfc3VjY2VzcyA9IHRydWUKLQotbWFwLmVhY2ggZG8gfGZyb20sIHRvfAotICBm
cm9tX3BhdGggPSBGaWxlLmpvaW4gd2ViX2luc3BlY3Rvcl9wYXRoLCBmcm9tCi0gIHRvX3BhdGgg
PSBGaWxlLmpvaW4gd2ViX2luc3BlY3Rvcl9wYXRoLCB0bwotICBiZWdpbgotICAgIHB1dHMgIkNv
cHlpbmcgI3tmcm9tfSB0byAje3RvfS4uLiIKLSAgICBGaWxlVXRpbHMuY3AgZnJvbV9wYXRoLCB0
b19wYXRoCi0gIHJlc2N1ZSBFeGNlcHRpb24gPT4gZQotICAgIHB1dHMgIldBUk5JTkc6ICN7ZX0i
Ci0gICAgYWxsX3N1Y2Nlc3MgPSBmYWxzZQotICBlbmQKLWVuZAotCi1leGl0IGFsbF9zdWNjZXNz
ID8gMCA6IDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQ
cmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9U
b29scy9QcmV0dHlQcmludGluZy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzE0MzljZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEluIHRoZSBpbnNwZWN0
b3IgdG9rZW4gdHlwZXMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgZXh0cmEgbW9kZSBp
bmZvcm1hdGlvbgotLy8gYWZ0ZXIgdGhlIGFjdHVhbCB0b2tlbiB0eXBlLiBTbyB3ZSBjYW4ndCBk
byB0b2tlbiA9PT0gImZvbyIuIFNvIGluc3RlYWQgd2UgZG8KLS8vIC9cYmZvb1xiLy50ZXN0KHRv
a2VuKS4KLQotQ29kZU1pcnJvci5leHRlbmRNb2RlKCJqYXZhc2NyaXB0IiwgewotICAgIHNob3Vs
ZEhhdmVTcGFjZUJlZm9yZVRva2VuOiBmdW5jdGlvbihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0
b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdG9r
ZW4pIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50ID09PSAiKCIpIC8vIE1vc3Qga2V5d29yZHMg
bGlrZSAiaWYgKCIgYnV0IG5vdCAiZnVuY3Rpb24oIiBvciAidHlwZW9mKCIuCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGxhc3RUb2tlbiAmJiAvXGJrZXl3b3JkXGIvLnRlc3QobGFzdFRva2VuKSAm
JiAobGFzdENvbnRlbnQgIT09ICJmdW5jdGlvbiIgJiYgbGFzdENvbnRlbnQgIT09ICJ0eXBlb2Yi
ICYmIGxhc3RDb250ZW50ICE9PSAiaW5zdGFuY2VvZiIpOwotICAgICAgICAgICAgaWYgKGNvbnRl
bnQgPT09ICI6IikgLy8gVGVybmFyeS4KLSAgICAgICAgICAgICAgICByZXR1cm4gKHN0YXRlLmxl
eGljYWwudHlwZSA9PT0gInN0YXQiIHx8IHN0YXRlLmxleGljYWwudHlwZSA9PT0gIikiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0NvbW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoL1xib3BlcmF0b3Jc
Yi8udGVzdCh0b2tlbikpIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50ID09PSAiISIpIC8vIFVu
YXJ5ICEgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoICIhPSIuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuICIrLS8qJiZ8fCE9PT0rPS09Pj08PT8i
LmluZGV4T2YoY29udGVudCkgPj0gMDsgLy8gT3BlcmF0b3JzLgotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKC9cYmtleXdvcmRcYi8udGVzdCh0b2tlbikpIHsgLy8gTW9zdCBrZXl3b3JkcyByZXF1
aXJlIHNwYWNlcyBiZWZvcmUgdGhlbSwgdW5sZXNzIGEgJ30nIGNhbiBjb21lIGJlZm9yZSBpdC4K
LSAgICAgICAgICAgIGlmIChjb250ZW50ID09PSAiZWxzZSIgfHwgY29udGVudCA9PT0gImNhdGNo
IiB8fCBjb250ZW50ID09PSAiZmluYWxseSIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RD
b250ZW50ID09PSAifSI7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIHNob3VsZEhhdmVTcGFjZUFmdGVy
TGFzdFRva2VuOiBmdW5jdGlvbihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUs
IGNvbnRlbnQsIGlzQ29tbWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChsYXN0VG9rZW4gJiYgL1xi
a2V5d29yZFxiLy50ZXN0KGxhc3RUb2tlbikpIHsgIC8vIE1vc3Qga2V5d29yZHMgcmVxdWlyZSBz
cGFjZXMgYWZ0ZXIgdGhlbSwgdW5sZXNzIGEgJ3snIG9yICc7JyBjYW4gY29tZSBhZnRlciBpdC4K
LSAgICAgICAgICAgIGlmIChsYXN0Q29udGVudCA9PT0gImVsc2UiKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50ID09PSAiY2F0Y2giKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50
ID09PSAicmV0dXJuIikKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudCAhPT0gIjsiOwot
ICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50ID09PSAidGhyb3ciKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50ID09PSAidHJ5IikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChsYXN0Q29udGVudCA9
PT0gImZpbmFsbHkiKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
aWYgKGxhc3RDb250ZW50ID09PSAiZG8iKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhc3RU
b2tlbiAmJiAvXGJjb21tZW50XGIvLnRlc3QobGFzdFRva2VuKSkgLy8gRW1iZWRkZWQgLyogY29t
bWVudCAqLy4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAobGFzdENvbnRl
bnQgPT09ICIpIikgLy8gIil7Ii4KLSAgICAgICAgICAgIHJldHVybiBjb250ZW50ID09PSAieyI7
Ci0gICAgICAgIGlmIChsYXN0Q29udGVudCA9PT0gIjsiKSAvLyBJbiBmb3IgbG9vcC4KLSAgICAg
ICAgICAgIHJldHVybiBzdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICIpIjsKLSAgICAgICAgaWYgKGxh
c3RDb250ZW50ID09PSAiISIpIC8vIFVuYXJ5ICEgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRo
ICIhPSIuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuICIsKy0v
KiYmfHw6IT09PSs9LT0+PTw9PyIuaW5kZXhPZihsYXN0Q29udGVudCkgPj0gMDsgLy8gT3BlcmF0
b3JzLgotICAgIH0sCi0KLSAgICBuZXdsaW5lc0FmdGVyVG9rZW46IGZ1bmN0aW9uKGxhc3RUb2tl
biwgbGFzdENvbnRlbnQsIHRva2VuLCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50KQotICAgIHsK
LSAgICAgICAgaWYgKCF0b2tlbikgewotICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICIsIikg
Ly8gSW4gb2JqZWN0IGxpdGVyYWxzLCBsaWtlIGluIHthOjEsYjoyfSwgYnV0IG5vdCBpbiBwYXJh
bSBsaXN0cyBvciB2YXJkZWYgbGlzdHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmxl
eGljYWwudHlwZSA9PT0gIn0iID8gMSA6IDA7Ci0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0g
IjsiKSAvLyBFdmVyeXdoZXJlIGV4Y2VwdCBpbiBmb3IgbG9vcCBjb25kaXRpb25zLgotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICIpIiA/IDEgOiAwOwotICAg
ICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICI6IiAmJiBzdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJ9
IiAmJiBzdGF0ZS5sZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJm
b3JtIikgLy8gU3dpdGNoIGNhc2UvZGVmYXVsdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsK
LSAgICAgICAgICAgIHJldHVybiBjb250ZW50Lmxlbmd0aCA9PT0gMSAmJiAie30iLmluZGV4T2Yo
Y29udGVudCkgPj0gMCA/IDEgOiAwOyAvLyBBZnRlciBicmFjZXMuCi0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaXNDb21tZW50KQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfSwKLQotICAgIHJlbW92ZUxhc3ROZXdsaW5lOiBmdW5jdGlvbihsYXN0VG9r
ZW4sIGxhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCwgZmlyc3RU
b2tlbk9uTGluZSkKLSAgICB7Ci0gICAgICAgIGlmICghdG9rZW4pIHsKLSAgICAgICAgICAgIGlm
IChjb250ZW50ID09PSAifSIpIC8vICJ7fSIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RD
b250ZW50ID09PSAieyI7Ci0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gIjsiKSAvLyAieCA9
IHt9OyIgb3IgIjs7Ii4KLSAgICAgICAgICAgICAgICByZXR1cm4gIn07Ii5pbmRleE9mKGxhc3RD
b250ZW50KSA+PSAwOwotICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICI6IikgLy8gVGVybmFy
eS4KLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdENvbnRlbnQgPT09ICJ9IiAmJiAoc3RhdGUu
bGV4aWNhbC50eXBlID09PSAic3RhdCIgfHwgc3RhdGUubGV4aWNhbC50eXBlID09PSAiKSIpOwot
ICAgICAgICAgICAgaWYgKCIsKCkuIi5pbmRleE9mKGNvbnRlbnQpID49IDApIC8vICJ9KSIsICJ9
LmJpbmQiLCAiZnVuY3Rpb24oKSB7IC4uLiB9KCkiLCBvciAifSwgZmFsc2UpIi4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gbGFzdENvbnRlbnQgPT09ICJ9IjsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0NvbW1lbnQpIHsgLy8gQ29tbWVudCBh
ZnRlciBzZW1pY29sb24uCi0gICAgICAgICAgICBpZiAoIWZpcnN0VG9rZW5PbkxpbmUgJiYgbGFz
dENvbnRlbnQgPT09ICI7IikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgvXGJrZXl3b3JkXGIv
LnRlc3QodG9rZW4pKSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gImVsc2UiIHx8IGNv
bnRlbnQgPT09ICJjYXRjaCIgfHwgY29udGVudCA9PT0gImZpbmFsbHkiKSAvLyAifSBlbHNlIiwg
In0gY2F0Y2giLCAifSBmaW5hbGx5IgotICAgICAgICAgICAgICAgIHJldHVybiBsYXN0Q29udGVu
dCA9PT0gIn0iOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBpbmRlbnRBZnRlclRva2VuOiBmdW5jdGlv
bihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVu
dCkKLSAgICB7Ci0gICAgICAgIGlmIChjb250ZW50ID09PSAieyIpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoY29udGVudCA9PT0gImNhc2UiIHx8IGNvbnRlbnQgPT09
ICJkZWZhdWx0IikKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJ9
IiAmJiBzdGF0ZS5sZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJm
b3JtIjsgLy8gU3dpdGNoIGNhc2UvZGVmYXVsdC4KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKLQotICAgIG5ld2xpbmVCZWZvcmVUb2tlbjogZnVuY3Rpb24obGFzdFRva2VuLCBsYXN0
Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpCi0gICAgewotICAgICAg
ICBpZiAoc3RhdGUuX2pzUHJldHR5UHJpbnQuc2hvdWxkSW5kZW50KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGNvbnRlbnQgPT09ICJ9IiAmJiBsYXN0Q29udGVu
dCAhPT0gInsiOyAvLyAie30iCi0gICAgfSwKLQotICAgIGluZGVudEJlZm9yZVRva2VuOiBmdW5j
dGlvbihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29t
bWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0ZS5fanNQcmV0dHlQcmludC5zaG91bGRJbmRl
bnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSwKLQotICAgIGRlZGVudHNCZWZvcmVUb2tlbjogZnVuY3Rpb24obGFzdFRva2VuLCBsYXN0
Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpCi0gICAgewotICAgICAg
ICB2YXIgZGVkZW50ID0gMDsKLQotICAgICAgICBpZiAoc3RhdGUuX2pzUHJldHR5UHJpbnQuc2hv
dWxkRGVkZW50KQotICAgICAgICAgICAgZGVkZW50ICs9IHN0YXRlLl9qc1ByZXR0eVByaW50LmRl
ZGVudFNpemU7Ci0KLSAgICAgICAgaWYgKCF0b2tlbiAmJiBjb250ZW50ID09PSAifSIpCi0gICAg
ICAgICAgICBkZWRlbnQgKz0gMTsKLSAgICAgICAgZWxzZSBpZiAodG9rZW4gJiYgL1xia2V5d29y
ZFxiLy50ZXN0KHRva2VuKSAmJiAoY29udGVudCA9PT0gImNhc2UiIHx8IGNvbnRlbnQgPT09ICJk
ZWZhdWx0IikpCi0gICAgICAgICAgICBkZWRlbnQgKz0gMTsKLQotICAgICAgICByZXR1cm4gZGVk
ZW50OwotICAgIH0sCi0KLSAgICBtb2RpZnlTdGF0ZUZvclRva2VuUHJlOiBmdW5jdGlvbihsYXN0
VG9rZW4sIGxhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghc3RhdGUuX2pzUHJldHR5UHJpbnQpIHsKLSAgICAgICAgICAgIHN0
YXRlLl9qc1ByZXR0eVByaW50ID0gewotICAgICAgICAgICAgICAgIGluZGVudENvdW50OiAwLCAg
ICAgICAvLyBIb3cgZmFyIGhhdmUgd2UgaW5kZW50ZWQgYmVjYXVzZSBvZiBzaW5nbGUgc3RhdGVt
ZW50IGJsb2Nrcy4KLSAgICAgICAgICAgICAgICBzaG91bGRJbmRlbnQ6IGZhbHNlLCAgLy8gU2ln
bmFsIHdlIHNob3VsZCBpbmRlbnQgb24gZW50ZXJpbmcgYSBzaW5nbGUgc3RhdGVtZW50IGJsb2Nr
LgotICAgICAgICAgICAgICAgIHNob3VsZERlZGVudDogZmFsc2UsICAvLyBTaWduYWwgd2Ugc2hv
dWxkIGRlZGVudCBvbiBsZWF2aW5nIGEgc2luZ2xlIHN0YXRlbWVudCBibG9jay4KLSAgICAgICAg
ICAgICAgICBkZWRlbnRTaXplOiAwLCAgICAgICAgLy8gSG93IGZhciB3ZSBzaG91bGQgZGVkZW50
IHdoZW4gbGVhdmluZyBhIHNpbmdsZSBzdGF0ZW1lbnQgYmxvY2suCi0gICAgICAgICAgICAgICAg
bGFzdElmSW5kZW50Q291bnQ6IDAsIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGluZGVudCB0aGUgbGFz
dCB0aW1lIHdlIHNhdyBhbiBpZiB3aXRob3V0IGJyYWNlcy4KLSAgICAgICAgICAgICAgICBvcGVu
QnJhY2VTdGFydE1hcmtlcnM6IFtdLCAgLy8gS2VlcCB0cmFjayBvZiBub24tc2luZ2xlIHN0YXRl
bWVudCBibG9ja3MuCi0gICAgICAgICAgICAgICAgb3BlbkJyYWNlVHJhY2tpbmdDb3VudDogLTEs
IC8vIEtlZXAgdHJhY2sgb2YgInsiIGFuZCAifSIgaW4gbm9uLXNpbmdsZSBzdGF0ZW1lbnQgYmxv
Y2tzLgotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIC0gRW50ZXJpbmc6
Ci0gICAgICAgIC8vICAgLSBQcmVjb25kaXRpb25zOgotICAgICAgICAvLyAgICAgLSBsYXN0IGxl
eGljYWwgd2FzIGEgImZvcm0iIHdlIGhhdmVuJ3QgZW5jb3VudGVyZWQgYmVmb3JlCi0gICAgICAg
IC8vICAgICAtIGxhc3QgY29udGVudCB3YXMgIikiLCAiZWxzZSIsIG9yICJkbyIKLSAgICAgICAg
Ly8gICAgIC0gY3VycmVudCBsZXhpY2FsIGlzIG5vdCAiKSIgKGluIGFuIGV4cHJlc3Npb24gb3Ig
Y29uZGl0aW9uKQotICAgICAgICAvLyAgIC0gQ2FzZXM6Ci0gICAgICAgIC8vICAgICAxLiAieyIK
LSAgICAgICAgLy8gICAgICAgLSBpbmRlbnQgKzAKLSAgICAgICAgLy8gICAgICAgLSBzYXZlIHRo
aXMgaW5kZW50IHNpemUgc28gd2hlbiB3ZSBlbmNvdW50ZXIgdGhlICJ9IiB3ZSBrbm93IGhvdyBm
YXIgdG8gZGVkZW50Ci0gICAgICAgIC8vICAgICAyLiAiZWxzZSBpZiIKLSAgICAgICAgLy8gICAg
ICAgLSBpbmRlbnQgKzAgYW5kIGRvIG5vdCBzaWduYWwgdG8gYWRkIGEgbmV3bGluZSBhbmQgaW5k
ZW50Ci0gICAgICAgIC8vICAgICAgIC0gbWFyayB0aGUgbGFzdCBpZiBsb2NhdGlvbiBzbyB3aGVu
IHdlIGVuY291bnRlciBhbiAiZWxzZSIgd2Uga25vdyBob3cgZmFyIHRvIGRlZGVudAotICAgICAg
ICAvLyAgICAgICAtIG1hcmsgdGhlIGxleGljYWwgc3RhdGUgc28gd2Uga25vdyB3ZSBhcmUgaW5z
aWRlIGEgc2luZ2xlIHN0YXRlbWVudCBibG9jawotICAgICAgICAvLyAgICAgMy4gVG9rZW4gd2l0
aG91dCBicmFjZS4KLSAgICAgICAgLy8gICAgICAgLSBpbmRlbnQgKzEgYW5kIHNpZ25hbCB0byBh
ZGQgYSBuZXdsaW5lIGFuZCBpbmRlbnQKLSAgICAgICAgLy8gICAgICAgLSBtYXJrIHRoZSBsYXN0
IGlmIGxvY2F0aW9uIHNvIHdoZW4gd2UgZW5jb3VudGVyIGFuICJlbHNlIiB3ZSBrbm93IGhvdyBm
YXIgdG8gZGVkZW50Ci0gICAgICAgIC8vICAgICAgIC0gbWFyayB0aGUgbGV4aWNhbCBzdGF0ZSBz
byB3ZSBrbm93IHdlIGFyZSBpbnNpZGUgYSBzaW5nbGUgc3RhdGVtZW50IGJsb2NrCi0gICAgICAg
IGlmICghaXNDb21tZW50ICYmIHN0YXRlLmxleGljYWwucHJldiAmJiBzdGF0ZS5sZXhpY2FsLnBy
ZXYudHlwZSA9PT0gImZvcm0iICYmICFzdGF0ZS5sZXhpY2FsLnByZXYuX2pzUHJldHR5UHJpbnRN
YXJrZXIgJiYgKGxhc3RDb250ZW50ID09PSAiKSIgfHwgbGFzdENvbnRlbnQgPT09ICJlbHNlIiB8
fCBsYXN0Q29udGVudCA9PT0gImRvIikgJiYgKHN0YXRlLmxleGljYWwudHlwZSAhPT0gIikiKSkg
ewotICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICJ7IikgewotICAgICAgICAgICAgICAgIC8v
IFNhdmUgdGhlIHN0YXRlIGF0IHRoZSBvcGVuaW5nIGJyYWNlIHNvIHdlIGNhbiByZXR1cm4gdG8g
aXQgd2hlbiB3ZSBzZWUgIn0iLgotICAgICAgICAgICAgICAgIHZhciBzYXZlZFN0YXRlID0ge2lu
ZGVudENvdW50OnN0YXRlLl9qc1ByZXR0eVByaW50LmluZGVudENvdW50LCBvcGVuQnJhY2VUcmFj
a2luZ0NvdW50OnN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnR9Owot
ICAgICAgICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVN0YXJ0TWFya2Vy
cy5wdXNoKHNhdmVkU3RhdGUpOwotICAgICAgICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVByaW50
Lm9wZW5CcmFjZVRyYWNraW5nQ291bnQgPSAxOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0
ZS5sZXhpY2FsLnR5cGUgIT09ICJ9IikgewotICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRo
ZSBpbmRlbnQgY291bnQuIFNpZ25hbCBmb3IgYSBuZXdsaW5lIGFuZCBpbmRlbnQgaWYgbmVlZGVk
LgotICAgICAgICAgICAgICAgIGlmICghKGxhc3RDb250ZW50ID09PSAiZWxzZSIgJiYgY29udGVu
dCA9PT0gImlmIikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQu
aW5kZW50Q291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQu
c2hvdWxkSW5kZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c3RhdGUubGV4aWNhbC5wcmV2Ll9qc1ByZXR0eVByaW50TWFya2VyID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RhdGUuX2pzUHJldHR5UHJpbnQuZW50ZXJpbmdJZikKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQubGFzdElmSW5kZW50Q291bnQgPSBzdGF0ZS5f
anNQcmV0dHlQcmludC5pbmRlbnRDb3VudCAtIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAtIExlYXZpbmc6Ci0gICAgICAgIC8vICAgLSBQcmVjb25kaXRpb25zOgot
ICAgICAgICAvLyAgICAgLSB3ZSBtdXN0IGJlIGluZGVudGVkCi0gICAgICAgIC8vICAgICAtIGln
bm9yZSAiOyIsIHdhaXQgZm9yIHRoZSBuZXh0IHRva2VuIGluc3RlYWQuCi0gICAgICAgIC8vICAg
LSBDYXNlczoKLSAgICAgICAgLy8gICAgIDEuICJlbHNlIgotICAgICAgICAvLyAgICAgICAtIGRl
ZGVudCB0byB0aGUgbGFzdCAiaWYiCi0gICAgICAgIC8vICAgICAyLiAifSIgYW5kIGFsbCBicmFj
ZXMgd2Ugc2F3IGFyZSBiYWxhbmNlZAotICAgICAgICAvLyAgICAgICAtIGRlZGVudCB0byB0aGUg
bGFzdCAieyIKLSAgICAgICAgLy8gICAgIDMuIFRva2VuIHdpdGhvdXQgYSBtYXJrZXIgb24gdGhl
IHN0YWNrCi0gICAgICAgIC8vICAgICAgIC0gZGVkZW50IGFsbCB0aGUgd2F5Ci0gICAgICAgIGVs
c2UgaWYgKHN0YXRlLl9qc1ByZXR0eVByaW50LmluZGVudENvdW50KSB7Ci0gICAgICAgICAgICBj
b25zb2xlLmFzc2VydCghc3RhdGUuX2pzUHJldHR5UHJpbnQuc2hvdWxkRGVkZW50KTsKLSAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFzdGF0ZS5fanNQcmV0dHlQcmludC5kZWRlbnRTaXplKTsK
LQotICAgICAgICAgICAgLy8gVHJhY2sgInsiIGFuZCAifSIgdG8ga25vdyB3aGVuIHRoZSAifSIg
aXMgcmVhbGx5IGNsb3NpbmcgYSBibG9jay4KLSAgICAgICAgICAgIGlmICghaXNDb21tZW50KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICJ7IikKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNlVHJhY2tpbmdDb3VudCsrOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNvbnRlbnQgPT09ICJ9IikKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNlVHJhY2tpbmdDb3VudC0tOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gIjsiKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWdub3JlLgotICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50ID09PSAiZWxzZSIp
IHsKLSAgICAgICAgICAgICAgICAvLyBEZWRlbnQgdG8gdGhlIGxhc3QgImlmIi4KLSAgICAgICAg
ICAgICAgICBpZiAobGFzdENvbnRlbnQgIT09ICJ9IikgewotICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5fanNQcmV0dHlQcmludC5zaG91bGREZWRlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5fanNQcmV0dHlQcmludC5kZWRlbnRTaXplID0gc3RhdGUuX2pzUHJldHR5UHJp
bnQuaW5kZW50Q291bnQgLSBzdGF0ZS5fanNQcmV0dHlQcmludC5sYXN0SWZJbmRlbnRDb3VudDsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQubGFzdElmSW5kZW50Q291
bnQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVu
dCA9PT0gIn0iICYmICFzdGF0ZS5fanNQcmV0dHlQcmludC5vcGVuQnJhY2VUcmFja2luZ0NvdW50
ICYmIHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVN0YXJ0TWFya2Vycy5sZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICAvLyBEZWRlbnQgdG8gdGhlIGxhc3QgInsiLgotICAgICAgICAgICAg
ICAgIHZhciBzYXZlZFN0YXRlID0gc3RhdGUuX2pzUHJldHR5UHJpbnQub3BlbkJyYWNlU3RhcnRN
YXJrZXJzLnBvcCgpOwotICAgICAgICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVByaW50LnNob3Vs
ZERlZGVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQuZGVk
ZW50U2l6ZSA9IHN0YXRlLl9qc1ByZXR0eVByaW50LmluZGVudENvdW50IC0gc2F2ZWRTdGF0ZS5p
bmRlbnRDb3VudDsKLSAgICAgICAgICAgICAgICBzdGF0ZS5fanNQcmV0dHlQcmludC5vcGVuQnJh
Y2VUcmFja2luZ0NvdW50ID0gc2F2ZWRTdGF0ZS5vcGVuQnJhY2VUcmFja2luZ0NvdW50OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEZWRlbnQgYWxsIHRoZSB3YXku
Ci0gICAgICAgICAgICAgICAgdmFyIHNob3VsZERlZGVudCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgdmFyIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKGxleGljYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxleGljYWwuX2pzUHJldHR5
UHJpbnRNYXJrZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERlZGVudCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJldjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZERlZGVudCkgewotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5fanNQcmV0dHlQcmludC5zaG91bGREZWRlbnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5fanNQcmV0dHlQcmludC5kZWRlbnRTaXplID0gc3RhdGUu
X2pzUHJldHR5UHJpbnQuaW5kZW50Q291bnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2lnbmFsIGZvciB3aGVuIHdlIHdpbGwgYmUg
ZW50ZXJpbmcgYW4gaWYuCi0gICAgICAgIGlmICh0b2tlbiAmJiBzdGF0ZS5sZXhpY2FsLnR5cGUg
PT09ICJmb3JtIiAmJiBzdGF0ZS5sZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2ICE9
PSAiZm9ybSIgJiYgL1xia2V5d29yZFxiLy50ZXN0KHRva2VuKSkKLSAgICAgICAgICAgIHN0YXRl
Ll9qc1ByZXR0eVByaW50LmVudGVyaW5nSWYgPSAoY29udGVudCA9PT0gImlmIik7Ci0gICAgfSwK
LQotICAgIG1vZGlmeVN0YXRlRm9yVG9rZW5Qb3N0OiBmdW5jdGlvbihsYXN0VG9rZW4sIGxhc3RD
b250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkKLSAgICB7Ci0gICAgICAg
IGlmIChzdGF0ZS5fanNQcmV0dHlQcmludC5zaG91bGRJbmRlbnQpCi0gICAgICAgICAgICBzdGF0
ZS5fanNQcmV0dHlQcmludC5zaG91bGRJbmRlbnQgPSBmYWxzZTsKLQotICAgICAgICBpZiAoc3Rh
dGUuX2pzUHJldHR5UHJpbnQuc2hvdWxkRGVkZW50KSB7Ci0gICAgICAgICAgICBzdGF0ZS5fanNQ
cmV0dHlQcmludC5pbmRlbnRDb3VudCAtPSBzdGF0ZS5fanNQcmV0dHlQcmludC5kZWRlbnRTaXpl
OwotICAgICAgICAgICAgc3RhdGUuX2pzUHJldHR5UHJpbnQuZGVkZW50U2l6ZSA9IDA7Ci0gICAg
ICAgICAgICBzdGF0ZS5fanNQcmV0dHlQcmludC5zaG91bGREZWRlbnQgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLX0pOwotCi1Db2RlTWlycm9yLmV4dGVuZE1vZGUoImNzcyIsIHsKLSAgICBz
aG91bGRIYXZlU3BhY2VCZWZvcmVUb2tlbjogZnVuY3Rpb24obGFzdFRva2VuLCBsYXN0Q29udGVu
dCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpCi0gICAgewotICAgICAgICBpZiAo
IXRva2VuKSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gInsiKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuICI+K34tKi8iLmluZGV4T2YoY29u
dGVudCkgPj0gMDsgLy8gY2FsYygpIGV4cHJlc3Npb24gb3IgY2hpbGQvc2libGluZyBzZWxlY3Rv
cnMKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0NvbW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoL1xia2V5d29yZFxiLy50ZXN0KHRva2VuKSkgewotICAg
ICAgICAgICAgaWYgKGNvbnRlbnQuY2hhckF0KDApID09PSAiISIpIC8vICIhaW1wb3J0YW50Ii4K
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgc2hvdWxk
SGF2ZVNwYWNlQWZ0ZXJMYXN0VG9rZW46IGZ1bmN0aW9uKGxhc3RUb2tlbiwgbGFzdENvbnRlbnQs
IHRva2VuLCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50KQotICAgIHsKLSAgICAgICAgaWYgKCFs
YXN0VG9rZW4pIHsKLSAgICAgICAgICAgIGlmIChsYXN0Q29udGVudCA9PT0gIiwiKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGxhc3RDb250ZW50ID09PSAi
OiIpIC8vIFNwYWNlIGluICJwcm9wOiB2YWx1ZSIgYnV0IG5vdCBpbiBhIHNlbGVjdG9ycyAiYTps
aW5rIiBvciAiZGl2OjphZnRlciIgb3IgbWVkaWEgcXVlcmllcyAiKG1heC1kZXZpY2Utd2lkdGg6
NDgwcHgpIi4KLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RhdGUgPT09ICJwcm9wIjsK
LSAgICAgICAgICAgIGlmIChsYXN0Q29udGVudCA9PT0gIikiICYmIChjb250ZW50ICE9PSAiKSIg
JiYgY29udGVudCAhPT0gIiwiKSkgewotICAgICAgICAgICAgICAgIGlmICgvXGJudW1iZXJcYi8u
dGVzdCh0b2tlbikpIC8vIGxpbmVhci1ncmFkaWVudChyZ2IoLi4uKTAlLHJnYiguLi4pMTAwJSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0
YXRlLnN0YXRlID09PSAicHJvcCIpIC8vIC13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSguLi4pdHJh
bnNsYXRlKC4uLik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0ZSA9PT0gIm1l
ZGlhX3BhcmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9vKWFuZCIgYnV0IG5vdCBhdCB0aGUgZW5k
IG9mICJub3Qobm90KGZvbykpIiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjb2xvcjogcmdiKC4uLik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gIj4rfi0qLyIuaW5kZXhPZihsYXN0Q29udGVudCkg
Pj0gMDsgLy8gY2FsYygpIGV4cHJlc3Npb24gb3IgY2hpbGQvc2libGluZyBzZWxlY3RvcnMKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICgvXGJjb21tZW50XGIvLnRlc3QobGFzdFRva2VuKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICgvXGJrZXl3b3JkXGIvLnRlc3Qo
bGFzdFRva2VuKSkgLy8gbWVkaWEtcXVlcnkga2V5d29yZHMKLSAgICAgICAgICAgIHJldHVybiBz
dGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhX3BhcmVucyI7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBuZXdsaW5lc0FmdGVyVG9r
ZW46IGZ1bmN0aW9uKGxhc3RUb2tlbiwgbGFzdENvbnRlbnQsIHRva2VuLCBzdGF0ZSwgY29udGVu
dCwgaXNDb21tZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0b2tlbikgewotICAgICAgICAgICAg
aWYgKGNvbnRlbnQgPT09ICI7IikKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
ICAgIGlmIChjb250ZW50ID09PSAiLCIpIHsgLy8gImEsYixjLC4uLix6e30iIHJ1bGUgbGlzdCBh
dCB0b3AgbGV2ZWwgb3IgaW4gQG1lZGlhIHRvcCBsZXZlbCBhbmQgb25seSBpZiB0aGUgbGluZSBs
ZW5ndGggd2lsbCBiZSBsYXJnZS4KLSAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLnN0YXRlID09
PSAidG9wIiB8fCBzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIikgJiYgc3RhdGUuX2Nzc1ByZXR0eVBy
aW50LmxpbmVMZW5ndGggPiA2MCkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5fY3NzUHJl
dHR5UHJpbnQubGluZUxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChjb250ZW50ID09PSAieyIpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gIn0iKSAvLyAyIG5ld2xpbmVzIGJl
dHdlZW4gcnVsZSBkZWNsYXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0NvbW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9LAotCi0gICAg
cmVtb3ZlTGFzdE5ld2xpbmU6IGZ1bmN0aW9uKGxhc3RUb2tlbiwgbGFzdENvbnRlbnQsIHRva2Vu
LCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50LCBmaXJzdFRva2VuT25MaW5lKQotICAgIHsKLSAg
ICAgICAgaWYgKGlzQ29tbWVudCkgeyAvLyBDb21tZW50IGFmdGVyIHNlbWljb2xvbi4KLSAgICAg
ICAgICAgIGlmICghZmlyc3RUb2tlbk9uTGluZSAmJiBsYXN0Q29udGVudCA9PT0gIjsiKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNvbnRlbnQgPT09ICJ9IiAmJiAobGFzdENvbnRlbnQg
PT09ICJ7IiB8fCBsYXN0Q29udGVudCA9PT0gIn0iKTsgLy8gInt9IiBhbmQgIn1cbn0iIHdoZW4g
Y2xvc2luZyBAbWVkaWEuCi0gICAgfSwKLQotICAgIGluZGVudEFmdGVyVG9rZW46IGZ1bmN0aW9u
KGxhc3RUb2tlbiwgbGFzdENvbnRlbnQsIHRva2VuLCBzdGF0ZSwgY29udGVudCwgaXNDb21tZW50
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQgPT09ICJ7IjsKLSAgICB9LAotCi0gICAg
bmV3bGluZUJlZm9yZVRva2VuOiBmdW5jdGlvbihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0b2tl
biwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb250
ZW50ID09PSAifSIgJiYgKGxhc3RDb250ZW50ICE9PSAieyIgJiYgbGFzdENvbnRlbnQgIT09ICJ9
Iik7IC8vICJ7fSIgYW5kICJ9XG59IiB3aGVuIGNsb3NpbmcgQG1lZGlhLgotICAgIH0sCi0KLSAg
ICBpbmRlbnRCZWZvcmVUb2tlbjogZnVuY3Rpb24obGFzdFRva2VuLCBsYXN0Q29udGVudCwgdG9r
ZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIGRlZGVudHNCZWZvcmVUb2tlbjogZnVuY3Rpb24obGFzdFRva2Vu
LCBsYXN0Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udGVudCA9PT0gIn0iID8gMSA6IDA7Ci0gICAgfSwKLQotICAgIG1v
ZGlmeVN0YXRlRm9yVG9rZW5Qb3N0OiBmdW5jdGlvbihsYXN0VG9rZW4sIGxhc3RDb250ZW50LCB0
b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghc3Rh
dGUuX2Nzc1ByZXR0eVByaW50KQotICAgICAgICAgICAgc3RhdGUuX2Nzc1ByZXR0eVByaW50ID0g
e2xpbmVMZW5ndGg6IDB9OwotCi0gICAgICAgIC8vIEluIG9yZGVyIGluc2VydCBuZXdsaW5lcyBp
biBzZWxlY3RvciBsaXN0cyB3ZSBuZWVkIGtlZXAgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiB0aGUg
Y3VycmVudCBsaW5lLgotICAgICAgICAvLyBUaGlzIGlzbid0IGV4YWN0IGxpbmUgbGVuZ3RoLCBv
bmx5IHRoZSBidWlsZGVyIGtub3dzIHRoYXQsIGJ1dCBpdCBpcyBnb29kIGVub3VnaCB0byBnZXQg
YW4gaWRlYS4KLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGEgdG9wIGxldmVsLCBrZWVwIHRyYWNr
IG9mIHRoZSBjdXJyZW50IGxpbmUgbGVuZ3RoLCBvdGhlcndpc2Ugd2UgcmVzZXQgdG8gMC4KLSAg
ICAgICAgaWYgKCFpc0NvbW1lbnQgJiYgKHN0YXRlLnN0YXRlID09PSAidG9wIiB8fCBzdGF0ZS5z
dGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0ZSA9PT0gInBzZXVkbyIpKQotICAgICAgICAg
ICAgc3RhdGUuX2Nzc1ByZXR0eVByaW50LmxpbmVMZW5ndGggKz0gY29udGVudC5sZW5ndGg7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlLl9jc3NQcmV0dHlQcmludC5saW5lTGVuZ3Ro
ID0gMDsKLSAgICB9Ci19KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29s
cy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9v
bHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiZmE5OThlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9Gb3JtYXR0ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLWNsYXNzIEZvcm1hdHRlcgotewotICAgIGNvbnN0cnVjdG9yKGNvZGVN
aXJyb3IsIGJ1aWxkZXIpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9y
KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoYnVpbGRlcik7Ci0KLSAgICAgICAgdGhpcy5fY29k
ZU1pcnJvciA9IGNvZGVNaXJyb3I7Ci0gICAgICAgIHRoaXMuX2J1aWxkZXIgPSBidWlsZGVyOwot
Ci0gICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2xhc3RDb250
ZW50ID0gIiI7Ci0gICAgfQotCi0gICAgLy8gUHVibGljCi0KLSAgICBmb3JtYXQoZnJvbSwgdG8p
Ci0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9idWlsZGVyLm9yaWdpbmFsQ29u
dGVudCA9PT0gbnVsbCk7Ci0gICAgICAgIGlmICh0aGlzLl9idWlsZGVyLm9yaWdpbmFsQ29udGVu
dCAhPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgb3V0ZXJNb2Rl
ID0gdGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCk7Ci0gICAgICAgIHZhciBjb250ZW50ID0gdGhp
cy5fY29kZU1pcnJvci5nZXRSYW5nZShmcm9tLCB0byk7Ci0gICAgICAgIHZhciBzdGF0ZSA9IENv
ZGVNaXJyb3IuY29weVN0YXRlKG91dGVyTW9kZSwgdGhpcy5fY29kZU1pcnJvci5nZXRUb2tlbkF0
KGZyb20pLnN0YXRlKTsKLSAgICAgICAgdGhpcy5fYnVpbGRlci5zZXRPcmlnaW5hbENvbnRlbnQo
Y29udGVudCk7Ci0KLSAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSAwOwotICAgICAgICB2YXIgbGlu
ZXMgPSBjb250ZW50LnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxp
bmVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2ldOwotICAg
ICAgICAgICAgdmFyIHN0YXJ0T2ZOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBmaXJz
dFRva2VuT25MaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1p
cnJvci5TdHJpbmdTdHJlYW0obGluZSk7Ci0gICAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2wo
KSkgewotICAgICAgICAgICAgICAgIHZhciBpbm5lck1vZGUgPSBDb2RlTWlycm9yLmlubmVyTW9k
ZShvdXRlck1vZGUsIHN0YXRlKTsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBvdXRlck1v
ZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGlzV2hpdGVTcGFj
ZSA9IHRva2VuID09PSBudWxsICYmIC9eXHMqJC8udGVzdChzdHJlYW0uY3VycmVudCgpKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbihpbm5lck1vZGUubW9kZSwgdG9rZW4sIHN0
YXRlLCBzdHJlYW0sIGxpbmVPZmZzZXQgKyBzdHJlYW0uc3RhcnQsIGlzV2hpdGVTcGFjZSwgc3Rh
cnRPZk5ld0xpbmUsIGZpcnN0VG9rZW5PbkxpbmUpOwotICAgICAgICAgICAgICAgIHN0cmVhbS5z
dGFydCA9IHN0cmVhbS5wb3M7Ci0gICAgICAgICAgICAgICAgc3RhcnRPZk5ld0xpbmUgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RUb2tlbk9uTGluZSAmJiAhaXNXaGl0ZVNwYWNl
KQotICAgICAgICAgICAgICAgICAgICBmaXJzdFRva2VuT25MaW5lID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdFRva2VuT25MaW5lKQotICAgICAgICAgICAg
ICAgIHRoaXMuX2hhbmRsZUVtcHR5TGluZSgpOwotCi0gICAgICAgICAgICBsaW5lT2Zmc2V0ICs9
IGxpbmUubGVuZ3RoICsgMTsgLy8gKzEgZm9yIHRoZSAiXG4iIHJlbW92ZWQgaW4gc3BsaXQuCi0g
ICAgICAgICAgICB0aGlzLl9oYW5kbGVMaW5lRW5kaW5nKGxpbmVPZmZzZXQgLSAxKTsgLy8gLTEg
Zm9yIHRoZSBpbmRleCBvZiB0aGUgIlxuIi4KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2J1
aWxkZXIuZmluaXNoKCk7Ci0gICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0gICAgX2hhbmRsZVRv
a2VuKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBvcmlnaW5hbFBvc2l0aW9uLCBpc1doaXRl
U3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2VuT25MaW5lKQotICAgIHsKLSAgICAgICAg
Ly8gU3RyaW5nIGNvbnRlbnQgb2YgdGhlIHRva2VuLgotICAgICAgICB2YXIgY29udGVudCA9IHN0
cmVhbS5jdXJyZW50KCk7Ci0KLSAgICAgICAgLy8gU3RhcnQgb2YgYSBuZXcgbGluZS4gSW5zZXJ0
IGEgbmV3bGluZSB0byBiZSBzYWZlIGlmIGNvZGUgd2FzIG5vdC1BU0kgc2FmZS4gVGhlc2UgYXJl
IGNvbGxhcHNlZC4KLSAgICAgICAgaWYgKHN0YXJ0T2ZOZXdMaW5lKQotICAgICAgICAgICAgdGhp
cy5fYnVpbGRlci5hcHBlbmROZXdsaW5lKCk7Ci0KLSAgICAgICAgLy8gV2hpdGVzcGFjZS4gQ29s
bGFwc2UgdG8gYSBzaW5nbGUgc3BhY2UuCi0gICAgICAgIGlmIChpc1doaXRlU3BhY2UpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5kU3BhY2UoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF2b2lkIHNvbWUgaG9va3MgZm9yIGNvbnRlbnQg
aW4gY29tbWVudHMuCi0gICAgICAgIHZhciBpc0NvbW1lbnQgPSB0b2tlbiAmJiAvXGJjb21tZW50
XGIvLnRlc3QodG9rZW4pOwotCi0gICAgICAgIGlmIChtb2RlLm1vZGlmeVN0YXRlRm9yVG9rZW5Q
cmUpCi0gICAgICAgICAgICBtb2RlLm1vZGlmeVN0YXRlRm9yVG9rZW5QcmUodGhpcy5fbGFzdFRv
a2VuLCB0aGlzLl9sYXN0Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQp
OwotCi0gICAgICAgIC8vIFNob3VsZCB3ZSByZW1vdmUgdGhlIGxhc3QgbmV3bGluZT8KLSAgICAg
ICAgaWYgKHRoaXMuX2J1aWxkZXIubGFzdFRva2VuV2FzTmV3bGluZSAmJiBtb2RlLnJlbW92ZUxh
c3ROZXdsaW5lKHRoaXMuX2xhc3RUb2tlbiwgdGhpcy5fbGFzdENvbnRlbnQsIHRva2VuLCBzdGF0
ZSwgY29udGVudCwgaXNDb21tZW50LCBmaXJzdFRva2VuT25MaW5lKSkKLSAgICAgICAgICAgIHRo
aXMuX2J1aWxkZXIucmVtb3ZlTGFzdE5ld2xpbmUoKTsKLQotICAgICAgICAvLyBBZGQgd2hpdGVz
cGFjZSBhZnRlciB0aGUgbGFzdCB0b2tlbj8KLSAgICAgICAgaWYgKCF0aGlzLl9idWlsZGVyLmxh
c3RUb2tlbldhc1doaXRlc3BhY2UgJiYgbW9kZS5zaG91bGRIYXZlU3BhY2VBZnRlckxhc3RUb2tl
bih0aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRl
bnQsIGlzQ29tbWVudCkpCi0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFwcGVuZFNwYWNlKCk7
Ci0KLSAgICAgICAgLy8gQWRkIHdoaXRlc3BhY2UgYmVmb3JlIHRoaXMgdG9rZW4/Ci0gICAgICAg
IGlmICghdGhpcy5fYnVpbGRlci5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlICYmIG1vZGUuc2hvdWxk
SGF2ZVNwYWNlQmVmb3JlVG9rZW4odGhpcy5fbGFzdFRva2VuLCB0aGlzLl9sYXN0Q29udGVudCwg
dG9rZW4sIHN0YXRlLCBjb250ZW50LCBpc0NvbW1lbnQpKQotICAgICAgICAgICAgdGhpcy5fYnVp
bGRlci5hcHBlbmRTcGFjZSgpOwotCi0gICAgICAgIC8vIFNob3VsZCB3ZSBkZWRlbnQgYmVmb3Jl
IHRoaXMgdG9rZW4/Ci0gICAgICAgIHZhciBkZWRlbnRzID0gbW9kZS5kZWRlbnRzQmVmb3JlVG9r
ZW4odGhpcy5fbGFzdFRva2VuLCB0aGlzLl9sYXN0Q29udGVudCwgdG9rZW4sIHN0YXRlLCBjb250
ZW50LCBpc0NvbW1lbnQpOwotICAgICAgICB3aGlsZSAoZGVkZW50cy0tID4gMCkKLSAgICAgICAg
ICAgIHRoaXMuX2J1aWxkZXIuZGVkZW50KCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHdlIGFkZCBh
IG5ld2xpbmUgYmVmb3JlIHRoaXMgdG9rZW4/Ci0gICAgICAgIGlmIChtb2RlLm5ld2xpbmVCZWZv
cmVUb2tlbih0aGlzLl9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUs
IGNvbnRlbnQsIGlzQ29tbWVudCkpCi0gICAgICAgICAgICB0aGlzLl9idWlsZGVyLmFwcGVuZE5l
d2xpbmUoKTsKLQotICAgICAgICAvLyBTaG91bGQgd2UgaW5kZW50IGJlZm9yZSB0aGlzIHRva2Vu
PwotICAgICAgICBpZiAobW9kZS5pbmRlbnRCZWZvcmVUb2tlbih0aGlzLl9sYXN0VG9rZW4sIHRo
aXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCkpCi0gICAg
ICAgICAgICB0aGlzLl9idWlsZGVyLmluZGVudCgpOwotCi0gICAgICAgIC8vIEFwcGVuZCB0b2tl
bi4KLSAgICAgICAgdGhpcy5fYnVpbGRlci5hcHBlbmRUb2tlbihjb250ZW50LCBvcmlnaW5hbFBv
c2l0aW9uKTsKLQotICAgICAgICAvLyBMZXQgdGhlIHByZXR0eSBwcmludGVyIHVwZGF0ZSBhbnkg
c3RhdGUgaXQga2VlcHMgdHJhY2sgb2YuCi0gICAgICAgIGlmIChtb2RlLm1vZGlmeVN0YXRlRm9y
VG9rZW5Qb3N0KQotICAgICAgICAgICAgbW9kZS5tb2RpZnlTdGF0ZUZvclRva2VuUG9zdCh0aGlz
Ll9sYXN0VG9rZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlz
Q29tbWVudCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHdlIGluZGVudCBvciBkZWRlbnQgYWZ0ZXIg
dGhpcyB0b2tlbj8KLSAgICAgICAgaWYgKCFpc0NvbW1lbnQgJiYgbW9kZS5pbmRlbnRBZnRlclRv
a2VuKHRoaXMuX2xhc3RUb2tlbiwgdGhpcy5fbGFzdENvbnRlbnQsIHRva2VuLCBzdGF0ZSwgY29u
dGVudCwgaXNDb21tZW50KSkKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuaW5kZW50KCk7Ci0K
LSAgICAgICAgLy8gU2hvdWxkIHdlIGFkZCBuZXdsaW5lcyBhZnRlciB0aGlzIHRva2VuPwotICAg
ICAgICB2YXIgbmV3bGluZXMgPSBtb2RlLm5ld2xpbmVzQWZ0ZXJUb2tlbih0aGlzLl9sYXN0VG9r
ZW4sIHRoaXMuX2xhc3RDb250ZW50LCB0b2tlbiwgc3RhdGUsIGNvbnRlbnQsIGlzQ29tbWVudCk7
Ci0gICAgICAgIGlmIChuZXdsaW5lcykKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5k
TXVsdGlwbGVOZXdsaW5lcyhuZXdsaW5lcyk7Ci0KLSAgICAgICAgLy8gUmVjb3JkIHRoaXMgdG9r
ZW4gYXMgdGhlIGxhc3QgdG9rZW4uCi0gICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IHRva2VuOwot
ICAgICAgICB0aGlzLl9sYXN0Q29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfQotCi0gICAgX2hhbmRs
ZUVtcHR5TGluZSgpCi0gICAgewotICAgICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCB3aGl0ZXNw
YWNlIG9ubHkgbGluZXMgYnkgYWRkaW5nIGEgbmV3bGluZS4KLSAgICAgICAgLy8gSG93ZXZlciwg
ZG9uJ3QgZG8gdGhpcyBpZiB0aGUgYnVpbGRlciBqdXN0IGFkZGVkIG11bHRpcGxlIG5ld2xpbmVz
LgotICAgICAgICBpZiAoISh0aGlzLl9idWlsZGVyLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgdGhp
cy5fYnVpbGRlci5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlKSkKLSAgICAgICAgICAgIHRo
aXMuX2J1aWxkZXIuYXBwZW5kTmV3bGluZSh0cnVlKTsKLSAgICB9Ci0KLSAgICBfaGFuZGxlTGlu
ZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIC8vIFJlY29y
ZCB0aGUgb3JpZ2luYWwgbGluZSBlbmRpbmcuCi0gICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkT3Jp
Z2luYWxMaW5lRW5kaW5nKG9yaWdpbmFsTmV3TGluZVBvc2l0aW9uKTsKLSAgICB9Ci19OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1h
dHRlckNvbnRlbnRCdWlsZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MjkxYzM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9U
b29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotY2xhc3MgRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIKLXsKLSAgICBjb25zdHJ1Y3RvcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdz
LCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwg
aW5kZW50U3RyaW5nKQotICAgIHsKLSAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250ZW50ID0gbnVs
bDsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IFtdOwotICAgICAgICB0aGlzLl9m
b3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKLQotICAgICAgICB0aGlzLl9zdGFydE9mTGluZSA9
IHRydWU7Ci0gICAgICAgIHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwotICAgICAg
ICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5sYXN0
TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5faW5kZW50
ID0gMDsKLSAgICAgICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOwotICAgICAg
ICB0aGlzLl9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKLQotICAgICAg
ICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsKLSAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5k
aW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRl
ZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3MgfHwgW107Ci0gICAgICAgIHRoaXMu
X29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxPZmZzZXQgfHwgMDsKLSAgICAgICAgdGhpcy5fZm9y
bWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zmc2V0IHx8IDA7Ci0KLSAgICAgICAgdGhpcy5fbGFz
dE9yaWdpbmFsUG9zaXRpb24gPSAwOwotICAgICAgICB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRp
b24gPSAwOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0gICAgZ2V0IG9yaWdpbmFsQ29udGVu
dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDb250ZW50OwotICAgIH0K
LQotICAgIGdldCBmb3JtYXR0ZWRDb250ZW50KCkKLSAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0
ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LmpvaW4oIiIpOwotICAgICAgICBjb25zb2xlLmFz
c2VydChmb3JtYXR0ZWQubGVuZ3RoID09PSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoKTsK
LSAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDsKLSAgICB9Ci0KLSAgICBnZXQgbWFwcGluZygpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZzsKLSAgICB9Ci0KLSAgICBnZXQgb3Jp
Z2luYWxMaW5lRW5kaW5ncygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxM
aW5lRW5kaW5nczsKLSAgICB9Ci0KLSAgICBnZXQgZm9ybWF0dGVkTGluZUVuZGluZ3MoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzOwotICAgIH0KLQot
ICAgIHNldE9yaWdpbmFsQ29udGVudChvcmlnaW5hbENvbnRlbnQpCi0gICAgewotICAgICAgICBj
b25zb2xlLmFzc2VydCghdGhpcy5fb3JpZ2luYWxDb250ZW50KTsKLSAgICAgICAgdGhpcy5fb3Jp
Z2luYWxDb250ZW50ID0gb3JpZ2luYWxDb250ZW50OwotICAgIH0KLQotICAgIGFwcGVuZFRva2Vu
KHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zdGFy
dE9mTGluZSkKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZEluZGVudCgpOwotCi0gICAgICAgIHRo
aXMuX2FkZE1hcHBpbmdJZk5lZWRlZChvcmlnaW5hbFBvc2l0aW9uKTsKLQotICAgICAgICB0aGlz
Ll9hcHBlbmQoc3RyaW5nKTsKLSAgICAgICAgdGhpcy5fc3RhcnRPZkxpbmUgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubGFz
dFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGFwcGVuZFNwYWNlKCkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc3RhcnRPZkxpbmUpIHsKLSAgICAgICAgICAgIHRo
aXMuX2FwcGVuZCgiICIpOwotICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0g
ZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYXBwZW5kTmV3bGluZShmb3JjZSkKLSAgICB7Ci0gICAg
ICAgIGlmICgoIXRoaXMubGFzdFRva2VuV2FzTmV3bGluZSAmJiAhdGhpcy5fc3RhcnRPZkxpbmUp
IHx8IGZvcmNlKSB7Ci0gICAgICAgICAgICB0aGlzLl9hcHBlbmQoIlxuIik7Ci0gICAgICAgICAg
ICB0aGlzLl9hZGRGb3JtYXR0ZWRMaW5lRW5kaW5nKCk7Ci0gICAgICAgICAgICB0aGlzLl9zdGFy
dE9mTGluZSA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSB0
cnVlOwotICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7Ci0g
ICAgICAgICAgICB0aGlzLmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXMobmV3bGluZXMpCi0g
ICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChuZXdsaW5lcyA+IDApOwotCi0gICAgICAgIHZh
ciB3YXNNdWx0aXBsZSA9IG5ld2xpbmVzID4gMTsKLQotICAgICAgICB3aGlsZSAobmV3bGluZXMt
LSA+IDApCi0gICAgICAgICAgICB0aGlzLmFwcGVuZE5ld2xpbmUodHJ1ZSk7Ci0KLSAgICAgICAg
aWYgKHdhc011bHRpcGxlKQotICAgICAgICAgICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011
bHRpcGxlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZW1vdmVMYXN0TmV3bGluZSgpCi0gICAgewot
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUpOwotICAgICAg
ICBjb25zb2xlLmFzc2VydCh0aGlzLl9mb3JtYXR0ZWRDb250ZW50Lmxhc3RWYWx1ZSA9PT0gIlxu
Iik7Ci0gICAgICAgIGlmICh0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUpIHsKLSAgICAgICAgICAg
IHRoaXMuX3BvcE5ld0xpbmUoKTsKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2ZMaW5lID0gZmFs
c2U7Ci0gICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaW5kZW50KCkKLSAgICB7Ci0gICAgICAgICsrdGhpcy5faW5kZW50OwotICAg
IH0KLQotICAgIGRlZGVudCgpCi0gICAgewotICAgICAgICAtLXRoaXMuX2luZGVudDsKLQotICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pbmRlbnQgPj0gMCk7Ci0gICAgICAgIGlmICh0aGlz
Ll9pbmRlbnQgPCAwKQotICAgICAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKLSAgICB9Ci0KLSAg
ICBhZGRPcmlnaW5hbExpbmVFbmRpbmcob3JpZ2luYWxQb3NpdGlvbikKLSAgICB7Ci0gICAgICAg
IHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MucHVzaChvcmlnaW5hbFBvc2l0aW9uKTsKLSAgICB9
Ci0KLSAgICBmaW5pc2goKQotICAgIHsKLSAgICAgICAgdGhpcy5hcHBlbmROZXdsaW5lKCk7Ci0g
ICAgfQotCi0gICAgLy8gUHJpdmF0ZQotCi0gICAgX3BvcE5ld0xpbmUoKQotICAgIHsKLSAgICAg
ICAgdmFyIHJlbW92ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnBvcCgpOwotICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC09IHJlbW92ZWQubGVuZ3RoOwotICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wb3AoKTsKLSAgICB9Ci0KLSAgICBfYXBwZW5kKHN0
cikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucHVzaChzdHIpOwotICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoICs9IHN0ci5sZW5ndGg7Ci0gICAgfQot
Ci0gICAgX2FwcGVuZEluZGVudCgpCi0gICAgewotICAgICAgICAvLyBJbmRlbnQgaXMgYWxyZWFk
eSBpbiB0aGUgY2FjaGUuCi0gICAgICAgIGlmICh0aGlzLl9pbmRlbnQgPCB0aGlzLl9pbmRlbnRD
YWNoZS5sZW5ndGgpIHsKLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZCh0aGlzLl9pbmRlbnRDYWNo
ZVt0aGlzLl9pbmRlbnRdKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIEluZGVudCB3YXMgbm90IGluIHRoZSBjYWNoZSwgZmlsbCB1cCB0aGUgY2FjaGUgdXAg
d2l0aCB3aGF0IHdhcyBuZWVkZWQuCi0gICAgICAgIHZhciBtYXhDYWNoZUluZGVudCA9IDIwOwot
ICAgICAgICB2YXIgbWF4ID0gTWF0aC5taW4odGhpcy5faW5kZW50LCBtYXhDYWNoZUluZGVudCk7
Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGg7IGkgPD0gbWF4
OyArK2kpCi0gICAgICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZVtpXSA9IHRoaXMuX2luZGVudENh
Y2hlW2kgLSAxXSArIHRoaXMuX2luZGVudFN0cmluZzsKLQotICAgICAgICAvLyBBcHBlbmQgaW5k
ZW50cyBhcyBuZWVkZWQuCi0gICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLl9pbmRlbnQ7Ci0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChpbmRlbnQgPj0gbWF4Q2FjaGVJbmRlbnQpCi0gICAg
ICAgICAgICAgICAgdGhpcy5fYXBwZW5kKHRoaXMuX2luZGVudENhY2hlW21heENhY2hlSW5kZW50
XSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kKHRoaXMu
X2luZGVudENhY2hlW2luZGVudF0pOwotICAgICAgICAgICAgaW5kZW50IC09IG1heENhY2hlSW5k
ZW50OwotICAgICAgICB9IHdoaWxlIChpbmRlbnQgPiAwKTsKLSAgICB9Ci0KLSAgICBfYWRkTWFw
cGluZ0lmTmVlZGVkKG9yaWdpbmFsUG9zaXRpb24pCi0gICAgewotICAgICAgICBpZiAob3JpZ2lu
YWxQb3NpdGlvbiAtIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID09PSB0aGlzLl9mb3JtYXR0
ZWRDb250ZW50TGVuZ3RoIC0gdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX21hcHBpbmcub3JpZ2luYWwucHVzaCh0aGlzLl9v
cmlnaW5hbE9mZnNldCArIG9yaWdpbmFsUG9zaXRpb24pOwotICAgICAgICB0aGlzLl9tYXBwaW5n
LmZvcm1hdHRlZC5wdXNoKHRoaXMuX2Zvcm1hdHRlZE9mZnNldCArIHRoaXMuX2Zvcm1hdHRlZENv
bnRlbnRMZW5ndGgpOwotCi0gICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gb3Jp
Z2luYWxQb3NpdGlvbjsKLSAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gdGhp
cy5fZm9ybWF0dGVkQ29udGVudExlbmd0aDsKLSAgICB9Ci0KLSAgICBfYWRkRm9ybWF0dGVkTGlu
ZUVuZGluZygpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mb3JtYXR0ZWRD
b250ZW50Lmxhc3RWYWx1ZSA9PT0gIlxuIik7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVF
bmRpbmdzLnB1c2godGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCAtIDEpOwotICAgIH0KLX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcv
Y29kZW1pcnJvci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvY29kZW1pcnJvci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OGEzMTcu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5n
L2NvZGVtaXJyb3IuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8qIEJBU0lD
UyAqLwotCi0uQ29kZU1pcnJvciB7Ci0gIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBh
bmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCi0gIGZvbnQtZmFtaWx5OiBtb25vc3Bh
Y2U7Ci0gIGhlaWdodDogMzAwcHg7Ci19Ci0uQ29kZU1pcnJvci1zY3JvbGwgewotICAvKiBTZXQg
c2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCi0gIG92ZXJmbG93OiBhdXRvOwotfQotCi0vKiBQ
QURESU5HICovCi0KLS5Db2RlTWlycm9yLWxpbmVzIHsKLSAgcGFkZGluZzogNHB4IDA7IC8qIFZl
cnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KLX0KLS5Db2RlTWlycm9yIHByZSB7Ci0g
IHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwotfQot
Ci0uQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVy
IHsKLSAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IC8qIFRoZSBsaXR0bGUgc3F1YXJlIGJldHdl
ZW4gSCBhbmQgViBzY3JvbGxiYXJzICovCi19Ci0KLS8qIEdVVFRFUiAqLwotCi0uQ29kZU1pcnJv
ci1ndXR0ZXJzIHsKLSAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKLSAgYmFja2dyb3Vu
ZC1jb2xvcjogI2Y3ZjdmNzsKLSAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLS5Db2RlTWlycm9y
LWxpbmVudW1iZXJzIHt9Ci0uQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKLSAgcGFkZGluZzogMCAz
cHggMCA1cHg7Ci0gIG1pbi13aWR0aDogMjBweDsKLSAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gIGNv
bG9yOiAjOTk5OwotICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5n
OiBjb250ZW50LWJveDsKLX0KLQotLyogQ1VSU09SICovCi0KLS5Db2RlTWlycm9yIGRpdi5Db2Rl
TWlycm9yLWN1cnNvciB7Ci0gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7Ci19Ci0vKiBT
aG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi0uQ29kZU1pcnJvciBk
aXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewotICBib3JkZXItbGVmdDogMXB4IHNvbGlk
IHNpbHZlcjsKLX0KLS5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWly
cm9yLWN1cnNvciB7Ci0gIHdpZHRoOiBhdXRvOwotICBib3JkZXI6IDA7Ci0gIGJhY2tncm91bmQ6
ICM3ZTc7Ci19Ci0vKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5v
bi1pbnNlcnQpIG1vZGUgKi8KLWRpdi5Db2RlTWlycm9yLW92ZXJ3cml0ZSBkaXYuQ29kZU1pcnJv
ci1jdXJzb3Ige30KLQotLmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQotCi0uQ29k
ZU1pcnJvci1ydWxlciB7Ci0gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYzsKLSAgcG9zaXRp
b246IGFic29sdXRlOwotfQotCi0vKiBERUZBVUxUIFRIRU1FICovCi0KLS5jbS1zLWRlZmF1bHQg
LmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLS5jbS1zLWRlZmF1bHQgLmNtLWF0b20ge2NvbG9y
OiAjMjE5O30KLS5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQotLmNtLXMt
ZGVmYXVsdCAuY20tZGVmIHtjb2xvcjogIzAwZjt9Ci0uY20tcy1kZWZhdWx0IC5jbS12YXJpYWJs
ZSwKLS5jbS1zLWRlZmF1bHQgLmNtLXB1bmN0dWF0aW9uLAotLmNtLXMtZGVmYXVsdCAuY20tcHJv
cGVydHksCi0uY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7fQotLmNtLXMtZGVmYXVsdCAuY20t
dmFyaWFibGUtMiB7Y29sb3I6ICMwNWE7fQotLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7
Y29sb3I6ICMwODU7fQotLmNtLXMtZGVmYXVsdCAuY20tY29tbWVudCB7Y29sb3I6ICNhNTA7fQot
LmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nIHtjb2xvcjogI2ExMTt9Ci0uY20tcy1kZWZhdWx0IC5j
bS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQotLmNtLXMtZGVmYXVsdCAuY20tbWV0YSB7Y29sb3I6
ICM1NTU7fQotLmNtLXMtZGVmYXVsdCAuY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci0uY20t
cy1kZWZhdWx0IC5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1i
cmFja2V0IHtjb2xvcjogIzk5Nzt9Ci0uY20tcy1kZWZhdWx0IC5jbS10YWcge2NvbG9yOiAjMTcw
O30KLS5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQotLmNtLXMtZGVm
YXVsdCAuY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9Ci0uY20tcy1kZWZhdWx0IC5jbS1xdW90ZSB7
Y29sb3I6ICMwOTA7fQotLmNtLXMtZGVmYXVsdCAuY20taHIge2NvbG9yOiAjOTk5O30KLS5jbS1z
LWRlZmF1bHQgLmNtLWxpbmsge2NvbG9yOiAjMDBjO30KLQotLmNtLW5lZ2F0aXZlIHtjb2xvcjog
I2Q0NDt9Ci0uY20tcG9zaXRpdmUge2NvbG9yOiAjMjkyO30KLS5jbS1oZWFkZXIsIC5jbS1zdHJv
bmcge2ZvbnQtd2VpZ2h0OiBib2xkO30KLS5jbS1lbSB7Zm9udC1zdHlsZTogaXRhbGljO30KLS5j
bS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci0KLS5jbS1zLWRlZmF1bHQgLmNt
LWVycm9yIHtjb2xvcjogI2YwMDt9Ci0uY20taW52YWxpZGNoYXIge2NvbG9yOiAjZjAwO30KLQot
ZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMw
ZjA7fQotZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7
Y29sb3I6ICNmMjI7fQotLkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kIHtiYWNrZ3Jv
dW5kOiAjZThmMmZmO30KLQotLyogU1RPUCAqLwotCi0vKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUg
Y29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgotICAgdGhlIGVkaXRv
ci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwotCi0uQ29kZU1pcnJvciB7
Ci0gIGxpbmUtaGVpZ2h0OiAxOwotICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIG92ZXJmbG93OiBo
aWRkZW47Ci0gIGJhY2tncm91bmQ6IHdoaXRlOwotICBjb2xvcjogYmxhY2s7Ci19Ci0KLS5Db2Rl
TWlycm9yLXNjcm9sbCB7Ci0gIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhp
ZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KLSAgLyogU2VlIG92ZXJmbG93OiBo
aWRkZW4gaW4gLkNvZGVNaXJyb3IgKi8KLSAgbWFyZ2luLWJvdHRvbTogLTMwcHg7IG1hcmdpbi1y
aWdodDogLTMwcHg7Ci0gIHBhZGRpbmctYm90dG9tOiAzMHB4OwotICBoZWlnaHQ6IDEwMCU7Ci0g
IG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdobGlnaHRpbmcgdGhl
IGVsZW1lbnQgKi8KLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICAtbW96LWJveC1zaXppbmc6IGNv
bnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKLX0KLS5Db2RlTWlycm9yLXNp
emVyIHsKLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICBib3JkZXItcmlnaHQ6IDMwcHggc29saWQg
dHJhbnNwYXJlbnQ7Ci0gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7Ci0gIGJveC1zaXpp
bmc6IGNvbnRlbnQtYm94OwotfQotCi0vKiBUaGUgZmFrZSwgdmlzaWJsZSBzY3JvbGxiYXJzLiBV
c2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5nCi0gICBiZWZvcmUgYWN0dWFsbCBz
Y3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCi0gICBmbGlja2Vy
aW5nIGFydGlmYWN0cy4gKi8KLS5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5Db2RlTWlycm9yLWhz
Y3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsIC5Db2RlTWlycm9yLWd1dHRl
ci1maWxsZXIgewotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIHotaW5kZXg6IDY7Ci0gIGRpc3Bs
YXk6IG5vbmU7Ci19Ci0uQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKLSAgcmlnaHQ6IDA7IHRvcDog
MDsKLSAgb3ZlcmZsb3cteDogaGlkZGVuOwotICBvdmVyZmxvdy15OiBzY3JvbGw7Ci19Ci0uQ29k
ZU1pcnJvci1oc2Nyb2xsYmFyIHsKLSAgYm90dG9tOiAwOyBsZWZ0OiAwOwotICBvdmVyZmxvdy15
OiBoaWRkZW47Ci0gIG92ZXJmbG93LXg6IHNjcm9sbDsKLX0KLS5Db2RlTWlycm9yLXNjcm9sbGJh
ci1maWxsZXIgewotICByaWdodDogMDsgYm90dG9tOiAwOwotfQotLkNvZGVNaXJyb3ItZ3V0dGVy
LWZpbGxlciB7Ci0gIGxlZnQ6IDA7IGJvdHRvbTogMDsKLX0KLQotLkNvZGVNaXJyb3ItZ3V0dGVy
cyB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOwotICBwYWRkaW5nLWJv
dHRvbTogMzBweDsKLSAgei1pbmRleDogMzsKLX0KLS5Db2RlTWlycm9yLWd1dHRlciB7Ci0gIHdo
aXRlLXNwYWNlOiBub3JtYWw7Ci0gIGhlaWdodDogMTAwJTsKLSAgLW1vei1ib3gtc2l6aW5nOiBj
b250ZW50LWJveDsKLSAgYm94LXNpemluZzogY29udGVudC1ib3g7Ci0gIHBhZGRpbmctYm90dG9t
OiAzMHB4OwotICBtYXJnaW4tYm90dG9tOiAtMzJweDsKLSAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OwotICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwotICAqem9vbToxOwotICAqZGlzcGxh
eTppbmxpbmU7Ci19Ci0uQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKLSAgcG9zaXRpb246IGFic29s
dXRlOwotICBjdXJzb3I6IGRlZmF1bHQ7Ci0gIHotaW5kZXg6IDQ7Ci19Ci0KLS5Db2RlTWlycm9y
LWxpbmVzIHsKLSAgY3Vyc29yOiB0ZXh0OwotfQotLkNvZGVNaXJyb3IgcHJlIHsKLSAgLyogUmVz
ZXQgc29tZSBzdHlsZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBtaWdodCBoYXZlIHNldCAq
LwotICAtbW96LWJvcmRlci1yYWRpdXM6IDA7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsgYm9y
ZGVyLXJhZGl1czogMDsKLSAgYm9yZGVyLXdpZHRoOiAwOwotICBiYWNrZ3JvdW5kOiB0cmFuc3Bh
cmVudDsKLSAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Ci0gIGZvbnQtc2l6ZTogaW5oZXJpdDsKLSAg
bWFyZ2luOiAwOwotICB3aGl0ZS1zcGFjZTogcHJlOwotICB3b3JkLXdyYXA6IG5vcm1hbDsKLSAg
bGluZS1oZWlnaHQ6IGluaGVyaXQ7Ci0gIGNvbG9yOiBpbmhlcml0OwotICB6LWluZGV4OiAyOwot
ICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIG92ZXJmbG93OiB2aXNpYmxlOwotfQotLkNvZGVNaXJy
b3Itd3JhcCBwcmUgewotICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci0gIHdoaXRlLXNwYWNlOiBw
cmUtd3JhcDsKLSAgd29yZC1icmVhazogbm9ybWFsOwotfQotCi0uQ29kZU1pcnJvci1saW5lYmFj
a2dyb3VuZCB7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgbGVmdDogMDsgcmlnaHQ6IDA7IHRv
cDogMDsgYm90dG9tOiAwOwotICB6LWluZGV4OiAwOwotfQotCi0uQ29kZU1pcnJvci1saW5ld2lk
Z2V0IHsKLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICB6LWluZGV4OiAyOwotICBvdmVyZmxvdzog
YXV0bzsKLX0KLQotLkNvZGVNaXJyb3Itd2lkZ2V0IHt9Ci0KLS5Db2RlTWlycm9yLXdyYXAgLkNv
ZGVNaXJyb3Itc2Nyb2xsIHsKLSAgb3ZlcmZsb3cteDogaGlkZGVuOwotfQotCi0uQ29kZU1pcnJv
ci1tZWFzdXJlIHsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICB3aWR0aDogMTAwJTsKLSAgaGVp
Z2h0OiAwOwotICBvdmVyZmxvdzogaGlkZGVuOwotICB2aXNpYmlsaXR5OiBoaWRkZW47Ci19Ci0u
Q29kZU1pcnJvci1tZWFzdXJlIHByZSB7IHBvc2l0aW9uOiBzdGF0aWM7IH0KLQotLkNvZGVNaXJy
b3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICBib3Jk
ZXItcmlnaHQ6IG5vbmU7Ci0gIHdpZHRoOiAwOwotfQotCi1kaXYuQ29kZU1pcnJvci1jdXJzb3Jz
IHsKLSAgdmlzaWJpbGl0eTogaGlkZGVuOwotICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIHotaW5k
ZXg6IDE7Ci19Ci0uQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewot
ICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotfQotCi0uQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tn
cm91bmQ6ICNkOWQ5ZDk7IH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0
ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9Ci0uQ29kZU1pcnJvci1jcm9zc2hhaXIgeyBjdXJz
b3I6IGNyb3NzaGFpcjsgfQotCi0uY20tc2VhcmNoaW5nIHsKLSAgYmFja2dyb3VuZDogI2ZmYTsK
LSAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMCwgLjQpOwotfQotCi0vKiBJRTcgaGFjayB0
byBwcmV2ZW50IGl0IGZyb20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMgb24gdGhlIHNwYW5z
ICovCi0uQ29kZU1pcnJvciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsgfQot
Ci0vKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUgKi8KLS5jbS1mb3Jj
ZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9Ci0KLUBtZWRpYSBwcmludCB7Ci0gIC8q
IEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCi0gIC5Db2RlTWlycm9yIGRpdi5Db2Rl
TWlycm9yLWN1cnNvcnMgewotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLSAgfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2NvZGVtaXJy
b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1p
cnJvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0Y2NkNy4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvY29kZW1pcnJv
ci5qcworKysgL2Rldi9udWxsCkBAIC0xLDc2MDEgKzAsMCBAQAotLy8gQ29kZU1pcnJvciwgY29w
eXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnMKLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRQotCi0v
LyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHA6Ly9jb2RlbWlycm9yLm5ldCksIGEgY29kZSBlZGl0
b3IKLS8vIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgb24gdG9wIG9mIHRoZSBicm93c2VyJ3Mg
RE9NLgotLy8KLS8vIFlvdSBjYW4gZmluZCBzb21lIHRlY2huaWNhbCBiYWNrZ3JvdW5kIGZvciBz
b21lIG9mIHRoZSBjb2RlIGJlbG93Ci0vLyBhdCBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Js
b2cvI2NtLWludGVybmFscyAuCi0KLShmdW5jdGlvbihtb2QpIHsKLSAgaWYgKHR5cGVvZiBleHBv
cnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIpIC8vIENvbW1vbkpT
Ci0gICAgbW9kdWxlLmV4cG9ydHMgPSBtb2QoKTsKLSAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9
PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIC8vIEFNRAotICAgIHJldHVybiBkZWZpbmUoW10s
IG1vZCk7Ci0gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnYKLSAgICB0aGlzLkNvZGVNaXJyb3Ig
PSBtb2QoKTsKLX0pKGZ1bmN0aW9uKCkgewotICAidXNlIHN0cmljdCI7Ci0KLSAgLy8gQlJPV1NF
UiBTTklGRklORwotCi0gIC8vIEtsdWRnZXMgZm9yIGJ1Z3MgYW5kIGJlaGF2aW9yIGRpZmZlcmVu
Y2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZQotICAvLyBkZXRlY3RlZCBhcmUgZW5hYmxlZCBiYXNl
ZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgotCi0gIHZhciBnZWNrbyA9IC9nZWNrb1wvXGQv
aS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICAvLyBpZV91cHRvTiBtZWFucyBJbnRlcm5l
dCBFeHBsb3JlciB2ZXJzaW9uIE4gb3IgbG93ZXIKLSAgdmFyIGllX3VwdG8xMCA9IC9NU0lFIFxk
Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWVfdXB0bzcgPSBpZV91cHRvMTAg
JiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9k
ZSA8IDgpOwotICB2YXIgaWVfdXB0bzggPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50
TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkpOwotICB2YXIgaWVfdXB0
bzkgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3Vt
ZW50LmRvY3VtZW50TW9kZSA8IDEwKTsKLSAgdmFyIGllXzExdXAgPSAvVHJpZGVudFwvKFs3LTld
fFxkezIsfSlcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIGllID0gaWVfdXB0
bzEwIHx8IGllXzExdXA7Ci0gIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCk7Ci0gIHZhciBxdHdlYmtpdCA9IHdlYmtpdCAmJiAvUXRcL1xkK1wuXGQrLy50
ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgcHJlc3RvID0gL09wZXJhXC8vLnRlc3QobmF2
aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBzYWZhcmkgPSAvQXBwbGUgQ29tcHV0ZXIvLnRlc3Qo
bmF2aWdhdG9yLnZlbmRvcik7Ci0gIHZhciBraHRtbCA9IC9LSFRNTFwvLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpOwotICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBPUyBYIDFcZFxE
KFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZhciBwaGFudG9t
ID0gL1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLQotICB2YXIgaW9zID0g
L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9Nb2JpbGVcL1x3Ky8u
dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgLy8gVGhpcyBpcyB3b2VmdWxseSBpbmNvbXBs
ZXRlLiBTdWdnZXN0aW9ucyBmb3IgYWx0ZXJuYXRpdmUgbWV0aG9kcyB3ZWxjb21lLgotICB2YXIg
bW9iaWxlID0gaW9zIHx8IC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVy
YSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIG1hYyA9
IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7Ci0gIHZhciB3aW5kb3dzID0g
L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKLQotICB2YXIgcHJlc3RvX3ZlcnNpb24g
PSBwcmVzdG8gJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQq
KS8pOwotICBpZiAocHJlc3RvX3ZlcnNpb24pIHByZXN0b192ZXJzaW9uID0gTnVtYmVyKHByZXN0
b192ZXJzaW9uWzFdKTsKLSAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49
IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9Ci0gIC8vIFNvbWUgYnJvd3Nl
cnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBP
UyBYCi0gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChw
cmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTsKLSAgdmFy
IGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRvOCk7Ci0KLSAgLy8g
T3B0aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkLgotICB2
YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBzZWRTcGFucyA9IGZhbHNlOwot
Ci0gIC8vIEVESVRPUiBDT05TVFJVQ1RPUgotCi0gIC8vIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBy
ZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0Ci0gIC8vIHRoYXQgdXNlciBj
b2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLgotCi0gIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxh
Y2UsIG9wdGlvbnMpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29kZU1pcnJvcikpIHJl
dHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucyk7Ci0KLSAgICB0aGlzLm9wdGlvbnMg
PSBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIG9w
dGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KLSAgICBjb3B5T2JqKGRl
ZmF1bHRzLCBvcHRpb25zLCBmYWxzZSk7Ci0gICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9w
dGlvbnMpOwotCi0gICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7Ci0gICAgaWYgKHR5cGVvZiBk
b2MgPT0gInN0cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUpOwotICAgIHRo
aXMuZG9jID0gZG9jOwotCi0gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlz
cGxheShwbGFjZSwgZG9jKTsKLSAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7
Ci0gICAgdXBkYXRlR3V0dGVycyh0aGlzKTsKLSAgICB0aGVtZUNoYW5nZWQodGhpcyk7Ci0gICAg
aWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQotICAgICAgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xh
c3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKLSAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMg
JiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKLQotICAgIHRoaXMuc3RhdGUgPSB7Ci0gICAg
ICBrZXlNYXBzOiBbXSwgIC8vIHN0b3JlcyBtYXBzIGFkZGVkIGJ5IGFkZEtleU1hcAotICAgICAg
b3ZlcmxheXM6IFtdLCAvLyBoaWdobGlnaHRpbmcgb3ZlcmxheXMsIGFzIGFkZGVkIGJ5IGFkZE92
ZXJsYXkKLSAgICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9kZS9vdmVybGF5IGNo
YW5nZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mbwotICAgICAgb3Zlcndy
aXRlOiBmYWxzZSwgZm9jdXNlZDogZmFsc2UsCi0gICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwg
Ly8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJl
YWRPbmx5IG1vZGUKLSAgICAgIHBhc3RlSW5jb21pbmc6IGZhbHNlLCBjdXRJbmNvbWluZzogZmFs
c2UsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiByZWFkSW5wdXQKLSAgICAg
IGRyYWdnaW5nVGV4dDogZmFsc2UsCi0gICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCkgLy8g
c3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dAotICAgIH07Ci0KLSAgICAvLyBPdmVycmlk
ZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21ldGltZXMgZG9lcwot
ICAgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkCi0gICAgaWYgKGllX3VwdG8x
MCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIHRoaXMsIHRydWUpLCAyMCk7Ci0KLSAgICBy
ZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7Ci0gICAgZW5zdXJlR2xvYmFsSGFuZGxlcnMoKTsK
LQotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgcnVuSW5PcCh0aGlzLCBmdW5jdGlvbigpIHsKLSAg
ICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIGF0dGFjaERvYyhjbSwgZG9j
KTsKLQotICAgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBhY3RpdmVF
bHQoKSA9PSBkaXNwbGF5LmlucHV0KQotICAgICAgICBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywg
Y20pLCAyMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG9uQmx1cihjbSk7Ci0KLSAgICAgIGZvciAo
dmFyIG9wdCBpbiBvcHRpb25IYW5kbGVycykgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3Bl
cnR5KG9wdCkpCi0gICAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0oY20sIG9wdGlvbnNbb3B0XSwg
SW5pdCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkg
aW5pdEhvb2tzW2ldKGNtKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIERJU1BMQVkgQ09OU1RSVUNU
T1IKLQotICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGgg
Zm9yIGlucHV0IHJlYWRpbmcKLSAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4gSXQgaG9sZHMgcmVm
ZXJlbmNlcyB0byBET00gbm9kZXMgYW5kCi0gIC8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS4KLQot
ICBmdW5jdGlvbiBEaXNwbGF5KHBsYWNlLCBkb2MpIHsKLSAgICB2YXIgZCA9IHRoaXM7Ci0KLSAg
ICAvLyBUaGUgc2VtaWhpZGRlbiB0ZXh0YXJlYSB0aGF0IGlzIGZvY3VzZWQgd2hlbiB0aGUgZWRp
dG9yIGlzCi0gICAgLy8gZm9jdXNlZCwgYW5kIHJlY2VpdmVzIGlucHV0LgotICAgIHZhciBpbnB1
dCA9IGQuaW5wdXQgPSBlbHQoInRleHRhcmVhIiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiBhYnNv
bHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmUi
KTsKLSAgICAvLyBUaGUgdGV4dGFyZWEgaXMga2VwdCBwb3NpdGlvbmVkIG5lYXIgdGhlIGN1cnNv
ciB0byBwcmV2ZW50IHRoZQotICAgIC8vIGZhY3QgdGhhdCBpdCdsbCBiZSBzY3JvbGxlZCBpbnRv
IHZpZXcgb24gaW5wdXQgZnJvbSBzY3JvbGxpbmcKLSAgICAvLyBvdXIgZmFrZSBjdXJzb3Igb3V0
IG9mIHZpZXcuIE9uIHdlYmtpdCwgd2hlbiB3cmFwPW9mZiwgcGFzdGUgaXMKLSAgICAvLyB2ZXJ5
IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEgd2lkZSBpbnN0ZWFkLgotICAgIGlmICh3ZWJraXQpIGlu
cHV0LnN0eWxlLndpZHRoID0gIjEwMDBweCI7Ci0gICAgZWxzZSBpbnB1dC5zZXRBdHRyaWJ1dGUo
IndyYXAiLCAib2ZmIik7Ci0gICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3Bl
biBrZXlib2FyZCAoaXNzdWUgIzEyODcpCi0gICAgaWYgKGlvcykgaW5wdXQuc3R5bGUuYm9yZGVy
ID0gIjFweCBzb2xpZCBibGFjayI7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVj
dCIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsg
aW5wdXQuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwgImZhbHNlIik7Ci0KLSAgICAvLyBXcmFw
cyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKLSAgICBkLmlucHV0RGl2ID0gZWx0KCJkaXYiLCBb
aW5wdXRdLCBudWxsLCAib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0
aDogM3B4OyBoZWlnaHQ6IDBweDsiKTsKLSAgICAvLyBUaGUgZmFrZSBzY3JvbGxiYXIgZWxlbWVu
dHMuCi0gICAgZC5zY3JvbGxiYXJIID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxs
LCAiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHgiKV0sICJDb2RlTWlycm9yLWhzY3JvbGxi
YXIiKTsKLSAgICBkLnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51
bGwsICJtaW4td2lkdGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpOwotICAgIC8v
IENvdmVycyBib3R0b20tcmlnaHQgc3F1YXJlIHdoZW4gYm90aCBzY3JvbGxiYXJzIGFyZSBwcmVz
ZW50LgotICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJv
ci1zY3JvbGxiYXItZmlsbGVyIik7Ci0gICAgLy8gQ292ZXJzIGJvdHRvbSBvZiBndXR0ZXIgd2hl
biBjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciBpcyBvbgotICAgIC8vIGFuZCBoIHNjcm9sbGJh
ciBpcyBwcmVzZW50LgotICAgIGQuZ3V0dGVyRmlsbGVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29k
ZU1pcnJvci1ndXR0ZXItZmlsbGVyIik7Ci0gICAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwg
Y29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuCi0gICAgZC5saW5lRGl2ID0g
ZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1jb2RlIik7Ci0gICAgLy8gRWxlbWVudHMgYXJl
IGFkZGVkIHRvIHRoZXNlIHRvIHJlcHJlc2VudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMuCi0gICAg
ZC5zZWxlY3Rpb25EaXYgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRp
dmU7IHotaW5kZXg6IDEiKTsKLSAgICBkLmN1cnNvckRpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNv
ZGVNaXJyb3ItY3Vyc29ycyIpOwotICAgIC8vIEEgdmlzaWJpbGl0eTogaGlkZGVuIGVsZW1lbnQg
dXNlZCB0byBmaW5kIHRoZSBzaXplIG9mIHRoaW5ncy4KLSAgICBkLm1lYXN1cmUgPSBlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUiKTsKLSAgICAvLyBXaGVuIGxpbmVzIG91dHNp
ZGUgb2YgdGhlIHZpZXdwb3J0IGFyZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJhd24gaW4gdGhpcy4K
LSAgICBkLmxpbmVNZWFzdXJlID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1tZWFzdXJl
Iik7Ci0gICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0
aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW0KLSAgICBkLmxpbmVTcGFjZSA9
IGVsdCgiZGl2IiwgW2QubWVhc3VyZSwgZC5saW5lTWVhc3VyZSwgZC5zZWxlY3Rpb25EaXYsIGQu
Y3Vyc29yRGl2LCBkLmxpbmVEaXZdLAotICAgICAgICAgICAgICAgICAgICAgIG51bGwsICJwb3Np
dGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKTsKLSAgICAvLyBNb3ZlZCBhcm91bmQgaXRz
IHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuCi0gICAgZC5tb3ZlciA9IGVsdCgiZGl2Iiwg
W2VsdCgiZGl2IiwgW2QubGluZVNwYWNlXSwgIkNvZGVNaXJyb3ItbGluZXMiKV0sIG51bGwsICJw
b3NpdGlvbjogcmVsYXRpdmUiKTsKLSAgICAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgZG9j
dW1lbnQsIGFsbG93aW5nIHNjcm9sbGluZy4KLSAgICBkLnNpemVyID0gZWx0KCJkaXYiLCBbZC5t
b3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIik7Ci0gICAgLy8gQmVoYXZpb3Igb2YgZWx0cyB3aXRo
IG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzCi0gICAgLy8gaW5jb25zaXN0ZW50IGFjcm9z
cyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGUKLSAgICAvLyBzY3JvbGxhYmxl
IGFyZWEgaXMgYmlnIGVub3VnaC4KLSAgICBkLmhlaWdodEZvcmNlciA9IGVsdCgiZGl2IiwgbnVs
bCwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiICsgc2Nyb2xsZXJDdXRPZmYg
KyAicHg7IHdpZHRoOiAxcHg7Iik7Ci0gICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBp
ZiBhbnkuCi0gICAgZC5ndXR0ZXJzID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0
ZXJzIik7Ci0gICAgZC5saW5lR3V0dGVyID0gbnVsbDsKLSAgICAvLyBBY3R1YWwgc2Nyb2xsYWJs
ZSBlbGVtZW50LgotICAgIGQuc2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtkLnNpemVyLCBkLmhlaWdo
dEZvcmNlciwgZC5ndXR0ZXJzXSwgIkNvZGVNaXJyb3Itc2Nyb2xsIik7Ci0gICAgZC5zY3JvbGxl
ci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwgIi0xIik7Ci0gICAgLy8gVGhlIGVsZW1lbnQgaW4g
d2hpY2ggdGhlIGVkaXRvciBsaXZlcy4KLSAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLmlu
cHV0RGl2LCBkLnNjcm9sbGJhckgsIGQuc2Nyb2xsYmFyViwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCAi
Q29kZU1pcnJvciIpOwotCi0gICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3Qg
cGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKQotICAgIGlmIChp
ZV91cHRvNykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUu
cGFkZGluZ1JpZ2h0ID0gMDsgfQotICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5r
aW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCi0gICAgaWYgKGlvcykgaW5wdXQuc3R5bGUud2lk
dGggPSAiMHB4IjsKLSAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVl
OwotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlmIChraHRt
bCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0eWxlLnBv
c2l0aW9uID0gImFic29sdXRlIjsgfQotICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0
aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4
KS4KLSAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQgPSBkLnNj
cm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7Ci0KLSAgICBpZiAocGxhY2UuYXBwZW5k
Q2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7Ci0gICAgZWxzZSBwbGFjZShkLndy
YXBwZXIpOwotCi0gICAgLy8gQ3VycmVudCByZW5kZXJlZCByYW5nZSAobWF5IGJlIGJpZ2dlciB0
aGFuIHRoZSB2aWV3IHdpbmRvdykuCi0gICAgZC52aWV3RnJvbSA9IGQudmlld1RvID0gZG9jLmZp
cnN0OwotICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy4KLSAgICBk
LnZpZXcgPSBbXTsKLSAgICAvLyBIb2xkcyBpbmZvIGFib3V0IGEgc2luZ2xlIHJlbmRlcmVkIGxp
bmUgd2hlbiBpdCB3YXMgcmVuZGVyZWQKLSAgICAvLyBmb3IgbWVhc3VyZW1lbnQsIHdoaWxlIG5v
dCBpbiB2aWV3LgotICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7Ci0gICAgLy8gRW1wdHkg
c3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXcKLSAgICBkLnZpZXdPZmZzZXQgPSAwOwot
ICAgIGQubGFzdFNpemVDID0gMDsKLSAgICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKLQot
ICAgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5l
Y2Vzc2FyeSAod2hlbgotICAgIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgY3Jvc3NlcyBhIGJvdW5k
YXJ5IHRoYXQgbWFrZXMgaXRzIHdpZHRoIGNoYW5nZSkKLSAgICBkLmxpbmVOdW1XaWR0aCA9IGQu
bGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7Ci0gICAgLy8gU2VlIHJl
YWRJbnB1dCBhbmQgcmVzZXRJbnB1dAotICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgLy8gU2V0
IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpcwot
ICAgIC8vIGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlz
IHNraXBwZWQgd2hlbgotICAgIC8vIHRoaXMgaXMgZmFsc2UuCi0gICAgZC5hbGlnbldpZGdldHMg
PSBmYWxzZTsKLSAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgZXhwZWN0IGlu
cHV0IHRvIGFwcGVhciByZWFsIHNvb24KLSAgICAvLyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlr
ZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUKLSAgICAvLyBwb2xsaW5nIGludGVuc2l2
ZWx5LgotICAgIGQucG9sbGluZ0Zhc3QgPSBmYWxzZTsKLSAgICAvLyBTZWxmLXJlc2V0dGluZyB0
aW1lb3V0IGZvciB0aGUgcG9sbGVyCi0gICAgZC5wb2xsID0gbmV3IERlbGF5ZWQoKTsKLQotICAg
IGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5n
SCA9IG51bGw7Ci0KLSAgICAvLyBUcmFja3Mgd2hlbiByZXNldElucHV0IGhhcyBwdW50ZWQgdG8g
anVzdCBwdXR0aW5nIGEgc2hvcnQKLSAgICAvLyBzdHJpbmcgaW50byB0aGUgdGV4dGFyZWEgaW5z
dGVhZCBvZiB0aGUgZnVsbCBzZWxlY3Rpb24uCi0gICAgZC5pbmFjY3VyYXRlU2VsZWN0aW9uID0g
ZmFsc2U7Ci0KLSAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0
aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKLSAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBz
Y3JvbGxpbmcuCi0gICAgZC5tYXhMaW5lID0gbnVsbDsKLSAgICBkLm1heExpbmVMZW5ndGggPSAw
OwotICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIFVzZWQgZm9yIG1lYXN1
cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHkKLSAgICBkLndoZWVsRFggPSBkLndoZWVs
RFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7Ci0KLSAgICAvLyBUcnVl
IHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLgotICAgIGQuc2hpZnQgPSBmYWxzZTsKLQotICAgIC8v
IFVzZWQgdG8gdHJhY2sgd2hldGhlciBhbnl0aGluZyBoYXBwZW5lZCBzaW5jZSB0aGUgY29udGV4
dCBtZW51Ci0gICAgLy8gd2FzIG9wZW5lZC4KLSAgICBkLnNlbEZvckNvbnRleHRNZW51ID0gbnVs
bDsKLSAgfQotCi0gIC8vIFNUQVRFIFVQREFURVMKLQotICAvLyBVc2VkIHRvIGdldCB0aGUgZWRp
dG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdoZW4gb3B0aW9ucyBjaGFuZ2UuCi0K
LSAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHsKLSAgICBjbS5kb2MubW9kZSA9IENvZGVNaXJyb3Iu
Z2V0TW9kZShjbS5vcHRpb25zLCBjbS5kb2MubW9kZU9wdGlvbik7Ci0gICAgcmVzZXRNb2RlU3Rh
dGUoY20pOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzZXRNb2RlU3RhdGUoY20pIHsKLSAgICBjbS5k
b2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSBsaW5l
LnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgICAgaWYgKGxpbmUuc3R5bGVzKSBsaW5lLnN0eWxlcyA9
IG51bGw7Ci0gICAgfSk7Ci0gICAgY20uZG9jLmZyb250aWVyID0gY20uZG9jLmZpcnN0OwotICAg
IHN0YXJ0V29ya2VyKGNtLCAxMDApOwotICAgIGNtLnN0YXRlLm1vZGVHZW4rKzsKLSAgICBpZiAo
Y20uY3VyT3ApIHJlZ0NoYW5nZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5n
ZWQoY20pIHsKLSAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGFkZENs
YXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwotICAgICAgY20uZGlz
cGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9ICIiOwotICAgIH0gZWxzZSB7Ci0gICAgICBybUNs
YXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3Itd3JhcCIpOwotICAgICAgZmluZE1h
eExpbmUoY20pOwotICAgIH0KLSAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTsKLSAgICByZWdD
aGFuZ2UoY20pOwotICAgIGNsZWFyQ2FjaGVzKGNtKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7dXBkYXRlU2Nyb2xsYmFycyhjbSk7fSwgMTAwKTsKLSAgfQotCi0gIC8vIFJldHVybnMgYSBm
dW5jdGlvbiB0aGF0IGVzdGltYXRlcyB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgdG8gdXNlIGFzCi0g
IC8vIGZpcnN0IGFwcHJveGltYXRpb24gdW50aWwgdGhlIGxpbmUgYmVjb21lcyB2aXNpYmxlIChh
bmQgaXMgdGh1cwotICAvLyBwcm9wZXJseSBtZWFzdXJhYmxlKS4KLSAgZnVuY3Rpb24gZXN0aW1h
dGVIZWlnaHQoY20pIHsKLSAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCB3cmFw
cGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwotICAgIHZhciBwZXJMaW5lID0gd3JhcHBp
bmcgJiYgTWF0aC5tYXgoNSwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJX
aWR0aChjbS5kaXNwbGF5KSAtIDMpOwotICAgIHJldHVybiBmdW5jdGlvbihsaW5lKSB7Ci0gICAg
ICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHJldHVybiAwOwotCi0gICAgICB2YXIg
d2lkZ2V0c0hlaWdodCA9IDA7Ci0gICAgICBpZiAobGluZS53aWRnZXRzKSBmb3IgKHZhciBpID0g
MDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAobGluZS53aWRn
ZXRzW2ldLmhlaWdodCkgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0Owot
ICAgICAgfQotCi0gICAgICBpZiAod3JhcHBpbmcpCi0gICAgICAgIHJldHVybiB3aWRnZXRzSGVp
Z2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsK
LSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aDsKLSAgICB9Owot
ICB9Ci0KLSAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkgewotICAgIHZhciBkb2Mg
PSBjbS5kb2MsIGVzdCA9IGVzdGltYXRlSGVpZ2h0KGNtKTsKLSAgICBkb2MuaXRlcihmdW5jdGlv
bihsaW5lKSB7Ci0gICAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0KGxpbmUpOwotICAgICAgaWYgKGVz
dEhlaWdodCAhPSBsaW5lLmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQp
OwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChjbSkgewotICAgIHZh
ciBtYXAgPSBrZXlNYXBbY20ub3B0aW9ucy5rZXlNYXBdLCBzdHlsZSA9IG1hcC5zdHlsZTsKLSAg
ICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNz
TmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csICIiKSArCi0gICAgICAoc3R5bGUgPyAi
IGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7Ci0gIH0KLQotICBmdW5jdGlvbiB0aGVtZUNoYW5n
ZWQoY20pIHsKLSAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53
cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikgKwotICAgICAgY20u
b3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOwotICAgIGNsZWFy
Q2FjaGVzKGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGd1dHRlcnNDaGFuZ2VkKGNtKSB7Ci0gICAg
dXBkYXRlR3V0dGVycyhjbSk7Ci0gICAgcmVnQ2hhbmdlKGNtKTsKLSAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7YWxpZ25Ib3Jpem9udGFsbHkoY20pO30sIDIwKTsKLSAgfQotCi0gIC8vIFJlYnVp
bGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8gdGhlIGxlZnQgb2Yg
dGhlCi0gIC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC4KLSAgZnVuY3Rpb24gdXBkYXRlR3V0
dGVycyhjbSkgewotICAgIHZhciBndXR0ZXJzID0gY20uZGlzcGxheS5ndXR0ZXJzLCBzcGVjcyA9
IGNtLm9wdGlvbnMuZ3V0dGVyczsKLSAgICByZW1vdmVDaGlsZHJlbihndXR0ZXJzKTsKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNwZWNzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgZ3V0dGVy
Q2xhc3MgPSBzcGVjc1tpXTsKLSAgICAgIHZhciBnRWx0ID0gZ3V0dGVycy5hcHBlbmRDaGlsZChl
bHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlciAiICsgZ3V0dGVyQ2xhc3MpKTsKLSAg
ICAgIGlmIChndXR0ZXJDbGFzcyA9PSAiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpIHsKLSAgICAg
ICAgY20uZGlzcGxheS5saW5lR3V0dGVyID0gZ0VsdDsKLSAgICAgICAgZ0VsdC5zdHlsZS53aWR0
aCA9IChjbS5kaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArICJweCI7Ci0gICAgICB9Ci0gICAg
fQotICAgIGd1dHRlcnMuc3R5bGUuZGlzcGxheSA9IGkgPyAiIiA6ICJub25lIjsKLSAgICB1cGRh
dGVHdXR0ZXJTcGFjZShjbSk7Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShj
bSkgewotICAgIHZhciB3aWR0aCA9IGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKLSAg
ICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQgPSB3aWR0aCArICJweCI7Ci0gICAg
Y20uZGlzcGxheS5zY3JvbGxiYXJILnN0eWxlLmxlZnQgPSBjbS5vcHRpb25zLmZpeGVkR3V0dGVy
ID8gd2lkdGggKyAicHgiIDogMDsKLSAgfQotCi0gIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBs
ZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50Ci0gIC8vIGNvbGxhcHNlZCByYW5n
ZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQgam9pbgotICAvLyBv
dGhlciBsaW5lcyBvbnRvIGl0LgotICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHsKLSAgICBp
ZiAobGluZS5oZWlnaHQgPT0gMCkgcmV0dXJuIDA7Ci0gICAgdmFyIGxlbiA9IGxpbmUudGV4dC5s
ZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2Vk
U3BhbkF0U3RhcnQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1
ZSk7Ci0gICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7Ci0gICAgICBsZW4gKz0gZm91bmQuZnJv
bS5jaCAtIGZvdW5kLnRvLmNoOwotICAgIH0KLSAgICBjdXIgPSBsaW5lOwotICAgIHdoaWxlICht
ZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgewotICAgICAgdmFyIGZvdW5kID0gbWVy
Z2VkLmZpbmQoMCwgdHJ1ZSk7Ci0gICAgICBsZW4gLT0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQu
ZnJvbS5jaDsKLSAgICAgIGN1ciA9IGZvdW5kLnRvLmxpbmU7Ci0gICAgICBsZW4gKz0gY3VyLnRl
eHQubGVuZ3RoIC0gZm91bmQudG8uY2g7Ci0gICAgfQotICAgIHJldHVybiBsZW47Ci0gIH0KLQot
ICAvLyBGaW5kIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50LgotICBmdW5jdGlvbiBm
aW5kTWF4TGluZShjbSkgewotICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwot
ICAgIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3QpOwotICAgIGQubWF4TGluZUxl
bmd0aCA9IGxpbmVMZW5ndGgoZC5tYXhMaW5lKTsKLSAgICBkLm1heExpbmVDaGFuZ2VkID0gdHJ1
ZTsKLSAgICBkb2MuaXRlcihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgbGVuID0gbGluZUxl
bmd0aChsaW5lKTsKLSAgICAgIGlmIChsZW4gPiBkLm1heExpbmVMZW5ndGgpIHsKLSAgICAgICAg
ZC5tYXhMaW5lTGVuZ3RoID0gbGVuOwotICAgICAgICBkLm1heExpbmUgPSBsaW5lOwotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSBndXR0ZXJzIG9wdGlvbnMgY29u
dGFpbnMgdGhlIGVsZW1lbnQKLSAgLy8gIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiIHdoZW4gdGhl
IGxpbmVOdW1iZXJzIG9wdGlvbiBpcyB0cnVlLgotICBmdW5jdGlvbiBzZXRHdXR0ZXJzRm9yTGlu
ZU51bWJlcnMob3B0aW9ucykgewotICAgIHZhciBmb3VuZCA9IGluZGV4T2Yob3B0aW9ucy5ndXR0
ZXJzLCAiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOwotICAgIGlmIChmb3VuZCA9PSAtMSAmJiBv
cHRpb25zLmxpbmVOdW1iZXJzKSB7Ci0gICAgICBvcHRpb25zLmd1dHRlcnMgPSBvcHRpb25zLmd1
dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTsKLSAgICB9IGVsc2UgaWYg
KGZvdW5kID4gLTEgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIHsKLSAgICAgIG9wdGlvbnMuZ3V0
dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5zbGljZSgwKTsKLSAgICAgIG9wdGlvbnMuZ3V0dGVycy5z
cGxpY2UoZm91bmQsIDEpOwotICAgIH0KLSAgfQotCi0gIC8vIFNDUk9MTEJBUlMKLQotICAvLyBQ
cmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGlu
IG9uZQotICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuCi0g
IGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7Ci0gICAgdmFyIHNjcm9sbCA9IGNt
LmRpc3BsYXkuc2Nyb2xsZXI7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGNsaWVudEhlaWdodDogc2Ny
b2xsLmNsaWVudEhlaWdodCwKLSAgICAgIGJhckhlaWdodDogY20uZGlzcGxheS5zY3JvbGxiYXJW
LmNsaWVudEhlaWdodCwKLSAgICAgIHNjcm9sbFdpZHRoOiBzY3JvbGwuc2Nyb2xsV2lkdGgsIGNs
aWVudFdpZHRoOiBzY3JvbGwuY2xpZW50V2lkdGgsCi0gICAgICBiYXJXaWR0aDogY20uZGlzcGxh
eS5zY3JvbGxiYXJILmNsaWVudFdpZHRoLAotICAgICAgZG9jSGVpZ2h0OiBNYXRoLnJvdW5kKGNt
LmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkKLSAgICB9OwotICB9Ci0KLSAg
Ly8gUmUtc3luY2hyb25pemUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3aXRoIHRoZSBhY3R1YWwgc2l6
ZSBvZiB0aGUKLSAgLy8gY29udGVudC4KLSAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFycyhjbSwg
bWVhc3VyZSkgewotICAgIGlmICghbWVhc3VyZSkgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxi
YXJzKGNtKTsKLSAgICB2YXIgZCA9IGNtLmRpc3BsYXk7Ci0gICAgdmFyIHNjcm9sbEhlaWdodCA9
IG1lYXN1cmUuZG9jSGVpZ2h0ICsgc2Nyb2xsZXJDdXRPZmY7Ci0gICAgdmFyIG5lZWRzSCA9IG1l
YXN1cmUuc2Nyb2xsV2lkdGggPiBtZWFzdXJlLmNsaWVudFdpZHRoOwotICAgIHZhciBuZWVkc1Yg
PSBzY3JvbGxIZWlnaHQgPiBtZWFzdXJlLmNsaWVudEhlaWdodDsKLSAgICBpZiAobmVlZHNWKSB7
Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgICBkLnNj
cm9sbGJhclYuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJl
KSArICJweCIgOiAiMCI7Ci0gICAgICAvLyBBIGJ1ZyBpbiBJRTggY2FuIGNhdXNlIHRoaXMgdmFs
dWUgdG8gYmUgbmVnYXRpdmUsIHNvIGd1YXJkIGl0LgotICAgICAgZC5zY3JvbGxiYXJWLmZpcnN0
Q2hpbGQuc3R5bGUuaGVpZ2h0ID0KLSAgICAgICAgTWF0aC5tYXgoMCwgc2Nyb2xsSGVpZ2h0IC0g
bWVhc3VyZS5jbGllbnRIZWlnaHQgKyAobWVhc3VyZS5iYXJIZWlnaHQgfHwgZC5zY3JvbGxiYXJW
LmNsaWVudEhlaWdodCkpICsgInB4IjsKLSAgICB9IGVsc2UgewotICAgICAgZC5zY3JvbGxiYXJW
LnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGQuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxl
LmhlaWdodCA9ICIwIjsKLSAgICB9Ci0gICAgaWYgKG5lZWRzSCkgewotICAgICAgZC5zY3JvbGxi
YXJILnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwotICAgICAgZC5zY3JvbGxiYXJILnN0eWxlLnJp
Z2h0ID0gbmVlZHNWID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7Ci0g
ICAgICBkLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9Ci0gICAgICAgIChtZWFz
dXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIChtZWFzdXJlLmJhcldpZHRo
IHx8IGQuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCkpICsgInB4IjsKLSAgICB9IGVsc2UgewotICAg
ICAgZC5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgIGQuc2Nyb2xsYmFySC5m
aXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOwotICAgIH0KLSAgICBpZiAobmVlZHNIICYmIG5l
ZWRzVikgewotICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7
Ci0gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBkLnNjcm9sbGJhckZpbGxl
ci5zdHlsZS53aWR0aCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOwotICAgIH0g
ZWxzZSBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgaWYgKG5lZWRz
SCAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlvbnMu
Zml4ZWRHdXR0ZXIpIHsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiYmxv
Y2siOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsYmFyV2lkdGgo
ZC5tZWFzdXJlKSArICJweCI7Ci0gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aCA9IGQu
Z3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7Ci0gICAgfSBlbHNlIGQuZ3V0dGVyRmlsbGVyLnN0
eWxlLmRpc3BsYXkgPSAiIjsKLQotICAgIGlmICghY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3Jv
bGxiYXIgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7Ci0gICAgICBpZiAoc2Nyb2xsYmFy
V2lkdGgoZC5tZWFzdXJlKSA9PT0gMCkgewotICAgICAgICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dl
TW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOwotICAgICAgICBkLnNjcm9sbGJhclYuc3R5
bGUubWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUubWluSGVpZ2h0ID0gdzsKLSAgICAgICAg
dmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICBpZiAoZV90YXJnZXQo
ZSkgIT0gZC5zY3JvbGxiYXJWICYmIGVfdGFyZ2V0KGUpICE9IGQuc2Nyb2xsYmFySCkKLSAgICAg
ICAgICAgIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKGUpOwotICAgICAgICB9OwotICAgICAg
ICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgICBv
bihkLnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgfQotICAg
ICAgY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgPSB0cnVlOwotICAgIH0KLSAgfQot
Ci0gIC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4gYSBnaXZlbiB2aWV3
cG9ydCAoZGVmYXVsdHMKLSAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZp
ZXdQb3J0IG1heSBjb250YWluIHRvcCwKLSAgLy8gaGVpZ2h0LCBhbmQgZW5zdXJlIChzZWUgb3Au
c2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCi0gIGZ1bmN0aW9uIHZpc2libGVMaW5lcyhkaXNwbGF5
LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRvcCA9IHZpZXdQb3J0ICYmIHZpZXdQb3J0LnRv
cCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld1BvcnQudG9wKSA6IGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsVG9wOwotICAgIHRvcCA9IE1hdGguZmxvb3IodG9wIC0gcGFkZGluZ1RvcChkaXNwbGF5
KSk7Ci0gICAgdmFyIGJvdHRvbSA9IHZpZXdQb3J0ICYmIHZpZXdQb3J0LmJvdHRvbSAhPSBudWxs
ID8gdmlld1BvcnQuYm90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsK
LQotICAgIHZhciBmcm9tID0gbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG8gPSBsaW5lQXRIZWln
aHQoZG9jLCBib3R0b20pOwotICAgIC8vIEVuc3VyZSBpcyBhIHtmcm9tOiB7bGluZSwgY2h9LCB0
bzoge2xpbmUsIGNofX0gb2JqZWN0LCBhbmQKLSAgICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50
byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4KLSAgICBpZiAodmlld1BvcnQgJiYgdmlld1Bv
cnQuZW5zdXJlKSB7Ci0gICAgICB2YXIgZW5zdXJlRnJvbSA9IHZpZXdQb3J0LmVuc3VyZS5mcm9t
LmxpbmUsIGVuc3VyZVRvID0gdmlld1BvcnQuZW5zdXJlLnRvLmxpbmU7Ci0gICAgICBpZiAoZW5z
dXJlRnJvbSA8IGZyb20pCi0gICAgICAgIHJldHVybiB7ZnJvbTogZW5zdXJlRnJvbSwKLSAgICAg
ICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9j
LCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KX07Ci0gICAgICBp
ZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykKLSAgICAgICAgcmV0
dXJuIHtmcm9tOiBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVu
c3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KSwKLSAgICAgICAgICAgICAg
ICB0bzogZW5zdXJlVG99OwotICAgIH0KLSAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRo
Lm1heCh0bywgZnJvbSArIDEpfTsKLSAgfQotCi0gIC8vIExJTkUgTlVNQkVSUwotCi0gIC8vIFJl
LWFsaWduIGxpbmUgbnVtYmVycyBhbmQgZ3V0dGVyIG1hcmtzIHRvIGNvbXBlbnNhdGUgZm9yCi0g
IC8vIGhvcml6b250YWwgc2Nyb2xsaW5nLgotICBmdW5jdGlvbiBhbGlnbkhvcml6b250YWxseShj
bSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgdmlldyA9IGRpc3BsYXkudmlldzsK
LSAgICBpZiAoIWRpc3BsYXkuYWxpZ25XaWRnZXRzICYmICghZGlzcGxheS5ndXR0ZXJzLmZpcnN0
Q2hpbGQgfHwgIWNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpKSByZXR1cm47Ci0gICAgdmFyIGNvbXAg
PSBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSAtIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xs
TGVmdCArIGNtLmRvYy5zY3JvbGxMZWZ0OwotICAgIHZhciBndXR0ZXJXID0gZGlzcGxheS5ndXR0
ZXJzLm9mZnNldFdpZHRoLCBsZWZ0ID0gY29tcCArICJweCI7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7Ci0gICAgICBpZiAo
Y20ub3B0aW9ucy5maXhlZEd1dHRlciAmJiB2aWV3W2ldLmd1dHRlcikKLSAgICAgICAgdmlld1tp
XS5ndXR0ZXIuc3R5bGUubGVmdCA9IGxlZnQ7Ci0gICAgICB2YXIgYWxpZ24gPSB2aWV3W2ldLmFs
aWduYWJsZTsKLSAgICAgIGlmIChhbGlnbikgZm9yICh2YXIgaiA9IDA7IGogPCBhbGlnbi5sZW5n
dGg7IGorKykKLSAgICAgICAgYWxpZ25bal0uc3R5bGUubGVmdCA9IGxlZnQ7Ci0gICAgfQotICAg
IGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKQotICAgICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxl
LmxlZnQgPSAoY29tcCArIGd1dHRlclcpICsgInB4IjsKLSAgfQotCi0gIC8vIFVzZWQgdG8gZW5z
dXJlIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciBpcyBzdGlsbCB0aGUgcmlnaHQKLSAgLy8g
c2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4gUmV0dXJucyB0cnVlIHdoZW4gYW4g
dXBkYXRlCi0gIC8vIGlzIG5lZWRlZC4KLSAgZnVuY3Rpb24gbWF5YmVVcGRhdGVMaW5lTnVtYmVy
V2lkdGgoY20pIHsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZU51bWJlcnMpIHJldHVybiBmYWxz
ZTsKLSAgICB2YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZvcihjbS5vcHRpb25z
LCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBp
ZiAobGFzdC5sZW5ndGggIT0gZGlzcGxheS5saW5lTnVtQ2hhcnMpIHsKLSAgICAgIHZhciB0ZXN0
ID0gZGlzcGxheS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbGFz
dCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJD
b2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpOwotICAgICAgdmFy
IGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGluZyA9IHRlc3Qub2Zm
c2V0V2lkdGggLSBpbm5lclc7Ci0gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGgg
PSAiIjsKLSAgICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChpbm5lclcs
IGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpOwotICAgICAgZGlzcGxh
eS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZzsKLSAg
ICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxh
c3QubGVuZ3RoIDogLTE7Ci0gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBk
aXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7Ci0gICAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRpb25zLCBpKSB7Ci0gICAgcmV0dXJuIFN0cmluZyhv
cHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSk7
Ci0gIH0KLQotICAvLyBDb21wdXRlcyBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBkaXNw
bGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsCi0gIC8vIGJ1dCB1c2luZyBnZXRCb3VuZGluZ0NsaWVu
dFJlY3QgdG8gZ2V0IGEgc3ViLXBpeGVsLWFjY3VyYXRlCi0gIC8vIHJlc3VsdC4KLSAgZnVuY3Rp
b24gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgewotICAgIHJldHVybiBkaXNwbGF5LnNj
cm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkaXNwbGF5LnNpemVyLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7Ci0gIH0KLQotICAvLyBESVNQTEFZIERSQVdJTkcKLQot
ICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LCBzZWxlY3Rpb24sIGFuZCBzY3JvbGxiYXJzLCB1c2lu
ZyB0aGUKLSAgLy8gaW5mb3JtYXRpb24gaW4gZGlzcGxheS52aWV3IHRvIGZpbmQgb3V0IHdoaWNo
IG5vZGVzIGFyZSBubyBsb25nZXIKLSAgLy8gdXAtdG8tZGF0ZS4gVHJpZXMgdG8gYmFpbCBvdXQg
ZWFybHkgd2hlbiBubyBjaGFuZ2VzIGFyZSBuZWVkZWQsCi0gIC8vIHVubGVzcyBmb3JjZWQgaXMg
dHJ1ZS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFuIGFjdHVhbCB1cGRhdGUgaGFwcGVuZWQsIGZh
bHNlIG90aGVyd2lzZS4KLSAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjbSwgdmlld1BvcnQsIGZv
cmNlZCkgewotICAgIHZhciBvbGRGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbSwgb2xkVG8gPSBj
bS5kaXNwbGF5LnZpZXdUbywgdXBkYXRlZDsKLSAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5l
cyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0KTsKLSAgICBmb3IgKHZhciBmaXJzdCA9IHRy
dWU7OyBmaXJzdCA9IGZhbHNlKSB7Ci0gICAgICB2YXIgb2xkV2lkdGggPSBjbS5kaXNwbGF5LnNj
cm9sbGVyLmNsaWVudFdpZHRoOwotICAgICAgaWYgKCF1cGRhdGVEaXNwbGF5SW5uZXIoY20sIHZp
c2libGUsIGZvcmNlZCkpIGJyZWFrOwotICAgICAgdXBkYXRlZCA9IHRydWU7Ci0KLSAgICAgIC8v
IElmIHRoZSBtYXggbGluZSBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBsYXN0IG1lYXN1cmVkLCBtZWFz
dXJlIGl0LAotICAgICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVz
IGl0LgotICAgICAgaWYgKGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nKQotICAgICAgICBhZGp1c3RDb250ZW50V2lkdGgoY20pOwotCi0gICAgICB2
YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKLSAgICAgIHVwZGF0ZVNl
bGVjdGlvbihjbSk7Ci0gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7Ci0g
ICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKLSAgICAgIGlmICh3ZWJraXQg
JiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIGNoZWNrRm9yV2Via2l0V2lkdGhC
dWcoY20sIGJhck1lYXN1cmUpOyAvLyAoSXNzdWUgIzI0MjApCi0gICAgICBpZiAoZmlyc3QgJiYg
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgb2xkV2lkdGggIT0gY20uZGlzcGxheS5zY3JvbGxl
ci5jbGllbnRXaWR0aCkgewotICAgICAgICBmb3JjZWQgPSB0cnVlOwotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KLSAgICAgIGZvcmNlZCA9IGZhbHNlOwotCi0gICAgICAvLyBDbGlwIGZvcmNl
ZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgotICAgICAgaWYgKHZpZXdQb3J0
ICYmIHZpZXdQb3J0LnRvcCAhPSBudWxsKQotICAgICAgICB2aWV3UG9ydCA9IHt0b3A6IE1hdGgu
bWluKGJhck1lYXN1cmUuZG9jSGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYgLSBiYXJNZWFzdXJlLmNs
aWVudEhlaWdodCwgdmlld1BvcnQudG9wKX07Ci0gICAgICAvLyBVcGRhdGVkIGxpbmUgaGVpZ2h0
cyBtaWdodCByZXN1bHQgaW4gdGhlIGRyYXduIGFyZWEgbm90Ci0gICAgICAvLyBhY3R1YWxseSBj
b3ZlcmluZyB0aGUgdmlld3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBkb2VzLgotICAgICAg
dmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdQb3J0KTsKLSAg
ICAgIGlmICh2aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiB2aXNpYmxlLnRv
IDw9IGNtLmRpc3BsYXkudmlld1RvKQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjbS5k
aXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKLSAgICBpZiAodXBkYXRlZCkgewotICAg
ICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICBpZiAoY20uZGlzcGxheS52
aWV3RnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IG9sZFRvKQotICAgICAg
ICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zy
b20sIGNtLmRpc3BsYXkudmlld1RvKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVwZGF0ZWQ7Ci0gIH0K
LQotICAvLyBEb2VzIHRoZSBhY3R1YWwgdXBkYXRpbmcgb2YgdGhlIGxpbmUgZGlzcGxheS4gQmFp
bHMgb3V0Ci0gIC8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBi
ZSBkb25lIGFuZCBmb3JjZWQgaXMKLSAgLy8gZmFsc2UuCi0gIGZ1bmN0aW9uIHVwZGF0ZURpc3Bs
YXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKCFkaXNwbGF5LndyYXBwZXIub2Zmc2V0V2lkdGgp
IHsKLSAgICAgIHJlc2V0VmlldyhjbSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
QmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3Ro
aW5nIGNoYW5nZWQuCi0gICAgaWYgKCFmb3JjZWQgJiYgdmlzaWJsZS5mcm9tID49IGRpc3BsYXku
dmlld0Zyb20gJiYgdmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJgotICAgICAgICBjb3Vu
dERpcnR5VmlldyhjbSkgPT0gMCkKLSAgICAgIHJldHVybjsKLQotICAgIGlmIChtYXliZVVwZGF0
ZUxpbmVOdW1iZXJXaWR0aChjbSkpCi0gICAgICByZXNldFZpZXcoY20pOwotICAgIHZhciBkaW1z
ID0gZ2V0RGltZW5zaW9ucyhjbSk7Ci0KLSAgICAvLyBDb21wdXRlIGEgc3VpdGFibGUgbmV3IHZp
ZXdwb3J0IChmcm9tICYgdG8pCi0gICAgdmFyIGVuZCA9IGRvYy5maXJzdCArIGRvYy5zaXplOwot
ICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9y
dE1hcmdpbiwgZG9jLmZpcnN0KTsKLSAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHZpc2libGUu
dG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTsKLSAgICBpZiAoZGlzcGxheS52aWV3RnJv
bSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJvbSA9IE1hdGgubWF4
KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7Ci0gICAgaWYgKGRpc3BsYXkudmlld1RvID4g
dG8gJiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxh
eS52aWV3VG8pOwotICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykgewotICAgICAgZnJvbSA9IHZp
c3VhbExpbmVObyhjbS5kb2MsIGZyb20pOwotICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20u
ZG9jLCB0byk7Ci0gICAgfQotCi0gICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52
aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fAotICAgICAgZGlzcGxheS5sYXN0U2l6
ZUMgIT0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICBhZGp1c3RWaWV3KGNtLCBm
cm9tLCB0byk7Ci0KLSAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGlu
ZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKLSAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIg
ZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uCi0gICAgY20uZGlz
cGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgiOwotCi0gICAg
dmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXcoY20pOwotICAgIGlmICghZGlmZmVyZW50ICYm
IHRvVXBkYXRlID09IDAgJiYgIWZvcmNlZCkgcmV0dXJuOwotCi0gICAgLy8gRm9yIGJpZyBjaGFu
Z2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlCi0gICAgLy8gdXBk
YXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJz
LgotICAgIHZhciBmb2N1c2VkID0gYWN0aXZlRWx0KCk7Ci0gICAgaWYgKHRvVXBkYXRlID4gNCkg
ZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgcGF0Y2hEaXNwbGF5
KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCBkaW1zKTsKLSAgICBpZiAodG9VcGRhdGUg
PiA0KSBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgIC8vIFRoZXJlIG1p
Z2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290Ci0g
ICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LgotICAgIGlmIChmb2N1
c2VkICYmIGFjdGl2ZUVsdCgpICE9IGZvY3VzZWQgJiYgZm9jdXNlZC5vZmZzZXRIZWlnaHQpIGZv
Y3VzZWQuZm9jdXMoKTsKLQotICAgIC8vIFByZXZlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzIGZy
b20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc2Nyb2xsCi0gICAgLy8gd2lkdGguCi0gICAgcmVtb3Zl
Q2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOwotICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXku
c2VsZWN0aW9uRGl2KTsKLQotICAgIGlmIChkaWZmZXJlbnQpIHsKLSAgICAgIGRpc3BsYXkubGFz
dFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKLSAgICAgIHN0YXJ0V29ya2Vy
KGNtLCA0MDApOwotICAgIH0KLQotICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKLQot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRqdXN0Q29udGVudFdpZHRoKGNt
KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciB3aWR0aCA9IG1lYXN1
cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50ZXh0Lmxlbmd0aCku
bGVmdDsKLSAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdmFyIG1pbldp
ZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzKTsKLSAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1h
dGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG1pbldpZHRoICsgc2Nyb2xsZXJD
dXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBkaXNwbGF5LnNpemVy
LnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGggKyAicHgiOwotICAgIGlmIChtYXhTY3JvbGxMZWZ0
IDwgY20uZG9jLnNjcm9sbExlZnQpCi0gICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIHNldERvY3VtZW50SGVpZ2h0KGNtLCBtZWFzdXJlKSB7Ci0gICAgY20uZGlz
cGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBjbS5kaXNwbGF5LmhlaWdodEZvcmNlci5zdHls
ZS50b3AgPSBtZWFzdXJlLmRvY0hlaWdodCArICJweCI7Ci0gICAgY20uZGlzcGxheS5ndXR0ZXJz
LnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KG1lYXN1cmUuZG9jSGVpZ2h0LCBtZWFzdXJlLmNsaWVu
dEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmKSArICJweCI7Ci0gIH0KLQotICBmdW5jdGlvbiBjaGVj
a0ZvcldlYmtpdFdpZHRoQnVnKGNtLCBtZWFzdXJlKSB7Ci0gICAgLy8gV29yayBhcm91bmQgV2Vi
a2l0IGJ1ZyB3aGVyZSBpdCBzb21ldGltZXMgcmVzZXJ2ZXMgc3BhY2UgZm9yIGEKLSAgICAvLyBu
b24tZXhpc3RpbmcgcGhhbnRvbSBzY3JvbGxiYXIgaW4gdGhlIHNjcm9sbGVyIChJc3N1ZSAjMjQy
MCkKLSAgICBpZiAoY20uZGlzcGxheS5zaXplci5vZmZzZXRXaWR0aCArIGNtLmRpc3BsYXkuZ3V0
dGVycy5vZmZzZXRXaWR0aCA8IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLSAxKSB7
Ci0gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGNtLmRpc3BsYXkuaGVp
Z2h0Rm9yY2VyLnN0eWxlLnRvcCA9ICIwcHgiOwotICAgICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0
eWxlLmhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsKLSAgICB9Ci0gIH0KLQotICAv
LyBSZWFkIHRoZSBhY3R1YWwgaGVpZ2h0cyBvZiB0aGUgcmVuZGVyZWQgbGluZXMsIGFuZCB1cGRh
dGUgdGhlaXIKLSAgLy8gc3RvcmVkIGhlaWdodHMgdG8gbWF0Y2guCi0gIGZ1bmN0aW9uIHVwZGF0
ZUhlaWdodHNJblZpZXdwb3J0KGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owot
ICAgIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2Lm9mZnNldFRvcDsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIGN1
ciA9IGRpc3BsYXkudmlld1tpXSwgaGVpZ2h0OwotICAgICAgaWYgKGN1ci5oaWRkZW4pIGNvbnRp
bnVlOwotICAgICAgaWYgKGllX3VwdG83KSB7Ci0gICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5v
ZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgIGhlaWdodCA9IGJvdCAt
IHByZXZCb3R0b207Ci0gICAgICAgIHByZXZCb3R0b20gPSBib3Q7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB2YXIgYm94ID0gY3VyLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAg
ICAgIGhlaWdodCA9IGJveC5ib3R0b20gLSBib3gudG9wOwotICAgICAgfQotICAgICAgdmFyIGRp
ZmYgPSBjdXIubGluZS5oZWlnaHQgLSBoZWlnaHQ7Ci0gICAgICBpZiAoaGVpZ2h0IDwgMikgaGVp
Z2h0ID0gdGV4dEhlaWdodChkaXNwbGF5KTsKLSAgICAgIGlmIChkaWZmID4gLjAwMSB8fCBkaWZm
IDwgLS4wMDEpIHsKLSAgICAgICAgdXBkYXRlTGluZUhlaWdodChjdXIubGluZSwgaGVpZ2h0KTsK
LSAgICAgICAgdXBkYXRlV2lkZ2V0SGVpZ2h0KGN1ci5saW5lKTsKLSAgICAgICAgaWYgKGN1ci5y
ZXN0KSBmb3IgKHZhciBqID0gMDsgaiA8IGN1ci5yZXN0Lmxlbmd0aDsgaisrKQotICAgICAgICAg
IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRl
ZCB3aXRoIHRoZQotICAvLyBnaXZlbiBsaW5lLgotICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWln
aHQobGluZSkgewotICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGlu
ZS53aWRnZXRzLmxlbmd0aDsgKytpKQotICAgICAgbGluZS53aWRnZXRzW2ldLmhlaWdodCA9IGxp
bmUud2lkZ2V0c1tpXS5ub2RlLm9mZnNldEhlaWdodDsKLSAgfQotCi0gIC8vIERvIGEgYnVsay1y
ZWFkIG9mIHRoZSBET00gcG9zaXRpb25zIGFuZCBzaXplcyBuZWVkZWQgdG8gZHJhdyB0aGUKLSAg
Ly8gdmlldywgc28gdGhhdCB3ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcgYW5kIHdyaXRpbmcg
dG8gdGhlIERPTS4KLSAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkgewotICAgIHZhciBkID0g
Y20uZGlzcGxheSwgbGVmdCA9IHt9LCB3aWR0aCA9IHt9OwotICAgIGZvciAodmFyIG4gPSBkLmd1
dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKLSAg
ICAgIGxlZnRbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0TGVmdDsKLSAgICAgIHdp
ZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldFdpZHRoOwotICAgIH0KLSAgICBy
ZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwKLSAgICAgICAgICAgIGd1
dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCwKLSAgICAgICAgICAgIGd1dHRl
ckxlZnQ6IGxlZnQsCi0gICAgICAgICAgICBndXR0ZXJXaWR0aDogd2lkdGgsCi0gICAgICAgICAg
ICB3cmFwcGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH07Ci0gIH0KLQotICAvLyBTeW5j
IHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1v
dmluZwotICAvLyBub2RlcyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFu
ZCBjcmVhdGluZyB0aGUgb25lcwotICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgdXBk
YXRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgb3V0IG9mCi0gIC8vIGRhdGUuCi0gIGZ1bmN0aW9uIHBh
dGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVyc0Zyb20sIGRpbXMpIHsKLSAgICB2YXIgZGlzcGxh
eSA9IGNtLmRpc3BsYXksIGxpbmVOdW1iZXJzID0gY20ub3B0aW9ucy5saW5lTnVtYmVyczsKLSAg
ICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250YWluZXIuZmlyc3RD
aGlsZDsKLQotICAgIGZ1bmN0aW9uIHJtKG5vZGUpIHsKLSAgICAgIHZhciBuZXh0ID0gbm9kZS5u
ZXh0U2libGluZzsKLSAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4g
T1MgWCBXZWJraXQKLSAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRpc3BsYXkuY3VycmVu
dFdoZWVsVGFyZ2V0ID09IG5vZGUpCi0gICAgICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKLSAgICAgIGVsc2UKLSAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUp
OwotICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgfQotCi0gICAgdmFyIHZpZXcgPSBkaXNwbGF5LnZp
ZXcsIGxpbmVOID0gZGlzcGxheS52aWV3RnJvbTsKLSAgICAvLyBMb29wIG92ZXIgdGhlIGVsZW1l
bnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2RlcwotICAgIC8vIGluIGRp
c3BsYXkubGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby4KLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07
Ci0gICAgICBpZiAobGluZVZpZXcuaGlkZGVuKSB7Ci0gICAgICB9IGVsc2UgaWYgKCFsaW5lVmll
dy5ub2RlKSB7IC8vIE5vdCBkcmF3biB5ZXQKLSAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVF
bGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwotICAgICAgICBjb250YWluZXIuaW5z
ZXJ0QmVmb3JlKG5vZGUsIGN1cik7Ci0gICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCi0g
ICAgICAgIHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgY3VyID0gcm0oY3VyKTsKLSAgICAg
ICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9
IG51bGwgJiYKLSAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmll
dy5saW5lTnVtYmVyOwotICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykgewotICAgICAgICAg
IGlmIChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsICJndXR0ZXIiKSA+IC0xKSB1cGRhdGVOdW1i
ZXIgPSBmYWxzZTsKLSAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcs
IGxpbmVOLCBkaW1zKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7Ci0g
ICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7Ci0gICAgICAgICAg
bGluZVZpZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShs
aW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpOwotICAgICAgICB9Ci0gICAgICAgIGN1
ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICB9Ci0gICAgICBsaW5lTiArPSBs
aW5lVmlldy5zaXplOwotICAgIH0KLSAgICB3aGlsZSAoY3VyKSBjdXIgPSBybShjdXIpOwotICB9
Ci0KLSAgLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMsIGEgc3RyaW5nIGlzIGFk
ZGVkIHRvCi0gIC8vIGxpbmVWaWV3LmNoYW5nZXMuIFRoaXMgdXBkYXRlcyB0aGUgcmVsZXZhbnQg
cGFydCBvZiB0aGUgbGluZSdzCi0gIC8vIERPTSBzdHJ1Y3R1cmUuCi0gIGZ1bmN0aW9uIHVwZGF0
ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHsKLSAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IGxpbmVWaWV3LmNoYW5nZXMubGVuZ3RoOyBqKyspIHsKLSAgICAgIHZhciB0
eXBlID0gbGluZVZpZXcuY2hhbmdlc1tqXTsKLSAgICAgIGlmICh0eXBlID09ICJ0ZXh0IikgdXBk
YXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImd1dHRl
ciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7Ci0gICAgICBl
bHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKLSAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVXaWRnZXRzKGxpbmVWaWV3
LCBkaW1zKTsKLSAgICB9Ci0gICAgbGluZVZpZXcuY2hhbmdlcyA9IG51bGw7Ci0gIH0KLQotICAv
LyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQgY2xh
c3MgbmVlZCB0bwotICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMg
YWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2Ci0gIGZ1bmN0aW9uIGVuc3VyZUxpbmVXcmFwcGVkKGxp
bmVWaWV3KSB7Ci0gICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkgewotICAg
ICAgbGluZVZpZXcubm9kZSA9IGVsdCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxh
dGl2ZSIpOwotICAgICAgaWYgKGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZSkKLSAgICAgICAgbGlu
ZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmll
dy50ZXh0KTsKLSAgICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGluZVZpZXcudGV4dCk7
Ci0gICAgICBpZiAoaWVfdXB0bzcpIGxpbmVWaWV3Lm5vZGUuc3R5bGUuekluZGV4ID0gMjsKLSAg
ICB9Ci0gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVM
aW5lQmFja2dyb3VuZChsaW5lVmlldykgewotICAgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNz
ID8gbGluZVZpZXcuYmdDbGFzcyArICIgIiArIChsaW5lVmlldy5saW5lLmJnQ2xhc3MgfHwgIiIp
IDogbGluZVZpZXcubGluZS5iZ0NsYXNzOwotICAgIGlmIChjbHMpIGNscyArPSAiIENvZGVNaXJy
b3ItbGluZWJhY2tncm91bmQiOwotICAgIGlmIChsaW5lVmlldy5iYWNrZ3JvdW5kKSB7Ci0gICAg
ICBpZiAoY2xzKSBsaW5lVmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNsczsKLSAgICAgIGVs
c2UgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcu
YmFja2dyb3VuZCk7IGxpbmVWaWV3LmJhY2tncm91bmQgPSBudWxsOyB9Ci0gICAgfSBlbHNlIGlm
IChjbHMpIHsKLSAgICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpOwot
ICAgICAgbGluZVZpZXcuYmFja2dyb3VuZCA9IHdyYXAuaW5zZXJ0QmVmb3JlKGVsdCgiZGl2Iiwg
bnVsbCwgY2xzKSwgd3JhcC5maXJzdENoaWxkKTsKLSAgICB9Ci0gIH0KLQotICAvLyBXcmFwcGVy
IGFyb3VuZCBidWlsZExpbmVDb250ZW50IHdoaWNoIHdpbGwgcmV1c2UgdGhlIHN0cnVjdHVyZQot
ICAvLyBpbiBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgd2hlbiBwb3NzaWJsZS4KLSAgZnVuY3Rp
b24gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7Ci0gICAgdmFyIGV4dCA9IGNtLmRpc3Bs
YXkuZXh0ZXJuYWxNZWFzdXJlZDsKLSAgICBpZiAoZXh0ICYmIGV4dC5saW5lID09IGxpbmVWaWV3
LmxpbmUpIHsKLSAgICAgIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7Ci0gICAg
ICBsaW5lVmlldy5tZWFzdXJlID0gZXh0Lm1lYXN1cmU7Ci0gICAgICByZXR1cm4gZXh0LmJ1aWx0
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOwotICB9
Ci0KLSAgLy8gUmVkcmF3IHRoZSBsaW5lJ3MgdGV4dC4gSW50ZXJhY3RzIHdpdGggdGhlIGJhY2tn
cm91bmQgYW5kIHRleHQKLSAgLy8gY2xhc3NlcyBiZWNhdXNlIHRoZSBtb2RlIG1heSBvdXRwdXQg
dG9rZW5zIHRoYXQgaW5mbHVlbmNlIHRoZXNlCi0gIC8vIGNsYXNzZXMuCi0gIGZ1bmN0aW9uIHVw
ZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykgewotICAgIHZhciBjbHMgPSBsaW5lVmlldy50ZXh0
LmNsYXNzTmFtZTsKLSAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcp
OwotICAgIGlmIChsaW5lVmlldy50ZXh0ID09IGxpbmVWaWV3Lm5vZGUpIGxpbmVWaWV3Lm5vZGUg
PSBidWlsdC5wcmU7Ci0gICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChi
dWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpOwotICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7
Ci0gICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0
Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7Ci0gICAgICBsaW5lVmlldy5iZ0NsYXNzID0g
YnVpbHQuYmdDbGFzczsKLSAgICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFz
czsKLSAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKLSAgICB9IGVsc2UgaWYgKGNs
cykgewotICAgICAgbGluZVZpZXcudGV4dC5jbGFzc05hbWUgPSBjbHM7Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcpIHsKLSAgICB1cGRhdGVMaW5l
QmFja2dyb3VuZChsaW5lVmlldyk7Ci0gICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKQot
ICAgICAgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3Lmxp
bmUud3JhcENsYXNzOwotICAgIGVsc2UgaWYgKGxpbmVWaWV3Lm5vZGUgIT0gbGluZVZpZXcudGV4
dCkKLSAgICAgIGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gIiI7Ci0gICAgdmFyIHRleHRDbGFz
cyA9IGxpbmVWaWV3LnRleHRDbGFzcyA/IGxpbmVWaWV3LnRleHRDbGFzcyArICIgIiArIChsaW5l
Vmlldy5saW5lLnRleHRDbGFzcyB8fCAiIikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzczsKLSAg
ICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IHRleHRDbGFzcyB8fCAiIjsKLSAgfQotCi0gIGZ1
bmN0aW9uIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykgewotICAg
IGlmIChsaW5lVmlldy5ndXR0ZXIpIHsKLSAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQo
bGluZVZpZXcuZ3V0dGVyKTsKLSAgICAgIGxpbmVWaWV3Lmd1dHRlciA9IG51bGw7Ci0gICAgfQot
ICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJzOwotICAgIGlmIChj
bS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHsKLSAgICAgIHZhciB3cmFwID0gZW5z
dXJlTGluZVdyYXBwZWQobGluZVZpZXcpOwotICAgICAgdmFyIGd1dHRlcldyYXAgPSBsaW5lVmll
dy5ndXR0ZXIgPQotICAgICAgICB3cmFwLmluc2VydEJlZm9yZShlbHQoImRpdiIsIG51bGwsICJD
b2RlTWlycm9yLWd1dHRlci13cmFwcGVyIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIiAr
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/
IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lVmlldy50ZXh0KTsKLSAgICAgIGlmIChjbS5vcHRpb25z
LmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1saW5lbnVt
YmVycyJdKSkKLSAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5k
Q2hpbGQoCi0gICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVOKSwKLSAgICAgICAgICAgICAgIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1
dHRlci1lbHQiLAotICAgICAgICAgICAgICAibGVmdDogIiArIGRpbXMuZ3V0dGVyTGVmdFsiQ29k
ZU1pcnJvci1saW5lbnVtYmVycyJdICsgInB4OyB3aWR0aDogIgotICAgICAgICAgICAgICArIGNt
LmRpc3BsYXkubGluZU51bUlubmVyV2lkdGggKyAicHgiKSk7Ci0gICAgICBpZiAobWFya2Vycykg
Zm9yICh2YXIgayA9IDA7IGsgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2spIHsKLSAg
ICAgICAgdmFyIGlkID0gY20ub3B0aW9ucy5ndXR0ZXJzW2tdLCBmb3VuZCA9IG1hcmtlcnMuaGFz
T3duUHJvcGVydHkoaWQpICYmIG1hcmtlcnNbaWRdOwotICAgICAgICBpZiAoZm91bmQpCi0gICAg
ICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtmb3VuZF0sICJDb2RlTWly
cm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGltcy5ndXR0ZXJMZWZ0W2lkXSArICJweDsgd2lkdGg6ICIgKyBkaW1zLmd1dHRl
cldpZHRoW2lkXSArICJweCIpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiB1
cGRhdGVMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgewotICAgIGlmIChsaW5lVmlldy5hbGln
bmFibGUpIGxpbmVWaWV3LmFsaWduYWJsZSA9IG51bGw7Ci0gICAgZm9yICh2YXIgbm9kZSA9IGxp
bmVWaWV3Lm5vZGUuZmlyc3RDaGlsZCwgbmV4dDsgbm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAg
IHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgIGlmIChub2RlLmNsYXNzTmFtZSA9
PSAiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikKLSAgICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVD
aGlsZChub2RlKTsKLSAgICB9Ci0gICAgaW5zZXJ0TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMp
OwotICB9Ci0KLSAgLy8gQnVpbGQgYSBsaW5lJ3MgRE9NIHJlcHJlc2VudGF0aW9uIGZyb20gc2Ny
YXRjaAotICBmdW5jdGlvbiBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRp
bXMpIHsKLSAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpOwotICAg
IGxpbmVWaWV3LnRleHQgPSBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOwotICAgIGlmIChidWls
dC5iZ0NsYXNzKSBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzczsKLSAgICBpZiAoYnVp
bHQudGV4dENsYXNzKSBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7Ci0KLSAg
ICB1cGRhdGVMaW5lQ2xhc3NlcyhsaW5lVmlldyk7Ci0gICAgdXBkYXRlTGluZUd1dHRlcihjbSwg
bGluZVZpZXcsIGxpbmVOLCBkaW1zKTsKLSAgICBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywg
ZGltcyk7Ci0gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7Ci0gIH0KLQotICAvLyBBIGxpbmVWaWV3
IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5Ci0gIC8v
IGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJl
IGRyYXduLgotICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgewot
ICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0
cnVlKTsKLSAgICBpZiAobGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmll
dy5yZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IobGluZVZpZXcu
cmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGluc2Vy
dExpbmVXaWRnZXRzRm9yKGxpbmUsIGxpbmVWaWV3LCBkaW1zLCBhbGxvd0Fib3ZlKSB7Ci0gICAg
aWYgKCFsaW5lLndpZGdldHMpIHJldHVybjsKLSAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFw
cGVkKGxpbmVWaWV3KTsKLSAgICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkg
PCB3cy5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0
KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0Iik7Ci0gICAgICBp
ZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5pZ25vcmVFdmVudHMgPSB0cnVlOwot
ICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpOwot
ICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKQotICAgICAgICB3cmFwLmluc2Vy
dEJlZm9yZShub2RlLCBsaW5lVmlldy5ndXR0ZXIgfHwgbGluZVZpZXcudGV4dCk7Ci0gICAgICBl
bHNlCi0gICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7Ci0gICAgICBzaWduYWxMYXRlcih3
aWRnZXQsICJyZWRyYXciKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBwb3NpdGlvbkxpbmVX
aWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykgewotICAgIGlmICh3aWRnZXQubm9I
U2Nyb2xsKSB7Ci0gICAgICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5hbGlnbmFi
bGUgPSBbXSkpLnB1c2gobm9kZSk7Ci0gICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJXaWR0
aDsKLSAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyAicHgiOwotICAgICAg
aWYgKCF3aWRnZXQuY292ZXJHdXR0ZXIpIHsKLSAgICAgICAgd2lkdGggLT0gZGltcy5ndXR0ZXJU
b3RhbFdpZHRoOwotICAgICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0gZGltcy5ndXR0ZXJU
b3RhbFdpZHRoICsgInB4IjsKLSAgICAgIH0KLSAgICAgIG5vZGUuc3R5bGUud2lkdGggPSB3aWR0
aCArICJweCI7Ci0gICAgfQotICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpIHsKLSAgICAgIG5v
ZGUuc3R5bGUuekluZGV4ID0gNTsKLSAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRp
dmUiOwotICAgICAgaWYgKCF3aWRnZXQubm9IU2Nyb2xsKSBub2RlLnN0eWxlLm1hcmdpbkxlZnQg
PSAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgInB4IjsKLSAgICB9Ci0gIH0KLQotICAvLyBQT1NJ
VElPTiBPQkpFQ1QKLQotICAvLyBBIFBvcyBpbnN0YW5jZSByZXByZXNlbnRzIGEgcG9zaXRpb24g
d2l0aGluIHRoZSB0ZXh0LgotICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3MgPSBmdW5jdGlvbihs
aW5lLCBjaCkgewotICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSByZXR1cm4gbmV3IFBv
cyhsaW5lLCBjaCk7Ci0gICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoOwotICB9Owot
Ci0gIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNh
bWUsIGEgbmVnYXRpdmUKLSAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2
ZSBudW1iZXIgb3RoZXJ3aXNlLgotICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3MgPSBmdW5j
dGlvbihhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH07Ci0K
LSAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpO30KLSAgZnVu
Y3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBiIDogYTsgfQotICBm
dW5jdGlvbiBtaW5Qb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGEgOiBiOyB9Ci0K
LSAgLy8gU0VMRUNUSU9OIC8gQ1VSU09SCi0KLSAgLy8gU2VsZWN0aW9uIG9iamVjdHMgYXJlIGlt
bXV0YWJsZS4gQSBuZXcgb25lIGlzIGNyZWF0ZWQgZXZlcnkgdGltZQotICAvLyB0aGUgc2VsZWN0
aW9uIGNoYW5nZXMuIEEgc2VsZWN0aW9uIGlzIG9uZSBvciBtb3JlIG5vbi1vdmVybGFwcGluZwot
ICAvLyAoYW5kIG5vbi10b3VjaGluZykgcmFuZ2VzLCBzb3J0ZWQsIGFuZCBhbiBpbnRlZ2VyIHRo
YXQgaW5kaWNhdGVzCi0gIC8vIHdoaWNoIG9uZSBpcyB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gKHRo
ZSBvbmUgdGhhdCdzIHNjcm9sbGVkIGludG8KLSAgLy8gdmlldywgdGhhdCBnZXRDdXJzb3IgcmV0
dXJucywgZXRjKS4KLSAgZnVuY3Rpb24gU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KSB7Ci0g
ICAgdGhpcy5yYW5nZXMgPSByYW5nZXM7Ci0gICAgdGhpcy5wcmltSW5kZXggPSBwcmltSW5kZXg7
Ci0gIH0KLQotICBTZWxlY3Rpb24ucHJvdG90eXBlID0gewotICAgIHByaW1hcnk6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGhpcy5yYW5nZXNbdGhpcy5wcmltSW5kZXhdOyB9LAotICAgIGVxdWFsczog
ZnVuY3Rpb24ob3RoZXIpIHsKLSAgICAgIGlmIChvdGhlciA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsK
LSAgICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXggfHwgb3RoZXIucmFu
Z2VzLmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IGhlcmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNbaV07Ci0gICAgICAg
IGlmIChjbXAoaGVyZS5hbmNob3IsIHRoZXJlLmFuY2hvcikgIT0gMCB8fCBjbXAoaGVyZS5oZWFk
LCB0aGVyZS5oZWFkKSAhPSAwKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotICAgIGRlZXBDb3B5OiBmdW5jdGlvbigpIHsKLSAgICAgIGZvciAodmFy
IG91dCA9IFtdLCBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKQotICAgICAgICBv
dXRbaV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0aGlzLnJhbmdlc1tpXS5hbmNob3IpLCBjb3B5UG9z
KHRoaXMucmFuZ2VzW2ldLmhlYWQpKTsKLSAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwg
dGhpcy5wcmltSW5kZXgpOwotICAgIH0sCi0gICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9u
KCkgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykK
LSAgICAgICAgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9LAotICAgIGNvbnRhaW5zOiBmdW5jdGlvbihwb3MsIGVuZCkg
ewotICAgICAgaWYgKCFlbmQpIGVuZCA9IHBvczsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5yYW5n
ZXNbaV07Ci0gICAgICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49IDAgJiYgY21wKHBv
cywgcmFuZ2UudG8oKSkgPD0gMCkKLSAgICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICAg
IHJldHVybiAtMTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUmFuZ2UoYW5jaG9yLCBoZWFk
KSB7Ci0gICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQ7Ci0gIH0KLQot
ICBSYW5nZS5wcm90b3R5cGUgPSB7Ci0gICAgZnJvbTogZnVuY3Rpb24oKSB7IHJldHVybiBtaW5Q
b3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCk7IH0sCi0gICAgdG86IGZ1bmN0aW9uKCkgeyByZXR1
cm4gbWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpOyB9LAotICAgIGVtcHR5OiBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiB0aGlzLmhlYWQubGluZSA9PSB0aGlzLmFuY2hvci5saW5lICYm
IHRoaXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaDsKLSAgICB9Ci0gIH07Ci0KLSAgLy8gVGFr
ZSBhbiB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5k
Ci0gIC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVzJyByYW5nZXMgYXJy
YXkgKG1vZGlmeWluZwotICAvLyBpdCkuCi0gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihy
YW5nZXMsIHByaW1JbmRleCkgewotICAgIHZhciBwcmltID0gcmFuZ2VzW3ByaW1JbmRleF07Ci0g
ICAgcmFuZ2VzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gY21wKGEuZnJvbSgpLCBiLmZy
b20oKSk7IH0pOwotICAgIHByaW1JbmRleCA9IGluZGV4T2YocmFuZ2VzLCBwcmltKTsKLSAgICBm
b3IgKHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIGN1ciA9
IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07Ci0gICAgICBpZiAoY21wKHByZXYudG8o
KSwgY3VyLmZyb20oKSkgPj0gMCkgewotICAgICAgICB2YXIgZnJvbSA9IG1pblBvcyhwcmV2LmZy
b20oKSwgY3VyLmZyb20oKSksIHRvID0gbWF4UG9zKHByZXYudG8oKSwgY3VyLnRvKCkpOwotICAg
ICAgICB2YXIgaW52ID0gcHJldi5lbXB0eSgpID8gY3VyLmZyb20oKSA9PSBjdXIuaGVhZCA6IHBy
ZXYuZnJvbSgpID09IHByZXYuaGVhZDsKLSAgICAgICAgaWYgKGkgPD0gcHJpbUluZGV4KSAtLXBy
aW1JbmRleDsKLSAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0
byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
bmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCk7Ci0gIH0KLQotICBmdW5jdGlvbiBzaW1w
bGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSB7Ci0gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW25l
dyBSYW5nZShhbmNob3IsIGhlYWQgfHwgYW5jaG9yKV0sIDApOwotICB9Ci0KLSAgLy8gTW9zdCBv
ZiB0aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBtYWtlIHN1cmUgdGhl
eQotICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LgotICBmdW5jdGlvbiBj
bGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBk
b2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKTt9Ci0gIGZ1bmN0aW9uIGNsaXBQb3MoZG9jLCBwb3Mp
IHsKLSAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QpIHJldHVybiBQb3MoZG9jLmZpcnN0LCAw
KTsKLSAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTsKLSAgICBpZiAocG9z
LmxpbmUgPiBsYXN0KSByZXR1cm4gUG9zKGxhc3QsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxl
bmd0aCk7Ci0gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwb3MubGluZSku
dGV4dC5sZW5ndGgpOwotICB9Ci0gIGZ1bmN0aW9uIGNsaXBUb0xlbihwb3MsIGxpbmVsZW4pIHsK
LSAgICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVu
KSByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKTsKLSAgICBlbHNlIGlmIChjaCA8IDApIHJl
dHVybiBQb3MocG9zLmxpbmUsIDApOwotICAgIGVsc2UgcmV0dXJuIHBvczsKLSAgfQotICBmdW5j
dGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmly
c3QgKyBkb2Muc2l6ZTt9Ci0gIGZ1bmN0aW9uIGNsaXBQb3NBcnJheShkb2MsIGFycmF5KSB7Ci0g
ICAgZm9yICh2YXIgb3V0ID0gW10sIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtp
XSA9IGNsaXBQb3MoZG9jLCBhcnJheVtpXSk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotCi0gIC8v
IFNFTEVDVElPTiBVUERBVEVTCi0KLSAgLy8gVGhlICdzY3JvbGwnIHBhcmFtZXRlciBnaXZlbiB0
byBtYW55IG9mIHRoZXNlIGluZGljYXRlZCB3aGV0aGVyCi0gIC8vIHRoZSBuZXcgY3Vyc29yIHBv
c2l0aW9uIHNob3VsZCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcgYWZ0ZXIKLSAgLy8gbW9kaWZ5aW5n
IHRoZSBzZWxlY3Rpb24uCi0KLSAgLy8gSWYgc2hpZnQgaXMgaGVsZCBvciB0aGUgZXh0ZW5kIGZs
YWcgaXMgc2V0LCBleHRlbmRzIGEgcmFuZ2UgdG8KLSAgLy8gaW5jbHVkZSBhIGdpdmVuIHBvc2l0
aW9uIChhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBwb3NpdGlvbikuCi0gIC8vIE90aGVyd2lzZSwg
c2ltcGx5IHJldHVybnMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIGdpdmVuIHBvc2l0aW9ucy4KLSAg
Ly8gVXNlZCBmb3IgY3Vyc29yIG1vdGlvbiBhbmQgc3VjaC4KLSAgZnVuY3Rpb24gZXh0ZW5kUmFu
Z2UoZG9jLCByYW5nZSwgaGVhZCwgb3RoZXIpIHsKLSAgICBpZiAoZG9jLmNtICYmIGRvYy5jbS5k
aXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpIHsKLSAgICAgIHZhciBhbmNob3IgPSByYW5nZS5h
bmNob3I7Ci0gICAgICBpZiAob3RoZXIpIHsKLSAgICAgICAgdmFyIHBvc0JlZm9yZSA9IGNtcCho
ZWFkLCBhbmNob3IpIDwgMDsKLSAgICAgICAgaWYgKHBvc0JlZm9yZSAhPSAoY21wKG90aGVyLCBh
bmNob3IpIDwgMCkpIHsKLSAgICAgICAgICBhbmNob3IgPSBoZWFkOwotICAgICAgICAgIGhlYWQg
PSBvdGhlcjsKLSAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNtcChoZWFkLCBvdGhl
cikgPCAwKSkgewotICAgICAgICAgIGhlYWQgPSBvdGhlcjsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgcmV0dXJuIG5ldyBSYW5nZShhbmNob3IsIGhlYWQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICByZXR1cm4gbmV3IFJhbmdlKG90aGVyIHx8IGhlYWQsIGhlYWQpOwotICAgIH0KLSAgfQotCi0g
IC8vIEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gcmFuZ2UsIGRpc2NhcmQgdGhlIHJlc3Qu
Ci0gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVyLCBvcHRpb25zKSB7
Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbZXh0ZW5kUmFuZ2UoZG9jLCBk
b2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIpXSwgMCksIG9wdGlvbnMpOwotICB9Ci0KLSAg
Ly8gRXh0ZW5kIGFsbCBzZWxlY3Rpb25zIChwb3MgaXMgYW4gYXJyYXkgb2Ygc2VsZWN0aW9ucyB3
aXRoIGxlbmd0aAotICAvLyBlcXVhbCB0aGUgbnVtYmVyIG9mIHNlbGVjdGlvbnMpCi0gIGZ1bmN0
aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykgewotICAgIGZvciAodmFy
IG91dCA9IFtdLCBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKQotICAgICAg
b3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLCBkb2Muc2VsLnJhbmdlc1tpXSwgaGVhZHNbaV0sIG51
bGwpOwotICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnBy
aW1JbmRleCk7Ci0gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3U2VsLCBvcHRpb25zKTsKLSAgfQot
Ci0gIC8vIFVwZGF0ZXMgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIHNlbGVjdGlvbi4KLSAgZnVuY3Rp
b24gcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGksIHJhbmdlLCBvcHRpb25zKSB7Ci0gICAgdmFy
IHJhbmdlcyA9IGRvYy5zZWwucmFuZ2VzLnNsaWNlKDApOwotICAgIHJhbmdlc1tpXSA9IHJhbmdl
OwotICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIGRvYy5z
ZWwucHJpbUluZGV4KSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvLyBSZXNldCB0aGUgc2VsZWN0aW9u
IHRvIGEgc2luZ2xlIHJhbmdlLgotICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxlY3Rpb24oZG9jLCBh
bmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKLSAgICBzZXRTZWxlY3Rpb24oZG9jLCBzaW1wbGVTZWxl
Y3Rpb24oYW5jaG9yLCBoZWFkKSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvLyBHaXZlIGJlZm9yZVNl
bGVjdGlvbkNoYW5nZSBoYW5kbGVycyBhIGNoYW5nZSB0byBpbmZsdWVuY2UgYQotICAvLyBzZWxl
Y3Rpb24gdXBkYXRlLgotICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwp
IHsKLSAgICB2YXIgb2JqID0gewotICAgICAgcmFuZ2VzOiBzZWwucmFuZ2VzLAotICAgICAgdXBk
YXRlOiBmdW5jdGlvbihyYW5nZXMpIHsKLSAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgdGhp
cy5yYW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5hbmNob3IpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCByYW5nZXNb
aV0uaGVhZCkpOwotICAgICAgfQotICAgIH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9yZVNlbGVj
dGlvbkNoYW5nZSIsIGRvYywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAi
YmVmb3JlU2VsZWN0aW9uQ2hhbmdlIiwgZG9jLmNtLCBvYmopOwotICAgIGlmIChvYmoucmFuZ2Vz
ICE9IHNlbC5yYW5nZXMpIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob2JqLnJhbmdlcywgb2Jq
LnJhbmdlcy5sZW5ndGggLSAxKTsKLSAgICBlbHNlIHJldHVybiBzZWw7Ci0gIH0KLQotICBmdW5j
dGlvbiBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShkb2MsIHNlbCwgb3B0aW9ucykgewotICAg
IHZhciBkb25lID0gZG9jLmhpc3RvcnkuZG9uZSwgbGFzdCA9IGxzdChkb25lKTsKLSAgICBpZiAo
bGFzdCAmJiBsYXN0LnJhbmdlcykgewotICAgICAgZG9uZVtkb25lLmxlbmd0aCAtIDFdID0gc2Vs
OwotICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTsKLSAgICB9IGVs
c2UgewotICAgICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsLCBvcHRpb25zKTsKLSAgICB9Ci0gIH0K
LQotICAvLyBTZXQgYSBuZXcgc2VsZWN0aW9uLgotICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9j
LCBzZWwsIG9wdGlvbnMpIHsKLSAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlv
bnMpOwotICAgIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIGRvYy5zZWwsIGRvYy5jbSA/IGRv
Yy5jbS5jdXJPcC5pZCA6IE5hTiwgb3B0aW9ucyk7Ci0gIH0KLQotICBmdW5jdGlvbiBzZXRTZWxl
Y3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHsKLSAgICBpZiAoaGFzSGFuZGxlcihkb2Ms
ICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20s
ICJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSkKLSAgICAgIHNlbCA9IGZpbHRlclNlbGVjdGlvbkNo
YW5nZShkb2MsIHNlbCk7Ci0KLSAgICB2YXIgYmlhcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5iaWFz
IHx8Ci0gICAgICAoY21wKHNlbC5wcmltYXJ5KCkuaGVhZCwgZG9jLnNlbC5wcmltYXJ5KCkuaGVh
ZCkgPCAwID8gLTEgOiAxKTsKLSAgICBzZXRTZWxlY3Rpb25Jbm5lcihkb2MsIHNraXBBdG9taWNJ
blNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgdHJ1ZSkpOwotCi0gICAgaWYgKCEob3B0aW9ucyAm
JiBvcHRpb25zLnNjcm9sbCA9PT0gZmFsc2UpICYmIGRvYy5jbSkKLSAgICAgIGVuc3VyZUN1cnNv
clZpc2libGUoZG9jLmNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbklubmVyKGRv
Yywgc2VsKSB7Ci0gICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHJldHVybjsKLQotICAgIGRv
Yy5zZWwgPSBzZWw7Ci0KLSAgICBpZiAoZG9jLmNtKSB7Ci0gICAgICBkb2MuY20uY3VyT3AudXBk
YXRlSW5wdXQgPSBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7Ci0gICAgICBz
aWduYWxDdXJzb3JBY3Rpdml0eShkb2MuY20pOwotICAgIH0KLSAgICBzaWduYWxMYXRlcihkb2Ms
ICJjdXJzb3JBY3Rpdml0eSIsIGRvYyk7Ci0gIH0KLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgc2Vs
ZWN0aW9uIGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pYwotICAvLyBtYXJrZWQg
cmFuZ2VzLgotICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGRvYykgewotICAgIHNldFNlbGVj
dGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9jLnNlbCwgbnVsbCwg
ZmFsc2UpLCBzZWxfZG9udFNjcm9sbCk7Ci0gIH0KLQotICAvLyBSZXR1cm4gYSBzZWxlY3Rpb24g
dGhhdCBkb2VzIG5vdCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWMKLSAgLy8gcmFuZ2VzLgot
ICBmdW5jdGlvbiBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIG1heUNsZWFy
KSB7Ci0gICAgdmFyIG91dDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVu
Z3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07Ci0gICAgICB2YXIg
bmV3QW5jaG9yID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIp
OwotICAgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgYmlhcywg
bWF5Q2xlYXIpOwotICAgICAgaWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFuZ2UuYW5jaG9yIHx8
IG5ld0hlYWQgIT0gcmFuZ2UuaGVhZCkgewotICAgICAgICBpZiAoIW91dCkgb3V0ID0gc2VsLnJh
bmdlcy5zbGljZSgwLCBpKTsKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwg
bmV3SGVhZCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxl
Y3Rpb24ob3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbDsKLSAgfQotCi0gIC8vIEVuc3VyZSBhIGdp
dmVuIHBvc2l0aW9uIGlzIG5vdCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLgotICBmdW5jdGlvbiBz
a2lwQXRvbWljKGRvYywgcG9zLCBiaWFzLCBtYXlDbGVhcikgewotICAgIHZhciBmbGlwcGVkID0g
ZmFsc2UsIGN1clBvcyA9IHBvczsKLSAgICB2YXIgZGlyID0gYmlhcyB8fCAxOwotICAgIGRvYy5j
YW50RWRpdCA9IGZhbHNlOwotICAgIHNlYXJjaDogZm9yICg7OykgewotICAgICAgdmFyIGxpbmUg
PSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpOwotICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMp
IHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgdmFyIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1h
cmtlcjsKLSAgICAgICAgICBpZiAoKHNwLmZyb20gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVMZWZ0
ID8gc3AuZnJvbSA8PSBjdXJQb3MuY2ggOiBzcC5mcm9tIDwgY3VyUG9zLmNoKSkgJiYKLSAgICAg
ICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgKG0uaW5jbHVzaXZlUmlnaHQgPyBzcC50byA+PSBj
dXJQb3MuY2ggOiBzcC50byA+IGN1clBvcy5jaCkpKSB7Ci0gICAgICAgICAgICBpZiAobWF5Q2xl
YXIpIHsKLSAgICAgICAgICAgICAgc2lnbmFsKG0sICJiZWZvcmVDdXJzb3JFbnRlciIpOwotICAg
ICAgICAgICAgICBpZiAobS5leHBsaWNpdGx5Q2xlYXJlZCkgewotICAgICAgICAgICAgICAgIGlm
ICghbGluZS5tYXJrZWRTcGFucykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZWxzZSB7LS1pOyBj
b250aW51ZTt9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICghbS5hdG9taWMpIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIG5ld1BvcyA9IG0uZmluZChk
aXIgPCAwID8gLTEgOiAxKTsKLSAgICAgICAgICAgIGlmIChjbXAobmV3UG9zLCBjdXJQb3MpID09
IDApIHsKLSAgICAgICAgICAgICAgbmV3UG9zLmNoICs9IGRpcjsKLSAgICAgICAgICAgICAgaWYg
KG5ld1Bvcy5jaCA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPiBkb2Mu
Zmlyc3QpIG5ld1BvcyA9IGNsaXBQb3MoZG9jLCBQb3MobmV3UG9zLmxpbmUgLSAxKSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBuZXdQb3MgPSBudWxsOwotICAgICAgICAgICAgICB9IGVsc2UgaWYg
KG5ld1Bvcy5jaCA+IGxpbmUudGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3
UG9zLmxpbmUgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIG5ld1BvcyA9IFBvcyhuZXdQb3Mu
bGluZSArIDEsIDApOwotICAgICAgICAgICAgICAgIGVsc2UgbmV3UG9zID0gbnVsbDsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoIW5ld1BvcykgewotICAgICAgICAgICAgICAg
IGlmIChmbGlwcGVkKSB7Ci0gICAgICAgICAgICAgICAgICAvLyBEcml2ZW4gaW4gYSBjb3JuZXIg
LS0gbm8gdmFsaWQgY3Vyc29yIHBvc2l0aW9uIGZvdW5kIGF0IGFsbAotICAgICAgICAgICAgICAg
ICAgLy8gLS0gdHJ5IGFnYWluICp3aXRoKiBjbGVhcmluZywgaWYgd2UgZGlkbid0IGFscmVhZHkK
LSAgICAgICAgICAgICAgICAgIGlmICghbWF5Q2xlYXIpIHJldHVybiBza2lwQXRvbWljKGRvYywg
cG9zLCBiaWFzLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBv
ZmYgZWRpdGluZyB1bnRpbCBmdXJ0aGVyIG5vdGljZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2Yg
dGhlIGRvYwotICAgICAgICAgICAgICAgICAgZG9jLmNhbnRFZGl0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgIHJldHVybiBQb3MoZG9jLmZpcnN0LCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZmxpcHBlZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsK
LSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyUG9zID0gbmV3
UG9zOwotICAgICAgICAgICAgY29udGludWUgc2VhcmNoOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotICAgICAgcmV0dXJuIGN1clBvczsKLSAgICB9Ci0gIH0KLQotICAvLyBTRUxF
Q1RJT04gRFJBV0lORwotCi0gIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IK
LSAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5LCBkb2MgPSBjbS5kb2M7Ci0gICAgdmFyIGN1ckZyYWdtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIHZhciBzZWxGcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNl
bC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2Vz
W2ldOwotICAgICAgdmFyIGNvbGxhcHNlZCA9IHJhbmdlLmVtcHR5KCk7Ci0gICAgICBpZiAoY29s
bGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCi0gICAgICAgIGRy
YXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLCBjdXJGcmFnbWVudCk7Ci0gICAgICBpZiAoIWNv
bGxhcHNlZCkKLSAgICAgICAgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21l
bnQpOwotICAgIH0KLQotICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBj
dXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzCi0gICAgaWYgKGNtLm9wdGlvbnMu
bW92ZUlucHV0V2l0aEN1cnNvcikgewotICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMo
Y20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKTsKLSAgICAgIHZhciB3cmFwT2ZmID0g
ZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxh
eS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgdmFyIHRvcCA9IE1hdGgu
bWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQgLSAxMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxpbmVPZmYudG9w
IC0gd3JhcE9mZi50b3ApKTsKLSAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4o
ZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRQb3MubGVmdCArIGxpbmVPZmYubGVmdCAtIHdyYXBPZmYubGVm
dCkpOwotICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSB0b3AgKyAicHgiOwotICAg
ICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7Ci0gICAgfQotCi0g
ICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JEaXYsIGN1ckZyYWdtZW50KTsK
LSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgc2VsRnJhZ21l
bnQpOwotICB9Ci0KLSAgLy8gRHJhd3MgYSBjdXJzb3IgZm9yIHRoZSBnaXZlbiByYW5nZQotICBm
dW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5nZSwgb3V0cHV0KSB7Ci0gICAgdmFy
IHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgcmFuZ2UuaGVhZCwgImRpdiIpOwotCi0gICAgdmFyIGN1
cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJv
ci1jdXJzb3IiKSk7Ci0gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7Ci0g
ICAgY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy50b3AgKyAicHgiOwotICAgIGN1cnNvci5zdHlsZS5o
ZWlnaHQgPSBNYXRoLm1heCgwLCBwb3MuYm90dG9tIC0gcG9zLnRvcCkgKiBjbS5vcHRpb25zLmN1
cnNvckhlaWdodCArICJweCI7Ci0KLSAgICBpZiAocG9zLm90aGVyKSB7Ci0gICAgICAvLyBTZWNv
bmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRl
eHQKLSAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIs
ICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3Ii
KSk7Ci0gICAgICBvdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICBvdGhlckN1
cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyAicHgiOwotICAgICAgb3RoZXJDdXJz
b3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArICJweCI7Ci0gICAgICBvdGhlckN1cnNvci5z
dHlsZS5oZWlnaHQgPSAocG9zLm90aGVyLmJvdHRvbSAtIHBvcy5vdGhlci50b3ApICogLjg1ICsg
InB4IjsKLSAgICB9Ci0gIH0KLQotICAvLyBEcmF3cyB0aGUgZ2l2ZW4gcmFuZ2UgYXMgYSBoaWdo
bGlnaHRlZCBzZWxlY3Rpb24KLSAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5n
ZSwgb3V0cHV0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7
Ci0gICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwot
ICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFkZGlu
Zy5sZWZ0LCByaWdodFNpZGUgPSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRXaWR0aCAtIHBhZGRp
bmcucmlnaHQ7Ci0KLSAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7
Ci0gICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKLSAgICAgIHRvcCA9IE1hdGgucm91bmQodG9w
KTsKLSAgICAgIGJvdHRvbSA9IE1hdGgucm91bmQoYm90dG9tKTsKLSAgICAgIGZyYWdtZW50LmFw
cGVuZENoaWxkKGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCAicG9zaXRp
b246IGFic29sdXRlOyBsZWZ0OiAiICsgbGVmdCArCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7IHdpZHRoOiAiICsgKHdpZHRoID09IG51bGwg
PyByaWdodFNpZGUgLSBsZWZ0IDogd2lkdGgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicHg7IGhlaWdodDogIiArIChib3R0b20gLSB0b3ApICsgInB4IikpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnKSB7Ci0gICAgICB2
YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTsKLSAgICAgIHZhciBsaW5lTGVuID0gbGlu
ZU9iai50ZXh0Lmxlbmd0aDsKLSAgICAgIHZhciBzdGFydCwgZW5kOwotICAgICAgZnVuY3Rpb24g
Y29vcmRzKGNoLCBiaWFzKSB7Ci0gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGlu
ZSwgY2gpLCAiZGl2IiwgbGluZU9iaiwgYmlhcyk7Ci0gICAgICB9Ci0KLSAgICAgIGl0ZXJhdGVC
aWRpU2VjdGlvbnMoZ2V0T3JkZXIobGluZU9iaiksIGZyb21BcmcgfHwgMCwgdG9BcmcgPT0gbnVs
bCA/IGxpbmVMZW4gOiB0b0FyZywgZnVuY3Rpb24oZnJvbSwgdG8sIGRpcikgewotICAgICAgICB2
YXIgbGVmdFBvcyA9IGNvb3Jkcyhmcm9tLCAibGVmdCIpLCByaWdodFBvcywgbGVmdCwgcmlnaHQ7
Ci0gICAgICAgIGlmIChmcm9tID09IHRvKSB7Ci0gICAgICAgICAgcmlnaHRQb3MgPSBsZWZ0UG9z
OwotICAgICAgICAgIGxlZnQgPSByaWdodCA9IGxlZnRQb3MubGVmdDsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICByaWdodFBvcyA9IGNvb3Jkcyh0byAtIDEsICJyaWdodCIpOwotICAgICAg
ICAgIGlmIChkaXIgPT0gInJ0bCIpIHsgdmFyIHRtcCA9IGxlZnRQb3M7IGxlZnRQb3MgPSByaWdo
dFBvczsgcmlnaHRQb3MgPSB0bXA7IH0KLSAgICAgICAgICBsZWZ0ID0gbGVmdFBvcy5sZWZ0Owot
ICAgICAgICAgIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGZyb21BcmcgPT0gbnVsbCAmJiBmcm9tID09IDApIGxlZnQgPSBsZWZ0U2lkZTsKLSAgICAgICAg
aWYgKHJpZ2h0UG9zLnRvcCAtIGxlZnRQb3MudG9wID4gMykgeyAvLyBEaWZmZXJlbnQgbGluZXMs
IGRyYXcgdG9wIHBhcnQKLSAgICAgICAgICBhZGQobGVmdCwgbGVmdFBvcy50b3AsIG51bGwsIGxl
ZnRQb3MuYm90dG9tKTsKLSAgICAgICAgICBsZWZ0ID0gbGVmdFNpZGU7Ci0gICAgICAgICAgaWYg
KGxlZnRQb3MuYm90dG9tIDwgcmlnaHRQb3MudG9wKSBhZGQobGVmdCwgbGVmdFBvcy5ib3R0b20s
IG51bGwsIHJpZ2h0UG9zLnRvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvQXJnID09IG51
bGwgJiYgdG8gPT0gbGluZUxlbikgcmlnaHQgPSByaWdodFNpZGU7Ci0gICAgICAgIGlmICghc3Rh
cnQgfHwgbGVmdFBvcy50b3AgPCBzdGFydC50b3AgfHwgbGVmdFBvcy50b3AgPT0gc3RhcnQudG9w
ICYmIGxlZnRQb3MubGVmdCA8IHN0YXJ0LmxlZnQpCi0gICAgICAgICAgc3RhcnQgPSBsZWZ0UG9z
OwotICAgICAgICBpZiAoIWVuZCB8fCByaWdodFBvcy5ib3R0b20gPiBlbmQuYm90dG9tIHx8IHJp
Z2h0UG9zLmJvdHRvbSA9PSBlbmQuYm90dG9tICYmIHJpZ2h0UG9zLnJpZ2h0ID4gZW5kLnJpZ2h0
KQotICAgICAgICAgIGVuZCA9IHJpZ2h0UG9zOwotICAgICAgICBpZiAobGVmdCA8IGxlZnRTaWRl
ICsgMSkgbGVmdCA9IGxlZnRTaWRlOwotICAgICAgICBhZGQobGVmdCwgcmlnaHRQb3MudG9wLCBy
aWdodCAtIGxlZnQsIHJpZ2h0UG9zLmJvdHRvbSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB7
c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07Ci0gICAgfQotCi0gICAgdmFyIHNGcm9tID0gcmFuZ2Uu
ZnJvbSgpLCBzVG8gPSByYW5nZS50bygpOwotICAgIGlmIChzRnJvbS5saW5lID09IHNUby5saW5l
KSB7Ci0gICAgICBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwgc1RvLmNoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgdmFyIGZyb21MaW5lID0gZ2V0TGluZShkb2MsIHNGcm9tLmxpbmUp
LCB0b0xpbmUgPSBnZXRMaW5lKGRvYywgc1RvLmxpbmUpOwotICAgICAgdmFyIHNpbmdsZVZMaW5l
ID0gdmlzdWFsTGluZShmcm9tTGluZSkgPT0gdmlzdWFsTGluZSh0b0xpbmUpOwotICAgICAgdmFy
IGxlZnRFbmQgPSBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwgc2luZ2xlVkxpbmUg
PyBmcm9tTGluZS50ZXh0Lmxlbmd0aCArIDEgOiBudWxsKS5lbmQ7Ci0gICAgICB2YXIgcmlnaHRT
dGFydCA9IGRyYXdGb3JMaW5lKHNUby5saW5lLCBzaW5nbGVWTGluZSA/IDAgOiBudWxsLCBzVG8u
Y2gpLnN0YXJ0OwotICAgICAgaWYgKHNpbmdsZVZMaW5lKSB7Ci0gICAgICAgIGlmIChsZWZ0RW5k
LnRvcCA8IHJpZ2h0U3RhcnQudG9wIC0gMikgewotICAgICAgICAgIGFkZChsZWZ0RW5kLnJpZ2h0
LCBsZWZ0RW5kLnRvcCwgbnVsbCwgbGVmdEVuZC5ib3R0b20pOwotICAgICAgICAgIGFkZChsZWZ0
U2lkZSwgcmlnaHRTdGFydC50b3AsIHJpZ2h0U3RhcnQubGVmdCwgcmlnaHRTdGFydC5ib3R0b20p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFkZChsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5k
LnRvcCwgcmlnaHRTdGFydC5sZWZ0IC0gbGVmdEVuZC5yaWdodCwgbGVmdEVuZC5ib3R0b20pOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAobGVmdEVuZC5ib3R0b20gPCByaWdodFN0YXJ0
LnRvcCkKLSAgICAgICAgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRT
dGFydC50b3ApOwotICAgIH0KLQotICAgIG91dHB1dC5hcHBlbmRDaGlsZChmcmFnbWVudCk7Ci0g
IH0KLQotICAvLyBDdXJzb3ItYmxpbmtpbmcKLSAgZnVuY3Rpb24gcmVzdGFydEJsaW5rKGNtKSB7
Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSByZXR1cm47Ci0gICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5OwotICAgIGNsZWFySW50ZXJ2YWwoZGlzcGxheS5ibGlua2VyKTsKLSAgICB2YXIg
b24gPSB0cnVlOwotICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiIjsK
LSAgICBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPiAwKQotICAgICAgZGlzcGxheS5i
bGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRpc3BsYXkuY3Vyc29y
RGl2LnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKLSAgICAg
IH0sIGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlKTsKLSAgfQotCi0gIC8vIEhJR0hMSUdIVCBX
T1JLRVIKLQotICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkgewotICAgIGlmIChjbS5k
b2MubW9kZS5zdGFydFN0YXRlICYmIGNtLmRvYy5mcm9udGllciA8IGNtLmRpc3BsYXkudmlld1Rv
KQotICAgICAgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtl
ciwgY20pKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihjbSkgewotICAgIHZh
ciBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKGRvYy5mcm9udGllciA8IGRvYy5maXJzdCkgZG9jLmZy
b250aWVyID0gZG9jLmZpcnN0OwotICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52
aWV3VG8pIHJldHVybjsKLSAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20ub3B0aW9ucy53b3Jr
VGltZTsKLSAgICB2YXIgc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIGdldFN0YXRlQmVmb3Jl
KGNtLCBkb2MuZnJvbnRpZXIpKTsKLQotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAg
IGRvYy5pdGVyKGRvYy5mcm9udGllciwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNt
LmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGRvYy5m
cm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFZpc2libGUKLSAgICAgICAgdmFy
IG9sZFN0eWxlcyA9IGxpbmUuc3R5bGVzOwotICAgICAgICB2YXIgaGlnaGxpZ2h0ZWQgPSBoaWdo
bGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgIGxpbmUuc3R5bGVzID0g
aGlnaGxpZ2h0ZWQuc3R5bGVzOwotICAgICAgICBpZiAoaGlnaGxpZ2h0ZWQuY2xhc3NlcykgbGlu
ZS5zdHlsZUNsYXNzZXMgPSBoaWdobGlnaHRlZC5jbGFzc2VzOwotICAgICAgICBlbHNlIGlmIChs
aW5lLnN0eWxlQ2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOwotICAgICAgICB2YXIg
aXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMu
bGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgIWlzY2hhbmdlICYmIGkgPCBvbGRTdHls
ZXMubGVuZ3RoOyArK2kpIGlzY2hhbmdlID0gb2xkU3R5bGVzW2ldICE9IGxpbmUuc3R5bGVzW2ld
OwotICAgICAgICBpZiAoaXNjaGFuZ2UpIHJlZ0xpbmVDaGFuZ2UoY20sIGRvYy5mcm9udGllciwg
InRleHQiKTsKLSAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKGRvYy5tb2RlLCBz
dGF0ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0
LCBzdGF0ZSk7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGRvYy5mcm9udGllciAlIDUgPT0g
MCA/IGNvcHlTdGF0ZShkb2MubW9kZSwgc3RhdGUpIDogbnVsbDsKLSAgICAgIH0KLSAgICAgICsr
ZG9jLmZyb250aWVyOwotICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewotICAgICAgICBzdGFy
dFdvcmtlcihjbSwgY20ub3B0aW9ucy53b3JrRGVsYXkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIEZpbmRzIHRoZSBsaW5lIHRv
IHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwotICAvLyBmaW5kIGEg
bGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQgd2l0aCBhCi0gIC8v
IHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhl
Ci0gIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFz
dCBjb250ZXh0IHRvCi0gIC8vIHBhcnNlIGNvcnJlY3RseS4KLSAgZnVuY3Rpb24gZmluZFN0YXJ0
TGluZShjbSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9
IGNtLmRvYzsKLSAgICB2YXIgbGltID0gcHJlY2lzZSA/IC0xIDogbiAtIChjbS5kb2MubW9kZS5p
bm5lck1vZGUgPyAxMDAwIDogMTAwKTsKLSAgICBmb3IgKHZhciBzZWFyY2ggPSBuOyBzZWFyY2gg
PiBsaW07IC0tc2VhcmNoKSB7Ci0gICAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgcmV0dXJu
IGRvYy5maXJzdDsKLSAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpOwot
ICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlciAmJiAoIXByZWNpc2UgfHwgc2VhcmNoIDw9IGRvYy5m
cm9udGllcikpIHJldHVybiBzZWFyY2g7Ci0gICAgICB2YXIgaW5kZW50ZWQgPSBjb3VudENvbHVt
bihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6ZSk7Ci0gICAgICBpZiAobWlubGlu
ZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7Ci0gICAgICAgIG1pbmxpbmUgPSBz
ZWFyY2ggLSAxOwotICAgICAgICBtaW5pbmRlbnQgPSBpbmRlbnRlZDsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIG1pbmxpbmU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShj
bSwgbiwgcHJlY2lzZSkgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNw
bGF5OwotICAgIGlmICghZG9jLm1vZGUuc3RhcnRTdGF0ZSkgcmV0dXJuIHRydWU7Ci0gICAgdmFy
IHBvcyA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpLCBzdGF0ZSA9IHBvcyA+IGRvYy5m
aXJzdCAmJiBnZXRMaW5lKGRvYywgcG9zLTEpLnN0YXRlQWZ0ZXI7Ci0gICAgaWYgKCFzdGF0ZSkg
c3RhdGUgPSBzdGFydFN0YXRlKGRvYy5tb2RlKTsKLSAgICBlbHNlIHN0YXRlID0gY29weVN0YXRl
KGRvYy5tb2RlLCBzdGF0ZSk7Ci0gICAgZG9jLml0ZXIocG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7
Ci0gICAgICBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7Ci0gICAgICB2YXIgc2F2
ZSA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zy
b20gJiYgcG9zIDwgZGlzcGxheS52aWV3VG87Ci0gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBzYXZl
ID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBudWxsOwotICAgICAgKytwb3M7Ci0gICAg
fSk7Ci0gICAgaWYgKHByZWNpc2UpIGRvYy5mcm9udGllciA9IHBvczsKLSAgICByZXR1cm4gc3Rh
dGU7Ci0gIH0KLQotICAvLyBQT1NJVElPTiBNRUFTVVJFTUVOVAotCi0gIGZ1bmN0aW9uIHBhZGRp
bmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3A7fQotICBm
dW5jdGlvbiBwYWRkaW5nVmVydChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubW92ZXIub2Zmc2V0
SGVpZ2h0IC0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0O30KLSAgZnVuY3Rpb24gcGFk
ZGluZ0goZGlzcGxheSkgewotICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdIKSByZXR1cm4g
ZGlzcGxheS5jYWNoZWRQYWRkaW5nSDsKLSAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRk
KGRpc3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiLCAieCIpKTsKLSAgICB2YXIgc3R5bGUgPSB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJy
ZW50U3R5bGU7Ci0gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xl
ZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07Ci0gICAgaWYgKCFpc05h
TihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgZGlzcGxheS5jYWNoZWRQYWRkaW5n
SCA9IGRhdGE7Ci0gICAgcmV0dXJuIGRhdGE7Ci0gIH0KLQotICAvLyBFbnN1cmUgdGhlIGxpbmVW
aWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzCi0gIC8vIGFu
IGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJh
d24KLSAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1v
cmUgdGhhbiBvbmUKLSAgLy8gaGVpZ2h0LgotICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhj
bSwgbGluZVZpZXcsIHJlY3QpIHsKLSAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVX
cmFwcGluZzsKLSAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBjbS5kaXNwbGF5LnNjcm9s
bGVyLmNsaWVudFdpZHRoOwotICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdy
YXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHsKLSAgICAgIHZh
ciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107Ci0gICAgICBpZiAod3Jh
cHBpbmcpIHsKLSAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRoOwotICAg
ICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMo
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGggLSAxOyBpKyspIHsK
LSAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07Ci0gICAg
ICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKQotICAgICAg
ICAgICAgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4dC50b3ApIC8gMiAtIHJlY3QudG9w
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaGVpZ2h0cy5wdXNoKHJlY3QuYm90dG9tIC0g
cmVjdC50b3ApOwotICAgIH0KLSAgfQotCi0gIC8vIEZpbmQgYSBsaW5lIG1hcCAobWFwcGluZyBj
aGFyYWN0ZXIgb2Zmc2V0cyB0byB0ZXh0IG5vZGVzKSBhbmQgYQotICAvLyBtZWFzdXJlbWVudCBj
YWNoZSBmb3IgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAoQSBsaW5lIHZpZXcgbWlnaHQKLSAgLy8g
Y29udGFpbiBtdWx0aXBsZSBsaW5lcyB3aGVuIGNvbGxhcHNlZCByYW5nZXMgYXJlIHByZXNlbnQu
KQotICBmdW5jdGlvbiBtYXBGcm9tTGluZVZpZXcobGluZVZpZXcsIGxpbmUsIGxpbmVOKSB7Ci0g
ICAgaWYgKGxpbmVWaWV3LmxpbmUgPT0gbGluZSkKLSAgICAgIHJldHVybiB7bWFwOiBsaW5lVmll
dy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9OwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKykKLSAgICAgIGlmIChsaW5l
Vmlldy5yZXN0W2ldID09IGxpbmUpCi0gICAgICAgIHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFz
dXJlLm1hcHNbaV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXX07Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgaWYgKGxp
bmVObyhsaW5lVmlldy5yZXN0W2ldKSA+IGxpbmVOKQotICAgICAgICByZXR1cm4ge21hcDogbGlu
ZVZpZXcubWVhc3VyZS5tYXBzW2ldLCBjYWNoZTogbGluZVZpZXcubWVhc3VyZS5jYWNoZXNbaV0s
IGJlZm9yZTogdHJ1ZX07Ci0gIH0KLQotICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRl
biBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZAotICAvLyB3aGVuIG1lYXN1cmVt
ZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LgotICBm
dW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7Ci0gICAgbGluZSA9
IHZpc3VhbExpbmUobGluZSk7Ci0gICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpOwotICAgIHZh
ciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRv
YywgbGluZSwgbGluZU4pOwotICAgIHZpZXcubGluZU4gPSBsaW5lTjsKLSAgICB2YXIgYnVpbHQg
PSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7Ci0gICAgdmlldy50ZXh0
ID0gYnVpbHQucHJlOwotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1l
YXN1cmUsIGJ1aWx0LnByZSk7Ci0gICAgcmV0dXJuIHZpZXc7Ci0gIH0KLQotICAvLyBHZXQgYSB7
dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxpbmUtbG9jYWwgY29vcmRpbmF0ZXMp
Ci0gIC8vIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20s
IGxpbmUsIGNoLCBiaWFzKSB7Ci0gICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHBy
ZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBiaWFzKTsKLSAgfQotCi0gIC8vIEZp
bmQgYSBsaW5lIHZpZXcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIu
Ci0gIGZ1bmN0aW9uIGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pIHsKLSAgICBpZiAobGluZU4g
Pj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBsaW5lTiA8IGNtLmRpc3BsYXkudmlld1RvKQotICAg
ICAgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildOwotICAg
IHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCAmJiBs
aW5lTiA+PSBleHQubGluZU4gJiYgbGluZU4gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKLSAgICAg
IHJldHVybiBleHQ7Ci0gIH0KLQotICAvLyBNZWFzdXJlbWVudCBjYW4gYmUgc3BsaXQgaW4gdHdv
IHN0ZXBzLCB0aGUgc2V0LXVwIHdvcmsgdGhhdAotICAvLyBhcHBsaWVzIHRvIHRoZSB3aG9sZSBs
aW5lLCBhbmQgdGhlIG1lYXN1cmVtZW50IG9mIHRoZSBhY3R1YWwKLSAgLy8gY2hhcmFjdGVyLiBG
dW5jdGlvbnMgbGlrZSBjb29yZHNDaGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBsb3Qgb2YKLSAgLy8g
bWVhc3VyZW1lbnRzIGluIGEgcm93LCBjYW4gdGh1cyBlbnN1cmUgdGhhdCB0aGUgc2V0LXVwIHdv
cmsgaXMKLSAgLy8gb25seSBkb25lIG9uY2UuCi0gIGZ1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9y
TGluZShjbSwgbGluZSkgewotICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKLSAgICB2YXIg
dmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pOwotICAgIGlmICh2aWV3ICYmICF2aWV3
LnRleHQpCi0gICAgICB2aWV3ID0gbnVsbDsKLSAgICBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hh
bmdlcykKLSAgICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGlt
ZW5zaW9ucyhjbSkpOwotICAgIGlmICghdmlldykKLSAgICAgIHZpZXcgPSB1cGRhdGVFeHRlcm5h
bE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKLQotICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3
KHZpZXcsIGxpbmUsIGxpbmVOKTsKLSAgICByZXR1cm4gewotICAgICAgbGluZTogbGluZSwgdmll
dzogdmlldywgcmVjdDogbnVsbCwKLSAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNh
Y2hlLCBiZWZvcmU6IGluZm8uYmVmb3JlLAotICAgICAgaGFzSGVpZ2h0czogZmFsc2UKLSAgICB9
OwotICB9Ci0KLSAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1
cmVzIHRoZSBwb3NpdGlvbiBvZiBhbgotICAvLyBhY3R1YWwgY2hhcmFjdGVyIChvciBmZXRjaGVz
IGl0IGZyb20gdGhlIGNhY2hlKS4KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwg
cHJlcGFyZWQsIGNoLCBiaWFzKSB7Ci0gICAgaWYgKHByZXBhcmVkLmJlZm9yZSkgY2ggPSAtMTsK
LSAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiksIGZvdW5kOwotICAgIGlmIChwcmVwYXJl
ZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICBmb3VuZCA9IHByZXBhcmVkLmNh
Y2hlW2tleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghcHJlcGFyZWQucmVjdCkKLSAgICAg
ICAgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKLSAgICAgIGlmICghcHJlcGFyZWQuaGFzSGVpZ2h0cykgewotICAgICAgICBlbnN1cmVM
aW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7Ci0gICAgICAgIHBy
ZXBhcmVkLmhhc0hlaWdodHMgPSB0cnVlOwotICAgICAgfQotICAgICAgZm91bmQgPSBtZWFzdXJl
Q2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpOwotICAgICAgaWYgKCFmb3VuZC5ib2d1
cykgcHJlcGFyZWQuY2FjaGVba2V5XSA9IGZvdW5kOwotICAgIH0KLSAgICByZXR1cm4ge2xlZnQ6
IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCwgdG9wOiBmb3VuZC50b3AsIGJvdHRvbTog
Zm91bmQuYm90dG9tfTsKLSAgfQotCi0gIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDog
MCwgdG9wOiAwLCBib3R0b206IDB9OwotCi0gIGZ1bmN0aW9uIG1lYXN1cmVDaGFySW5uZXIoY20s
IHByZXBhcmVkLCBjaCwgYmlhcykgewotICAgIHZhciBtYXAgPSBwcmVwYXJlZC5tYXA7Ci0KLSAg
ICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2U7Ci0gICAgLy8gRmlyc3QsIHNlYXJjaCB0
aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0bywKLSAgICAvLyBv
ciBjbG9zZXN0IHRvLCB0aGUgdGFyZ2V0IGNoYXJhY3Rlci4KLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1hcC5sZW5ndGg7IGkgKz0gMykgewotICAgICAgdmFyIG1TdGFydCA9IG1hcFtpXSwgbUVu
ZCA9IG1hcFtpICsgMV07Ci0gICAgICBpZiAoY2ggPCBtU3RhcnQpIHsKLSAgICAgICAgc3RhcnQg
PSAwOyBlbmQgPSAxOwotICAgICAgICBjb2xsYXBzZSA9ICJsZWZ0IjsKLSAgICAgIH0gZWxzZSBp
ZiAoY2ggPCBtRW5kKSB7Ci0gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7Ci0gICAgICAgIGVu
ZCA9IHN0YXJ0ICsgMTsKLSAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVuZ3RoIC0gMyB8fCBj
aCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkgewotICAgICAgICBlbmQgPSBtRW5kIC0gbVN0
YXJ0OwotICAgICAgICBzdGFydCA9IGVuZCAtIDE7Ci0gICAgICAgIGlmIChjaCA+PSBtRW5kKSBj
b2xsYXBzZSA9ICJyaWdodCI7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkgewot
ICAgICAgICBub2RlID0gbWFwW2kgKyAyXTsKLSAgICAgICAgaWYgKG1TdGFydCA9PSBtRW5kICYm
IGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/ICJsZWZ0IiA6ICJyaWdodCIpKQotICAgICAgICAg
IGNvbGxhcHNlID0gYmlhczsKLSAgICAgICAgaWYgKGJpYXMgPT0gImxlZnQiICYmIHN0YXJ0ID09
IDApCi0gICAgICAgICAgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBbaSAtIDNdICYmIG1h
cFtpIC0gMV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAtPSAzKSAr
IDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAibGVmdCI7Ci0gICAgICAgICAgfQotICAgICAg
ICBpZiAoYmlhcyA9PSAicmlnaHQiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpCi0gICAgICAg
ICAgd2hpbGUgKGkgPCBtYXAubGVuZ3RoIC0gMyAmJiBtYXBbaSArIDNdID09IG1hcFtpICsgNF0g
JiYgIW1hcFtpICsgNV0uaW5zZXJ0TGVmdCkgewotICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAr
PSAzKSArIDJdOwotICAgICAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOwotICAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIHJlY3Q7Ci0gICAgaWYg
KG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBpcyBhIHRleHQgbm9kZSwgdXNlIGEgcmFu
Z2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLgotICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlz
RXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1TdGFydCArIHN0YXJ0KSkp
IC0tc3RhcnQ7Ci0gICAgICB3aGlsZSAobVN0YXJ0ICsgZW5kIDwgbUVuZCAmJiBpc0V4dGVuZGlu
Z0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChtU3RhcnQgKyBlbmQpKSkgKytlbmQ7Ci0g
ICAgICBpZiAoaWVfdXB0bzggJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gbUVuZCAtIG1TdGFydCkg
ewotICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwotICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAg
ICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRDbGllbnRSZWN0cygp
OwotICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQotICAgICAgICAgIHJlY3QgPSByZWN0c1tiaWFz
ID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZWN0ID0gcmFu
Z2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVsbFJlY3Q7
Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQsIHNpbXBseSBnZXQg
dGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC4KLSAgICAgIGlmIChzdGFydCA+IDApIGNvbGxh
cHNlID0gYmlhcyA9ICJyaWdodCI7Ci0gICAgICB2YXIgcmVjdHM7Ci0gICAgICBpZiAoY20ub3B0
aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpKS5sZW5n
dGggPiAxKQotICAgICAgICByZWN0ID0gcmVjdHNbYmlhcyA9PSAicmlnaHQiID8gcmVjdHMubGVu
Z3RoIC0gMSA6IDBdOwotICAgICAgZWxzZQotICAgICAgICByZWN0ID0gbm9kZS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKLSAgICB9Ci0gICAgaWYgKGllX3VwdG84ICYmICFzdGFydCAmJiAoIXJl
Y3QgfHwgIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkpIHsKLSAgICAgIHZhciByU3BhbiA9IG5v
ZGUucGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdOwotICAgICAgaWYgKHJTcGFuKQotICAg
ICAgICByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldp
ZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219Owot
ICAgICAgZWxzZQotICAgICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgfQotCi0gICAgdmFyIHRv
cCwgYm90ID0gKHJlY3QuYm90dG9tICsgcmVjdC50b3ApIC8gMiAtIHByZXBhcmVkLnJlY3QudG9w
OwotICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJlLmhlaWdodHM7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKykKLSAgICAgIGlmIChi
b3QgPCBoZWlnaHRzW2ldKSBicmVhazsKLSAgICB0b3AgPSBpID8gaGVpZ2h0c1tpIC0gMV0gOiAw
OyBib3QgPSBoZWlnaHRzW2ldOwotICAgIHZhciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNlID09
ICJyaWdodCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwK
LSAgICAgICAgICAgICAgICAgIHJpZ2h0OiAoY29sbGFwc2UgPT0gImxlZnQiID8gcmVjdC5sZWZ0
IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCi0gICAgICAgICAgICAgICAgICB0
b3A6IHRvcCwgYm90dG9tOiBib3R9OwotICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0
KSByZXN1bHQuYm9ndXMgPSB0cnVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBmdW5j
dGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7Ci0gICAgaWYgKGxp
bmVWaWV3Lm1lYXN1cmUpIHsKLSAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKLSAg
ICAgIGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IG51bGw7Ci0gICAgICBpZiAobGluZVZpZXcu
cmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQotICAg
ICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OwotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pIHsKLSAgICBjbS5kaXNwbGF5LmV4
dGVybmFsTWVhc3VyZSA9IG51bGw7Ci0gICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5l
TWVhc3VyZSk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3Ro
OyBpKyspCi0gICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGNtLmRpc3BsYXkudmll
d1tpXSk7Ci0gIH0KLQotICBmdW5jdGlvbiBjbGVhckNhY2hlcyhjbSkgewotICAgIGNsZWFyTGlu
ZU1lYXN1cmVtZW50Q2FjaGUoY20pOwotICAgIGNtLmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoID0g
Y20uZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gY20uZGlzcGxheS5jYWNoZWRQYWRkaW5nSCA9
IG51bGw7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgY20uZGlzcGxheS5tYXhM
aW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBudWxsOwot
ICB9Ci0KLSAgZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7IHJldHVybiB3aW5kb3cucGFnZVhPZmZz
ZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxM
ZWZ0OyB9Ci0gIGZ1bmN0aW9uIHBhZ2VTY3JvbGxZKCkgeyByZXR1cm4gd2luZG93LnBhZ2VZT2Zm
c2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xs
VG9wOyB9Ci0KLSAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3gg
ZnJvbSBsaW5lLWxvY2FsCi0gIC8vIGNvb3JkaW5hdGVzIGludG8gYW5vdGhlciBjb29yZGluYXRl
IHN5c3RlbS4gQ29udGV4dCBtYXkgYmUgb25lIG9mCi0gIC8vICJsaW5lIiwgImRpdiIgKGRpc3Bs
YXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiLgotICBmdW5jdGlv
biBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHJlY3QsIGNvbnRleHQpIHsKLSAgICBpZiAo
bGluZU9iai53aWRnZXRzKSBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmoud2lkZ2V0cy5sZW5n
dGg7ICsraSkgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSkgewotICAgICAgdmFyIHNpemUg
PSB3aWRnZXRIZWlnaHQobGluZU9iai53aWRnZXRzW2ldKTsKLSAgICAgIHJlY3QudG9wICs9IHNp
emU7IHJlY3QuYm90dG9tICs9IHNpemU7Ci0gICAgfQotICAgIGlmIChjb250ZXh0ID09ICJsaW5l
IikgcmV0dXJuIHJlY3Q7Ci0gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gImxvY2FsIjsKLSAg
ICB2YXIgeU9mZiA9IGhlaWdodEF0TGluZShsaW5lT2JqKTsKLSAgICBpZiAoY29udGV4dCA9PSAi
bG9jYWwiKSB5T2ZmICs9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7Ci0gICAgZWxzZSB5T2ZmIC09
IGNtLmRpc3BsYXkudmlld09mZnNldDsKLSAgICBpZiAoY29udGV4dCA9PSAicGFnZSIgfHwgY29u
dGV4dCA9PSAid2luZG93IikgewotICAgICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFj
ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29u
dGV4dCA9PSAid2luZG93IiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTsKLSAgICAgIHZhciB4T2ZmID0g
bE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gIndpbmRvdyIgPyAwIDogcGFnZVNjcm9sbFgoKSk7Ci0g
ICAgICByZWN0LmxlZnQgKz0geE9mZjsgcmVjdC5yaWdodCArPSB4T2ZmOwotICAgIH0KLSAgICBy
ZWN0LnRvcCArPSB5T2ZmOyByZWN0LmJvdHRvbSArPSB5T2ZmOwotICAgIHJldHVybiByZWN0Owot
ICB9Ci0KLSAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tICJkaXYiIGNvb3JkcyB0byBhbm90aGVyIGNv
b3JkaW5hdGUgc3lzdGVtLgotICAvLyBDb250ZXh0IG1heSBiZSAid2luZG93IiwgInBhZ2UiLCAi
ZGl2Iiwgb3IgImxvY2FsIi9udWxsLgotICBmdW5jdGlvbiBmcm9tQ29vcmRTeXN0ZW0oY20sIGNv
b3JkcywgY29udGV4dCkgewotICAgIGlmIChjb250ZXh0ID09ICJkaXYiKSByZXR1cm4gY29vcmRz
OwotICAgIHZhciBsZWZ0ID0gY29vcmRzLmxlZnQsIHRvcCA9IGNvb3Jkcy50b3A7Ci0gICAgLy8g
Rmlyc3QgbW92ZSBpbnRvICJwYWdlIiBjb29yZGluYXRlIHN5c3RlbQotICAgIGlmIChjb250ZXh0
ID09ICJwYWdlIikgewotICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpOwotICAgICAgdG9wIC09
IHBhZ2VTY3JvbGxZKCk7Ci0gICAgfSBlbHNlIGlmIChjb250ZXh0ID09ICJsb2NhbCIgfHwgIWNv
bnRleHQpIHsKLSAgICAgIHZhciBsb2NhbEJveCA9IGNtLmRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7Ci0gICAgICBsZWZ0ICs9IGxvY2FsQm94LmxlZnQ7Ci0gICAgICB0b3Ag
Kz0gbG9jYWxCb3gudG9wOwotICAgIH0KLQotICAgIHZhciBsaW5lU3BhY2VCb3ggPSBjbS5kaXNw
bGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICByZXR1cm4ge2xlZnQ6
IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwg
YmlhcykgewotICAgIGlmICghbGluZU9iaikgbGluZU9iaiA9IGdldExpbmUoY20uZG9jLCBwb3Mu
bGluZSk7Ci0gICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNo
YXIoY20sIGxpbmVPYmosIHBvcy5jaCwgYmlhcyksIGNvbnRleHQpOwotICB9Ci0KLSAgLy8gUmV0
dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNoIG1heSBoYXZlIGFu
Ci0gIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNl
Y29uZGFyeSBjdXJzb3IKLSAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LgotICBmdW5jdGlvbiBjdXJz
b3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKSB7Ci0g
ICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsKLSAgICBp
ZiAoIXByZXBhcmVkTWVhc3VyZSkgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JM
aW5lKGNtLCBsaW5lT2JqKTsKLSAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0KSB7Ci0gICAgICB2
YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gsIHJpZ2h0
ID8gInJpZ2h0IiA6ICJsZWZ0Iik7Ci0gICAgICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7
IGVsc2UgbS5yaWdodCA9IG0ubGVmdDsKLSAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20s
IGxpbmVPYmosIG0sIGNvbnRleHQpOwotICAgIH0KLSAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBw
YXJ0UG9zKSB7Ci0gICAgICB2YXIgcGFydCA9IG9yZGVyW3BhcnRQb3NdLCByaWdodCA9IHBhcnQu
bGV2ZWwgJSAyOwotICAgICAgaWYgKGNoID09IGJpZGlMZWZ0KHBhcnQpICYmIHBhcnRQb3MgJiYg
cGFydC5sZXZlbCA8IG9yZGVyW3BhcnRQb3MgLSAxXS5sZXZlbCkgewotICAgICAgICBwYXJ0ID0g
b3JkZXJbLS1wYXJ0UG9zXTsKLSAgICAgICAgY2ggPSBiaWRpUmlnaHQocGFydCkgLSAocGFydC5s
ZXZlbCAlIDIgPyAwIDogMSk7Ci0gICAgICAgIHJpZ2h0ID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSBp
ZiAoY2ggPT0gYmlkaVJpZ2h0KHBhcnQpICYmIHBhcnRQb3MgPCBvcmRlci5sZW5ndGggLSAxICYm
IHBhcnQubGV2ZWwgPCBvcmRlcltwYXJ0UG9zICsgMV0ubGV2ZWwpIHsKLSAgICAgICAgcGFydCA9
IG9yZGVyWysrcGFydFBvc107Ci0gICAgICAgIGNoID0gYmlkaUxlZnQocGFydCkgLSBwYXJ0Lmxl
dmVsICUgMjsKLSAgICAgICAgcmlnaHQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGlmIChyaWdo
dCAmJiBjaCA9PSBwYXJ0LnRvICYmIGNoID4gcGFydC5mcm9tKSByZXR1cm4gZ2V0KGNoIC0gMSk7
Ci0gICAgICByZXR1cm4gZ2V0KGNoLCByaWdodCk7Ci0gICAgfQotICAgIHZhciBvcmRlciA9IGdl
dE9yZGVyKGxpbmVPYmopLCBjaCA9IHBvcy5jaDsKLSAgICBpZiAoIW9yZGVyKSByZXR1cm4gZ2V0
KGNoKTsKLSAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoKTsKLSAgICB2
YXIgdmFsID0gZ2V0QmlkaShjaCwgcGFydFBvcyk7Ci0gICAgaWYgKGJpZGlPdGhlciAhPSBudWxs
KSB2YWwub3RoZXIgPSBnZXRCaWRpKGNoLCBiaWRpT3RoZXIpOwotICAgIHJldHVybiB2YWw7Ci0g
IH0KLQotICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBh
IHBvc2l0aW9uLiBVc2VkIGZvcgotICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuCi0g
IGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHsKLSAgICB2YXIgbGVmdCA9IDAsIHBv
cyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOwotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBp
bmcpIGxlZnQgPSBjaGFyV2lkdGgoY20uZGlzcGxheSkgKiBwb3MuY2g7Ci0gICAgdmFyIGxpbmVP
YmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOwotICAgIHZhciB0b3AgPSBoZWlnaHRBdExp
bmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpOwotICAgIHJldHVybiB7bGVmdDog
bGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0
fTsKLSAgfQotCi0gIC8vIFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4g
c29tZSBleHRyYSBpbmZvcm1hdGlvbi4KLSAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBwb3Np
dGlvbiBvZiB0aGUgaW5wdXQgY29vcmRpbmF0ZXMgY29tcGFyZWQKLSAgLy8gdG8gdGhlIGZvdW5k
IHBvc2l0aW9uIChzbyB4UmVsID4gMCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgYXJlIHRvCi0gIC8v
IHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdoZW4g
b3V0c2lkZQotICAvLyBpcyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUgb3V0
c2lkZSB0aGUgbGluZSdzCi0gIC8vIHZlcnRpY2FsIHJhbmdlLgotICBmdW5jdGlvbiBQb3NXaXRo
SW5mbyhsaW5lLCBjaCwgb3V0c2lkZSwgeFJlbCkgewotICAgIHZhciBwb3MgPSBQb3MobGluZSwg
Y2gpOwotICAgIHBvcy54UmVsID0geFJlbDsKLSAgICBpZiAob3V0c2lkZSkgcG9zLm91dHNpZGUg
PSB0cnVlOwotICAgIHJldHVybiBwb3M7Ci0gIH0KLQotICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0
ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuCi0gIC8vIElucHV0
IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsICgiZGl2IiBjb29yZGluYXRlIHN5c3RlbSkuCi0gIGZ1
bmN0aW9uIGNvb3Jkc0NoYXIoY20sIHgsIHkpIHsKLSAgICB2YXIgZG9jID0gY20uZG9jOwotICAg
IHkgKz0gY20uZGlzcGxheS52aWV3T2Zmc2V0OwotICAgIGlmICh5IDwgMCkgcmV0dXJuIFBvc1dp
dGhJbmZvKGRvYy5maXJzdCwgMCwgdHJ1ZSwgLTEpOwotICAgIHZhciBsaW5lTiA9IGxpbmVBdEhl
aWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxOwotICAgIGlmIChs
aW5lTiA+IGxhc3QpCi0gICAgICByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0ICsgZG9jLnNp
emUgLSAxLCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIHRydWUsIDEpOwotICAgIGlm
ICh4IDwgMCkgeCA9IDA7Ci0KLSAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTik7
Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIGZvdW5kID0gY29vcmRzQ2hhcklubmVyKGNtLCBs
aW5lT2JqLCBsaW5lTiwgeCwgeSk7Ci0gICAgICB2YXIgbWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0
RW5kKGxpbmVPYmopOwotICAgICAgdmFyIG1lcmdlZFBvcyA9IG1lcmdlZCAmJiBtZXJnZWQuZmlu
ZCgwLCB0cnVlKTsKLSAgICAgIGlmIChtZXJnZWQgJiYgKGZvdW5kLmNoID4gbWVyZ2VkUG9zLmZy
b20uY2ggfHwgZm91bmQuY2ggPT0gbWVyZ2VkUG9zLmZyb20uY2ggJiYgZm91bmQueFJlbCA+IDAp
KQotICAgICAgICBsaW5lTiA9IGxpbmVObyhsaW5lT2JqID0gbWVyZ2VkUG9zLnRvLmxpbmUpOwot
ICAgICAgZWxzZQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHsKLSAgICB2YXIg
aW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopOwotICAgIHZhciB3cm9uZ0xpbmUg
PSBmYWxzZSwgYWRqdXN0ID0gMiAqIGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aDsKLSAg
ICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2Jq
KTsKLQotICAgIGZ1bmN0aW9uIGdldFgoY2gpIHsKLSAgICAgIHZhciBzcCA9IGN1cnNvckNvb3Jk
cyhjbSwgUG9zKGxpbmVObywgY2gpLCAibGluZSIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7
Ci0gICAgICB3cm9uZ0xpbmUgPSB0cnVlOwotICAgICAgaWYgKGlubmVyT2ZmID4gc3AuYm90dG9t
KSByZXR1cm4gc3AubGVmdCAtIGFkanVzdDsKLSAgICAgIGVsc2UgaWYgKGlubmVyT2ZmIDwgc3Au
dG9wKSByZXR1cm4gc3AubGVmdCArIGFkanVzdDsKLSAgICAgIGVsc2Ugd3JvbmdMaW5lID0gZmFs
c2U7Ci0gICAgICByZXR1cm4gc3AubGVmdDsKLSAgICB9Ci0KLSAgICB2YXIgYmlkaSA9IGdldE9y
ZGVyKGxpbmVPYmopLCBkaXN0ID0gbGluZU9iai50ZXh0Lmxlbmd0aDsKLSAgICB2YXIgZnJvbSA9
IGxpbmVMZWZ0KGxpbmVPYmopLCB0byA9IGxpbmVSaWdodChsaW5lT2JqKTsKLSAgICB2YXIgZnJv
bVggPSBnZXRYKGZyb20pLCBmcm9tT3V0c2lkZSA9IHdyb25nTGluZSwgdG9YID0gZ2V0WCh0byks
IHRvT3V0c2lkZSA9IHdyb25nTGluZTsKLQotICAgIGlmICh4ID4gdG9YKSByZXR1cm4gUG9zV2l0
aEluZm8obGluZU5vLCB0bywgdG9PdXRzaWRlLCAxKTsKLSAgICAvLyBEbyBhIGJpbmFyeSBzZWFy
Y2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCi0gICAgZm9yICg7OykgewotICAgICAgaWYgKGJpZGkg
PyB0byA9PSBmcm9tIHx8IHRvID09IG1vdmVWaXN1YWxseShsaW5lT2JqLCBmcm9tLCAxKSA6IHRv
IC0gZnJvbSA8PSAxKSB7Ci0gICAgICAgIHZhciBjaCA9IHggPCBmcm9tWCB8fCB4IC0gZnJvbVgg
PD0gdG9YIC0geCA/IGZyb20gOiB0bzsKLSAgICAgICAgdmFyIHhEaWZmID0geCAtIChjaCA9PSBm
cm9tID8gZnJvbVggOiB0b1gpOwotICAgICAgICB3aGlsZSAoaXNFeHRlbmRpbmdDaGFyKGxpbmVP
YmoudGV4dC5jaGFyQXQoY2gpKSkgKytjaDsKLSAgICAgICAgdmFyIHBvcyA9IFBvc1dpdGhJbmZv
KGxpbmVObywgY2gsIGNoID09IGZyb20gPyBmcm9tT3V0c2lkZSA6IHRvT3V0c2lkZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhEaWZmIDwgLTEgPyAtMSA6IHhEaWZmID4gMSA/IDEg
OiAwKTsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICAgIH0KLSAgICAgIHZhciBzdGVwID0gTWF0
aC5jZWlsKGRpc3QgLyAyKSwgbWlkZGxlID0gZnJvbSArIHN0ZXA7Ci0gICAgICBpZiAoYmlkaSkg
ewotICAgICAgICBtaWRkbGUgPSBmcm9tOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0
ZXA7ICsraSkgbWlkZGxlID0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIG1pZGRsZSwgMSk7Ci0gICAg
ICB9Ci0gICAgICB2YXIgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKLSAgICAgIGlmIChtaWRkbGVY
ID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAodG9PdXRzaWRlID0gd3JvbmdM
aW5lKSB0b1ggKz0gMTAwMDsgZGlzdCA9IHN0ZXA7fQotICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRs
ZTsgZnJvbVggPSBtaWRkbGVYOyBmcm9tT3V0c2lkZSA9IHdyb25nTGluZTsgZGlzdCAtPSBzdGVw
O30KLSAgICB9Ci0gIH0KLQotICB2YXIgbWVhc3VyZVRleHQ7Ci0gIC8vIENvbXB1dGUgdGhlIGRl
ZmF1bHQgdGV4dCBoZWlnaHQuCi0gIGZ1bmN0aW9uIHRleHRIZWlnaHQoZGlzcGxheSkgewotICAg
IGlmIChkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgIT0gbnVsbCkgcmV0dXJuIGRpc3BsYXkuY2Fj
aGVkVGV4dEhlaWdodDsKLSAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewotICAgICAgbWVh
c3VyZVRleHQgPSBlbHQoInByZSIpOwotICAgICAgLy8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVz
LCBmb3IgYnJvd3NlcnMgdGhhdCBjb21wdXRlCi0gICAgICAvLyBmcmFjdGlvbmFsIGhlaWdodHMu
Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIHsKLSAgICAgICAgbWVhc3VyZVRl
eHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7Ci0gICAgICAgIG1l
YXN1cmVUZXh0LmFwcGVuZENoaWxkKGVsdCgiYnIiKSk7Ci0gICAgICB9Ci0gICAgICBtZWFzdXJl
VGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKLSAgICB9Ci0g
ICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7Ci0g
ICAgdmFyIGhlaWdodCA9IG1lYXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUwOwotICAgIGlmICho
ZWlnaHQgPiAzKSBkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmVtb3Zl
Q2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTsKLSAgICByZXR1cm4gaGVpZ2h0IHx8IDE7Ci0gIH0K
LQotICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC4KLSAgZnVuY3Rpb24g
Y2hhcldpZHRoKGRpc3BsYXkpIHsKLSAgICBpZiAoZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggIT0g
bnVsbCkgcmV0dXJuIGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoOwotICAgIHZhciBhbmNob3IgPSBl
bHQoInNwYW4iLCAieHh4eHh4eHh4eCIpOwotICAgIHZhciBwcmUgPSBlbHQoInByZSIsIFthbmNo
b3JdKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7Ci0g
ICAgdmFyIHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHdpZHRoID0gKHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMTA7Ci0gICAgaWYgKHdpZHRoID4gMikgZGlzcGxheS5j
YWNoZWRDaGFyV2lkdGggPSB3aWR0aDsKLSAgICByZXR1cm4gd2lkdGggfHwgMTA7Ci0gIH0KLQot
ICAvLyBPUEVSQVRJT05TCi0KLSAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGEgc2Vy
aWVzIG9mIGNoYW5nZXMgdG8gdGhlIGVkaXRvcgotICAvLyBzdGF0ZSBpbiBzdWNoIGEgd2F5IHRo
YXQgZWFjaCBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlCi0gIC8vIGN1cnNvciBhbmQg
ZGlzcGxheSAod2hpY2ggd291bGQgYmUgYXdrd2FyZCwgc2xvdywgYW5kCi0gIC8vIGVycm9yLXBy
b25lKS4gSW5zdGVhZCwgZGlzcGxheSB1cGRhdGVzIGFyZSBiYXRjaGVkIGFuZCB0aGVuIGFsbAot
ICAvLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KLQotICB2YXIgbmV4dE9wSWQgPSAw
OwotICAvLyBTdGFydCBhIG5ldyBvcGVyYXRpb24uCi0gIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9u
KGNtKSB7Ci0gICAgY20uY3VyT3AgPSB7Ci0gICAgICB2aWV3Q2hhbmdlZDogZmFsc2UsICAgICAg
Ly8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkcmF3
bgotICAgICAgc3RhcnRIZWlnaHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVzZWQgdG8gZGV0ZWN0IG5l
ZWQgdG8gdXBkYXRlIHNjcm9sbGJhcgotICAgICAgZm9yY2VVcGRhdGU6IGZhbHNlLCAgICAgIC8v
IFVzZWQgdG8gZm9yY2UgYSByZWRyYXcKLSAgICAgIHVwZGF0ZUlucHV0OiBudWxsLCAgICAgICAv
LyBXaGV0aGVyIHRvIHJlc2V0IHRoZSBpbnB1dCB0ZXh0YXJlYQotICAgICAgdHlwaW5nOiBmYWxz
ZSwgICAgICAgICAgIC8vIFdoZXRoZXIgdGhpcyByZXNldCBzaG91bGQgYmUgY2FyZWZ1bCB0byBs
ZWF2ZSBleGlzdGluZyB0ZXh0IChmb3IgY29tcG9zaXRpbmcpCi0gICAgICBjaGFuZ2VPYmpzOiBu
dWxsLCAgICAgICAgLy8gQWNjdW11bGF0ZWQgY2hhbmdlcywgZm9yIGZpcmluZyBjaGFuZ2UgZXZl
bnRzCi0gICAgICBjdXJzb3JBY3Rpdml0eUhhbmRsZXJzOiBudWxsLCAvLyBTZXQgb2YgaGFuZGxl
cnMgdG8gZmlyZSBjdXJzb3JBY3Rpdml0eSBvbgotICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogZmFs
c2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRyYXduCi0gICAgICB1
cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVzdCBsaW5lIG5lZWRz
IHRvIGJlIGRldGVybWluZWQgYW5ldwotICAgICAgc2Nyb2xsTGVmdDogbnVsbCwgc2Nyb2xsVG9w
OiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcHVzaGVkIHRvIERP
TSB5ZXQKLSAgICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2VkIHRvIHNjcm9sbCB0
byBhIHNwZWNpZmljIHBvc2l0aW9uCi0gICAgICBpZDogKytuZXh0T3BJZCAgICAgICAgICAgLy8g
VW5pcXVlIElECi0gICAgfTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja0RlcHRoKyspIGRlbGF5
ZWRDYWxsYmFja3MgPSBbXTsKLSAgfQotCi0gIC8vIEZpbmlzaCBhbiBvcGVyYXRpb24sIHVwZGF0
aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRzCi0gIGZ1bmN0aW9u
IGVuZE9wZXJhdGlvbihjbSkgewotICAgIHZhciBvcCA9IGNtLmN1ck9wLCBkb2MgPSBjbS5kb2Ms
IGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGNtLmN1ck9wID0gbnVsbDsKLQotICAgIGlmIChv
cC51cGRhdGVNYXhMaW5lKSBmaW5kTWF4TGluZShjbSk7Ci0KLSAgICAvLyBJZiBpdCBsb29rcyBs
aWtlIGFuIHVwZGF0ZSBtaWdodCBiZSBuZWVkZWQsIGNhbGwgdXBkYXRlRGlzcGxheQotICAgIGlm
IChvcC52aWV3Q2hhbmdlZCB8fCBvcC5mb3JjZVVwZGF0ZSB8fCBvcC5zY3JvbGxUb3AgIT0gbnVs
bCB8fAotICAgICAgICBvcC5zY3JvbGxUb1BvcyAmJiAob3Auc2Nyb2xsVG9Qb3MuZnJvbS5saW5l
IDwgZGlzcGxheS52aWV3RnJvbSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Ny
b2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHwKLSAgICAgICAgZGlzcGxheS5t
YXhMaW5lQ2hhbmdlZCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgdmFyIHVw
ZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNtLCB7dG9wOiBvcC5zY3JvbGxUb3AsIGVuc3VyZTogb3Au
c2Nyb2xsVG9Qb3N9LCBvcC5mb3JjZVVwZGF0ZSk7Ci0gICAgICBpZiAoY20uZGlzcGxheS5zY3Jv
bGxlci5vZmZzZXRIZWlnaHQpIGNtLmRvYy5zY3JvbGxUb3AgPSBjbS5kaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcDsKLSAgICB9Ci0gICAgLy8gSWYgbm8gdXBkYXRlIHdhcyBydW4sIGJ1dCB0aGUg
c2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGF0LgotICAgIGlmICghdXBkYXRlZCAmJiBvcC5z
ZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oY20pOwotICAgIGlmICghdXBkYXRlZCAm
JiBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KSB1cGRhdGVTY3JvbGxiYXJzKGNtKTsK
LQotICAgIC8vIEFib3J0IG1vdXNlIHdoZWVsIGRlbHRhIG1lYXN1cmVtZW50LCB3aGVuIHNjcm9s
bGluZyBleHBsaWNpdGx5Ci0gICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggIT0gbnVsbCAmJiAo
b3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xsTGVmdCAhPSBudWxsIHx8IG9wLnNjcm9s
bFRvUG9zKSkKLSAgICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZ
ID0gbnVsbDsKLQotICAgIC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBh
Y3R1YWwgRE9NIHNjcm9sbGVyCi0gICAgaWYgKG9wLnNjcm9sbFRvcCAhPSBudWxsICYmIGRpc3Bs
YXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9sbFRvcCkgewotICAgICAgdmFyIHRvcCA9
IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlz
cGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNjcm9sbFRvcCkpOwotICAgICAgZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gZG9j
LnNjcm9sbFRvcCA9IHRvcDsKLSAgICB9Ci0gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCAm
JiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gb3Auc2Nyb2xsTGVmdCkgewotICAgICAg
dmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdp
ZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgb3Auc2Nyb2xsTGVmdCkpOwotICAg
ICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gZGlzcGxheS5zY3JvbGxiYXJILnNjcm9s
bExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IGxlZnQ7Ci0gICAgICBhbGlnbkhvcml6b250YWxseShj
bSk7Ci0gICAgfQotICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRp
b24gaW50byB2aWV3LCBkbyBzby4KLSAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHsKLSAgICAgIHZh
ciBjb29yZHMgPSBzY3JvbGxQb3NJbnRvVmlldyhjbSwgY2xpcFBvcyhjbS5kb2MsIG9wLnNjcm9s
bFRvUG9zLmZyb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQ
b3MoY20uZG9jLCBvcC5zY3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9zLm1hcmdpbik7Ci0g
ICAgICBpZiAob3Auc2Nyb2xsVG9Qb3MuaXNDdXJzb3IgJiYgY20uc3RhdGUuZm9jdXNlZCkgbWF5
YmVTY3JvbGxXaW5kb3coY20sIGNvb3Jkcyk7Ci0gICAgfQotCi0gICAgaWYgKG9wLnNlbGVjdGlv
bkNoYW5nZWQpIHJlc3RhcnRCbGluayhjbSk7Ci0KLSAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCAm
JiBvcC51cGRhdGVJbnB1dCkKLSAgICAgIHJlc2V0SW5wdXQoY20sIG9wLnR5cGluZyk7Ci0KLSAg
ICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBl
ZGl0aW5nIG9yCi0gICAgLy8gdW5kb2luZwotICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRl
bk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7Ci0gICAgaWYgKGhp
ZGRlbikgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW4ubGVuZ3RoOyArK2kpCi0gICAgICBpZiAo
IWhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHNpZ25hbChoaWRkZW5baV0sICJoaWRlIik7Ci0gICAg
aWYgKHVuaGlkZGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IHVuaGlkZGVuLmxlbmd0aDsgKytpKQot
ICAgICAgaWYgKHVuaGlkZGVuW2ldLmxpbmVzLmxlbmd0aCkgc2lnbmFsKHVuaGlkZGVuW2ldLCAi
dW5oaWRlIik7Ci0KLSAgICB2YXIgZGVsYXllZDsKLSAgICBpZiAoIS0tZGVsYXllZENhbGxiYWNr
RGVwdGgpIHsKLSAgICAgIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwotICAgICAgZGVsYXll
ZENhbGxiYWNrcyA9IG51bGw7Ci0gICAgfQotICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5k
IGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnMKLSAgICBpZiAob3AuY2hhbmdlT2JqcykKLSAgICAgIHNp
Z25hbChjbSwgImNoYW5nZXMiLCBjbSwgb3AuY2hhbmdlT2Jqcyk7Ci0gICAgaWYgKGRlbGF5ZWQp
IGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgZGVsYXllZFtpXSgpOwot
ICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKQotICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzLmxlbmd0aDsgaSsrKQotICAgICAgICBvcC5j
dXJzb3JBY3Rpdml0eUhhbmRsZXJzW2ldKGNtKTsKLSAgfQotCi0gIC8vIFJ1biB0aGUgZ2l2ZW4g
ZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uCi0gIGZ1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHsKLSAg
ICBpZiAoY20uY3VyT3ApIHJldHVybiBmKCk7Ci0gICAgc3RhcnRPcGVyYXRpb24oY20pOwotICAg
IHRyeSB7IHJldHVybiBmKCk7IH0KLSAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfQot
ICB9Ci0gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3
cmFwcGVkIGZ1bmN0aW9uLgotICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHsKLSAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoY20uY3VyT3ApIHJldHVybiBmLmFwcGx5KGNtLCBh
cmd1bWVudHMpOwotICAgICAgc3RhcnRPcGVyYXRpb24oY20pOwotICAgICAgdHJ5IHsgcmV0dXJu
IGYuYXBwbHkoY20sIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24o
Y20pOyB9Ci0gICAgfTsKLSAgfQotICAvLyBVc2VkIHRvIGFkZCBtZXRob2RzIHRvIGVkaXRvciBh
bmQgZG9jIGluc3RhbmNlcywgd3JhcHBpbmcgdGhlbSBpbgotICAvLyBvcGVyYXRpb25zLgotICBm
dW5jdGlvbiBtZXRob2RPcChmKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KHRoaXMuY3VyT3ApIHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICBzdGFy
dE9wZXJhdGlvbih0aGlzKTsKLSAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7IH0KLSAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH0KLSAgICB9Owot
ICB9Ci0gIGZ1bmN0aW9uIGRvY01ldGhvZE9wKGYpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7
Ci0gICAgICB2YXIgY20gPSB0aGlzLmNtOwotICAgICAgaWYgKCFjbSB8fCBjbS5jdXJPcCkgcmV0
dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTsK
LSAgICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KLSAgICAgIGZp
bmFsbHkgeyBlbmRPcGVyYXRpb24oY20pOyB9Ci0gICAgfTsKLSAgfQotCi0gIC8vIFZJRVcgVFJB
Q0tJTkcKLQotICAvLyBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgdmlz
aWJsZSAoY3VycmVudGx5IGRyYXduKQotICAvLyBwYXJ0IG9mIHRoZSBkb2N1bWVudC4gQSBMaW5l
VmlldyBtYXkgY29ycmVzcG9uZCB0byBtdWx0aXBsZQotICAvLyBsb2dpY2FsIGxpbmVzLCBpZiB0
aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNlZCByYW5nZXMuCi0gIGZ1bmN0aW9uIExpbmVW
aWV3KGRvYywgbGluZSwgbGluZU4pIHsKLSAgICAvLyBUaGUgc3RhcnRpbmcgbGluZQotICAgIHRo
aXMubGluZSA9IGxpbmU7Ci0gICAgLy8gQ29udGludWluZyBsaW5lcywgaWYgYW55Ci0gICAgdGhp
cy5yZXN0ID0gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKTsKLSAgICAvLyBOdW1iZXIgb2YgbG9n
aWNhbCBsaW5lcyBpbiB0aGlzIHZpc3VhbCBsaW5lCi0gICAgdGhpcy5zaXplID0gdGhpcy5yZXN0
ID8gbGluZU5vKGxzdCh0aGlzLnJlc3QpKSAtIGxpbmVOICsgMSA6IDE7Ci0gICAgdGhpcy5ub2Rl
ID0gdGhpcy50ZXh0ID0gbnVsbDsKLSAgICB0aGlzLmhpZGRlbiA9IGxpbmVJc0hpZGRlbihkb2Ms
IGxpbmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgTGluZVZpZXcgb2JqZWN0cyBm
b3IgdGhlIGdpdmVuIGxpbmVzLgotICBmdW5jdGlvbiBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwg
dG8pIHsKLSAgICB2YXIgYXJyYXkgPSBbXSwgbmV4dFBvczsKLSAgICBmb3IgKHZhciBwb3MgPSBm
cm9tOyBwb3MgPCB0bzsgcG9zID0gbmV4dFBvcykgewotICAgICAgdmFyIHZpZXcgPSBuZXcgTGlu
ZVZpZXcoY20uZG9jLCBnZXRMaW5lKGNtLmRvYywgcG9zKSwgcG9zKTsKLSAgICAgIG5leHRQb3Mg
PSBwb3MgKyB2aWV3LnNpemU7Ci0gICAgICBhcnJheS5wdXNoKHZpZXcpOwotICAgIH0KLSAgICBy
ZXR1cm4gYXJyYXk7Ci0gIH0KLQotICAvLyBVcGRhdGVzIHRoZSBkaXNwbGF5LnZpZXcgZGF0YSBz
dHJ1Y3R1cmUgZm9yIGEgZ2l2ZW4gY2hhbmdlIHRvIHRoZQotICAvLyBkb2N1bWVudC4gRnJvbSBh
bmQgdG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRpbmF0ZXMuIExlbmRpZmYgaXMKLSAgLy8gdGhl
IGFtb3VudCBvZiBsaW5lcyBhZGRlZCBvciBzdWJ0cmFjdGVkIGJ5IHRoZSBjaGFuZ2UuIFRoaXMg
aXMKLSAgLy8gdXNlZCBmb3IgY2hhbmdlcyB0aGF0IHNwYW4gbXVsdGlwbGUgbGluZXMsIG9yIGNo
YW5nZSB0aGUgd2F5Ci0gIC8vIGxpbmVzIGFyZSBkaXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiBy
ZWdMaW5lQ2hhbmdlIChiZWxvdykKLSAgLy8gcmVnaXN0ZXJzIHNpbmdsZS1saW5lIGNoYW5nZXMu
Ci0gIGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJvbSwgdG8sIGxlbmRpZmYpIHsKLSAgICBpZiAo
ZnJvbSA9PSBudWxsKSBmcm9tID0gY20uZG9jLmZpcnN0OwotICAgIGlmICh0byA9PSBudWxsKSB0
byA9IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplOwotICAgIGlmICghbGVuZGlmZikgbGVuZGlm
ZiA9IDA7Ci0KLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKGxlbmRpZmYg
JiYgdG8gPCBkaXNwbGF5LnZpZXdUbyAmJgotICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVt
YmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPiBmcm9tKSkKLSAgICAg
IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOwotCi0gICAgY20uY3VyT3Audmlld0No
YW5nZWQgPSB0cnVlOwotCi0gICAgaWYgKGZyb20gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gQ2hh
bmdlIGFmdGVyCi0gICAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZU5vKGNt
LmRvYywgZnJvbSkgPCBkaXNwbGF5LnZpZXdUbykKLSAgICAgICAgcmVzZXRWaWV3KGNtKTsKLSAg
ICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZQot
ICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRv
ICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7Ci0gICAgICAgIHJlc2V0VmlldyhjbSk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7Ci0g
ICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlm
IChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8g
RnVsbCBvdmVybGFwCi0gICAgICByZXNldFZpZXcoY20pOwotICAgIH0gZWxzZSBpZiAoZnJvbSA8
PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwCi0gICAgICB2YXIgY3V0ID0gdmll
d0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7Ci0gICAgICBpZiAoY3V0KSB7
Ci0gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpOwot
ICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOOwotICAgICAgICBkaXNwbGF5LnZp
ZXdUbyArPSBsZW5kaWZmOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzZXRWaWV3KGNtKTsK
LSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRv
bSBvdmVybGFwCi0gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJv
bSwgLTEpOwotICAgICAgaWYgKGN1dCkgewotICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5
LnZpZXcuc2xpY2UoMCwgY3V0LmluZGV4KTsKLSAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQu
bGluZU47Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNldFZpZXcoY20pOwotICAgICAgfQot
ICAgIH0gZWxzZSB7IC8vIEdhcCBpbiB0aGUgbWlkZGxlCi0gICAgICB2YXIgY3V0VG9wID0gdmll
d0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpOwotICAgICAgdmFyIGN1dEJvdCA9IHZp
ZXdDdXR0aW5nUG9pbnQoY20sIHRvLCB0byArIGxlbmRpZmYsIDEpOwotICAgICAgaWYgKGN1dFRv
cCAmJiBjdXRCb3QpIHsKLSAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNl
KDAsIGN1dFRvcC5pbmRleCkKLSAgICAgICAgICAuY29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBj
dXRUb3AubGluZU4sIGN1dEJvdC5saW5lTikpCi0gICAgICAgICAgLmNvbmNhdChkaXNwbGF5LnZp
ZXcuc2xpY2UoY3V0Qm90LmluZGV4KSk7Ci0gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRp
ZmY7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNldFZpZXcoY20pOwotICAgICAgfQotICAg
IH0KLQotICAgIHZhciBleHQgPSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4
dCkgewotICAgICAgaWYgKHRvIDwgZXh0LmxpbmVOKQotICAgICAgICBleHQubGluZU4gKz0gbGVu
ZGlmZjsKLSAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSkKLSAgICAg
ICAgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvLyBS
ZWdpc3RlciBhIGNoYW5nZSB0byBhIHNpbmdsZSBsaW5lLiBUeXBlIG11c3QgYmUgb25lIG9mICJ0
ZXh0IiwKLSAgLy8gImd1dHRlciIsICJjbGFzcyIsICJ3aWRnZXQiCi0gIGZ1bmN0aW9uIHJlZ0xp
bmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHsKLSAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRy
dWU7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVy
bmFsTWVhc3VyZWQ7Ci0gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwg
ZXh0LmxpbmVOICsgZXh0LnNpemUpCi0gICAgICBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBu
dWxsOwotCi0gICAgaWYgKGxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IGxpbmUgPj0gZGlzcGxh
eS52aWV3VG8pIHJldHVybjsKLSAgICB2YXIgbGluZVZpZXcgPSBkaXNwbGF5LnZpZXdbZmluZFZp
ZXdJbmRleChjbSwgbGluZSldOwotICAgIGlmIChsaW5lVmlldy5ub2RlID09IG51bGwpIHJldHVy
bjsKLSAgICB2YXIgYXJyID0gbGluZVZpZXcuY2hhbmdlcyB8fCAobGluZVZpZXcuY2hhbmdlcyA9
IFtdKTsKLSAgICBpZiAoaW5kZXhPZihhcnIsIHR5cGUpID09IC0xKSBhcnIucHVzaCh0eXBlKTsK
LSAgfQotCi0gIC8vIENsZWFyIHRoZSB2aWV3LgotICBmdW5jdGlvbiByZXNldFZpZXcoY20pIHsK
LSAgICBjbS5kaXNwbGF5LnZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3VG8gPSBjbS5kb2MuZmly
c3Q7Ci0gICAgY20uZGlzcGxheS52aWV3ID0gW107Ci0gICAgY20uZGlzcGxheS52aWV3T2Zmc2V0
ID0gMDsKLSAgfQotCi0gIC8vIEZpbmQgdGhlIHZpZXcgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRv
IGEgZ2l2ZW4gbGluZS4gUmV0dXJuIG51bGwKLSAgLy8gd2hlbiB0aGUgbGluZSBpc24ndCB2aXNp
YmxlLgotICBmdW5jdGlvbiBmaW5kVmlld0luZGV4KGNtLCBuKSB7Ci0gICAgaWYgKG4gPj0gY20u
ZGlzcGxheS52aWV3VG8pIHJldHVybiBudWxsOwotICAgIG4gLT0gY20uZGlzcGxheS52aWV3RnJv
bTsKLSAgICBpZiAobiA8IDApIHJldHVybiBudWxsOwotICAgIHZhciB2aWV3ID0gY20uZGlzcGxh
eS52aWV3OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgewotICAg
ICAgbiAtPSB2aWV3W2ldLnNpemU7Ci0gICAgICBpZiAobiA8IDApIHJldHVybiBpOwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIHZpZXdDdXR0aW5nUG9pbnQoY20sIG9sZE4sIG5ld04sIGRpcikg
ewotICAgIHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBkaWZmLCB2aWV3ID0g
Y20uZGlzcGxheS52aWV3OwotICAgIGlmICghc2F3Q29sbGFwc2VkU3BhbnMgfHwgbmV3TiA9PSBj
bS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZSkKLSAgICAgIHJldHVybiB7aW5kZXg6IGluZGV4LCBs
aW5lTjogbmV3Tn07Ci0gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBjbS5kaXNwbGF5LnZpZXdGcm9t
OyBpIDwgaW5kZXg7IGkrKykKLSAgICAgIG4gKz0gdmlld1tpXS5zaXplOwotICAgIGlmIChuICE9
IG9sZE4pIHsKLSAgICAgIGlmIChkaXIgPiAwKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSB2aWV3
Lmxlbmd0aCAtIDEpIHJldHVybiBudWxsOwotICAgICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4
XS5zaXplKSAtIG9sZE47Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBkaWZmID0gbiAtIG9sZE47Ci0gICAgICB9Ci0gICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0g
ZGlmZjsKLSAgICB9Ci0gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5l
d04pIHsKLSAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEp
KSByZXR1cm4gbnVsbDsKLSAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAw
ID8gMSA6IDApXS5zaXplOwotICAgICAgaW5kZXggKz0gZGlyOwotICAgIH0KLSAgICByZXR1cm4g
e2luZGV4OiBpbmRleCwgbGluZU46IG5ld059OwotICB9Ci0KLSAgLy8gRm9yY2UgdGhlIHZpZXcg
dG8gY292ZXIgYSBnaXZlbiByYW5nZSwgYWRkaW5nIGVtcHR5IHZpZXcgZWxlbWVudAotICAvLyBv
ciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBhcyBuZWVkZWQuCi0gIGZ1bmN0aW9uIGFkanVz
dFZpZXcoY20sIGZyb20sIHRvKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3
ID0gZGlzcGxheS52aWV3OwotICAgIGlmICh2aWV3Lmxlbmd0aCA9PSAwIHx8IGZyb20gPj0gZGlz
cGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52aWV3RnJvbSkgewotICAgICAgZGlzcGxheS52
aWV3ID0gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKTsKLSAgICAgIGRpc3BsYXkudmlld0Zy
b20gPSBmcm9tOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA+IGZy
b20pCi0gICAgICAgIGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCBkaXNw
bGF5LnZpZXdGcm9tKS5jb25jYXQoZGlzcGxheS52aWV3KTsKLSAgICAgIGVsc2UgaWYgKGRpc3Bs
YXkudmlld0Zyb20gPCBmcm9tKQotICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcu
c2xpY2UoZmluZFZpZXdJbmRleChjbSwgZnJvbSkpOwotICAgICAgZGlzcGxheS52aWV3RnJvbSA9
IGZyb207Ci0gICAgICBpZiAoZGlzcGxheS52aWV3VG8gPCB0bykKLSAgICAgICAgZGlzcGxheS52
aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3
VG8sIHRvKSk7Ci0gICAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvKQotICAgICAgICBk
aXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgZmluZFZpZXdJbmRleChjbSwgdG8p
KTsKLSAgICB9Ci0gICAgZGlzcGxheS52aWV3VG8gPSB0bzsKLSAgfQotCi0gIC8vIENvdW50IHRo
ZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlz
Ci0gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuCi0gIGZ1bmN0aW9uIGNvdW50RGly
dHlWaWV3KGNtKSB7Ci0gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBs
aW5lVmlldyA9IHZpZXdbaV07Ci0gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVW
aWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpICsrZGlydHk7Ci0gICAgfQotICAgIHJldHVy
biBkaXJ0eTsKLSAgfQotCi0gIC8vIElOUFVUIEhBTkRMSU5HCi0KLSAgLy8gUG9sbCBmb3IgaW5w
dXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcuIFRoaXMKLSAgLy8g
cnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KLSAgZnVuY3Rpb24gc2xvd1Bv
bGwoY20pIHsKLSAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCkgcmV0dXJuOwotICAgIGNt
LmRpc3BsYXkucG9sbC5zZXQoY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewot
ICAgICAgcmVhZElucHV0KGNtKTsKLSAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzbG93UG9s
bChjbSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBXaGVuIGFuIGV2ZW50IGhhcyBqdXN0IGNvbWUg
aW4gdGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZQotICAvLyBzb21ldGhpbmcgaW4gdGhl
IGlucHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRoYXQKLSAgLy8gdGhl
IGNoYW5nZSBhcHBlYXJzIG9uIHRoZSBzY3JlZW4gcXVpY2tseS4KLSAgZnVuY3Rpb24gZmFzdFBv
bGwoY20pIHsKLSAgICB2YXIgbWlzc2VkID0gZmFsc2U7Ci0gICAgY20uZGlzcGxheS5wb2xsaW5n
RmFzdCA9IHRydWU7Ci0gICAgZnVuY3Rpb24gcCgpIHsKLSAgICAgIHZhciBjaGFuZ2VkID0gcmVh
ZElucHV0KGNtKTsKLSAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0gdHJ1
ZTsgY20uZGlzcGxheS5wb2xsLnNldCg2MCwgcCk7fQotICAgICAgZWxzZSB7Y20uZGlzcGxheS5w
b2xsaW5nRmFzdCA9IGZhbHNlOyBzbG93UG9sbChjbSk7fQotICAgIH0KLSAgICBjbS5kaXNwbGF5
LnBvbGwuc2V0KDIwLCBwKTsKLSAgfQotCi0gIC8vIFJlYWQgaW5wdXQgZnJvbSB0aGUgdGV4dGFy
ZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLgotICAvLyBXaGVuIHNvbWV0aGlu
ZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEsIGFuZAotICAvLyBz
ZWxlY3RlZCAodW5sZXNzIGl0IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBwbGFjZWhvbGRlciBp
cwotICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUgY3Vyc29yIHNpdHMg
YWZ0ZXIgcHJldmlvdXNseQotICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0eSksIHdoaWNoIGlz
IHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3QKLSAgLy8gbm90IHJlc2V0IHRoZSB0ZXh0YXJl
YSB3aGVuIHR5cGluZywgYmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLgotICBmdW5jdGlvbiByZWFk
SW5wdXQoY20pIHsKLSAgICB2YXIgaW5wdXQgPSBjbS5kaXNwbGF5LmlucHV0LCBwcmV2SW5wdXQg
PSBjbS5kaXNwbGF5LnByZXZJbnB1dCwgZG9jID0gY20uZG9jOwotICAgIC8vIFNpbmNlIHRoaXMg
aXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzCi0gICAgLy8g
cG9zc2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVuZWQuIGhhc1NlbGVj
dGlvbgotICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0
IGluIHRoZSB0ZXh0YXJlYSwKLSAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVl
IHdvdWxkIGJlIGV4cGVuc2l2ZS4KLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQgfHwgKGhhc1Nl
bGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCkgfHwgaXNSZWFkT25seShjbSkgfHwgY20ub3B0
aW9ucy5kaXNhYmxlSW5wdXQpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gU2VlIHBhc3Rl
IGhhbmRsZXIgZm9yIG1vcmUgb24gdGhlIGZha2VkTGFzdENoYXIga2x1ZGdlCi0gICAgaWYgKGNt
LnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20uc3RhdGUuZmFrZWRMYXN0Q2hhcikgewotICAgICAg
aW5wdXQudmFsdWUgPSBpbnB1dC52YWx1ZS5zdWJzdHJpbmcoMCwgaW5wdXQudmFsdWUubGVuZ3Ro
IC0gMSk7Ci0gICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gZmFsc2U7Ci0gICAgfQotICAg
IHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7Ci0gICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBiYWls
LgotICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCAmJiAhY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkg
cmV0dXJuIGZhbHNlOwotICAgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNpY2FsIHNlbGVjdGlvbiBy
ZXNldHRpbmcgaW4gSUU5LzEwCi0gICAgaWYgKGllICYmICFpZV91cHRvOCAmJiBjbS5kaXNwbGF5
LmlucHV0SGFzU2VsZWN0aW9uID09PSB0ZXh0KSB7Ci0gICAgICByZXNldElucHV0KGNtKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgd2l0aE9wID0gIWNtLmN1ck9wOwot
ICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9uKGNtKTsKLSAgICBjbS5kaXNwbGF5LnNoaWZ0
ID0gZmFsc2U7Ci0KLSAgICBpZiAodGV4dC5jaGFyQ29kZUF0KDApID09IDB4MjAwYiAmJiBkb2Mu
c2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgJiYgIXByZXZJbnB1dCkKLSAgICAg
IHByZXZJbnB1dCA9ICJcdTIwMGIiOwotICAgIC8vIEZpbmQgdGhlIHBhcnQgb2YgdGhlIGlucHV0
IHRoYXQgaXMgYWN0dWFsbHkgbmV3Ci0gICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJl
dklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwotICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2
SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpICsrc2FtZTsK
LSAgICB2YXIgaW5zZXJ0ZWQgPSB0ZXh0LnNsaWNlKHNhbWUpLCB0ZXh0TGluZXMgPSBzcGxpdExp
bmVzKGluc2VydGVkKTsKLQotICAgIC8vIFdoZW4gcGFzaW5nIE4gbGluZXMgaW50byBOIHNlbGVj
dGlvbnMsIGluc2VydCBvbmUgbGluZSBwZXIgc2VsZWN0aW9uCi0gICAgdmFyIG11bHRpUGFzdGUg
PSBjbS5zdGF0ZS5wYXN0ZUluY29taW5nICYmIHRleHRMaW5lcy5sZW5ndGggPiAxICYmIGRvYy5z
ZWwucmFuZ2VzLmxlbmd0aCA9PSB0ZXh0TGluZXMubGVuZ3RoOwotCi0gICAgLy8gTm9ybWFsIGJl
aGF2aW9yIGlzIHRvIGluc2VydCB0aGUgbmV3IHRleHQgaW50byBldmVyeSBzZWxlY3Rpb24KLSAg
ICBmb3IgKHZhciBpID0gZG9jLnNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsK
LSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwotICAgICAgdmFyIGZyb20gPSBy
YW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTsKLSAgICAgIC8vIEhhbmRsZSBkZWxldGlvbgot
ICAgICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQotICAgICAgICBmcm9tID0gUG9zKGZy
b20ubGluZSwgZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSkpOwotICAgICAgLy8g
SGFuZGxlIG92ZXJ3cml0ZQotICAgICAgZWxzZSBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmIHJh
bmdlLmVtcHR5KCkgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcpCi0gICAgICAgIHRvID0gUG9z
KHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8u
Y2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsKLSAgICAgIHZhciB1cGRhdGVJbnB1dCA9IGNt
LmN1ck9wLnVwZGF0ZUlucHV0OwotICAgICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20s
IHRvOiB0bywgdGV4dDogbXVsdGlQYXN0ZSA/IFt0ZXh0TGluZXNbaV1dIDogdGV4dExpbmVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogY20uc3RhdGUucGFzdGVJbmNvbWluZyA/
ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/ICJjdXQiIDogIitpbnB1dCJ9OwotICAg
ICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZUV2ZW50KTsKLSAgICAgIHNpZ25hbExhdGVyKGNt
LCAiaW5wdXRSZWFkIiwgY20sIGNoYW5nZUV2ZW50KTsKLSAgICAgIC8vIFdoZW4gYW4gJ2VsZWN0
cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVu
dAotICAgICAgaWYgKGluc2VydGVkICYmICFjbS5zdGF0ZS5wYXN0ZUluY29taW5nICYmIGNtLm9w
dGlvbnMuZWxlY3RyaWNDaGFycyAmJgotICAgICAgICAgIGNtLm9wdGlvbnMuc21hcnRJbmRlbnQg
JiYgcmFuZ2UuaGVhZC5jaCA8IDEwMCAmJgotICAgICAgICAgICghaSB8fCBkb2Muc2VsLnJhbmdl
c1tpIC0gMV0uaGVhZC5saW5lICE9IHJhbmdlLmhlYWQubGluZSkpIHsKLSAgICAgICAgdmFyIG1v
ZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2UuaGVhZCk7Ci0gICAgICAgIGlmIChtb2RlLmVsZWN0cmlj
Q2hhcnMpIHsKLSAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1vZGUuZWxlY3RyaWNDaGFy
cy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIGlmIChpbnNlcnRlZC5pbmRleE9mKG1vZGUuZWxl
Y3RyaWNDaGFycy5jaGFyQXQoaikpID4gLTEpIHsKLSAgICAgICAgICAgICAgaW5kZW50TGluZShj
bSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobW9kZS5lbGVjdHJpY0lucHV0KSB7Ci0gICAg
ICAgICAgdmFyIGVuZCA9IGNoYW5nZUVuZChjaGFuZ2VFdmVudCk7Ci0gICAgICAgICAgaWYgKG1v
ZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoZG9jLCBlbmQubGluZSkudGV4dC5zbGljZSgw
LCBlbmQuY2gpKSkKLSAgICAgICAgICAgIGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwg
InNtYXJ0Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZW5zdXJlQ3Vyc29yVmlz
aWJsZShjbSk7Ci0gICAgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsKLSAgICBj
bS5jdXJPcC50eXBpbmcgPSB0cnVlOwotCi0gICAgLy8gRG9uJ3QgbGVhdmUgbG9uZyB0ZXh0IGlu
IHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMgZnVydGhlciBwb2xsaW5nIHNsb3cKLSAgICBp
ZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZigiXG4iKSA+IC0xKSBpbnB1dC52
YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7Ci0gICAgZWxzZSBjbS5kaXNwbGF5LnBy
ZXZJbnB1dCA9IHRleHQ7Ci0gICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKLSAgICBj
bS5zdGF0ZS5wYXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNwb25k
IHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LAotICAvLyB3aGVuIG5vdCB0eXBpbmcg
YW5kIG5vdGhpbmcgaXMgc2VsZWN0ZWQpCi0gIGZ1bmN0aW9uIHJlc2V0SW5wdXQoY20sIHR5cGlu
ZykgewotICAgIHZhciBtaW5pbWFsLCBzZWxlY3RlZCwgZG9jID0gY20uZG9jOwotICAgIGlmIChj
bS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7Ci0gICAgICBjbS5kaXNwbGF5LnByZXZJbnB1dCA9ICIi
OwotICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5wcmltYXJ5KCk7Ci0gICAgICBtaW5pbWFsID0g
aGFzQ29weUV2ZW50ICYmCi0gICAgICAgIChyYW5nZS50bygpLmxpbmUgLSByYW5nZS5mcm9tKCku
bGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRTZWxlY3Rpb24oKSkubGVuZ3RoID4gMTAw
MCk7Ci0gICAgICB2YXIgY29udGVudCA9IG1pbmltYWwgPyAiLSIgOiBzZWxlY3RlZCB8fCBjbS5n
ZXRTZWxlY3Rpb24oKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSBjb250ZW50Owot
ICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNlbGVjdElucHV0KGNtLmRpc3BsYXkuaW5wdXQp
OwotICAgICAgaWYgKGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlv
biA9IGNvbnRlbnQ7Ci0gICAgfSBlbHNlIGlmICghdHlwaW5nKSB7Ci0gICAgICBjbS5kaXNwbGF5
LnByZXZJbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQudmFsdWUgPSAiIjsKLSAgICAgIGlmIChpZSAm
JiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwotICAgIH0K
LSAgICBjbS5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBtaW5pbWFsOwotICB9Ci0KLSAg
ZnVuY3Rpb24gZm9jdXNJbnB1dChjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ICE9
ICJub2N1cnNvciIgJiYgKCFtb2JpbGUgfHwgYWN0aXZlRWx0KCkgIT0gY20uZGlzcGxheS5pbnB1
dCkpCi0gICAgICBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBl
bnN1cmVGb2N1cyhjbSkgewotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBmb2N1c0lucHV0
KGNtKTsgb25Gb2N1cyhjbSk7IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGlzUmVhZE9ubHkoY20pIHsK
LSAgICByZXR1cm4gY20ub3B0aW9ucy5yZWFkT25seSB8fCBjbS5kb2MuY2FudEVkaXQ7Ci0gIH0K
LQotICAvLyBFVkVOVCBIQU5ETEVSUwotCi0gIC8vIEF0dGFjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50
IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBlZGl0b3IKLSAgZnVuY3Rpb24gcmVnaXN0
ZXJFdmVudEhhbmRsZXJzKGNtKSB7Ci0gICAgdmFyIGQgPSBjbS5kaXNwbGF5OwotICAgIG9uKGQu
c2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24oY20sIG9uTW91c2VEb3duKSk7Ci0gICAg
Ly8gT2xkZXIgSUUncyB3aWxsIG5vdCBmaXJlIGEgc2Vjb25kIG1vdXNlZG93biBmb3IgYSBkb3Vi
bGUgY2xpY2sKLSAgICBpZiAoaWVfdXB0bzEwKQotICAgICAgb24oZC5zY3JvbGxlciwgImRibGNs
aWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkpIHJldHVybjsKLSAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwg
ZSk7Ci0gICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5X
aWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKLSAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGNtLCBwb3MpOwotICAgICAgICBleHRl
bmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTsKLSAgICAgIH0pKTsK
LSAgICBlbHNlCi0gICAgICBvbihkLnNjcm9sbGVyLCAiZGJsY2xpY2siLCBmdW5jdGlvbihlKSB7
IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlX3ByZXZlbnREZWZhdWx0KGUpOyB9KTsKLSAgICAv
LyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFuZGxlIG91ciBv
d24pCi0gICAgb24oZC5saW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGZ1bmN0aW9uKGUpIHsKLSAg
ICAgIGlmICghZXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICB9
KTsKLSAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5n
IHRoZSBtZW51LCBhdAotICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBh
bnltb3JlLiBDb250ZXh0IG1lbnUgaXMKLSAgICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZv
ciB0aGVzZSBicm93c2Vycy4KLSAgICBpZiAoIWNhcHR1cmVSaWdodENsaWNrKSBvbihkLnNjcm9s
bGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0TWVudShjbSwgZSk7fSk7
Ci0KLSAgICAvLyBTeW5jIHNjcm9sbGluZyBiZXR3ZWVuIGZha2Ugc2Nyb2xsYmFycyBhbmQgcmVh
bCBzY3JvbGxhYmxlCi0gICAgLy8gYXJlYSwgZW5zdXJlIHZpZXdwb3J0IGlzIHVwZGF0ZWQgd2hl
biBzY3JvbGxpbmcuCi0gICAgb24oZC5zY3JvbGxlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgewot
ICAgICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7Ci0gICAgICAgIHNldFNjcm9sbFRv
cChjbSwgZC5zY3JvbGxlci5zY3JvbGxUb3ApOwotICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBk
LnNjcm9sbGVyLnNjcm9sbExlZnQsIHRydWUpOwotICAgICAgICBzaWduYWwoY20sICJzY3JvbGwi
LCBjbSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgb24oZC5zY3JvbGxiYXJWLCAic2Nyb2xsIiwg
ZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9s
bFRvcChjbSwgZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCk7Ci0gICAgfSk7Ci0gICAgb24oZC5zY3Jv
bGxiYXJILCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGll
bnRIZWlnaHQpIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKLSAg
ICB9KTsKLQotICAgIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFu
ZCB1cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuCi0gICAgb24oZC5zY3JvbGxlciwgIm1vdXNl
d2hlZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKLSAgICBvbihkLnNj
cm9sbGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBl
KTt9KTsKLQotICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2ls
bGluZyBmb2N1cwotICAgIGZ1bmN0aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2Vk
KSBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAwKTsgfQotICAgIG9uKGQuc2Nyb2xs
YmFySCwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwotICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNl
ZG93biIsIHJlRm9jdXMpOwotICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xs
aW5nCi0gICAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5z
Y3JvbGxUb3AgPSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwotCi0gICAgb24oZC5pbnB1
dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBvbktleVVwKSk7Ci0gICAgb24oZC5pbnB1dCwgImlu
cHV0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3Bs
YXkuaW5wdXRIYXNTZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxs
OwotICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOwotICAgIG9uKGQuaW5wdXQsICJrZXlkb3du
Iiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTsKLSAgICBvbihkLmlucHV0LCAia2V5cHJlc3Mi
LCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKLSAgICBvbihkLmlucHV0LCAiZm9jdXMiLCBi
aW5kKG9uRm9jdXMsIGNtKSk7Ci0gICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwg
Y20pKTsKLQotICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKLSAgICAgIGlmICghc2lnbmFsRE9NRXZl
bnQoY20sIGUpKSBlX3N0b3AoZSk7Ci0gICAgfQotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9w
KSB7Ci0gICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZSl7b25EcmFn
U3RhcnQoY20sIGUpO30pOwotICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdlbnRlciIsIGRyYWdf
KTsKLSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQu
c2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGNtLCBvbkRyb3ApKTsKLSAgICB9Ci0gICAgb24o
ZC5zY3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGV2ZW50SW5XaWRn
ZXQoZCwgZSkpIHJldHVybjsKLSAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwot
ICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgICBmYXN0UG9sbChjbSk7Ci0gICAgfSk7Ci0gICAg
b24oZC5pbnB1dCwgInBhc3RlIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBXb3JrYXJvdW5kIGZv
ciB3ZWJraXQgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDIw
NgotICAgICAgLy8gQWRkIGEgY2hhciB0byB0aGUgZW5kIG9mIHRleHRhcmVhIGJlZm9yZSBwYXN0
ZSBvY2N1ciBzbyB0aGF0Ci0gICAgICAvLyBzZWxlY3Rpb24gZG9lc24ndCBzcGFuIHRvIHRoZSBl
bmQgb2YgdGV4dGFyZWEuCi0gICAgICBpZiAod2Via2l0ICYmICFjbS5zdGF0ZS5mYWtlZExhc3RD
aGFyICYmICEobmV3IERhdGUgLSBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8IDIwMCkpIHsKLSAg
ICAgICAgdmFyIHN0YXJ0ID0gZC5pbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kID0gZC5pbnB1dC5z
ZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGQuaW5wdXQudmFsdWUgKz0gIiQiOwotICAgICAgICBkLmlu
cHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0aW9uRW5k
ID0gZW5kOwotICAgICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1ZTsKLSAgICAgIH0K
LSAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAgZmFzdFBvbGwoY20p
OwotICAgIH0pOwotCi0gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkgewotICAgICAgaWYg
KGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKLSAgICAgICAgaWYgKGQuaW5hY2N1cmF0ZVNlbGVj
dGlvbikgewotICAgICAgICAgIGQucHJldklucHV0ID0gIiI7Ci0gICAgICAgICAgZC5pbmFjY3Vy
YXRlU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgZC5pbnB1dC52YWx1ZSA9IGNtLmdldFNl
bGVjdGlvbigpOwotICAgICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOwotICAgICAgICB9Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICB2YXIgdGV4dCA9ICIiLCByYW5nZXMgPSBbXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lOwotICAg
ICAgICAgIHZhciBsaW5lUmFuZ2UgPSB7YW5jaG9yOiBQb3MobGluZSwgMCksIGhlYWQ6IFBvcyhs
aW5lICsgMSwgMCl9OwotICAgICAgICAgIHJhbmdlcy5wdXNoKGxpbmVSYW5nZSk7Ci0gICAgICAg
ICAgdGV4dCArPSBjbS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5lUmFuZ2UuaGVhZCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgewotICAgICAgICAgIGNt
LnNldFNlbGVjdGlvbnMocmFuZ2VzLCBudWxsLCBzZWxfZG9udFNjcm9sbCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAgICAgICAgICBkLmlucHV0LnZh
bHVlID0gdGV4dDsKLSAgICAgICAgICBzZWxlY3RJbnB1dChkLmlucHV0KTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgY20uc3RhdGUuY3V0SW5jb21pbmcg
PSB0cnVlOwotICAgIH0KLSAgICBvbihkLmlucHV0LCAiY3V0IiwgcHJlcGFyZUNvcHlDdXQpOwot
ICAgIG9uKGQuaW5wdXQsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwotCi0gICAgLy8gTmVlZGVk
IHRvIGhhbmRsZSBUYWIga2V5IGluIEtIVE1MCi0gICAgaWYgKGtodG1sKSBvbihkLnNpemVyLCAi
bW91c2V1cCIsIGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGFjdGl2ZUVsdCgpID09IGQuaW5wdXQp
IGQuaW5wdXQuYmx1cigpOwotICAgICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgfSk7Ci0gIH0KLQot
ICAvLyBDYWxsZWQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXMKLSAgZnVuY3Rpb24gb25SZXNpemUo
Y20pIHsKLSAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNp
emUgY2FjaGVzLgotICAgIHZhciBkID0gY20uZGlzcGxheTsKLSAgICBkLmNhY2hlZENoYXJXaWR0
aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwotICAgIGNt
LnNldFNpemUoKTsKLSAgfQotCi0gIC8vIE1PVVNFIEVWRU5UUwotCi0gIC8vIFJldHVybiB0cnVl
IHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2ZW50IGhhcHBlbmVkIGluIGEgd2lkZ2V0Ci0gIGZ1bmN0
aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgewotICAgIGZvciAodmFyIG4gPSBlX3Rhcmdl
dChlKTsgbiAhPSBkaXNwbGF5LndyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKLSAgICAgIGlm
ICghbiB8fCBuLmlnbm9yZUV2ZW50cyB8fCBuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAm
JiBuICE9IGRpc3BsYXkubW92ZXIpIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8vIEdp
dmVuIGEgbW91c2UgZXZlbnQsIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24uIElmIGxp
YmVyYWwKLSAgLy8gaXMgZmFsc2UsIGl0IGNoZWNrcyB3aGV0aGVyIGEgZ3V0dGVyIG9yIHNjcm9s
bGJhciB3YXMgY2xpY2tlZCwKLSAgLy8gYW5kIHJldHVybnMgbnVsbCBpZiBpdCB3YXMuIGZvclJl
Y3QgaXMgdXNlZCBieSByZWN0YW5ndWxhcgotICAvLyBzZWxlY3Rpb25zLCBhbmQgdHJpZXMgdG8g
ZXN0aW1hdGUgYSBjaGFyYWN0ZXIgcG9zaXRpb24gZXZlbiBmb3IKLSAgLy8gY29vcmRpbmF0ZXMg
YmV5b25kIHRoZSByaWdodCBvZiB0aGUgdGV4dC4KLSAgZnVuY3Rpb24gcG9zRnJvbU1vdXNlKGNt
LCBlLCBsaWJlcmFsLCBmb3JSZWN0KSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5Owot
ICAgIGlmICghbGliZXJhbCkgewotICAgICAgdmFyIHRhcmdldCA9IGVfdGFyZ2V0KGUpOwotICAg
ICAgaWYgKHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckggfHwgdGFyZ2V0ID09IGRpc3BsYXku
c2Nyb2xsYmFyViB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckZpbGxl
ciB8fCB0YXJnZXQgPT0gZGlzcGxheS5ndXR0ZXJGaWxsZXIpIHJldHVybiBudWxsOwotICAgIH0K
LSAgICB2YXIgeCwgeSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNl
IGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCi0gICAgdHJ5IHsgeCA9IGUuY2xpZW50WCAtIHNw
YWNlLmxlZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KLSAgICBjYXRjaCAoZSkgeyBy
ZXR1cm4gbnVsbDsgfQotICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGlu
ZTsKLSAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA9PSAxICYmIChsaW5lID0gZ2V0TGlu
ZShjbS5kb2MsIGNvb3Jkcy5saW5lKS50ZXh0KS5sZW5ndGggPT0gY29vcmRzLmNoKSB7Ci0gICAg
ICB2YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25z
LnRhYlNpemUpIC0gbGluZS5sZW5ndGg7Ci0gICAgICBjb29yZHMgPSBQb3MoY29vcmRzLmxpbmUs
IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHggLSBwYWRkaW5nSChjbS5kaXNwbGF5KS5sZWZ0KSAv
IGNoYXJXaWR0aChjbS5kaXNwbGF5KSkgLSBjb2xEaWZmKSk7Ci0gICAgfQotICAgIHJldHVybiBj
b29yZHM7Ci0gIH0KLQotICAvLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBk
b3VibGUgY2xpY2ssIHRyaXBsZSBjbGljaywKLSAgLy8gc3RhcnQgb2Ygc2VsZWN0aW9uIGRyYWcs
IHN0YXJ0IG9mIHRleHQgZHJhZywgbmV3IGN1cnNvcgotICAvLyAoY3RybC1jbGljayksIHJlY3Rh
bmdsZSBkcmFnIChhbHQtZHJhZyksIG9yIHh3aW4KLSAgLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBP
ciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKLSAgLy8gbm90IGlu
dGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC4KLSAgZnVuY3Rpb24g
b25Nb3VzZURvd24oZSkgewotICAgIGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkgcmV0dXJu
OwotICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGRpc3BsYXku
c2hpZnQgPSBlLnNoaWZ0S2V5OwotCi0gICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkp
IHsKLSAgICAgIGlmICghd2Via2l0KSB7Ci0gICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJh
Z2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvCi0gICAgICAgIC8vIG5vcm1hbCBkcmFn
Z2luZyB0aGluZ3MuCi0gICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7
Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJs
ZSA9IHRydWU7fSwgMTAwKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KGNsaWNrSW5HdXR0ZXIoY20sIGUpKSByZXR1cm47Ci0gICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1v
dXNlKGNtLCBlKTsKLSAgICB3aW5kb3cuZm9jdXMoKTsKLQotICAgIHN3aXRjaCAoZV9idXR0b24o
ZSkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICBpZiAoc3RhcnQpCi0gICAgICAgIGxlZnRCdXR0b25E
b3duKGNtLCBlLCBzdGFydCk7Ci0gICAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5
LnNjcm9sbGVyKQotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSAyOgotICAgICAgaWYgKHdlYmtpdCkgY20uc3RhdGUubGFzdE1pZGRsZURvd24gPSAr
bmV3IERhdGU7Ci0gICAgICBpZiAoc3RhcnQpIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0
KTsKLSAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKLSAgICAgIGVf
cHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICBpZiAo
Y2FwdHVyZVJpZ2h0Q2xpY2spIG9uQ29udGV4dE1lbnUoY20sIGUpOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICB9Ci0KLSAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOwotICBmdW5jdGlv
biBsZWZ0QnV0dG9uRG93bihjbSwgZSwgc3RhcnQpIHsKLSAgICBzZXRUaW1lb3V0KGJpbmQoZW5z
dXJlRm9jdXMsIGNtKSwgMCk7Ci0KLSAgICB2YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlOwotICAg
IGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAg
JiYgY21wKGxhc3REb3VibGVDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7Ci0gICAgICB0eXBlID0g
InRyaXBsZSI7Ci0gICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBu
b3cgLSA0MDAgJiYgY21wKGxhc3RDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7Ci0gICAgICB0eXBl
ID0gImRvdWJsZSI7Ci0gICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0
YXJ0fTsKLSAgICB9IGVsc2UgewotICAgICAgdHlwZSA9ICJzaW5nbGUiOwotICAgICAgbGFzdENs
aWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07Ci0gICAgfQotCi0gICAgdmFyIHNlbCA9IGNt
LmRvYy5zZWwsIG1vZGlmaWVyID0gbWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5OwotICAgIGlm
IChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFpc1JlYWRPbmx5KGNtKSAm
JgotICAgICAgICB0eXBlID09ICJzaW5nbGUiICYmIHNlbC5jb250YWlucyhzdGFydCkgPiAtMSAm
JiBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSkKLSAgICAgIGxlZnRCdXR0b25TdGFydERyYWcoY20s
IGUsIHN0YXJ0LCBtb2RpZmllcik7Ci0gICAgZWxzZQotICAgICAgbGVmdEJ1dHRvblNlbGVjdChj
bSwgZSwgc3RhcnQsIHR5cGUsIG1vZGlmaWVyKTsKLSAgfQotCi0gIC8vIFN0YXJ0IGEgdGV4dCBk
cmFnLiBXaGVuIGl0IGVuZHMsIHNlZSBpZiBhbnkgZHJhZ2dpbmcgYWN0dWFsbHkKLSAgLy8gaGFw
cGVuLCBhbmQgdHJlYXQgYXMgYSBjbGljayBpZiBpdCBkaWRuJ3QuCi0gIGZ1bmN0aW9uIGxlZnRC
dXR0b25TdGFydERyYWcoY20sIGUsIHN0YXJ0LCBtb2RpZmllcikgewotICAgIHZhciBkaXNwbGF5
ID0gY20uZGlzcGxheTsKLSAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24o
ZTIpIHsKLSAgICAgIGlmICh3ZWJraXQpIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFs
c2U7Ci0gICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBmYWxzZTsKLSAgICAgIG9mZihkb2N1
bWVudCwgIm1vdXNldXAiLCBkcmFnRW5kKTsKLSAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCAi
ZHJvcCIsIGRyYWdFbmQpOwotICAgICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIGUyLmNsaWVu
dFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xpZW50WSkgPCAxMCkgewotICAgICAgICBl
X3ByZXZlbnREZWZhdWx0KGUyKTsKLSAgICAgICAgaWYgKCFtb2RpZmllcikKLSAgICAgICAgICBl
eHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgIGZvY3VzSW5wdXQoY20pOwot
ICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3VzIHByb2JsZW0gaW4gSUU5
ICgjMjEyNykKLSAgICAgICAgaWYgKGllX3VwdG8xMCAmJiAhaWVfdXB0bzgpCi0gICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVudC5ib2R5LmZvY3VzKCk7IGZvY3VzSW5wdXQo
Y20pO30sIDIwKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxl
ciBoYW5kbGUgdGhpcy4KLSAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJs
ZSA9IHRydWU7Ci0gICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0VuZDsKLSAgICAvLyBJ
RSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQotICAgIGlmIChkaXNwbGF5LnNjcm9sbGVyLmRyYWdE
cm9wKSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7Ci0gICAgb24oZG9jdW1lbnQsICJtb3Vz
ZXVwIiwgZHJhZ0VuZCk7Ci0gICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5k
KTsKLSAgfQotCi0gIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQgdG8gdGV4dCBkcmFn
Z2luZy4KLSAgZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZSwgc3RhcnQsIHR5cGUsIGFk
ZE5ldykgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwotICAg
IGVfcHJldmVudERlZmF1bHQoZSk7Ci0KLSAgICB2YXIgb3VyUmFuZ2UsIG91ckluZGV4LCBzdGFy
dFNlbCA9IGRvYy5zZWw7Ci0gICAgaWYgKGFkZE5ldyAmJiAhZS5zaGlmdEtleSkgewotICAgICAg
b3VySW5kZXggPSBkb2Muc2VsLmNvbnRhaW5zKHN0YXJ0KTsKLSAgICAgIGlmIChvdXJJbmRleCA+
IC0xKQotICAgICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucmFuZ2VzW291ckluZGV4XTsKLSAgICAg
IGVsc2UKLSAgICAgICAgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKLSAgICB9
IGVsc2UgewotICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoZS5hbHRLZXkpIHsKLSAgICAgIHR5cGUgPSAicmVjdCI7Ci0gICAgICBpZiAoIWFkZE5l
dykgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKLSAgICAgIHN0YXJ0ID0gcG9z
RnJvbU1vdXNlKGNtLCBlLCB0cnVlLCB0cnVlKTsKLSAgICAgIG91ckluZGV4ID0gLTE7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09ICJkb3VibGUiKSB7Ci0gICAgICB2YXIgd29yZCA9IGZpbmRXb3Jk
QXQoY20sIHN0YXJ0KTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQp
Ci0gICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgd29yZC5hbmNo
b3IsIHdvcmQuaGVhZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG91clJhbmdlID0gd29yZDsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgIHZhciBsaW5lID0gbmV3IFJh
bmdlKFBvcyhzdGFydC5saW5lLCAwKSwgY2xpcFBvcyhkb2MsIFBvcyhzdGFydC5saW5lICsgMSwg
MCkpKTsKLSAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpCi0gICAgICAg
IG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgbGluZS5hbmNob3IsIGxpbmUu
aGVhZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG91clJhbmdlID0gbGluZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgb3VyUmFuZ2UgPSBleHRlbmRSYW5nZShkb2MsIG91clJhbmdlLCBzdGFydCk7Ci0g
ICAgfQotCi0gICAgaWYgKCFhZGROZXcpIHsKLSAgICAgIG91ckluZGV4ID0gMDsKLSAgICAgIHNl
dFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCksIHNlbF9tb3VzZSk7
Ci0gICAgICBzdGFydFNlbCA9IGRvYy5zZWw7Ci0gICAgfSBlbHNlIGlmIChvdXJJbmRleCA+IC0x
KSB7Ci0gICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBz
ZWxfbW91c2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXJJbmRleCA9IGRvYy5zZWwucmFuZ2Vz
Lmxlbmd0aDsKLSAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2Mu
c2VsLnJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKLSAgICAgICAgICAgICAg
ICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOwotICAgIH0KLQotICAgIHZh
ciBsYXN0UG9zID0gc3RhcnQ7Ci0gICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9zKSB7Ci0gICAgICBp
ZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgcmV0dXJuOwotICAgICAgbGFzdFBvcyA9IHBvczsK
LQotICAgICAgaWYgKHR5cGUgPT0gInJlY3QiKSB7Ci0gICAgICAgIHZhciByYW5nZXMgPSBbXSwg
dGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgICAgdmFyIHN0YXJ0Q29sID0gY291
bnRDb2x1bW4oZ2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0LmNoLCB0YWJTaXpl
KTsKLSAgICAgICAgdmFyIHBvc0NvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBwb3MubGlu
ZSkudGV4dCwgcG9zLmNoLCB0YWJTaXplKTsKLSAgICAgICAgdmFyIGxlZnQgPSBNYXRoLm1pbihz
dGFydENvbCwgcG9zQ29sKSwgcmlnaHQgPSBNYXRoLm1heChzdGFydENvbCwgcG9zQ29sKTsKLSAg
ICAgICAgZm9yICh2YXIgbGluZSA9IE1hdGgubWluKHN0YXJ0LmxpbmUsIHBvcy5saW5lKSwgZW5k
ID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgTWF0aC5tYXgoc3RhcnQubGluZSwgcG9zLmxpbmUp
KTsKLSAgICAgICAgICAgICBsaW5lIDw9IGVuZDsgbGluZSsrKSB7Ci0gICAgICAgICAgdmFyIHRl
eHQgPSBnZXRMaW5lKGRvYywgbGluZSkudGV4dCwgbGVmdFBvcyA9IGZpbmRDb2x1bW4odGV4dCwg
bGVmdCwgdGFiU2l6ZSk7Ci0gICAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgICAg
ICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVm
dFBvcykpKTsKLSAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpCi0gICAg
ICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGlu
ZSwgZmluZENvbHVtbih0ZXh0LCByaWdodCwgdGFiU2l6ZSkpKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFyYW5nZXMubGVuZ3RoKSByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0
KSk7Ci0gICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydFNl
bC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksCi0g
ICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiAiKm1vdXNlIiwgc2Nyb2xsOiBmYWxzZX0pOwot
ICAgICAgICBjbS5zY3JvbGxJbnRvVmlldyhwb3MpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
dmFyIG9sZFJhbmdlID0gb3VyUmFuZ2U7Ci0gICAgICAgIHZhciBhbmNob3IgPSBvbGRSYW5nZS5h
bmNob3IsIGhlYWQgPSBwb3M7Ci0gICAgICAgIGlmICh0eXBlICE9ICJzaW5nbGUiKSB7Ci0gICAg
ICAgICAgaWYgKHR5cGUgPT0gImRvdWJsZSIpCi0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBmaW5k
V29yZEF0KGNtLCBwb3MpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhciByYW5nZSA9
IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGRvYywgUG9zKHBvcy5saW5lICsg
MSwgMCkpKTsKLSAgICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5jaG9yKSA+IDApIHsK
LSAgICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkOwotICAgICAgICAgICAgYW5jaG9yID0gbWlu
UG9zKG9sZFJhbmdlLmZyb20oKSwgcmFuZ2UuYW5jaG9yKTsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjsKLSAgICAgICAgICAgIGFuY2hvciA9IG1h
eFBvcyhvbGRSYW5nZS50bygpLCByYW5nZS5oZWFkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgdmFyIHJhbmdlcyA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKTsKLSAgICAgICAg
cmFuZ2VzW291ckluZGV4XSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5jaG9yKSwgaGVhZCk7
Ci0gICAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIG91
ckluZGV4KSwgc2VsX21vdXNlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIgZWRpdG9yU2l6
ZSA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAvLyBVc2Vk
IHRvIGVuc3VyZSB0aW1lb3V0IHJlLXRyaWVzIGRvbid0IGZpcmUgd2hlbiBhbm90aGVyIGV4dGVu
ZAotICAgIC8vIGhhcHBlbmVkIGluIHRoZSBtZWFudGltZSAoY2xlYXJUaW1lb3V0IGlzbid0IHJl
bGlhYmxlIC0tIGF0Ci0gICAgLy8gbGVhc3Qgb24gQ2hyb21lLCB0aGUgdGltZW91dHMgc3RpbGwg
aGFwcGVuIGV2ZW4gd2hlbiBjbGVhcmVkLAotICAgIC8vIGlmIHRoZSBjbGVhciBoYXBwZW5zIGFm
dGVyIHRoZWlyIHNjaGVkdWxlZCBmaXJpbmcgdGltZSkuCi0gICAgdmFyIGNvdW50ZXIgPSAwOwot
Ci0gICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKLSAgICAgIHZhciBjdXJDb3VudCA9ICsrY291bnRl
cjsKLSAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHR5cGUgPT0gInJl
Y3QiKTsKLSAgICAgIGlmICghY3VyKSByZXR1cm47Ci0gICAgICBpZiAoY21wKGN1ciwgbGFzdFBv
cykgIT0gMCkgewotICAgICAgICBlbnN1cmVGb2N1cyhjbSk7Ci0gICAgICAgIGV4dGVuZFRvKGN1
cik7Ci0gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7Ci0g
ICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5m
cm9tKQotICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbigpe2lmIChj
b3VudGVyID09IGN1ckNvdW50KSBleHRlbmQoZSk7fSksIDE1MCk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB2YXIgb3V0c2lkZSA9IGUuY2xpZW50WSA8IGVkaXRvclNpemUudG9wID8gLTIwIDog
ZS5jbGllbnRZID4gZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6IDA7Ci0gICAgICAgIGlmIChvdXRz
aWRlKSBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYg
KGNvdW50ZXIgIT0gY3VyQ291bnQpIHJldHVybjsKLSAgICAgICAgICBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcCArPSBvdXRzaWRlOwotICAgICAgICAgIGV4dGVuZChlKTsKLSAgICAgICAgfSks
IDUwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkb25lKGUpIHsKLSAgICAgIGNv
dW50ZXIgPSBJbmZpbml0eTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICBmb2N1
c0lucHV0KGNtKTsKLSAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlbW92ZSIsIG1vdmUpOwotICAg
ICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKLSAgICAgIGRvYy5oaXN0b3J5Lmxhc3RT
ZWxPcmlnaW4gPSBudWxsOwotICAgIH0KLQotICAgIHZhciBtb3ZlID0gb3BlcmF0aW9uKGNtLCBm
dW5jdGlvbihlKSB7Ci0gICAgICBpZiAoKGllICYmICFpZV91cHRvOSkgPyAgIWUuYnV0dG9ucyA6
ICFlX2J1dHRvbihlKSkgZG9uZShlKTsKLSAgICAgIGVsc2UgZXh0ZW5kKGUpOwotICAgIH0pOwot
ICAgIHZhciB1cCA9IG9wZXJhdGlvbihjbSwgZG9uZSk7Ci0gICAgb24oZG9jdW1lbnQsICJtb3Vz
ZW1vdmUiLCBtb3ZlKTsKLSAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7Ci0gIH0KLQot
ICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaGFwcGVuZWQgaW4gdGhlIGd1dHRlciwg
YW5kIGZpcmVzIHRoZQotICAvLyBoYW5kbGVycyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQu
Ci0gIGZ1bmN0aW9uIGd1dHRlckV2ZW50KGNtLCBlLCB0eXBlLCBwcmV2ZW50LCBzaWduYWxmbikg
ewotICAgIHRyeSB7IHZhciBtWCA9IGUuY2xpZW50WCwgbVkgPSBlLmNsaWVudFk7IH0KLSAgICBj
YXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGNtLmRp
c3BsYXkuZ3V0dGVycy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkpIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAocHJldmVudCkgZV9wcmV2ZW50RGVmYXVsdChlKTsKLQotICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheTsKLSAgICB2YXIgbGluZUJveCA9IGRpc3BsYXkubGluZURpdi5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLQotICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9tIHx8ICFo
YXNIYW5kbGVyKGNtLCB0eXBlKSkgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKTsKLSAgICBt
WSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDsKLQotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgZyA9
IGRpc3BsYXkuZ3V0dGVycy5jaGlsZE5vZGVzW2ldOwotICAgICAgaWYgKGcgJiYgZy5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+PSBtWCkgewotICAgICAgICB2YXIgbGluZSA9IGxpbmVB
dEhlaWdodChjbS5kb2MsIG1ZKTsKLSAgICAgICAgdmFyIGd1dHRlciA9IGNtLm9wdGlvbnMuZ3V0
dGVyc1tpXTsKLSAgICAgICAgc2lnbmFsZm4oY20sIHR5cGUsIGNtLCBsaW5lLCBndXR0ZXIsIGUp
OwotICAgICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHsKLSAgICByZXR1cm4gZ3V0
dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDbGljayIsIHRydWUsIHNpZ25hbExhdGVyKTsKLSAgfQot
Ci0gIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCBzdHJhbmdlIElFIGJlaGF2aW9yIHdoZXJlIGl0
J2xsIHNvbWV0aW1lcwotICAvLyByZS1maXJlIGEgc2VyaWVzIG9mIGRyYWctcmVsYXRlZCBldmVu
dHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKQotICB2YXIgbGFzdERyb3AgPSAwOwotCi0g
IGZ1bmN0aW9uIG9uRHJvcChlKSB7Ci0gICAgdmFyIGNtID0gdGhpczsKLSAgICBpZiAoc2lnbmFs
RE9NRXZlbnQoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpCi0gICAgICBy
ZXR1cm47Ci0gICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICBpZiAoaWUpIGxhc3REcm9wID0g
K25ldyBEYXRlOwotICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxl
cyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwotICAgIGlmICghcG9zIHx8IGlzUmVhZE9ubHkoY20p
KSByZXR1cm47Ci0gICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ug
c2ltcGx5IGV4dHJhY3QgdGhlIHRleHQKLSAgICAvLyBhbmQgaW5zZXJ0IGl0LgotICAgIGlmIChm
aWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUp
IHsKLSAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAw
OwotICAgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgaSkgewotICAgICAgICB2YXIg
cmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7Ci0gICAgICAgIHJlYWRlci5vbmxvYWQgPSBvcGVyYXRp
b24oY20sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRleHRbaV0gPSByZWFkZXIucmVzdWx0Owot
ICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewotICAgICAgICAgICAgcG9zID0gY2xpcFBvcyhj
bS5kb2MsIHBvcyk7Ci0gICAgICAgICAgICB2YXIgY2hhbmdlID0ge2Zyb206IHBvcywgdG86IHBv
cywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikpLCBvcmlnaW46ICJwYXN0ZSJ9Owot
ICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZSk7Ci0gICAgICAgICAgICBzZXRT
ZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIGNoYW5n
ZUVuZChjaGFuZ2UpKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmVhZGVy
LnJlYWRBc1RleHQoZmlsZSk7Ci0gICAgICB9OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIGxvYWRGaWxlKGZpbGVzW2ldLCBpKTsKLSAgICB9IGVsc2UgeyAvLyBOb3JtYWwgZHJv
cAotICAgICAgLy8gRG9uJ3QgZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhhcHBlbmVkIGluc2lk
ZSBvZiB0aGUgc2VsZWN0ZWQgdGV4dC4KLSAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQg
JiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID4gLTEpIHsKLSAgICAgICAgY20uc3RhdGUuZHJh
Z2dpbmdUZXh0KGUpOwotICAgICAgICAvLyBFbnN1cmUgdGhlIGVkaXRvciBpcyByZS1mb2N1c2Vk
Ci0gICAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgdmFyIHRleHQgPSBlLmRhdGFU
cmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7Ci0gICAgICAgIGlmICh0ZXh0KSB7Ci0gICAgICAgICAg
aWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtl
eSkpCi0gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOwotICAg
ICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBv
cykpOwotICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rl
ZC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxl
Y3RlZFtpXS5hbmNob3IsIHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7Ci0gICAgICAgICAgY20u
cmVwbGFjZVNlbGVjdGlvbih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7Ci0gICAgICAgICAgZm9j
dXNJbnB1dChjbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoKGUpe30KLSAgICB9
Ci0gIH0KLQotICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkgewotICAgIGlmIChpZSAmJiAo
IWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8fCArbmV3IERhdGUgLSBsYXN0RHJvcCA8IDEwMCkpIHsg
ZV9zdG9wKGUpOyByZXR1cm47IH0KLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGV2
ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKLQotICAgIGUuZGF0YVRyYW5zZmVy
LnNldERhdGEoIlRleHQiLCBjbS5nZXRTZWxlY3Rpb24oKSk7Ci0KLSAgICAvLyBVc2UgZHVtbXkg
aW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgotICAgIC8vIFJlY2VudCBT
YWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBw
ZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS4KLSAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0
RHJhZ0ltYWdlICYmICFzYWZhcmkpIHsKLSAgICAgIHZhciBpbWcgPSBlbHQoImltZyIsIG51bGws
IG51bGwsICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTsKLSAgICAgIGltZy5z
cmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFM
QUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOwotICAgICAgaWYgKHByZXN0bykgewotICAgICAgICBp
bWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTsKLSAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLmFw
cGVuZENoaWxkKGltZyk7Ci0gICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQsIG9yIE9wZXJhIHdv
bid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24KLSAgICAgICAgaW1nLl90
b3AgPSBpbWcub2Zmc2V0VG9wOwotICAgICAgfQotICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJh
Z0ltYWdlKGltZywgMCwgMCk7Ci0gICAgICBpZiAocHJlc3RvKSBpbWcucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChpbWcpOwotICAgIH0KLSAgfQotCi0gIC8vIFNDUk9MTCBFVkVOVFMKLQotICAvLyBT
eW5jIHRoZSBzY3JvbGxhYmxlIGFyZWEgYW5kIHNjcm9sbGJhcnMsIGVuc3VyZSB0aGUgdmlld3Bv
cnQKLSAgLy8gY292ZXJzIHRoZSB2aXNpYmxlIGFyZWEuCi0gIGZ1bmN0aW9uIHNldFNjcm9sbFRv
cChjbSwgdmFsKSB7Ci0gICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSB2YWwpIDwg
MikgcmV0dXJuOwotICAgIGNtLmRvYy5zY3JvbGxUb3AgPSB2YWw7Ci0gICAgaWYgKCFnZWNrbykg
dXBkYXRlRGlzcGxheShjbSwge3RvcDogdmFsfSk7Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB2YWw7
Ci0gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNw
bGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gdmFsOwotICAgIGlmIChnZWNrbykgdXBkYXRlRGlz
cGxheShjbSk7Ci0gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7Ci0gIH0KLSAgLy8gU3luYyBzY3Jv
bGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50cyBhcmUKLSAgLy8g
YWxpZ25lZC4KLSAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyKSB7
Ci0gICAgaWYgKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFi
cyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSByZXR1cm47Ci0gICAgdmFsID0gTWF0aC5t
aW4odmFsLCBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gY20uZGlzcGxheS5zY3Jv
bGxlci5jbGllbnRXaWR0aCk7Ci0gICAgY20uZG9jLnNjcm9sbExlZnQgPSB2YWw7Ci0gICAgYWxp
Z25Ib3Jpem9udGFsbHkoY20pOwotICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExl
ZnQgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2YWw7Ci0gICAgaWYg
KGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ICE9IHZhbCkgY20uZGlzcGxheS5zY3Jv
bGxiYXJILnNjcm9sbExlZnQgPSB2YWw7Ci0gIH0KLQotICAvLyBTaW5jZSB0aGUgZGVsdGEgdmFs
dWVzIHJlcG9ydGVkIG9uIG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKLSAgLy8gdW5zdGFuZGFyZGl6
ZWQgYmV0d2VlbiBicm93c2VycyBhbmQgZXZlbiBicm93c2VyIHZlcnNpb25zLCBhbmQKLSAgLy8g
Z2VuZXJhbGx5IGhvcnJpYmx5IHVucHJlZGljdGFibGUsIHRoaXMgY29kZSBzdGFydHMgYnkgbWVh
c3VyaW5nCi0gIC8vIHRoZSBzY3JvbGwgZWZmZWN0IHRoYXQgdGhlIGZpcnN0IGZldyBtb3VzZSB3
aGVlbCBldmVudHMgaGF2ZSwKLSAgLy8gYW5kLCBmcm9tIHRoYXQsIGRldGVjdHMgdGhlIHdheSBp
dCBjYW4gY29udmVydCBkZWx0YXMgdG8gcGl4ZWwKLSAgLy8gb2Zmc2V0cyBhZnRlcndhcmRzLgot
ICAvLwotICAvLyBUaGUgcmVhc29uIHdlIHdhbnQgdG8ga25vdyB0aGUgYW1vdW50IGEgd2hlZWwg
ZXZlbnQgd2lsbCBzY3JvbGwKLSAgLy8gaXMgdGhhdCBpdCBnaXZlcyB1cyBhIGNoYW5jZSB0byB1
cGRhdGUgdGhlIGRpc3BsYXkgYmVmb3JlIHRoZQotICAvLyBhY3R1YWwgc2Nyb2xsaW5nIGhhcHBl
bnMsIHJlZHVjaW5nIGZsaWNrZXJpbmcuCi0KLSAgdmFyIHdoZWVsU2FtcGxlcyA9IDAsIHdoZWVs
UGl4ZWxzUGVyVW5pdCA9IG51bGw7Ci0gIC8vIEZpbGwgaW4gYSBicm93c2VyLWRldGVjdGVkIHN0
YXJ0aW5nIHZhbHVlIG9uIGJyb3dzZXJzIHdoZXJlIHdlCi0gIC8vIGtub3cgb25lLiBUaGVzZSBk
b24ndCBoYXZlIHRvIGJlIGFjY3VyYXRlIC0tIHRoZSByZXN1bHQgb2YgdGhlbQotICAvLyBiZWlu
ZyB3cm9uZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0IGZsaWNrZXIgb24gdGhlIGZpcnN0IHdoZWVs
Ci0gIC8vIHNjcm9sbCAoaWYgaXQgaXMgbGFyZ2UgZW5vdWdoKS4KLSAgaWYgKGllKSB3aGVlbFBp
eGVsc1BlclVuaXQgPSAtLjUzOwotICBlbHNlIGlmIChnZWNrbykgd2hlZWxQaXhlbHNQZXJVbml0
ID0gMTU7Ci0gIGVsc2UgaWYgKGNocm9tZSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS43OwotICBl
bHNlIGlmIChzYWZhcmkpIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7Ci0KLSAgZnVuY3Rpb24g
b25TY3JvbGxXaGVlbChjbSwgZSkgewotICAgIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0g
ZS53aGVlbERlbHRhWTsKLSAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMg
PT0gZS5IT1JJWk9OVEFMX0FYSVMpIGR4ID0gZS5kZXRhaWw7Ci0gICAgaWYgKGR5ID09IG51bGwg
JiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuVkVSVElDQUxfQVhJUykgZHkgPSBlLmRldGFpbDsK
LSAgICBlbHNlIGlmIChkeSA9PSBudWxsKSBkeSA9IGUud2hlZWxEZWx0YTsKLQotICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheSwgc2Nyb2xsID0gZGlzcGxheS5zY3JvbGxlcjsKLSAgICAvLyBR
dWl0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzY3JvbGwgaGVyZQotICAgIGlmICghKGR4ICYmIHNj
cm9sbC5zY3JvbGxXaWR0aCA+IHNjcm9sbC5jbGllbnRXaWR0aCB8fAotICAgICAgICAgIGR5ICYm
IHNjcm9sbC5zY3JvbGxIZWlnaHQgPiBzY3JvbGwuY2xpZW50SGVpZ2h0KSkgcmV0dXJuOwotCi0g
ICAgLy8gV2Via2l0IGJyb3dzZXJzIG9uIE9TIFggYWJvcnQgbW9tZW50dW0gc2Nyb2xscyB3aGVu
IHRoZSB0YXJnZXQKLSAgICAvLyBvZiB0aGUgc2Nyb2xsIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0
aGUgc2Nyb2xsYWJsZSBlbGVtZW50LgotICAgIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29k
ZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlCi0gICAgLy8gZWxlbWVudCBpcyBrZXB0
IGFyb3VuZC4KLSAgICBpZiAoZHkgJiYgbWFjICYmIHdlYmtpdCkgewotICAgICAgb3V0ZXI6IGZv
ciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xs
OyBjdXIgPSBjdXIucGFyZW50Tm9kZSkgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZp
ZXcubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBpZiAodmlld1tpXS5ub2RlID09IGN1cikgewot
ICAgICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7Ci0gICAgICAg
ICAgICBicmVhayBvdXRlcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBPbiBzb21lIGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9sbGluZyB3aWxsIGNh
dXNlIHJlZHJhd3MgdG8KLSAgICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIgaGFzIGJlZW4g
cmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvCi0gICAgLy8gd3JpZ2dsZSBhcm91bmQgaW4gYSBtb3N0
IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuCi0gICAgLy8gZXN0aW1hdGVkIHBpeGVscy9k
ZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbAotICAgIC8vIHNjcm9sbGluZyBl
bnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dAotICAg
IC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuCi0gICAgaWYgKGR4ICYmICFnZWNrbyAmJiAh
cHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7Ci0gICAgICBpZiAoZHkpCi0g
ICAgICAgIHNldFNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsLnNjcm9s
bFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0LCBzY3JvbGwuc2Nyb2xsSGVpZ2h0IC0gc2Ny
b2xsLmNsaWVudEhlaWdodCkpKTsKLSAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAs
IE1hdGgubWluKHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQsIHNj
cm9sbC5zY3JvbGxXaWR0aCAtIHNjcm9sbC5jbGllbnRXaWR0aCkpKTsKLSAgICAgIGVfcHJldmVu
dERlZmF1bHQoZSk7Ci0gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVsbDsgLy8gQWJvcnQg
bWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gJ1Byb2plY3QnIHRoZSB2aXNpYmxlIHZpZXdwb3J0IHRvIGNvdmVyIHRoZSBhcmVhIHRoYXQg
aXMgYmVpbmcKLSAgICAvLyBzY3JvbGxlZCBpbnRvIHZpZXcgKGlmIHdlIGtub3cgZW5vdWdoIHRv
IGVzdGltYXRlIGl0KS4KLSAgICBpZiAoZHkgJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwp
IHsKLSAgICAgIHZhciBwaXhlbHMgPSBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdDsKLSAgICAgIHZh
ciB0b3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBkaXNwbGF5LndyYXBwZXIuY2xp
ZW50SGVpZ2h0OwotICAgICAgaWYgKHBpeGVscyA8IDApIHRvcCA9IE1hdGgubWF4KDAsIHRvcCAr
IHBpeGVscyAtIDUwKTsKLSAgICAgIGVsc2UgYm90ID0gTWF0aC5taW4oY20uZG9jLmhlaWdodCwg
Ym90ICsgcGl4ZWxzICsgNTApOwotICAgICAgdXBkYXRlRGlzcGxheShjbSwge3RvcDogdG9wLCBi
b3R0b206IGJvdH0pOwotICAgIH0KLQotICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkgewotICAg
ICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgewotICAgICAgICBkaXNwbGF5Lndo
ZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxTdGFydFkgPSBzY3Jv
bGwuc2Nyb2xsVG9wOwotICAgICAgICBkaXNwbGF5LndoZWVsRFggPSBkeDsgZGlzcGxheS53aGVl
bERZID0gZHk7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYg
KGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICAgIHZhciBtb3Zl
ZFggPSBzY3JvbGwuc2Nyb2xsTGVmdCAtIGRpc3BsYXkud2hlZWxTdGFydFg7Ci0gICAgICAgICAg
dmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSBkaXNwbGF5LndoZWVsU3RhcnRZOwotICAg
ICAgICAgIHZhciBzYW1wbGUgPSAobW92ZWRZICYmIGRpc3BsYXkud2hlZWxEWSAmJiBtb3ZlZFkg
LyBkaXNwbGF5LndoZWVsRFkpIHx8Ci0gICAgICAgICAgICAobW92ZWRYICYmIGRpc3BsYXkud2hl
ZWxEWCAmJiBtb3ZlZFggLyBkaXNwbGF5LndoZWVsRFgpOwotICAgICAgICAgIGRpc3BsYXkud2hl
ZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKLSAgICAgICAgICBpZiAoIXNh
bXBsZSkgcmV0dXJuOwotICAgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5pdCA9ICh3aGVlbFBpeGVs
c1BlclVuaXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVsU2FtcGxlcyArIDEpOwot
ICAgICAgICAgICsrd2hlZWxTYW1wbGVzOwotICAgICAgICB9LCAyMDApOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgZGlzcGxheS53aGVlbERYICs9IGR4OyBkaXNwbGF5LndoZWVsRFkgKz0gZHk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gS0VZIEVWRU5UUwotCi0gIC8vIFJ1biBhIGhh
bmRsZXIgdGhhdCB3YXMgYm91bmQgdG8gYSBrZXkuCi0gIGZ1bmN0aW9uIGRvSGFuZGxlQmluZGlu
ZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkgewotICAgIGlmICh0eXBlb2YgYm91bmQgPT0gInN0cmlu
ZyIpIHsKLSAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdOwotICAgICAgaWYgKCFib3VuZCkg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJl
ZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGEKLSAgICAvLyBjb25zaXN0ZW50IHZp
ZXcgb2YgdGhlIGRvY3VtZW50Ci0gICAgaWYgKGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QgJiYgcmVh
ZElucHV0KGNtKSkgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IGZhbHNlOwotICAgIHZhciBwcmV2
U2hpZnQgPSBjbS5kaXNwbGF5LnNoaWZ0LCBkb25lID0gZmFsc2U7Ci0gICAgdHJ5IHsKLSAgICAg
IGlmIChpc1JlYWRPbmx5KGNtKSkgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9IHRydWU7Ci0gICAg
ICBpZiAoZHJvcFNoaWZ0KSBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7Ci0gICAgICBkb25lID0g
Ym91bmQoY20pICE9IFBhc3M7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIGNtLmRpc3BsYXkuc2hp
ZnQgPSBwcmV2U2hpZnQ7Ci0gICAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiBkb25lOwotICB9Ci0KLSAgLy8gQ29sbGVjdCB0aGUgY3VycmVudGx5
IGFjdGl2ZSBrZXltYXBzLgotICBmdW5jdGlvbiBhbGxLZXlNYXBzKGNtKSB7Ci0gICAgdmFyIG1h
cHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNsaWNlKDApOwotICAgIGlmIChjbS5vcHRpb25zLmV4dHJh
S2V5cykgbWFwcy5wdXNoKGNtLm9wdGlvbnMuZXh0cmFLZXlzKTsKLSAgICBtYXBzLnB1c2goY20u
b3B0aW9ucy5rZXlNYXApOwotICAgIHJldHVybiBtYXBzOwotICB9Ci0KLSAgdmFyIG1heWJlVHJh
bnNpdGlvbjsKLSAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuCi0gIGZ1
bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHsKLSAgICAvLyBIYW5kbGUgYXV0b21hdGlj
IGtleW1hcCB0cmFuc2l0aW9ucwotICAgIHZhciBzdGFydE1hcCA9IGdldEtleU1hcChjbS5vcHRp
b25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwotICAgIGNsZWFyVGltZW91dChtYXli
ZVRyYW5zaXRpb24pOwotICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRy
YW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgaWYgKGdldEtleU1hcChj
bS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApIHsKLSAgICAgICAgY20ub3B0aW9ucy5rZXlN
YXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGNtKSA6IG5leHQpOwotICAgICAgICBr
ZXlNYXBDaGFuZ2VkKGNtKTsKLSAgICAgIH0KLSAgICB9LCA1MCk7Ci0KLSAgICB2YXIgbmFtZSA9
IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBpZiAoIW5hbWUpIHJldHVy
biBmYWxzZTsKLSAgICB2YXIga2V5bWFwcyA9IGFsbEtleU1hcHMoY20pOwotCi0gICAgaWYgKGUu
c2hpZnRLZXkpIHsKLSAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5j
bHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZwotICAgICAgLy8gdGhhdCwgc2VlIGlmIHRoZXJlIGlz
IGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoCi0gICAgICAvLyAnZ28nKSBi
b3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLgotICAgICAgaGFuZGxlZCA9IGxv
b2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHtyZXR1cm4gZG9I
YW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9KQotICAgICAgICAgICAgIHx8IGxvb2t1cEtleShu
YW1lLCBrZXltYXBzLCBmdW5jdGlvbihiKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodHlwZW9m
IGIgPT0gInN0cmluZyIgPyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlvbikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkobmFtZSwga2V5
bWFwcywgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSk7Ci0g
ICAgfQotCi0gICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0g
ICAgICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVk
IiwgY20sIG5hbWUsIGUpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZGxlZDsKLSAgfQotCi0gIC8v
IEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudAotICBmdW5jdGlvbiBoYW5kbGVD
aGFyQmluZGluZyhjbSwgZSwgY2gpIHsKLSAgICB2YXIgaGFuZGxlZCA9IGxvb2t1cEtleSgiJyIg
KyBjaCArICInIiwgYWxsS2V5TWFwcyhjbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTsgfSk7Ci0g
ICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICByZXN0
YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sICIn
IiArIGNoICsgIiciLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmRsZWQ7Ci0gIH0KLQotICB2
YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsOwotICBmdW5jdGlvbiBvbktleURvd24oZSkgewotICAg
IHZhciBjbSA9IHRoaXM7Ci0gICAgZW5zdXJlRm9jdXMoY20pOwotICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkpIHJldHVybjsKLSAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGgg
ZXNjYXBlLgotICAgIGlmIChpZV91cHRvMTAgJiYgZS5rZXlDb2RlID09IDI3KSBlLnJldHVyblZh
bHVlID0gZmFsc2U7Ci0gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7Ci0gICAgY20uZGlzcGxheS5z
aGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsKLSAgICB2YXIgaGFuZGxlZCA9IGhhbmRs
ZUtleUJpbmRpbmcoY20sIGUpOwotICAgIGlmIChwcmVzdG8pIHsKLSAgICAgIGxhc3RTdG9wcGVk
S2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwotICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBl
dmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ibwotICAgICAgaWYg
KCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAmJiAobWFjID8gZS5tZXRh
S2V5IDogZS5jdHJsS2V5KSkKLSAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVsbCwg
ImN1dCIpOwotICAgIH0KLQotICAgIC8vIFR1cm4gbW91c2UgaW50byBjcm9zc2hhaXIgd2hlbiBB
bHQgaXMgaGVsZCBvbiBNYWMuCi0gICAgaWYgKGNvZGUgPT0gMTggJiYgIS9cYkNvZGVNaXJyb3It
Y3Jvc3NoYWlyXGIvLnRlc3QoY20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkpCi0gICAgICBz
aG93Q3Jvc3NIYWlyKGNtKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHNob3dDcm9zc0hhaXIoY20pIHsK
LSAgICB2YXIgbGluZURpdiA9IGNtLmRpc3BsYXkubGluZURpdjsKLSAgICBhZGRDbGFzcyhsaW5l
RGl2LCAiQ29kZU1pcnJvci1jcm9zc2hhaXIiKTsKLQotICAgIGZ1bmN0aW9uIHVwKGUpIHsKLSAg
ICAgIGlmIChlLmtleUNvZGUgPT0gMTggfHwgIWUuYWx0S2V5KSB7Ci0gICAgICAgIHJtQ2xhc3Mo
bGluZURpdiwgIkNvZGVNaXJyb3ItY3Jvc3NoYWlyIik7Ci0gICAgICAgIG9mZihkb2N1bWVudCwg
ImtleXVwIiwgdXApOwotICAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7Ci0g
ICAgICB9Ci0gICAgfQotICAgIG9uKGRvY3VtZW50LCAia2V5dXAiLCB1cCk7Ci0gICAgb24oZG9j
dW1lbnQsICJtb3VzZW92ZXIiLCB1cCk7Ci0gIH0KLQotICBmdW5jdGlvbiBvbktleVVwKGUpIHsK
LSAgICBpZiAoc2lnbmFsRE9NRXZlbnQodGhpcywgZSkpIHJldHVybjsKLSAgICBpZiAoZS5rZXlD
b2RlID09IDE2KSB0aGlzLmRvYy5zZWwuc2hpZnQgPSBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9u
IG9uS2V5UHJlc3MoZSkgewotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgaWYgKHNpZ25hbERPTUV2
ZW50KGNtLCBlKSkgcmV0dXJuOwotICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29k
ZSA9IGUuY2hhckNvZGU7Ci0gICAgaWYgKHByZXN0byAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVk
S2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47
fQotICAgIGlmICgoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgfHwga2h0
bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47Ci0gICAgdmFyIGNoID0gU3Ry
aW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsK
LSAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOwotICAgIGlmIChp
ZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwotICAg
IGZhc3RQb2xsKGNtKTsKLSAgfQotCi0gIC8vIEZPQ1VTL0JMVVIgRVZFTlRTCi0KLSAgZnVuY3Rp
b24gb25Gb2N1cyhjbSkgewotICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNv
ciIpIHJldHVybjsKLSAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsKLSAgICAgIHNpZ25hbChj
bSwgImZvY3VzIiwgY20pOwotICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWU7Ci0gICAgICBh
ZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3VzZWQiKTsKLSAgICAg
IC8vIFRoZSBwcmV2SW5wdXQgdGVzdCBwcmV2ZW50cyB0aGlzIGZyb20gZmlyaW5nIHdoZW4gYSBj
b250ZXh0Ci0gICAgICAvLyBtZW51IGlzIGNsb3NlZCAoc2luY2UgdGhlIHJlc2V0SW5wdXQgd291
bGQga2lsbCB0aGUKLSAgICAgIC8vIHNlbGVjdC1hbGwgZGV0ZWN0aW9uIGhhY2spCi0gICAgICBp
ZiAoIWNtLmN1ck9wICYmIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgIT0gY20uZG9jLnNl
bCkgewotICAgICAgICByZXNldElucHV0KGNtKTsKLSAgICAgICAgaWYgKHdlYmtpdCkgc2V0VGlt
ZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0cnVlKSwgMCk7IC8vIElzc3VlICMxNzMwCi0gICAg
ICB9Ci0gICAgfQotICAgIHNsb3dQb2xsKGNtKTsKLSAgICByZXN0YXJ0QmxpbmsoY20pOwotICB9
Ci0gIGZ1bmN0aW9uIG9uQmx1cihjbSkgewotICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSB7Ci0g
ICAgICBzaWduYWwoY20sICJibHVyIiwgY20pOwotICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZh
bHNlOwotICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3Vz
ZWQiKTsKLSAgICB9Ci0gICAgY2xlYXJJbnRlcnZhbChjbS5kaXNwbGF5LmJsaW5rZXIpOwotICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNwbGF5
LnNoaWZ0ID0gZmFsc2U7fSwgMTUwKTsKLSAgfQotCi0gIC8vIENPTlRFWFQgTUVOVSBIQU5ETElO
RwotCi0gIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJyaWVm
bHkgdW5oaWRlIHRoZQotICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVzaXZlIGFz
IHBvc3NpYmxlKSB0byBsZXQgdGhlCi0gIC8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9uIGl0
LgotICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7Ci0gICAgaWYgKHNpZ25hbERPTUV2
ZW50KGNtLCBlLCAiY29udGV4dG1lbnUiKSkgcmV0dXJuOwotICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheTsKLSAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVu
dUluR3V0dGVyKGNtLCBlKSkgcmV0dXJuOwotCi0gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShj
bSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIGlmICgh
cG9zIHx8IHByZXN0bykgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuCi0KLSAgICAvLyBS
ZXNldCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25l
IG91dHNpZGUgb2YgdGhlIHNlbGVjdGlvbgotICAgIC8vIGFuZCAncmVzZXRTZWxlY3Rpb25PbkNv
bnRleHRNZW51JyBvcHRpb24gaXMgdHJ1ZS4KLSAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJl
c2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTsKLSAgICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5j
b250YWlucyhwb3MpID09IC0xKQotICAgICAgb3BlcmF0aW9uKGNtLCBzZXRTZWxlY3Rpb24pKGNt
LmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcyksIHNlbF9kb250U2Nyb2xsKTsKLQotICAgIHZhciBv
bGRDU1MgPSBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQ7Ci0gICAgZGlzcGxheS5pbnB1dERp
di5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgZGlzcGxheS5pbnB1dC5zdHlsZS5j
c3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9w
OiAiICsgKGUuY2xpZW50WSAtIDUpICsKLSAgICAgICJweDsgbGVmdDogIiArIChlLmNsaWVudFgg
LSA1KSArICJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIiArCi0gICAgICAoaWUgPyAi
cmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIiA6ICJ0cmFuc3BhcmVudCIpICsKLSAgICAgICI7IG91
dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhp
ZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKLSAgICBmb2N1
c0lucHV0KGNtKTsKLSAgICByZXNldElucHV0KGNtKTsKLSAgICAvLyBBZGRzICJTZWxlY3QgYWxs
IiB0byBjb250ZXh0IG1lbnUgaW4gRkYKLSAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkp
IGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsKLSAgICBkaXNw
bGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDsKLSAgICBjbGVhclRpbWVvdXQoZGlz
cGxheS5kZXRlY3RpbmdTZWxlY3RBbGwpOwotCi0gICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdy
ZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KLSAgICAvLyB0aGlzIGFk
ZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNoZWNrIHdoZXRoZXIK
LSAgICAvLyBpdCBnb3Qgc2VsZWN0ZWQuCi0gICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhh
Y2soKSB7Ci0gICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7
Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCk7Ci0gICAgICAg
IHZhciBleHR2YWwgPSBkaXNwbGF5LmlucHV0LnZhbHVlID0gIlx1MjAwYiIgKyAoc2VsZWN0ZWQg
PyBkaXNwbGF5LmlucHV0LnZhbHVlIDogIiIpOwotICAgICAgICBkaXNwbGF5LnByZXZJbnB1dCA9
IHNlbGVjdGVkID8gIiIgOiAiXHUyMDBiIjsKLSAgICAgICAgZGlzcGxheS5pbnB1dC5zZWxlY3Rp
b25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aDsK
LSAgICAgICAgLy8gUmUtc2V0IHRoaXMsIGluIGNhc2Ugc29tZSBvdGhlciBoYW5kbGVyIHRvdWNo
ZWQgdGhlCi0gICAgICAgIC8vIHNlbGVjdGlvbiBpbiB0aGUgbWVhbnRpbWUuCi0gICAgICAgIGRp
c3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOwotICAgICAgfQotICAgIH0KLSAg
ICBmdW5jdGlvbiByZWhpZGUoKSB7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnBvc2l0
aW9uID0gInJlbGF0aXZlIjsKLSAgICAgIGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9IG9s
ZENTUzsKLSAgICAgIGlmIChpZV91cHRvOCkgZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9
IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zOwotICAgICAgc2xvd1BvbGwo
Y20pOwotCi0gICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2VyIGNob29zaW5nIHNlbGVjdC1h
bGwKLSAgICAgIGlmIChkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKLSAg
ICAgICAgaWYgKCFpZSB8fCBpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKLSAgICAg
ICAgdmFyIGkgPSAwLCBwb2xsID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKGRpc3BsYXku
c2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiBkaXNwbGF5LmlucHV0LnNlbGVjdGlv
blN0YXJ0ID09IDApCi0gICAgICAgICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRzLnNlbGVjdEFs
bCkoY20pOwotICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkaXNwbGF5LmRldGVjdGluZ1Nl
bGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKLSAgICAgICAgICBlbHNlIHJlc2V0SW5w
dXQoY20pOwotICAgICAgICB9OwotICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9
IHNldFRpbWVvdXQocG9sbCwgMjAwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaWUgJiYg
IWllX3VwdG84KSBwcmVwYXJlU2VsZWN0QWxsSGFjaygpOwotICAgIGlmIChjYXB0dXJlUmlnaHRD
bGljaykgewotICAgICAgZV9zdG9wKGUpOwotICAgICAgdmFyIG1vdXNldXAgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgb2ZmKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKLSAgICAgICAgc2V0
VGltZW91dChyZWhpZGUsIDIwKTsKLSAgICAgIH07Ci0gICAgICBvbih3aW5kb3csICJtb3VzZXVw
IiwgbW91c2V1cCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkgewot
ICAgIGlmICghaGFzSGFuZGxlcihjbSwgImd1dHRlckNvbnRleHRNZW51IikpIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsICJndXR0ZXJDb250ZXh0TWVudSIsIGZh
bHNlLCBzaWduYWwpOwotICB9Ci0KLSAgLy8gVVBEQVRJTkcKLQotICAvLyBDb21wdXRlIHRoZSBw
b3NpdGlvbiBvZiB0aGUgZW5kIG9mIGEgY2hhbmdlIChpdHMgJ3RvJyBwcm9wZXJ0eQotICAvLyBy
ZWZlcnMgdG8gdGhlIHByZS1jaGFuZ2UgZW5kKS4KLSAgdmFyIGNoYW5nZUVuZCA9IENvZGVNaXJy
b3IuY2hhbmdlRW5kID0gZnVuY3Rpb24oY2hhbmdlKSB7Ci0gICAgaWYgKCFjaGFuZ2UudGV4dCkg
cmV0dXJuIGNoYW5nZS50bzsKLSAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFu
Z2UudGV4dC5sZW5ndGggLSAxLAotICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5n
dGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKTsKLSAg
fTsKLQotICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0byB0aGUgcG9zdC1jaGFuZ2Ug
cG9zaXRpb24gb2YgdGhlCi0gIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBvZiB0aGUgY2hhbmdl
IGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LgotICBmdW5jdGlvbiBhZGp1c3RGb3JDaGFuZ2UocG9z
LCBjaGFuZ2UpIHsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZyb20pIDwgMCkgcmV0dXJuIHBv
czsKLSAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSByZXR1cm4gY2hhbmdlRW5kKGNo
YW5nZSk7Ci0KLSAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0g
KGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBvcy5jaDsKLSAg
ICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIGNoICs9IGNoYW5nZUVuZChjaGFuZ2Up
LmNoIC0gY2hhbmdlLnRvLmNoOwotICAgIHJldHVybiBQb3MobGluZSwgY2gpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7Ci0gICAgdmFyIG91
dCA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBp
KyspIHsKLSAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwotICAgICAgb3V0LnB1
c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5hbmNob3IsIGNoYW5nZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQsIGRvYy5zZWwucHJp
bUluZGV4KTsKLSAgfQotCi0gIGZ1bmN0aW9uIG9mZnNldFBvcyhwb3MsIG9sZCwgbncpIHsKLSAg
ICBpZiAocG9zLmxpbmUgPT0gb2xkLmxpbmUpCi0gICAgICByZXR1cm4gUG9zKG53LmxpbmUsIHBv
cy5jaCAtIG9sZC5jaCArIG53LmNoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gUG9zKG53Lmxp
bmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCk7Ci0gIH0KLQotICAvLyBVc2VkIGJ5
IHJlcGxhY2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0aW9uIHRvIHRoZQot
ICAvLyBzdGFydCBvciBhcm91bmQgdGhlIHJlcGxhY2VkIHRlc3QuIEhpbnQgbWF5IGJlICJzdGFy
dCIgb3IgImFyb3VuZCIuCi0gIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChkb2MsIGNoYW5n
ZXMsIGhpbnQpIHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgdmFyIG9sZFByZXYgPSBQb3MoZG9j
LmZpcnN0LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
aGFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTsKLSAg
ICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2LCBuZXdQcmV2KTsK
LSAgICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xkUHJldiwgbmV3
UHJldik7Ci0gICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvOwotICAgICAgbmV3UHJldiA9IHRvOwot
ICAgICAgaWYgKGhpbnQgPT0gImFyb3VuZCIpIHsKLSAgICAgICAgdmFyIHJhbmdlID0gZG9jLnNl
bC5yYW5nZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNob3IpIDwgMDsKLSAg
ICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRv
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShmcm9tLCBmcm9t
KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24ob3V0LCBkb2Muc2Vs
LnByaW1JbmRleCk7Ci0gIH0KLQotICAvLyBBbGxvdyAiYmVmb3JlQ2hhbmdlIiBldmVudCBoYW5k
bGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2UKLSAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywg
Y2hhbmdlLCB1cGRhdGUpIHsKLSAgICB2YXIgb2JqID0gewotICAgICAgY2FuY2VsZWQ6IGZhbHNl
LAotICAgICAgZnJvbTogY2hhbmdlLmZyb20sCi0gICAgICB0bzogY2hhbmdlLnRvLAotICAgICAg
dGV4dDogY2hhbmdlLnRleHQsCi0gICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sCi0gICAgICBj
YW5jZWw6IGZ1bmN0aW9uKCkgeyB0aGlzLmNhbmNlbGVkID0gdHJ1ZTsgfQotICAgIH07Ci0gICAg
aWYgKHVwZGF0ZSkgb2JqLnVwZGF0ZSA9IGZ1bmN0aW9uKGZyb20sIHRvLCB0ZXh0LCBvcmlnaW4p
IHsKLSAgICAgIGlmIChmcm9tKSB0aGlzLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7Ci0gICAg
ICBpZiAodG8pIHRoaXMudG8gPSBjbGlwUG9zKGRvYywgdG8pOwotICAgICAgaWYgKHRleHQpIHRo
aXMudGV4dCA9IHRleHQ7Ci0gICAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHRoaXMub3Jp
Z2luID0gb3JpZ2luOwotICAgIH07Ci0gICAgc2lnbmFsKGRvYywgImJlZm9yZUNoYW5nZSIsIGRv
Yywgb2JqKTsKLSAgICBpZiAoZG9jLmNtKSBzaWduYWwoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIiwg
ZG9jLmNtLCBvYmopOwotCi0gICAgaWYgKG9iai5jYW5jZWxlZCkgcmV0dXJuIG51bGw7Ci0gICAg
cmV0dXJuIHtmcm9tOiBvYmouZnJvbSwgdG86IG9iai50bywgdGV4dDogb2JqLnRleHQsIG9yaWdp
bjogb2JqLm9yaWdpbn07Ci0gIH0KLQotICAvLyBBcHBseSBhIGNoYW5nZSB0byBhIGRvY3VtZW50
LCBhbmQgYWRkIGl0IHRvIHRoZSBkb2N1bWVudCdzCi0gIC8vIGhpc3RvcnksIGFuZCBwcm9wYWdh
dGluZyBpdCB0byBhbGwgbGlua2VkIGRvY3VtZW50cy4KLSAgZnVuY3Rpb24gbWFrZUNoYW5nZShk
b2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIHsKLSAgICBpZiAoZG9jLmNtKSB7Ci0gICAgICBp
ZiAoIWRvYy5jbS5jdXJPcCkgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRv
YywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSk7Ci0gICAgICBpZiAoZG9jLmNtLnN0YXRlLnN1cHBy
ZXNzRWRpdHMpIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzSGFuZGxlcihkb2MsICJiZWZv
cmVDaGFuZ2UiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sICJiZWZvcmVDaGFuZ2Ui
KSkgewotICAgICAgY2hhbmdlID0gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB0cnVlKTsKLSAg
ICAgIGlmICghY2hhbmdlKSByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUG9zc2libHkgc3BsaXQg
b3Igc3VwcHJlc3MgdGhlIHVwZGF0ZSBiYXNlZCBvbiB0aGUgcHJlc2VuY2UKLSAgICAvLyBvZiBy
ZWFkLW9ubHkgc3BhbnMgaW4gaXRzIHJhbmdlLgotICAgIHZhciBzcGxpdCA9IHNhd1JlYWRPbmx5
U3BhbnMgJiYgIWlnbm9yZVJlYWRPbmx5ICYmIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgY2hh
bmdlLmZyb20sIGNoYW5nZS50byk7Ci0gICAgaWYgKHNwbGl0KSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gc3BsaXQubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgIG1ha2VDaGFuZ2VJbm5l
cihkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8sIHRleHQ6IGkgPyBb
IiJdIDogY2hhbmdlLnRleHR9KTsKLSAgICB9IGVsc2UgewotICAgICAgbWFrZUNoYW5nZUlubmVy
KGRvYywgY2hhbmdlKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBtYWtlQ2hhbmdlSW5uZXIo
ZG9jLCBjaGFuZ2UpIHsKLSAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdl
LnRleHRbMF0gPT0gIiIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHJldHVy
bjsKLSAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2Up
OwotICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/
IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7Ci0KLSAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywg
Y2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkpOwot
ICAgIHZhciByZWJhc2VkID0gW107Ci0KLSAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24oZG9j
LCBzaGFyZWRIaXN0KSB7Ci0gICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2Vk
LCBkb2MuaGlzdG9yeSkgPT0gLTEpIHsKLSAgICAgICAgcmViYXNlSGlzdChkb2MuaGlzdG9yeSwg
Y2hhbmdlKTsKLSAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTsKLSAgICAgIH0KLSAg
ICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092
ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIFJldmVydCBhIGNo
YW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuCi0gIGZ1bmN0aW9uIG1ha2VDaGFu
Z2VGcm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkgewotICAgIGlmIChk
b2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHJldHVybjsKLQotICAgIHZhciBo
aXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7Ci0gICAgdmFyIHNv
dXJjZSA9IHR5cGUgPT0gInVuZG8iID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUsIGRlc3QgPSB0
eXBlID09ICJ1bmRvIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lOwotCi0gICAgLy8gVmVyaWZ5
IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwteiB3b24ndAotICAg
IC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cykKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewotICAgICAgZXZlbnQgPSBzb3VyY2VbaV07Ci0g
ICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYmICFldmVudC5lcXVh
bHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aWYgKGkgPT0gc291cmNlLmxlbmd0aCkgcmV0dXJuOwotICAgIGhpc3QubGFzdE9yaWdpbiA9IGhp
c3QubGFzdFNlbE9yaWdpbiA9IG51bGw7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICBldmVudCA9
IHNvdXJjZS5wb3AoKTsKLSAgICAgIGlmIChldmVudC5yYW5nZXMpIHsKLSAgICAgICAgcHVzaFNl
bGVjdGlvblRvSGlzdG9yeShldmVudCwgZGVzdCk7Ci0gICAgICAgIGlmIChhbGxvd1NlbGVjdGlv
bk9ubHkgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSkgewotICAgICAgICAgIHNldFNlbGVjdGlv
bihkb2MsIGV2ZW50LCB7Y2xlYXJSZWRvOiBmYWxzZX0pOwotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBzZWxBZnRlciA9IGV2ZW50OwotICAgICAgfQotICAgICAgZWxzZSBi
cmVhazsKLSAgICB9Ci0KLSAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hhbmdlIG9iamVjdCB0
byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhpc3RvcnkKLSAgICAvLyBzdGFjayAocmVkbyB3aGVuIHVu
ZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS4KLSAgICB2YXIgYW50aUNoYW5nZXMgPSBbXTsKLSAgICBw
dXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbEFmdGVyLCBkZXN0KTsKLSAgICBkZXN0LnB1c2goe2No
YW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259KTsKLSAgICBo
aXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9u
OwotCi0gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCAiYmVmb3JlQ2hhbmdlIikgfHwg
ZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCAiYmVmb3JlQ2hhbmdlIik7Ci0KLSAgICBmb3Ig
KHZhciBpID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
dmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07Ci0gICAgICBjaGFuZ2Uub3JpZ2luID0gdHlw
ZTsKLSAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgZmFsc2Up
KSB7Ci0gICAgICAgIHNvdXJjZS5sZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0KLSAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBj
aGFuZ2UpKTsKLQotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShk
b2MsIGNoYW5nZSwgbnVsbCkgOiBsc3Qoc291cmNlKTsKLSAgICAgIG1ha2VDaGFuZ2VTaW5nbGVE
b2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7Ci0gICAg
ICBpZiAoIWkgJiYgZG9jLmNtKSBkb2MuY20uc2Nyb2xsSW50b1ZpZXcoY2hhbmdlKTsKLSAgICAg
IHZhciByZWJhc2VkID0gW107Ci0KLSAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbGlua2VkIGRv
Y3VtZW50cwotICAgICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uKGRvYywgc2hhcmVkSGlzdCkg
ewotICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9y
eSkgPT0gLTEpIHsKLSAgICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0b3J5LCBjaGFuZ2UpOwot
ICAgICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAg
bWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2Ms
IGNoYW5nZSkpOwotICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gU3ViLXZpZXdzIG5lZWQg
dGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkCi0gIC8vIGFib3Zl
IG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KLSAgZnVuY3Rpb24gc2hpZnRE
b2MoZG9jLCBkaXN0YW5jZSkgewotICAgIGlmIChkaXN0YW5jZSA9PSAwKSByZXR1cm47Ci0gICAg
ZG9jLmZpcnN0ICs9IGRpc3RhbmNlOwotICAgIGRvYy5zZWwgPSBuZXcgU2VsZWN0aW9uKG1hcChk
b2Muc2VsLnJhbmdlcywgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgIHJldHVybiBuZXcgUmFuZ2Uo
UG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hvci5jaCksCi0gICAg
ICAgICAgICAgICAgICAgICAgIFBvcyhyYW5nZS5oZWFkLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2Uu
aGVhZC5jaCkpOwotICAgIH0pLCBkb2Muc2VsLnByaW1JbmRleCk7Ci0gICAgaWYgKGRvYy5jbSkg
ewotICAgICAgcmVnQ2hhbmdlKGRvYy5jbSwgZG9jLmZpcnN0LCBkb2MuZmlyc3QgLSBkaXN0YW5j
ZSwgZGlzdGFuY2UpOwotICAgICAgZm9yICh2YXIgZCA9IGRvYy5jbS5kaXNwbGF5LCBsID0gZC52
aWV3RnJvbTsgbCA8IGQudmlld1RvOyBsKyspCi0gICAgICAgIHJlZ0xpbmVDaGFuZ2UoZG9jLmNt
LCBsLCAiZ3V0dGVyIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gTW9yZSBsb3dlci1sZXZlbCBjaGFu
Z2UgZnVuY3Rpb24sIGhhbmRsaW5nIG9ubHkgYSBzaW5nbGUgZG9jdW1lbnQKLSAgLy8gKG5vdCBs
aW5rZWQgb25lcykuCi0gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2Us
IHNlbEFmdGVyLCBzcGFucykgewotICAgIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkKLSAg
ICAgIHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlU2luZ2xlRG9jKShkb2MsIGNo
YW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKTsKLQotICAgIGlmIChjaGFuZ2UudG8ubGluZSA8IGRvYy5m
aXJzdCkgewotICAgICAgc2hpZnREb2MoZG9jLCBjaGFuZ2UudGV4dC5sZW5ndGggLSAxIC0gKGNo
YW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm47Ci0KLSAg
ICAvLyBDbGlwIHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhpcyBkb2MKLSAgICBpZiAoY2hh
bmdlLmZyb20ubGluZSA8IGRvYy5maXJzdCkgewotICAgICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRl
eHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTsKLSAgICAgIHNo
aWZ0RG9jKGRvYywgc2hpZnQpOwotICAgICAgY2hhbmdlID0ge2Zyb206IFBvcyhkb2MuZmlyc3Qs
IDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50by5jaCksCi0gICAg
ICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmln
aW59OwotICAgIH0KLSAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGluZSgpOwotICAgIGlmIChjaGFu
Z2UudG8ubGluZSA+IGxhc3QpIHsKLSAgICAgIGNoYW5nZSA9IHtmcm9tOiBjaGFuZ2UuZnJvbSwg
dG86IFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpLAotICAgICAgICAg
ICAgICAgIHRleHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdlLm9yaWdpbn07Ci0g
ICAgfQotCi0gICAgY2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20s
IGNoYW5nZS50byk7Ci0KLSAgICBpZiAoIXNlbEFmdGVyKSBzZWxBZnRlciA9IGNvbXB1dGVTZWxB
ZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCk7Ci0gICAgaWYgKGRvYy5jbSkgbWFrZUNoYW5n
ZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7Ci0gICAgZWxzZSB1cGRh
dGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKLSAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBz
ZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpOwotICB9Ci0KLSAgLy8gSGFuZGxlIHRoZSBpbnRlcmFj
dGlvbiBvZiBhIGNoYW5nZSB0byBhIGRvY3VtZW50IHdpdGggdGhlIGVkaXRvcgotICAvLyB0aGF0
IHRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZi4KLSAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURv
Y0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYywgZGlz
cGxheSA9IGNtLmRpc3BsYXksIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG87Ci0K
LSAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhTdGFydCA9IGZy
b20ubGluZTsKLSAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7Ci0gICAgICBjaGVj
a1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkp
OwotICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24o
bGluZSkgewotICAgICAgICBpZiAobGluZSA9PSBkaXNwbGF5Lm1heExpbmUpIHsKLSAgICAgICAg
ICByZWNvbXB1dGVNYXhMZW5ndGggPSB0cnVlOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoZG9jLnNlbC5jb250YWlucyhjaGFu
Z2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKQotICAgICAgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20p
OwotCi0gICAgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucywgZXN0aW1hdGVIZWlnaHQoY20p
KTsKLQotICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIGRvYy5pdGVy
KGNoZWNrV2lkdGhTdGFydCwgZnJvbS5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoLCBmdW5jdGlv
bihsaW5lKSB7Ci0gICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpOwotICAgICAgICBp
ZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7Ci0gICAgICAgICAgZGlzcGxheS5tYXhM
aW5lID0gbGluZTsKLSAgICAgICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47Ci0gICAg
ICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgcmVjb21wdXRl
TWF4TGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgaWYgKHJlY29t
cHV0ZU1heExlbmd0aCkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gQWRqdXN0IGZyb250aWVyLCBzY2hlZHVsZSB3b3JrZXIKLSAgICBkb2MuZnJvbnRpZXIg
PSBNYXRoLm1pbihkb2MuZnJvbnRpZXIsIGZyb20ubGluZSk7Ci0gICAgc3RhcnRXb3JrZXIoY20s
IDQwMCk7Ci0KLSAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0by5saW5l
IC0gZnJvbS5saW5lKSAtIDE7Ci0gICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFu
Z2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKLSAgICBpZiAoZnJvbS5saW5lID09IHRvLmxp
bmUgJiYgY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgIWlzV2hvbGVMaW5lVXBkYXRlKGNtLmRv
YywgY2hhbmdlKSkKLSAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGZyb20ubGluZSwgInRleHQiKTsK
LSAgICBlbHNlCi0gICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxl
bmRpZmYpOwotCi0gICAgdmFyIGNoYW5nZXNIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgImNoYW5n
ZXMiKSwgY2hhbmdlSGFuZGxlciA9IGhhc0hhbmRsZXIoY20sICJjaGFuZ2UiKTsKLSAgICBpZiAo
Y2hhbmdlSGFuZGxlciB8fCBjaGFuZ2VzSGFuZGxlcikgewotICAgICAgdmFyIG9iaiA9IHsKLSAg
ICAgICAgZnJvbTogZnJvbSwgdG86IHRvLAotICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCwKLSAg
ICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsCi0gICAgICAgIG9yaWdpbjogY2hhbmdlLm9y
aWdpbgotICAgICAgfTsKLSAgICAgIGlmIChjaGFuZ2VIYW5kbGVyKSBzaWduYWxMYXRlcihjbSwg
ImNoYW5nZSIsIGNtLCBvYmopOwotICAgICAgaWYgKGNoYW5nZXNIYW5kbGVyKSAoY20uY3VyT3Au
Y2hhbmdlT2JqcyB8fCAoY20uY3VyT3AuY2hhbmdlT2JqcyA9IFtdKSkucHVzaChvYmopOwotICAg
IH0KLSAgICBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDsKLSAgfQotCi0gIGZ1
bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKLSAgICBp
ZiAoIXRvKSB0byA9IGZyb207Ci0gICAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IHZhciB0bXAg
PSB0bzsgdG8gPSBmcm9tOyBmcm9tID0gdG1wOyB9Ci0gICAgaWYgKHR5cGVvZiBjb2RlID09ICJz
dHJpbmciKSBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKLSAgICBtYWtlQ2hhbmdlKGRvYywge2Zy
b206IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59KTsKLSAgfQotCi0g
IC8vIFNDUk9MTElORyBUSElOR1MgSU5UTyBWSUVXCi0KLSAgLy8gSWYgYW4gZWRpdG9yIHNpdHMg
b24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5Ci0gIC8vIHNjcm9s
bGVkIG91dCBvZiB2aWV3LCB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgY3Vyc29yIGlzIHZpc2libGUu
Ci0gIGZ1bmN0aW9uIG1heWJlU2Nyb2xsV2luZG93KGNtLCBjb29yZHMpIHsKLSAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIGJveCA9IGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCksIGRvU2Nyb2xsID0gbnVsbDsKLSAgICBpZiAoY29vcmRzLnRvcCArIGJveC50b3AgPCAw
KSBkb1Njcm9sbCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoY29vcmRzLmJvdHRvbSArIGJveC50b3Ag
PiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI
ZWlnaHQpKSBkb1Njcm9sbCA9IGZhbHNlOwotICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFw
aGFudG9tKSB7Ci0gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdCgiZGl2IiwgIlx1MjAwYiIsIG51
bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogIiArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNldCAtIHBhZGRpbmdUb3AoY20uZGlz
cGxheSkpICsgInB4OyBoZWlnaHQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
b3Jkcy5ib3R0b20gLSBjb29yZHMudG9wICsgc2Nyb2xsZXJDdXRPZmYpICsgInB4OyBsZWZ0OiAi
ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5sZWZ0ICsgInB4OyB3aWR0aDog
MnB4OyIpOwotICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoc2Nyb2xsTm9k
ZSk7Ci0gICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRvU2Nyb2xsKTsKLSAgICAgIGNt
LmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKHNjcm9sbE5vZGUpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFNjcm9sbCBhIGdpdmVuIHBvc2l0aW9uIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLCB2
ZXJpZnlpbmcgdGhhdAotICAvLyBpdCBhY3R1YWxseSBiZWNhbWUgdmlzaWJsZSAoYXMgbGluZSBo
ZWlnaHRzIGFyZSBhY2N1cmF0ZWx5Ci0gIC8vIG1lYXN1cmVkLCB0aGUgcG9zaXRpb24gb2Ygc29t
ZXRoaW5nIG1heSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4KLSAgZnVuY3Rpb24gc2Nyb2xsUG9z
SW50b1ZpZXcoY20sIHBvcywgZW5kLCBtYXJnaW4pIHsKLSAgICBpZiAobWFyZ2luID09IG51bGwp
IG1hcmdpbiA9IDA7Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwg
Y29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpOwotICAgICAgdmFyIGVuZENvb3JkcyA9ICFl
bmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTsKLSAgICAg
IHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIE1hdGgubWluKGNvb3Jkcy5s
ZWZ0LCBlbmRDb29yZHMubGVmdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hdGgubWluKGNvb3Jkcy50b3AsIGVuZENvb3Jkcy50b3ApIC0gbWFyZ2luLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjb29yZHMubGVm
dCwgZW5kQ29vcmRzLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYXRoLm1heChjb29yZHMuYm90dG9tLCBlbmRDb29yZHMuYm90dG9tKSArIG1hcmdpbik7
Ci0gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFydExlZnQgPSBjbS5k
b2Muc2Nyb2xsTGVmdDsKLSAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsK
LSAgICAgICAgc2V0U2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsKLSAgICAgICAg
aWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSBjaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7
Ci0gICAgICAgIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsKLSAgICAg
ICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gc3RhcnRMZWZ0KSA+IDEpIGNoYW5n
ZWQgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKCFjaGFuZ2VkKSByZXR1cm4gY29vcmRzOwot
ICAgIH0KLSAgfQotCi0gIC8vIFNjcm9sbCBhIGdpdmVuIHNldCBvZiBjb29yZGluYXRlcyBpbnRv
IHZpZXcgKGltbWVkaWF0ZWx5KS4KLSAgZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY20sIHgxLCB5
MSwgeDIsIHkyKSB7Ci0gICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwg
eDEsIHkxLCB4MiwgeTIpOwotICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHNl
dFNjcm9sbFRvcChjbSwgc2Nyb2xsUG9zLnNjcm9sbFRvcCk7Ci0gICAgaWYgKHNjcm9sbFBvcy5z
Y3JvbGxMZWZ0ICE9IG51bGwpIHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0
KTsKLSAgfQotCi0gIC8vIENhbGN1bGF0ZSBhIG5ldyBzY3JvbGwgcG9zaXRpb24gbmVlZGVkIHRv
IHNjcm9sbCB0aGUgZ2l2ZW4KLSAgLy8gcmVjdGFuZ2xlIGludG8gdmlldy4gUmV0dXJucyBhbiBv
YmplY3Qgd2l0aCBzY3JvbGxUb3AgYW5kCi0gIC8vIHNjcm9sbExlZnQgcHJvcGVydGllcy4gV2hl
biB0aGVzZSBhcmUgdW5kZWZpbmVkLCB0aGUKLSAgLy8gdmVydGljYWwvaG9yaXpvbnRhbCBwb3Np
dGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlIGFkanVzdGVkLgotICBmdW5jdGlvbiBjYWxjdWxhdGVT
Y3JvbGxQb3MoY20sIHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNw
bGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKLSAgICBpZiAoeTEgPCAw
KSB5MSA9IDA7Ci0gICAgdmFyIHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9s
bFRvcCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3A7Ci0gICAgdmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0g
c2Nyb2xsZXJDdXRPZmYsIHJlc3VsdCA9IHt9OwotICAgIHZhciBkb2NCb3R0b20gPSBjbS5kb2Mu
aGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxheSk7Ci0gICAgdmFyIGF0VG9wID0geTEgPCBzbmFw
TWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25hcE1hcmdpbjsKLSAgICBpZiAo
eTEgPCBzY3JlZW50b3ApIHsKLSAgICAgIHJlc3VsdC5zY3JvbGxUb3AgPSBhdFRvcCA/IDAgOiB5
MTsKLSAgICB9IGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7Ci0gICAgICB2YXIg
bmV3VG9wID0gTWF0aC5taW4oeTEsIChhdEJvdHRvbSA/IGRvY0JvdHRvbSA6IHkyKSAtIHNjcmVl
bik7Ci0gICAgICBpZiAobmV3VG9wICE9IHNjcmVlbnRvcCkgcmVzdWx0LnNjcm9sbFRvcCA9IG5l
d1RvcDsKLSAgICB9Ci0KLSAgICB2YXIgc2NyZWVubGVmdCA9IGNtLmN1ck9wICYmIGNtLmN1ck9w
LnNjcm9sbExlZnQgIT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbExlZnQgOiBkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQ7Ci0gICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVu
dFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmY7Ci0gICAgeDEgKz0gZGlzcGxheS5ndXR0ZXJzLm9mZnNl
dFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGd1dHRl
cncgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGF0TGVmdCA9IHgxIDwg
Z3V0dGVydyArIDEwOwotICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0ZXJ3IHx8IGF0TGVm
dCkgewotICAgICAgaWYgKGF0TGVmdCkgeDEgPSAwOwotICAgICAgcmVzdWx0LnNjcm9sbExlZnQg
PSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7Ci0gICAgfSBlbHNlIGlmICh4MiA+IHNj
cmVlbncgKyBzY3JlZW5sZWZ0IC0gMykgewotICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSB4MiAr
IDEwIC0gc2NyZWVudzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIFN0
b3JlIGEgcmVsYXRpdmUgYWRqdXN0bWVudCB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBj
dXJyZW50Ci0gIC8vIG9wZXJhdGlvbiAodG8gYmUgYXBwbGllZCB3aGVuIHRoZSBvcGVyYXRpb24g
ZmluaXNoZXMpLgotICBmdW5jdGlvbiBhZGRUb1Njcm9sbFBvcyhjbSwgbGVmdCwgdG9wKSB7Ci0g
ICAgaWYgKGxlZnQgIT0gbnVsbCB8fCB0b3AgIT0gbnVsbCkgcmVzb2x2ZVNjcm9sbFRvUG9zKGNt
KTsKLSAgICBpZiAobGVmdCAhPSBudWxsKQotICAgICAgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IChj
bS5jdXJPcC5zY3JvbGxMZWZ0ID09IG51bGwgPyBjbS5kb2Muc2Nyb2xsTGVmdCA6IGNtLmN1ck9w
LnNjcm9sbExlZnQpICsgbGVmdDsKLSAgICBpZiAodG9wICE9IG51bGwpCi0gICAgICBjbS5jdXJP
cC5zY3JvbGxUb3AgPSAoY20uY3VyT3Auc2Nyb2xsVG9wID09IG51bGwgPyBjbS5kb2Muc2Nyb2xs
VG9wIDogY20uY3VyT3Auc2Nyb2xsVG9wKSArIHRvcDsKLSAgfQotCi0gIC8vIE1ha2Ugc3VyZSB0
aGF0IGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbiB0aGUgY3VycmVudCBjdXJzb3IgaXMKLSAg
Ly8gc2hvd24uCi0gIGZ1bmN0aW9uIGVuc3VyZUN1cnNvclZpc2libGUoY20pIHsKLSAgICByZXNv
bHZlU2Nyb2xsVG9Qb3MoY20pOwotICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgZnJvbSA9
IGN1ciwgdG8gPSBjdXI7Ci0gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgewotICAg
ICAgZnJvbSA9IGN1ci5jaCA/IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSkgOiBjdXI7Ci0gICAg
ICB0byA9IFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSk7Ci0gICAgfQotICAgIGNtLmN1ck9wLnNj
cm9sbFRvUG9zID0ge2Zyb206IGZyb20sIHRvOiB0bywgbWFyZ2luOiBjbS5vcHRpb25zLmN1cnNv
clNjcm9sbE1hcmdpbiwgaXNDdXJzb3I6IHRydWV9OwotICB9Ci0KLSAgLy8gV2hlbiBhbiBvcGVy
YXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyCi0gIC8v
IHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9u
LCB0aGlzCi0gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmll
dyBpbiBhIGNoZWFwIHdheSwgc28KLSAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0
ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuCi0gIGZ1bmN0aW9uIHJlc29sdmVTY3Jv
bGxUb1BvcyhjbSkgewotICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zOwotICAg
IGlmIChyYW5nZSkgewotICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsOwotICAgICAg
dmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVD
b29yZHMoY20sIHJhbmdlLnRvKTsKLSAgICAgIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9z
KGNtLCBNYXRoLm1pbihmcm9tLmxlZnQsIHRvLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSByYW5nZS5tYXJnaW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcm9tLnJpZ2h0
LCB0by5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1h
eChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7Ci0gICAgICBjbS5zY3Jv
bGxUbyhzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBBUEkgVVRJTElUSUVTCi0KLSAgLy8gSW5kZW50IHRoZSBnaXZlbiBsaW5lLiBUaGUgaG93IHBh
cmFtZXRlciBjYW4gYmUgInNtYXJ0IiwKLSAgLy8gImFkZCIvbnVsbCwgInN1YnRyYWN0Iiwgb3Ig
InByZXYiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2UKLSAgLy8gKHR5cGljYWxseSBzZXQgdG8g
dHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eQotICAvLyBsaW5lcyBh
cmUgbm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRoZSBtb2RlIHJldHVybnMgUGFzcwot
ICAvLyBhcmUgbGVmdCBhbG9uZS4KLSAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBh
Z2dyZXNzaXZlKSB7Ci0gICAgdmFyIGRvYyA9IGNtLmRvYywgc3RhdGU7Ci0gICAgaWYgKGhvdyA9
PSBudWxsKSBob3cgPSAiYWRkIjsKLSAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKLSAgICAgIC8v
IEZhbGwgYmFjayB0byAicHJldiIgd2hlbiB0aGUgbW9kZSBkb2Vzbid0IGhhdmUgYW4gaW5kZW50
YXRpb24KLSAgICAgIC8vIG1ldGhvZC4KLSAgICAgIGlmICghY20uZG9jLm1vZGUuaW5kZW50KSBo
b3cgPSAicHJldiI7Ci0gICAgICBlbHNlIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOwot
ICAgIH0KLQotICAgIHZhciB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplOwotICAgIHZhciBs
aW5lID0gZ2V0TGluZShkb2MsIG4pLCBjdXJTcGFjZSA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwg
bnVsbCwgdGFiU2l6ZSk7Ci0gICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgbGluZS5zdGF0ZUFmdGVy
ID0gbnVsbDsKLSAgICB2YXIgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQubWF0Y2goL15ccyov
KVswXSwgaW5kZW50YXRpb247Ci0gICAgaWYgKCFhZ2dyZXNzaXZlICYmICEvXFMvLnRlc3QobGlu
ZS50ZXh0KSkgewotICAgICAgaW5kZW50YXRpb24gPSAwOwotICAgICAgaG93ID0gIm5vdCI7Ci0g
ICAgfSBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgewotICAgICAgaW5kZW50YXRpb24gPSBjbS5k
b2MubW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5n
dGgpLCBsaW5lLnRleHQpOwotICAgICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MpIHsKLSAgICAg
ICAgaWYgKCFhZ2dyZXNzaXZlKSByZXR1cm47Ci0gICAgICAgIGhvdyA9ICJwcmV2IjsKLSAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKGhvdyA9PSAicHJldiIpIHsKLSAgICAgIGlmIChuID4gZG9jLmZp
cnN0KSBpbmRlbnRhdGlvbiA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBuLTEpLnRleHQsIG51
bGwsIHRhYlNpemUpOwotICAgICAgZWxzZSBpbmRlbnRhdGlvbiA9IDA7Ci0gICAgfSBlbHNlIGlm
IChob3cgPT0gImFkZCIpIHsKLSAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBjbS5vcHRp
b25zLmluZGVudFVuaXQ7Ci0gICAgfSBlbHNlIGlmIChob3cgPT0gInN1YnRyYWN0IikgewotICAg
ICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdDsKLSAgICB9
IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0gIm51bWJlciIpIHsKLSAgICAgIGluZGVudGF0aW9uID0g
Y3VyU3BhY2UgKyBob3c7Ci0gICAgfQotICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5k
ZW50YXRpb24pOwotCi0gICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAwOwotICAgIGlm
IChjbS5vcHRpb25zLmluZGVudFdpdGhUYWJzKQotICAgICAgZm9yICh2YXIgaSA9IE1hdGguZmxv
b3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVu
dFN0cmluZyArPSAiXHQiO30KLSAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGluZGVudFN0cmlu
ZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7Ci0KLSAgICBpZiAoaW5kZW50U3RyaW5n
ICE9IGN1clNwYWNlU3RyaW5nKSB7Ci0gICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCBpbmRlbnRT
dHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksICIraW5wdXQi
KTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRW5zdXJlIHRoYXQsIGlmIHRoZSBjdXJzb3Igd2Fz
IGluIHRoZSB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydAotICAgICAgLy8gb2YgdGhlIGxpbmUsIGl0
IGlzIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhhdCBzcGFjZS4KLSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdlID0g
ZG9jLnNlbC5yYW5nZXNbaV07Ci0gICAgICAgIGlmIChyYW5nZS5oZWFkLmxpbmUgPT0gbiAmJiBy
YW5nZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSB7Ci0gICAgICAgICAgdmFyIHBv
cyA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpOwotICAgICAgICAgIHJlcGxhY2VPbmVT
ZWxlY3Rpb24oZG9jLCBpLCBuZXcgUmFuZ2UocG9zLCBwb3MpKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwot
ICB9Ci0KLSAgLy8gVXRpbGl0eSBmb3IgYXBwbHlpbmcgYSBjaGFuZ2UgdG8gYSBsaW5lIGJ5IGhh
bmRsZSBvciBudW1iZXIsCi0gIC8vIHJldHVybmluZyB0aGUgbnVtYmVyIGFuZCBvcHRpb25hbGx5
IHJlZ2lzdGVyaW5nIHRoZSBsaW5lIGFzCi0gIC8vIGNoYW5nZWQuCi0gIGZ1bmN0aW9uIGNoYW5n
ZUxpbmUoY20sIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHsKLSAgICB2YXIgbm8gPSBoYW5kbGUs
IGxpbmUgPSBoYW5kbGUsIGRvYyA9IGNtLmRvYzsKLSAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSAi
bnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOwotICAg
IGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKLSAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51
bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnTGluZUNoYW5nZShjbSwgbm8sIGNoYW5nZVR5
cGUpOwotICAgIHJldHVybiBsaW5lOwotICB9Ci0KLSAgLy8gSGVscGVyIGZvciBkZWxldGluZyB0
ZXh0IG5lYXIgdGhlIHNlbGVjdGlvbihzKSwgdXNlZCB0byBpbXBsZW1lbnQKLSAgLy8gYmFja3Nw
YWNlLCBkZWxldGUsIGFuZCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuCi0gIGZ1bmN0aW9uIGRlbGV0
ZU5lYXJTZWxlY3Rpb24oY20sIGNvbXB1dGUpIHsKLSAgICB2YXIgcmFuZ2VzID0gY20uZG9jLnNl
bC5yYW5nZXMsIGtpbGwgPSBbXTsKLSAgICAvLyBCdWlsZCB1cCBhIHNldCBvZiByYW5nZXMgdG8g
a2lsbCBmaXJzdCwgbWVyZ2luZyBvdmVybGFwcGluZwotICAgIC8vIHJhbmdlcy4KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIHRvS2lsbCA9
IGNvbXB1dGUocmFuZ2VzW2ldKTsKLSAgICAgIHdoaWxlIChraWxsLmxlbmd0aCAmJiBjbXAodG9L
aWxsLmZyb20sIGxzdChraWxsKS50bykgPD0gMCkgewotICAgICAgICB2YXIgcmVwbGFjZWQgPSBr
aWxsLnBvcCgpOwotICAgICAgICBpZiAoY21wKHJlcGxhY2VkLmZyb20sIHRvS2lsbC5mcm9tKSA8
IDApIHsKLSAgICAgICAgICB0b0tpbGwuZnJvbSA9IHJlcGxhY2VkLmZyb207Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGtpbGwucHVzaCh0b0tpbGwpOwotICAg
IH0KLSAgICAvLyBOZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy4KLSAgICBydW5Jbk9w
KGNtLCBmdW5jdGlvbigpIHsKLSAgICAgIGZvciAodmFyIGkgPSBraWxsLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgaS0tKQotICAgICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCAiIiwga2lsbFtpXS5mcm9t
LCBraWxsW2ldLnRvLCAiK2RlbGV0ZSIpOwotICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7
Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBVc2VkIGZvciBob3Jpem9udGFsIHJlbGF0aXZlIG1vdGlv
bi4gRGlyIGlzIC0xIG9yIDEgKGxlZnQgb3IKLSAgLy8gcmlnaHQpLCB1bml0IGNhbiBiZSAiY2hh
ciIsICJjb2x1bW4iIChsaWtlIGNoYXIsIGJ1dCBkb2Vzbid0Ci0gIC8vIGNyb3NzIGxpbmUgYm91
bmRhcmllcyksICJ3b3JkIiAoYWNyb3NzIG5leHQgd29yZCksIG9yICJncm91cCIgKHRvCi0gIC8v
IHRoZSBzdGFydCBvZiBuZXh0IGdyb3VwIG9mIHdvcmQgb3Igbm9uLXdvcmQtbm9uLXdoaXRlc3Bh
Y2UKLSAgLy8gY2hhcnMpLiBUaGUgdmlzdWFsbHkgcGFyYW0gY29udHJvbHMgd2hldGhlciwgaW4g
cmlnaHQtdG8tbGVmdAotICAvLyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0byBtb3ZlIHRvd2Fy
ZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlCi0gIC8vIHN0cmluZywgb3IgdG93YXJkcyB0aGUgY2hh
cmFjdGVyIHRvIHRoZSByaWdodCBvZiB0aGUgY3VycmVudAotICAvLyBwb3NpdGlvbi4gVGhlIHJl
c3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWUKLSAgLy8gcHJvcGVydHkg
aWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KLSAgZnVuY3Rpb24gZmluZFBv
c0goZG9jLCBwb3MsIGRpciwgdW5pdCwgdmlzdWFsbHkpIHsKLSAgICB2YXIgbGluZSA9IHBvcy5s
aW5lLCBjaCA9IHBvcy5jaCwgb3JpZ0RpciA9IGRpcjsKLSAgICB2YXIgbGluZU9iaiA9IGdldExp
bmUoZG9jLCBsaW5lKTsKLSAgICB2YXIgcG9zc2libGUgPSB0cnVlOwotICAgIGZ1bmN0aW9uIGZp
bmROZXh0TGluZSgpIHsKLSAgICAgIHZhciBsID0gbGluZSArIGRpcjsKLSAgICAgIGlmIChsIDwg
ZG9jLmZpcnN0IHx8IGwgPj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHJldHVybiAocG9zc2libGUg
PSBmYWxzZSk7Ci0gICAgICBsaW5lID0gbDsKLSAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGlu
ZShkb2MsIGwpOwotICAgIH0KLSAgICBmdW5jdGlvbiBtb3ZlT25jZShib3VuZFRvTGluZSkgewot
ICAgICAgdmFyIG5leHQgPSAodmlzdWFsbHkgPyBtb3ZlVmlzdWFsbHkgOiBtb3ZlTG9naWNhbGx5
KShsaW5lT2JqLCBjaCwgZGlyLCB0cnVlKTsKLSAgICAgIGlmIChuZXh0ID09IG51bGwpIHsKLSAg
ICAgICAgaWYgKCFib3VuZFRvTGluZSAmJiBmaW5kTmV4dExpbmUoKSkgewotICAgICAgICAgIGlm
ICh2aXN1YWxseSkgY2ggPSAoZGlyIDwgMCA/IGxpbmVSaWdodCA6IGxpbmVMZWZ0KShsaW5lT2Jq
KTsKLSAgICAgICAgICBlbHNlIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggOiAw
OwotICAgICAgICB9IGVsc2UgcmV0dXJuIChwb3NzaWJsZSA9IGZhbHNlKTsKLSAgICAgIH0gZWxz
ZSBjaCA9IG5leHQ7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodW5pdCA9
PSAiY2hhciIpIG1vdmVPbmNlKCk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAiY29sdW1uIikgbW92
ZU9uY2UodHJ1ZSk7Ci0gICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIgfHwgdW5pdCA9PSAiZ3Jv
dXAiKSB7Ci0gICAgICB2YXIgc2F3VHlwZSA9IG51bGwsIGdyb3VwID0gdW5pdCA9PSAiZ3JvdXAi
OwotICAgICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVscGVyKHBvcywgIndv
cmRDaGFycyIpOwotICAgICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkg
ewotICAgICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7Ci0gICAg
ICAgIHZhciBjdXIgPSBsaW5lT2JqLnRleHQuY2hhckF0KGNoKSB8fCAiXG4iOwotICAgICAgICB2
YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gInciCi0gICAgICAgICAgOiBncm91
cCAmJiBjdXIgPT0gIlxuIiA/ICJuIgotICAgICAgICAgIDogIWdyb3VwIHx8IC9ccy8udGVzdChj
dXIpID8gbnVsbAotICAgICAgICAgIDogInAiOwotICAgICAgICBpZiAoZ3JvdXAgJiYgIWZpcnN0
ICYmICF0eXBlKSB0eXBlID0gInMiOwotICAgICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9
IHR5cGUpIHsKLSAgICAgICAgICBpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fQot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUpIHNhd1R5cGUg
PSB0eXBlOwotICAgICAgICBpZiAoZGlyID4gMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSBza2lwQXRvbWljKGRvYywgUG9zKGxp
bmUsIGNoKSwgb3JpZ0RpciwgdHJ1ZSk7Ci0gICAgaWYgKCFwb3NzaWJsZSkgcmVzdWx0LmhpdFNp
ZGUgPSB0cnVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBGb3IgcmVsYXRpdmUg
dmVydGljYWwgbW92ZW1lbnQuIERpciBtYXkgYmUgLTEgb3IgMS4gVW5pdCBjYW4gYmUKLSAgLy8g
InBhZ2UiIG9yICJsaW5lIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRT
aWRlPXRydWUKLSAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1
bWVudC4KLSAgZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7Ci0gICAgdmFy
IGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5OwotICAgIGlmICh1bml0ID09ICJwYWdlIikg
ewotICAgICAgdmFyIHBhZ2VTaXplID0gTWF0aC5taW4oY20uZGlzcGxheS53cmFwcGVyLmNsaWVu
dEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
bGllbnRIZWlnaHQpOwotICAgICAgeSA9IHBvcy50b3AgKyBkaXIgKiAocGFnZVNpemUgLSAoZGly
IDwgMCA/IDEuNSA6IC41KSAqIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOwotICAgIH0gZWxzZSBp
ZiAodW5pdCA9PSAibGluZSIpIHsKLSAgICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMg
OiBwb3MudG9wIC0gMzsKLSAgICB9Ci0gICAgZm9yICg7OykgewotICAgICAgdmFyIHRhcmdldCA9
IGNvb3Jkc0NoYXIoY20sIHgsIHkpOwotICAgICAgaWYgKCF0YXJnZXQub3V0c2lkZSkgYnJlYWs7
Ci0gICAgICBpZiAoZGlyIDwgMCA/IHkgPD0gMCA6IHkgPj0gZG9jLmhlaWdodCkgeyB0YXJnZXQu
aGl0U2lkZSA9IHRydWU7IGJyZWFrOyB9Ci0gICAgICB5ICs9IGRpciAqIDU7Ci0gICAgfQotICAg
IHJldHVybiB0YXJnZXQ7Ci0gIH0KLQotICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBw
b3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuCi0gIGZ1bmN0aW9uIGZpbmRXb3Jk
QXQoY20sIHBvcykgewotICAgIHZhciBkb2MgPSBjbS5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywg
cG9zLmxpbmUpLnRleHQ7Ci0gICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7Ci0g
ICAgaWYgKGxpbmUpIHsKLSAgICAgIHZhciBoZWxwZXIgPSBjbS5nZXRIZWxwZXIocG9zLCAid29y
ZENoYXJzIik7Ci0gICAgICBpZiAoKHBvcy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgp
ICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwotICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxp
bmUuY2hhckF0KHN0YXJ0KTsKLSAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFy
LCBoZWxwZXIpCi0gICAgICAgID8gZnVuY3Rpb24oY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gs
IGhlbHBlcik7IH0KLSAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNo
KSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQotICAgICAgICA6IGZ1bmN0aW9uKGNoKSB7cmV0dXJu
ICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9OwotICAgICAgd2hpbGUgKHN0YXJ0
ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFydDsKLSAgICAgIHdo
aWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7
Ci0gICAgfQotICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBzdGFydCksIFBvcyhw
b3MubGluZSwgZW5kKSk7Ci0gIH0KLQotICAvLyBFRElUT1IgTUVUSE9EUwotCi0gIC8vIFRoZSBw
dWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1lYW5zCi0gIC8vICd3
cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXIn
LgotCi0gIC8vIFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRpdG9yIG1ldGhvZHMu
IE1vc3Qgb2YgdGhlCi0gIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFs
c28gaW5qZWN0ZWQgaW50bwotICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwgZm9yIGJhY2t3YXJk
cyBjb21wYXRpYmlsaXR5IGFuZAotICAvLyBjb252ZW5pZW5jZS4KLQotICBDb2RlTWlycm9yLnBy
b3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvciwKLSAgICBmb2N1czogZnVu
Y3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJbnB1dCh0aGlzKTsgZmFzdFBvbGwodGhpcyk7
fSwKLQotICAgIHNldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uLCB2YWx1ZSkgewotICAgICAgdmFy
IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNbb3B0aW9uXTsKLSAgICAgIGlm
IChvcHRpb25zW29wdGlvbl0gPT0gdmFsdWUgJiYgb3B0aW9uICE9ICJtb2RlIikgcmV0dXJuOwot
ICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7Ci0gICAgICBpZiAob3B0aW9uSGFuZGxlcnMu
aGFzT3duUHJvcGVydHkob3B0aW9uKSkKLSAgICAgICAgb3BlcmF0aW9uKHRoaXMsIG9wdGlvbkhh
bmRsZXJzW29wdGlvbl0pKHRoaXMsIHZhbHVlLCBvbGQpOwotICAgIH0sCi0KLSAgICBnZXRPcHRp
b246IGZ1bmN0aW9uKG9wdGlvbikge3JldHVybiB0aGlzLm9wdGlvbnNbb3B0aW9uXTt9LAotICAg
IGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jO30sCi0KLSAgICBhZGRLZXlNYXA6
IGZ1bmN0aW9uKG1hcCwgYm90dG9tKSB7Ci0gICAgICB0aGlzLnN0YXRlLmtleU1hcHNbYm90dG9t
ID8gInB1c2giIDogInVuc2hpZnQiXShtYXApOwotICAgIH0sCi0gICAgcmVtb3ZlS2V5TWFwOiBm
dW5jdGlvbihtYXApIHsKLSAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwotICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAobWFw
c1tpXSA9PSBtYXAgfHwgKHR5cGVvZiBtYXBzW2ldICE9ICJzdHJpbmciICYmIG1hcHNbaV0ubmFt
ZSA9PSBtYXApKSB7Ci0gICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgYWRkT3ZlcmxheTogbWV0aG9kT3Ao
ZnVuY3Rpb24oc3BlYywgb3B0aW9ucykgewotICAgICAgdmFyIG1vZGUgPSBzcGVjLnRva2VuID8g
c3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsIHNwZWMpOwotICAgICAgaWYg
KG1vZGUuc3RhcnRTdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0
YXRlZnVsLiIpOwotICAgICAgdGhpcy5zdGF0ZS5vdmVybGF5cy5wdXNoKHttb2RlOiBtb2RlLCBt
b2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMub3BhcXVlfSk7Ci0gICAg
ICB0aGlzLnN0YXRlLm1vZGVHZW4rKzsKLSAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICB9KSwK
LSAgICByZW1vdmVPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjKSB7Ci0gICAgICB2YXIg
b3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBvdmVybGF5cy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0u
bW9kZVNwZWM7Ci0gICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Ygc3BlYyA9PSAic3Ry
aW5nIiAmJiBjdXIubmFtZSA9PSBzcGVjKSB7Ci0gICAgICAgICAgb3ZlcmxheXMuc3BsaWNlKGks
IDEpOwotICAgICAgICAgIHRoaXMuc3RhdGUubW9kZUdlbisrOwotICAgICAgICAgIHJlZ0NoYW5n
ZSh0aGlzKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KSwK
LQotICAgIGluZGVudExpbmU6IG1ldGhvZE9wKGZ1bmN0aW9uKG4sIGRpciwgYWdncmVzc2l2ZSkg
ewotICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0cmluZyIgJiYgdHlwZW9mIGRpciAhPSAibnVt
YmVyIikgewotICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IHRoaXMub3B0aW9ucy5zbWFy
dEluZGVudCA/ICJzbWFydCIgOiAicHJldiI7Ci0gICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFk
ZCIgOiAic3VidHJhY3QiOwotICAgICAgfQotICAgICAgaWYgKGlzTGluZSh0aGlzLmRvYywgbikp
IGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZlKTsKLSAgICB9KSwKLSAgICBpbmRl
bnRTZWxlY3Rpb246IG1ldGhvZE9wKGZ1bmN0aW9uKGhvdykgewotICAgICAgdmFyIHJhbmdlcyA9
IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldOwot
ICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkpIHsKLSAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRo
Lm1heChlbmQsIHJhbmdlLmZyb20oKS5saW5lKTsKLSAgICAgICAgICB2YXIgdG8gPSByYW5nZS50
bygpOwotICAgICAgICAgIGVuZCA9IE1hdGgubWluKHRoaXMubGFzdExpbmUoKSwgdG8ubGluZSAt
ICh0by5jaCA/IDAgOiAxKSkgKyAxOwotICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8
IGVuZDsgKytqKQotICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOwotICAgICAg
ICB9IGVsc2UgaWYgKHJhbmdlLmhlYWQubGluZSA+IGVuZCkgewotICAgICAgICAgIGluZGVudExp
bmUodGhpcywgcmFuZ2UuaGVhZC5saW5lLCBob3csIHRydWUpOwotICAgICAgICAgIGVuZCA9IHJh
bmdlLmhlYWQubGluZTsKLSAgICAgICAgICBpZiAoaSA9PSB0aGlzLmRvYy5zZWwucHJpbUluZGV4
KSBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSks
Ci0KLSAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4g
VXNlZnVsIGZvciBoYWNrcwotICAgIC8vIHRoYXQgd2FudCB0byBpbnNwZWN0IHRoZSBtb2RlIHN0
YXRlIChzYXksIGZvciBjb21wbGV0aW9uKS4KLSAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3Ms
IHByZWNpc2UpIHsKLSAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKLSAgICAgIHBvcyA9IGNsaXBQ
b3MoZG9jLCBwb3MpOwotICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUodGhpcywgcG9z
LmxpbmUsIHByZWNpc2UpLCBtb2RlID0gdGhpcy5kb2MubW9kZTsKLSAgICAgIHZhciBsaW5lID0g
Z2V0TGluZShkb2MsIHBvcy5saW5lKTsKLSAgICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3Ry
ZWFtKGxpbmUudGV4dCwgdGhpcy5vcHRpb25zLnRhYlNpemUpOwotICAgICAgd2hpbGUgKHN0cmVh
bS5wb3MgPCBwb3MuY2ggJiYgIXN0cmVhbS5lb2woKSkgewotICAgICAgICBzdHJlYW0uc3RhcnQg
PSBzdHJlYW0ucG9zOwotICAgICAgICB2YXIgc3R5bGUgPSByZWFkVG9rZW4obW9kZSwgc3RyZWFt
LCBzdGF0ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge3N0YXJ0OiBzdHJlYW0uc3RhcnQsCi0g
ICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKLSAgICAgICAgICAgICAgc3RyaW5nOiBzdHJl
YW0uY3VycmVudCgpLAotICAgICAgICAgICAgICB0eXBlOiBzdHlsZSB8fCBudWxsLAotICAgICAg
ICAgICAgICBzdGF0ZTogc3RhdGV9OwotICAgIH0sCi0KLSAgICBnZXRUb2tlblR5cGVBdDogZnVu
Y3Rpb24ocG9zKSB7Ci0gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpOwotICAgICAg
dmFyIHN0eWxlcyA9IGdldExpbmVTdHlsZXModGhpcywgZ2V0TGluZSh0aGlzLmRvYywgcG9zLmxp
bmUpKTsKLSAgICAgIHZhciBiZWZvcmUgPSAwLCBhZnRlciA9IChzdHlsZXMubGVuZ3RoIC0gMSkg
LyAyLCBjaCA9IHBvcy5jaDsKLSAgICAgIHZhciB0eXBlOwotICAgICAgaWYgKGNoID09IDApIHR5
cGUgPSBzdHlsZXNbMl07Ci0gICAgICBlbHNlIGZvciAoOzspIHsKLSAgICAgICAgdmFyIG1pZCA9
IChiZWZvcmUgKyBhZnRlcikgPj4gMTsKLSAgICAgICAgaWYgKChtaWQgPyBzdHlsZXNbbWlkICog
MiAtIDFdIDogMCkgPj0gY2gpIGFmdGVyID0gbWlkOwotICAgICAgICBlbHNlIGlmIChzdHlsZXNb
bWlkICogMiArIDFdIDwgY2gpIGJlZm9yZSA9IG1pZCArIDE7Ci0gICAgICAgIGVsc2UgeyB0eXBl
ID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWs7IH0KLSAgICAgIH0KLSAgICAgIHZhciBjdXQg
PSB0eXBlID8gdHlwZS5pbmRleE9mKCJjbS1vdmVybGF5ICIpIDogLTE7Ci0gICAgICByZXR1cm4g
Y3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNlKDAsIGN1dCAtIDEp
OwotICAgIH0sCi0KLSAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAgdmFyIG1v
ZGUgPSB0aGlzLmRvYy5tb2RlOwotICAgICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgcmV0dXJuIG1v
ZGU7Ci0gICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tl
bkF0KHBvcykuc3RhdGUpLm1vZGU7Ci0gICAgfSwKLQotICAgIGdldEhlbHBlcjogZnVuY3Rpb24o
cG9zLCB0eXBlKSB7Ci0gICAgICByZXR1cm4gdGhpcy5nZXRIZWxwZXJzKHBvcywgdHlwZSlbMF07
Ci0gICAgfSwKLQotICAgIGdldEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlwZSkgewotICAgICAg
dmFyIGZvdW5kID0gW107Ci0gICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkp
IHJldHVybiBoZWxwZXJzOwotICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0g
dGhpcy5nZXRNb2RlQXQocG9zKTsKLSAgICAgIGlmICh0eXBlb2YgbW9kZVt0eXBlXSA9PSAic3Ry
aW5nIikgewotICAgICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgZm91bmQucHVzaChoZWxwW21v
ZGVbdHlwZV1dKTsKLSAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkgewotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG1vZGVbdHlwZV0ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIg
dmFsID0gaGVscFttb2RlW3R5cGVdW2ldXTsKLSAgICAgICAgICBpZiAodmFsKSBmb3VuZC5wdXNo
KHZhbCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobW9kZS5oZWxwZXJUeXBlICYmIGhl
bHBbbW9kZS5oZWxwZXJUeXBlXSkgewotICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxw
ZXJUeXBlXSk7Ci0gICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkgewotICAgICAgICBm
b3VuZC5wdXNoKGhlbHBbbW9kZS5uYW1lXSk7Ci0gICAgICB9Ci0gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGhlbHAuX2dsb2JhbC5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgY3VyID0gaGVs
cC5fZ2xvYmFsW2ldOwotICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhpcykgJiYgaW5kZXhP
Zihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpCi0gICAgICAgICAgZm91bmQucHVzaChjdXIudmFsKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBmb3VuZDsKLSAgICB9LAotCi0gICAgZ2V0U3RhdGVBZnRl
cjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgewotICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwot
ICAgICAgbGluZSA9IGNsaXBMaW5lKGRvYywgbGluZSA9PSBudWxsID8gZG9jLmZpcnN0ICsgZG9j
LnNpemUgLSAxOiBsaW5lKTsKLSAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5l
ICsgMSwgcHJlY2lzZSk7Ci0gICAgfSwKLQotICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3Rh
cnQsIG1vZGUpIHsKLSAgICAgIHZhciBwb3MsIHJhbmdlID0gdGhpcy5kb2Muc2VsLnByaW1hcnko
KTsKLSAgICAgIGlmIChzdGFydCA9PSBudWxsKSBwb3MgPSByYW5nZS5oZWFkOwotICAgICAgZWxz
ZSBpZiAodHlwZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBz
dGFydCk7Ci0gICAgICBlbHNlIHBvcyA9IHN0YXJ0ID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8o
KTsKLSAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8ICJwYWdlIik7
Ci0gICAgfSwKLQotICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcywgbW9kZSkgewotICAgICAg
cmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSwgbW9kZSB8fCAi
cGFnZSIpOwotICAgIH0sCi0KLSAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUp
IHsKLSAgICAgIGNvb3JkcyA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCBjb29yZHMsIG1vZGUgfHwg
InBhZ2UiKTsKLSAgICAgIHJldHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29y
ZHMudG9wKTsKLSAgICB9LAotCi0gICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1v
ZGUpIHsKLSAgICAgIGhlaWdodCA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCB7dG9wOiBoZWlnaHQs
IGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9wOwotICAgICAgcmV0dXJuIGxpbmVBdEhlaWdo
dCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpOwotICAgIH0sCi0g
ICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlKSB7Ci0gICAgICB2YXIgZW5kID0g
ZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOwotICAgICAg
aWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OwotICAgICAg
ZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KLSAgICAg
IHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7Ci0gICAgICByZXR1cm4gaW50
b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8ICJw
YWdlIikudG9wICsKLSAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAtIGhlaWdodEF0TGlu
ZShsaW5lT2JqKSA6IDApOwotICAgIH0sCi0KLSAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rp
b24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSk7IH0sCi0gICAgZGVmYXVsdENo
YXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgodGhpcy5kaXNwbGF5KTsgfSwK
LQotICAgIHNldEd1dHRlck1hcmtlcjogbWV0aG9kT3AoZnVuY3Rpb24obGluZSwgZ3V0dGVySUQs
IHZhbHVlKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5lLCAiZ3V0dGVyIiwg
ZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2Vy
cyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pOwotICAgICAgICBtYXJrZXJzW2d1dHRlcklE
XSA9IHZhbHVlOwotICAgICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFya2VycykpIGxpbmUu
Z3V0dGVyTWFya2VycyA9IG51bGw7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSk7Ci0g
ICAgfSksCi0KLSAgICBjbGVhckd1dHRlcjogbWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHsK
LSAgICAgIHZhciBjbSA9IHRoaXMsIGRvYyA9IGNtLmRvYywgaSA9IGRvYy5maXJzdDsKLSAgICAg
IGRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2Vy
cyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7Ci0gICAgICAgICAgbGluZS5ndXR0
ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7Ci0gICAgICAgICAgcmVnTGluZUNoYW5nZShjbSwg
aSwgImd1dHRlciIpOwotICAgICAgICAgIGlmIChpc0VtcHR5KGxpbmUuZ3V0dGVyTWFya2Vycykp
IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgKytpOwotICAg
ICAgfSk7Ci0gICAgfSksCi0KLSAgICBhZGRMaW5lQ2xhc3M6IG1ldGhvZE9wKGZ1bmN0aW9uKGhh
bmRsZSwgd2hlcmUsIGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxl
LCAiY2xhc3MiLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0g
InRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIg
OiAid3JhcENsYXNzIjsKLSAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xz
OwotICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKCIoPzpefFxccykiICsgY2xzICsgIig/OiR8
XFxzKSIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWxzZSBsaW5l
W3Byb3BdICs9ICIgIiArIGNsczsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9KTsKLSAg
ICB9KSwKLQotICAgIHJlbW92ZUxpbmVDbGFzczogbWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3
aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsICJjbGFz
cyIsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIg
PyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIiA6ICJ3cmFw
Q2xhc3MiOwotICAgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXTsKLSAgICAgICAgaWYgKCFjdXIp
IHJldHVybiBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIGxpbmVbcHJvcF0g
PSBudWxsOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2go
bmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIgKyBjbHMgKyAiKD86JHxcXHMrKSIpKTsKLSAgICAgICAg
ICBpZiAoIWZvdW5kKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgdmFyIGVuZCA9IGZvdW5kLmlu
ZGV4ICsgZm91bmRbMF0ubGVuZ3RoOwotICAgICAgICAgIGxpbmVbcHJvcF0gPSBjdXIuc2xpY2Uo
MCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5pbmRleCB8fCBlbmQgPT0gY3VyLmxlbmd0aCA/ICIi
IDogIiAiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIGFkZExpbmVXaWRnZXQ6IG1ldGhv
ZE9wKGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewotICAgICAgcmV0dXJuIGFkZExp
bmVXaWRnZXQodGhpcywgaGFuZGxlLCBub2RlLCBvcHRpb25zKTsKLSAgICB9KSwKLQotICAgIHJl
bW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xlYXIoKTsgfSwKLQot
ICAgIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAodHlwZW9mIGxpbmUgPT0g
Im51bWJlciIpIHsKLSAgICAgICAgaWYgKCFpc0xpbmUodGhpcy5kb2MsIGxpbmUpKSByZXR1cm4g
bnVsbDsKLSAgICAgICAgdmFyIG4gPSBsaW5lOwotICAgICAgICBsaW5lID0gZ2V0TGluZSh0aGlz
LmRvYywgbGluZSk7Ci0gICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKLSAgICAgICAgaWYgKG4gPT0gbnVs
bCkgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTog
bGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1dHRlck1hcmtlcnMs
Ci0gICAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJnQ2xhc3M6IGxpbmUu
YmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcywKLSAgICAgICAgICAgICAgd2lkZ2V0
czogbGluZS53aWRnZXRzfTsKLSAgICB9LAotCi0gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uKCkg
eyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52
aWV3VG99O30sCi0KLSAgICBhZGRXaWRnZXQ6IGZ1bmN0aW9uKHBvcywgbm9kZSwgc2Nyb2xsLCB2
ZXJ0LCBob3JpeikgewotICAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXk7Ci0gICAgICBw
b3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSk7Ci0gICAgICB2
YXIgdG9wID0gcG9zLmJvdHRvbSwgbGVmdCA9IHBvcy5sZWZ0OwotICAgICAgbm9kZS5zdHlsZS5w
b3NpdGlvbiA9ICJhYnNvbHV0ZSI7Ci0gICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5v
ZGUpOwotICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB7Ci0gICAgICAgIHRvcCA9IHBvcy50b3A7
Ci0gICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gImFib3ZlIiB8fCB2ZXJ0ID09ICJuZWFyIikgewot
ICAgICAgICB2YXIgdnNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdo
dCwgdGhpcy5kb2MuaGVpZ2h0KSwKLSAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS5z
aXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xpZW50V2lkdGgpOwotICAgICAg
ICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBzcGVjaWZpZWQgYW5kIHBvc3Np
YmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcgYmVsb3cKLSAgICAgICAgaWYg
KCh2ZXJ0ID09ICdhYm92ZScgfHwgcG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0ID4gdnNw
YWNlKSAmJiBwb3MudG9wID4gbm9kZS5vZmZzZXRIZWlnaHQpCi0gICAgICAgICAgdG9wID0gcG9z
LnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OwotICAgICAgICBlbHNlIGlmIChwb3MuYm90dG9tICsg
bm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKQotICAgICAgICAgIHRvcCA9IHBvcy5ib3R0b207
Ci0gICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKLSAgICAgICAg
ICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKLSAgICAgIH0KLSAgICAgIG5vZGUu
c3R5bGUudG9wID0gdG9wICsgInB4IjsKLSAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5
bGUucmlnaHQgPSAiIjsKLSAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7Ci0gICAgICAgIGxl
ZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKLSAgICAg
ICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KGhvcml6ID09ICJsZWZ0IikgbGVmdCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJt
aWRkbGUiKSBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdp
ZHRoKSAvIDI7Ci0gICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwotICAgICAg
fQotICAgICAgaWYgKHNjcm9sbCkKLSAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcywgbGVmdCwg
dG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwot
ICAgIH0sCi0KLSAgICB0cmlnZ2VyT25LZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLAotICAg
IHRyaWdnZXJPbktleVByZXNzOiBtZXRob2RPcChvbktleVByZXNzKSwKLSAgICB0cmlnZ2VyT25L
ZXlVcDogbWV0aG9kT3Aob25LZXlVcCksCi0KLSAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21k
KSB7Ci0gICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSkKLSAgICAgICAgcmV0
dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7Ci0gICAgfSwKLQotICAgIGZpbmRQb3NIOiBmdW5jdGlv
bihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7Ci0gICAgICB2YXIgZGlyID0gMTsKLSAg
ICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9Ci0gICAg
ICBmb3IgKHZhciBpID0gMCwgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7IGkgPCBhbW91
bnQ7ICsraSkgewotICAgICAgICBjdXIgPSBmaW5kUG9zSCh0aGlzLmRvYywgY3VyLCBkaXIsIHVu
aXQsIHZpc3VhbGx5KTsKLSAgICAgICAgaWYgKGN1ci5oaXRTaWRlKSBicmVhazsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBjdXI7Ci0gICAgfSwKLQotICAgIG1vdmVIOiBtZXRob2RPcChmdW5jdGlv
bihkaXIsIHVuaXQpIHsKLSAgICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgICBjbS5leHRlbmRTZWxl
Y3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgaWYgKGNtLmRpc3BsYXkuc2hpZnQg
fHwgY20uZG9jLmV4dGVuZCB8fCByYW5nZS5lbXB0eSgpKQotICAgICAgICAgIHJldHVybiBmaW5k
UG9zSChjbS5kb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgY20ub3B0aW9ucy5ydGxNb3ZlVmlz
dWFsbHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5m
cm9tKCkgOiByYW5nZS50bygpOwotICAgICAgfSwgc2VsX21vdmUpOwotICAgIH0pLAotCi0gICAg
ZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7Ci0gICAgICB2YXIgc2VsID0g
dGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYzsKLSAgICAgIGlmIChzZWwuc29tZXRoaW5nU2Vs
ZWN0ZWQoKSkKLSAgICAgICAgZG9jLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICIrZGVsZXRl
Iik7Ci0gICAgICBlbHNlCi0gICAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24odGhpcywgZnVuY3Rp
b24ocmFuZ2UpIHsKLSAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9zSChkb2MsIHJhbmdlLmhl
YWQsIGRpciwgdW5pdCwgZmFsc2UpOwotICAgICAgICAgIHJldHVybiBkaXIgPCAwID8ge2Zyb206
IG90aGVyLCB0bzogcmFuZ2UuaGVhZH0gOiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IG90aGVyfTsK
LSAgICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBmaW5kUG9zVjogZnVuY3Rpb24oZnJvbSwgYW1v
dW50LCB1bml0LCBnb2FsQ29sdW1uKSB7Ci0gICAgICB2YXIgZGlyID0gMSwgeCA9IGdvYWxDb2x1
bW47Ci0gICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsg
fQotICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IGNsaXBQb3ModGhpcy5kb2MsIGZyb20pOyBp
IDwgYW1vdW50OyArK2kpIHsKLSAgICAgICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3Jkcyh0aGlz
LCBjdXIsICJkaXYiKTsKLSAgICAgICAgaWYgKHggPT0gbnVsbCkgeCA9IGNvb3Jkcy5sZWZ0Owot
ICAgICAgICBlbHNlIGNvb3Jkcy5sZWZ0ID0geDsKLSAgICAgICAgY3VyID0gZmluZFBvc1YodGhp
cywgY29vcmRzLCBkaXIsIHVuaXQpOwotICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIGJyZWFrOwot
ICAgICAgfQotICAgICAgcmV0dXJuIGN1cjsKLSAgICB9LAotCi0gICAgbW92ZVY6IG1ldGhvZE9w
KGZ1bmN0aW9uKGRpciwgdW5pdCkgewotICAgICAgdmFyIGNtID0gdGhpcywgZG9jID0gdGhpcy5k
b2MsIGdvYWxzID0gW107Ci0gICAgICB2YXIgY29sbGFwc2UgPSAhY20uZGlzcGxheS5zaGlmdCAm
JiAhZG9jLmV4dGVuZCAmJiBkb2Muc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCk7Ci0gICAgICBkb2Mu
ZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIGlmIChjb2xsYXBz
ZSkKLSAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7
Ci0gICAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCByYW5nZS5oZWFkLCAiZGl2
Iik7Ci0gICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwpIGhlYWRQb3MubGVmdCA9
IHJhbmdlLmdvYWxDb2x1bW47Ci0gICAgICAgIGdvYWxzLnB1c2goaGVhZFBvcy5sZWZ0KTsKLSAg
ICAgICAgdmFyIHBvcyA9IGZpbmRQb3NWKGNtLCBoZWFkUG9zLCBkaXIsIHVuaXQpOwotICAgICAg
ICBpZiAodW5pdCA9PSAicGFnZSIgJiYgcmFuZ2UgPT0gZG9jLnNlbC5wcmltYXJ5KCkpCi0gICAg
ICAgICAgYWRkVG9TY3JvbGxQb3MoY20sIG51bGwsIGNoYXJDb29yZHMoY20sIHBvcywgImRpdiIp
LnRvcCAtIGhlYWRQb3MudG9wKTsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICAgIH0sIHNlbF9t
b3ZlKTsKLSAgICAgIGlmIChnb2Fscy5sZW5ndGgpIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNl
bC5yYW5nZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIGRvYy5zZWwucmFuZ2VzW2ldLmdvYWxDb2x1
bW4gPSBnb2Fsc1tpXTsKLSAgICB9KSwKLQotICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24o
dmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRoaXMuc3RhdGUu
b3ZlcndyaXRlKSByZXR1cm47Ci0gICAgICBpZiAodGhpcy5zdGF0ZS5vdmVyd3JpdGUgPSAhdGhp
cy5zdGF0ZS5vdmVyd3JpdGUpCi0gICAgICAgIGFkZENsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JE
aXYsICJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOwotICAgICAgZWxzZQotICAgICAgICBybUNsYXNz
KHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsICJDb2RlTWlycm9yLW92ZXJ3cml0ZSIpOwotCi0gICAg
ICBzaWduYWwodGhpcywgIm92ZXJ3cml0ZVRvZ2dsZSIsIHRoaXMsIHRoaXMuc3RhdGUub3Zlcndy
aXRlKTsKLSAgICB9LAotICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0dXJuIGFjdGl2ZUVs
dCgpID09IHRoaXMuZGlzcGxheS5pbnB1dDsgfSwKLQotICAgIHNjcm9sbFRvOiBtZXRob2RPcChm
dW5jdGlvbih4LCB5KSB7Ci0gICAgICBpZiAoeCAhPSBudWxsIHx8IHkgIT0gbnVsbCkgcmVzb2x2
ZVNjcm9sbFRvUG9zKHRoaXMpOwotICAgICAgaWYgKHggIT0gbnVsbCkgdGhpcy5jdXJPcC5zY3Jv
bGxMZWZ0ID0geDsKLSAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsVG9wID0g
eTsKLSAgICB9KSwKLSAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBz
Y3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3JvbGxlckN1dE9mZjsKLSAg
ICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3Jv
bGxUb3AsCi0gICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY28s
IHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNvLAotICAgICAgICAgICAgICBjbGllbnRI
ZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0aDogc2Nyb2xsZXIu
Y2xpZW50V2lkdGggLSBjb307Ci0gICAgfSwKLQotICAgIHNjcm9sbEludG9WaWV3OiBtZXRob2RP
cChmdW5jdGlvbihyYW5nZSwgbWFyZ2luKSB7Ci0gICAgICBpZiAocmFuZ2UgPT0gbnVsbCkgewot
ICAgICAgICByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwucHJpbWFyeSgpLmhlYWQsIHRvOiBu
dWxsfTsKLSAgICAgICAgaWYgKG1hcmdpbiA9PSBudWxsKSBtYXJnaW4gPSB0aGlzLm9wdGlvbnMu
Y3Vyc29yU2Nyb2xsTWFyZ2luOwotICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmFuZ2UgPT0gIm51
bWJlciIpIHsKLSAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAwKSwgdG86IG51bGx9
OwotICAgICAgfSBlbHNlIGlmIChyYW5nZS5mcm9tID09IG51bGwpIHsKLSAgICAgICAgcmFuZ2Ug
PSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTsKLSAgICAgIH0KLSAgICAgIGlmICghcmFuZ2UudG8p
IHJhbmdlLnRvID0gcmFuZ2UuZnJvbTsKLSAgICAgIHJhbmdlLm1hcmdpbiA9IG1hcmdpbiB8fCAw
OwotCi0gICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHsKLSAgICAgICAgcmVzb2x2
ZVNjcm9sbFRvUG9zKHRoaXMpOwotICAgICAgICB0aGlzLmN1ck9wLnNjcm9sbFRvUG9zID0gcmFu
Z2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBv
cyh0aGlzLCBNYXRoLm1pbihyYW5nZS5mcm9tLmxlZnQsIHJhbmdlLnRvLmxlZnQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihyYW5nZS5mcm9tLnRvcCwg
cmFuZ2UudG8udG9wKSAtIHJhbmdlLm1hcmdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWF0aC5tYXgocmFuZ2UuZnJvbS5yaWdodCwgcmFuZ2UudG8ucmlnaHQpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChyYW5nZS5mcm9t
LmJvdHRvbSwgcmFuZ2UudG8uYm90dG9tKSArIHJhbmdlLm1hcmdpbik7Ci0gICAgICAgIHRoaXMu
c2Nyb2xsVG8oc1Bvcy5zY3JvbGxMZWZ0LCBzUG9zLnNjcm9sbFRvcCk7Ci0gICAgICB9Ci0gICAg
fSksCi0KLSAgICBzZXRTaXplOiBtZXRob2RPcChmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7Ci0g
ICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7Ci0gICAgICAgIHJldHVybiB0eXBlb2YgdmFs
ID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJpbmcodmFsKSkgPyB2YWwgKyAicHgiIDog
dmFsOwotICAgICAgfQotICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHRoaXMuZGlzcGxheS53cmFw
cGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsKLSAgICAgIGlmIChoZWlnaHQgIT0g
bnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdo
dCk7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgY2xlYXJMaW5lTWVhc3Vy
ZW1lbnRDYWNoZSh0aGlzKTsKLSAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwot
ICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7Ci0gICAgfSksCi0KLSAgICBvcGVy
YXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCi0KLSAgICByZWZy
ZXNoOiBtZXRob2RPcChmdW5jdGlvbigpIHsKLSAgICAgIHZhciBvbGRIZWlnaHQgPSB0aGlzLmRp
c3BsYXkuY2FjaGVkVGV4dEhlaWdodDsKLSAgICAgIHJlZ0NoYW5nZSh0aGlzKTsKLSAgICAgIHRo
aXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwotICAgICAgY2xlYXJDYWNoZXModGhpcyk7Ci0g
ICAgICB0aGlzLnNjcm9sbFRvKHRoaXMuZG9jLnNjcm9sbExlZnQsIHRoaXMuZG9jLnNjcm9sbFRv
cCk7Ci0gICAgICB1cGRhdGVHdXR0ZXJTcGFjZSh0aGlzKTsKLSAgICAgIGlmIChvbGRIZWlnaHQg
PT0gbnVsbCB8fCBNYXRoLmFicyhvbGRIZWlnaHQgLSB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSkp
ID4gLjUpCi0gICAgICAgIGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7Ci0gICAgICBzaWduYWwo
dGhpcywgInJlZnJlc2giLCB0aGlzKTsKLSAgICB9KSwKLQotICAgIHN3YXBEb2M6IG1ldGhvZE9w
KGZ1bmN0aW9uKGRvYykgewotICAgICAgdmFyIG9sZCA9IHRoaXMuZG9jOwotICAgICAgb2xkLmNt
ID0gbnVsbDsKLSAgICAgIGF0dGFjaERvYyh0aGlzLCBkb2MpOwotICAgICAgY2xlYXJDYWNoZXMo
dGhpcyk7Ci0gICAgICByZXNldElucHV0KHRoaXMpOwotICAgICAgdGhpcy5zY3JvbGxUbyhkb2Mu
c2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7Ci0gICAgICBzaWduYWxMYXRlcih0aGlzLCAic3dh
cERvYyIsIHRoaXMsIG9sZCk7Ci0gICAgICByZXR1cm4gb2xkOwotICAgIH0pLAotCi0gICAgZ2V0
SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0O30sCi0gICAg
Z2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVy
O30sCi0gICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3Bs
YXkuc2Nyb2xsZXI7fSwKLSAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0
aGlzLmRpc3BsYXkuZ3V0dGVyczt9Ci0gIH07Ci0gIGV2ZW50TWl4aW4oQ29kZU1pcnJvcik7Ci0K
LSAgLy8gT1BUSU9OIERFRkFVTFRTCi0KLSAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBv
cHRpb25zLgotICB2YXIgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307Ci0gIC8v
IEZ1bmN0aW9ucyB0byBydW4gd2hlbiBvcHRpb25zIGFyZSBjaGFuZ2VkLgotICB2YXIgb3B0aW9u
SGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzID0ge307Ci0KLSAgZnVuY3Rpb24g
b3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkgewotICAgIENvZGVNaXJyb3Iu
ZGVmYXVsdHNbbmFtZV0gPSBkZWZsdDsKLSAgICBpZiAoaGFuZGxlKSBvcHRpb25IYW5kbGVyc1tu
YW1lXSA9Ci0gICAgICBub3RPbkluaXQgPyBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtpZiAob2xk
ICE9IEluaXQpIGhhbmRsZShjbSwgdmFsLCBvbGQpO30gOiBoYW5kbGU7Ci0gIH0KLQotICAvLyBQ
YXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLgotICB2
YXIgSW5pdCA9IENvZGVNaXJyb3IuSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4g
IkNvZGVNaXJyb3IuSW5pdCI7fX07Ci0KLSAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwgY2Fs
bGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleQotICAvLyBoYXZlIHRvIGJlIGlu
aXRpYWxpemVkIGJlZm9yZSB0aGUgZWRpdG9yIGNhbiBzdGFydCBhdCBhbGwuCi0gIG9wdGlvbigi
dmFsdWUiLCAiIiwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLnNldFZhbHVlKHZhbCk7Ci0g
IH0sIHRydWUpOwotICBvcHRpb24oIm1vZGUiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0g
ICAgY20uZG9jLm1vZGVPcHRpb24gPSB2YWw7Ci0gICAgbG9hZE1vZGUoY20pOwotICB9LCB0cnVl
KTsKLQotICBvcHRpb24oImluZGVudFVuaXQiLCAyLCBsb2FkTW9kZSwgdHJ1ZSk7Ci0gIG9wdGlv
bigiaW5kZW50V2l0aFRhYnMiLCBmYWxzZSk7Ci0gIG9wdGlvbigic21hcnRJbmRlbnQiLCB0cnVl
KTsKLSAgb3B0aW9uKCJ0YWJTaXplIiwgNCwgZnVuY3Rpb24oY20pIHsKLSAgICByZXNldE1vZGVT
dGF0ZShjbSk7Ci0gICAgY2xlYXJDYWNoZXMoY20pOwotICAgIHJlZ0NoYW5nZShjbSk7Ci0gIH0s
IHRydWUpOwotICBvcHRpb24oInNwZWNpYWxDaGFycyIsIC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFk
XHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgY20u
b3B0aW9ucy5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2UgKyAodmFsLnRlc3Qo
Ilx0IikgPyAiIiA6ICJ8XHQiKSwgImciKTsKLSAgICBjbS5yZWZyZXNoKCk7Ci0gIH0sIHRydWUp
OwotICBvcHRpb24oInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLCBkZWZhdWx0U3BlY2lhbENoYXJQ
bGFjZWhvbGRlciwgZnVuY3Rpb24oY20pIHtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7Ci0gIG9wdGlv
bigiZWxlY3RyaWNDaGFycyIsIHRydWUpOwotICBvcHRpb24oInJ0bE1vdmVWaXN1YWxseSIsICF3
aW5kb3dzKTsKLSAgb3B0aW9uKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCB0cnVlKTsKLQotICBv
cHRpb24oInRoZW1lIiwgImRlZmF1bHQiLCBmdW5jdGlvbihjbSkgewotICAgIHRoZW1lQ2hhbmdl
ZChjbSk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9LCB0cnVlKTsKLSAgb3B0aW9uKCJr
ZXlNYXAiLCAiZGVmYXVsdCIsIGtleU1hcENoYW5nZWQpOwotICBvcHRpb24oImV4dHJhS2V5cyIs
IG51bGwpOwotCi0gIG9wdGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdl
ZCwgdHJ1ZSk7Ci0gIG9wdGlvbigiZ3V0dGVycyIsIFtdLCBmdW5jdGlvbihjbSkgewotICAgIHNl
dEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKLSAgICBndXR0ZXJzQ2hhbmdlZChj
bSk7Ci0gIH0sIHRydWUpOwotICBvcHRpb24oImZpeGVkR3V0dGVyIiwgdHJ1ZSwgZnVuY3Rpb24o
Y20sIHZhbCkgewotICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29t
cGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAiOwotICAgIGNtLnJlZnJl
c2goKTsKLSAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIi
LCBmYWxzZSwgdXBkYXRlU2Nyb2xsYmFycywgdHJ1ZSk7Ci0gIG9wdGlvbigibGluZU51bWJlcnMi
LCBmYWxzZSwgZnVuY3Rpb24oY20pIHsKLSAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20u
b3B0aW9ucyk7Ci0gICAgZ3V0dGVyc0NoYW5nZWQoY20pOwotICB9LCB0cnVlKTsKLSAgb3B0aW9u
KCJmaXJzdExpbmVOdW1iZXIiLCAxLCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigi
bGluZU51bWJlckZvcm1hdHRlciIsIGZ1bmN0aW9uKGludGVnZXIpIHtyZXR1cm4gaW50ZWdlcjt9
LCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7Ci0gIG9wdGlvbigic2hvd0N1cnNvcldoZW5TZWxlY3Rp
bmciLCBmYWxzZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKLQotICBvcHRpb24oInJlc2V0U2Vs
ZWN0aW9uT25Db250ZXh0TWVudSIsIHRydWUpOwotCi0gIG9wdGlvbigicmVhZE9ubHkiLCBmYWxz
ZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGlmICh2YWwgPT0gIm5vY3Vyc29yIikgewotICAg
ICAgb25CbHVyKGNtKTsKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQuYmx1cigpOwotICAgICAgY20u
ZGlzcGxheS5kaXNhYmxlZCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNtLmRpc3BsYXku
ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgIGlmICghdmFsKSByZXNldElucHV0KGNtKTsKLSAgICB9
Ci0gIH0pOwotICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFs
KSB7aWYgKCF2YWwpIHJlc2V0SW5wdXQoY20pO30sIHRydWUpOwotICBvcHRpb24oImRyYWdEcm9w
IiwgdHJ1ZSk7Ci0KLSAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwotICBvcHRpb24o
ImN1cnNvclNjcm9sbE1hcmdpbiIsIDApOwotICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwot
ICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKLSAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwot
ICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTsKLSAg
b3B0aW9uKCJhZGRNb2RlQ2xhc3MiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwotICBv
cHRpb24oInBvbGxJbnRlcnZhbCIsIDEwMCk7Ci0gIG9wdGlvbigidW5kb0RlcHRoIiwgMjAwLCBm
dW5jdGlvbihjbSwgdmFsKXtjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7fSk7Ci0gIG9w
dGlvbigiaGlzdG9yeUV2ZW50RGVsYXkiLCAxMjUwKTsKLSAgb3B0aW9uKCJ2aWV3cG9ydE1hcmdp
biIsIDEwLCBmdW5jdGlvbihjbSl7Y20ucmVmcmVzaCgpO30sIHRydWUpOwotICBvcHRpb24oIm1h
eEhpZ2hsaWdodExlbmd0aCIsIDEwMDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7Ci0gIG9wdGlv
bigibW92ZUlucHV0V2l0aEN1cnNvciIsIHRydWUsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKLSAgICBp
ZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3AgPSBjbS5kaXNwbGF5LmlucHV0
RGl2LnN0eWxlLmxlZnQgPSAwOwotICB9KTsKLQotICBvcHRpb24oInRhYmluZGV4IiwgbnVsbCwg
ZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGNtLmRpc3BsYXkuaW5wdXQudGFiSW5kZXggPSB2YWwg
fHwgIiI7Ci0gIH0pOwotICBvcHRpb24oImF1dG9mb2N1cyIsIG51bGwpOwotCi0gIC8vIE1PREUg
REVGSU5JVElPTiBBTkQgUVVFUllJTkcKLQotICAvLyBLbm93biBtb2RlcywgYnkgbmFtZSBhbmQg
YnkgTUlNRQotICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1vZGVzID0ge30sIG1pbWVNb2RlcyA9
IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307Ci0KLSAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBz
dG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzCi0gIC8vIHVzZWQgYnkg
KGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHkKLSAg
Ly8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmlu
ZSBjYWxscy4pCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUp
IHsKLSAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJudWxsIikg
Q29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA+IDIpIHsKLSAgICAgIG1vZGUuZGVwZW5kZW5jaWVzID0gW107Ci0gICAgICBmb3IgKHZhciBp
ID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgbW9kZS5kZXBlbmRlbmNpZXMucHVzaChh
cmd1bWVudHNbaV0pOwotICAgIH0KLSAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7Ci0gIH07Ci0KLSAg
Q29kZU1pcnJvci5kZWZpbmVNSU1FID0gZnVuY3Rpb24obWltZSwgc3BlYykgewotICAgIG1pbWVN
b2Rlc1ttaW1lXSA9IHNwZWM7Ci0gIH07Ci0KLSAgLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEge25h
bWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZQotICAvLyBzdHJpbmcsIHJl
dHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC4KLSAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IGZ1
bmN0aW9uKHNwZWMpIHsKLSAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIgJiYgbWltZU1v
ZGVzLmhhc093blByb3BlcnR5KHNwZWMpKSB7Ci0gICAgICBzcGVjID0gbWltZU1vZGVzW3NwZWNd
OwotICAgIH0gZWxzZSBpZiAoc3BlYyAmJiB0eXBlb2Ygc3BlYy5uYW1lID09ICJzdHJpbmciICYm
IG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7Ci0gICAgICB2YXIgZm91bmQg
PSBtaW1lTW9kZXNbc3BlYy5uYW1lXTsKLSAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gInN0cmlu
ZyIpIGZvdW5kID0ge25hbWU6IGZvdW5kfTsKLSAgICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQs
IHNwZWMpOwotICAgICAgc3BlYy5uYW1lID0gZm91bmQubmFtZTsKLSAgICB9IGVsc2UgaWYgKHR5
cGVvZiBzcGVjID09ICJzdHJpbmciICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChz
cGVjKSkgewotICAgICAgcmV0dXJuIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoImFwcGxpY2F0aW9u
L3htbCIpOwotICAgIH0KLSAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIpIHJldHVybiB7
bmFtZTogc3BlY307Ci0gICAgZWxzZSByZXR1cm4gc3BlYyB8fCB7bmFtZTogIm51bGwifTsKLSAg
fTsKLQotICAvLyBHaXZlbiBhIG1vZGUgc3BlYyAoYW55dGhpbmcgdGhhdCByZXNvbHZlTW9kZSBh
Y2NlcHRzKSwgZmluZCBhbmQKLSAgLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3Qu
Ci0gIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKLSAgICB2
YXIgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7Ci0gICAgdmFyIG1mYWN0b3J5
ID0gbW9kZXNbc3BlYy5uYW1lXTsKLSAgICBpZiAoIW1mYWN0b3J5KSByZXR1cm4gQ29kZU1pcnJv
ci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWluIik7Ci0gICAgdmFyIG1vZGVPYmogPSBtZmFj
dG9yeShvcHRpb25zLCBzcGVjKTsKLSAgICBpZiAobW9kZUV4dGVuc2lvbnMuaGFzT3duUHJvcGVy
dHkoc3BlYy5uYW1lKSkgewotICAgICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9uc1tzcGVjLm5h
bWVdOwotICAgICAgZm9yICh2YXIgcHJvcCBpbiBleHRzKSB7Ci0gICAgICAgIGlmICghZXh0cy5o
YXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7Ci0gICAgICAgIGlmIChtb2RlT2JqLmhhc093
blByb3BlcnR5KHByb3ApKSBtb2RlT2JqWyJfIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsKLSAg
ICAgICAgbW9kZU9ialtwcm9wXSA9IGV4dHNbcHJvcF07Ci0gICAgICB9Ci0gICAgfQotICAgIG1v
ZGVPYmoubmFtZSA9IHNwZWMubmFtZTsKLSAgICBpZiAoc3BlYy5oZWxwZXJUeXBlKSBtb2RlT2Jq
LmhlbHBlclR5cGUgPSBzcGVjLmhlbHBlclR5cGU7Ci0gICAgaWYgKHNwZWMubW9kZVByb3BzKSBm
b3IgKHZhciBwcm9wIGluIHNwZWMubW9kZVByb3BzKQotICAgICAgbW9kZU9ialtwcm9wXSA9IHNw
ZWMubW9kZVByb3BzW3Byb3BdOwotCi0gICAgcmV0dXJuIG1vZGVPYmo7Ci0gIH07Ci0KLSAgLy8g
TWluaW1hbCBkZWZhdWx0IG1vZGUuCi0gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB7dG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkge3N0cmVhbS5z
a2lwVG9FbmQoKTt9fTsKLSAgfSk7Ci0gIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9wbGFp
biIsICJudWxsIik7Ci0KLSAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGll
cyB0byBtb2RlIG9iamVjdHMgZnJvbQotICAvLyBvdXRzaWRlIHRoZSBhY3R1YWwgbW9kZSBkZWZp
bml0aW9uLgotICB2YXIgbW9kZUV4dGVuc2lvbnMgPSBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25z
ID0ge307Ci0gIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGZ1bmN0aW9uKG1vZGUsIHByb3BlcnRp
ZXMpIHsKLSAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zLmhhc093blByb3BlcnR5KG1vZGUp
ID8gbW9kZUV4dGVuc2lvbnNbbW9kZV0gOiAobW9kZUV4dGVuc2lvbnNbbW9kZV0gPSB7fSk7Ci0g
ICAgY29weU9iaihwcm9wZXJ0aWVzLCBleHRzKTsKLSAgfTsKLQotICAvLyBFWFRFTlNJT05TCi0K
LSAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7Ci0g
ICAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jOwotICB9OwotICBDb2RlTWlycm9y
LmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsKLSAgICBEb2MucHJv
dG90eXBlW25hbWVdID0gZnVuYzsKLSAgfTsKLSAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBv
cHRpb247Ci0KLSAgdmFyIGluaXRIb29rcyA9IFtdOwotICBDb2RlTWlycm9yLmRlZmluZUluaXRI
b29rID0gZnVuY3Rpb24oZikge2luaXRIb29rcy5wdXNoKGYpO307Ci0KLSAgdmFyIGhlbHBlcnMg
PSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7fTsKLSAgQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlciA9
IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKCFoZWxwZXJzLmhhc093blBy
b3BlcnR5KHR5cGUpKSBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHtfZ2xvYmFs
OiBbXX07Ci0gICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlOwotICB9OwotICBDb2RlTWly
cm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgcHJlZGljYXRl
LCB2YWx1ZSkgewotICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFs
dWUpOwotICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNoKHtwcmVkOiBwcmVkaWNhdGUsIHZh
bDogdmFsdWV9KTsKLSAgfTsKLQotICAvLyBNT0RFIFNUQVRFIEhBTkRMSU5HCi0KLSAgLy8gVXRp
bGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBu
ZXN0ZWQKLSAgLy8gbW9kZXMgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVpciBpbm5lciBtb2Rlcy4K
LQotICB2YXIgY29weVN0YXRlID0gQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBmdW5jdGlvbihtb2Rl
LCBzdGF0ZSkgewotICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHN0YXRlOwotICAgIGlm
IChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKTsKLSAgICB2YXIg
bnN0YXRlID0ge307Ci0gICAgZm9yICh2YXIgbiBpbiBzdGF0ZSkgewotICAgICAgdmFyIHZhbCA9
IHN0YXRlW25dOwotICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29u
Y2F0KFtdKTsKLSAgICAgIG5zdGF0ZVtuXSA9IHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5zdGF0
ZTsKLSAgfTsKLQotICB2YXIgc3RhcnRTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IGZ1
bmN0aW9uKG1vZGUsIGExLCBhMikgewotICAgIHJldHVybiBtb2RlLnN0YXJ0U3RhdGUgPyBtb2Rl
LnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7Ci0gIH07Ci0KLSAgLy8gR2l2ZW4gYSBtb2RlIGFu
ZCBhIHN0YXRlIChmb3IgdGhhdCBtb2RlKSwgZmluZCB0aGUgaW5uZXIgbW9kZSBhbmQKLSAgLy8g
c3RhdGUgYXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHN0YXRlIHJlZmVycyB0by4KLSAgQ29kZU1p
cnJvci5pbm5lck1vZGUgPSBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewotICAgIHdoaWxlIChtb2Rl
LmlubmVyTW9kZSkgewotICAgICAgdmFyIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7Ci0g
ICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIGJyZWFrOwotICAgICAgc3RhdGUg
PSBpbmZvLnN0YXRlOwotICAgICAgbW9kZSA9IGluZm8ubW9kZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX07Ci0gIH07Ci0KLSAgLy8gU1RBTkRB
UkQgQ09NTUFORFMKLQotICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxlc3MgYWN0aW9ucyB0
aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW4KLSAgLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Ig
a2V5YmluZGluZ3MuCi0gIHZhciBjb21tYW5kcyA9IENvZGVNaXJyb3IuY29tbWFuZHMgPSB7Ci0g
ICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RM
aW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xsKTt9LAotICAgIHNp
bmdsZVNlbGVjdGlvbjogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLnNldFNlbGVjdGlvbihjbS5n
ZXRDdXJzb3IoImFuY2hvciIpLCBjbS5nZXRDdXJzb3IoImhlYWQiKSwgc2VsX2RvbnRTY3JvbGwp
OwotICAgIH0sCi0gICAga2lsbExpbmU6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBkZWxldGVOZWFy
U2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICBpZiAocmFuZ2UuZW1wdHko
KSkgewotICAgICAgICAgIHZhciBsZW4gPSBnZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5saW5l
KS50ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBsZW4gJiYgcmFu
Z2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiB7ZnJvbTog
cmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX07Ci0gICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdl
LmhlYWQubGluZSwgbGVuKX07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIHtm
cm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpfTsKLSAgICAgICAgfQotICAgICAgfSk7
Ci0gICAgfSwKLSAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkgewotICAgICAgZGVsZXRlTmVh
clNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIHtmcm9tOiBQ
b3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLAotICAgICAgICAgICAgICAgIHRvOiBjbGlwUG9zKGNt
LmRvYywgUG9zKHJhbmdlLnRvKCkubGluZSArIDEsIDApKX07Ci0gICAgICB9KTsKLSAgICB9LAot
ICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAgICAgZGVsZXRlTmVhclNlbGVjdGlv
bihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2Uu
ZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJvbSgpfTsKLSAgICAgIH0pOwotICAgIH0sCi0g
ICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKLSAgICByZWRvOiBmdW5jdGlvbihj
bSkge2NtLnJlZG8oKTt9LAotICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uKGNtKSB7Y20udW5k
b1NlbGVjdGlvbigpO30sCi0gICAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24oY20pIHtjbS5yZWRv
U2VsZWN0aW9uKCk7fSwKLSAgICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNl
bGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApKTt9LAotICAgIGdvRG9jRW5kOiBmdW5jdGlv
bihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpO30sCi0gICAgZ29M
aW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVu
Y3Rpb24ocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwg
c2VsX21vdmUpOwotICAgIH0sCi0gICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsK
LSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewotICAgICAgICB2
YXIgc3RhcnQgPSBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7Ci0gICAgICAgIHZhciBs
aW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKLSAgICAgICAgdmFyIG9yZGVyID0g
Z2V0T3JkZXIobGluZSk7Ci0gICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0g
MCkgewotICAgICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNl
YXJjaCgvXFMvKSk7Ci0gICAgICAgICAgdmFyIGluV1MgPSByYW5nZS5oZWFkLmxpbmUgPT0gc3Rh
cnQubGluZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcmFuZ2UuaGVhZC5jaDsK
LSAgICAgICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDogZmlyc3ROb25XUyk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgfSwgc2VsX21vdmUpOwot
ICAgIH0sCi0gICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5kU2Vs
ZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFk
LmxpbmUpOyB9LCBzZWxfbW92ZSk7Ci0gICAgfSwKLSAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24o
Y20pIHsKLSAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewotICAg
ICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsK
LSAgICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5v
ZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCAiZGl2Iik7Ci0gICAgICB9LCBzZWxfbW92ZSk7
Ci0gICAgfSwKLSAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5k
U2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7Ci0gICAgICAgIHZhciB0b3AgPSBjbS5jaGFy
Q29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OwotICAgICAgICByZXR1cm4gY20uY29v
cmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7Ci0gICAgICB9LCBzZWxfbW92ZSk7
Ci0gICAgfSwKLSAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUi
KTt9LAotICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwgImxpbmUiKTt9
LAotICAgIGdvUGFnZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAicGFnZSIpO30sCi0g
ICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFnZSIpO30sCi0gICAg
Z29DaGFyTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgImNoYXIiKTt9LAotICAgIGdv
Q2hhclJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJjaGFyIik7fSwKLSAgICBnb0Nv
bHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4iKTt9LAotICAgIGdv
Q29sdW1uUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwgImNvbHVtbiIpO30sCi0gICAg
Z29Xb3JkTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgIndvcmQiKTt9LAotICAgIGdv
R3JvdXBSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiZ3JvdXAiKTt9LAotICAgIGdv
R3JvdXBMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiZ3JvdXAiKTt9LAotICAgIGdv
V29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3b3JkIik7fSwKLSAgICBkZWxD
aGFyQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKLSAgICBk
ZWxDaGFyQWZ0ZXI6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiY2hhciIpO30sCi0gICAg
ZGVsV29yZEJlZm9yZTogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAid29yZCIpO30sCi0g
ICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoMSwgIndvcmQiKTt9LAot
ICAgIGRlbEdyb3VwQmVmb3JlOiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJncm91cCIp
O30sCi0gICAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJncm91
cCIpO30sCi0gICAgaW5kZW50QXV0bzogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24o
InNtYXJ0Iik7fSwKLSAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVj
dGlvbigiYWRkIik7fSwKLSAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNl
bGVjdGlvbigic3VidHJhY3QiKTt9LAotICAgIGluc2VydFRhYjogZnVuY3Rpb24oY20pIHtjbS5y
ZXBsYWNlU2VsZWN0aW9uKCJcdCIpO30sCi0gICAgaW5zZXJ0U29mdFRhYjogZnVuY3Rpb24oY20p
IHsKLSAgICAgIHZhciBzcGFjZXMgPSBbXSwgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwg
dGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBwb3MgPSByYW5nZXNbaV0uZnJvbSgp
OwotICAgICAgICB2YXIgY29sID0gY291bnRDb2x1bW4oY20uZ2V0TGluZShwb3MubGluZSksIHBv
cy5jaCwgdGFiU2l6ZSk7Ci0gICAgICAgIHNwYWNlcy5wdXNoKG5ldyBBcnJheSh0YWJTaXplIC0g
Y29sICUgdGFiU2l6ZSArIDEpLmpvaW4oIiAiKSk7Ci0gICAgICB9Ci0gICAgICBjbS5yZXBsYWNl
U2VsZWN0aW9ucyhzcGFjZXMpOwotICAgIH0sCi0gICAgZGVmYXVsdFRhYjogZnVuY3Rpb24oY20p
IHsKLSAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBjbS5pbmRlbnRTZWxlY3Rpb24o
ImFkZCIpOwotICAgICAgZWxzZSBjbS5leGVjQ29tbWFuZCgiaW5zZXJ0VGFiIik7Ci0gICAgfSwK
LSAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24oY20pIHsKLSAgICAgIHJ1bkluT3AoY20sIGZ1
bmN0aW9uKCkgewotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgbmV3
U2VsID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkLCBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIGN1ci5saW5lKS50ZXh0OwotICAgICAgICAgIGlmIChsaW5lKSB7Ci0gICAgICAgICAg
ICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoKSBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIu
Y2ggLSAxKTsKLSAgICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7Ci0gICAgICAgICAgICAgIGN1
ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpOwotICAgICAgICAgICAgICBjbS5yZXBs
YWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoIC0gMSkgKyBsaW5lLmNoYXJBdChjdXIuY2ggLSAy
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0g
MiksIGN1ciwgIit0cmFuc3Bvc2UiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyLmxpbmUg
PiBjbS5kb2MuZmlyc3QpIHsKLSAgICAgICAgICAgICAgdmFyIHByZXYgPSBnZXRMaW5lKGNtLmRv
YywgY3VyLmxpbmUgLSAxKS50ZXh0OwotICAgICAgICAgICAgICBpZiAocHJldikKLSAgICAgICAg
ICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyAiXG4iICsgcHJldi5jaGFy
QXQocHJldi5sZW5ndGggLSAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9z
KGN1ci5saW5lIC0gMSwgcHJldi5sZW5ndGggLSAxKSwgUG9zKGN1ci5saW5lLCAxKSwgIit0cmFu
c3Bvc2UiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgbmV3U2VsLnB1
c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY20uc2V0U2VsZWN0
aW9ucyhuZXdTZWwpOwotICAgICAgfSk7Ci0gICAgfSwKLSAgICBuZXdsaW5lQW5kSW5kZW50OiBm
dW5jdGlvbihjbSkgewotICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciBsZW4gPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgIHZhciByYW5nZSA9IGNtLmxpc3RTZWxlY3Rp
b25zKClbaV07Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIsIHJhbmdlLmFuY2hvciwg
cmFuZ2UuaGVhZCwgIitpbnB1dCIpOwotICAgICAgICAgIGNtLmluZGVudExpbmUocmFuZ2UuZnJv
bSgpLmxpbmUgKyAxLCBudWxsLCB0cnVlKTsKLSAgICAgICAgICBlbnN1cmVDdXJzb3JWaXNpYmxl
KGNtKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfSwKLSAgICB0b2dnbGVPdmVyd3JpdGU6
IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQotICB9OwotCi0gIC8vIFNUQU5E
QVJEIEtFWU1BUFMKLQotICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlNYXAgPSB7fTsKLSAg
a2V5TWFwLmJhc2ljID0gewotICAgICJMZWZ0IjogImdvQ2hhckxlZnQiLCAiUmlnaHQiOiAiZ29D
aGFyUmlnaHQiLCAiVXAiOiAiZ29MaW5lVXAiLCAiRG93biI6ICJnb0xpbmVEb3duIiwKLSAgICAi
RW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjog
ImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAotICAgICJEZWxldGUiOiAiZGVs
Q2hhckFmdGVyIiwgIkJhY2tzcGFjZSI6ICJkZWxDaGFyQmVmb3JlIiwgIlNoaWZ0LUJhY2tzcGFj
ZSI6ICJkZWxDaGFyQmVmb3JlIiwKLSAgICAiVGFiIjogImRlZmF1bHRUYWIiLCAiU2hpZnQtVGFi
IjogImluZGVudEF1dG8iLAotICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2Vy
dCI6ICJ0b2dnbGVPdmVyd3JpdGUiLAotICAgICJFc2MiOiAic2luZ2xlU2VsZWN0aW9uIgotICB9
OwotICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVu
J3QgZGVmaW5lZCBieQotICAvLyBkZWZhdWx0LiBVc2VyIGNvZGUgb3IgYWRkb25zIGNhbiBkZWZp
bmUgdGhlbS4gVW5rbm93biBjb21tYW5kcwotICAvLyBhcmUgc2ltcGx5IGlnbm9yZWQuCi0gIGtl
eU1hcC5wY0RlZmF1bHQgPSB7Ci0gICAgIkN0cmwtQSI6ICJzZWxlY3RBbGwiLCAiQ3RybC1EIjog
ImRlbGV0ZUxpbmUiLCAiQ3RybC1aIjogInVuZG8iLCAiU2hpZnQtQ3RybC1aIjogInJlZG8iLCAi
Q3RybC1ZIjogInJlZG8iLAotICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFydCIsICJDdHJsLVVw
IjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdv
RG9jRW5kIiwKLSAgICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0cmwtUmlnaHQiOiAi
Z29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJn
b0xpbmVFbmQiLAotICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsICJDdHJs
LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkN0cmwtUyI6ICJzYXZlIiwgIkN0cmwtRiI6ICJm
aW5kIiwKLSAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJl
diIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFs
bCIsCi0gICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0cmwtXSI6ICJpbmRlbnRNb3JlIiwK
LSAgICAiQ3RybC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ3RybC1VIjogInJlZG9TZWxl
Y3Rpb24iLCAiQWx0LVUiOiAicmVkb1NlbGVjdGlvbiIsCi0gICAgZmFsbHRocm91Z2g6ICJiYXNp
YyIKLSAgfTsKLSAga2V5TWFwLm1hY0RlZmF1bHQgPSB7Ci0gICAgIkNtZC1BIjogInNlbGVjdEFs
bCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoi
OiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKLSAgICAiQ21kLVVwIjogImdvRG9jU3RhcnQiLCAi
Q21kLUVuZCI6ICJnb0RvY0VuZCIsICJDbWQtRG93biI6ICJnb0RvY0VuZCIsICJBbHQtTGVmdCI6
ICJnb0dyb3VwTGVmdCIsCi0gICAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxl
ZnQiOiAiZ29MaW5lU3RhcnQiLCAiQ21kLVJpZ2h0IjogImdvTGluZUVuZCIsICJBbHQtQmFja3Nw
YWNlIjogImRlbEdyb3VwQmVmb3JlIiwKLSAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbEdy
b3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNtZC1TIjogInNhdmUi
LCAiQ21kLUYiOiAiZmluZCIsCi0gICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1H
IjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6
ICJyZXBsYWNlQWxsIiwKLSAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRl
bnRNb3JlIiwgIkNtZC1CYWNrc3BhY2UiOiAiZGVsTGluZUxlZnQiLAotICAgICJDbWQtVSI6ICJ1
bmRvU2VsZWN0aW9uIiwgIlNoaWZ0LUNtZC1VIjogInJlZG9TZWxlY3Rpb24iLAotICAgIGZhbGx0
aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCi0gIH07Ci0gIC8vIFZlcnkgYmFzaWMgcmVhZGxp
bmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuCi0gIGtl
eU1hcC5lbWFjc3kgPSB7Ci0gICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAi
Z29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24i
LAotICAgICJBbHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJnb1dvcmRMZWZ0IiwgIkN0
cmwtQSI6ICJnb0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5kIiwKLSAgICAiQ3RybC1W
IjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdvUGFnZVVwIiwgIkN0cmwtRCI6ICJk
ZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZvcmUiLAotICAgICJBbHQtRCI6ICJk
ZWxXb3JkQWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQmVmb3JlIiwgIkN0cmwtSyI6
ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hhcnMiCi0gIH07Ci0gIGtleU1hcFsi
ZGVmYXVsdCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQgOiBrZXlNYXAucGNEZWZhdWx0Owot
Ci0gIC8vIEtFWU1BUCBESVNQQVRDSAotCi0gIGZ1bmN0aW9uIGdldEtleU1hcCh2YWwpIHsKLSAg
ICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2YWxdOwotICAgIGVs
c2UgcmV0dXJuIHZhbDsKLSAgfQotCi0gIC8vIEdpdmVuIGFuIGFycmF5IG9mIGtleW1hcHMgYW5k
IGEga2V5IG5hbWUsIGNhbGwgaGFuZGxlIG9uIGFueQotICAvLyBiaW5kaW5ncyBmb3VuZCwgdW50
aWwgdGhhdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCBhdCB3aGljaCBwb2ludAotICAvLyB3ZSBj
b25zaWRlciB0aGUga2V5IGhhbmRsZWQuIEltcGxlbWVudHMgdGhpbmdzIGxpa2UgYmluZGluZyBh
IGtleQotICAvLyB0byBmYWxzZSBzdG9wcGluZyBmdXJ0aGVyIGhhbmRsaW5nIGFuZCBrZXltYXAg
ZmFsbHRocm91Z2guCi0gIHZhciBsb29rdXBLZXkgPSBDb2RlTWlycm9yLmxvb2t1cEtleSA9IGZ1
bmN0aW9uKG5hbWUsIG1hcHMsIGhhbmRsZSkgewotICAgIGZ1bmN0aW9uIGxvb2t1cChtYXApIHsK
LSAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOwotICAgICAgdmFyIGZvdW5kID0gbWFwW25hbWVd
OwotICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgcmV0dXJuICJzdG9wIjsKLSAgICAgIGlmIChm
b3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOwotICAgICAgaWYgKG1h
cC5ub2ZhbGx0aHJvdWdoKSByZXR1cm4gInN0b3AiOwotCi0gICAgICB2YXIgZmFsbHRocm91Z2gg
PSBtYXAuZmFsbHRocm91Z2g7Ci0gICAgICBpZiAoZmFsbHRocm91Z2ggPT0gbnVsbCkgcmV0dXJu
IGZhbHNlOwotICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmYWxsdGhy
b3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKLSAgICAgICAgcmV0dXJuIGxvb2t1cChmYWxsdGhy
b3VnaCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhbGx0aHJvdWdoLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIHZhciBkb25lID0gbG9va3VwKGZhbGx0aHJvdWdoW2ldKTsKLSAgICAgICAg
aWYgKGRvbmUpIHJldHVybiBkb25lOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkgewotICAgICAg
dmFyIGRvbmUgPSBsb29rdXAobWFwc1tpXSk7Ci0gICAgICBpZiAoZG9uZSkgcmV0dXJuIGRvbmUg
IT0gInN0b3AiOwotICAgIH0KLSAgfTsKLQotICAvLyBNb2RpZmllciBrZXkgcHJlc3NlcyBkb24n
dCBjb3VudCBhcyAncmVhbCcga2V5IHByZXNzZXMgZm9yIHRoZQotICAvLyBwdXJwb3NlIG9mIGtl
eW1hcCBmYWxsdGhyb3VnaC4KLSAgdmFyIGlzTW9kaWZpZXJLZXkgPSBDb2RlTWlycm9yLmlzTW9k
aWZpZXJLZXkgPSBmdW5jdGlvbihldmVudCkgewotICAgIHZhciBuYW1lID0ga2V5TmFtZXNbZXZl
bnQua2V5Q29kZV07Ci0gICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5hbWUgPT0gIkFsdCIg
fHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7Ci0gIH07Ci0KLSAgLy8gTG9vayB1
cCB0aGUgbmFtZSBvZiBhIGtleSBhcyBpbmRpY2F0ZWQgYnkgYW4gZXZlbnQgb2JqZWN0LgotICB2
YXIga2V5TmFtZSA9IENvZGVNaXJyb3Iua2V5TmFtZSA9IGZ1bmN0aW9uKGV2ZW50LCBub1NoaWZ0
KSB7Ci0gICAgaWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50WyJjaGFy
Il0pIHJldHVybiBmYWxzZTsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVd
OwotICAgIGlmIChuYW1lID09IG51bGwgfHwgZXZlbnQuYWx0R3JhcGhLZXkpIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoZXZlbnQuYWx0S2V5KSBuYW1lID0gIkFsdC0iICsgbmFtZTsKLSAgICBpZiAo
ZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSkgbmFtZSA9ICJDdHJs
LSIgKyBuYW1lOwotICAgIGlmIChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxLZXkgOiBldmVudC5t
ZXRhS2V5KSBuYW1lID0gIkNtZC0iICsgbmFtZTsKLSAgICBpZiAoIW5vU2hpZnQgJiYgZXZlbnQu
c2hpZnRLZXkpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gIH07
Ci0KLSAgLy8gRlJPTVRFWFRBUkVBCi0KLSAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmdW5j
dGlvbih0ZXh0YXJlYSwgb3B0aW9ucykgewotICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9
OwotICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKLSAgICBpZiAoIW9wdGlvbnMu
dGFiaW5kZXggJiYgdGV4dGFyZWEudGFiaW5kZXgpCi0gICAgICBvcHRpb25zLnRhYmluZGV4ID0g
dGV4dGFyZWEudGFiaW5kZXg7Ci0gICAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRh
cmVhLnBsYWNlaG9sZGVyKQotICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlciA9IHRleHRhcmVhLnBs
YWNlaG9sZGVyOwotICAgIC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBpZiB0aGlzIHRleHRhcmVh
IGlzIGZvY3VzZWQsIG9yIGlmIGl0IGhhcwotICAgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIg
ZWxlbWVudCBpcyBmb2N1c2VkLgotICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyA9PSBudWxsKSB7
Ci0gICAgICB2YXIgaGFzRm9jdXMgPSBhY3RpdmVFbHQoKTsKLSAgICAgIG9wdGlvbnMuYXV0b2Zv
Y3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHwKLSAgICAgICAgdGV4dGFyZWEuZ2V0QXR0cmli
dXRlKCJhdXRvZm9jdXMiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3VtZW50LmJvZHk7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9IGNtLmdldFZhbHVl
KCk7fQotICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICBvbih0ZXh0YXJlYS5mb3JtLCAi
c3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3Vi
bWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICBpZiAoIW9wdGlvbnMubGVhdmVT
dWJtaXRNZXRob2RBbG9uZSkgewotICAgICAgICB2YXIgZm9ybSA9IHRleHRhcmVhLmZvcm0sIHJl
YWxTdWJtaXQgPSBmb3JtLnN1Ym1pdDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2YXIgd3Jh
cHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBzYXZl
KCk7Ci0gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7Ci0gICAgICAgICAgICBm
b3JtLnN1Ym1pdCgpOwotICAgICAgICAgICAgZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0Owot
ICAgICAgICAgIH07Ci0gICAgICAgIH0gY2F0Y2goZSkge30KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHZhciBjbSA9IENvZGVNaXJy
b3IoZnVuY3Rpb24obm9kZSkgewotICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwotICAgIH0sIG9wdGlvbnMpOwotICAgIGNt
LnNhdmUgPSBzYXZlOwotICAgIGNtLmdldFRleHRBcmVhID0gZnVuY3Rpb24oKSB7IHJldHVybiB0
ZXh0YXJlYTsgfTsKLSAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7Ci0gICAgICBzYXZl
KCk7Ci0gICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJF
bGVtZW50KCkpOwotICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgaWYg
KHRleHRhcmVhLmZvcm0pIHsKLSAgICAgICAgb2ZmKHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBz
YXZlKTsKLSAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rp
b24iKQotICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKLSAgICAg
IH0KLSAgICB9OwotICAgIHJldHVybiBjbTsKLSAgfTsKLQotICAvLyBTVFJJTkcgU1RSRUFNCi0K
LSAgLy8gRmVkIHRvIHRoZSBtb2RlIHBhcnNlcnMsIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMg
dG8gbWFrZQotICAvLyBwYXJzZXJzIG1vcmUgc3VjY2luY3QuCi0KLSAgdmFyIFN0cmluZ1N0cmVh
bSA9IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXplKSB7
Ci0gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDsKLSAgICB0aGlzLnN0cmluZyA9IHN0cmlu
ZzsKLSAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7Ci0gICAgdGhpcy5sYXN0Q29sdW1u
UG9zID0gdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSAwOwotICAgIHRoaXMubGluZVN0YXJ0ID0gMDsK
LSAgfTsKLQotICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewotICAgIGVvbDogZnVuY3Rpb24o
KSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAotICAgIHNvbDogZnVu
Y3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09IHRoaXMubGluZVN0YXJ0O30sCi0gICAgcGVlazog
ZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5kZWZp
bmVkO30sCi0gICAgbmV4dDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5wb3MgPCB0aGlz
LnN0cmluZy5sZW5ndGgpCi0gICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5w
b3MrKyk7Ci0gICAgfSwKLSAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7Ci0gICAgICB2YXIgY2gg
PSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpOwotICAgICAgaWYgKHR5cGVvZiBtYXRjaCA9
PSAic3RyaW5nIikgdmFyIG9rID0gY2ggPT0gbWF0Y2g7Ci0gICAgICBlbHNlIHZhciBvayA9IGNo
ICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOwotICAgICAgaWYg
KG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNoO30KLSAgICB9LAotICAgIGVhdFdoaWxlOiBmdW5j
dGlvbihtYXRjaCkgewotICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7Ci0gICAgICB3aGlsZSAo
dGhpcy5lYXQobWF0Y2gpKXt9Ci0gICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKLSAgICB9
LAotICAgIGVhdFNwYWNlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzdGFydCA9IHRoaXMucG9z
OwotICAgICAgd2hpbGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlz
LnBvcykpKSArK3RoaXMucG9zOwotICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7Ci0gICAg
fSwKLSAgICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVu
Z3RoO30sCi0gICAgc2tpcFRvOiBmdW5jdGlvbihjaCkgewotICAgICAgdmFyIGZvdW5kID0gdGhp
cy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpOwotICAgICAgaWYgKGZvdW5kID4gLTEpIHt0
aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZTt9Ci0gICAgfSwKLSAgICBiYWNrVXA6IGZ1bmN0
aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCi0gICAgY29sdW1uOiBmdW5jdGlvbigpIHsKLSAgICAg
IGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7Ci0gICAgICAgIHRoaXMubGFz
dENvbHVtblZhbHVlID0gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQsIHRoaXMu
dGFiU2l6ZSwgdGhpcy5sYXN0Q29sdW1uUG9zLCB0aGlzLmxhc3RDb2x1bW5WYWx1ZSk7Ci0gICAg
ICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gdGhpcy5sYXN0Q29sdW1uVmFsdWUgLSAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0
aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKTsKLSAgICB9LAot
ICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBjb3VudENvbHVtbih0
aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKSAtCi0gICAgICAgICh0aGlzLmxpbmVTdGFy
dCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXpl
KSA6IDApOwotICAgIH0sCi0gICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNh
c2VJbnNlbnNpdGl2ZSkgewotICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09ICJzdHJpbmciKSB7
Ci0gICAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRp
dmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9OwotICAgICAgICB2YXIgc3Vic3RyID0gdGhp
cy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7Ci0gICAgICAgIGlmIChj
YXNlZChzdWJzdHIpID09IGNhc2VkKHBhdHRlcm4pKSB7Ci0gICAgICAgICAgaWYgKGNvbnN1bWUg
IT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKLSAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIG1hdGNoID0gdGhp
cy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pOwotICAgICAgICBpZiAobWF0
Y2ggJiYgbWF0Y2guaW5kZXggPiAwKSByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKG1hdGNoICYm
IGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5ndGg7Ci0gICAgICAg
IHJldHVybiBtYXRjaDsKLSAgICAgIH0KLSAgICB9LAotICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9LAotICAgIGhp
ZGVGaXJzdENoYXJzOiBmdW5jdGlvbihuLCBpbm5lcikgewotICAgICAgdGhpcy5saW5lU3RhcnQg
Kz0gbjsKLSAgICAgIHRyeSB7IHJldHVybiBpbm5lcigpOyB9Ci0gICAgICBmaW5hbGx5IHsgdGhp
cy5saW5lU3RhcnQgLT0gbjsgfQotICAgIH0KLSAgfTsKLQotICAvLyBURVhUTUFSS0VSUwotCi0g
IC8vIENyZWF0ZWQgd2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9kcy4gQSBUZXh0
TWFya2VyIGlzIGEKLSAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmlu
ZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGUKLSAgLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBo
b2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmcKLSAgLy8ge2Zyb20sIHRvLCBtYXJr
ZXJ9IG9iamVjdCBwb2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmQKLSAgLy8gaW5k
aWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRp
cGxlCi0gIC8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFu
cyBhY3Jvc3MgbGluZXMuCi0gIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBmb3IgdGhlaXIg
ZnJvbS90byBwcm9wZXJ0aWVzIHdoZW4gdGhlCi0gIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25k
IHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQotICAvLyBsaW5rcyBiYWNr
IHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC4KLQotICB2YXIgVGV4dE1hcmtlciA9
IENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkgewotICAgIHRoaXMu
bGluZXMgPSBbXTsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMuZG9jID0gZG9jOwot
ICB9OwotICBldmVudE1peGluKFRleHRNYXJrZXIpOwotCi0gIC8vIENsZWFyIHRoZSBtYXJrZXIu
Ci0gIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRo
aXMuZXhwbGljaXRseUNsZWFyZWQpIHJldHVybjsKLSAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwg
d2l0aE9wID0gY20gJiYgIWNtLmN1ck9wOwotICAgIGlmICh3aXRoT3ApIHN0YXJ0T3BlcmF0aW9u
KGNtKTsKLSAgICBpZiAoaGFzSGFuZGxlcih0aGlzLCAiY2xlYXIiKSkgewotICAgICAgdmFyIGZv
dW5kID0gdGhpcy5maW5kKCk7Ci0gICAgICBpZiAoZm91bmQpIHNpZ25hbExhdGVyKHRoaXMsICJj
bGVhciIsIGZvdW5kLmZyb20sIGZvdW5kLnRvKTsKLSAgICB9Ci0gICAgdmFyIG1pbiA9IG51bGws
IG1heCA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07Ci0gICAgICB2YXIgc3BhbiA9
IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7Ci0gICAgICBpZiAoY20g
JiYgIXRoaXMuY29sbGFwc2VkKSByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lTm8obGluZSksICJ0ZXh0
Iik7Ci0gICAgICBlbHNlIGlmIChjbSkgewotICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSBt
YXggPSBsaW5lTm8obGluZSk7Ci0gICAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgbWluID0g
bGluZU5vKGxpbmUpOwotICAgICAgfQotICAgICAgbGluZS5tYXJrZWRTcGFucyA9IHJlbW92ZU1h
cmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bhbik7Ci0gICAgICBpZiAoc3Bhbi5mcm9tID09
IG51bGwgJiYgdGhpcy5jb2xsYXBzZWQgJiYgIWxpbmVJc0hpZGRlbih0aGlzLmRvYywgbGluZSkg
JiYgY20pCi0gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhlaWdodChjbS5kaXNw
bGF5KSk7Ci0gICAgfQotICAgIGlmIChjbSAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9u
cy5saW5lV3JhcHBpbmcpIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUodGhpcy5saW5lc1tpXSksIGxlbiA9
IGxpbmVMZW5ndGgodmlzdWFsKTsKLSAgICAgIGlmIChsZW4gPiBjbS5kaXNwbGF5Lm1heExpbmVM
ZW5ndGgpIHsKLSAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lID0gdmlzdWFsOwotICAgICAgICBj
bS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47Ci0gICAgICAgIGNtLmRpc3BsYXkubWF4TGlu
ZUNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtaW4gIT0gbnVsbCAm
JiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkgcmVnQ2hhbmdlKGNtLCBtaW4sIG1heCArIDEpOwotICAg
IHRoaXMubGluZXMubGVuZ3RoID0gMDsKLSAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1
ZTsKLSAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHsKLSAgICAgIHRo
aXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7Ci0gICAgICBpZiAoY20pIHJlQ2hlY2tTZWxlY3Rpb24o
Y20uZG9jKTsKLSAgICB9Ci0gICAgaWYgKGNtKSBzaWduYWxMYXRlcihjbSwgIm1hcmtlckNsZWFy
ZWQiLCBjbSwgdGhpcyk7Ci0gICAgaWYgKHdpdGhPcCkgZW5kT3BlcmF0aW9uKGNtKTsKLSAgICBp
ZiAodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50LmNsZWFyKCk7Ci0gIH07Ci0KLSAgLy8gRmluZCB0
aGUgcG9zaXRpb24gb2YgdGhlIG1hcmtlciBpbiB0aGUgZG9jdW1lbnQuIFJldHVybnMgYSB7ZnJv
bSwKLSAgLy8gdG99IG9iamVjdCBieSBkZWZhdWx0LiBTaWRlIGNhbiBiZSBwYXNzZWQgdG8gZ2V0
IGEgc3BlY2lmaWMgc2lkZQotICAvLyAtLSAwIChib3RoKSwgLTEgKGxlZnQpLCBvciAxIChyaWdo
dCkuIFdoZW4gbGluZU9iaiBpcyB0cnVlLCB0aGUKLSAgLy8gUG9zIG9iamVjdHMgcmV0dXJuZWQg
Y29udGFpbiBhIGxpbmUgb2JqZWN0LCByYXRoZXIgdGhhbiBhIGxpbmUKLSAgLy8gbnVtYmVyICh1
c2VkIHRvIHByZXZlbnQgbG9va2luZyB1cCB0aGUgc2FtZSBsaW5lIHR3aWNlKS4KLSAgVGV4dE1h
cmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKLSAgICBpZiAo
c2lkZSA9PSBudWxsICYmIHRoaXMudHlwZSA9PSAiYm9va21hcmsiKSBzaWRlID0gMTsKLSAgICB2
YXIgZnJvbSwgdG87Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07Ci0gICAgICB2YXIgc3BhbiA9
IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7Ci0gICAgICBpZiAoc3Bh
bi5mcm9tICE9IG51bGwpIHsKLSAgICAgICAgZnJvbSA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxp
bmVObyhsaW5lKSwgc3Bhbi5mcm9tKTsKLSAgICAgICAgaWYgKHNpZGUgPT0gLTEpIHJldHVybiBm
cm9tOwotICAgICAgfQotICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgewotICAgICAgICB0byA9
IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi50byk7Ci0gICAgICAgIGlm
IChzaWRlID09IDEpIHJldHVybiB0bzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZyb20g
JiYge2Zyb206IGZyb20sIHRvOiB0b307Ci0gIH07Ci0KLSAgLy8gU2lnbmFscyB0aGF0IHRoZSBt
YXJrZXIncyB3aWRnZXQgY2hhbmdlZCwgYW5kIHN1cnJvdW5kaW5nIGxheW91dAotICAvLyBzaG91
bGQgYmUgcmVjb21wdXRlZC4KLSAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2hhbmdlZCA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3aWRnZXQgPSB0aGlz
LCBjbSA9IHRoaXMuZG9jLmNtOwotICAgIGlmICghcG9zIHx8ICFjbSkgcmV0dXJuOwotICAgIHJ1
bkluT3AoY20sIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSwgbGluZU4g
PSBsaW5lTm8ocG9zLmxpbmUpOwotICAgICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20s
IGxpbmVOKTsKLSAgICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIGNsZWFyTGluZU1lYXN1cmVtZW50
Q2FjaGVGb3Iodmlldyk7Ci0gICAgICAgIGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSBjbS5j
dXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBjbS5jdXJPcC51cGRhdGVN
YXhMaW5lID0gdHJ1ZTsKLSAgICAgIGlmICghbGluZUlzSGlkZGVuKHdpZGdldC5kb2MsIGxpbmUp
ICYmIHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgewotICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gd2lk
Z2V0LmhlaWdodDsKLSAgICAgICAgd2lkZ2V0LmhlaWdodCA9IG51bGw7Ci0gICAgICAgIHZhciBk
SGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgLSBvbGRIZWlnaHQ7Ci0gICAgICAgIGlmIChk
SGVpZ2h0KQotICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBk
SGVpZ2h0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfTsKLQotICBUZXh0TWFya2VyLnByb3RvdHlw
ZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24obGluZSkgewotICAgIGlmICghdGhpcy5saW5lcy5sZW5n
dGggJiYgdGhpcy5kb2MuY20pIHsKLSAgICAgIHZhciBvcCA9IHRoaXMuZG9jLmNtLmN1ck9wOwot
ICAgICAgaWYgKCFvcC5tYXliZUhpZGRlbk1hcmtlcnMgfHwgaW5kZXhPZihvcC5tYXliZUhpZGRl
bk1hcmtlcnMsIHRoaXMpID09IC0xKQotICAgICAgICAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMg
fHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOwotICAgIH0KLSAg
ICB0aGlzLmxpbmVzLnB1c2gobGluZSk7Ci0gIH07Ci0gIFRleHRNYXJrZXIucHJvdG90eXBlLmRl
dGFjaExpbmUgPSBmdW5jdGlvbihsaW5lKSB7Ci0gICAgdGhpcy5saW5lcy5zcGxpY2UoaW5kZXhP
Zih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7Ci0gICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0
aGlzLmRvYy5jbSkgewotICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3A7Ci0gICAgICAo
b3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZUhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1
c2godGhpcyk7Ci0gICAgfQotICB9OwotCi0gIC8vIENvbGxhcHNlZCBtYXJrZXJzIGhhdmUgdW5p
cXVlIGlkcywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvcmRlcgotICAvLyB0aGVtLCB3aGljaCBp
cyBuZWVkZWQgZm9yIHVuaXF1ZWx5IGRldGVybWluaW5nIGFuIG91dGVyIG1hcmtlcgotICAvLyB3
aGVuIHRoZXkgb3ZlcmxhcCAodGhleSBtYXkgbmVzdCwgYnV0IG5vdCBwYXJ0aWFsbHkgb3Zlcmxh
cCkuCi0gIHZhciBuZXh0TWFya2VySWQgPSAwOwotCi0gIC8vIENyZWF0ZSBhIG1hcmtlciwgd2ly
ZSBpdCB1cCB0byB0aGUgcmlnaHQgbGluZXMsIGFuZAotICBmdW5jdGlvbiBtYXJrVGV4dChkb2Ms
IGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7Ci0gICAgLy8gU2hhcmVkIG1hcmtlcnMgKGFjcm9z
cyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5Ci0gICAgLy8gKG1hcmtU
ZXh0U2hhcmVkIHdpbGwgY2FsbCBvdXQgdG8gdGhpcyBhZ2Fpbiwgb25jZSBwZXIKLSAgICAvLyBk
b2N1bWVudCkuCi0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQpIHJldHVybiBtYXJr
VGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKTsKLSAgICAvLyBFbnN1cmUg
d2UgYXJlIGluIGFuIG9wZXJhdGlvbi4KLSAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3Ap
IHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYXJrVGV4dCkoZG9jLCBmcm9tLCB0bywgb3B0aW9u
cywgdHlwZSk7Ci0KLSAgICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKSwg
ZGlmZiA9IGNtcChmcm9tLCB0byk7Ci0gICAgaWYgKG9wdGlvbnMpIGNvcHlPYmoob3B0aW9ucywg
bWFya2VyLCBmYWxzZSk7Ci0gICAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBtYXJrZXJzIHVubGVz
cyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZQotICAgIGlmIChkaWZmID4gMCB8fCBkaWZmID09IDAg
JiYgbWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSkKLSAgICAgIHJldHVybiBtYXJrZXI7
Ci0gICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHsKLSAgICAgIC8vIFNob3dpbmcgdXAgYXMg
YSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0ZXh0KQotICAgICAg
bWFya2VyLmNvbGxhcHNlZCA9IHRydWU7Ci0gICAgICBtYXJrZXIud2lkZ2V0Tm9kZSA9IGVsdCgi
c3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVNaXJyb3Itd2lkZ2V0Iik7Ci0gICAg
ICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci53aWRnZXROb2RlLmlnbm9y
ZUV2ZW50cyA9IHRydWU7Ci0gICAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0KSBtYXJrZXIud2lk
Z2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG1hcmtlci5jb2xsYXBz
ZWQpIHsKLSAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgZnJvbS5saW5l
LCBmcm9tLCB0bywgbWFya2VyKSB8fAotICAgICAgICAgIGZyb20ubGluZSAhPSB0by5saW5lICYm
IGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9tLCB0bywgbWFya2Vy
KSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBw
YXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7Ci0gICAgICBzYXdDb2xsYXBz
ZWRTcGFucyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1hcmtlci5hZGRUb0hpc3RvcnkpCi0g
ICAgICBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCBvcmlnaW46
ICJtYXJrVGV4dCJ9LCBkb2Muc2VsLCBOYU4pOwotCi0gICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxp
bmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lOwotICAgIGRvYy5pdGVyKGN1ckxpbmUsIHRv
LmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICBpZiAoY20gJiYgbWFya2VyLmNvbGxh
cHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGluZShsaW5lKSA9PSBj
bS5kaXNwbGF5Lm1heExpbmUpCi0gICAgICAgIHVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAg
aWYgKG1hcmtlci5jb2xsYXBzZWQgJiYgY3VyTGluZSAhPSBmcm9tLmxpbmUpIHVwZGF0ZUxpbmVI
ZWlnaHQobGluZSwgMCk7Ci0gICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIG5ldyBNYXJrZWRTcGFu
KG1hcmtlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGlu
ZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5lID8gdG8uY2ggOiBudWxsKSk7Ci0g
ICAgICArK2N1ckxpbmU7Ci0gICAgfSk7Ci0gICAgLy8gbGluZUlzSGlkZGVuIGRlcGVuZHMgb24g
dGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQgcGFzcwotICAgIGlm
IChtYXJrZXIuY29sbGFwc2VkKSBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5j
dGlvbihsaW5lKSB7Ci0gICAgICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHVwZGF0ZUxp
bmVIZWlnaHQobGluZSwgMCk7Ci0gICAgfSk7Ci0KLSAgICBpZiAobWFya2VyLmNsZWFyT25FbnRl
cikgb24obWFya2VyLCAiYmVmb3JlQ3Vyc29yRW50ZXIiLCBmdW5jdGlvbigpIHsgbWFya2VyLmNs
ZWFyKCk7IH0pOwotCi0gICAgaWYgKG1hcmtlci5yZWFkT25seSkgewotICAgICAgc2F3UmVhZE9u
bHlTcGFucyA9IHRydWU7Ci0gICAgICBpZiAoZG9jLmhpc3RvcnkuZG9uZS5sZW5ndGggfHwgZG9j
Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkKLSAgICAgICAgZG9jLmNsZWFySGlzdG9yeSgpOwotICAg
IH0KLSAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewotICAgICAgbWFya2VyLmlkID0gKytuZXh0
TWFya2VySWQ7Ci0gICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNt
KSB7Ci0gICAgICAvLyBTeW5jIGVkaXRvciBzdGF0ZQotICAgICAgaWYgKHVwZGF0ZU1heExpbmUp
IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAgaWYgKG1hcmtlci5jb2xsYXBz
ZWQpCi0gICAgICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSk7Ci0gICAg
ICBlbHNlIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci50aXRsZSB8fCBtYXJrZXIuc3Rh
cnRTdHlsZSB8fCBtYXJrZXIuZW5kU3R5bGUpCi0gICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxp
bmU7IGkgPD0gdG8ubGluZTsgaSsrKSByZWdMaW5lQ2hhbmdlKGNtLCBpLCAidGV4dCIpOwotICAg
ICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsKLSAgICAgIHNp
Z25hbExhdGVyKGNtLCAibWFya2VyQWRkZWQiLCBjbSwgbWFya2VyKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1hcmtlcjsKLSAgfQotCi0gIC8vIFNIQVJFRCBURVhUTUFSS0VSUwotCi0gIC8vIEEgc2hh
cmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpcwotICAvLyBp
bXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBu
b3JtYWwKLSAgLy8gbWFya2Vycy4KLSAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBDb2RlTWlycm9y
LlNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7Ci0gICAgdGhp
cy5tYXJrZXJzID0gbWFya2VyczsKLSAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5OwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkKLSAgICAgIG1hcmtlcnNbaV0u
cGFyZW50ID0gdGhpczsKLSAgfTsKLSAgZXZlbnRNaXhpbihTaGFyZWRUZXh0TWFya2VyKTsKLQot
ICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewotICAgIGlm
ICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSByZXR1cm47Ci0gICAgdGhpcy5leHBsaWNpdGx5Q2xl
YXJlZCA9IHRydWU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1hcmtlcnMubGVuZ3Ro
OyArK2kpCi0gICAgICB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsKLSAgICBzaWduYWxMYXRlcih0
aGlzLCAiY2xlYXIiKTsKLSAgfTsKLSAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9
IGZ1bmN0aW9uKHNpZGUsIGxpbmVPYmopIHsKLSAgICByZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQo
c2lkZSwgbGluZU9iaik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBm
cm9tLCB0bywgb3B0aW9ucywgdHlwZSkgewotICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMp
OwotICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7Ci0gICAgdmFyIG1hcmtlcnMgPSBbbWFya1Rl
eHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSldLCBwcmltYXJ5ID0gbWFya2Vyc1swXTsK
LSAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlOwotICAgIGxpbmtlZERvY3MoZG9j
LCBmdW5jdGlvbihkb2MpIHsKLSAgICAgIGlmICh3aWRnZXQpIG9wdGlvbnMud2lkZ2V0Tm9kZSA9
IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICBtYXJrZXJzLnB1c2gobWFya1RleHQoZG9j
LCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlvbnMsIHR5cGUpKTsK
LSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkKLSAgICAg
ICAgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHJldHVybjsKLSAgICAgIHByaW1hcnkgPSBs
c3QobWFya2Vycyk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG5ldyBTaGFyZWRUZXh0TWFya2VyKG1h
cmtlcnMsIHByaW1hcnkpOwotICB9Ci0KLSAgZnVuY3Rpb24gZmluZFNoYXJlZE1hcmtlcnMoZG9j
KSB7Ci0gICAgcmV0dXJuIGRvYy5maW5kTWFya3MoUG9zKGRvYy5maXJzdCwgMCksIGRvYy5jbGlw
UG9zKFBvcyhkb2MubGFzdExpbmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKG0pIHsgcmV0dXJuIG0ucGFyZW50OyB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvcHlTaGFy
ZWRNYXJrZXJzKGRvYywgbWFya2VycykgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vy
cy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1h
cmtlci5maW5kKCk7Ci0gICAgICB2YXIgbUZyb20gPSBkb2MuY2xpcFBvcyhwb3MuZnJvbSksIG1U
byA9IGRvYy5jbGlwUG9zKHBvcy50byk7Ci0gICAgICBpZiAoY21wKG1Gcm9tLCBtVG8pKSB7Ci0g
ICAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9jLCBtRnJvbSwgbVRvLCBtYXJrZXIucHJp
bWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7Ci0gICAgICAgIG1hcmtlci5tYXJrZXJzLnB1c2go
c3ViTWFyayk7Ci0gICAgICAgIHN1Yk1hcmsucGFyZW50ID0gbWFya2VyOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFya2VycykgewotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgewotICAgICAgdmFyIG1h
cmtlciA9IG1hcmtlcnNbaV0sIGxpbmtlZCA9IFttYXJrZXIucHJpbWFyeS5kb2NdOzsKLSAgICAg
IGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBmdW5jdGlvbihkKSB7IGxpbmtlZC5wdXNo
KGQpOyB9KTsKLSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFya2VyLm1hcmtlcnMubGVuZ3Ro
OyBqKyspIHsKLSAgICAgICAgdmFyIHN1Yk1hcmtlciA9IG1hcmtlci5tYXJrZXJzW2pdOwotICAg
ICAgICBpZiAoaW5kZXhPZihsaW5rZWQsIHN1Yk1hcmtlci5kb2MpID09IC0xKSB7Ci0gICAgICAg
ICAgc3ViTWFya2VyLnBhcmVudCA9IG51bGw7Ci0gICAgICAgICAgbWFya2VyLm1hcmtlcnMuc3Bs
aWNlKGotLSwgMSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBURVhU
TUFSS0VSIFNQQU5TCi0KLSAgZnVuY3Rpb24gTWFya2VkU3BhbihtYXJrZXIsIGZyb20sIHRvKSB7
Ci0gICAgdGhpcy5tYXJrZXIgPSBtYXJrZXI7Ci0gICAgdGhpcy5mcm9tID0gZnJvbTsgdGhpcy50
byA9IHRvOwotICB9Ci0KLSAgLy8gU2VhcmNoIGFuIGFycmF5IG9mIHNwYW5zIGZvciBhIHNwYW4g
bWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci4KLSAgZnVuY3Rpb24gZ2V0TWFya2VkU3BhbkZvcihz
cGFucywgbWFya2VyKSB7Ci0gICAgaWYgKHNwYW5zKSBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5z
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwotICAgICAgaWYgKHNw
YW4ubWFya2VyID09IG1hcmtlcikgcmV0dXJuIHNwYW47Ci0gICAgfQotICB9Ci0gIC8vIFJlbW92
ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBubyBzcGFucyBh
cmUKLSAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5lcyB3aXRob3V0IHNw
YW5zKS4KLSAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3BhbikgewotICAgIGZv
ciAodmFyIHIsIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBpZiAoc3BhbnNb
aV0gIT0gc3BhbikgKHIgfHwgKHIgPSBbXSkpLnB1c2goc3BhbnNbaV0pOwotICAgIHJldHVybiBy
OwotICB9Ci0gIC8vIEFkZCBhIHNwYW4gdG8gYSBsaW5lLgotICBmdW5jdGlvbiBhZGRNYXJrZWRT
cGFuKGxpbmUsIHNwYW4pIHsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0gbGluZS5tYXJrZWRTcGFu
cyA/IGxpbmUubWFya2VkU3BhbnMuY29uY2F0KFtzcGFuXSkgOiBbc3Bhbl07Ci0gICAgc3Bhbi5t
YXJrZXIuYXR0YWNoTGluZShsaW5lKTsKLSAgfQotCi0gIC8vIFVzZWQgZm9yIHRoZSBhbGdvcml0
aG0gdGhhdCBhZGp1c3RzIG1hcmtlcnMgZm9yIGEgY2hhbmdlIGluIHRoZQotICAvLyBkb2N1bWVu
dC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBvZiBzcGFucyBhdCBhIGdpdmVuCi0gIC8v
IGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJlbWFpbmluZyBjaHVu
a3MgKG9yCi0gIC8vIHVuZGVmaW5lZCBpZiBub3RoaW5nIHJlbWFpbnMpLgotICBmdW5jdGlvbiBt
YXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlzSW5zZXJ0KSB7Ci0gICAgaWYgKG9sZCkg
Zm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3Bh
biA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7Ci0gICAgICB2YXIgc3RhcnRzQmVmb3Jl
ID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9t
IDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTsKLSAgICAgIGlmIChzdGFydHNCZWZv
cmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gImJvb2ttYXJrIiAm
JiAoIWlzSW5zZXJ0IHx8ICFzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewotICAgICAgICB2YXIg
ZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBz
cGFuLnRvID49IHN0YXJ0Q2ggOiBzcGFuLnRvID4gc3RhcnRDaCk7Ci0gICAgICAgIChudyB8fCAo
bncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzcGFuLmZyb20sIGVuZHNBZnRl
ciA/IG51bGwgOiBzcGFuLnRvKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudzsKLSAg
fQotICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7Ci0g
ICAgaWYgKG9sZCkgZm9yICh2YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7Ci0gICAgICB2YXIg
ZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBz
cGFuLnRvID49IGVuZENoIDogc3Bhbi50byA+IGVuZENoKTsKLSAgICAgIGlmIChlbmRzQWZ0ZXIg
fHwgc3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50eXBlID09ICJib29rbWFyayIgJiYgKCFp
c0luc2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkgewotICAgICAgICB2YXIgc3RhcnRz
QmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bh
bi5mcm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5kQ2gpOwotICAgICAgICAobncgfHwgKG53
ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtlciwgc3RhcnRzQmVmb3JlID8gbnVsbCA6
IHNwYW4uZnJvbSAtIGVuZENoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG53OwotICB9Ci0KLSAgLy8gR2l2ZW4gYSBjaGFuZ2Ug
b2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1hcmtlciBzcGFucyB0aGF0Ci0gIC8vIGNv
dmVyIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBjaGFuZ2UgdG9vayBwbGFjZS4gUmVtb3ZlcyBzcGFu
cwotICAvLyBlbnRpcmVseSB3aXRoaW4gdGhlIGNoYW5nZSwgcmVjb25uZWN0cyBzcGFucyBiZWxv
bmdpbmcgdG8gdGhlCi0gIC8vIHNhbWUgbWFya2VyIHRoYXQgYXBwZWFyIG9uIGJvdGggc2lkZXMg
b2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmCi0gIC8vIHNwYW5zIHBhcnRpYWxseSB3aXRoaW4g
dGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBzcGFuCi0gIC8vIGFycmF5cyB3aXRoIG9u
ZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFmdGVyKSB0aGUgY2hhbmdlLgotICBmdW5jdGlv
biBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7Ci0gICAgdmFyIG9sZEZpcnN0
ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS5m
cm9tLmxpbmUpLm1hcmtlZFNwYW5zOwotICAgIHZhciBvbGRMYXN0ID0gaXNMaW5lKGRvYywgY2hh
bmdlLnRvLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkubWFya2VkU3BhbnM7
Ci0gICAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkgcmV0dXJuIG51bGw7Ci0KLSAgICB2YXIg
c3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9IGNoYW5nZS50by5jaCwgaXNJbnNlcnQg
PSBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMDsKLSAgICAvLyBHZXQgdGhlIHNwYW5z
IHRoYXQgJ3N0aWNrIG91dCcgb24gYm90aCBzaWRlcwotICAgIHZhciBmaXJzdCA9IG1hcmtlZFNw
YW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7Ci0gICAgdmFyIGxhc3QgPSBt
YXJrZWRTcGFuc0FmdGVyKG9sZExhc3QsIGVuZENoLCBpc0luc2VydCk7Ci0KLSAgICAvLyBOZXh0
LCBtZXJnZSB0aG9zZSB0d28gZW5kcwotICAgIHZhciBzYW1lTGluZSA9IGNoYW5nZS50ZXh0Lmxl
bmd0aCA9PSAxLCBvZmZzZXQgPSBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChzYW1lTGluZSA/
IHN0YXJ0Q2ggOiAwKTsKLSAgICBpZiAoZmlyc3QpIHsKLSAgICAgIC8vIEZpeCB1cCAudG8gcHJv
cGVydGllcyBvZiBmaXJzdAotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7
ICsraSkgewotICAgICAgICB2YXIgc3BhbiA9IGZpcnN0W2ldOwotICAgICAgICBpZiAoc3Bhbi50
byA9PSBudWxsKSB7Ci0gICAgICAgICAgdmFyIGZvdW5kID0gZ2V0TWFya2VkU3BhbkZvcihsYXN0
LCBzcGFuLm1hcmtlcik7Ci0gICAgICAgICAgaWYgKCFmb3VuZCkgc3Bhbi50byA9IHN0YXJ0Q2g7
Ci0gICAgICAgICAgZWxzZSBpZiAoc2FtZUxpbmUpIHNwYW4udG8gPSBmb3VuZC50byA9PSBudWxs
ID8gbnVsbCA6IGZvdW5kLnRvICsgb2Zmc2V0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIGlmIChsYXN0KSB7Ci0gICAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFzdCAob3IgbW92ZSB0
aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSkKLSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGFzdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3BhbiA9IGxhc3RbaV07Ci0g
ICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHNwYW4udG8gKz0gb2Zmc2V0OwotICAgICAgICBp
ZiAoc3Bhbi5mcm9tID09IG51bGwpIHsKLSAgICAgICAgICB2YXIgZm91bmQgPSBnZXRNYXJrZWRT
cGFuRm9yKGZpcnN0LCBzcGFuLm1hcmtlcik7Ci0gICAgICAgICAgaWYgKCFmb3VuZCkgewotICAg
ICAgICAgICAgc3Bhbi5mcm9tID0gb2Zmc2V0OwotICAgICAgICAgICAgaWYgKHNhbWVMaW5lKSAo
Zmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4pOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBzcGFuLmZyb20gKz0gb2Zmc2V0OwotICAgICAgICAgIGlmIChz
YW1lTGluZSkgKGZpcnN0IHx8IChmaXJzdCA9IFtdKSkucHVzaChzcGFuKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVy
by1sZW5ndGggc3BhbnMKLSAgICBpZiAoZmlyc3QpIGZpcnN0ID0gY2xlYXJFbXB0eVNwYW5zKGZp
cnN0KTsKLSAgICBpZiAobGFzdCAmJiBsYXN0ICE9IGZpcnN0KSBsYXN0ID0gY2xlYXJFbXB0eVNw
YW5zKGxhc3QpOwotCi0gICAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdOwotICAgIGlmICghc2Ft
ZUxpbmUpIHsKLSAgICAgIC8vIEZpbGwgZ2FwIHdpdGggd2hvbGUtbGluZS1zcGFucwotICAgICAg
dmFyIGdhcCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDIsIGdhcE1hcmtlcnM7Ci0gICAgICBpZiAo
Z2FwID4gMCAmJiBmaXJzdCkKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdC5sZW5n
dGg7ICsraSkKLSAgICAgICAgICBpZiAoZmlyc3RbaV0udG8gPT0gbnVsbCkKLSAgICAgICAgICAg
IChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKGZp
cnN0W2ldLm1hcmtlciwgbnVsbCwgbnVsbCkpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBn
YXA7ICsraSkKLSAgICAgICAgbmV3TWFya2Vycy5wdXNoKGdhcE1hcmtlcnMpOwotICAgICAgbmV3
TWFya2Vycy5wdXNoKGxhc3QpOwotICAgIH0KLSAgICByZXR1cm4gbmV3TWFya2VyczsKLSAgfQot
Ci0gIC8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFy
V2hlbkVtcHR5Ci0gIC8vIG9wdGlvbiBvZiBmYWxzZS4KLSAgZnVuY3Rpb24gY2xlYXJFbXB0eVNw
YW5zKHNwYW5zKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkg
ewotICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKLSAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVs
bCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAh
PT0gZmFsc2UpCi0gICAgICAgIHNwYW5zLnNwbGljZShpLS0sIDEpOwotICAgIH0KLSAgICBpZiAo
IXNwYW5zLmxlbmd0aCkgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHNwYW5zOwotICB9Ci0KLSAg
Ly8gVXNlZCBmb3IgdW4vcmUtZG9pbmcgY2hhbmdlcyBmcm9tIHRoZSBoaXN0b3J5LiBDb21iaW5l
cyB0aGUKLSAgLy8gcmVzdWx0IG9mIGNvbXB1dGluZyB0aGUgZXhpc3Rpbmcgc3BhbnMgd2l0aCB0
aGUgc2V0IG9mIHNwYW5zIHRoYXQKLSAgLy8gZXhpc3RlZCBpbiB0aGUgaGlzdG9yeSAoc28gdGhh
dCBkZWxldGluZyBhcm91bmQgYSBzcGFuIGFuZCB0aGVuCi0gIC8vIHVuZG9pbmcgYnJpbmdzIGJh
Y2sgdGhlIHNwYW4pLgotICBmdW5jdGlvbiBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSB7Ci0g
ICAgdmFyIG9sZCA9IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKTsKLSAgICB2YXIgc3RyZXRjaGVk
ID0gc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSk7Ci0gICAgaWYgKCFvbGQpIHJl
dHVybiBzdHJldGNoZWQ7Ci0gICAgaWYgKCFzdHJldGNoZWQpIHJldHVybiBvbGQ7Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGg7ICsraSkgewotICAgICAgdmFyIG9sZEN1ciA9
IG9sZFtpXSwgc3RyZXRjaEN1ciA9IHN0cmV0Y2hlZFtpXTsKLSAgICAgIGlmIChvbGRDdXIgJiYg
c3RyZXRjaEN1cikgewotICAgICAgICBzcGFuczogZm9yICh2YXIgaiA9IDA7IGogPCBzdHJldGNo
Q3VyLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgdmFyIHNwYW4gPSBzdHJldGNoQ3VyW2pdOwot
ICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb2xkQ3VyLmxlbmd0aDsgKytrKQotICAgICAg
ICAgICAgaWYgKG9sZEN1cltrXS5tYXJrZXIgPT0gc3Bhbi5tYXJrZXIpIGNvbnRpbnVlIHNwYW5z
OwotICAgICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug
aWYgKHN0cmV0Y2hDdXIpIHsKLSAgICAgICAgb2xkW2ldID0gc3RyZXRjaEN1cjsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIG9sZDsKLSAgfQotCi0gIC8vIFVzZWQgdG8gJ2NsaXAnIG91dCBy
ZWFkT25seSByYW5nZXMgd2hlbiBtYWtpbmcgYSBjaGFuZ2UuCi0gIGZ1bmN0aW9uIHJlbW92ZVJl
YWRPbmx5UmFuZ2VzKGRvYywgZnJvbSwgdG8pIHsKLSAgICB2YXIgbWFya2VycyA9IG51bGw7Ci0g
ICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAg
ICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRT
cGFucy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgbWFyayA9IGxpbmUubWFya2VkU3BhbnNb
aV0ubWFya2VyOwotICAgICAgICBpZiAobWFyay5yZWFkT25seSAmJiAoIW1hcmtlcnMgfHwgaW5k
ZXhPZihtYXJrZXJzLCBtYXJrKSA9PSAtMSkpCi0gICAgICAgICAgKG1hcmtlcnMgfHwgKG1hcmtl
cnMgPSBbXSkpLnB1c2gobWFyayk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaWYgKCFtYXJrZXJz
KSByZXR1cm4gbnVsbDsKLSAgICB2YXIgcGFydHMgPSBbe2Zyb206IGZyb20sIHRvOiB0b31dOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSkgewotICAgICAgdmFy
IG1rID0gbWFya2Vyc1tpXSwgbSA9IG1rLmZpbmQoMCk7Ci0gICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgIHZhciBwID0gcGFydHNbal07Ci0gICAg
ICAgIGlmIChjbXAocC50bywgbS5mcm9tKSA8IDAgfHwgY21wKHAuZnJvbSwgbS50bykgPiAwKSBj
b250aW51ZTsKLSAgICAgICAgdmFyIG5ld1BhcnRzID0gW2osIDFdLCBkZnJvbSA9IGNtcChwLmZy
b20sIG0uZnJvbSksIGR0byA9IGNtcChwLnRvLCBtLnRvKTsKLSAgICAgICAgaWYgKGRmcm9tIDwg
MCB8fCAhbWsuaW5jbHVzaXZlTGVmdCAmJiAhZGZyb20pCi0gICAgICAgICAgbmV3UGFydHMucHVz
aCh7ZnJvbTogcC5mcm9tLCB0bzogbS5mcm9tfSk7Ci0gICAgICAgIGlmIChkdG8gPiAwIHx8ICFt
ay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKQotICAgICAgICAgIG5ld1BhcnRzLnB1c2goe2Zyb206
IG0udG8sIHRvOiBwLnRvfSk7Ci0gICAgICAgIHBhcnRzLnNwbGljZS5hcHBseShwYXJ0cywgbmV3
UGFydHMpOwotICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0aCAtIDE7Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBwYXJ0czsKLSAgfQotCi0gIC8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBz
cGFucyBmcm9tIGEgbGluZS4KLSAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgewot
ICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgaWYgKCFzcGFucykgcmV0dXJu
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpCi0gICAgICBzcGFu
c1tpXS5tYXJrZXIuZGV0YWNoTGluZShsaW5lKTsKLSAgICBsaW5lLm1hcmtlZFNwYW5zID0gbnVs
bDsKLSAgfQotICBmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykgewotICAg
IGlmICghc3BhbnMpIHJldHVybjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0
aDsgKytpKQotICAgICAgc3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7Ci0gICAgbGlu
ZS5tYXJrZWRTcGFucyA9IHNwYW5zOwotICB9Ci0KLSAgLy8gSGVscGVycyB1c2VkIHdoZW4gY29t
cHV0aW5nIHdoaWNoIG92ZXJsYXBwaW5nIGNvbGxhcHNlZCBzcGFuCi0gIC8vIGNvdW50cyBhcyB0
aGUgbGFyZ2VyIG9uZS4KLSAgZnVuY3Rpb24gZXh0cmFMZWZ0KG1hcmtlcikgeyByZXR1cm4gbWFy
a2VyLmluY2x1c2l2ZUxlZnQgPyAtMSA6IDA7IH0KLSAgZnVuY3Rpb24gZXh0cmFSaWdodChtYXJr
ZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IDEgOiAwOyB9Ci0KLSAgLy8gUmV0
dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBz
ZWQKLSAgLy8gc3BhbnMgaXMgbGFyZ2VyIChhbmQgdGh1cyBpbmNsdWRlcyB0aGUgb3RoZXIpLiBG
YWxscyBiYWNrIHRvCi0gIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhh
Y3RseSB0aGUgc2FtZSByYW5nZS4KLSAgZnVuY3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMo
YSwgYikgewotICAgIHZhciBsZW5EaWZmID0gYS5saW5lcy5sZW5ndGggLSBiLmxpbmVzLmxlbmd0
aDsKLSAgICBpZiAobGVuRGlmZiAhPSAwKSByZXR1cm4gbGVuRGlmZjsKLSAgICB2YXIgYVBvcyA9
IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7Ci0gICAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5m
cm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVmdChhKSAtIGV4dHJhTGVmdChiKTsKLSAgICBpZiAo
ZnJvbUNtcCkgcmV0dXJuIC1mcm9tQ21wOwotICAgIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBi
UG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTsKLSAgICBpZiAodG9DbXAp
IHJldHVybiB0b0NtcDsKLSAgICByZXR1cm4gYi5pZCAtIGEuaWQ7Ci0gIH0KLQotICAvLyBGaW5k
IG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9yIHN0YXJ0cyBpbiBhIGNvbGxhcHNlZCBzcGFuLiBJ
ZgotICAvLyBzbywgcmV0dXJuIHRoZSBtYXJrZXIgZm9yIHRoYXQgc3Bhbi4KLSAgZnVuY3Rpb24g
Y29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCBzdGFydCkgewotICAgIHZhciBzcHMgPSBzYXdDb2xs
YXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDsKLSAgICBpZiAoc3BzKSBmb3Ig
KHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHNwID0gc3BzW2ld
OwotICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNw
LnRvKSA9PSBudWxsICYmCi0gICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFy
a2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKQotICAgICAgICBmb3VuZCA9IHNwLm1hcmtlcjsK
LSAgICB9Ci0gICAgcmV0dXJuIGZvdW5kOwotICB9Ci0gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5B
dFN0YXJ0KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgdHJ1ZSk7IH0K
LSAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNw
YW5BdFNpZGUobGluZSwgZmFsc2UpOyB9Ci0KLSAgLy8gVGVzdCB3aGV0aGVyIHRoZXJlIGV4aXN0
cyBhIGNvbGxhcHNlZCBzcGFuIHRoYXQgcGFydGlhbGx5Ci0gIC8vIG92ZXJsYXBzIChjb3ZlcnMg
dGhlIHN0YXJ0IG9yIGVuZCwgYnV0IG5vdCBib3RoKSBvZiBhIG5ldyBzcGFuLgotICAvLyBTdWNo
IG92ZXJsYXAgaXMgbm90IGFsbG93ZWQuCi0gIGZ1bmN0aW9uIGNvbmZsaWN0aW5nQ29sbGFwc2Vk
UmFuZ2UoZG9jLCBsaW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHsKLSAgICB2YXIgbGluZSA9IGdl
dExpbmUoZG9jLCBsaW5lTm8pOwotICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBs
aW5lLm1hcmtlZFNwYW5zOwotICAgIGlmIChzcHMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3AgPSBzcHNbaV07Ci0gICAgICBpZiAoIXNwLm1hcmtl
ci5jb2xsYXBzZWQpIGNvbnRpbnVlOwotICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQo
MCk7Ci0gICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxl
ZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpOwotICAgICAgdmFyIHRvQ21wID0gY21w
KGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJr
ZXIpOwotICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0g
MCAmJiB0b0NtcCA+PSAwKSBjb250aW51ZTsKLSAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKGNt
cChmb3VuZC50bywgZnJvbSkgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1h
cmtlcikpID4gMCB8fAotICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21wKGZvdW5kLmZyb20s
IHRvKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKSkgPCAwKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBBIHZpc3VhbCBsaW5lIGlz
IGEgbGluZSBhcyBkcmF3biBvbiB0aGUgc2NyZWVuLiBGb2xkaW5nLCBmb3IKLSAgLy8gZXhhbXBs
ZSwgY2FuIGNhdXNlIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgdG8gYXBwZWFyIG9uIHRoZSBzYW1l
Ci0gIC8vIHZpc3VhbCBsaW5lLiBUaGlzIGZpbmRzIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxp
bmUgdGhhdCB0aGUKLSAgLy8gZ2l2ZW4gbGluZSBpcyBwYXJ0IG9mICh1c3VhbGx5IHRoYXQgaXMg
dGhlIGxpbmUgaXRzZWxmKS4KLSAgZnVuY3Rpb24gdmlzdWFsTGluZShsaW5lKSB7Ci0gICAgdmFy
IG1lcmdlZDsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkp
Ci0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoLTEsIHRydWUpLmxpbmU7Ci0gICAgcmV0dXJuIGxp
bmU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxvZ2ljYWwgbGluZXMgdGhhdCBj
b250aW51ZSB0aGUgdmlzdWFsIGxpbmUKLSAgLy8gc3RhcnRlZCBieSB0aGUgYXJndW1lbnQsIG9y
IHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy4KLSAgZnVuY3Rpb24gdmlzdWFs
TGluZUNvbnRpbnVlZChsaW5lKSB7Ci0gICAgdmFyIG1lcmdlZCwgbGluZXM7Ci0gICAgd2hpbGUg
KG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkgewotICAgICAgbGluZSA9IG1lcmdl
ZC5maW5kKDEsIHRydWUpLmxpbmU7Ci0gICAgICAobGluZXMgfHwgKGxpbmVzID0gW10pKS5wdXNo
KGxpbmUpOwotICAgIH0KLSAgICByZXR1cm4gbGluZXM7Ci0gIH0KLQotICAvLyBHZXQgdGhlIGxp
bmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGUKLSAgLy8g
Z2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi4KLSAgZnVuY3Rpb24gdmlzdWFsTGluZU5vKGRv
YywgbGluZU4pIHsKLSAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIHZpcyA9IHZp
c3VhbExpbmUobGluZSk7Ci0gICAgaWYgKGxpbmUgPT0gdmlzKSByZXR1cm4gbGluZU47Ci0gICAg
cmV0dXJuIGxpbmVObyh2aXMpOwotICB9Ci0gIC8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhl
IHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyCi0gIC8vIHRoZSBnaXZlbiBsaW5l
LgotICBmdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5lTikgewotICAgIGlmIChsaW5l
TiA+IGRvYy5sYXN0TGluZSgpKSByZXR1cm4gbGluZU47Ci0gICAgdmFyIGxpbmUgPSBnZXRMaW5l
KGRvYywgbGluZU4pLCBtZXJnZWQ7Ci0gICAgaWYgKCFsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkg
cmV0dXJuIGxpbmVOOwotICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGlu
ZSkpCi0gICAgICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsKLSAgICByZXR1cm4g
bGluZU5vKGxpbmUpICsgMTsKLSAgfQotCi0gIC8vIENvbXB1dGUgd2hldGhlciBhIGxpbmUgaXMg
aGlkZGVuLiBMaW5lcyBjb3VudCBhcyBoaWRkZW4gd2hlbiB0aGV5Ci0gIC8vIGFyZSBwYXJ0IG9m
IGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxpbmUsIG9yIHdoZW4KLSAg
Ly8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJlZCBieSBjb2xsYXBzZWQsIG5vbi13aWRnZXQgc3Bh
bi4KLSAgZnVuY3Rpb24gbGluZUlzSGlkZGVuKGRvYywgbGluZSkgewotICAgIHZhciBzcHMgPSBz
YXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwotICAgIGlmIChzcHMpIGZvciAo
dmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewotICAgICAgc3AgPSBzcHNbaV07
Ci0gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRpbnVlOwotICAgICAgaWYgKHNw
LmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoc3AubWFya2VyLndpZGdldE5v
ZGUpIGNvbnRpbnVlOwotICAgICAgaWYgKHNwLmZyb20gPT0gMCAmJiBzcC5tYXJrZXIuaW5jbHVz
aXZlTGVmdCAmJiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklubmVyKGRvYywg
bGluZSwgc3BhbikgewotICAgIGlmIChzcGFuLnRvID09IG51bGwpIHsKLSAgICAgIHZhciBlbmQg
PSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpOwotICAgICAgcmV0dXJuIGxpbmVJc0hpZGRlbklu
bmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kLmxpbmUubWFya2VkU3BhbnMs
IHNwYW4ubWFya2VyKSk7Ci0gICAgfQotICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdo
dCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBmb3IgKHZhciBzcCwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7
Ci0gICAgICBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV07Ci0gICAgICBpZiAoc3AubWFya2VyLmNv
bGxhcHNlZCAmJiAhc3AubWFya2VyLndpZGdldE5vZGUgJiYgc3AuZnJvbSA9PSBzcGFuLnRvICYm
Ci0gICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgc3AudG8gIT0gc3Bhbi5mcm9tKSAmJgotICAg
ICAgICAgIChzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtlci5pbmNsdXNpdmVS
aWdodCkgJiYKLSAgICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwKSkgcmV0
dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLy8gTElORSBXSURHRVRTCi0KLSAgLy8gTGluZSB3
aWRnZXRzIGFyZSBibG9jayBlbGVtZW50cyBkaXNwbGF5ZWQgYWJvdmUgb3IgYmVsb3cgYSBsaW5l
LgotCi0gIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVuY3Rpb24o
Y20sIG5vZGUsIG9wdGlvbnMpIHsKLSAgICBpZiAob3B0aW9ucykgZm9yICh2YXIgb3B0IGluIG9w
dGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpCi0gICAgICB0aGlzW29wdF0g
PSBvcHRpb25zW29wdF07Ci0gICAgdGhpcy5jbSA9IGNtOwotICAgIHRoaXMubm9kZSA9IG5vZGU7
Ci0gIH07Ci0gIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7Ci0KLSAgZnVuY3Rpb24gYWRqdXN0U2Ny
b2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikgewotICAgIGlmIChoZWlnaHRBdExp
bmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCkgfHwgY20uZG9jLnNj
cm9sbFRvcCkpCi0gICAgICBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgZGlmZik7Ci0gIH0KLQot
ICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBjbSA9
IHRoaXMuY20sIHdzID0gdGhpcy5saW5lLndpZGdldHMsIGxpbmUgPSB0aGlzLmxpbmUsIG5vID0g
bGluZU5vKGxpbmUpOwotICAgIGlmIChubyA9PSBudWxsIHx8ICF3cykgcmV0dXJuOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5z
cGxpY2UoaS0tLCAxKTsKLSAgICBpZiAoIXdzLmxlbmd0aCkgbGluZS53aWRnZXRzID0gbnVsbDsK
LSAgICB2YXIgaGVpZ2h0ID0gd2lkZ2V0SGVpZ2h0KHRoaXMpOwotICAgIHJ1bkluT3AoY20sIGZ1
bmN0aW9uKCkgewotICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwg
LWhlaWdodCk7Ci0gICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgIndpZGdldCIpOwotICAgICAg
dXBkYXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkp
OwotICAgIH0pOwotICB9OwotICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rp
b24oKSB7Ci0gICAgdmFyIG9sZEggPSB0aGlzLmhlaWdodCwgY20gPSB0aGlzLmNtLCBsaW5lID0g
dGhpcy5saW5lOwotICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKLSAgICB2YXIgZGlmZiA9IHdpZGdl
dEhlaWdodCh0aGlzKSAtIG9sZEg7Ci0gICAgaWYgKCFkaWZmKSByZXR1cm47Ci0gICAgcnVuSW5P
cChjbSwgZnVuY3Rpb24oKSB7Ci0gICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0g
ICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCBkaWZmKTsKLSAgICAg
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsKLSAgICB9KTsKLSAg
fTsKLQotICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7Ci0gICAgaWYgKHdpZGdldC5o
ZWlnaHQgIT0gbnVsbCkgcmV0dXJuIHdpZGdldC5oZWlnaHQ7Ci0gICAgaWYgKCFjb250YWlucyhk
b2N1bWVudC5ib2R5LCB3aWRnZXQubm9kZSkpCi0gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh3
aWRnZXQuY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoImRpdiIsIFt3aWRnZXQubm9kZV0sIG51bGws
ICJwb3NpdGlvbjogcmVsYXRpdmUiKSk7Ci0gICAgcmV0dXJuIHdpZGdldC5oZWlnaHQgPSB3aWRn
ZXQubm9kZS5vZmZzZXRIZWlnaHQ7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRMaW5lV2lkZ2V0KGNt
LCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRn
ZXQoY20sIG5vZGUsIG9wdGlvbnMpOwotICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSBjbS5kaXNw
bGF5LmFsaWduV2lkZ2V0cyA9IHRydWU7Ci0gICAgY2hhbmdlTGluZShjbSwgaGFuZGxlLCAid2lk
Z2V0IiwgZnVuY3Rpb24obGluZSkgewotICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMg
fHwgKGxpbmUud2lkZ2V0cyA9IFtdKTsKLSAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVs
bCkgd2lkZ2V0cy5wdXNoKHdpZGdldCk7Ci0gICAgICBlbHNlIHdpZGdldHMuc3BsaWNlKE1hdGgu
bWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAs
IHdpZGdldCk7Ci0gICAgICB3aWRnZXQubGluZSA9IGxpbmU7Ci0gICAgICBpZiAoIWxpbmVJc0hp
ZGRlbihjbS5kb2MsIGxpbmUpKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRB
dExpbmUobGluZSkgPCBjbS5kb2Muc2Nyb2xsVG9wOwotICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0
KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpOwotICAgICAgICBpZiAo
YWJvdmVWaXNpYmxlKSBhZGRUb1Njcm9sbFBvcyhjbSwgbnVsbCwgd2lkZ2V0LmhlaWdodCk7Ci0g
ICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0pOwotICAgIHJldHVybiB3aWRnZXQ7Ci0gIH0KLQotICAvLyBMSU5FIERB
VEEgU1RSVUNUVVJFCi0KLSAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0
ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKLSAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHls
ZXMgYXJyYXkpLgotICB2YXIgTGluZSA9IENvZGVNaXJyb3IuTGluZSA9IGZ1bmN0aW9uKHRleHQs
IG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAgIHRoaXMudGV4dCA9IHRleHQ7Ci0g
ICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpOwotICAgIHRoaXMuaGVpZ2h0
ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7Ci0gIH07Ci0gIGV2
ZW50TWl4aW4oTGluZSk7Ci0gIExpbmUucHJvdG90eXBlLmxpbmVObyA9IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gbGluZU5vKHRoaXMpOyB9OwotCi0gIC8vIENoYW5nZSB0aGUgY29udGVudCAodGV4dCwg
bWFya2Vycykgb2YgYSBsaW5lLiBBdXRvbWF0aWNhbGx5Ci0gIC8vIGludmFsaWRhdGVzIGNhY2hl
ZCBpbmZvcm1hdGlvbiBhbmQgdHJpZXMgdG8gcmUtZXN0aW1hdGUgdGhlCi0gIC8vIGxpbmUncyBo
ZWlnaHQuCi0gIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVz
dGltYXRlSGVpZ2h0KSB7Ci0gICAgbGluZS50ZXh0ID0gdGV4dDsKLSAgICBpZiAobGluZS5zdGF0
ZUFmdGVyKSBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwotICAgIGlmIChsaW5lLnN0eWxlcykgbGlu
ZS5zdHlsZXMgPSBudWxsOwotICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIGxpbmUub3JkZXIg
PSBudWxsOwotICAgIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpOwotICAgIGF0dGFjaE1hcmtlZFNw
YW5zKGxpbmUsIG1hcmtlZFNwYW5zKTsKLSAgICB2YXIgZXN0SGVpZ2h0ID0gZXN0aW1hdGVIZWln
aHQgPyBlc3RpbWF0ZUhlaWdodChsaW5lKSA6IDE7Ci0gICAgaWYgKGVzdEhlaWdodCAhPSBsaW5l
LmhlaWdodCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOwotICB9Ci0KLSAgLy8g
RGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy4KLSAg
ZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkgewotICAgIGxpbmUucGFyZW50ID0gbnVsbDsKLSAg
ICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGV4dHJhY3RMaW5l
Q2xhc3Nlcyh0eXBlLCBvdXRwdXQpIHsKLSAgICBpZiAodHlwZSkgZm9yICg7OykgewotICAgICAg
dmFyIGxpbmVDbGFzcyA9IHR5cGUubWF0Y2goLyg/Ol58XHMrKWxpbmUtKGJhY2tncm91bmQtKT8o
XFMrKS8pOwotICAgICAgaWYgKCFsaW5lQ2xhc3MpIGJyZWFrOwotICAgICAgdHlwZSA9IHR5cGUu
c2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsg
bGluZUNsYXNzWzBdLmxlbmd0aCk7Ci0gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/ICJi
Z0NsYXNzIiA6ICJ0ZXh0Q2xhc3MiOwotICAgICAgaWYgKG91dHB1dFtwcm9wXSA9PSBudWxsKQot
ICAgICAgICBvdXRwdXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07Ci0gICAgICBlbHNlIGlmICghKG5l
dyBSZWdFeHAoIig/Ol58XHMpIiArIGxpbmVDbGFzc1syXSArICIoPzokfFxzKSIpKS50ZXN0KG91
dHB1dFtwcm9wXSkpCi0gICAgICAgIG91dHB1dFtwcm9wXSArPSAiICIgKyBsaW5lQ2xhc3NbMl07
Ci0gICAgfQotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgZnVuY3Rpb24gY2FsbEJsYW5rTGlu
ZShtb2RlLCBzdGF0ZSkgewotICAgIGlmIChtb2RlLmJsYW5rTGluZSkgcmV0dXJuIG1vZGUuYmxh
bmtMaW5lKHN0YXRlKTsKLSAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSByZXR1cm47Ci0gICAgdmFy
IGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpOwotICAgIGlmIChpbm5l
ci5tb2RlLmJsYW5rTGluZSkgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRl
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKSB7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgICB2YXIgc3R5bGUgPSBtb2Rl
LnRva2VuKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHN0cmVhbS5wb3MgPiBzdHJlYW0uc3Rh
cnQpIHJldHVybiBzdHlsZTsKLSAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9yKCJNb2RlICIgKyBt
b2RlLm5hbWUgKyAiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKTsKLSAgfQotCi0gIC8vIFJ1
biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgY2FsbGluZyBmIGZvciBlYWNo
IHRva2VuLgotICBmdW5jdGlvbiBydW5Nb2RlKGNtLCB0ZXh0LCBtb2RlLCBzdGF0ZSwgZiwgbGlu
ZUNsYXNzZXMsIGZvcmNlVG9FbmQpIHsKLSAgICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0
dGVuU3BhbnM7Ci0gICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSBmbGF0dGVuU3BhbnMgPSBj
bS5vcHRpb25zLmZsYXR0ZW5TcGFuczsKLSAgICB2YXIgY3VyU3RhcnQgPSAwLCBjdXJTdHlsZSA9
IG51bGw7Ci0gICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9u
cy50YWJTaXplKSwgc3R5bGU7Ci0gICAgaWYgKHRleHQgPT0gIiIpIGV4dHJhY3RMaW5lQ2xhc3Nl
cyhjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSwgbGluZUNsYXNzZXMpOwotICAgIHdoaWxlICgh
c3RyZWFtLmVvbCgpKSB7Ci0gICAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9wdGlvbnMubWF4SGln
aGxpZ2h0TGVuZ3RoKSB7Ci0gICAgICAgIGZsYXR0ZW5TcGFucyA9IGZhbHNlOwotICAgICAgICBp
ZiAoZm9yY2VUb0VuZCkgcHJvY2Vzc0xpbmUoY20sIHRleHQsIHN0YXRlLCBzdHJlYW0ucG9zKTsK
LSAgICAgICAgc3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwotICAgICAgICBzdHlsZSA9IG51bGw7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFk
VG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKLSAgICAgIH0KLSAgICAg
IGlmIChjbS5vcHRpb25zLmFkZE1vZGVDbGFzcykgewotICAgICAgICB2YXIgbU5hbWUgPSBDb2Rl
TWlycm9yLmlubmVyTW9kZShtb2RlLCBzdGF0ZSkubW9kZS5uYW1lOwotICAgICAgICBpZiAobU5h
bWUpIHN0eWxlID0gIm0tIiArIChzdHlsZSA/IG1OYW1lICsgIiAiICsgc3R5bGUgOiBtTmFtZSk7
Ci0gICAgICB9Ci0gICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHlsZSAhPSBzdHlsZSkg
ewotICAgICAgICBpZiAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIGYoc3RyZWFtLnN0YXJ0LCBj
dXJTdHlsZSk7Ci0gICAgICAgIGN1clN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyBjdXJTdHlsZSA9IHN0
eWxlOwotICAgICAgfQotICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKLSAgICB9Ci0g
ICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnBvcykgewotICAgICAgLy8gV2Via2l0IHNlZW1z
IHRvIHJlZnVzZSB0byByZW5kZXIgdGV4dCBub2RlcyBsb25nZXIgdGhhbiA1NzQ0NCBjaGFyYWN0
ZXJzCi0gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3VyU3RhcnQgKyA1MDAw
MCk7Ci0gICAgICBmKHBvcywgY3VyU3R5bGUpOwotICAgICAgY3VyU3RhcnQgPSBwb3M7Ci0gICAg
fQotICB9Ci0KLSAgLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChhbiBhcnJheSBzdGFydGluZyB3
aXRoIGEgbW9kZSBnZW5lcmF0aW9uCi0gIC8vIC0tIGZvciBpbnZhbGlkYXRpb24gLS0gZm9sbG93
ZWQgYnkgcGFpcnMgb2YgZW5kIHBvc2l0aW9ucyBhbmQKLSAgLy8gc3R5bGUgc3RyaW5ncyksIHdo
aWNoIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSB0b2tlbnMgb24gdGhlCi0gIC8vIGxpbmUuCi0g
IGZ1bmN0aW9uIGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCBmb3JjZVRvRW5kKSB7Ci0g
ICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5
aW5nIHRoZQotICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVh
c3kgaW52YWxpZGF0aW9uKS4KLSAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVD
bGFzc2VzID0ge307Ci0gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBvZiBzdHlsZXMKLSAg
ICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBzdGF0ZSwgZnVuY3Rpb24oZW5k
LCBzdHlsZSkgewotICAgICAgc3QucHVzaChlbmQsIHN0eWxlKTsKLSAgICB9LCBsaW5lQ2xhc3Nl
cywgZm9yY2VUb0VuZCk7Ci0KLSAgICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJh
eS4KLSAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsgKytv
KSB7Ci0gICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwgYXQg
PSAwOwotICAgICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBvdmVybGF5Lm1vZGUsIHRydWUsIGZ1
bmN0aW9uKGVuZCwgc3R5bGUpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gaTsKLSAgICAgICAgLy8g
RW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCB0
aGF0IGkgcG9pbnRzIGF0IGl0Ci0gICAgICAgIHdoaWxlIChhdCA8IGVuZCkgewotICAgICAgICAg
IHZhciBpX2VuZCA9IHN0W2ldOwotICAgICAgICAgIGlmIChpX2VuZCA+IGVuZCkKLSAgICAgICAg
ICAgIHN0LnNwbGljZShpLCAxLCBlbmQsIHN0W2krMV0sIGlfZW5kKTsKLSAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIXN0eWxlKSByZXR1cm47Ci0gICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkgewot
ICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsICJjbS1vdmVybGF5ICIg
KyBzdHlsZSk7Ci0gICAgICAgICAgaSA9IHN0YXJ0ICsgMjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7Ci0gICAgICAgICAgICB2YXIg
Y3VyID0gc3Rbc3RhcnQrMV07Ci0gICAgICAgICAgICBzdFtzdGFydCsxXSA9IChjdXIgPyBjdXIg
KyAiICIgOiAiIikgKyAiY20tb3ZlcmxheSAiICsgc3R5bGU7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9LCBsaW5lQ2xhc3Nlcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHtzdHlsZXM6
IHN0LCBjbGFzc2VzOiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFzc2VzLnRleHRDbGFz
cyA/IGxpbmVDbGFzc2VzIDogbnVsbH07Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVz
KGNtLCBsaW5lKSB7Ci0gICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0eWxlc1swXSAhPSBj
bS5zdGF0ZS5tb2RlR2VuKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0TGluZShjbSwg
bGluZSwgbGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkp
OwotICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzOwotICAgICAgaWYgKHJlc3VsdC5j
bGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOwotICAgICAgZWxzZSBp
ZiAobGluZS5zdHlsZUNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsKLSAgICB9Ci0g
ICAgcmV0dXJuIGxpbmUuc3R5bGVzOwotICB9Ci0KLSAgLy8gTGlnaHR3ZWlnaHQgZm9ybSBvZiBo
aWdobGlnaHQgLS0gcHJvY2VlZCBvdmVyIHRoaXMgbGluZSBhbmQKLSAgLy8gdXBkYXRlIHN0YXRl
LCBidXQgZG9uJ3Qgc2F2ZSBhIHN0eWxlIGFycmF5LiBVc2VkIGZvciBsaW5lcyB0aGF0Ci0gIC8v
IGFyZW4ndCBjdXJyZW50bHkgdmlzaWJsZS4KLSAgZnVuY3Rpb24gcHJvY2Vzc0xpbmUoY20sIHRl
eHQsIHN0YXRlLCBzdGFydEF0KSB7Ci0gICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTsKLSAgICB2
YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUpOwot
ICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFydEF0IHx8IDA7Ci0gICAgaWYgKHRl
eHQgPT0gIiIpIGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpOwotICAgIHdoaWxlICghc3RyZWFt
LmVvbCgpICYmIHN0cmVhbS5wb3MgPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHsK
LSAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKTsKLSAgICAgIHN0cmVhbS5zdGFy
dCA9IHN0cmVhbS5wb3M7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBhIHN0eWxlIGFzIHJl
dHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9yIGEgc3RyaW5nCi0gIC8vIGNvbnRhaW5p
bmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0byBhIENTUyBzdHlsZS4gVGhpcyBpcyBjYWNoZWQsCi0g
IC8vIGFuZCBhbHNvIGxvb2tzIGZvciBsaW5lLXdpZGUgc3R5bGVzLgotICB2YXIgc3R5bGVUb0Ns
YXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA9IHt9OwotICBmdW5jdGlv
biBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBvcHRpb25zKSB7Ci0gICAgaWYgKCFzdHlsZSB8
fCAvXlxzKiQvLnRlc3Qoc3R5bGUpKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgY2FjaGUgPSBvcHRp
b25zLmFkZE1vZGVDbGFzcyA/IHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgOiBzdHlsZVRvQ2xh
c3NDYWNoZTsKLSAgICByZXR1cm4gY2FjaGVbc3R5bGVdIHx8Ci0gICAgICAoY2FjaGVbc3R5bGVd
ID0gc3R5bGUucmVwbGFjZSgvXFMrL2csICJjbS0kJiIpKTsKLSAgfQotCi0gIC8vIFJlbmRlciB0
aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IG9mIGEgbGluZS4gQWxzbyBidWlsZHMK
LSAgLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2ludHMgYXQgdGhlIERPTSBub2RlcyB0aGF0
IHJlcHJlc2VudAotICAvLyBzcGVjaWZpYyBzdHJldGNoZXMgb2YgdGV4dCwgYW5kIGlzIHVzZWQg
YnkgdGhlIG1lYXN1cmluZyBjb2RlLgotICAvLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5z
IHRoZSBET00gbm9kZSwgdGhpcyBtYXAsIGFuZAotICAvLyBpbmZvcm1hdGlvbiBhYm91dCBsaW5l
LXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIG1vZGUuCi0gIGZ1bmN0aW9uIGJ1aWxk
TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7Ci0gICAgLy8gVGhlIHBhZGRpbmctcmlnaHQgZm9y
Y2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSAnYm9yZGVyJywgd2hpY2gKLSAgICAvLyBpcyBuZWVk
ZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUtbGV2ZWwgYm91bmRpbmcKLSAgICAv
LyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNoYXIpLgotICAgIHZhciBjb250ZW50ID0g
ZWx0KCJzcGFuIiwgbnVsbCwgbnVsbCwgd2Via2l0ID8gInBhZGRpbmctcmlnaHQ6IC4xcHgiIDog
bnVsbCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIsIFtjb250ZW50XSksIGNv
bnRlbnQ6IGNvbnRlbnQsIGNvbDogMCwgcG9zOiAwLCBjbTogY219OwotICAgIGxpbmVWaWV3Lm1l
YXN1cmUgPSB7fTsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbG9naWNhbCBsaW5lcyB0aGF0
IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGluZS4KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAobGlu
ZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3RoIDogMCk7IGkrKykgewotICAgICAgdmFy
IGxpbmUgPSBpID8gbGluZVZpZXcucmVzdFtpIC0gMV0gOiBsaW5lVmlldy5saW5lLCBvcmRlcjsK
LSAgICAgIGJ1aWxkZXIucG9zID0gMDsKLSAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRv
a2VuOwotICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9r
ZW4tcmVuZGVyaW5nCi0gICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1
aXJrcy4KLSAgICAgIGlmICgoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFw
cGluZyIpKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlblNwbGl0U3BhY2Vz
KGJ1aWxkZXIuYWRkVG9rZW4pOwotICAgICAgaWYgKGhhc0JhZEJpZGlSZWN0cyhjbS5kaXNwbGF5
Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUpKSkKLSAgICAgICAgYnVpbGRlci5h
ZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsKLSAg
ICAgIGJ1aWxkZXIubWFwID0gW107Ci0gICAgICBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWls
ZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSk7Ci0gICAgICBpZiAobGluZS5zdHlsZUNsYXNz
ZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MpCi0gICAgICAgICAg
YnVpbGRlci5iZ0NsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcywg
YnVpbGRlci5iZ0NsYXNzIHx8ICIiKTsKLSAgICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzLnRl
eHRDbGFzcykKLSAgICAgICAgICBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUu
c3R5bGVDbGFzc2VzLnRleHRDbGFzcywgYnVpbGRlci50ZXh0Q2xhc3MgfHwgIiIpOwotICAgICAg
fQotCi0gICAgICAvLyBFbnN1cmUgYXQgbGVhc3QgYSBzaW5nbGUgbm9kZSBpcyBwcmVzZW50LCBm
b3IgbWVhc3VyaW5nLgotICAgICAgaWYgKGJ1aWxkZXIubWFwLmxlbmd0aCA9PSAwKQotICAgICAg
ICBidWlsZGVyLm1hcC5wdXNoKDAsIDAsIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZCh6ZXJv
V2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpKTsKLQotICAgICAgLy8gU3RvcmUgdGhl
IG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluZQotICAg
ICAgaWYgKGkgPT0gMCkgewotICAgICAgICBsaW5lVmlldy5tZWFzdXJlLm1hcCA9IGJ1aWxkZXIu
bWFwOwotICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmlldy5tZWFzdXJlLm1h
cHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApOwotICAgICAgICAobGluZVZpZXcubWVhc3VyZS5j
YWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20sIGxpbmVWaWV3Lmxp
bmUsIGJ1aWxkZXIucHJlKTsKLSAgICBpZiAoYnVpbGRlci5wcmUuY2xhc3NOYW1lKQotICAgICAg
YnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhidWlsZGVyLnByZS5jbGFzc05hbWUsIGJ1
aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKLSAgICByZXR1cm4gYnVpbGRlcjsKLSAgfQotCi0gIGZ1
bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7Ci0gICAgdmFyIHRva2Vu
ID0gZWx0KCJzcGFuIiwgIlx1MjAyMiIsICJjbS1pbnZhbGlkY2hhciIpOwotICAgIHRva2VuLnRp
dGxlID0gIlxcdSIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsKLSAgICByZXR1cm4g
dG9rZW47Ci0gIH0KLQotICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIGZvciBh
IHNpbmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0bwotICAvLyB0aGUgbGluZSBtYXAuIFRha2VzIGNh
cmUgdG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5LgotICBmdW5jdGlvbiBi
dWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0
bGUpIHsKLSAgICBpZiAoIXRleHQpIHJldHVybjsKLSAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIu
Y20ub3B0aW9ucy5zcGVjaWFsQ2hhcnMsIG11c3RXcmFwID0gZmFsc2U7Ci0gICAgaWYgKCFzcGVj
aWFsLnRlc3QodGV4dCkpIHsKLSAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQubGVuZ3RoOwotICAg
ICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKLSAgICAgIGJ1
aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4dC5sZW5ndGgsIGNv
bnRlbnQpOwotICAgICAgaWYgKGllX3VwdG84KSBtdXN0V3JhcCA9IHRydWU7Ci0gICAgICBidWls
ZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIGNvbnRlbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIHBvcyA9IDA7Ci0gICAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvczsKLSAgICAgICAgdmFy
IG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7Ci0gICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5k
ZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvczsKLSAgICAgICAgaWYgKHNraXBwZWQpIHsKLSAg
ICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShwb3Ms
IHBvcyArIHNraXBwZWQpKTsKLSAgICAgICAgICBpZiAoaWVfdXB0bzgpIGNvbnRlbnQuYXBwZW5k
Q2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKLSAgICAgICAgICBlbHNlIGNvbnRlbnQuYXBwZW5k
Q2hpbGQodHh0KTsKLSAgICAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWls
ZGVyLnBvcyArIHNraXBwZWQsIHR4dCk7Ci0gICAgICAgICAgYnVpbGRlci5jb2wgKz0gc2tpcHBl
ZDsKLSAgICAgICAgICBidWlsZGVyLnBvcyArPSBza2lwcGVkOwotICAgICAgICB9Ci0gICAgICAg
IGlmICghbSkgYnJlYWs7Ci0gICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsKLSAgICAgICAgaWYg
KG1bMF0gPT0gIlx0IikgewotICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRp
b25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTsK
LSAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBzcGFj
ZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7Ci0gICAgICAgICAgYnVpbGRlci5jb2wgKz0gdGFi
V2lkdGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFyIHR4dCA9IGJ1aWxkZXIuY20u
b3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pOwotICAgICAgICAgIGlmIChpZV91
cHRvOCkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0XSkpOwotICAgICAgICAg
IGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwotICAgICAgICAgIGJ1aWxkZXIuY29sICs9
IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVp
bGRlci5wb3MgKyAxLCB0eHQpOwotICAgICAgICBidWlsZGVyLnBvcysrOwotICAgICAgfQotICAg
IH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0V3JhcCkg
ewotICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIiOwotICAgICAgaWYgKHN0YXJ0U3R5
bGUpIGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOwotICAgICAgaWYgKGVuZFN0eWxlKSBmdWxsU3R5
bGUgKz0gZW5kU3R5bGU7Ci0gICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCBbY29udGVudF0s
IGZ1bGxTdHlsZSk7Ci0gICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0gdGl0bGU7Ci0gICAg
ICByZXR1cm4gYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHRva2VuKTsKLSAgICB9Ci0gICAg
YnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpOwotICB9Ci0KLSAgZnVuY3Rpb24g
YnVpbGRUb2tlblNwbGl0U3BhY2VzKGlubmVyKSB7Ci0gICAgZnVuY3Rpb24gc3BsaXQob2xkKSB7
Ci0gICAgICB2YXIgb3V0ID0gIiAiOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVu
Z3RoIC0gMjsgKytpKSBvdXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsKLSAgICAgIG91dCAr
PSAiICI7Ci0gICAgICByZXR1cm4gb3V0OwotICAgIH0KLSAgICByZXR1cm4gZnVuY3Rpb24oYnVp
bGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSkgewotICAgICAg
aW5uZXIoYnVpbGRlciwgdGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdCksIHN0eWxlLCBzdGFy
dFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpOwotICAgIH07Ci0gIH0KLQotICAvLyBXb3JrIGFyb3Vu
ZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2YKLSAg
Ly8gcmlnaHQtdG8tbGVmdCB0ZXh0LgotICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5l
ciwgb3JkZXIpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0
YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSkgewotICAgICAgc3R5bGUgPSBzdHlsZSA/IHN0eWxl
ICsgIiBjbS1mb3JjZS1ib3JkZXIiIDogImNtLWZvcmNlLWJvcmRlciI7Ci0gICAgICB2YXIgc3Rh
cnQgPSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDsKLSAgICAgIGZvciAo
OzspIHsKLSAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0
YXJ0IG9mIHRoaXMgdGV4dAotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKLSAgICAgICAgICBpZiAo
cGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dCwg
c3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Ci0gICAgICAgIGlubmVyKGJ1aWxk
ZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51
bGwsIHRpdGxlKTsKLSAgICAgICAgc3RhcnRTdHlsZSA9IG51bGw7Ci0gICAgICAgIHRleHQgPSB0
ZXh0LnNsaWNlKHBhcnQudG8gLSBzdGFydCk7Ci0gICAgICAgIHN0YXJ0ID0gcGFydC50bzsKLSAg
ICAgIH0KLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxk
ZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7Ci0gICAgdmFyIHdpZGdldCA9ICFpZ25v
cmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7Ci0gICAgaWYgKHdpZGdldCkgewotICAgICAg
YnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQp
OwotICAgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHdpZGdldCk7Ci0gICAgfQotICAg
IGJ1aWxkZXIucG9zICs9IHNpemU7Ci0gIH0KLQotICAvLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNw
YW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nCi0gIC8vIGFuZCBtYXJr
ZWQgdGV4dCBpbnRvIGFjY291bnQuCi0gIGZ1bmN0aW9uIGluc2VydExpbmVDb250ZW50KGxpbmUs
IGJ1aWxkZXIsIHN0eWxlcykgewotICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFs
bFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDsKLSAgICBpZiAoIXNwYW5zKSB7Ci0gICAgICBmb3Ig
KHZhciBpID0gMTsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrPTIpCi0gICAgICAgIGJ1aWxkZXIuYWRk
VG9rZW4oYnVpbGRlciwgYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaV0pLCBpbnRlcnBy
ZXRUb2tlblN0eWxlKHN0eWxlc1tpKzFdLCBidWlsZGVyLmNtLm9wdGlvbnMpKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkg
PSAxLCB0ZXh0ID0gIiIsIHN0eWxlOwotICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxl
LCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFwc2VkOwotICAgIGZv
ciAoOzspIHsKLSAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVu
dCBtYXJrZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFy
dFN0eWxlID0gdGl0bGUgPSAiIjsKLSAgICAgICAgY29sbGFwc2VkID0gbnVsbDsgbmV4dENoYW5n
ZSA9IEluZmluaXR5OwotICAgICAgICB2YXIgZm91bmRCb29rbWFya3MgPSBbXTsKLSAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikgewotICAgICAgICAgIHZhciBz
cCA9IHNwYW5zW2pdLCBtID0gc3AubWFya2VyOwotICAgICAgICAgIGlmIChzcC5mcm9tIDw9IHBv
cyAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA+IHBvcykpIHsKLSAgICAgICAgICAgIGlmIChz
cC50byAhPSBudWxsICYmIG5leHRDaGFuZ2UgPiBzcC50bykgeyBuZXh0Q2hhbmdlID0gc3AudG87
IHNwYW5FbmRTdHlsZSA9ICIiOyB9Ci0gICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHNwYW5T
dHlsZSArPSAiICIgKyBtLmNsYXNzTmFtZTsKLSAgICAgICAgICAgIGlmIChtLnN0YXJ0U3R5bGUg
JiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0uc3RhcnRTdHlsZTsK
LSAgICAgICAgICAgIGlmIChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRDaGFuZ2UpIHNwYW5F
bmRTdHlsZSArPSAiICIgKyBtLmVuZFN0eWxlOwotICAgICAgICAgICAgaWYgKG0udGl0bGUgJiYg
IXRpdGxlKSB0aXRsZSA9IG0udGl0bGU7Ci0gICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYg
KCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwg
bSkgPCAwKSkKLSAgICAgICAgICAgICAgY29sbGFwc2VkID0gc3A7Ci0gICAgICAgICAgfSBlbHNl
IGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7Ci0gICAgICAgICAg
ICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKG0udHlw
ZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ud2lkZ2V0Tm9kZSkgZm91bmRC
b29rbWFya3MucHVzaChtKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29sbGFwc2VkICYmIChj
b2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHsKLSAgICAgICAgICBidWlsZENvbGxhcHNlZFNw
YW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50
bykgLSBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIs
IGNvbGxhcHNlZC5mcm9tID09IG51bGwpOwotICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0g
bnVsbCkgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghY29sbGFwc2VkICYmIGZvdW5k
Qm9va21hcmtzLmxlbmd0aCkgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZEJvb2ttYXJrcy5sZW5n
dGg7ICsraikKLSAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRC
b29rbWFya3Nbal0pOwotICAgICAgfQotICAgICAgaWYgKHBvcyA+PSBsZW4pIGJyZWFrOwotCi0g
ICAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENoYW5nZSk7Ci0gICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBpZiAodGV4dCkgewotICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyB0
ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAoIWNvbGxhcHNlZCkgewotICAgICAgICAgICAgdmFy
IHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4
dDsKLSAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHls
ZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hh
bmdlID8gc3BhbkVuZFN0eWxlIDogIiIsIHRpdGxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
aWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2UodXB0byAtIHBvcyk7IHBvcyA9IHVw
dG87IGJyZWFrO30KLSAgICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgICAgc3BhblN0YXJ0U3R5
bGUgPSAiIjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQg
PSBzdHlsZXNbaSsrXSk7Ci0gICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHls
ZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAv
LyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRQotCi0gIC8vIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhh
dCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCi0gIC8vIGFyZSB0cmVh
dGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24gb2YgbGluZQot
ICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4dCBiZWhhdmUgbW9y
ZSBpbnR1aXRpdmUuCi0gIGZ1bmN0aW9uIGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSB7
Ci0gICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRvLmNoID09IDAgJiYg
bHN0KGNoYW5nZS50ZXh0KSA9PSAiIiAmJgotICAgICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlv
bnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKTsKLSAgfQotCi0gIC8vIFBlcmZvcm0gYSBjaGFuZ2Ug
b24gdGhlIGRvY3VtZW50IGRhdGEgc3RydWN0dXJlLgotICBmdW5jdGlvbiB1cGRhdGVEb2MoZG9j
LCBjaGFuZ2UsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkgewotICAgIGZ1bmN0aW9uIHNw
YW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3BhbnMgPyBtYXJrZWRTcGFuc1tuXSA6IG51bGw7fQot
ICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykgewotICAgICAgdXBkYXRlTGlu
ZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpOwotICAgICAgc2lnbmFsTGF0ZXIo
bGluZSwgImNoYW5nZSIsIGxpbmUsIGNoYW5nZSk7Ci0gICAgfQotCi0gICAgdmFyIGZyb20gPSBj
aGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDsKLSAgICB2YXIg
Zmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShk
b2MsIHRvLmxpbmUpOwotICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0g
c3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZTsK
LQotICAgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAoaXNXaG9sZUxpbmVV
cGRhdGUoZG9jLCBjaGFuZ2UpKSB7Ci0gICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBs
YWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCi0gICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0
cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCi0gICAgICBmb3IgKHZhciBpID0g
MCwgYWRkZWQgPSBbXTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQotICAgICAgICBhZGRlZC5w
dXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwotICAg
ICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMpOwotICAgICAgaWYg
KG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcyk7Ci0gICAgICBpZiAoYWRkZWQu
bGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwotICAgIH0gZWxzZSBpZiAoZmly
c3RMaW5lID09IGxhc3RMaW5lKSB7Ci0gICAgICBpZiAodGV4dC5sZW5ndGggPT0gMSkgewotICAg
ICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSAr
IGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9IDE7IGkgPCB0ZXh0
Lmxlbmd0aCAtIDE7ICsraSkKLSAgICAgICAgICBhZGRlZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0s
IHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwotICAgICAgICBhZGRlZC5wdXNoKG5ldyBM
aW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVz
dGltYXRlSGVpZ2h0KSk7Ci0gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0
LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwotICAgICAgICBkb2Mu
aW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRl
eHQubGVuZ3RoID09IDEpIHsKLSAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0
LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gp
LCBzcGFuc0ZvcigwKSk7Ci0gICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNs
aWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpOwotICAgICAgdXBkYXRlKGxh
c3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMp
OwotICAgICAgZm9yICh2YXIgaSA9IDEsIGFkZGVkID0gW107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7
ICsraSkKLSAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwg
ZXN0aW1hdGVIZWlnaHQpKTsKLSAgICAgIGlmIChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20u
bGluZSArIDEsIG5saW5lcyAtIDEpOwotICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBh
ZGRlZCk7Ci0gICAgfQotCi0gICAgc2lnbmFsTGF0ZXIoZG9jLCAiY2hhbmdlIiwgZG9jLCBjaGFu
Z2UpOwotICB9Ci0KLSAgLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUg
Y29uc2lzdGluZyBvZiBsZWF2ZXMsIHdpdGgKLSAgLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwg
YW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3IKLSAgLy8gb3RoZXIgYnJhbmNo
IG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2gKLSAgLy8g
bm9kZSwgYW5kIGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhcwot
ICAvLyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLgotICAvLwotICAvLyBBbGwg
bm9kZXMgaGF2ZSBwYXJlbnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9t
Ci0gIC8vIGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVj
dHMgdG8gbnVtYmVycy4KLSAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVz
ZWQgdG8gY29udmVydCBiZXR3ZWVuIGhlaWdodAotICAvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0
byBmaW5kIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LgotICAvLwotICAvLyBTZWUg
YWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUu
aHRtbAotCi0gIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykgewotICAgIHRoaXMubGluZXMgPSBs
aW5lczsKLSAgICB0aGlzLnBhcmVudCA9IG51bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGhlaWdo
dCA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgbGluZXNbaV0ucGFyZW50ID0g
dGhpczsKLSAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7Ci0gICAgfQotICAgIHRoaXMu
aGVpZ2h0ID0gaGVpZ2h0OwotICB9Ci0KLSAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHsKLSAgICBj
aHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGg7IH0sCi0gICAg
Ly8gUmVtb3ZlIHRoZSBuIGxpbmVzIGF0IG9mZnNldCAnYXQnLgotICAgIHJlbW92ZUlubmVyOiBm
dW5jdGlvbihhdCwgbikgewotICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBuOyBpIDwg
ZTsgKytpKSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsKLSAgICAgICAgdGhp
cy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7Ci0gICAgICAgIGNsZWFuVXBMaW5lKGxpbmUpOwotICAg
ICAgICBzaWduYWxMYXRlcihsaW5lLCAiZGVsZXRlIik7Ci0gICAgICB9Ci0gICAgICB0aGlzLmxp
bmVzLnNwbGljZShhdCwgbik7Ci0gICAgfSwKLSAgICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBz
ZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuCi0gICAgY29sbGFwc2U6IGZ1bmN0
aW9uKGxpbmVzKSB7Ci0gICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVzKTsK
LSAgICB9LAotICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gYXJyYXkgb2YgbGluZXMgYXQgb2Zmc2V0
ICdhdCcsIGNvdW50IHRoZW0gYXMKLSAgICAvLyBoYXZpbmcgdGhlIGdpdmVuIGhlaWdodC4KLSAg
ICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKLSAgICAgIHRoaXMu
aGVpZ2h0ICs9IGhlaWdodDsKLSAgICAgIHRoaXMubGluZXMgPSB0aGlzLmxpbmVzLnNsaWNlKDAs
IGF0KS5jb25jYXQobGluZXMpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKGF0KSk7Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSBsaW5lc1tpXS5wYXJlbnQgPSB0
aGlzOwotICAgIH0sCi0gICAgLy8gVXNlZCB0byBpdGVyYXRlIG92ZXIgYSBwYXJ0IG9mIHRoZSB0
cmVlLgotICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKLSAgICAgIGZvciAodmFyIGUg
PSBhdCArIG47IGF0IDwgZTsgKythdCkKLSAgICAgICAgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkg
cmV0dXJuIHRydWU7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxk
cmVuKSB7Ci0gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwotICAgIHZhciBzaXplID0gMCwg
aGVpZ2h0ID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytp
KSB7Ci0gICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTsKLSAgICAgIHNpemUgKz0gY2guY2h1bmtT
aXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7Ci0gICAgICBjaC5wYXJlbnQgPSB0aGlzOwotICAg
IH0KLSAgICB0aGlzLnNpemUgPSBzaXplOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAg
IHRoaXMucGFyZW50ID0gbnVsbDsKLSAgfQotCi0gIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHsK
LSAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zaXplOyB9LAotICAgIHJl
bW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikgewotICAgICAgdGhpcy5zaXplIC09IG47Ci0gICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsK
LSAgICAgICAgaWYgKGF0IDwgc3opIHsKLSAgICAgICAgICB2YXIgcm0gPSBNYXRoLm1pbihuLCBz
eiAtIGF0KSwgb2xkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0OwotICAgICAgICAgIGNoaWxkLnJlbW92
ZUlubmVyKGF0LCBybSk7Ci0gICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xkSGVpZ2h0IC0gY2hp
bGQuaGVpZ2h0OwotICAgICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzLmNoaWxkcmVuLnNwbGlj
ZShpLS0sIDEpOyBjaGlsZC5wYXJlbnQgPSBudWxsOyB9Ci0gICAgICAgICAgaWYgKChuIC09IHJt
KSA9PSAwKSBicmVhazsKLSAgICAgICAgICBhdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBhdCAtPSBz
ejsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgc21hbGxlciB0aGFuIDI1IGxp
bmVzLCBlbnN1cmUgdGhhdCBpdCBpcyBhCi0gICAgICAvLyBzaW5nbGUgbGVhZiBub2RlLgotICAg
ICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSAmJgotICAgICAgICAgICh0aGlzLmNoaWxkcmVuLmxl
bmd0aCA+IDEgfHwgISh0aGlzLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgTGVhZkNodW5rKSkpIHsK
LSAgICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIHRoaXMuY29sbGFwc2UobGluZXMpOwot
ICAgICAgICB0aGlzLmNoaWxkcmVuID0gW25ldyBMZWFmQ2h1bmsobGluZXMpXTsKLSAgICAgICAg
dGhpcy5jaGlsZHJlblswXS5wYXJlbnQgPSB0aGlzOwotICAgICAgfQotICAgIH0sCi0gICAgY29s
bGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOwot
ICAgIH0sCi0gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7Ci0g
ICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoOwotICAgICAgdGhpcy5oZWlnaHQgKz0gaGVp
Z2h0OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1
bmtTaXplKCk7Ci0gICAgICAgIGlmIChhdCA8PSBzeikgewotICAgICAgICAgIGNoaWxkLmluc2Vy
dElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTsKLSAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYg
Y2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKLSAgICAgICAgICAgIHdoaWxlIChjaGlsZC5saW5l
cy5sZW5ndGggPiA1MCkgewotICAgICAgICAgICAgICB2YXIgc3BpbGxlZCA9IGNoaWxkLmxpbmVz
LnNwbGljZShjaGlsZC5saW5lcy5sZW5ndGggLSAyNSwgMjUpOwotICAgICAgICAgICAgICB2YXIg
bmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7Ci0gICAgICAgICAgICAgIGNoaWxkLmhl
aWdodCAtPSBuZXdsZWFmLmhlaWdodDsKLSAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxp
Y2UoaSArIDEsIDAsIG5ld2xlYWYpOwotICAgICAgICAgICAgICBuZXdsZWFmLnBhcmVudCA9IHRo
aXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLm1heWJlU3BpbGwoKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYXQgLT0gc3o7Ci0g
ICAgICB9Ci0gICAgfSwKLSAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24sIGNoZWNrIHdoZXRo
ZXIgaXQgc2hvdWxkIGJlIHNwbGl0LgotICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkgewotICAg
ICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSByZXR1cm47Ci0gICAgICB2YXIgbWUg
PSB0aGlzOwotICAgICAgZG8gewotICAgICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNw
bGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTsKLSAgICAgICAgdmFyIHNpYmxpbmcgPSBu
ZXcgQnJhbmNoQ2h1bmsoc3BpbGxlZCk7Ci0gICAgICAgIGlmICghbWUucGFyZW50KSB7IC8vIEJl
Y29tZSB0aGUgcGFyZW50IG5vZGUKLSAgICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVu
ayhtZS5jaGlsZHJlbik7Ci0gICAgICAgICAgY29weS5wYXJlbnQgPSBtZTsKLSAgICAgICAgICBt
ZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTsKLSAgICAgICAgICBtZSA9IGNvcHk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbWUuc2l6ZSAtPSBzaWJsaW5nLnNpemU7Ci0gICAgICAg
ICAgbWUuaGVpZ2h0IC09IHNpYmxpbmcuaGVpZ2h0OwotICAgICAgICAgIHZhciBteUluZGV4ID0g
aW5kZXhPZihtZS5wYXJlbnQuY2hpbGRyZW4sIG1lKTsKLSAgICAgICAgICBtZS5wYXJlbnQuY2hp
bGRyZW4uc3BsaWNlKG15SW5kZXggKyAxLCAwLCBzaWJsaW5nKTsKLSAgICAgICAgfQotICAgICAg
ICBzaWJsaW5nLnBhcmVudCA9IG1lLnBhcmVudDsKLSAgICAgIH0gd2hpbGUgKG1lLmNoaWxkcmVu
Lmxlbmd0aCA+IDEwKTsKLSAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7Ci0gICAgfSwKLSAg
ICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5j
aGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKLSAgICAgICAgaWYgKGF0IDwgc3op
IHsKLSAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpOwotICAgICAgICAg
IGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBp
ZiAoKG4gLT0gdXNlZCkgPT0gMCkgYnJlYWs7Ci0gICAgICAgICAgYXQgPSAwOwotICAgICAgICB9
IGVsc2UgYXQgLT0gc3o7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIHZhciBuZXh0RG9jSWQg
PSAwOwotICB2YXIgRG9jID0gQ29kZU1pcnJvci5Eb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBm
aXJzdExpbmUpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgcmV0dXJuIG5ldyBE
b2ModGV4dCwgbW9kZSwgZmlyc3RMaW5lKTsKLSAgICBpZiAoZmlyc3RMaW5lID09IG51bGwpIGZp
cnN0TGluZSA9IDA7Ci0KLSAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5r
KFtuZXcgTGluZSgiIiwgbnVsbCldKV0pOwotICAgIHRoaXMuZmlyc3QgPSBmaXJzdExpbmU7Ci0g
ICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbExlZnQgPSAwOwotICAgIHRoaXMuY2FudEVk
aXQgPSBmYWxzZTsKLSAgICB0aGlzLmNsZWFuR2VuZXJhdGlvbiA9IDE7Ci0gICAgdGhpcy5mcm9u
dGllciA9IGZpcnN0TGluZTsKLSAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RMaW5lLCAwKTsKLSAg
ICB0aGlzLnNlbCA9IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7Ci0gICAgdGhpcy5oaXN0b3J5ID0g
bmV3IEhpc3RvcnkobnVsbCk7Ci0gICAgdGhpcy5pZCA9ICsrbmV4dERvY0lkOwotICAgIHRoaXMu
bW9kZU9wdGlvbiA9IG1vZGU7Ci0KLSAgICBpZiAodHlwZW9mIHRleHQgPT0gInN0cmluZyIpIHRl
eHQgPSBzcGxpdExpbmVzKHRleHQpOwotICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQs
IHRvOiBzdGFydCwgdGV4dDogdGV4dH0pOwotICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVT
ZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7Ci0gIH07Ci0KLSAgRG9jLnByb3RvdHlw
ZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHsKLSAgICBjb25zdHJ1Y3Rvcjog
RG9jLAotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZG9jdW1lbnQuIFN1cHBvcnRzIHR3byBmb3Jt
cyAtLSB3aXRoIG9ubHkgb25lCi0gICAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVh
Y2ggbGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGgKLSAgICAvLyB0aHJlZSwgaXQgaXRlcmF0ZXMg
b3ZlciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aAotICAgIC8vIHRoZSBz
ZWNvbmQgYmVpbmcgbm9uLWluY2x1c2l2ZSkuCi0gICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8s
IG9wKSB7Ci0gICAgICBpZiAob3ApIHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0g
ZnJvbSwgb3ApOwotICAgICAgZWxzZSB0aGlzLml0ZXJOKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3Qg
KyB0aGlzLnNpemUsIGZyb20pOwotICAgIH0sCi0KLSAgICAvLyBOb24tcHVibGljIGludGVyZmFj
ZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy4KLSAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0
LCBsaW5lcykgewotICAgICAgdmFyIGhlaWdodCA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxpbmVzLmxlbmd0aDsgKytpKSBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0OwotICAgICAg
dGhpcy5pbnNlcnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpOwotICAgIH0s
Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhp
cy5maXJzdCwgbik7IH0sCi0KLSAgICAvLyBGcm9tIGhlcmUsIHRoZSBtZXRob2RzIGFyZSBwYXJ0
IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBNb3N0Ci0gICAgLy8gYXJlIGFsc28gYXZhaWxhYmxl
IGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuCi0KLSAgICBnZXRWYWx1ZTogZnVu
Y3Rpb24obGluZVNlcCkgewotICAgICAgdmFyIGxpbmVzID0gZ2V0TGluZXModGhpcywgdGhpcy5m
aXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7Ci0gICAgICBpZiAobGluZVNlcCA9PT0gZmFs
c2UpIHJldHVybiBsaW5lczsKLSAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxu
Iik7Ci0gICAgfSwKLSAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkgewot
ICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRoaXMuZmlyc3QgKyB0
aGlzLnNpemUgLSAxOwotICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9z
KGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAic2V0VmFsdWUifSwgdHJ1
ZSk7Ci0gICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCkpOwotICAg
IH0pLAotICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8sIG9yaWdpbikg
ewotICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7Ci0gICAgICB0byA9IHRvID8gY2xp
cFBvcyh0aGlzLCB0bykgOiBmcm9tOwotICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsIGNvZGUsIGZy
b20sIHRvLCBvcmlnaW4pOwotICAgIH0sCi0gICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRv
LCBsaW5lU2VwKSB7Ci0gICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRoaXMsIGNsaXBQb3Mo
dGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKLSAgICAgIGlmIChsaW5lU2VwID09PSBm
YWxzZSkgcmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAi
XG4iKTsKLSAgICB9LAotCi0gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhp
cy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7fSwKLQotICAgIGdldExp
bmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKSByZXR1cm4g
Z2V0TGluZSh0aGlzLCBsaW5lKTt9LAotICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUp
IHtyZXR1cm4gbGluZU5vKGxpbmUpO30sCi0KLSAgICBnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6
IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGlu
ZSA9IGdldExpbmUodGhpcywgbGluZSk7Ci0gICAgICByZXR1cm4gdmlzdWFsTGluZShsaW5lKTsK
LSAgICB9LAotCi0gICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplO30s
Ci0gICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdDt9LAotICAgIGxh
c3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDE7fSwK
LQotICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyk7
fSwKLQotICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAgIHZhciByYW5nZSA9
IHRoaXMuc2VsLnByaW1hcnkoKSwgcG9zOwotICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3Rh
cnQgPT0gImhlYWQiKSBwb3MgPSByYW5nZS5oZWFkOwotICAgICAgZWxzZSBpZiAoc3RhcnQgPT0g
ImFuY2hvciIpIHBvcyA9IHJhbmdlLmFuY2hvcjsKLSAgICAgIGVsc2UgaWYgKHN0YXJ0ID09ICJl
bmQiIHx8IHN0YXJ0ID09ICJ0byIgfHwgc3RhcnQgPT09IGZhbHNlKSBwb3MgPSByYW5nZS50bygp
OwotICAgICAgZWxzZSBwb3MgPSByYW5nZS5mcm9tKCk7Ci0gICAgICByZXR1cm4gcG9zOwotICAg
IH0sCi0gICAgbGlzdFNlbGVjdGlvbnM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zZWwucmFu
Z2VzOyB9LAotICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5z
ZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTt9LAotCi0gICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChm
dW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykgewotICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRo
aXMsIGNsaXBQb3ModGhpcywgdHlwZW9mIGxpbmUgPT0gIm51bWJlciIgPyBQb3MobGluZSwgY2gg
fHwgMCkgOiBsaW5lKSwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgfSksCi0gICAgc2V0U2VsZWN0aW9u
OiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHsKLSAgICAgIHNl
dFNpbXBsZVNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQb3ModGhp
cywgaGVhZCB8fCBhbmNob3IpLCBvcHRpb25zKTsKLSAgICB9KSwKLSAgICBleHRlbmRTZWxlY3Rp
b246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7Ci0gICAgICBl
eHRlbmRTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBoZWFkKSwgb3RoZXIgJiYgY2xpcFBv
cyh0aGlzLCBvdGhlciksIG9wdGlvbnMpOwotICAgIH0pLAotICAgIGV4dGVuZFNlbGVjdGlvbnM6
IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7Ci0gICAgICBleHRlbmRTZWxl
Y3Rpb25zKHRoaXMsIGNsaXBQb3NBcnJheSh0aGlzLCBoZWFkcywgb3B0aW9ucykpOwotICAgIH0p
LAotICAgIGV4dGVuZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9u
cykgewotICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBtYXAodGhpcy5zZWwucmFuZ2VzLCBm
KSwgb3B0aW9ucyk7Ci0gICAgfSksCi0gICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVu
Y3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7Ci0gICAgICBpZiAoIXJhbmdlcy5sZW5n
dGgpIHJldHVybjsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBvdXQgPSBbXTsgaSA8IHJhbmdlcy5s
ZW5ndGg7IGkrKykKLSAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFu
Z2VzW2ldLmFuY2hvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMs
IHJhbmdlc1tpXS5oZWFkKSk7Ci0gICAgICBpZiAocHJpbWFyeSA9PSBudWxsKSBwcmltYXJ5ID0g
TWF0aC5taW4ocmFuZ2VzLmxlbmd0aCAtIDEsIHRoaXMuc2VsLnByaW1JbmRleCk7Ci0gICAgICBz
ZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgcHJpbWFyeSksIG9wdGlv
bnMpOwotICAgIH0pLAotICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5j
aG9yLCBoZWFkLCBvcHRpb25zKSB7Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2Vz
LnNsaWNlKDApOwotICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQb3ModGhpcywgYW5j
aG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTsKLSAgICAgIHNldFNlbGVjdGlv
bih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9w
dGlvbnMpOwotICAgIH0pLAotCi0gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7
Ci0gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lczsKLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBzZWwgPSBn
ZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTsKLSAgICAg
ICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsOwotICAgICAgfQotICAg
ICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAgICBlbHNlIHJldHVy
biBsaW5lcy5qb2luKGxpbmVTZXAgfHwgIlxuIik7Ci0gICAgfSwKLSAgICBnZXRTZWxlY3Rpb25z
OiBmdW5jdGlvbihsaW5lU2VwKSB7Ci0gICAgICB2YXIgcGFydHMgPSBbXSwgcmFuZ2VzID0gdGhp
cy5zZWwucmFuZ2VzOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4odGhpcywgcmFuZ2VzW2ldLmZyb20o
KSwgcmFuZ2VzW2ldLnRvKCkpOwotICAgICAgICBpZiAobGluZVNlcCAhPT0gZmFsc2UpIHNlbCA9
IHNlbC5qb2luKGxpbmVTZXAgfHwgIlxuIik7Ci0gICAgICAgIHBhcnRzW2ldID0gc2VsOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHBhcnRzOwotICAgIH0sCi0gICAgcmVwbGFjZVNlbGVjdGlvbjog
ZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgewotICAgICAgdmFyIGR1cCA9IFtdOwot
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspCi0g
ICAgICAgIGR1cFtpXSA9IGNvZGU7Ci0gICAgICB0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKGR1cCwg
Y29sbGFwc2UsIG9yaWdpbiB8fCAiK2lucHV0Iik7Ci0gICAgfSwKLSAgICByZXBsYWNlU2VsZWN0
aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikgewotICAg
ICAgdmFyIGNoYW5nZXMgPSBbXSwgc2VsID0gdGhpcy5zZWw7Ci0gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHJhbmdlID0gc2Vs
LnJhbmdlc1tpXTsKLSAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRv
OiByYW5nZS50bygpLCB0ZXh0OiBzcGxpdExpbmVzKGNvZGVbaV0pLCBvcmlnaW46IG9yaWdpbn07
Ci0gICAgICB9Ci0gICAgICB2YXIgbmV3U2VsID0gY29sbGFwc2UgJiYgY29sbGFwc2UgIT0gImVu
ZCIgJiYgY29tcHV0ZVJlcGxhY2VkU2VsKHRoaXMsIGNoYW5nZXMsIGNvbGxhcHNlKTsKLSAgICAg
IGZvciAodmFyIGkgPSBjaGFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgICBt
YWtlQ2hhbmdlKHRoaXMsIGNoYW5nZXNbaV0pOwotICAgICAgaWYgKG5ld1NlbCkgc2V0U2VsZWN0
aW9uUmVwbGFjZUhpc3RvcnkodGhpcywgbmV3U2VsKTsKLSAgICAgIGVsc2UgaWYgKHRoaXMuY20p
IGVuc3VyZUN1cnNvclZpc2libGUodGhpcy5jbSk7Ci0gICAgfSksCi0gICAgdW5kbzogZG9jTWV0
aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIik7fSks
Ci0gICAgcmVkbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5
KHRoaXMsICJyZWRvIik7fSksCi0gICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsICJ1bmRvIiwgdHJ1ZSk7fSksCi0gICAg
cmVkb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0
b3J5KHRoaXMsICJyZWRvIiwgdHJ1ZSk7fSksCi0KLSAgICBzZXRFeHRlbmRpbmc6IGZ1bmN0aW9u
KHZhbCkge3RoaXMuZXh0ZW5kID0gdmFsO30sCi0gICAgZ2V0RXh0ZW5kaW5nOiBmdW5jdGlvbigp
IHtyZXR1cm4gdGhpcy5leHRlbmQ7fSwKLQotICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsK
LSAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5LCBkb25lID0gMCwgdW5kb25lID0gMDsKLSAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC5kb25lLmxlbmd0aDsgaSsrKSBpZiAoIWhpc3Qu
ZG9uZVtpXS5yYW5nZXMpICsrZG9uZTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC51
bmRvbmUubGVuZ3RoOyBpKyspIGlmICghaGlzdC51bmRvbmVbaV0ucmFuZ2VzKSArK3VuZG9uZTsK
LSAgICAgIHJldHVybiB7dW5kbzogZG9uZSwgcmVkbzogdW5kb25lfTsKLSAgICB9LAotICAgIGNs
ZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7dGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5o
aXN0b3J5Lm1heEdlbmVyYXRpb24pO30sCi0KLSAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkgewot
ICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRpb24odHJ1ZSk7
Ci0gICAgfSwKLSAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7Ci0g
ICAgICBpZiAoZm9yY2VTcGxpdCkKLSAgICAgICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMu
aGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKLSAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2Vu
ZXJhdGlvbjsKLSAgICB9LAotICAgIGlzQ2xlYW46IGZ1bmN0aW9uIChnZW4pIHsKLSAgICAgIHJl
dHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbiA9PSAoZ2VuIHx8IHRoaXMuY2xlYW5HZW5lcmF0
aW9uKTsKLSAgICB9LAotCi0gICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1
cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLAotICAgICAgICAg
ICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9OwotICAg
IH0sCi0gICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsKLSAgICAgIHZhciBoaXN0
ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24p
OwotICAgICAgaGlzdC5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS5kb25lLnNsaWNl
KDApLCBudWxsLCB0cnVlKTsKLSAgICAgIGhpc3QudW5kb25lID0gY29weUhpc3RvcnlBcnJheSho
aXN0RGF0YS51bmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpOwotICAgIH0sCi0KLSAgICBtYXJr
VGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBtYXJrVGV4
dCh0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSwgb3B0aW9ucywg
InJhbmdlIik7Ci0gICAgfSwKLSAgICBzZXRCb29rbWFyazogZnVuY3Rpb24ocG9zLCBvcHRpb25z
KSB7Ci0gICAgICB2YXIgcmVhbE9wdHMgPSB7cmVwbGFjZWRXaXRoOiBvcHRpb25zICYmIChvcHRp
b25zLm5vZGVUeXBlID09IG51bGwgPyBvcHRpb25zLndpZGdldCA6IG9wdGlvbnMpLAotICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5pbnNlcnRMZWZ0
LAotICAgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBmYWxzZSwgc2hhcmVkOiBv
cHRpb25zICYmIG9wdGlvbnMuc2hhcmVkfTsKLSAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9z
KTsKLSAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsICJib29r
bWFyayIpOwotICAgIH0sCi0gICAgZmluZE1hcmtzQXQ6IGZ1bmN0aW9uKHBvcykgewotICAgICAg
cG9zID0gY2xpcFBvcyh0aGlzLCBwb3MpOwotICAgICAgdmFyIG1hcmtlcnMgPSBbXSwgc3BhbnMg
PSBnZXRMaW5lKHRoaXMsIHBvcy5saW5lKS5tYXJrZWRTcGFuczsKLSAgICAgIGlmIChzcGFucykg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3Bh
biA9IHNwYW5zW2ldOwotICAgICAgICBpZiAoKHNwYW4uZnJvbSA9PSBudWxsIHx8IHNwYW4uZnJv
bSA8PSBwb3MuY2gpICYmCi0gICAgICAgICAgICAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4udG8g
Pj0gcG9zLmNoKSkKLSAgICAgICAgICBtYXJrZXJzLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8
IHNwYW4ubWFya2VyKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtYXJrZXJzOwotICAgIH0sCi0g
ICAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7Ci0gICAgICBmcm9tID0g
Y2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRoaXMsIHRvKTsKLSAgICAgIHZhciBm
b3VuZCA9IFtdLCBsaW5lTm8gPSBmcm9tLmxpbmU7Ci0gICAgICB0aGlzLml0ZXIoZnJvbS5saW5l
LCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgc3BhbnMgPSBsaW5l
Lm1hcmtlZFNwYW5zOwotICAgICAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3Bh
bnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldOwotICAgICAg
ICAgIGlmICghKGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJvbS5jaCA+IHNwYW4udG8gfHwKLSAg
ICAgICAgICAgICAgICBzcGFuLmZyb20gPT0gbnVsbCAmJiBsaW5lTm8gIT0gZnJvbS5saW5lfHwK
LSAgICAgICAgICAgICAgICBsaW5lTm8gPT0gdG8ubGluZSAmJiBzcGFuLmZyb20gPiB0by5jaCkg
JiYKLSAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNwYW4ubWFya2VyKSkpCi0gICAg
ICAgICAgICBmb3VuZC5wdXNoKHNwYW4ubWFya2VyLnBhcmVudCB8fCBzcGFuLm1hcmtlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgKytsaW5lTm87Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBmb3Vu
ZDsKLSAgICB9LAotICAgIGdldEFsbE1hcmtzOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBtYXJr
ZXJzID0gW107Ci0gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIg
c3BzID0gbGluZS5tYXJrZWRTcGFuczsKLSAgICAgICAgaWYgKHNwcykgZm9yICh2YXIgaSA9IDA7
IGkgPCBzcHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgaWYgKHNwc1tpXS5mcm9tICE9IG51bGwp
IG1hcmtlcnMucHVzaChzcHNbaV0ubWFya2VyKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIG1h
cmtlcnM7Ci0gICAgfSwKLQotICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24ob2ZmKSB7Ci0gICAg
ICB2YXIgY2gsIGxpbmVObyA9IHRoaXMuZmlyc3Q7Ci0gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24o
bGluZSkgewotICAgICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgMTsKLSAgICAgICAg
aWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICBvZmYgLT0g
c3o7Ci0gICAgICAgICsrbGluZU5vOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gY2xpcFBvcyh0
aGlzLCBQb3MobGluZU5vLCBjaCkpOwotICAgIH0sCi0gICAgaW5kZXhGcm9tUG9zOiBmdW5jdGlv
biAoY29vcmRzKSB7Ci0gICAgICBjb29yZHMgPSBjbGlwUG9zKHRoaXMsIGNvb3Jkcyk7Ci0gICAg
ICB2YXIgaW5kZXggPSBjb29yZHMuY2g7Ci0gICAgICBpZiAoY29vcmRzLmxpbmUgPCB0aGlzLmZp
cnN0IHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOwotICAgICAgdGhpcy5pdGVyKHRoaXMuZmly
c3QsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgewotICAgICAgICBpbmRleCArPSBsaW5l
LnRleHQubGVuZ3RoICsgMTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0s
Ci0KLSAgICBjb3B5OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkgewotICAgICAgdmFyIGRvYyA9IG5l
dyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSks
IHRoaXMubW9kZU9wdGlvbiwgdGhpcy5maXJzdCk7Ci0gICAgICBkb2Muc2Nyb2xsVG9wID0gdGhp
cy5zY3JvbGxUb3A7IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwotICAgICAgZG9j
LnNlbCA9IHRoaXMuc2VsOwotICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwotICAgICAgaWYgKGNv
cHlIaXN0b3J5KSB7Ci0gICAgICAgIGRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHRoaXMuaGlzdG9y
eS51bmRvRGVwdGg7Ci0gICAgICAgIGRvYy5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBkb2M7Ci0gICAgfSwKLQotICAgIGxpbmtlZERvYzogZnVu
Y3Rpb24ob3B0aW9ucykgewotICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307Ci0gICAg
ICB2YXIgZnJvbSA9IHRoaXMuZmlyc3QsIHRvID0gdGhpcy5maXJzdCArIHRoaXMuc2l6ZTsKLSAg
ICAgIGlmIChvcHRpb25zLmZyb20gIT0gbnVsbCAmJiBvcHRpb25zLmZyb20gPiBmcm9tKSBmcm9t
ID0gb3B0aW9ucy5mcm9tOwotICAgICAgaWYgKG9wdGlvbnMudG8gIT0gbnVsbCAmJiBvcHRpb25z
LnRvIDwgdG8pIHRvID0gb3B0aW9ucy50bzsKLSAgICAgIHZhciBjb3B5ID0gbmV3IERvYyhnZXRM
aW5lcyh0aGlzLCBmcm9tLCB0byksIG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGVPcHRpb24sIGZy
b20pOwotICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0b3J5ID0gdGhpcy5o
aXN0b3J5OwotICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9IFtdKSkucHVzaCh7
ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9KTsKLSAgICAgIGNvcHku
bGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFyZWRIaXN0OiBvcHRpb25z
LnNoYXJlZEhpc3R9XTsKLSAgICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHksIGZpbmRTaGFyZWRN
YXJrZXJzKHRoaXMpKTsKLSAgICAgIHJldHVybiBjb3B5OwotICAgIH0sCi0gICAgdW5saW5rRG9j
OiBmdW5jdGlvbihvdGhlcikgewotICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQ29kZU1pcnJv
cikgb3RoZXIgPSBvdGhlci5kb2M7Ci0gICAgICBpZiAodGhpcy5saW5rZWQpIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5saW5rZWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGxpbmsgPSB0
aGlzLmxpbmtlZFtpXTsKLSAgICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVyKSBjb250aW51ZTsK
LSAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEpOwotICAgICAgICBvdGhlci51bmxpbmtE
b2ModGhpcyk7Ci0gICAgICAgIGRldGFjaFNoYXJlZE1hcmtlcnMoZmluZFNoYXJlZE1hcmtlcnMo
dGhpcykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIElmIHRoZSBoaXN0b3Jp
ZXMgd2VyZSBzaGFyZWQsIHNwbGl0IHRoZW0gYWdhaW4KLSAgICAgIGlmIChvdGhlci5oaXN0b3J5
ID09IHRoaXMuaGlzdG9yeSkgewotICAgICAgICB2YXIgc3BsaXRJZHMgPSBbb3RoZXIuaWRdOwot
ICAgICAgICBsaW5rZWREb2NzKG90aGVyLCBmdW5jdGlvbihkb2MpIHtzcGxpdElkcy5wdXNoKGRv
Yy5pZCk7fSwgdHJ1ZSk7Ci0gICAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxs
KTsKLSAgICAgICAgb3RoZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhp
c3RvcnkuZG9uZSwgc3BsaXRJZHMpOwotICAgICAgICBvdGhlci5oaXN0b3J5LnVuZG9uZSA9IGNv
cHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSwgc3BsaXRJZHMpOwotICAgICAgfQot
ICAgIH0sCi0gICAgaXRlckxpbmtlZERvY3M6IGZ1bmN0aW9uKGYpIHtsaW5rZWREb2NzKHRoaXMs
IGYpO30sCi0KLSAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlO30sCi0g
ICAgZ2V0RWRpdG9yOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5jbTt9Ci0gIH0pOwotCi0gIC8v
IFB1YmxpYyBhbGlhcy4KLSAgRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERvYy5wcm90b3R5cGUu
aXRlcjsKLQotICAvLyBTZXQgdXAgbWV0aG9kcyBvbiBDb2RlTWlycm9yJ3MgcHJvdG90eXBlIHRv
IHJlZGlyZWN0IHRvIHRoZSBlZGl0b3IncyBkb2N1bWVudC4KLSAgdmFyIGRvbnREZWxlZ2F0ZSA9
ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Ci0gIGZvciAo
dmFyIHByb3AgaW4gRG9jLnByb3RvdHlwZSkgaWYgKERvYy5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHByb3ApIDwgMCkKLSAgICBDb2RlTWly
cm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHsKLSAgICAgIHJldHVybiBm
dW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpO307Ci0g
ICAgfSkoRG9jLnByb3RvdHlwZVtwcm9wXSk7Ci0KLSAgZXZlbnRNaXhpbihEb2MpOwotCi0gIC8v
IENhbGwgZiBmb3IgYWxsIGxpbmtlZCBkb2N1bWVudHMuCi0gIGZ1bmN0aW9uIGxpbmtlZERvY3Mo
ZG9jLCBmLCBzaGFyZWRIaXN0T25seSkgewotICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNr
aXAsIHNoYXJlZEhpc3QpIHsKLSAgICAgIGlmIChkb2MubGlua2VkKSBmb3IgKHZhciBpID0gMDsg
aSA8IGRvYy5saW5rZWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJlbCA9IGRvYy5saW5r
ZWRbaV07Ci0gICAgICAgIGlmIChyZWwuZG9jID09IHNraXApIGNvbnRpbnVlOwotICAgICAgICB2
YXIgc2hhcmVkID0gc2hhcmVkSGlzdCAmJiByZWwuc2hhcmVkSGlzdDsKLSAgICAgICAgaWYgKHNo
YXJlZEhpc3RPbmx5ICYmICFzaGFyZWQpIGNvbnRpbnVlOwotICAgICAgICBmKHJlbC5kb2MsIHNo
YXJlZCk7Ci0gICAgICAgIHByb3BhZ2F0ZShyZWwuZG9jLCBkb2MsIHNoYXJlZCk7Ci0gICAgICB9
Ci0gICAgfQotICAgIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpOwotICB9Ci0KLSAgLy8gQXR0
YWNoIGEgZG9jdW1lbnQgdG8gYW4gZWRpdG9yLgotICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRv
YykgewotICAgIGlmIChkb2MuY20pIHRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBh
bHJlYWR5IGluIHVzZS4iKTsKLSAgICBjbS5kb2MgPSBkb2M7Ci0gICAgZG9jLmNtID0gY207Ci0g
ICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7Ci0gICAgbG9hZE1vZGUoY20pOwotICAgIGlmICgh
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGZpbmRNYXhMaW5lKGNtKTsKLSAgICBjbS5vcHRpb25z
Lm1vZGUgPSBkb2MubW9kZU9wdGlvbjsKLSAgICByZWdDaGFuZ2UoY20pOwotICB9Ci0KLSAgLy8g
TElORSBVVElMSVRJRVMKLQotICAvLyBGaW5kIHRoZSBsaW5lIG9iamVjdCBjb3JyZXNwb25kaW5n
IHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci4KLSAgZnVuY3Rpb24gZ2V0TGluZShkb2MsIG4pIHsK
LSAgICBuIC09IGRvYy5maXJzdDsKLSAgICBpZiAobiA8IDAgfHwgbiA+PSBkb2Muc2l6ZSkgdGhy
b3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsaW5lICIgKyAobiArIGRvYy5maXJzdCkgKyAiIGlu
IHRoZSBkb2N1bWVudC4iKTsKLSAgICBmb3IgKHZhciBjaHVuayA9IGRvYzsgIWNodW5rLmxpbmVz
OykgewotICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHsKLSAgICAgICAgdmFyIGNoaWxkID0g
Y2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChu
IDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KLSAgICAgICAgbiAtPSBzejsKLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGNodW5rLmxpbmVzW25dOwotICB9Ci0KLSAgLy8gR2V0IHRo
ZSBwYXJ0IG9mIGEgZG9jdW1lbnQgYmV0d2VlbiB0d28gcG9zaXRpb25zLCBhcyBhbiBhcnJheSBv
ZgotICAvLyBzdHJpbmdzLgotICBmdW5jdGlvbiBnZXRCZXR3ZWVuKGRvYywgc3RhcnQsIGVuZCkg
ewotICAgIHZhciBvdXQgPSBbXSwgbiA9IHN0YXJ0LmxpbmU7Ci0gICAgZG9jLml0ZXIoc3RhcnQu
bGluZSwgZW5kLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgdGV4dCA9IGxp
bmUudGV4dDsKLSAgICAgIGlmIChuID09IGVuZC5saW5lKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCBl
bmQuY2gpOwotICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgdGV4dCA9IHRleHQuc2xpY2Uoc3Rh
cnQuY2gpOwotICAgICAgb3V0LnB1c2godGV4dCk7Ci0gICAgICArK247Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIG91dDsKLSAgfQotICAvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4gZnJvbSBhbmQgdG8s
IGFzIGFycmF5IG9mIHN0cmluZ3MuCi0gIGZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8p
IHsKLSAgICB2YXIgb3V0ID0gW107Ci0gICAgZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uKGxp
bmUpIHsgb3V0LnB1c2gobGluZS50ZXh0KTsgfSk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotCi0g
IC8vIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgcHJvcGFnYXRpbmcgdGhlIGhlaWdodCBj
aGFuZ2UKLSAgLy8gdXB3YXJkcyB0byBwYXJlbnQgbm9kZXMuCi0gIGZ1bmN0aW9uIHVwZGF0ZUxp
bmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7Ci0gICAgdmFyIGRpZmYgPSBoZWlnaHQgLSBsaW5lLmhl
aWdodDsKLSAgICBpZiAoZGlmZikgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkg
bi5oZWlnaHQgKz0gZGlmZjsKLSAgfQotCi0gIC8vIEdpdmVuIGEgbGluZSBvYmplY3QsIGZpbmQg
aXRzIGxpbmUgbnVtYmVyIGJ5IHdhbGtpbmcgdXAgdGhyb3VnaAotICAvLyBpdHMgcGFyZW50IGxp
bmtzLgotICBmdW5jdGlvbiBsaW5lTm8obGluZSkgewotICAgIGlmIChsaW5lLnBhcmVudCA9PSBu
dWxsKSByZXR1cm4gbnVsbDsKLSAgICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhP
ZihjdXIubGluZXMsIGxpbmUpOwotICAgIGZvciAodmFyIGNodW5rID0gY3VyLnBhcmVudDsgY2h1
bms7IGN1ciA9IGNodW5rLCBjaHVuayA9IGNodW5rLnBhcmVudCkgewotICAgICAgZm9yICh2YXIg
aSA9IDA7OyArK2kpIHsKLSAgICAgICAgaWYgKGNodW5rLmNoaWxkcmVuW2ldID09IGN1cikgYnJl
YWs7Ci0gICAgICAgIG5vICs9IGNodW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gbm8gKyBjdXIuZmlyc3Q7Ci0gIH0KLQotICAvLyBGaW5kIHRo
ZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodAot
ICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS4KLSAgZnVuY3Rpb24gbGluZUF0
SGVpZ2h0KGNodW5rLCBoKSB7Ci0gICAgdmFyIG4gPSBjaHVuay5maXJzdDsKLSAgICBvdXRlcjog
ZG8gewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5jaGlsZHJlbi5sZW5ndGg7ICsr
aSkgewotICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgY2ggPSBjaGlsZC5o
ZWlnaHQ7Ci0gICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0
ZXI7IH0KLSAgICAgICAgaCAtPSBjaDsKLSAgICAgICAgbiArPSBjaGlsZC5jaHVua1NpemUoKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBuOwotICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcyk7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgewotICAgICAg
dmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDsKLSAgICAgIGlmICho
IDwgbGgpIGJyZWFrOwotICAgICAgaCAtPSBsaDsKLSAgICB9Ci0gICAgcmV0dXJuIG4gKyBpOwot
ICB9Ci0KLQotICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuCi0gIGZ1
bmN0aW9uIGhlaWdodEF0TGluZShsaW5lT2JqKSB7Ci0gICAgbGluZU9iaiA9IHZpc3VhbExpbmUo
bGluZU9iaik7Ci0KLSAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkgewotICAgICAgdmFy
IGxpbmUgPSBjaHVuay5saW5lc1tpXTsKLSAgICAgIGlmIChsaW5lID09IGxpbmVPYmopIGJyZWFr
OwotICAgICAgZWxzZSBoICs9IGxpbmUuaGVpZ2h0OwotICAgIH0KLSAgICBmb3IgKHZhciBwID0g
Y2h1bmsucGFyZW50OyBwOyBjaHVuayA9IHAsIHAgPSBjaHVuay5wYXJlbnQpIHsKLSAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcC5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIg
Y3VyID0gcC5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKGN1ciA9PSBjaHVuaykgYnJlYWs7Ci0g
ICAgICAgIGVsc2UgaCArPSBjdXIuaGVpZ2h0OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
aDsKLSAgfQotCi0gIC8vIEdldCB0aGUgYmlkaSBvcmRlcmluZyBmb3IgdGhlIGdpdmVuIGxpbmUg
KGFuZCBjYWNoZSBpdCkuIFJldHVybnMKLSAgLy8gZmFsc2UgZm9yIGxpbmVzIHRoYXQgYXJlIGZ1
bGx5IGxlZnQtdG8tcmlnaHQsIGFuZCBhbiBhcnJheSBvZgotICAvLyBCaWRpU3BhbiBvYmplY3Rz
IG90aGVyd2lzZS4KLSAgZnVuY3Rpb24gZ2V0T3JkZXIobGluZSkgewotICAgIHZhciBvcmRlciA9
IGxpbmUub3JkZXI7Ci0gICAgaWYgKG9yZGVyID09IG51bGwpIG9yZGVyID0gbGluZS5vcmRlciA9
IGJpZGlPcmRlcmluZyhsaW5lLnRleHQpOwotICAgIHJldHVybiBvcmRlcjsKLSAgfQotCi0gIC8v
IEhJU1RPUlkKLQotICBmdW5jdGlvbiBIaXN0b3J5KHN0YXJ0R2VuKSB7Ci0gICAgLy8gQXJyYXlz
IG9mIGNoYW5nZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0aGluZyBhZGRzIGFu
Ci0gICAgLy8gZXZlbnQgdG8gZG9uZSBhbmQgY2xlYXJzIHVuZG8uIFVuZG9pbmcgbW92ZXMgZXZl
bnRzIGZyb20gZG9uZQotICAgIC8vIHRvIHVuZG9uZSwgcmVkb2luZyBtb3ZlcyB0aGVtIGluIHRo
ZSBvdGhlciBkaXJlY3Rpb24uCi0gICAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107
Ci0gICAgdGhpcy51bmRvRGVwdGggPSBJbmZpbml0eTsKLSAgICAvLyBVc2VkIHRvIHRyYWNrIHdo
ZW4gY2hhbmdlcyBjYW4gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdW5kbwotICAgIC8vIGV2ZW50
Ci0gICAgdGhpcy5sYXN0TW9kVGltZSA9IHRoaXMubGFzdFNlbFRpbWUgPSAwOwotICAgIHRoaXMu
bGFzdE9wID0gbnVsbDsKLSAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4g
PSBudWxsOwotICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2QKLSAgICB0aGlzLmdl
bmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxOwotICB9Ci0KLSAg
Ly8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5bGUg
Y2hhbmdlCi0gIC8vIG9iamVjdC4KLSAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2Uo
ZG9jLCBjaGFuZ2UpIHsKLSAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNoYW5n
ZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hh
bmdlLmZyb20sIGNoYW5nZS50byl9OwotICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hh
bmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOwotICAgIGxpbmtlZERv
Y3MoZG9jLCBmdW5jdGlvbihkb2MpIHthdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwg
Y2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTt9LCB0cnVlKTsKLSAgICByZXR1
cm4gaGlzdENoYW5nZTsKLSAgfQotCi0gIC8vIFBvcCBhbGwgc2VsZWN0aW9uIGV2ZW50cyBvZmYg
dGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3AgYXQKLSAgLy8gYSBjaGFuZ2UgZXZlbnQu
Ci0gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGFycmF5KSB7Ci0gICAgd2hpbGUgKGFy
cmF5Lmxlbmd0aCkgewotICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpOwotICAgICAgaWYgKGxh
c3QucmFuZ2VzKSBhcnJheS5wb3AoKTsKLSAgICAgIGVsc2UgYnJlYWs7Ci0gICAgfQotICB9Ci0K
LSAgLy8gRmluZCB0aGUgdG9wIGNoYW5nZSBldmVudCBpbiB0aGUgaGlzdG9yeS4gUG9wIG9mZiBz
ZWxlY3Rpb24KLSAgLy8gZXZlbnRzIHRoYXQgYXJlIGluIHRoZSB3YXkuCi0gIGZ1bmN0aW9uIGxh
c3RDaGFuZ2VFdmVudChoaXN0LCBmb3JjZSkgewotICAgIGlmIChmb3JjZSkgewotICAgICAgY2xl
YXJTZWxlY3Rpb25FdmVudHMoaGlzdC5kb25lKTsKLSAgICAgIHJldHVybiBsc3QoaGlzdC5kb25l
KTsKLSAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJh
bmdlcykgewotICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpOwotICAgIH0gZWxzZSBpZiAoaGlz
dC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMl0ucmFu
Z2VzKSB7Ci0gICAgICBoaXN0LmRvbmUucG9wKCk7Ci0gICAgICByZXR1cm4gbHN0KGhpc3QuZG9u
ZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnku
IE1lcmdlcyBjaGFuZ2VzIHRoYXQgYXJlIHdpdGhpbgotICAvLyBhIHNpbmdsZSBvcGVyYXRpb24s
IG9yZSBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdAotICAvLyBhbGxvd3Mg
bWVyZ2luZyAoc3RhcnRpbmcgd2l0aCAiKyIpIGludG8gYSBzaW5nbGUgZXZlbnQuCi0gIGZ1bmN0
aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHsKLSAg
ICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5OwotICAgIGhpc3QudW5kb25lLmxlbmd0aCA9IDA7Ci0g
ICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1cjsKLQotICAgIGlmICgoaGlzdC5sYXN0T3AgPT0g
b3BJZCB8fAotICAgICAgICAgaGlzdC5sYXN0T3JpZ2luID09IGNoYW5nZS5vcmlnaW4gJiYgY2hh
bmdlLm9yaWdpbiAmJgotICAgICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSAiKyIg
JiYgZG9jLmNtICYmIGhpc3QubGFzdE1vZFRpbWUgPiB0aW1lIC0gZG9jLmNtLm9wdGlvbnMuaGlz
dG9yeUV2ZW50RGVsYXkpIHx8Ci0gICAgICAgICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0g
IioiKSkgJiYKLSAgICAgICAgKGN1ciA9IGxhc3RDaGFuZ2VFdmVudChoaXN0LCBoaXN0Lmxhc3RP
cCA9PSBvcElkKSkpIHsKLSAgICAgIC8vIE1lcmdlIHRoaXMgY2hhbmdlIGludG8gdGhlIGxhc3Qg
ZXZlbnQKLSAgICAgIHZhciBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKTsKLSAgICAgIGlmIChjbXAo
Y2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZyb20sIGxhc3QudG8p
ID09IDApIHsKLSAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24g
LS0gZG9uJ3Qgd2FudCB0byBhZGQKLSAgICAgICAgLy8gbmV3IGNoYW5nZXNldHMgZm9yIGV2ZXJ5
IGNoYXJhY3RlciB0eXBlZAotICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBBZGQgbmV3IHN1Yi1ldmVudAotICAgICAgICBjdXIu
Y2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5l
dyBldmVudC4KLSAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTsKLSAgICAgIGlmICgh
YmVmb3JlIHx8ICFiZWZvcmUucmFuZ2VzKQotICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5
KGRvYy5zZWwsIGhpc3QuZG9uZSk7Ci0gICAgICBjdXIgPSB7Y2hhbmdlczogW2hpc3RvcnlDaGFu
Z2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKV0sCi0gICAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlz
dC5nZW5lcmF0aW9ufTsKLSAgICAgIGhpc3QuZG9uZS5wdXNoKGN1cik7Ci0gICAgICB3aGlsZSAo
aGlzdC5kb25lLmxlbmd0aCA+IGhpc3QudW5kb0RlcHRoKSB7Ci0gICAgICAgIGhpc3QuZG9uZS5z
aGlmdCgpOwotICAgICAgICBpZiAoIWhpc3QuZG9uZVswXS5yYW5nZXMpIGhpc3QuZG9uZS5zaGlm
dCgpOwotICAgICAgfQotICAgIH0KLSAgICBoaXN0LmRvbmUucHVzaChzZWxBZnRlcik7Ci0gICAg
aGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247Ci0gICAgaGlzdC5sYXN0TW9k
VGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lOwotICAgIGhpc3QubGFzdE9wID0gb3BJZDsK
LSAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBjaGFuZ2Uub3JpZ2lu
OwotCi0gICAgaWYgKCFsYXN0KSBzaWduYWwoZG9jLCAiaGlzdG9yeUFkZGVkIik7Ci0gIH0KLQot
ICBmdW5jdGlvbiBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBwcmV2LCBz
ZWwpIHsKLSAgICB2YXIgY2ggPSBvcmlnaW4uY2hhckF0KDApOwotICAgIHJldHVybiBjaCA9PSAi
KiIgfHwKLSAgICAgIGNoID09ICIrIiAmJgotICAgICAgcHJldi5yYW5nZXMubGVuZ3RoID09IHNl
bC5yYW5nZXMubGVuZ3RoICYmCi0gICAgICBwcmV2LnNvbWV0aGluZ1NlbGVjdGVkKCkgPT0gc2Vs
LnNvbWV0aGluZ1NlbGVjdGVkKCkgJiYKLSAgICAgIG5ldyBEYXRlIC0gZG9jLmhpc3RvcnkubGFz
dFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDog
NTAwKTsKLSAgfQotCi0gIC8vIENhbGxlZCB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMs
IHNldHMgdGhlIG5ldyBzZWxlY3Rpb24gYXMKLSAgLy8gdGhlIHBlbmRpbmcgc2VsZWN0aW9uIGlu
IHRoZSBoaXN0b3J5LCBhbmQgcHVzaGVzIHRoZSBvbGQgcGVuZGluZwotICAvLyBzZWxlY3Rpb24g
aW50byB0aGUgJ2RvbmUnIGFycmF5IHdoZW4gaXQgd2FzIHNpZ25pZmljYW50bHkKLSAgLy8gZGlm
ZmVyZW50IChpbiBudW1iZXIgb2Ygc2VsZWN0ZWQgcmFuZ2VzLCBlbXB0aW5lc3MsIG9yIHRpbWUp
LgotICBmdW5jdGlvbiBhZGRTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLCBzZWwsIG9wSWQsIG9wdGlv
bnMpIHsKLSAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBvcmlnaW4gPSBvcHRpb25zICYmIG9w
dGlvbnMub3JpZ2luOwotCi0gICAgLy8gQSBuZXcgZXZlbnQgaXMgc3RhcnRlZCB3aGVuIHRoZSBw
cmV2aW91cyBvcmlnaW4gZG9lcyBub3QgbWF0Y2gKLSAgICAvLyB0aGUgY3VycmVudCwgb3IgdGhl
IG9yaWdpbnMgZG9uJ3QgYWxsb3cgbWF0Y2hpbmcuIE9yaWdpbnMKLSAgICAvLyBzdGFydGluZyB3
aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGggKyBhcmUKLSAgICAv
LyBtZXJnZWQgd2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhlciBpbiB0aW1lLgotICAgIGlm
IChvcElkID09IGhpc3QubGFzdE9wIHx8Ci0gICAgICAgIChvcmlnaW4gJiYgaGlzdC5sYXN0U2Vs
T3JpZ2luID09IG9yaWdpbiAmJgotICAgICAgICAgKGhpc3QubGFzdE1vZFRpbWUgPT0gaGlzdC5s
YXN0U2VsVGltZSAmJiBoaXN0Lmxhc3RPcmlnaW4gPT0gb3JpZ2luIHx8Ci0gICAgICAgICAgc2Vs
ZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgbHN0KGhpc3QuZG9uZSksIHNlbCkp
KSkKLSAgICAgIGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBzZWw7Ci0gICAgZWxz
ZQotICAgICAgcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGhpc3QuZG9uZSk7Ci0KLSAgICBo
aXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRlOwotICAgIGhpc3QubGFzdFNlbE9yaWdpbiA9IG9y
aWdpbjsKLSAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7Ci0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9u
cy5jbGVhclJlZG8gIT09IGZhbHNlKQotICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51
bmRvbmUpOwotICB9Ci0KLSAgZnVuY3Rpb24gcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGRl
c3QpIHsKLSAgICB2YXIgdG9wID0gbHN0KGRlc3QpOwotICAgIGlmICghKHRvcCAmJiB0b3AucmFu
Z2VzICYmIHRvcC5lcXVhbHMoc2VsKSkpCi0gICAgICBkZXN0LnB1c2goc2VsKTsKLSAgfQotCi0g
IC8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3Rvcnku
Ci0gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7Ci0g
ICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXSwgbiA9IDA7Ci0gICAg
ZG9jLml0ZXIoTWF0aC5tYXgoZG9jLmZpcnN0LCBmcm9tKSwgTWF0aC5taW4oZG9jLmZpcnN0ICsg
ZG9jLnNpemUsIHRvKSwgZnVuY3Rpb24obGluZSkgewotICAgICAgaWYgKGxpbmUubWFya2VkU3Bh
bnMpCi0gICAgICAgIChleGlzdGluZyB8fCAoZXhpc3RpbmcgPSBjaGFuZ2VbInNwYW5zXyIgKyBk
b2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7Ci0gICAgICArK247Ci0gICAgfSk7
Ci0gIH0KLQotICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBt
YXJrZWQgc3BhbnMsIHRob3NlCi0gIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgY2xlYXJl
ZCBzaG91bGQgbm90IGJlIHJlc3RvcmVkLgotICBmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3BhbnMo
c3BhbnMpIHsKLSAgICBpZiAoIXNwYW5zKSByZXR1cm4gbnVsbDsKLSAgICBmb3IgKHZhciBpID0g
MCwgb3V0OyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGlmIChzcGFuc1tpXS5tYXJr
ZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIG91dCA9IHNwYW5zLnNsaWNlKDAsIGkp
OyB9Ci0gICAgICBlbHNlIGlmIChvdXQpIG91dC5wdXNoKHNwYW5zW2ldKTsKLSAgICB9Ci0gICAg
cmV0dXJuICFvdXQgPyBzcGFucyA6IG91dC5sZW5ndGggPyBvdXQgOiBudWxsOwotICB9Ci0KLSAg
Ly8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUgb2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBj
aGFuZ2UgZXZlbnQuCi0gIGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7Ci0gICAg
dmFyIGZvdW5kID0gY2hhbmdlWyJzcGFuc18iICsgZG9jLmlkXTsKLSAgICBpZiAoIWZvdW5kKSBy
ZXR1cm4gbnVsbDsKLSAgICBmb3IgKHZhciBpID0gMCwgbncgPSBbXTsgaSA8IGNoYW5nZS50ZXh0
Lmxlbmd0aDsgKytpKQotICAgICAgbncucHVzaChyZW1vdmVDbGVhcmVkU3BhbnMoZm91bmRbaV0p
KTsKLSAgICByZXR1cm4gbnc7Ci0gIH0KLQotICAvLyBVc2VkIGJvdGggdG8gcHJvdmlkZSBhIEpT
T04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwgd2hlbgotICAvLyBkZXRhY2hpbmcg
YSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvCi0gIGZ1bmN0aW9uIGNvcHlI
aXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlhdGVTZWwpIHsKLSAgICBmb3Ig
KHZhciBpID0gMCwgY29weSA9IFtdOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICB2
YXIgZXZlbnQgPSBldmVudHNbaV07Ci0gICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7Ci0gICAgICAg
IGNvcHkucHVzaChpbnN0YW50aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHku
Y2FsbChldmVudCkgOiBldmVudCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAg
dmFyIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107Ci0gICAgICBjb3B5
LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXN9KTsKLSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
Y2hhbmdlcy5sZW5ndGg7ICsraikgewotICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwg
bTsKLSAgICAgICAgbmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5n
ZS50bywgdGV4dDogY2hhbmdlLnRleHR9KTsKLSAgICAgICAgaWYgKG5ld0dyb3VwKSBmb3IgKHZh
ciBwcm9wIGluIGNoYW5nZSkgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3BhbnNfKFxkKykkLykpIHsK
LSAgICAgICAgICBpZiAoaW5kZXhPZihuZXdHcm91cCwgTnVtYmVyKG1bMV0pKSA+IC0xKSB7Ci0g
ICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2VbcHJvcF07Ci0gICAgICAg
ICAgICBkZWxldGUgY2hhbmdlW3Byb3BdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gY29weTsKLSAgfQotCi0gIC8vIFJlYmFzaW5nL3Jlc2V0dGlu
ZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlcwotCi0gIGZ1
bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBmcm9tLCB0bywgZGlmZikgewotICAgIGlm
ICh0byA8IHBvcy5saW5lKSB7Ci0gICAgICBwb3MubGluZSArPSBkaWZmOwotICAgIH0gZWxzZSBp
ZiAoZnJvbSA8IHBvcy5saW5lKSB7Ci0gICAgICBwb3MubGluZSA9IGZyb207Ci0gICAgICBwb3Mu
Y2ggPSAwOwotICAgIH0KLSAgfQotCi0gIC8vIFRyaWVzIHRvIHJlYmFzZSBhbiBhcnJheSBvZiBo
aXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGUKLSAgLy8gZG9jdW1lbnQuIElmIHRo
ZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRoZQotICAvLyBl
dmVudCwgYW5kIGV2ZXJ5dGhpbmcgJ2JlaGluZCcgaXQsIGlzIGRpc2NhcmRlZC4gSWYgdGhlIGNo
YW5nZSBpcwotICAvLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBwb3NpdGlvbnMgYXJl
IHVwZGF0ZWQuIFVzZXMgYQotICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3IgdGhlIHBvc2l0
aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvCi0gIC8vIHJlYWxsb2NhdGUgdGhlbSBhbGwgb24gZXZl
cnkgcmViYXNlLCBidXQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoCi0gIC8vIHNoYXJlZCBwb3Np
dGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuCi0gIGZ1bmN0aW9uIHJlYmFzZUhp
c3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICB2YXIgc3ViID0gYXJyYXlbaV0sIG9rID0gdHJ1
ZTsKLSAgICAgIGlmIChzdWIucmFuZ2VzKSB7Ci0gICAgICAgIGlmICghc3ViLmNvcGllZCkgeyBz
dWIgPSBhcnJheVtpXSA9IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0gdHJ1ZTsgfQotICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKyspIHsKLSAgICAg
ICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9yLCBmcm9tLCB0bywg
ZGlmZik7Ci0gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmhlYWQs
IGZyb20sIHRvLCBkaWZmKTsKLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0K
LSAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyArK2opIHsKLSAg
ICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2pdOwotICAgICAgICBpZiAodG8gPCBjdXIuZnJv
bS5saW5lKSB7Ci0gICAgICAgICAgY3VyLmZyb20gPSBQb3MoY3VyLmZyb20ubGluZSArIGRpZmYs
IGN1ci5mcm9tLmNoKTsKLSAgICAgICAgICBjdXIudG8gPSBQb3MoY3VyLnRvLmxpbmUgKyBkaWZm
LCBjdXIudG8uY2gpOwotICAgICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3VyLnRvLmxpbmUpIHsK
LSAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGFycmF5LnNwbGljZSgwLCBpICsgMSk7Ci0g
ICAgICAgIGkgPSAwOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHJlYmFzZUhp
c3QoaGlzdCwgY2hhbmdlKSB7Ci0gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbS5saW5lLCB0byA9
IGNoYW5nZS50by5saW5lLCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvIC0gZnJvbSkg
LSAxOwotICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTsKLSAg
ICByZWJhc2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZmKTsKLSAgfQotCi0g
IC8vIEVWRU5UIFVUSUxJVElFUwotCi0gIC8vIER1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxs
IHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWUKLSAgLy8gY29tcGF0aWJpbGl0eSB3
cmFwcGVycyBhcmUgbmVlZGVkLgotCi0gIHZhciBlX3ByZXZlbnREZWZhdWx0ID0gQ29kZU1pcnJv
ci5lX3ByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewotICAgIGlmIChlLnByZXZlbnREZWZh
dWx0KSBlLnByZXZlbnREZWZhdWx0KCk7Ci0gICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7
Ci0gIH07Ci0gIHZhciBlX3N0b3BQcm9wYWdhdGlvbiA9IENvZGVNaXJyb3IuZV9zdG9wUHJvcGFn
YXRpb24gPSBmdW5jdGlvbihlKSB7Ci0gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSBlLnN0b3BQ
cm9wYWdhdGlvbigpOwotICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICB9OwotICBm
dW5jdGlvbiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkgewotICAgIHJldHVybiBlLmRlZmF1bHRQcmV2
ZW50ZWQgIT0gbnVsbCA/IGUuZGVmYXVsdFByZXZlbnRlZCA6IGUucmV0dXJuVmFsdWUgPT0gZmFs
c2U7Ci0gIH0KLSAgdmFyIGVfc3RvcCA9IENvZGVNaXJyb3IuZV9zdG9wID0gZnVuY3Rpb24oZSkg
e2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO307Ci0KLSAgZnVuY3Rp
b24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7fQotICBmdW5j
dGlvbiBlX2J1dHRvbihlKSB7Ci0gICAgdmFyIGIgPSBlLndoaWNoOwotICAgIGlmIChiID09IG51
bGwpIHsKLSAgICAgIGlmIChlLmJ1dHRvbiAmIDEpIGIgPSAxOwotICAgICAgZWxzZSBpZiAoZS5i
dXR0b24gJiAyKSBiID0gMzsKLSAgICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgNCkgYiA9IDI7Ci0g
ICAgfQotICAgIGlmIChtYWMgJiYgZS5jdHJsS2V5ICYmIGIgPT0gMSkgYiA9IDM7Ci0gICAgcmV0
dXJuIGI7Ci0gIH0KLQotICAvLyBFVkVOVCBIQU5ETElORwotCi0gIC8vIExpZ2h0d2VpZ2h0IGV2
ZW50IGZyYW1ld29yay4gb24vb2ZmIGFsc28gd29yayBvbiBET00gbm9kZXMsCi0gIC8vIHJlZ2lz
dGVyaW5nIG5hdGl2ZSBET00gaGFuZGxlcnMuCi0KLSAgdmFyIG9uID0gQ29kZU1pcnJvci5vbiA9
IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHsKLSAgICBpZiAoZW1pdHRlci5hZGRFdmVudExp
c3RlbmVyKQotICAgICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsK
LSAgICBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KQotICAgICAgZW1pdHRlci5hdHRhY2hF
dmVudCgib24iICsgdHlwZSwgZik7Ci0gICAgZWxzZSB7Ci0gICAgICB2YXIgbWFwID0gZW1pdHRl
ci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pOwotICAgICAgdmFyIGFyciA9
IG1hcFt0eXBlXSB8fCAobWFwW3R5cGVdID0gW10pOwotICAgICAgYXJyLnB1c2goZik7Ci0gICAg
fQotICB9OwotCi0gIHZhciBvZmYgPSBDb2RlTWlycm9yLm9mZiA9IGZ1bmN0aW9uKGVtaXR0ZXIs
IHR5cGUsIGYpIHsKLSAgICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKQotICAgICAg
ZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsKLSAgICBlbHNlIGlm
IChlbWl0dGVyLmRldGFjaEV2ZW50KQotICAgICAgZW1pdHRlci5kZXRhY2hFdmVudCgib24iICsg
dHlwZSwgZik7Ci0gICAgZWxzZSB7Ci0gICAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMg
JiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgICBpZiAoIWFycikgcmV0dXJuOwotICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChhcnJb
aV0gPT0gZikgeyBhcnIuc3BsaWNlKGksIDEpOyBicmVhazsgfQotICAgIH0KLSAgfTsKLQotICB2
YXIgc2lnbmFsID0gQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlIC8q
LCB2YWx1ZXMuLi4qLykgewotICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0
dGVyLl9oYW5kbGVyc1t0eXBlXTsKLSAgICBpZiAoIWFycikgcmV0dXJuOwotICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51bGwsIGFyZ3MpOwot
ICB9OwotCi0gIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBldmVudHMgYXQgYSBwb2ludCB3
aGVyZSB3ZSBhcmUgaW4gdGhlCi0gIC8vIG1pZGRsZSBvZiBzb21lIHdvcmssIGJ1dCBkb24ndCB3
YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNhbGxpbmcKLSAgLy8gb3RoZXIgbWV0aG9kcyBvbiB0
aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnQKLSAgLy8gc3RhdGUg
b3Igc2ltcGx5IG5vdCBleHBlY3QgYW55IG90aGVyIGV2ZW50cyB0byBoYXBwZW4uCi0gIC8vIHNp
Z25hbExhdGVyIGxvb2tzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoYW5kbGVycywgYW5kIHNjaGVk
dWxlcwotICAvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9uIGVu
ZHMsIG9yLCBpZiBubwotICAvLyBvcGVyYXRpb24gaXMgYWN0aXZlLCB3aGVuIGEgdGltZW91dCBm
aXJlcy4KLSAgdmFyIGRlbGF5ZWRDYWxsYmFja3MsIGRlbGF5ZWRDYWxsYmFja0RlcHRoID0gMDsK
LSAgZnVuY3Rpb24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsK
LSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlw
ZV07Ci0gICAgaWYgKCFhcnIpIHJldHVybjsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlw
ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgaWYgKCFkZWxheWVkQ2FsbGJhY2tzKSB7
Ci0gICAgICArK2RlbGF5ZWRDYWxsYmFja0RlcHRoOwotICAgICAgZGVsYXllZENhbGxiYWNrcyA9
IFtdOwotICAgICAgc2V0VGltZW91dChmaXJlRGVsYXllZCwgMCk7Ci0gICAgfQotICAgIGZ1bmN0
aW9uIGJuZChmKSB7cmV0dXJuIGZ1bmN0aW9uKCl7Zi5hcHBseShudWxsLCBhcmdzKTt9O307Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAgICBkZWxheWVkQ2Fs
bGJhY2tzLnB1c2goYm5kKGFycltpXSkpOwotICB9Ci0KLSAgZnVuY3Rpb24gZmlyZURlbGF5ZWQo
KSB7Ci0gICAgLS1kZWxheWVkQ2FsbGJhY2tEZXB0aDsKLSAgICB2YXIgZGVsYXllZCA9IGRlbGF5
ZWRDYWxsYmFja3M7Ci0gICAgZGVsYXllZENhbGxiYWNrcyA9IG51bGw7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7Ci0gIH0KLQotICAv
LyBUaGUgRE9NIGV2ZW50cyB0aGF0IENvZGVNaXJyb3IgaGFuZGxlcyBjYW4gYmUgb3ZlcnJpZGRl
biBieQotICAvLyByZWdpc3RlcmluZyBhIChub24tRE9NKSBoYW5kbGVyIG9uIHRoZSBlZGl0b3Ig
Zm9yIHRoZSBldmVudCBuYW1lLAotICAvLyBhbmQgcHJldmVudERlZmF1bHQtaW5nIHRoZSBldmVu
dCBpbiB0aGF0IGhhbmRsZXIuCi0gIGZ1bmN0aW9uIHNpZ25hbERPTUV2ZW50KGNtLCBlLCBvdmVy
cmlkZSkgewotICAgIHNpZ25hbChjbSwgb3ZlcnJpZGUgfHwgZS50eXBlLCBjbSwgZSk7Ci0gICAg
cmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKSB8fCBlLmNvZGVtaXJyb3JJZ25vcmU7Ci0gIH0K
LQotICBmdW5jdGlvbiBzaWduYWxDdXJzb3JBY3Rpdml0eShjbSkgewotICAgIHZhciBhcnIgPSBj
bS5faGFuZGxlcnMgJiYgY20uX2hhbmRsZXJzLmN1cnNvckFjdGl2aXR5OwotICAgIGlmICghYXJy
KSByZXR1cm47Ci0gICAgdmFyIHNldCA9IGNtLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMg
fHwgKGNtLmN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMgPSBbXSk7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIGlmIChpbmRleE9mKHNldCwgYXJyW2ldKSA9PSAt
MSkKLSAgICAgIHNldC5wdXNoKGFycltpXSk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYXNIYW5kbGVy
KGVtaXR0ZXIsIHR5cGUpIHsKLSAgICB2YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1p
dHRlci5faGFuZGxlcnNbdHlwZV07Ci0gICAgcmV0dXJuIGFyciAmJiBhcnIubGVuZ3RoID4gMDsK
LSAgfQotCi0gIC8vIEFkZCBvbiBhbmQgb2ZmIG1ldGhvZHMgdG8gYSBjb25zdHJ1Y3RvcidzIHBy
b3RvdHlwZSwgdG8gbWFrZQotICAvLyByZWdpc3RlcmluZyBldmVudHMgb24gc3VjaCBvYmplY3Rz
IG1vcmUgY29udmVuaWVudC4KLSAgZnVuY3Rpb24gZXZlbnRNaXhpbihjdG9yKSB7Ci0gICAgY3Rv
ci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywgdHlwZSwgZik7fTsK
LSAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5
cGUsIGYpO307Ci0gIH0KLQotICAvLyBNSVNDIFVUSUxJVElFUwotCi0gIC8vIE51bWJlciBvZiBw
aXhlbHMgYWRkZWQgdG8gc2Nyb2xsZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xsYmFyCi0gIHZh
ciBzY3JvbGxlckN1dE9mZiA9IDMwOwotCi0gIC8vIFJldHVybmVkIG9yIHRocm93biBieSB2YXJp
b3VzIHByb3RvY29scyB0byBzaWduYWwgJ0knbSBub3QKLSAgLy8gaGFuZGxpbmcgdGhpcycuCi0g
IHZhciBQYXNzID0gQ29kZU1pcnJvci5QYXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVy
biAiQ29kZU1pcnJvci5QYXNzIjt9fTsKLQotICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9y
IHNldFNlbGVjdGlvbiAmIGZyaWVuZHMKLSAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Njcm9sbDog
ZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiAiKm1vdXNlIn0sIHNlbF9tb3ZlID0ge29yaWdp
bjogIittb3ZlIn07Ci0KLSAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9Ci0g
IERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG1zLCBmKSB7Ci0gICAgY2xlYXJUaW1l
b3V0KHRoaXMuaWQpOwotICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTsKLSAgfTsKLQot
ICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGlu
dG8gYWNjb3VudC4KLSAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KLSAgdmFy
IGNvdW50Q29sdW1uID0gQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGZ1bmN0aW9uKHN0cmluZywg
ZW5kLCB0YWJTaXplLCBzdGFydEluZGV4LCBzdGFydFZhbHVlKSB7Ci0gICAgaWYgKGVuZCA9PSBu
dWxsKSB7Ci0gICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pOwotICAgICAg
aWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKLSAgICB9Ci0gICAgZm9yICh2YXIg
aSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7Ci0gICAgICB2YXIg
bmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKCJcdCIsIGkpOwotICAgICAgaWYgKG5leHRUYWIgPCAw
IHx8IG5leHRUYWIgPj0gZW5kKQotICAgICAgICByZXR1cm4gbiArIChlbmQgLSBpKTsKLSAgICAg
IG4gKz0gbmV4dFRhYiAtIGk7Ci0gICAgICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwot
ICAgICAgaSA9IG5leHRUYWIgKyAxOwotICAgIH0KLSAgfTsKLQotICAvLyBUaGUgaW52ZXJzZSBv
ZiBjb3VudENvbHVtbiAtLSBmaW5kIHRoZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0bwotICAv
LyBhIHBhcnRpY3VsYXIgY29sdW1uLgotICBmdW5jdGlvbiBmaW5kQ29sdW1uKHN0cmluZywgZ29h
bCwgdGFiU2l6ZSkgewotICAgIGZvciAodmFyIHBvcyA9IDAsIGNvbCA9IDA7OykgewotICAgICAg
dmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZigiXHQiLCBwb3MpOwotICAgICAgaWYgKG5leHRU
YWIgPT0gLTEpIG5leHRUYWIgPSBzdHJpbmcubGVuZ3RoOwotICAgICAgdmFyIHNraXBwZWQgPSBu
ZXh0VGFiIC0gcG9zOwotICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wg
KyBza2lwcGVkID49IGdvYWwpCi0gICAgICAgIHJldHVybiBwb3MgKyBNYXRoLm1pbihza2lwcGVk
LCBnb2FsIC0gY29sKTsKLSAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zOwotICAgICAgY29sICs9
IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7Ci0gICAgICBwb3MgPSBuZXh0VGFiICsgMTsKLSAg
ICAgIGlmIChjb2wgPj0gZ29hbCkgcmV0dXJuIHBvczsKLSAgICB9Ci0gIH0KLQotICB2YXIgc3Bh
Y2VTdHJzID0gWyIiXTsKLSAgZnVuY3Rpb24gc3BhY2VTdHIobikgewotICAgIHdoaWxlIChzcGFj
ZVN0cnMubGVuZ3RoIDw9IG4pCi0gICAgICBzcGFjZVN0cnMucHVzaChsc3Qoc3BhY2VTdHJzKSAr
ICIgIik7Ci0gICAgcmV0dXJuIHNwYWNlU3Ryc1tuXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxzdChh
cnIpIHsgcmV0dXJuIGFyclthcnIubGVuZ3RoLTFdOyB9Ci0KLSAgdmFyIHNlbGVjdElucHV0ID0g
ZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdCgpOyB9OwotICBpZiAoaW9zKSAvLyBNb2JpbGUg
U2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KLSAg
ICBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7
IG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7IH07Ci0gIGVsc2UgaWYgKGll
KSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzCi0gICAgc2VsZWN0SW5wdXQgPSBm
dW5jdGlvbihub2RlKSB7IHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0gY2F0Y2goX2UpIHt9IH07Ci0K
LSAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWx0KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcnJheS5sZW5ndGg7ICsraSkKLSAgICAgIGlmIChhcnJheVtpXSA9PSBlbHQpIHJldHVybiBp
OwotICAgIHJldHVybiAtMTsKLSAgfQotICBpZiAoW10uaW5kZXhPZikgaW5kZXhPZiA9IGZ1bmN0
aW9uKGFycmF5LCBlbHQpIHsgcmV0dXJuIGFycmF5LmluZGV4T2YoZWx0KTsgfTsKLSAgZnVuY3Rp
b24gbWFwKGFycmF5LCBmKSB7Ci0gICAgdmFyIG91dCA9IFtdOwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9IGYoYXJyYXlbaV0sIGkpOwotICAgIHJl
dHVybiBvdXQ7Ci0gIH0KLSAgaWYgKFtdLm1hcCkgbWFwID0gZnVuY3Rpb24oYXJyYXksIGYpIHsg
cmV0dXJuIGFycmF5Lm1hcChmKTsgfTsKLQotICBmdW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJv
cHMpIHsKLSAgICB2YXIgaW5zdDsKLSAgICBpZiAoT2JqZWN0LmNyZWF0ZSkgewotICAgICAgaW5z
dCA9IE9iamVjdC5jcmVhdGUoYmFzZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBjdG9yID0g
ZnVuY3Rpb24oKSB7fTsKLSAgICAgIGN0b3IucHJvdG90eXBlID0gYmFzZTsKLSAgICAgIGluc3Qg
PSBuZXcgY3RvcigpOwotICAgIH0KLSAgICBpZiAocHJvcHMpIGNvcHlPYmoocHJvcHMsIGluc3Qp
OwotICAgIHJldHVybiBpbnN0OwotICB9OwotCi0gIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJn
ZXQsIG92ZXJ3cml0ZSkgewotICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB7fTsKLSAgICBmb3Ig
KHZhciBwcm9wIGluIG9iaikKLSAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYg
KG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkpCi0g
ICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTsKLSAgICByZXR1cm4gdGFyZ2V0OwotICB9
Ci0KLSAgZnVuY3Rpb24gYmluZChmKSB7Ci0gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgIHJldHVybiBmdW5jdGlvbigpe3JldHVybiBm
LmFwcGx5KG51bGwsIGFyZ3MpO307Ci0gIH0KLQotICB2YXIgbm9uQVNDSUlTaW5nbGVDYXNlV29y
ZENoYXIgPSAvW1x1MDBkZlx1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZmXHUzNDAwLVx1NGRiNVx1
NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87Ci0gIHZhciBpc1dvcmRDaGFyQmFzaWMgPSBDb2Rl
TWlycm9yLmlzV29yZENoYXIgPSBmdW5jdGlvbihjaCkgewotICAgIHJldHVybiAvXHcvLnRlc3Qo
Y2gpIHx8IGNoID4gIlx4ODAiICYmCi0gICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xv
d2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKTsKLSAgfTsK
LSAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCwgaGVscGVyKSB7Ci0gICAgaWYgKCFoZWxwZXIpIHJl
dHVybiBpc1dvcmRDaGFyQmFzaWMoY2gpOwotICAgIGlmIChoZWxwZXIuc291cmNlLmluZGV4T2Yo
IlxcdyIpID4gLTEgJiYgaXNXb3JkQ2hhckJhc2ljKGNoKSkgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIGhlbHBlci50ZXN0KGNoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7Ci0g
ICAgZm9yICh2YXIgbiBpbiBvYmopIGlmIChvYmouaGFzT3duUHJvcGVydHkobikgJiYgb2JqW25d
KSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBFeHRlbmRpbmcg
dW5pY29kZSBjaGFyYWN0ZXJzLiBBIHNlcmllcyBvZiBhIG5vbi1leHRlbmRpbmcgY2hhciArCi0g
IC8vIGFueSBudW1iZXIgb2YgZXh0ZW5kaW5nIGNoYXJzIGlzIHRyZWF0ZWQgYXMgYSBzaW5nbGUg
dW5pdCBhcyBmYXIKLSAgLy8gYXMgZWRpdGluZyBhbmQgbWVhc3VyaW5nIGlzIGNvbmNlcm5lZC4g
VGhpcyBpcyBub3QgZnVsbHkgY29ycmVjdCwKLSAgLy8gc2luY2Ugc29tZSBzY3JpcHRzL2ZvbnRz
L2Jyb3dzZXJzIGFsc28gdHJlYXQgb3RoZXIgY29uZmlndXJhdGlvbnMKLSAgLy8gb2YgY29kZSBw
b2ludHMgYXMgYSBncm91cC4KLSAgdmFyIGV4dGVuZGluZ0NoYXJzID0gL1tcdTAzMDAtXHUwMzZm
XHUwNDgzLVx1MDQ4OVx1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVc
dTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1ZVx1MDY3MFx1MDZkNi1cdTA2ZGNcdTA2ZGUt
XHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVhLVx1MDZlZFx1MDcxMVx1MDczMC1cdTA3NGFcdTA3YTYt
XHUwN2IwXHUwN2ViLVx1MDdmM1x1MDgxNi1cdTA4MTlcdTA4MWItXHUwODIzXHUwODI1LVx1MDgy
N1x1MDgyOS1cdTA4MmRcdTA5MDAtXHUwOTAyXHUwOTNjXHUwOTQxLVx1MDk0OFx1MDk0ZFx1MDk1
MS1cdTA5NTVcdTA5NjJcdTA5NjNcdTA5ODFcdTA5YmNcdTA5YmVcdTA5YzEtXHUwOWM0XHUwOWNk
XHUwOWQ3XHUwOWUyXHUwOWUzXHUwYTAxXHUwYTAyXHUwYTNjXHUwYTQxXHUwYTQyXHUwYTQ3XHUw
YTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE3MFx1MGE3MVx1MGE3NVx1MGE4MVx1MGE4Mlx1MGFi
Y1x1MGFjMS1cdTBhYzVcdTBhYzdcdTBhYzhcdTBhY2RcdTBhZTJcdTBhZTNcdTBiMDFcdTBiM2Nc
dTBiM2VcdTBiM2ZcdTBiNDEtXHUwYjQ0XHUwYjRkXHUwYjU2XHUwYjU3XHUwYjYyXHUwYjYzXHUw
YjgyXHUwYmJlXHUwYmMwXHUwYmNkXHUwYmQ3XHUwYzNlLVx1MGM0MFx1MGM0Ni1cdTBjNDhcdTBj
NGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwY2JjXHUwY2JmXHUwY2MyXHUwY2M2
XHUwY2NjXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2UyXHUwY2UzXHUwZDNlXHUwZDQxLVx1MGQ0NFx1
MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGRjYVx1MGRjZlx1MGRkMi1cdTBkZDRcdTBkZDZcdTBk
ZGZcdTBlMzFcdTBlMzQtXHUwZTNhXHUwZTQ3LVx1MGU0ZVx1MGViMVx1MGViNC1cdTBlYjlcdTBl
YmJcdTBlYmNcdTBlYzgtXHUwZWNkXHUwZjE4XHUwZjE5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjcx
LVx1MGY3ZVx1MGY4MC1cdTBmODRcdTBmODZcdTBmODdcdTBmOTAtXHUwZjk3XHUwZjk5LVx1MGZi
Y1x1MGZjNlx1MTAyZC1cdTEwMzBcdTEwMzItXHUxMDM3XHUxMDM5XHUxMDNhXHUxMDNkXHUxMDNl
XHUxMDU4XHUxMDU5XHUxMDVlLVx1MTA2MFx1MTA3MS1cdTEwNzRcdTEwODJcdTEwODVcdTEwODZc
dTEwOGRcdTEwOWRcdTEzNWZcdTE3MTItXHUxNzE0XHUxNzMyLVx1MTczNFx1MTc1Mlx1MTc1M1x1
MTc3Mlx1MTc3M1x1MTdiNy1cdTE3YmRcdTE3YzZcdTE3YzktXHUxN2QzXHUxN2RkXHUxODBiLVx1
MTgwZFx1MThhOVx1MTkyMC1cdTE5MjJcdTE5MjdcdTE5MjhcdTE5MzJcdTE5MzktXHUxOTNiXHUx
YTE3XHUxYTE4XHUxYTU2XHUxYTU4LVx1MWE1ZVx1MWE2MFx1MWE2Mlx1MWE2NS1cdTFhNmNcdTFh
NzMtXHUxYTdjXHUxYTdmXHUxYjAwLVx1MWIwM1x1MWIzNFx1MWIzNi1cdTFiM2FcdTFiM2NcdTFi
NDJcdTFiNmItXHUxYjczXHUxYjgwXHUxYjgxXHUxYmEyLVx1MWJhNVx1MWJhOFx1MWJhOVx1MWMy
Yy1cdTFjMzNcdTFjMzZcdTFjMzdcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNlMFx1MWNlMi1cdTFj
ZThcdTFjZWRcdTFkYzAtXHUxZGU2XHUxZGZkLVx1MWRmZlx1MjAwY1x1MjAwZFx1MjBkMC1cdTIw
ZjBcdTJjZWYtXHUyY2YxXHUyZGUwLVx1MmRmZlx1MzAyYS1cdTMwMmZcdTMwOTlcdTMwOWFcdWE2
NmYtXHVhNjcyXHVhNjdjXHVhNjdkXHVhNmYwXHVhNmYxXHVhODAyXHVhODA2XHVhODBiXHVhODI1
XHVhODI2XHVhOGM0XHVhOGUwLVx1YThmMVx1YTkyNi1cdWE5MmRcdWE5NDctXHVhOTUxXHVhOTgw
LVx1YTk4Mlx1YTliM1x1YTliNi1cdWE5YjlcdWE5YmNcdWFhMjktXHVhYTJlXHVhYTMxXHVhYTMy
XHVhYTM1XHVhYTM2XHVhYTQzXHVhYTRjXHVhYWIwXHVhYWIyLVx1YWFiNFx1YWFiN1x1YWFiOFx1
YWFiZVx1YWFiZlx1YWFjMVx1YWJlNVx1YWJlOFx1YWJlZFx1ZGMwMC1cdWRmZmZcdWZiMWVcdWZl
MDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmY5ZVx1ZmY5Zl0vOwotICBmdW5jdGlvbiBpc0V4dGVu
ZGluZ0NoYXIoY2gpIHsgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkgPj0gNzY4ICYmIGV4dGVuZGlu
Z0NoYXJzLnRlc3QoY2gpOyB9Ci0KLSAgLy8gRE9NIFVUSUxJVElFUwotCi0gIGZ1bmN0aW9uIGVs
dCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHsKLSAgICB2YXIgZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQodGFnKTsKLSAgICBpZiAoY2xhc3NOYW1lKSBlLmNsYXNzTmFtZSA9IGNs
YXNzTmFtZTsKLSAgICBpZiAoc3R5bGUpIGUuc3R5bGUuY3NzVGV4dCA9IHN0eWxlOwotICAgIGlm
ICh0eXBlb2YgY29udGVudCA9PSAic3RyaW5nIikgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShjb250ZW50KSk7Ci0gICAgZWxzZSBpZiAoY29udGVudCkgZm9yICh2YXIgaSA9
IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgKytpKSBlLmFwcGVuZENoaWxkKGNvbnRlbnRbaV0pOwot
ICAgIHJldHVybiBlOwotICB9Ci0KLSAgdmFyIHJhbmdlOwotICBpZiAoZG9jdW1lbnQuY3JlYXRl
UmFuZ2UpIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgewotICAgIHZhciByID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICByLnNldEVuZChub2RlLCBlbmQpOwotICAgIHIu
c2V0U3RhcnQobm9kZSwgc3RhcnQpOwotICAgIHJldHVybiByOwotICB9OwotICBlbHNlIHJhbmdl
ID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgewotICAgIHZhciByID0gZG9jdW1lbnQuYm9k
eS5jcmVhdGVUZXh0UmFuZ2UoKTsKLSAgICByLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUucGFyZW50
Tm9kZSk7Ci0gICAgci5jb2xsYXBzZSh0cnVlKTsKLSAgICByLm1vdmVFbmQoImNoYXJhY3RlciIs
IGVuZCk7Ci0gICAgci5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIHN0YXJ0KTsKLSAgICByZXR1cm4g
cjsKLSAgfTsKLQotICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihlKSB7Ci0gICAgZm9yICh2YXIg
Y291bnQgPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBjb3VudCA+IDA7IC0tY291bnQpCi0gICAgICBl
LnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7Ci0gICAgcmV0dXJuIGU7Ci0gIH0KLQotICBmdW5j
dGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHsKLSAgICByZXR1cm4gcmVtb3Zl
Q2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbnRh
aW5zKHBhcmVudCwgY2hpbGQpIHsKLSAgICBpZiAocGFyZW50LmNvbnRhaW5zKQotICAgICAgcmV0
dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7Ci0gICAgd2hpbGUgKGNoaWxkID0gY2hpbGQucGFy
ZW50Tm9kZSkKLSAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHJldHVybiB0cnVlOwotICB9Ci0K
LSAgZnVuY3Rpb24gYWN0aXZlRWx0KCkgeyByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsg
fQotICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3Igd2hl
biB0b3VjaGluZwotICAvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIHNvbWUgY2FzZXMgKGR1
cmluZyBsb2FkaW5nLCBpbiBpZnJhbWUpCi0gIGlmIChpZV91cHRvMTApIGFjdGl2ZUVsdCA9IGZ1
bmN0aW9uKCkgewotICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9Ci0g
ICAgY2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9keTsgfQotICB9OwotCi0gIGZ1bmN0aW9u
IGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiXFxz
KiIpOyB9Ci0gIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwgY2xzKSB7Ci0gICAgdmFyIHRlc3QgPSBj
bGFzc1Rlc3QoY2xzKTsKLSAgICBpZiAodGVzdC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgbm9kZS5j
bGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKHRlc3QsICIiKTsKLSAgfQotICBmdW5j
dGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHsKLSAgICBpZiAoIWNsYXNzVGVzdChjbHMpLnRlc3Qo
bm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSArPSAiICIgKyBjbHM7Ci0gIH0KLSAgZnVu
Y3Rpb24gam9pbkNsYXNzZXMoYSwgYikgewotICAgIHZhciBhcyA9IGEuc3BsaXQoIiAiKTsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKQotICAgICAgaWYgKGFzW2ldICYm
ICFjbGFzc1Rlc3QoYXNbaV0pLnRlc3QoYikpIGIgKz0gIiAiICsgYXNbaV07Ci0gICAgcmV0dXJu
IGI7Ci0gIH0KLQotICAvLyBXSU5ET1ctV0lERSBFVkVOVFMKLQotICAvLyBUaGVzZSBtdXN0IGJl
IGhhbmRsZWQgY2FyZWZ1bGx5LCBiZWNhdXNlIG5haXZlbHkgcmVnaXN0ZXJpbmcgYQotICAvLyBo
YW5kbGVyIGZvciBlYWNoIGVkaXRvciB3aWxsIGNhdXNlIHRoZSBlZGl0b3JzIHRvIG5ldmVyIGJl
Ci0gIC8vIGdhcmJhZ2UgY29sbGVjdGVkLgotCi0gIGZ1bmN0aW9uIGZvckVhY2hDb2RlTWlycm9y
KGYpIHsKLSAgICBpZiAoIWRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgcmV0
dXJuOwotICAgIHZhciBieUNsYXNzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCJDb2RlTWlycm9yIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieUNsYXNzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICB2YXIgY20gPSBieUNsYXNzW2ldLkNvZGVNaXJyb3I7Ci0gICAgICBp
ZiAoY20pIGYoY20pOwotICAgIH0KLSAgfQotCi0gIHZhciBnbG9iYWxzUmVnaXN0ZXJlZCA9IGZh
bHNlOwotICBmdW5jdGlvbiBlbnN1cmVHbG9iYWxIYW5kbGVycygpIHsKLSAgICBpZiAoZ2xvYmFs
c1JlZ2lzdGVyZWQpIHJldHVybjsKLSAgICByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCk7Ci0gICAg
Z2xvYmFsc1JlZ2lzdGVyZWQgPSB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFs
SGFuZGxlcnMoKSB7Ci0gICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHdlIG5lZWQgdG8g
cmVmcmVzaCBhY3RpdmUgZWRpdG9ycy4KLSAgICB2YXIgcmVzaXplVGltZXI7Ci0gICAgb24od2lu
ZG93LCAicmVzaXplIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVs
bCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICByZXNpemVU
aW1lciA9IG51bGw7Ci0gICAgICAgIGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOwotICAgICAg
ICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7Ci0gICAgICB9LCAxMDApOwotICAgIH0pOwot
ICAgIC8vIFdoZW4gdGhlIHdpbmRvdyBsb3NlcyBmb2N1cywgd2Ugd2FudCB0byBzaG93IHRoZSBl
ZGl0b3IgYXMgYmx1cnJlZAotICAgIG9uKHdpbmRvdywgImJsdXIiLCBmdW5jdGlvbigpIHsKLSAg
ICAgIGZvckVhY2hDb2RlTWlycm9yKG9uQmx1cik7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBGRUFU
VVJFIERFVEVDVElPTgotCi0gIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wCi0gIHZhciBkcmFnQW5k
RHJvcCA9IGZ1bmN0aW9uKCkgewotICAgIC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWct
YW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IEkKLSAgICAvLyBjb3VsZG4ndCBnZXQgaXQg
dG8gd29yayB5ZXQuCi0gICAgaWYgKGllX3VwdG84KSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIGRp
diA9IGVsdCgnZGl2Jyk7Ci0gICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ry
b3AiIGluIGRpdjsKLSAgfSgpOwotCi0gIHZhciBrbm93blNjcm9sbGJhcldpZHRoOwotICBmdW5j
dGlvbiBzY3JvbGxiYXJXaWR0aChtZWFzdXJlKSB7Ci0gICAgaWYgKGtub3duU2Nyb2xsYmFyV2lk
dGggIT0gbnVsbCkgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGg7Ci0gICAgdmFyIHRlc3QgPSBl
bHQoImRpdiIsIG51bGwsIG51bGwsICJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxv
dy14OiBzY3JvbGwiKTsKLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCB0ZXN0KTsK
LSAgICBpZiAodGVzdC5vZmZzZXRXaWR0aCkKLSAgICAgIGtub3duU2Nyb2xsYmFyV2lkdGggPSB0
ZXN0Lm9mZnNldEhlaWdodCAtIHRlc3QuY2xpZW50SGVpZ2h0OwotICAgIHJldHVybiBrbm93blNj
cm9sbGJhcldpZHRoIHx8IDA7Ci0gIH0KLQotICB2YXIgendzcFN1cHBvcnRlZDsKLSAgZnVuY3Rp
b24gemVyb1dpZHRoRWxlbWVudChtZWFzdXJlKSB7Ci0gICAgaWYgKHp3c3BTdXBwb3J0ZWQgPT0g
bnVsbCkgewotICAgICAgdmFyIHRlc3QgPSBlbHQoInNwYW4iLCAiXHUyMDBiIik7Ci0gICAgICBy
ZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoInNwYW4iLCBbdGVzdCwgZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIngiKV0pKTsKLSAgICAgIGlmIChtZWFzdXJlLmZpcnN0Q2hpbGQub2Zm
c2V0SGVpZ2h0ICE9IDApCi0gICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRo
IDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICFpZV91cHRvNzsKLSAgICB9Ci0gICAg
aWYgKHp3c3BTdXBwb3J0ZWQpIHJldHVybiBlbHQoInNwYW4iLCAiXHUyMDBiIik7Ci0gICAgZWxz
ZSByZXR1cm4gZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpOwotICB9Ci0KLSAgLy8gRmVhdHVy
ZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRpIHRleHQK
LSAgdmFyIGJhZEJpZGlSZWN0czsKLSAgZnVuY3Rpb24gaGFzQmFkQmlkaVJlY3RzKG1lYXN1cmUp
IHsKLSAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHJldHVybiBiYWRCaWRpUmVjdHM7Ci0g
ICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJBXHUwNjJlQSIpKTsKLSAgICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIGlmIChyMC5sZWZ0ID09IHIwLnJpZ2h0KSByZXR1
cm4gZmFsc2U7Ci0gICAgdmFyIHIxID0gcmFuZ2UodHh0LCAxLCAyKS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSAgICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0IC0gcjAucmlnaHQg
PCAzKTsKLSAgfQotCi0gIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNp
b24sIGlmIHNvLCBwcm92aWRlIGFuCi0gIC8vIGFsdGVybmF0aXZlIHdheSB0byBzcGxpdCBsaW5l
cy4KLSAgdmFyIHNwbGl0TGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSAiXG5cbmIiLnNw
bGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgdmFyIHBvcyA9
IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDsKLSAgICB3aGlsZSAocG9zIDw9IGwp
IHsKLSAgICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcyk7Ci0gICAgICBpZiAo
bmwgPT0gLTEpIG5sID0gc3RyaW5nLmxlbmd0aDsKLSAgICAgIHZhciBsaW5lID0gc3RyaW5nLnNs
aWNlKHBvcywgc3RyaW5nLmNoYXJBdChubCAtIDEpID09ICJcciIgPyBubCAtIDEgOiBubCk7Ci0g
ICAgICB2YXIgcnQgPSBsaW5lLmluZGV4T2YoIlxyIik7Ci0gICAgICBpZiAocnQgIT0gLTEpIHsK
LSAgICAgICAgcmVzdWx0LnB1c2gobGluZS5zbGljZSgwLCBydCkpOwotICAgICAgICBwb3MgKz0g
cnQgKyAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0LnB1c2gobGluZSk7Ci0gICAg
ICAgIHBvcyA9IG5sICsgMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAg
fSA6IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgvXHJcbj98XG4vKTt9Owot
Ci0gIHZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rpb24odGUp
IHsKLSAgICB0cnkgeyByZXR1cm4gdGUuc2VsZWN0aW9uU3RhcnQgIT0gdGUuc2VsZWN0aW9uRW5k
OyB9Ci0gICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgfSA6IGZ1bmN0aW9uKHRlKSB7
Ci0gICAgdHJ5IHt2YXIgcmFuZ2UgPSB0ZS5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVS
YW5nZSgpO30KLSAgICBjYXRjaChlKSB7fQotICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50
RWxlbWVudCgpICE9IHRlKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJhbmdlLmNvbXBhcmVF
bmRQb2ludHMoIlN0YXJ0VG9FbmQiLCByYW5nZSkgIT0gMDsKLSAgfTsKLQotICB2YXIgaGFzQ29w
eUV2ZW50ID0gKGZ1bmN0aW9uKCkgewotICAgIHZhciBlID0gZWx0KCJkaXYiKTsKLSAgICBpZiAo
Im9uY29weSIgaW4gZSkgcmV0dXJuIHRydWU7Ci0gICAgZS5zZXRBdHRyaWJ1dGUoIm9uY29weSIs
ICJyZXR1cm47Iik7Ci0gICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24iOwot
ICB9KSgpOwotCi0gIC8vIEtFWSBOQU1FUwotCi0gIHZhciBrZXlOYW1lcyA9IHszOiAiRW50ZXIi
LCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEzOiAiRW50ZXIiLCAxNjogIlNoaWZ0IiwgMTc6
ICJDdHJsIiwgMTg6ICJBbHQiLAotICAgICAgICAgICAgICAgICAgMTk6ICJQYXVzZSIsIDIwOiAi
Q2Fwc0xvY2siLCAyNzogIkVzYyIsIDMyOiAiU3BhY2UiLCAzMzogIlBhZ2VVcCIsIDM0OiAiUGFn
ZURvd24iLCAzNTogIkVuZCIsCi0gICAgICAgICAgICAgICAgICAzNjogIkhvbWUiLCAzNzogIkxl
ZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQwOiAiRG93biIsIDQ0OiAiUHJpbnRTY3JuIiwg
NDU6ICJJbnNlcnQiLAotICAgICAgICAgICAgICAgICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA2
MTogIj0iLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxMDc6ICI9IiwgMTA5OiAi
LSIsIDEyNzogIkRlbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAxNzM6ICItIiwgMTg2OiAiOyIs
IDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAi
YCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsCi0gICAgICAgICAgICAgICAgICAyMjE6ICJdIiwgMjIy
OiAiJyIsIDYzMjMyOiAiVXAiLCA2MzIzMzogIkRvd24iLCA2MzIzNDogIkxlZnQiLCA2MzIzNTog
IlJpZ2h0IiwgNjMyNzI6ICJEZWxldGUiLAotICAgICAgICAgICAgICAgICAgNjMyNzM6ICJIb21l
IiwgNjMyNzU6ICJFbmQiLCA2MzI3NjogIlBhZ2VVcCIsIDYzMjc3OiAiUGFnZURvd24iLCA2MzMw
MjogIkluc2VydCJ9OwotICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7Ci0gIChmdW5j
dGlvbigpIHsKLSAgICAvLyBOdW1iZXIga2V5cwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7
IGkrKykga2V5TmFtZXNbaSArIDQ4XSA9IGtleU5hbWVzW2kgKyA5Nl0gPSBTdHJpbmcoaSk7Ci0g
ICAgLy8gQWxwaGFiZXRpYyBrZXlzCi0gICAgZm9yICh2YXIgaSA9IDY1OyBpIDw9IDkwOyBpKysp
IGtleU5hbWVzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsKLSAgICAvLyBGdW5jdGlvbiBr
ZXlzCi0gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykga2V5TmFtZXNbaSArIDExMV0g
PSBrZXlOYW1lc1tpICsgNjMyMzVdID0gIkYiICsgaTsKLSAgfSkoKTsKLQotICAvLyBCSURJIEhF
TFBFUlMKLQotICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywg
ZikgewotICAgIGlmICghb3JkZXIpIHJldHVybiBmKGZyb20sIHRvLCAibHRyIik7Ci0gICAgdmFy
IGZvdW5kID0gZmFsc2U7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsr
aSkgewotICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKLSAgICAgIGlmIChwYXJ0LmZyb20gPCB0
byAmJiBwYXJ0LnRvID4gZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkgewot
ICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWluKHBhcnQudG8sIHRv
KSwgcGFydC5sZXZlbCA9PSAxID8gInJ0bCIgOiAibHRyIik7Ci0gICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgZihmcm9tLCB0bywgImx0ciIpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gYmlkaUxlZnQocGFydCkgeyByZXR1cm4gcGFydC5sZXZlbCAlIDIg
PyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9Ci0gIGZ1bmN0aW9uIGJpZGlSaWdodChwYXJ0KSB7IHJl
dHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQuZnJvbSA6IHBhcnQudG87IH0KLQotICBmdW5jdGlv
biBsaW5lTGVmdChsaW5lKSB7IHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOyByZXR1cm4gb3Jk
ZXIgPyBiaWRpTGVmdChvcmRlclswXSkgOiAwOyB9Ci0gIGZ1bmN0aW9uIGxpbmVSaWdodChsaW5l
KSB7Ci0gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgaWYgKCFvcmRlcikgcmV0
dXJuIGxpbmUudGV4dC5sZW5ndGg7Ci0gICAgcmV0dXJuIGJpZGlSaWdodChsc3Qob3JkZXIpKTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGxpbmVTdGFydChjbSwgbGluZU4pIHsKLSAgICB2YXIgbGluZSA9
IGdldExpbmUoY20uZG9jLCBsaW5lTik7Ci0gICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUobGlu
ZSk7Ci0gICAgaWYgKHZpc3VhbCAhPSBsaW5lKSBsaW5lTiA9IGxpbmVObyh2aXN1YWwpOwotICAg
IHZhciBvcmRlciA9IGdldE9yZGVyKHZpc3VhbCk7Ci0gICAgdmFyIGNoID0gIW9yZGVyID8gMCA6
IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVSaWdodCh2aXN1YWwpIDogbGluZUxlZnQodmlzdWFs
KTsKLSAgICByZXR1cm4gUG9zKGxpbmVOLCBjaCk7Ci0gIH0KLSAgZnVuY3Rpb24gbGluZUVuZChj
bSwgbGluZU4pIHsKLSAgICB2YXIgbWVyZ2VkLCBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVO
KTsKLSAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKSB7Ci0gICAg
ICBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsKLSAgICAgIGxpbmVOID0gbnVsbDsK
LSAgICB9Ci0gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgdmFyIGNoID0gIW9y
ZGVyID8gbGluZS50ZXh0Lmxlbmd0aCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVMZWZ0KGxp
bmUpIDogbGluZVJpZ2h0KGxpbmUpOwotICAgIHJldHVybiBQb3MobGluZU4gPT0gbnVsbCA/IGxp
bmVObyhsaW5lKSA6IGxpbmVOLCBjaCk7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wYXJlQmlkaUxl
dmVsKG9yZGVyLCBhLCBiKSB7Ci0gICAgdmFyIGxpbmVkaXIgPSBvcmRlclswXS5sZXZlbDsKLSAg
ICBpZiAoYSA9PSBsaW5lZGlyKSByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYiA9PSBsaW5lZGlyKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEgPCBiOwotICB9Ci0gIHZhciBiaWRpT3RoZXI7Ci0g
IGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcykgewotICAgIGJpZGlPdGhlciA9IG51
bGw7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGZvdW5kOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHsK
LSAgICAgIHZhciBjdXIgPSBvcmRlcltpXTsKLSAgICAgIGlmIChjdXIuZnJvbSA8IHBvcyAmJiBj
dXIudG8gPiBwb3MpIHJldHVybiBpOwotICAgICAgaWYgKChjdXIuZnJvbSA9PSBwb3MgfHwgY3Vy
LnRvID09IHBvcykpIHsKLSAgICAgICAgaWYgKGZvdW5kID09IG51bGwpIHsKLSAgICAgICAgICBm
b3VuZCA9IGk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUJpZGlMZXZlbChvcmRlciwgY3Vy
LmxldmVsLCBvcmRlcltmb3VuZF0ubGV2ZWwpKSB7Ci0gICAgICAgICAgaWYgKGN1ci5mcm9tICE9
IGN1ci50bykgYmlkaU90aGVyID0gZm91bmQ7Ci0gICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50bykgYmlkaU90aGVyID0g
aTsKLSAgICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGZvdW5kOwotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUluTGluZShsaW5lLCBwb3Ms
IGRpciwgYnlVbml0KSB7Ci0gICAgaWYgKCFieVVuaXQpIHJldHVybiBwb3MgKyBkaXI7Ci0gICAg
ZG8gcG9zICs9IGRpcjsKLSAgICB3aGlsZSAocG9zID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIobGlu
ZS50ZXh0LmNoYXJBdChwb3MpKSk7Ci0gICAgcmV0dXJuIHBvczsKLSAgfQotCi0gIC8vIFRoaXMg
aXMgbmVlZGVkIGluIG9yZGVyIHRvIG1vdmUgJ3Zpc3VhbGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlv
bmFsCi0gIC8vIHRleHQgLS0gaS5lLiwgcHJlc3NpbmcgbGVmdCBzaG91bGQgbWFrZSB0aGUgY3Vy
c29yIGdvIGxlZnQsIGV2ZW4KLSAgLy8gd2hlbiBpbiBSVEwgdGV4dC4gVGhlIHRyaWNreSBwYXJ0
IGlzIHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kCi0gIC8vIExUUiB0ZXh0IHRvdWNoIGVhY2gg
b3RoZXIuIFRoaXMgb2Z0ZW4gcmVxdWlyZXMgdGhlIGN1cnNvciBvZmZzZXQKLSAgLy8gdG8gbW92
ZSBtb3JlIHRoYW4gb25lIHVuaXQsIGluIG9yZGVyIHRvIHZpc3VhbGx5IG1vdmUgb25lIHVuaXQu
Ci0gIGZ1bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKLSAg
ICB2YXIgYmlkaSA9IGdldE9yZGVyKGxpbmUpOwotICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVM
b2dpY2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKLSAgICB2YXIgcG9zID0gZ2V0Qmlk
aVBhcnRBdChiaWRpLCBzdGFydCksIHBhcnQgPSBiaWRpW3Bvc107Ci0gICAgdmFyIHRhcmdldCA9
IG1vdmVJbkxpbmUobGluZSwgc3RhcnQsIHBhcnQubGV2ZWwgJSAyID8gLWRpciA6IGRpciwgYnlV
bml0KTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgIGlmICh0YXJnZXQgPiBwYXJ0LmZyb20gJiYg
dGFyZ2V0IDwgcGFydC50bykgcmV0dXJuIHRhcmdldDsKLSAgICAgIGlmICh0YXJnZXQgPT0gcGFy
dC5mcm9tIHx8IHRhcmdldCA9PSBwYXJ0LnRvKSB7Ci0gICAgICAgIGlmIChnZXRCaWRpUGFydEF0
KGJpZGksIHRhcmdldCkgPT0gcG9zKSByZXR1cm4gdGFyZ2V0OwotICAgICAgICBwYXJ0ID0gYmlk
aVtwb3MgKz0gZGlyXTsKLSAgICAgICAgcmV0dXJuIChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUg
MiA/IHBhcnQudG8gOiBwYXJ0LmZyb207Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwYXJ0ID0g
YmlkaVtwb3MgKz0gZGlyXTsKLSAgICAgICAgaWYgKCFwYXJ0KSByZXR1cm4gbnVsbDsKLSAgICAg
ICAgaWYgKChkaXIgPiAwKSA9PSBwYXJ0LmxldmVsICUgMikKLSAgICAgICAgICB0YXJnZXQgPSBt
b3ZlSW5MaW5lKGxpbmUsIHBhcnQudG8sIC0xLCBieVVuaXQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgdGFyZ2V0ID0gbW92ZUluTGluZShsaW5lLCBwYXJ0LmZyb20sIDEsIGJ5VW5pdCk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFy
dCwgZGlyLCBieVVuaXQpIHsKLSAgICB2YXIgdGFyZ2V0ID0gc3RhcnQgKyBkaXI7Ci0gICAgaWYg
KGJ5VW5pdCkgd2hpbGUgKHRhcmdldCA+IDAgJiYgaXNFeHRlbmRpbmdDaGFyKGxpbmUudGV4dC5j
aGFyQXQodGFyZ2V0KSkpIHRhcmdldCArPSBkaXI7Ci0gICAgcmV0dXJuIHRhcmdldCA8IDAgfHwg
dGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7Ci0gIH0KLQotICAvLyBC
aWRpcmVjdGlvbmFsIG9yZGVyaW5nIGFsZ29yaXRobQotICAvLyBTZWUgaHR0cDovL3VuaWNvZGUu
b3JnL3JlcG9ydHMvdHI5L3RyOS0xMy5odG1sIGZvciB0aGUgYWxnb3JpdGhtCi0gIC8vIHRoYXQg
dGhpcyAocGFydGlhbGx5KSBpbXBsZW1lbnRzLgotCi0gIC8vIE9uZS1jaGFyIGNvZGVzIHVzZWQg
Zm9yIGNoYXJhY3RlciB0eXBlczoKLSAgLy8gTCAoTCk6ICAgTGVmdC10by1SaWdodAotICAvLyBS
IChSKTogICBSaWdodC10by1MZWZ0Ci0gIC8vIHIgKEFMKTogIFJpZ2h0LXRvLUxlZnQgQXJhYmlj
Ci0gIC8vIDEgKEVOKTogIEV1cm9wZWFuIE51bWJlcgotICAvLyArIChFUyk6ICBFdXJvcGVhbiBO
dW1iZXIgU2VwYXJhdG9yCi0gIC8vICUgKEVUKTogIEV1cm9wZWFuIE51bWJlciBUZXJtaW5hdG9y
Ci0gIC8vIG4gKEFOKTogIEFyYWJpYyBOdW1iZXIKLSAgLy8gLCAoQ1MpOiAgQ29tbW9uIE51bWJl
ciBTZXBhcmF0b3IKLSAgLy8gbSAoTlNNKTogTm9uLVNwYWNpbmcgTWFyawotICAvLyBiIChCTik6
ICBCb3VuZGFyeSBOZXV0cmFsCi0gIC8vIHMgKEIpOiAgIFBhcmFncmFwaCBTZXBhcmF0b3IKLSAg
Ly8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0b3IKLSAgLy8gdyAoV1MpOiAgV2hpdGVzcGFjZQot
ICAvLyBOIChPTik6ICBPdGhlciBOZXV0cmFscwotCi0gIC8vIFJldHVybnMgbnVsbCBpZiBjaGFy
YWN0ZXJzIGFyZSBvcmRlcmVkIGFzIHRoZXkgYXBwZWFyCi0gIC8vIChsZWZ0LXRvLXJpZ2h0KSwg
b3IgYW4gYXJyYXkgb2Ygc2VjdGlvbnMgKHtmcm9tLCB0bywgbGV2ZWx9Ci0gIC8vIG9iamVjdHMp
IGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VyIHZpc3VhbGx5LgotICB2YXIgYmlkaU9y
ZGVyaW5nID0gKGZ1bmN0aW9uKCkgewotICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBv
aW50cyAwIHRvIDB4ZmYKLSAgICB2YXIgbG93VHlwZXMgPSAiYmJiYmJiYmJidHN0d3NiYmJiYmJi
YmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExM
TExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNi
YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5O
TExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE4i
OwotICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmZgot
ICAgIHZhciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJy
cnJycnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tIjsKLSAgICBmdW5jdGlvbiBjaGFyVHlw
ZShjb2RlKSB7Ci0gICAgICBpZiAoY29kZSA8PSAweGY3KSByZXR1cm4gbG93VHlwZXMuY2hhckF0
KGNvZGUpOwotICAgICAgZWxzZSBpZiAoMHg1OTAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NWY0KSBy
ZXR1cm4gIlIiOwotICAgICAgZWxzZSBpZiAoMHg2MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NmVk
KSByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCk7Ci0gICAgICBlbHNlIGlm
ICgweDZlZSA8PSBjb2RlICYmIGNvZGUgPD0gMHg4YWMpIHJldHVybiAiciI7Ci0gICAgICBlbHNl
IGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgcmV0dXJuICJ3IjsKLSAgICAg
IGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSByZXR1cm4gImIiOwotICAgICAgZWxzZSByZXR1cm4g
IkwiOwotICAgIH0KLQotICAgIHZhciBiaWRpUkUgPSAvW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUw
NmZmXHUwNzAwLVx1MDhhY10vOwotICAgIHZhciBpc05ldXRyYWwgPSAvW3N0d05dLywgaXNTdHJv
bmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywgY291bnRzQXNOdW0gPSAvWzFu
XS87Ci0gICAgLy8gQnJvd3NlcnMgc2VlbSB0byBhbHdheXMgdHJlYXQgdGhlIGJvdW5kYXJpZXMg
b2YgYmxvY2sgZWxlbWVudHMgYXMgYmVpbmcgTC4KLSAgICB2YXIgb3V0ZXJUeXBlID0gIkwiOwot
Ci0gICAgZnVuY3Rpb24gQmlkaVNwYW4obGV2ZWwsIGZyb20sIHRvKSB7Ci0gICAgICB0aGlzLmxl
dmVsID0gbGV2ZWw7Ci0gICAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cikgewotICAgICAgaWYgKCFiaWRpUkUudGVzdChz
dHIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB2YXIgbGVuID0gc3RyLmxlbmd0aCwgdHlwZXMgPSBb
XTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCB0eXBlOyBpIDwgbGVuOyArK2kpCi0gICAgICAgIHR5
cGVzLnB1c2godHlwZSA9IGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7Ci0KLSAgICAgIC8v
IFcxLiBFeGFtaW5lIGVhY2ggbm9uLXNwYWNpbmcgbWFyayAoTlNNKSBpbiB0aGUgbGV2ZWwgcnVu
LCBhbmQKLSAgICAgIC8vIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgTlNNIHRvIHRoZSB0eXBlIG9m
IHRoZSBwcmV2aW91cwotICAgICAgLy8gY2hhcmFjdGVyLiBJZiB0aGUgTlNNIGlzIGF0IHRoZSBz
dGFydCBvZiB0aGUgbGV2ZWwgcnVuLCBpdCB3aWxsCi0gICAgICAvLyBnZXQgdGhlIHR5cGUgb2Yg
c29yLgotICAgICAgZm9yICh2YXIgaSA9IDAsIHByZXYgPSBvdXRlclR5cGU7IGkgPCBsZW47ICsr
aSkgewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBpZiAodHlwZSA9PSAi
bSIpIHR5cGVzW2ldID0gcHJldjsKLSAgICAgICAgZWxzZSBwcmV2ID0gdHlwZTsKLSAgICAgIH0K
LQotICAgICAgLy8gVzIuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEg
RXVyb3BlYW4gbnVtYmVyCi0gICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIs
IEwsIEFMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbgotICAgICAgLy8gQUwgaXMgZm91bmQsIGNo
YW5nZSB0aGUgdHlwZSBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyIHRvIEFyYWJpYwotICAgICAgLy8g
bnVtYmVyLgotICAgICAgLy8gVzMuIENoYW5nZSBhbGwgQUxzIHRvIFIuCi0gICAgICBmb3IgKHZh
ciBpID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIHR5
cGUgPSB0eXBlc1tpXTsKLSAgICAgICAgaWYgKHR5cGUgPT0gIjEiICYmIGN1ciA9PSAiciIpIHR5
cGVzW2ldID0gIm4iOwotICAgICAgICBlbHNlIGlmIChpc1N0cm9uZy50ZXN0KHR5cGUpKSB7IGN1
ciA9IHR5cGU7IGlmICh0eXBlID09ICJyIikgdHlwZXNbaV0gPSAiUiI7IH0KLSAgICAgIH0KLQot
ICAgICAgLy8gVzQuIEEgc2luZ2xlIEV1cm9wZWFuIHNlcGFyYXRvciBiZXR3ZWVuIHR3byBFdXJv
cGVhbiBudW1iZXJzCi0gICAgICAvLyBjaGFuZ2VzIHRvIGEgRXVyb3BlYW4gbnVtYmVyLiBBIHNp
bmdsZSBjb21tb24gc2VwYXJhdG9yIGJldHdlZW4KLSAgICAgIC8vIHR3byBudW1iZXJzIG9mIHRo
ZSBzYW1lIHR5cGUgY2hhbmdlcyB0byB0aGF0IHR5cGUuCi0gICAgICBmb3IgKHZhciBpID0gMSwg
cHJldiA9IHR5cGVzWzBdOyBpIDwgbGVuIC0gMTsgKytpKSB7Ci0gICAgICAgIHZhciB0eXBlID0g
dHlwZXNbaV07Ci0gICAgICAgIGlmICh0eXBlID09ICIrIiAmJiBwcmV2ID09ICIxIiAmJiB0eXBl
c1tpKzFdID09ICIxIikgdHlwZXNbaV0gPSAiMSI7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
IiwiICYmIHByZXYgPT0gdHlwZXNbaSsxXSAmJgotICAgICAgICAgICAgICAgICAocHJldiA9PSAi
MSIgfHwgcHJldiA9PSAibiIpKSB0eXBlc1tpXSA9IHByZXY7Ci0gICAgICAgIHByZXYgPSB0eXBl
OwotICAgICAgfQotCi0gICAgICAvLyBXNS4gQSBzZXF1ZW5jZSBvZiBFdXJvcGVhbiB0ZXJtaW5h
dG9ycyBhZGphY2VudCB0byBFdXJvcGVhbgotICAgICAgLy8gbnVtYmVycyBjaGFuZ2VzIHRvIGFs
bCBFdXJvcGVhbiBudW1iZXJzLgotICAgICAgLy8gVzYuIE90aGVyd2lzZSwgc2VwYXJhdG9ycyBh
bmQgdGVybWluYXRvcnMgY2hhbmdlIHRvIE90aGVyCi0gICAgICAvLyBOZXV0cmFsLgotICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVz
W2ldOwotICAgICAgICBpZiAodHlwZSA9PSAiLCIpIHR5cGVzW2ldID0gIk4iOwotICAgICAgICBl
bHNlIGlmICh0eXBlID09ICIlIikgewotICAgICAgICAgIGZvciAodmFyIGVuZCA9IGkgKyAxOyBl
bmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSAiJSI7ICsrZW5kKSB7fQotICAgICAgICAgIHZhciBy
ZXBsYWNlID0gKGkgJiYgdHlwZXNbaS0xXSA9PSAiISIpIHx8IChlbmQgPCBsZW4gJiYgdHlwZXNb
ZW5kXSA9PSAiMSIpID8gIjEiIDogIk4iOwotICAgICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwg
ZW5kOyArK2opIHR5cGVzW2pdID0gcmVwbGFjZTsKLSAgICAgICAgICBpID0gZW5kIC0gMTsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBXNy4gU2VhcmNoIGJhY2t3YXJkcyBmcm9tIGVh
Y2ggaW5zdGFuY2Ugb2YgYSBFdXJvcGVhbiBudW1iZXIKLSAgICAgIC8vIHVudGlsIHRoZSBmaXJz
dCBzdHJvbmcgdHlwZSAoUiwgTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW4gTCBpcwotICAgICAg
Ly8gZm91bmQsIHRoZW4gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIgdG8g
TC4KLSAgICAgIGZvciAodmFyIGkgPSAwLCBjdXIgPSBvdXRlclR5cGU7IGkgPCBsZW47ICsraSkg
ewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2ldOwotICAgICAgICBpZiAoY3VyID09ICJMIiAm
JiB0eXBlID09ICIxIikgdHlwZXNbaV0gPSAiTCI7Ci0gICAgICAgIGVsc2UgaWYgKGlzU3Ryb25n
LnRlc3QodHlwZSkpIGN1ciA9IHR5cGU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIE4xLiBBIHNlcXVl
bmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlCi0gICAgICAvLyBzdXJy
b3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVzIGhhcyB0aGUgc2Ft
ZQotICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFz
IGlmIHRoZXkgd2VyZSBSIGluCi0gICAgICAvLyB0ZXJtcyBvZiB0aGVpciBpbmZsdWVuY2Ugb24g
bmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKQotICAgICAgLy8gYW5kIGVuZC1vZi1s
ZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMuCi0gICAgICAv
LyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9u
LgotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBpZiAoaXNO
ZXV0cmFsLnRlc3QodHlwZXNbaV0pKSB7Ci0gICAgICAgICAgZm9yICh2YXIgZW5kID0gaSArIDE7
IGVuZCA8IGxlbiAmJiBpc05ldXRyYWwudGVzdCh0eXBlc1tlbmRdKTsgKytlbmQpIHt9Ci0gICAg
ICAgICAgdmFyIGJlZm9yZSA9IChpID8gdHlwZXNbaS0xXSA6IG91dGVyVHlwZSkgPT0gIkwiOwot
ICAgICAgICAgIHZhciBhZnRlciA9IChlbmQgPCBsZW4gPyB0eXBlc1tlbmRdIDogb3V0ZXJUeXBl
KSA9PSAiTCI7Ci0gICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwgYWZ0ZXIgPyAiTCIg
OiAiUiI7Ci0gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsraikgdHlwZXNbal0g
PSByZXBsYWNlOwotICAgICAgICAgIGkgPSBlbmQgLSAxOwotICAgICAgICB9Ci0gICAgICB9Ci0K
LSAgICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQgYWxnb3JpdGhtLCBp
biBvcmRlciB0byBhdm9pZAotICAgICAgLy8gYnVpbGRpbmcgdXAgYW4gYWN0dWFsIGxldmVscyBh
cnJheS4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUKLSAgICAgIC8vIGxldmVscyAoMCwgMSwg
MikgaW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHRha2UKLSAgICAgIC8vIGV4cGxp
Y2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0aGUgb3JkZXIgb24K
LSAgICAgIC8vIHRoZSBmbHksIHdpdGhvdXQgZm9sbG93aW5nIHRoZSBsZXZlbC1iYXNlZCBhbGdv
cml0aG0uCi0gICAgICB2YXIgb3JkZXIgPSBbXSwgbTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuOykgewotICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaV0pKSB7Ci0g
ICAgICAgICAgdmFyIHN0YXJ0ID0gaTsKLSAgICAgICAgICBmb3IgKCsraTsgaSA8IGxlbiAmJiBj
b3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KLSAgICAgICAgICBvcmRlci5wdXNo
KG5ldyBCaWRpU3BhbigwLCBzdGFydCwgaSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IHZhciBwb3MgPSBpLCBhdCA9IG9yZGVyLmxlbmd0aDsKLSAgICAgICAgICBmb3IgKCsraTsgaSA8
IGxlbiAmJiB0eXBlc1tpXSAhPSAiTCI7ICsraSkge30KLSAgICAgICAgICBmb3IgKHZhciBqID0g
cG9zOyBqIDwgaTspIHsKLSAgICAgICAgICAgIGlmIChjb3VudHNBc051bS50ZXN0KHR5cGVzW2pd
KSkgewotICAgICAgICAgICAgICBpZiAocG9zIDwgaikgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcg
QmlkaVNwYW4oMSwgcG9zLCBqKSk7Ci0gICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqOwotICAg
ICAgICAgICAgICBmb3IgKCsrajsgaiA8IGkgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqXSk7
ICsraikge30KLSAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4o
MiwgbnN0YXJ0LCBqKSk7Ci0gICAgICAgICAgICAgIHBvcyA9IGo7Ci0gICAgICAgICAgICB9IGVs
c2UgKytqOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9zIDwgaSkgb3JkZXIuc3BsaWNl
KGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIGlmIChvcmRlclswXS5sZXZlbCA9PSAxICYmIChtID0gc3RyLm1hdGNoKC9eXHMrLykpKSB7
Ci0gICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDsKLSAgICAgICAgb3JkZXIudW5z
aGlmdChuZXcgQmlkaVNwYW4oMCwgMCwgbVswXS5sZW5ndGgpKTsKLSAgICAgIH0KLSAgICAgIGlm
IChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xzKyQvKSkpIHsKLSAg
ICAgICAgbHN0KG9yZGVyKS50byAtPSBtWzBdLmxlbmd0aDsKLSAgICAgICAgb3JkZXIucHVzaChu
ZXcgQmlkaVNwYW4oMCwgbGVuIC0gbVswXS5sZW5ndGgsIGxlbikpOwotICAgICAgfQotICAgICAg
aWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRlcikubGV2ZWwpCi0gICAgICAgIG9yZGVyLnB1
c2gobmV3IEJpZGlTcGFuKG9yZGVyWzBdLmxldmVsLCBsZW4sIGxlbikpOwotCi0gICAgICByZXR1
cm4gb3JkZXI7Ci0gICAgfTsKLSAgfSkoKTsKLQotICAvLyBUSEUgRU5ECi0KLSAgQ29kZU1pcnJv
ci52ZXJzaW9uID0gIjQuMi4wIjsKLQotICByZXR1cm4gQ29kZU1pcnJvcjsKLX0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9jc3MuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZDQ2ZGYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2Nzcy5qcworKysgL2Rldi9udWxsCkBA
IC0xLDcxNyArMCwwIEBACi0vLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBI
YXZlcmJla2UgYW5kIG90aGVycwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6
IGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFCi0KLShmdW5jdGlvbihtb2QpIHsKLSAgaWYg
KHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIp
IC8vIENvbW1vbkpTCi0gICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOwot
ICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8g
QU1ECi0gICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKLSAgZWxzZSAv
LyBQbGFpbiBicm93c2VyIGVudgotICAgIG1vZChDb2RlTWlycm9yKTsKLX0pKGZ1bmN0aW9uKENv
ZGVNaXJyb3IpIHsKLSJ1c2Ugc3RyaWN0IjsKLQotQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewotICBpZiAoIXBhcnNlckNvbmZpZy5w
cm9wZXJ0eUtleXdvcmRzKSBwYXJzZXJDb25maWcgPSBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJ0
ZXh0L2NzcyIpOwotCi0gIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQsCi0gICAg
ICB0b2tlbkhvb2tzID0gcGFyc2VyQ29uZmlnLnRva2VuSG9va3MsCi0gICAgICBtZWRpYVR5cGVz
ID0gcGFyc2VyQ29uZmlnLm1lZGlhVHlwZXMgfHwge30sCi0gICAgICBtZWRpYUZlYXR1cmVzID0g
cGFyc2VyQ29uZmlnLm1lZGlhRmVhdHVyZXMgfHwge30sCi0gICAgICBwcm9wZXJ0eUtleXdvcmRz
ID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMgfHwge30sCi0gICAgICBub25TdGFuZGFy
ZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcubm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdv
cmRzIHx8IHt9LAotICAgICAgY29sb3JLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5jb2xvcktleXdv
cmRzIHx8IHt9LAotICAgICAgdmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy52YWx1ZUtleXdv
cmRzIHx8IHt9LAotICAgICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3Bl
cnRpZXMgfHwge30sCi0gICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3Rl
ZDsKLQotICB2YXIgdHlwZSwgb3ZlcnJpZGU7Ci0gIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHsg
dHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7IH0KLQotICAvLyBUb2tlbml6ZXJzCi0KLSAgZnVuY3Rp
b24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKLSAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgp
OwotICAgIGlmICh0b2tlbkhvb2tzW2NoXSkgewotICAgICAgdmFyIHJlc3VsdCA9IHRva2VuSG9v
a3NbY2hdKHN0cmVhbSwgc3RhdGUpOwotICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIGlmIChjaCA9PSAiQCIpIHsKLSAgICAgIHN0cmVhbS5lYXRX
aGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgIHJldHVybiByZXQoImRlZiIsIHN0cmVhbS5jdXJyZW50
KCkpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0gIj0iIHx8IChjaCA9PSAifiIgfHwgY2ggPT0gInwi
KSAmJiBzdHJlYW0uZWF0KCI9IikpIHsKLSAgICAgIHJldHVybiByZXQobnVsbCwgImNvbXBhcmUi
KTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7Ci0gICAgICBzdGF0
ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKLSAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6
ZShzdHJlYW0sIHN0YXRlKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewotICAgICAgc3Ry
ZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwotICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNo
Iik7Ci0gICAgfSBlbHNlIGlmIChjaCA9PSAiISIpIHsKLSAgICAgIHN0cmVhbS5tYXRjaCgvXlxz
Klx3Ki8pOwotICAgICAgcmV0dXJuIHJldCgia2V5d29yZCIsICJpbXBvcnRhbnQiKTsKLSAgICB9
IGVsc2UgaWYgKC9cZC8udGVzdChjaCkgfHwgY2ggPT0gIi4iICYmIHN0cmVhbS5lYXQoL1xkLykp
IHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7Ci0gICAgICByZXR1cm4gcmV0KCJu
dW1iZXIiLCAidW5pdCIpOwotICAgIH0gZWxzZSBpZiAoY2ggPT09ICItIikgewotICAgICAgaWYg
KC9bXGQuXS8udGVzdChzdHJlYW0ucGVlaygpKSkgewotICAgICAgICBzdHJlYW0uZWF0V2hpbGUo
L1tcdy4lXS8pOwotICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwotICAgICAg
fSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cdystLykpIHsKLSAgICAgICAgcmV0dXJuIHJldCgi
bWV0YSIsICJtZXRhIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICgvWywrPipcL10vLnRlc3Qo
Y2gpKSB7Ci0gICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKLSAgICB9IGVsc2Ug
aWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goL14tP1tfYS16XVtfYS16MC05LV0qL2kpKSB7
Ci0gICAgICByZXR1cm4gcmV0KCJxdWFsaWZpZXIiLCAicXVhbGlmaWVyIik7Ci0gICAgfSBlbHNl
IGlmICgvWzo7e31cW1xdXChcKV0vLnRlc3QoY2gpKSB7Ci0gICAgICByZXR1cm4gcmV0KG51bGws
IGNoKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICJ1IiAmJiBzdHJlYW0ubWF0Y2goInJsKCIpKSB7
Ci0gICAgICBzdHJlYW0uYmFja1VwKDEpOwotICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblBh
cmVudGhlc2l6ZWQ7Ci0gICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3b3JkIik7Ci0gICAg
fSBlbHNlIGlmICgvW1x3XFxcLV0vLnRlc3QoY2gpKSB7Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUo
L1tcd1xcXC1dLyk7Ci0gICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3b3JkIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiByZXQobnVsbCwgbnVsbCk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFt
LCBzdGF0ZSkgewotICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7Ci0gICAgICB3aGlsZSAo
KGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgICBpZiAoY2ggPT0gcXVvdGUg
JiYgIWVzY2FwZWQpIHsKLSAgICAgICAgICBpZiAocXVvdGUgPT0gIikiKSBzdHJlYW0uYmFja1Vw
KDEpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGVzY2FwZWQgPSAhZXNj
YXBlZCAmJiBjaCA9PSAiXFwiOwotICAgICAgfQotICAgICAgaWYgKGNoID09IHF1b3RlIHx8ICFl
c2NhcGVkICYmIHF1b3RlICE9ICIpIikgc3RhdGUudG9rZW5pemUgPSBudWxsOwotICAgICAgcmV0
dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiB0
b2tlblBhcmVudGhlc2l6ZWQoc3RyZWFtLCBzdGF0ZSkgewotICAgIHN0cmVhbS5uZXh0KCk7IC8v
IE11c3QgYmUgJygnCi0gICAgaWYgKCFzdHJlYW0ubWF0Y2goL1xzKltcIlwnKV0vLCBmYWxzZSkp
Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKCIpIik7Ci0gICAgZWxzZQotICAg
ICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwotICAgIHJldHVybiByZXQobnVsbCwgIigiKTsKLSAg
fQotCi0gIC8vIENvbnRleHQgbWFuYWdlbWVudAotCi0gIGZ1bmN0aW9uIENvbnRleHQodHlwZSwg
aW5kZW50LCBwcmV2KSB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLmluZGVudCA9
IGluZGVudDsKLSAgICB0aGlzLnByZXYgPSBwcmV2OwotICB9Ci0KLSAgZnVuY3Rpb24gcHVzaENv
bnRleHQoc3RhdGUsIHN0cmVhbSwgdHlwZSkgewotICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29u
dGV4dCh0eXBlLCBzdHJlYW0uaW5kZW50YXRpb24oKSArIGluZGVudFVuaXQsIHN0YXRlLmNvbnRl
eHQpOwotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLSAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0
ZSkgewotICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7Ci0gICAgcmV0dXJu
IHN0YXRlLmNvbnRleHQudHlwZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHBhc3ModHlwZSwgc3RyZWFt
LCBzdGF0ZSkgewotICAgIHJldHVybiBzdGF0ZXNbc3RhdGUuY29udGV4dC50eXBlXSh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKLSAgfQotICBmdW5jdGlvbiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwg
c3RhdGUsIG4pIHsKLSAgICBmb3IgKHZhciBpID0gbiB8fCAxOyBpID4gMDsgaS0tKQotICAgICAg
c3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKLSAgICByZXR1cm4gcGFzcyh0eXBl
LCBzdHJlYW0sIHN0YXRlKTsKLSAgfQotCi0gIC8vIFBhcnNlcgotCi0gIGZ1bmN0aW9uIHdvcmRB
c1ZhbHVlKHN0cmVhbSkgewotICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2Vy
Q2FzZSgpOwotICAgIGlmICh2YWx1ZUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKQotICAg
ICAgb3ZlcnJpZGUgPSAiYXRvbSI7Ci0gICAgZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5oYXNPd25Q
cm9wZXJ0eSh3b3JkKSkKLSAgICAgIG92ZXJyaWRlID0gImtleXdvcmQiOwotICAgIGVsc2UKLSAg
ICAgIG92ZXJyaWRlID0gInZhcmlhYmxlIjsKLSAgfQotCi0gIHZhciBzdGF0ZXMgPSB7fTsKLQot
ICBzdGF0ZXMudG9wID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmICh0
eXBlID09ICJ7IikgewotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJi
bG9jayIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAifSIgJiYgc3RhdGUuY29udGV4dC5wcmV2
KSB7Ci0gICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBl
ID09ICJAbWVkaWEiKSB7Ci0gICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwg
Im1lZGlhIik7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJAZm9udC1mYWNlIikgewotICAgICAg
cmV0dXJuICJmb250X2ZhY2VfYmVmb3JlIjsKLSAgICB9IGVsc2UgaWYgKC9eQCgtKG1venxtc3xv
fHdlYmtpdCktKT9rZXlmcmFtZXMkLy50ZXN0KHR5cGUpKSB7Ci0gICAgICByZXR1cm4gImtleWZy
YW1lcyI7Ci0gICAgfSBlbHNlIGlmICh0eXBlICYmIHR5cGUuY2hhckF0KDApID09ICJAIikgewot
ICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJhdCIpOwotICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSAiaGFzaCIpIHsKLSAgICAgIG92ZXJyaWRlID0gImJ1aWx0aW4iOwotICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAid29yZCIpIHsKLSAgICAgIG92ZXJyaWRlID0gInRhZyI7Ci0g
ICAgfSBlbHNlIGlmICh0eXBlID09ICJ2YXJpYWJsZS1kZWZpbml0aW9uIikgewotICAgICAgcmV0
dXJuICJtYXliZXByb3AiOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIp
IHsKLSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiaW50ZXJwb2xhdGlv
biIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiOiIpIHsKLSAgICAgIHJldHVybiAicHNldWRv
IjsKLSAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkICYmIHR5cGUgPT0gIigiKSB7Ci0gICAgICBy
ZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOwotICAgIH0KLSAgICBy
ZXR1cm4gc3RhdGUuY29udGV4dC50eXBlOwotICB9OwotCi0gIHN0YXRlcy5ibG9jayA9IGZ1bmN0
aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAid29yZCIpIHsKLSAg
ICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwotICAgICAgaWYg
KHByb3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpIHsKLSAgICAgICAgb3ZlcnJp
ZGUgPSAicHJvcGVydHkiOwotICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7Ci0gICAgICB9IGVs
c2UgaWYgKG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkg
ewotICAgICAgICBvdmVycmlkZSA9ICJzdHJpbmctMiI7Ci0gICAgICAgIHJldHVybiAibWF5YmVw
cm9wIjsKLSAgICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQpIHsKLSAgICAgICAgb3ZlcnJpZGUg
PSBzdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpID8gInByb3BlcnR5IiA6ICJ0YWciOwotICAg
ICAgICByZXR1cm4gImJsb2NrIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG92ZXJyaWRlICs9
ICIgZXJyb3IiOwotICAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09ICJtZXRhIikgewotICAgICAgcmV0dXJuICJibG9jayI7Ci0gICAgfSBl
bHNlIGlmICghYWxsb3dOZXN0ZWQgJiYgKHR5cGUgPT0gImhhc2giIHx8IHR5cGUgPT0gInF1YWxp
ZmllciIpKSB7Ci0gICAgICBvdmVycmlkZSA9ICJlcnJvciI7Ci0gICAgICByZXR1cm4gImJsb2Nr
IjsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0YXRlcy50b3AodHlwZSwgc3RyZWFtLCBz
dGF0ZSk7Ci0gICAgfQotICB9OwotCi0gIHN0YXRlcy5tYXliZXByb3AgPSBmdW5jdGlvbih0eXBl
LCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gcHVzaENvbnRl
eHQoc3RhdGUsIHN0cmVhbSwgInByb3AiKTsKLSAgICByZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0s
IHN0YXRlKTsKLSAgfTsKLQotICBzdGF0ZXMucHJvcCA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwg
c3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsK
LSAgICBpZiAodHlwZSA9PSAieyIgJiYgYWxsb3dOZXN0ZWQpIHJldHVybiBwdXNoQ29udGV4dChz
dGF0ZSwgc3RyZWFtLCAicHJvcEJsb2NrIik7Ci0gICAgaWYgKHR5cGUgPT0gIn0iIHx8IHR5cGUg
PT0gInsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgICBpZiAo
dHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicGFyZW5zIik7
Ci0KLSAgICBpZiAodHlwZSA9PSAiaGFzaCIgJiYgIS9eIyhbMC05YS1mQS1mXXszfXxbMC05YS1m
QS1mXXs2fSkkLy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpKSB7Ci0gICAgICBvdmVycmlkZSArPSAi
IGVycm9yIjsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIndvcmQiKSB7Ci0gICAgICB3b3JkQXNW
YWx1ZShzdHJlYW0pOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIpIHsK
LSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiaW50ZXJwb2xhdGlvbiIp
OwotICAgIH0KLSAgICByZXR1cm4gInByb3AiOwotICB9OwotCi0gIHN0YXRlcy5wcm9wQmxvY2sg
PSBmdW5jdGlvbih0eXBlLCBfc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmICh0eXBlID09ICJ9Iikg
cmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09ICJ3b3JkIikgeyBvdmVy
cmlkZSA9ICJwcm9wZXJ0eSI7IHJldHVybiAibWF5YmVwcm9wIjsgfQotICAgIHJldHVybiBzdGF0
ZS5jb250ZXh0LnR5cGU7Ci0gIH07Ci0KLSAgc3RhdGVzLnBhcmVucyA9IGZ1bmN0aW9uKHR5cGUs
IHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAifSIpIHJl
dHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICAgIGlmICh0eXBlID09ICIp
IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJu
IHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJwYXJlbnMiKTsKLSAgICBpZiAodHlwZSA9PSAi
d29yZCIpIHdvcmRBc1ZhbHVlKHN0cmVhbSk7Ci0gICAgcmV0dXJuICJwYXJlbnMiOwotICB9Owot
Ci0gIHN0YXRlcy5wc2V1ZG8gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gIndvcmQiKSB7Ci0gICAgICBvdmVycmlkZSA9ICJ2YXJpYWJsZS0zIjsKLSAg
ICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Ci0gICAgfQotICAgIHJldHVybiBwYXNzKHR5
cGUsIHN0cmVhbSwgc3RhdGUpOwotICB9OwotCi0gIHN0YXRlcy5tZWRpYSA9IGZ1bmN0aW9uKHR5
cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29u
dGV4dChzdGF0ZSwgc3RyZWFtLCAibWVkaWFfcGFyZW5zIik7Ci0gICAgaWYgKHR5cGUgPT0gIn0i
KSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgICBpZiAodHlwZSA9
PSAieyIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKSAmJiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCBhbGxvd05lc3RlZCA/ICJibG9jayIgOiAidG9wIik7Ci0KLSAgICBpZiAodHlwZSA9PSAi
d29yZCIpIHsKLSAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgp
OwotICAgICAgaWYgKHdvcmQgPT0gIm9ubHkiIHx8IHdvcmQgPT0gIm5vdCIgfHwgd29yZCA9PSAi
YW5kIikKLSAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7Ci0gICAgICBlbHNlIGlmIChtZWRp
YVR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKQotICAgICAgICBvdmVycmlkZSA9ICJhdHRyaWJ1
dGUiOwotICAgICAgZWxzZSBpZiAobWVkaWFGZWF0dXJlcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkK
LSAgICAgICAgb3ZlcnJpZGUgPSAicHJvcGVydHkiOwotICAgICAgZWxzZQotICAgICAgICBvdmVy
cmlkZSA9ICJlcnJvciI7Ci0gICAgfQotICAgIHJldHVybiBzdGF0ZS5jb250ZXh0LnR5cGU7Ci0g
IH07Ci0KLSAgc3RhdGVzLm1lZGlhX3BhcmVucyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3Rh
dGUpIHsKLSAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKLSAg
ICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUs
IHN0cmVhbSwgc3RhdGUsIDIpOwotICAgIHJldHVybiBzdGF0ZXMubWVkaWEodHlwZSwgc3RyZWFt
LCBzdGF0ZSk7Ci0gIH07Ci0KLSAgc3RhdGVzLmZvbnRfZmFjZV9iZWZvcmUgPSBmdW5jdGlvbih0
eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKQotICAgICAgcmV0dXJu
IHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJmb250X2ZhY2UiKTsKLSAgICByZXR1cm4gcGFz
cyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgfTsKLQotICBzdGF0ZXMuZm9udF9mYWNlID0gZnVu
Y3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJu
IHBvcENvbnRleHQoc3RhdGUpOwotICAgIGlmICh0eXBlID09ICJ3b3JkIikgewotICAgICAgaWYg
KCFmb250UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJD
YXNlKCkpKQotICAgICAgICBvdmVycmlkZSA9ICJlcnJvciI7Ci0gICAgICBlbHNlCi0gICAgICAg
IG92ZXJyaWRlID0gInByb3BlcnR5IjsKLSAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKLSAgICB9
Ci0gICAgcmV0dXJuICJmb250X2ZhY2UiOwotICB9OwotCi0gIHN0YXRlcy5rZXlmcmFtZXMgPSBm
dW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7
IG92ZXJyaWRlID0gInZhcmlhYmxlIjsgcmV0dXJuICJrZXlmcmFtZXMiOyB9Ci0gICAgaWYgKHR5
cGUgPT0gInsiKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInRvcCIpOwotICAg
IHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICB9OwotCi0gIHN0YXRlcy5hdCA9
IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiOyIpIHJl
dHVybiBwb3BDb250ZXh0KHN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIgfHwgdHlwZSA9PSAi
fSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwotICAgIGlmICh0eXBl
ID09ICJ3b3JkIikgb3ZlcnJpZGUgPSAidGFnIjsKLSAgICBlbHNlIGlmICh0eXBlID09ICJoYXNo
Iikgb3ZlcnJpZGUgPSAiYnVpbHRpbiI7Ci0gICAgcmV0dXJuICJhdCI7Ci0gIH07Ci0KLSAgc3Rh
dGVzLmludGVycG9sYXRpb24gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Ci0gICAgaWYgKHR5cGUg
PT0gInsiIHx8IHR5cGUgPT0gIjsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0
YXRlKTsKLSAgICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSBvdmVycmlkZSA9ICJlcnJvciI7Ci0g
ICAgcmV0dXJuICJpbnRlcnBvbGF0aW9uIjsKLSAgfTsKLQotICByZXR1cm4gewotICAgIHN0YXJ0
U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKLSAgICAgIHJldHVybiB7dG9rZW5pemU6IG51bGwsCi0g
ICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKLSAgICAgICAgICAgICAgY29udGV4dDogbmV3IENv
bnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OwotICAgIH0sCi0KLSAgICB0b2tlbjogZnVu
Y3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgaWYgKCFzdGF0ZS50b2tlbml6ZSAmJiBzdHJl
YW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7Ci0gICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9r
ZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKLSAgICAgIGlmIChzdHlsZSAmJiB0
eXBlb2Ygc3R5bGUgPT0gIm9iamVjdCIpIHsKLSAgICAgICAgdHlwZSA9IHN0eWxlWzFdOwotICAg
ICAgICBzdHlsZSA9IHN0eWxlWzBdOwotICAgICAgfQotICAgICAgb3ZlcnJpZGUgPSBzdHlsZTsK
LSAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGVzW3N0YXRlLnN0YXRlXSh0eXBlLCBzdHJlYW0sIHN0
YXRlKTsKLSAgICAgIHJldHVybiBvdmVycmlkZTsKLSAgICB9LAotCi0gICAgaW5kZW50OiBmdW5j
dGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7Ci0gICAgICB2YXIgY3ggPSBzdGF0ZS5jb250ZXh0LCBj
aCA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwotICAgICAgdmFyIGluZGVudCA9
IGN4LmluZGVudDsKLSAgICAgIGlmIChjeC50eXBlID09ICJwcm9wIiAmJiAoY2ggPT0gIn0iIHx8
IGNoID09ICIpIikpIGN4ID0gY3gucHJldjsKLSAgICAgIGlmIChjeC5wcmV2ICYmCi0gICAgICAg
ICAgKGNoID09ICJ9IiAmJiAoY3gudHlwZSA9PSAiYmxvY2siIHx8IGN4LnR5cGUgPT0gInRvcCIg
fHwgY3gudHlwZSA9PSAiaW50ZXJwb2xhdGlvbiIgfHwgY3gudHlwZSA9PSAiZm9udF9mYWNlIikg
fHwKLSAgICAgICAgICAgY2ggPT0gIikiICYmIChjeC50eXBlID09ICJwYXJlbnMiIHx8IGN4LnR5
cGUgPT0gIm1lZGlhX3BhcmVucyIpIHx8Ci0gICAgICAgICAgIGNoID09ICJ7IiAmJiAoY3gudHlw
ZSA9PSAiYXQiIHx8IGN4LnR5cGUgPT0gIm1lZGlhIikpKSB7Ci0gICAgICAgIGluZGVudCA9IGN4
LmluZGVudCAtIGluZGVudFVuaXQ7Ci0gICAgICAgIGN4ID0gY3gucHJldjsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBpbmRlbnQ7Ci0gICAgfSwKLQotICAgIGVsZWN0cmljQ2hhcnM6ICJ9IiwKLSAg
ICBibG9ja0NvbW1lbnRTdGFydDogIi8qIiwKLSAgICBibG9ja0NvbW1lbnRFbmQ6ICIqLyIsCi0g
ICAgZm9sZDogImJyYWNlIgotICB9OwotfSk7Ci0KLSAgZnVuY3Rpb24ga2V5U2V0KGFycmF5KSB7
Ci0gICAgdmFyIGtleXMgPSB7fTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0
aDsgKytpKSB7Ci0gICAgICBrZXlzW2FycmF5W2ldXSA9IHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBrZXlzOwotICB9Ci0KLSAgdmFyIG1lZGlhVHlwZXNfID0gWwotICAgICJhbGwiLCAiYXVyYWwi
LCAiYnJhaWxsZSIsICJoYW5kaGVsZCIsICJwcmludCIsICJwcm9qZWN0aW9uIiwgInNjcmVlbiIs
Ci0gICAgInR0eSIsICJ0diIsICJlbWJvc3NlZCIKLSAgXSwgbWVkaWFUeXBlcyA9IGtleVNldCht
ZWRpYVR5cGVzXyk7Ci0KLSAgdmFyIG1lZGlhRmVhdHVyZXNfID0gWwotICAgICJ3aWR0aCIsICJt
aW4td2lkdGgiLCAibWF4LXdpZHRoIiwgImhlaWdodCIsICJtaW4taGVpZ2h0IiwgIm1heC1oZWln
aHQiLAotICAgICJkZXZpY2Utd2lkdGgiLCAibWluLWRldmljZS13aWR0aCIsICJtYXgtZGV2aWNl
LXdpZHRoIiwgImRldmljZS1oZWlnaHQiLAotICAgICJtaW4tZGV2aWNlLWhlaWdodCIsICJtYXgt
ZGV2aWNlLWhlaWdodCIsICJhc3BlY3QtcmF0aW8iLAotICAgICJtaW4tYXNwZWN0LXJhdGlvIiwg
Im1heC1hc3BlY3QtcmF0aW8iLCAiZGV2aWNlLWFzcGVjdC1yYXRpbyIsCi0gICAgIm1pbi1kZXZp
Y2UtYXNwZWN0LXJhdGlvIiwgIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvIiwgImNvbG9yIiwgIm1p
bi1jb2xvciIsCi0gICAgIm1heC1jb2xvciIsICJjb2xvci1pbmRleCIsICJtaW4tY29sb3ItaW5k
ZXgiLCAibWF4LWNvbG9yLWluZGV4IiwKLSAgICAibW9ub2Nocm9tZSIsICJtaW4tbW9ub2Nocm9t
ZSIsICJtYXgtbW9ub2Nocm9tZSIsICJyZXNvbHV0aW9uIiwKLSAgICAibWluLXJlc29sdXRpb24i
LCAibWF4LXJlc29sdXRpb24iLCAic2NhbiIsICJncmlkIgotICBdLCBtZWRpYUZlYXR1cmVzID0g
a2V5U2V0KG1lZGlhRmVhdHVyZXNfKTsKLQotICB2YXIgcHJvcGVydHlLZXl3b3Jkc18gPSBbCi0g
ICAgImFsaWduLWNvbnRlbnQiLCAiYWxpZ24taXRlbXMiLCAiYWxpZ24tc2VsZiIsICJhbGlnbm1l
bnQtYWRqdXN0IiwKLSAgICAiYWxpZ25tZW50LWJhc2VsaW5lIiwgImFuY2hvci1wb2ludCIsICJh
bmltYXRpb24iLCAiYW5pbWF0aW9uLWRlbGF5IiwKLSAgICAiYW5pbWF0aW9uLWRpcmVjdGlvbiIs
ICJhbmltYXRpb24tZHVyYXRpb24iLCAiYW5pbWF0aW9uLWZpbGwtbW9kZSIsCi0gICAgImFuaW1h
dGlvbi1pdGVyYXRpb24tY291bnQiLCAiYW5pbWF0aW9uLW5hbWUiLCAiYW5pbWF0aW9uLXBsYXkt
c3RhdGUiLAotICAgICJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwgImFwcGVhcmFuY2UiLCAi
YXppbXV0aCIsICJiYWNrZmFjZS12aXNpYmlsaXR5IiwKLSAgICAiYmFja2dyb3VuZCIsICJiYWNr
Z3JvdW5kLWF0dGFjaG1lbnQiLCAiYmFja2dyb3VuZC1jbGlwIiwgImJhY2tncm91bmQtY29sb3Ii
LAotICAgICJiYWNrZ3JvdW5kLWltYWdlIiwgImJhY2tncm91bmQtb3JpZ2luIiwgImJhY2tncm91
bmQtcG9zaXRpb24iLAotICAgICJiYWNrZ3JvdW5kLXJlcGVhdCIsICJiYWNrZ3JvdW5kLXNpemUi
LCAiYmFzZWxpbmUtc2hpZnQiLCAiYmluZGluZyIsCi0gICAgImJsZWVkIiwgImJvb2ttYXJrLWxh
YmVsIiwgImJvb2ttYXJrLWxldmVsIiwgImJvb2ttYXJrLXN0YXRlIiwKLSAgICAiYm9va21hcmst
dGFyZ2V0IiwgImJvcmRlciIsICJib3JkZXItYm90dG9tIiwgImJvcmRlci1ib3R0b20tY29sb3Ii
LAotICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwgImJvcmRlci1ib3R0b20tcmlnaHQt
cmFkaXVzIiwKLSAgICAiYm9yZGVyLWJvdHRvbS1zdHlsZSIsICJib3JkZXItYm90dG9tLXdpZHRo
IiwgImJvcmRlci1jb2xsYXBzZSIsCi0gICAgImJvcmRlci1jb2xvciIsICJib3JkZXItaW1hZ2Ui
LCAiYm9yZGVyLWltYWdlLW91dHNldCIsCi0gICAgImJvcmRlci1pbWFnZS1yZXBlYXQiLCAiYm9y
ZGVyLWltYWdlLXNsaWNlIiwgImJvcmRlci1pbWFnZS1zb3VyY2UiLAotICAgICJib3JkZXItaW1h
Z2Utd2lkdGgiLCAiYm9yZGVyLWxlZnQiLCAiYm9yZGVyLWxlZnQtY29sb3IiLAotICAgICJib3Jk
ZXItbGVmdC1zdHlsZSIsICJib3JkZXItbGVmdC13aWR0aCIsICJib3JkZXItcmFkaXVzIiwgImJv
cmRlci1yaWdodCIsCi0gICAgImJvcmRlci1yaWdodC1jb2xvciIsICJib3JkZXItcmlnaHQtc3R5
bGUiLCAiYm9yZGVyLXJpZ2h0LXdpZHRoIiwKLSAgICAiYm9yZGVyLXNwYWNpbmciLCAiYm9yZGVy
LXN0eWxlIiwgImJvcmRlci10b3AiLCAiYm9yZGVyLXRvcC1jb2xvciIsCi0gICAgImJvcmRlci10
b3AtbGVmdC1yYWRpdXMiLCAiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCAiYm9yZGVyLXRvcC1z
dHlsZSIsCi0gICAgImJvcmRlci10b3Atd2lkdGgiLCAiYm9yZGVyLXdpZHRoIiwgImJvdHRvbSIs
ICJib3gtZGVjb3JhdGlvbi1icmVhayIsCi0gICAgImJveC1zaGFkb3ciLCAiYm94LXNpemluZyIs
ICJicmVhay1hZnRlciIsICJicmVhay1iZWZvcmUiLCAiYnJlYWstaW5zaWRlIiwKLSAgICAiY2Fw
dGlvbi1zaWRlIiwgImNsZWFyIiwgImNsaXAiLCAiY29sb3IiLCAiY29sb3ItcHJvZmlsZSIsICJj
b2x1bW4tY291bnQiLAotICAgICJjb2x1bW4tZmlsbCIsICJjb2x1bW4tZ2FwIiwgImNvbHVtbi1y
dWxlIiwgImNvbHVtbi1ydWxlLWNvbG9yIiwKLSAgICAiY29sdW1uLXJ1bGUtc3R5bGUiLCAiY29s
dW1uLXJ1bGUtd2lkdGgiLCAiY29sdW1uLXNwYW4iLCAiY29sdW1uLXdpZHRoIiwKLSAgICAiY29s
dW1ucyIsICJjb250ZW50IiwgImNvdW50ZXItaW5jcmVtZW50IiwgImNvdW50ZXItcmVzZXQiLCAi
Y3JvcCIsICJjdWUiLAotICAgICJjdWUtYWZ0ZXIiLCAiY3VlLWJlZm9yZSIsICJjdXJzb3IiLCAi
ZGlyZWN0aW9uIiwgImRpc3BsYXkiLAotICAgICJkb21pbmFudC1iYXNlbGluZSIsICJkcm9wLWlu
aXRpYWwtYWZ0ZXItYWRqdXN0IiwKLSAgICAiZHJvcC1pbml0aWFsLWFmdGVyLWFsaWduIiwgImRy
b3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0IiwKLSAgICAiZHJvcC1pbml0aWFsLWJlZm9yZS1hbGln
biIsICJkcm9wLWluaXRpYWwtc2l6ZSIsICJkcm9wLWluaXRpYWwtdmFsdWUiLAotICAgICJlbGV2
YXRpb24iLCAiZW1wdHktY2VsbHMiLCAiZml0IiwgImZpdC1wb3NpdGlvbiIsICJmbGV4IiwgImZs
ZXgtYmFzaXMiLAotICAgICJmbGV4LWRpcmVjdGlvbiIsICJmbGV4LWZsb3ciLCAiZmxleC1ncm93
IiwgImZsZXgtc2hyaW5rIiwgImZsZXgtd3JhcCIsCi0gICAgImZsb2F0IiwgImZsb2F0LW9mZnNl
dCIsICJmbG93LWZyb20iLCAiZmxvdy1pbnRvIiwgImZvbnQiLCAiZm9udC1mZWF0dXJlLXNldHRp
bmdzIiwKLSAgICAiZm9udC1mYW1pbHkiLCAiZm9udC1rZXJuaW5nIiwgImZvbnQtbGFuZ3VhZ2Ut
b3ZlcnJpZGUiLCAiZm9udC1zaXplIiwgImZvbnQtc2l6ZS1hZGp1c3QiLAotICAgICJmb250LXN0
cmV0Y2giLCAiZm9udC1zdHlsZSIsICJmb250LXN5bnRoZXNpcyIsICJmb250LXZhcmlhbnQiLAot
ICAgICJmb250LXZhcmlhbnQtYWx0ZXJuYXRlcyIsICJmb250LXZhcmlhbnQtY2FwcyIsICJmb250
LXZhcmlhbnQtZWFzdC1hc2lhbiIsCi0gICAgImZvbnQtdmFyaWFudC1saWdhdHVyZXMiLCAiZm9u
dC12YXJpYW50LW51bWVyaWMiLCAiZm9udC12YXJpYW50LXBvc2l0aW9uIiwKLSAgICAiZm9udC13
ZWlnaHQiLCAiZ3JpZCIsICJncmlkLWFyZWEiLCAiZ3JpZC1hdXRvLWNvbHVtbnMiLCAiZ3JpZC1h
dXRvLWZsb3ciLAotICAgICJncmlkLWF1dG8tcG9zaXRpb24iLCAiZ3JpZC1hdXRvLXJvd3MiLCAi
Z3JpZC1jb2x1bW4iLCAiZ3JpZC1jb2x1bW4tZW5kIiwKLSAgICAiZ3JpZC1jb2x1bW4tc3RhcnQi
LCAiZ3JpZC1yb3ciLCAiZ3JpZC1yb3ctZW5kIiwgImdyaWQtcm93LXN0YXJ0IiwKLSAgICAiZ3Jp
ZC10ZW1wbGF0ZSIsICJncmlkLXRlbXBsYXRlLWFyZWFzIiwgImdyaWQtdGVtcGxhdGUtY29sdW1u
cyIsCi0gICAgImdyaWQtdGVtcGxhdGUtcm93cyIsICJoYW5naW5nLXB1bmN0dWF0aW9uIiwgImhl
aWdodCIsICJoeXBoZW5zIiwKLSAgICAiaWNvbiIsICJpbWFnZS1vcmllbnRhdGlvbiIsICJpbWFn
ZS1yZW5kZXJpbmciLCAiaW1hZ2UtcmVzb2x1dGlvbiIsCi0gICAgImlubGluZS1ib3gtYWxpZ24i
LCAianVzdGlmeS1jb250ZW50IiwgImxlZnQiLCAibGV0dGVyLXNwYWNpbmciLAotICAgICJsaW5l
LWJyZWFrIiwgImxpbmUtaGVpZ2h0IiwgImxpbmUtc3RhY2tpbmciLCAibGluZS1zdGFja2luZy1y
dWJ5IiwKLSAgICAibGluZS1zdGFja2luZy1zaGlmdCIsICJsaW5lLXN0YWNraW5nLXN0cmF0ZWd5
IiwgImxpc3Qtc3R5bGUiLAotICAgICJsaXN0LXN0eWxlLWltYWdlIiwgImxpc3Qtc3R5bGUtcG9z
aXRpb24iLCAibGlzdC1zdHlsZS10eXBlIiwgIm1hcmdpbiIsCi0gICAgIm1hcmdpbi1ib3R0b20i
LCAibWFyZ2luLWxlZnQiLCAibWFyZ2luLXJpZ2h0IiwgIm1hcmdpbi10b3AiLAotICAgICJtYXJr
ZXItb2Zmc2V0IiwgIm1hcmtzIiwgIm1hcnF1ZWUtZGlyZWN0aW9uIiwgIm1hcnF1ZWUtbG9vcCIs
Ci0gICAgIm1hcnF1ZWUtcGxheS1jb3VudCIsICJtYXJxdWVlLXNwZWVkIiwgIm1hcnF1ZWUtc3R5
bGUiLCAibWF4LWhlaWdodCIsCi0gICAgIm1heC13aWR0aCIsICJtaW4taGVpZ2h0IiwgIm1pbi13
aWR0aCIsICJtb3ZlLXRvIiwgIm5hdi1kb3duIiwgIm5hdi1pbmRleCIsCi0gICAgIm5hdi1sZWZ0
IiwgIm5hdi1yaWdodCIsICJuYXYtdXAiLCAib2JqZWN0LWZpdCIsICJvYmplY3QtcG9zaXRpb24i
LAotICAgICJvcGFjaXR5IiwgIm9yZGVyIiwgIm9ycGhhbnMiLCAib3V0bGluZSIsCi0gICAgIm91
dGxpbmUtY29sb3IiLCAib3V0bGluZS1vZmZzZXQiLCAib3V0bGluZS1zdHlsZSIsICJvdXRsaW5l
LXdpZHRoIiwKLSAgICAib3ZlcmZsb3ciLCAib3ZlcmZsb3ctc3R5bGUiLCAib3ZlcmZsb3ctd3Jh
cCIsICJvdmVyZmxvdy14IiwgIm92ZXJmbG93LXkiLAotICAgICJwYWRkaW5nIiwgInBhZGRpbmct
Ym90dG9tIiwgInBhZGRpbmctbGVmdCIsICJwYWRkaW5nLXJpZ2h0IiwgInBhZGRpbmctdG9wIiwK
LSAgICAicGFnZSIsICJwYWdlLWJyZWFrLWFmdGVyIiwgInBhZ2UtYnJlYWstYmVmb3JlIiwgInBh
Z2UtYnJlYWstaW5zaWRlIiwKLSAgICAicGFnZS1wb2xpY3kiLCAicGF1c2UiLCAicGF1c2UtYWZ0
ZXIiLCAicGF1c2UtYmVmb3JlIiwgInBlcnNwZWN0aXZlIiwKLSAgICAicGVyc3BlY3RpdmUtb3Jp
Z2luIiwgInBpdGNoIiwgInBpdGNoLXJhbmdlIiwgInBsYXktZHVyaW5nIiwgInBvc2l0aW9uIiwK
LSAgICAicHJlc2VudGF0aW9uLWxldmVsIiwgInB1bmN0dWF0aW9uLXRyaW0iLCAicXVvdGVzIiwg
InJlZ2lvbi1icmVhay1hZnRlciIsCi0gICAgInJlZ2lvbi1icmVhay1iZWZvcmUiLCAicmVnaW9u
LWJyZWFrLWluc2lkZSIsICJyZWdpb24tZnJhZ21lbnQiLAotICAgICJyZW5kZXJpbmctaW50ZW50
IiwgInJlc2l6ZSIsICJyZXN0IiwgInJlc3QtYWZ0ZXIiLCAicmVzdC1iZWZvcmUiLCAicmljaG5l
c3MiLAotICAgICJyaWdodCIsICJyb3RhdGlvbiIsICJyb3RhdGlvbi1wb2ludCIsICJydWJ5LWFs
aWduIiwgInJ1Ynktb3ZlcmhhbmciLAotICAgICJydWJ5LXBvc2l0aW9uIiwgInJ1Ynktc3BhbiIs
ICJzaGFwZS1pbWFnZS10aHJlc2hvbGQiLCAic2hhcGUtaW5zaWRlIiwgInNoYXBlLW1hcmdpbiIs
Ci0gICAgInNoYXBlLW91dHNpZGUiLCAic2l6ZSIsICJzcGVhayIsICJzcGVhay1hcyIsICJzcGVh
ay1oZWFkZXIiLAotICAgICJzcGVhay1udW1lcmFsIiwgInNwZWFrLXB1bmN0dWF0aW9uIiwgInNw
ZWVjaC1yYXRlIiwgInN0cmVzcyIsICJzdHJpbmctc2V0IiwKLSAgICAidGFiLXNpemUiLCAidGFi
bGUtbGF5b3V0IiwgInRhcmdldCIsICJ0YXJnZXQtbmFtZSIsICJ0YXJnZXQtbmV3IiwKLSAgICAi
dGFyZ2V0LXBvc2l0aW9uIiwgInRleHQtYWxpZ24iLCAidGV4dC1hbGlnbi1sYXN0IiwgInRleHQt
ZGVjb3JhdGlvbiIsCi0gICAgInRleHQtZGVjb3JhdGlvbi1jb2xvciIsICJ0ZXh0LWRlY29yYXRp
b24tbGluZSIsICJ0ZXh0LWRlY29yYXRpb24tc2tpcCIsCi0gICAgInRleHQtZGVjb3JhdGlvbi1z
dHlsZSIsICJ0ZXh0LWVtcGhhc2lzIiwgInRleHQtZW1waGFzaXMtY29sb3IiLAotICAgICJ0ZXh0
LWVtcGhhc2lzLXBvc2l0aW9uIiwgInRleHQtZW1waGFzaXMtc3R5bGUiLCAidGV4dC1oZWlnaHQi
LAotICAgICJ0ZXh0LWluZGVudCIsICJ0ZXh0LWp1c3RpZnkiLCAidGV4dC1vdXRsaW5lIiwgInRl
eHQtb3ZlcmZsb3ciLCAidGV4dC1zaGFkb3ciLAotICAgICJ0ZXh0LXNpemUtYWRqdXN0IiwgInRl
eHQtc3BhY2UtY29sbGFwc2UiLCAidGV4dC10cmFuc2Zvcm0iLCAidGV4dC11bmRlcmxpbmUtcG9z
aXRpb24iLAotICAgICJ0ZXh0LXdyYXAiLCAidG9wIiwgInRyYW5zZm9ybSIsICJ0cmFuc2Zvcm0t
b3JpZ2luIiwgInRyYW5zZm9ybS1zdHlsZSIsCi0gICAgInRyYW5zaXRpb24iLCAidHJhbnNpdGlv
bi1kZWxheSIsICJ0cmFuc2l0aW9uLWR1cmF0aW9uIiwKLSAgICAidHJhbnNpdGlvbi1wcm9wZXJ0
eSIsICJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsICJ1bmljb2RlLWJpZGkiLAotICAgICJ2
ZXJ0aWNhbC1hbGlnbiIsICJ2aXNpYmlsaXR5IiwgInZvaWNlLWJhbGFuY2UiLCAidm9pY2UtZHVy
YXRpb24iLAotICAgICJ2b2ljZS1mYW1pbHkiLCAidm9pY2UtcGl0Y2giLCAidm9pY2UtcmFuZ2Ui
LCAidm9pY2UtcmF0ZSIsICJ2b2ljZS1zdHJlc3MiLAotICAgICJ2b2ljZS12b2x1bWUiLCAidm9s
dW1lIiwgIndoaXRlLXNwYWNlIiwgIndpZG93cyIsICJ3aWR0aCIsICJ3b3JkLWJyZWFrIiwKLSAg
ICAid29yZC1zcGFjaW5nIiwgIndvcmQtd3JhcCIsICJ6LWluZGV4IiwKLSAgICAvLyBTVkctc3Bl
Y2lmaWMKLSAgICAiY2xpcC1wYXRoIiwgImNsaXAtcnVsZSIsICJtYXNrIiwgImVuYWJsZS1iYWNr
Z3JvdW5kIiwgImZpbHRlciIsICJmbG9vZC1jb2xvciIsCi0gICAgImZsb29kLW9wYWNpdHkiLCAi
bGlnaHRpbmctY29sb3IiLCAic3RvcC1jb2xvciIsICJzdG9wLW9wYWNpdHkiLCAicG9pbnRlci1l
dmVudHMiLAotICAgICJjb2xvci1pbnRlcnBvbGF0aW9uIiwgImNvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycyIsCi0gICAgImNvbG9yLXJlbmRlcmluZyIsICJmaWxsIiwgImZpbGwtb3BhY2l0eSIs
ICJmaWxsLXJ1bGUiLCAiaW1hZ2UtcmVuZGVyaW5nIiwKLSAgICAibWFya2VyIiwgIm1hcmtlci1l
bmQiLCAibWFya2VyLW1pZCIsICJtYXJrZXItc3RhcnQiLCAic2hhcGUtcmVuZGVyaW5nIiwgInN0
cm9rZSIsCi0gICAgInN0cm9rZS1kYXNoYXJyYXkiLCAic3Ryb2tlLWRhc2hvZmZzZXQiLCAic3Ry
b2tlLWxpbmVjYXAiLCAic3Ryb2tlLWxpbmVqb2luIiwKLSAgICAic3Ryb2tlLW1pdGVybGltaXQi
LCAic3Ryb2tlLW9wYWNpdHkiLCAic3Ryb2tlLXdpZHRoIiwgInRleHQtcmVuZGVyaW5nIiwKLSAg
ICAiYmFzZWxpbmUtc2hpZnQiLCAiZG9taW5hbnQtYmFzZWxpbmUiLCAiZ2x5cGgtb3JpZW50YXRp
b24taG9yaXpvbnRhbCIsCi0gICAgImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwgInRleHQt
YW5jaG9yIiwgIndyaXRpbmctbW9kZSIKLSAgXSwgcHJvcGVydHlLZXl3b3JkcyA9IGtleVNldChw
cm9wZXJ0eUtleXdvcmRzXyk7Ci0KLSAgdmFyIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9
IFsKLSAgICAic2Nyb2xsYmFyLWFycm93LWNvbG9yIiwgInNjcm9sbGJhci1iYXNlLWNvbG9yIiwg
InNjcm9sbGJhci1kYXJrLXNoYWRvdy1jb2xvciIsCi0gICAgInNjcm9sbGJhci1mYWNlLWNvbG9y
IiwgInNjcm9sbGJhci1oaWdobGlnaHQtY29sb3IiLCAic2Nyb2xsYmFyLXNoYWRvdy1jb2xvciIs
Ci0gICAgInNjcm9sbGJhci0zZC1saWdodC1jb2xvciIsICJzY3JvbGxiYXItdHJhY2stY29sb3Ii
LCAic2hhcGUtaW5zaWRlIiwKLSAgICAic2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFy
Y2hmaWVsZC1kZWNvcmF0aW9uIiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uIiwKLSAgICAi
c2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwgInpvb20iCi0gIF0sIG5vblN0YW5kYXJk
UHJvcGVydHlLZXl3b3JkcyA9IGtleVNldChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMpOwot
Ci0gIHZhciBjb2xvcktleXdvcmRzXyA9IFsKLSAgICAiYWxpY2VibHVlIiwgImFudGlxdWV3aGl0
ZSIsICJhcXVhIiwgImFxdWFtYXJpbmUiLCAiYXp1cmUiLCAiYmVpZ2UiLAotICAgICJiaXNxdWUi
LCAiYmxhY2siLCAiYmxhbmNoZWRhbG1vbmQiLCAiYmx1ZSIsICJibHVldmlvbGV0IiwgImJyb3du
IiwKLSAgICAiYnVybHl3b29kIiwgImNhZGV0Ymx1ZSIsICJjaGFydHJldXNlIiwgImNob2NvbGF0
ZSIsICJjb3JhbCIsICJjb3JuZmxvd2VyYmx1ZSIsCi0gICAgImNvcm5zaWxrIiwgImNyaW1zb24i
LCAiY3lhbiIsICJkYXJrYmx1ZSIsICJkYXJrY3lhbiIsICJkYXJrZ29sZGVucm9kIiwKLSAgICAi
ZGFya2dyYXkiLCAiZGFya2dyZWVuIiwgImRhcmtraGFraSIsICJkYXJrbWFnZW50YSIsICJkYXJr
b2xpdmVncmVlbiIsCi0gICAgImRhcmtvcmFuZ2UiLCAiZGFya29yY2hpZCIsICJkYXJrcmVkIiwg
ImRhcmtzYWxtb24iLCAiZGFya3NlYWdyZWVuIiwKLSAgICAiZGFya3NsYXRlYmx1ZSIsICJkYXJr
c2xhdGVncmF5IiwgImRhcmt0dXJxdW9pc2UiLCAiZGFya3Zpb2xldCIsCi0gICAgImRlZXBwaW5r
IiwgImRlZXBza3libHVlIiwgImRpbWdyYXkiLCAiZG9kZ2VyYmx1ZSIsICJmaXJlYnJpY2siLAot
ICAgICJmbG9yYWx3aGl0ZSIsICJmb3Jlc3RncmVlbiIsICJmdWNoc2lhIiwgImdhaW5zYm9ybyIs
ICJnaG9zdHdoaXRlIiwKLSAgICAiZ29sZCIsICJnb2xkZW5yb2QiLCAiZ3JheSIsICJncmV5Iiwg
ImdyZWVuIiwgImdyZWVueWVsbG93IiwgImhvbmV5ZGV3IiwKLSAgICAiaG90cGluayIsICJpbmRp
YW5yZWQiLCAiaW5kaWdvIiwgIml2b3J5IiwgImtoYWtpIiwgImxhdmVuZGVyIiwKLSAgICAibGF2
ZW5kZXJibHVzaCIsICJsYXduZ3JlZW4iLCAibGVtb25jaGlmZm9uIiwgImxpZ2h0Ymx1ZSIsICJs
aWdodGNvcmFsIiwKLSAgICAibGlnaHRjeWFuIiwgImxpZ2h0Z29sZGVucm9keWVsbG93IiwgImxp
Z2h0Z3JheSIsICJsaWdodGdyZWVuIiwgImxpZ2h0cGluayIsCi0gICAgImxpZ2h0c2FsbW9uIiwg
ImxpZ2h0c2VhZ3JlZW4iLCAibGlnaHRza3libHVlIiwgImxpZ2h0c2xhdGVncmF5IiwKLSAgICAi
bGlnaHRzdGVlbGJsdWUiLCAibGlnaHR5ZWxsb3ciLCAibGltZSIsICJsaW1lZ3JlZW4iLCAibGlu
ZW4iLCAibWFnZW50YSIsCi0gICAgIm1hcm9vbiIsICJtZWRpdW1hcXVhbWFyaW5lIiwgIm1lZGl1
bWJsdWUiLCAibWVkaXVtb3JjaGlkIiwgIm1lZGl1bXB1cnBsZSIsCi0gICAgIm1lZGl1bXNlYWdy
ZWVuIiwgIm1lZGl1bXNsYXRlYmx1ZSIsICJtZWRpdW1zcHJpbmdncmVlbiIsICJtZWRpdW10dXJx
dW9pc2UiLAotICAgICJtZWRpdW12aW9sZXRyZWQiLCAibWlkbmlnaHRibHVlIiwgIm1pbnRjcmVh
bSIsICJtaXN0eXJvc2UiLCAibW9jY2FzaW4iLAotICAgICJuYXZham93aGl0ZSIsICJuYXZ5Iiwg
Im9sZGxhY2UiLCAib2xpdmUiLCAib2xpdmVkcmFiIiwgIm9yYW5nZSIsICJvcmFuZ2VyZWQiLAot
ICAgICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIsICJwYWxlZ3JlZW4iLCAicGFsZXR1cnF1b2lz
ZSIsICJwYWxldmlvbGV0cmVkIiwKLSAgICAicGFwYXlhd2hpcCIsICJwZWFjaHB1ZmYiLCAicGVy
dSIsICJwaW5rIiwgInBsdW0iLCAicG93ZGVyYmx1ZSIsCi0gICAgInB1cnBsZSIsICJyZWQiLCAi
cm9zeWJyb3duIiwgInJveWFsYmx1ZSIsICJzYWRkbGVicm93biIsICJzYWxtb24iLAotICAgICJz
YW5keWJyb3duIiwgInNlYWdyZWVuIiwgInNlYXNoZWxsIiwgInNpZW5uYSIsICJzaWx2ZXIiLCAi
c2t5Ymx1ZSIsCi0gICAgInNsYXRlYmx1ZSIsICJzbGF0ZWdyYXkiLCAic25vdyIsICJzcHJpbmdn
cmVlbiIsICJzdGVlbGJsdWUiLCAidGFuIiwKLSAgICAidGVhbCIsICJ0aGlzdGxlIiwgInRvbWF0
byIsICJ0dXJxdW9pc2UiLCAidmlvbGV0IiwgIndoZWF0IiwgIndoaXRlIiwKLSAgICAid2hpdGVz
bW9rZSIsICJ5ZWxsb3ciLCAieWVsbG93Z3JlZW4iCi0gIF0sIGNvbG9yS2V5d29yZHMgPSBrZXlT
ZXQoY29sb3JLZXl3b3Jkc18pOwotCi0gIHZhciB2YWx1ZUtleXdvcmRzXyA9IFsKLSAgICAiYWJv
dmUiLCAiYWJzb2x1dGUiLCAiYWN0aXZlYm9yZGVyIiwgImFjdGl2ZWNhcHRpb24iLCAiYWZhciIs
Ci0gICAgImFmdGVyLXdoaXRlLXNwYWNlIiwgImFoZWFkIiwgImFsaWFzIiwgImFsbCIsICJhbGwt
c2Nyb2xsIiwgImFsdGVybmF0ZSIsCi0gICAgImFsd2F5cyIsICJhbWhhcmljIiwgImFtaGFyaWMt
YWJlZ2VkZSIsICJhbnRpYWxpYXNlZCIsICJhcHB3b3Jrc3BhY2UiLAotICAgICJhcmFiaWMtaW5k
aWMiLCAiYXJtZW5pYW4iLCAiYXN0ZXJpc2tzIiwgImF1dG8iLCAiYXZvaWQiLCAiYXZvaWQtY29s
dW1uIiwgImF2b2lkLXBhZ2UiLAotICAgICJhdm9pZC1yZWdpb24iLCAiYmFja2dyb3VuZCIsICJi
YWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ciLCAiYmlkaS1vdmVycmlkZSIsICJiaW5hcnki
LAotICAgICJiZW5nYWxpIiwgImJsaW5rIiwgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9sZCIs
ICJib2xkZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLAotICAgICJib3RoIiwgImJvdHRvbSIs
ICJicmVhayIsICJicmVhay1hbGwiLCAiYnJlYWstd29yZCIsICJidXR0b24iLCAiYnV0dG9uLWJl
dmVsIiwKLSAgICAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93
IiwgImJ1dHRvbnRleHQiLCAiY2FtYm9kaWFuIiwKLSAgICAiY2FwaXRhbGl6ZSIsICJjYXBzLWxv
Y2staW5kaWNhdG9yIiwgImNhcHRpb24iLCAiY2FwdGlvbnRleHQiLCAiY2FyZXQiLAotICAgICJj
ZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWVhcnRobHktYnJhbmNo
IiwKLSAgICAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGljIiwgImNsZWFyIiwg
ImNsaXAiLCAiY2xvc2UtcXVvdGUiLAotICAgICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNv
bHVtbiIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNvbnRlbnQiLAotICAg
ICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIsICJjb3B5IiwgImNv
dmVyIiwgImNyb3AiLAotICAgICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9yIiwg
ImN1cnNpdmUiLCAiZGFzaGVkIiwgImRlY2ltYWwiLAotICAgICJkZWNpbWFsLWxlYWRpbmctemVy
byIsICJkZWZhdWx0IiwgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9uLWF0b3AiLAotICAg
ICJkZXN0aW5hdGlvbi1pbiIsICJkZXN0aW5hdGlvbi1vdXQiLCAiZGVzdGluYXRpb24tb3ZlciIs
ICJkZXZhbmFnYXJpIiwKLSAgICAiZGlzYyIsICJkaXNjYXJkIiwgImRvY3VtZW50IiwgImRvdC1k
YXNoIiwgImRvdC1kb3QtZGFzaCIsICJkb3R0ZWQiLAotICAgICJkb3VibGUiLCAiZG93biIsICJl
LXJlc2l6ZSIsICJlYXNlIiwgImVhc2UtaW4iLCAiZWFzZS1pbi1vdXQiLCAiZWFzZS1vdXQiLAot
ICAgICJlbGVtZW50IiwgImVsbGlwc2UiLCAiZWxsaXBzaXMiLCAiZW1iZWQiLCAiZW5kIiwgImV0
aGlvcGljIiwgImV0aGlvcGljLWFiZWdlZGUiLAotICAgICJldGhpb3BpYy1hYmVnZWRlLWFtLWV0
IiwgImV0aGlvcGljLWFiZWdlZGUtZ2V6IiwgImV0aGlvcGljLWFiZWdlZGUtdGktZXIiLAotICAg
ICJldGhpb3BpYy1hYmVnZWRlLXRpLWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLWFhLWVyIiwKLSAg
ICAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtYW0tZXQiLAot
ICAgICJldGhpb3BpYy1oYWxlaGFtZS1nZXoiLCAiZXRoaW9waWMtaGFsZWhhbWUtb20tZXQiLAot
ICAgICJldGhpb3BpYy1oYWxlaGFtZS1zaWQtZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtc28tZXQi
LAotICAgICJldGhpb3BpYy1oYWxlaGFtZS10aS1lciIsICJldGhpb3BpYy1oYWxlaGFtZS10aS1l
dCIsCi0gICAgImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsICJldy1yZXNpemUiLCAiZXhwYW5kZWQi
LCAiZXh0cmEtY29uZGVuc2VkIiwKLSAgICAiZXh0cmEtZXhwYW5kZWQiLCAiZmFudGFzeSIsICJm
YXN0IiwgImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmb290bm90ZXMiLAotICAgICJmb3J3YXJk
cyIsICJmcm9tIiwgImdlb21ldHJpY1ByZWNpc2lvbiIsICJnZW9yZ2lhbiIsICJncmF5dGV4dCIs
ICJncm9vdmUiLAotICAgICJndWphcmF0aSIsICJndXJtdWtoaSIsICJoYW5kIiwgImhhbmd1bCIs
ICJoYW5ndWwtY29uc29uYW50IiwgImhlYnJldyIsCi0gICAgImhlbHAiLCAiaGlkZGVuIiwgImhp
ZGUiLCAiaGlnaGVyIiwgImhpZ2hsaWdodCIsICJoaWdobGlnaHR0ZXh0IiwKLSAgICAiaGlyYWdh
bmEiLCAiaGlyYWdhbmEtaXJvaGEiLCAiaG9yaXpvbnRhbCIsICJoc2wiLCAiaHNsYSIsICJpY29u
IiwgImlnbm9yZSIsCi0gICAgImluYWN0aXZlYm9yZGVyIiwgImluYWN0aXZlY2FwdGlvbiIsICJp
bmFjdGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwKLSAgICAiaW5mb2JhY2tncm91bmQiLCAi
aW5mb3RleHQiLCAiaW5oZXJpdCIsICJpbml0aWFsIiwgImlubGluZSIsICJpbmxpbmUtYXhpcyIs
Ci0gICAgImlubGluZS1ibG9jayIsICJpbmxpbmUtdGFibGUiLCAiaW5zZXQiLCAiaW5zaWRlIiwg
ImludHJpbnNpYyIsICJpbnZlcnQiLAotICAgICJpdGFsaWMiLCAianVzdGlmeSIsICJrYW5uYWRh
IiwgImthdGFrYW5hIiwgImthdGFrYW5hLWlyb2hhIiwgImtlZXAtYWxsIiwgImtobWVyIiwKLSAg
ICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVmdCIsICJsZXZlbCIs
ICJsaWdodGVyIiwKLSAgICAibGluZS10aHJvdWdoIiwgImxpbmVhciIsICJsaW5lcyIsICJsaXN0
LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCi0gICAgImxvY2FsIiwgImxvZ2ljYWwiLCAi
bG91ZCIsICJsb3dlciIsICJsb3dlci1hbHBoYSIsICJsb3dlci1hcm1lbmlhbiIsCi0gICAgImxv
d2VyLWdyZWVrIiwgImxvd2VyLWhleGFkZWNpbWFsIiwgImxvd2VyLWxhdGluIiwgImxvd2VyLW5v
cndlZ2lhbiIsCi0gICAgImxvd2VyLXJvbWFuIiwgImxvd2VyY2FzZSIsICJsdHIiLCAibWFsYXlh
bGFtIiwgIm1hdGNoIiwKLSAgICAibWVkaWEtY29udHJvbHMtYmFja2dyb3VuZCIsICJtZWRpYS1j
dXJyZW50LXRpbWUtZGlzcGxheSIsCi0gICAgIm1lZGlhLWZ1bGxzY3JlZW4tYnV0dG9uIiwgIm1l
ZGlhLW11dGUtYnV0dG9uIiwgIm1lZGlhLXBsYXktYnV0dG9uIiwKLSAgICAibWVkaWEtcmV0dXJu
LXRvLXJlYWx0aW1lLWJ1dHRvbiIsICJtZWRpYS1yZXdpbmQtYnV0dG9uIiwKLSAgICAibWVkaWEt
c2Vlay1iYWNrLWJ1dHRvbiIsICJtZWRpYS1zZWVrLWZvcndhcmQtYnV0dG9uIiwgIm1lZGlhLXNs
aWRlciIsCi0gICAgIm1lZGlhLXNsaWRlcnRodW1iIiwgIm1lZGlhLXRpbWUtcmVtYWluaW5nLWRp
c3BsYXkiLCAibWVkaWEtdm9sdW1lLXNsaWRlciIsCi0gICAgIm1lZGlhLXZvbHVtZS1zbGlkZXIt
Y29udGFpbmVyIiwgIm1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYiIsICJtZWRpdW0iLAotICAgICJt
ZW51IiwgIm1lbnVsaXN0IiwgIm1lbnVsaXN0LWJ1dHRvbiIsICJtZW51bGlzdC10ZXh0IiwKLSAg
ICAibWVudWxpc3QtdGV4dGZpZWxkIiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2UtYm94IiwgIm1pZGRs
ZSIsICJtaW4taW50cmluc2ljIiwKLSAgICAibWl4IiwgIm1vbmdvbGlhbiIsICJtb25vc3BhY2Ui
LCAibW92ZSIsICJtdWx0aXBsZSIsICJteWFubWFyIiwgIm4tcmVzaXplIiwKLSAgICAibmFycm93
ZXIiLCAibmUtcmVzaXplIiwgIm5lc3ctcmVzaXplIiwgIm5vLWNsb3NlLXF1b3RlIiwgIm5vLWRy
b3AiLAotICAgICJuby1vcGVuLXF1b3RlIiwgIm5vLXJlcGVhdCIsICJub25lIiwgIm5vcm1hbCIs
ICJub3QtYWxsb3dlZCIsICJub3dyYXAiLAotICAgICJucy1yZXNpemUiLCAibnctcmVzaXplIiwg
Im53c2UtcmVzaXplIiwgIm9ibGlxdWUiLCAib2N0YWwiLCAib3Blbi1xdW90ZSIsCi0gICAgIm9w
dGltaXplTGVnaWJpbGl0eSIsICJvcHRpbWl6ZVNwZWVkIiwgIm9yaXlhIiwgIm9yb21vIiwgIm91
dHNldCIsCi0gICAgIm91dHNpZGUiLCAib3V0c2lkZS1zaGFwZSIsICJvdmVybGF5IiwgIm92ZXJs
aW5lIiwgInBhZGRpbmciLCAicGFkZGluZy1ib3giLAotICAgICJwYWludGVkIiwgInBhZ2UiLCAi
cGF1c2VkIiwgInBlcnNpYW4iLCAicGx1cy1kYXJrZXIiLCAicGx1cy1saWdodGVyIiwgInBvaW50
ZXIiLAotICAgICJwb2x5Z29uIiwgInBvcnRyYWl0IiwgInByZSIsICJwcmUtbGluZSIsICJwcmUt
d3JhcCIsICJwcmVzZXJ2ZS0zZCIsICJwcm9ncmVzcyIsICJwdXNoLWJ1dHRvbiIsCi0gICAgInJh
ZGlvIiwgInJlYWQtb25seSIsICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9u
bHkiLCAicmVjdGFuZ2xlIiwgInJlZ2lvbiIsCi0gICAgInJlbGF0aXZlIiwgInJlcGVhdCIsICJy
ZXBlYXQteCIsICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwgInJnYiIsICJyZ2JhIiwK
LSAgICAicmlkZ2UiLCAicmlnaHQiLCAicm91bmQiLCAicm93LXJlc2l6ZSIsICJydGwiLCAicnVu
LWluIiwgInJ1bm5pbmciLAotICAgICJzLXJlc2l6ZSIsICJzYW5zLXNlcmlmIiwgInNjcm9sbCIs
ICJzY3JvbGxiYXIiLCAic2UtcmVzaXplIiwgInNlYXJjaGZpZWxkIiwKLSAgICAic2VhcmNoZmll
bGQtY2FuY2VsLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1kZWNvcmF0aW9uIiwKLSAgICAic2VhcmNo
ZmllbGQtcmVzdWx0cy1idXR0b24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uIiwK
LSAgICAic2VtaS1jb25kZW5zZWQiLCAic2VtaS1leHBhbmRlZCIsICJzZXBhcmF0ZSIsICJzZXJp
ZiIsICJzaG93IiwgInNpZGFtYSIsCi0gICAgInNpbmdsZSIsICJza2lwLXdoaXRlLXNwYWNlIiwg
InNsaWRlIiwgInNsaWRlci1ob3Jpem9udGFsIiwKLSAgICAic2xpZGVyLXZlcnRpY2FsIiwgInNs
aWRlcnRodW1iLWhvcml6b250YWwiLCAic2xpZGVydGh1bWItdmVydGljYWwiLCAic2xvdyIsCi0g
ICAgInNtYWxsIiwgInNtYWxsLWNhcHMiLCAic21hbGwtY2FwdGlvbiIsICJzbWFsbGVyIiwgInNv
bGlkIiwgInNvbWFsaSIsCi0gICAgInNvdXJjZS1hdG9wIiwgInNvdXJjZS1pbiIsICJzb3VyY2Ut
b3V0IiwgInNvdXJjZS1vdmVyIiwgInNwYWNlIiwgInNxdWFyZSIsCi0gICAgInNxdWFyZS1idXR0
b24iLCAic3RhcnQiLCAic3RhdGljIiwgInN0YXR1cy1iYXIiLCAic3RyZXRjaCIsICJzdHJva2Ui
LAotICAgICJzdWIiLCAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAic3VwZXIiLCAic3ctcmVzaXpl
IiwgInRhYmxlIiwKLSAgICAidGFibGUtY2FwdGlvbiIsICJ0YWJsZS1jZWxsIiwgInRhYmxlLWNv
bHVtbiIsICJ0YWJsZS1jb2x1bW4tZ3JvdXAiLAotICAgICJ0YWJsZS1mb290ZXItZ3JvdXAiLCAi
dGFibGUtaGVhZGVyLWdyb3VwIiwgInRhYmxlLXJvdyIsICJ0YWJsZS1yb3ctZ3JvdXAiLAotICAg
ICJ0ZWx1Z3UiLCAidGV4dCIsICJ0ZXh0LWJvdHRvbSIsICJ0ZXh0LXRvcCIsICJ0ZXh0YXJlYSIs
ICJ0ZXh0ZmllbGQiLCAidGhhaSIsCi0gICAgInRoaWNrIiwgInRoaW4iLCAidGhyZWVkZGFya3No
YWRvdyIsICJ0aHJlZWRmYWNlIiwgInRocmVlZGhpZ2hsaWdodCIsCi0gICAgInRocmVlZGxpZ2h0
c2hhZG93IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3JpbnlhLWVy
IiwKLSAgICAidGlncmlueWEtZXItYWJlZ2VkZSIsICJ0aWdyaW55YS1ldCIsICJ0aWdyaW55YS1l
dC1hYmVnZWRlIiwgInRvIiwgInRvcCIsCi0gICAgInRyYW5zcGFyZW50IiwgInVsdHJhLWNvbmRl
bnNlZCIsICJ1bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidXAiLAotICAgICJ1cHBlci1h
bHBoYSIsICJ1cHBlci1hcm1lbmlhbiIsICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVjaW1h
bCIsCi0gICAgInVwcGVyLWxhdGluIiwgInVwcGVyLW5vcndlZ2lhbiIsICJ1cHBlci1yb21hbiIs
ICJ1cHBlcmNhc2UiLCAidXJkdSIsICJ1cmwiLAotICAgICJ2ZXJ0aWNhbCIsICJ2ZXJ0aWNhbC10
ZXh0IiwgInZpc2libGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJsZVBhaW50ZWQiLAotICAgICJ2
aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2lk
ZXIiLAotICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsICJ4LWxhcmdl
IiwgIngtc21hbGwiLCAieG9yIiwKLSAgICAieHgtbGFyZ2UiLCAieHgtc21hbGwiCi0gIF0sIHZh
bHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pOwotCi0gIHZhciBmb250UHJvcGVy
dGllc18gPSBbCi0gICAgImZvbnQtZmFtaWx5IiwgInNyYyIsICJ1bmljb2RlLXJhbmdlIiwgImZv
bnQtdmFyaWFudCIsICJmb250LWZlYXR1cmUtc2V0dGluZ3MiLAotICAgICJmb250LXN0cmV0Y2gi
LCAiZm9udC13ZWlnaHQiLCAiZm9udC1zdHlsZSIKLSAgXSwgZm9udFByb3BlcnRpZXMgPSBrZXlT
ZXQoZm9udFByb3BlcnRpZXNfKTsKLQotICB2YXIgYWxsV29yZHMgPSBtZWRpYVR5cGVzXy5jb25j
YXQobWVkaWFGZWF0dXJlc18pLmNvbmNhdChwcm9wZXJ0eUtleXdvcmRzXykKLSAgICAuY29uY2F0
KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcykuY29uY2F0KGNvbG9yS2V5d29yZHNfKS5jb25j
YXQodmFsdWVLZXl3b3Jkc18pOwotICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKCJoaW50V29y
ZHMiLCAiY3NzIiwgYWxsV29yZHMpOwotCi0gIGZ1bmN0aW9uIHRva2VuQ0NvbW1lbnQoc3RyZWFt
LCBzdGF0ZSkgewotICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKLSAgICB3aGlsZSAoKGNo
ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgaWYgKG1heWJlRW5kICYmIGNoID09
ICIvIikgewotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgfQotICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gIH0KLQotICBmdW5jdGlvbiB0b2tlblNHTUxDb21t
ZW50KHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLnNraXBUbygiLS0+IikpIHsKLSAg
ICAgIHN0cmVhbS5tYXRjaCgiLS0+Iik7Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFsiY29tbWVudCIsICJjb21tZW50Il07Ci0gIH0KLQotICBDb2RlTWlycm9yLmRlZmluZU1JTUUo
InRleHQvY3NzIiwgewotICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCi0gICAgbWVkaWFGZWF0
dXJlczogbWVkaWFGZWF0dXJlcywKLSAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdv
cmRzLAotICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0
eUtleXdvcmRzLAotICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCi0gICAgdmFsdWVL
ZXl3b3JkczogdmFsdWVLZXl3b3JkcywKLSAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRp
ZXMsCi0gICAgdG9rZW5Ib29rczogewotICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRl
KSB7Ci0gICAgICAgIGlmICghc3RyZWFtLm1hdGNoKCIhLS0iKSkgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7Ci0gICAgICAgIHJldHVybiB0
b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfSwKLSAgICAgICIvIjogZnVu
Y3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBpZiAoIXN0cmVhbS5lYXQoIioiKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7Ci0gICAg
ICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfQotICAgIH0s
Ci0gICAgbmFtZTogImNzcyIKLSAgfSk7Ci0KLSAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0
L3gtc2NzcyIsIHsKLSAgICBtZWRpYVR5cGVzOiBtZWRpYVR5cGVzLAotICAgIG1lZGlhRmVhdHVy
ZXM6IG1lZGlhRmVhdHVyZXMsCi0gICAgcHJvcGVydHlLZXl3b3JkczogcHJvcGVydHlLZXl3b3Jk
cywKLSAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHM6IG5vblN0YW5kYXJkUHJvcGVydHlL
ZXl3b3JkcywKLSAgICBjb2xvcktleXdvcmRzOiBjb2xvcktleXdvcmRzLAotICAgIHZhbHVlS2V5
d29yZHM6IHZhbHVlS2V5d29yZHMsCi0gICAgZm9udFByb3BlcnRpZXM6IGZvbnRQcm9wZXJ0aWVz
LAotICAgIGFsbG93TmVzdGVkOiB0cnVlLAotICAgIHRva2VuSG9va3M6IHsKLSAgICAgICIvIjog
ZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7
Ci0gICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwotICAgICAgICAgIHJldHVybiBbImNvbW1l
bnQiLCAiY29tbWVudCJdOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoIioiKSkgewot
ICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKLSAgICAgICAgICByZXR1
cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICByZXR1cm4gWyJvcGVyYXRvciIsICJvcGVyYXRvciJdOwotICAgICAgICB9Ci0gICAgICB9
LAotICAgICAgIjoiOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgICAgaWYgKHN0cmVhbS5tYXRj
aCgvXHMqey8pKQotICAgICAgICAgIHJldHVybiBbbnVsbCwgInsiXTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfSwKLSAgICAgICIkIjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAg
IHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pOwotICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMq
Oi8sIGZhbHNlKSkKLSAgICAgICAgICByZXR1cm4gWyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlLWRl
ZmluaXRpb24iXTsKLSAgICAgICAgcmV0dXJuIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZSJdOwot
ICAgICAgfSwKLSAgICAgICIjIjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmICghc3Ry
ZWFtLmVhdCgieyIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBbbnVsbCwgImludGVy
cG9sYXRpb24iXTsKLSAgICAgIH0KLSAgICB9LAotICAgIG5hbWU6ICJjc3MiLAotICAgIGhlbHBl
clR5cGU6ICJzY3NzIgotICB9KTsKLQotICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1s
ZXNzIiwgewotICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCi0gICAgbWVkaWFGZWF0dXJlczog
bWVkaWFGZWF0dXJlcywKLSAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAot
ICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdv
cmRzLAotICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCi0gICAgdmFsdWVLZXl3b3Jk
czogdmFsdWVLZXl3b3JkcywKLSAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCi0g
ICAgYWxsb3dOZXN0ZWQ6IHRydWUsCi0gICAgdG9rZW5Ib29rczogewotICAgICAgIi8iOiBmdW5j
dGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKLSAg
ICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7Ci0gICAgICAgICAgcmV0dXJuIFsiY29tbWVudCIs
ICJjb21tZW50Il07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7Ci0gICAg
ICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwotICAgICAgICAgIHJldHVybiB0
b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IHJldHVybiBbIm9wZXJhdG9yIiwgIm9wZXJhdG9yIl07Ci0gICAgICAgIH0KLSAgICAgIH0sCi0g
ICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgewotICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9e
KGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/
a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywgZmFsc2UpKSByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKLSAgICAgICAg
aWYgKHN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpCi0gICAgICAgICAgcmV0dXJuIFsidmFy
aWFibGUtMiIsICJ2YXJpYWJsZS1kZWZpbml0aW9uIl07Ci0gICAgICAgIHJldHVybiBbInZhcmlh
YmxlLTIiLCAidmFyaWFibGUiXTsKLSAgICAgIH0sCi0gICAgICAiJiI6IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4gWyJhdG9tIiwgImF0b20iXTsKLSAgICAgIH0KLSAgICB9LAotICAgIG5h
bWU6ICJjc3MiLAotICAgIGhlbHBlclR5cGU6ICJsZXNzIgotICB9KTsKLQotfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvaW5kZXguaHRt
bCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1s
CmluZGV4IDFiYzNmMzguLjI3M2FjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sCkBAIC0yLDE2ICsyLDE2IEBACiA8
aHRtbD4KIDxoZWFkPgogICAgIDx0aXRsZT5EZWJ1ZzwvdGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJjb2RlbWlycm9yLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1p
cnJvci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY29kZW1pcnJvci1h
ZGRpdGlvbnMuY3NzIj4KLSAgICA8c2NyaXB0IHNyYz0iY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQg
c3JjPSJjc3MuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJVdGlsaXRpZXMuanMiPjwv
c2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJGb3JtYXR0ZXIuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSIuLi8uLi9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1p
cnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
Rm9ybWF0dGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRm9ybWF0dGVyRGVidWcu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5q
cyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IkNvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uLy4uL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMiPjwvc2Ny
aXB0PgogPC9oZWFkPgogPGJvZHk+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Ub29scy9QcmV0dHlQcmludGluZy9qYXZhc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGI1MjJlYzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1Rvb2xzL1ByZXR0eVByaW50aW5nL2phdmFzY3JpcHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2
NjMgKzAsMCBAQAotLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJi
ZWtlIGFuZCBvdGhlcnMKLS8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRw
Oi8vY29kZW1pcnJvci5uZXQvTElDRU5TRQotCi0vLyBUT0RPIGFjdHVhbGx5IHJlY29nbml6ZSBz
eW50YXggb2YgVHlwZVNjcmlwdCBjb25zdHJ1Y3RzCi0KLShmdW5jdGlvbihtb2QpIHsKLSAgaWYg
KHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIp
IC8vIENvbW1vbkpTCi0gICAgbW9kKHJlcXVpcmUoIi4uLy4uL2xpYi9jb2RlbWlycm9yIikpOwot
ICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgLy8g
QU1ECi0gICAgZGVmaW5lKFsiLi4vLi4vbGliL2NvZGVtaXJyb3IiXSwgbW9kKTsKLSAgZWxzZSAv
LyBQbGFpbiBicm93c2VyIGVudgotICAgIG1vZChDb2RlTWlycm9yKTsKLX0pKGZ1bmN0aW9uKENv
ZGVNaXJyb3IpIHsKLSJ1c2Ugc3RyaWN0IjsKLQotQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKLSAgdmFyIGluZGVudFVu
aXQgPSBjb25maWcuaW5kZW50VW5pdDsKLSAgdmFyIHN0YXRlbWVudEluZGVudCA9IHBhcnNlckNv
bmZpZy5zdGF0ZW1lbnRJbmRlbnQ7Ci0gIHZhciBqc29ubGRNb2RlID0gcGFyc2VyQ29uZmlnLmpz
b25sZDsKLSAgdmFyIGpzb25Nb2RlID0gcGFyc2VyQ29uZmlnLmpzb24gfHwganNvbmxkTW9kZTsK
LSAgdmFyIGlzVFMgPSBwYXJzZXJDb25maWcudHlwZXNjcmlwdDsKLQotICAvLyBUb2tlbml6ZXIK
LQotICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpewotICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHty
ZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KLSAgICB2YXIgQSA9IGt3KCJr
ZXl3b3JkIGEiKSwgQiA9IGt3KCJrZXl3b3JkIGIiKSwgQyA9IGt3KCJrZXl3b3JkIGMiKTsKLSAg
ICB2YXIgb3BlcmF0b3IgPSBrdygib3BlcmF0b3IiKSwgYXRvbSA9IHt0eXBlOiAiYXRvbSIsIHN0
eWxlOiAiYXRvbSJ9OwotCi0gICAgdmFyIGpzS2V5d29yZHMgPSB7Ci0gICAgICAiaWYiOiBrdygi
aWYiKSwgIndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIsICJkbyI6IEIsICJ0cnkiOiBC
LCAiZmluYWxseSI6IEIsCi0gICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVl
IjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLCAiZGVidWdnZXIiOiBDLAot
ICAgICAgInZhciI6IGt3KCJ2YXIiKSwgImNvbnN0Ijoga3coInZhciIpLCAibGV0Ijoga3coInZh
ciIpLAotICAgICAgImZ1bmN0aW9uIjoga3coImZ1bmN0aW9uIiksICJjYXRjaCI6IGt3KCJjYXRj
aCIpLAotICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNh
c2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCi0gICAgICAiaW4iOiBv
cGVyYXRvciwgInR5cGVvZiI6IG9wZXJhdG9yLCAiaW5zdGFuY2VvZiI6IG9wZXJhdG9yLAotICAg
ICAgInRydWUiOiBhdG9tLCAiZmFsc2UiOiBhdG9tLCAibnVsbCI6IGF0b20sICJ1bmRlZmluZWQi
OiBhdG9tLCAiTmFOIjogYXRvbSwgIkluZmluaXR5IjogYXRvbSwKLSAgICAgICJ0aGlzIjoga3co
InRoaXMiKSwgIm1vZHVsZSI6IGt3KCJtb2R1bGUiKSwgImNsYXNzIjoga3coImNsYXNzIiksICJz
dXBlciI6IGt3KCJhdG9tIiksCi0gICAgICAieWllbGQiOiBDLCAiZXhwb3J0Ijoga3coImV4cG9y
dCIpLCAiaW1wb3J0Ijoga3coImltcG9ydCIpLCAiZXh0ZW5kcyI6IEMKLSAgICB9OwotCi0gICAg
Ly8gRXh0ZW5kIHRoZSAnbm9ybWFsJyBrZXl3b3JkcyB3aXRoIHRoZSBUeXBlU2NyaXB0IGxhbmd1
YWdlIGV4dGVuc2lvbnMKLSAgICBpZiAoaXNUUykgewotICAgICAgdmFyIHR5cGUgPSB7dHlwZTog
InZhcmlhYmxlIiwgc3R5bGU6ICJ2YXJpYWJsZS0zIn07Ci0gICAgICB2YXIgdHNLZXl3b3JkcyA9
IHsKLSAgICAgICAgLy8gb2JqZWN0LWxpa2UgdGhpbmdzCi0gICAgICAgICJpbnRlcmZhY2UiOiBr
dygiaW50ZXJmYWNlIiksCi0gICAgICAgICJleHRlbmRzIjoga3coImV4dGVuZHMiKSwKLSAgICAg
ICAgImNvbnN0cnVjdG9yIjoga3coImNvbnN0cnVjdG9yIiksCi0KLSAgICAgICAgLy8gc2NvcGUg
bW9kaWZpZXJzCi0gICAgICAgICJwdWJsaWMiOiBrdygicHVibGljIiksCi0gICAgICAgICJwcml2
YXRlIjoga3coInByaXZhdGUiKSwKLSAgICAgICAgInByb3RlY3RlZCI6IGt3KCJwcm90ZWN0ZWQi
KSwKLSAgICAgICAgInN0YXRpYyI6IGt3KCJzdGF0aWMiKSwKLQotICAgICAgICAvLyB0eXBlcwot
ICAgICAgICAic3RyaW5nIjogdHlwZSwgIm51bWJlciI6IHR5cGUsICJib29sIjogdHlwZSwgImFu
eSI6IHR5cGUKLSAgICAgIH07Ci0KLSAgICAgIGZvciAodmFyIGF0dHIgaW4gdHNLZXl3b3Jkcykg
ewotICAgICAgICBqc0tleXdvcmRzW2F0dHJdID0gdHNLZXl3b3Jkc1thdHRyXTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4ganNLZXl3b3JkczsKLSAgfSgpOwotCi0gIHZhciBpc09wZXJh
dG9yQ2hhciA9IC9bK1wtKiYlPTw+IT98fl5dLzsKLSAgdmFyIGlzSnNvbmxkS2V5d29yZCA9IC9e
QChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVy
c2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaCkiLzsKLQotICBmdW5jdGlvbiByZWFkUmVnZXhwKHN0
cmVhbSkgewotICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGluU2V0ID0gZmFsc2U7Ci0g
ICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewotICAgICAgaWYgKCFl
c2NhcGVkKSB7Ci0gICAgICAgIGlmIChuZXh0ID09ICIvIiAmJiAhaW5TZXQpIHJldHVybjsKLSAg
ICAgICAgaWYgKG5leHQgPT0gIlsiKSBpblNldCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGlu
U2V0ICYmIG5leHQgPT0gIl0iKSBpblNldCA9IGZhbHNlOwotICAgICAgfQotICAgICAgZXNjYXBl
ZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKLSAgICB9Ci0gIH0KLQotICAvLyBVc2VkIGFz
IHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0
Ci0gIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgotICB2YXIgdHlwZSwgY29udGVudDsK
LSAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkgewotICAgIHR5cGUgPSB0cDsgY29udGVu
dCA9IGNvbnQ7Ci0gICAgcmV0dXJuIHN0eWxlOwotICB9Ci0gIGZ1bmN0aW9uIHRva2VuQmFzZShz
dHJlYW0sIHN0YXRlKSB7Ci0gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKLSAgICBpZiAoY2gg
PT0gJyInIHx8IGNoID09ICInIikgewotICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmlu
ZyhjaCk7Ci0gICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7Ci0gICAg
fSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLm1hdGNoKC9eXGQrKD86W2VFXVsrXC1dP1xk
Kyk/LykpIHsKLSAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKLSAgICB9IGVs
c2UgaWYgKGNoID09ICIuIiAmJiBzdHJlYW0ubWF0Y2goIi4uIikpIHsKLSAgICAgIHJldHVybiBy
ZXQoInNwcmVhZCIsICJtZXRhIik7Ci0gICAgfSBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5d
Ly50ZXN0KGNoKSkgewotICAgICAgcmV0dXJuIHJldChjaCk7Ci0gICAgfSBlbHNlIGlmIChjaCA9
PSAiPSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7Ci0gICAgICByZXR1cm4gcmV0KCI9PiIsICJvcGVy
YXRvciIpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHsK
LSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKLSAgICAgIHJldHVybiByZXQoIm51
bWJlciIsICJudW1iZXIiKTsKLSAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKLSAgICAg
IHN0cmVhbS5tYXRjaCgvXlxkKig/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vKTsKLSAgICAg
IHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKLSAgICB9IGVsc2UgaWYgKGNoID09ICIv
IikgewotICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewotICAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IHRva2VuQ29tbWVudDsKLSAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0
YXRlKTsKLSAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7Ci0gICAgICAgIHN0cmVh
bS5za2lwVG9FbmQoKTsKLSAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7
Ci0gICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUu
bGFzdFR5cGUgPT0gImtleXdvcmQgYyIgfHwKLSAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUeXBl
ID09ICJzb2YiIHx8IC9eW1xbe31cKCw7Ol0kLy50ZXN0KHN0YXRlLmxhc3RUeXBlKSkgewotICAg
ICAgICByZWFkUmVnZXhwKHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW2dpbXld
Lyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQotICAgICAgICByZXR1cm4g
cmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cmVh
bS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9y
IiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1cnJlbnQoKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlm
IChjaCA9PSAiYCIpIHsKLSAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5RdWFzaTsKLSAgICAg
IHJldHVybiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0g
IiMiKSB7Ci0gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7Ci0gICAgICByZXR1cm4gcmV0KCJlcnJv
ciIsICJlcnJvciIpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsK
LSAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7Ci0gICAgICByZXR1cm4gcmV0
KCJvcGVyYXRvciIsICJvcGVyYXRvciIsIHN0cmVhbS5jdXJyZW50KCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKLSAgICAgIHZhciB3b3JkID0gc3Ry
ZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3Jk
KSAmJiBrZXl3b3Jkc1t3b3JkXTsKLSAgICAgIHJldHVybiAoa25vd24gJiYgc3RhdGUubGFzdFR5
cGUgIT0gIi4iKSA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOgotICAgICAg
ICAgICAgICAgICAgICAgcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIsIHdvcmQpOwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7Ci0gICAgcmV0dXJuIGZ1bmN0
aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7Ci0g
ICAgICBpZiAoanNvbmxkTW9kZSAmJiBzdHJlYW0ucGVlaygpID09ICJAIiAmJiBzdHJlYW0ubWF0
Y2goaXNKc29ubGRLZXl3b3JkKSl7Ci0gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNl
OwotICAgICAgICByZXR1cm4gcmV0KCJqc29ubGQta2V5d29yZCIsICJtZXRhIik7Ci0gICAgICB9
Ci0gICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7Ci0gICAgICAg
IGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKLSAgICAgICAgZXNjYXBlZCA9
ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKLSAgICAgIH0KLSAgICAgIGlmICghZXNjYXBlZCkg
c3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Ci0gICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAi
c3RyaW5nIik7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0s
IHN0YXRlKSB7Ci0gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwotICAgIHdoaWxlIChjaCA9
IHN0cmVhbS5uZXh0KCkpIHsKLSAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKLSAg
ICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldCgi
Y29tbWVudCIsICJjb21tZW50Iik7Ci0gIH0KLQotICBmdW5jdGlvbiB0b2tlblF1YXNpKHN0cmVh
bSwgc3RhdGUpIHsKLSAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0OwotICAgIHdoaWxlICgo
bmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKLSAgICAgIGlmICghZXNjYXBlZCAmJiAo
bmV4dCA9PSAiYCIgfHwgbmV4dCA9PSAiJCIgJiYgc3RyZWFtLmVhdCgieyIpKSkgewotICAgICAg
ICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwotICAgIH0KLSAgICByZXR1
cm4gcmV0KCJxdWFzaSIsICJzdHJpbmctMiIsIHN0cmVhbS5jdXJyZW50KCkpOwotICB9Ci0KLSAg
dmFyIGJyYWNrZXRzID0gIihbe31dKSI7Ci0gIC8vIFRoaXMgaXMgYSBjcnVkZSBsb29rYWhlYWQg
dHJpY2sgdG8gdHJ5IGFuZCBub3RpY2UgdGhhdCB3ZSdyZQotICAvLyBwYXJzaW5nIHRoZSBhcmd1
bWVudCBwYXR0ZXJucyBmb3IgYSBmYXQtYXJyb3cgZnVuY3Rpb24gYmVmb3JlIHdlCi0gIC8vIGFj
dHVhbGx5IGhpdCB0aGUgYXJyb3cgdG9rZW4uIEl0IG9ubHkgd29ya3MgaWYgdGhlIGFycm93IGlz
IG9uCi0gIC8vIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFyZ3VtZW50cyBhbmQgdGhlcmUncyBubyBz
dHJhbmdlIG5vaXNlCi0gIC8vIChjb21tZW50cykgaW4gYmV0d2Vlbi4gRmFsbGJhY2sgaXMgdG8g
b25seSBub3RpY2Ugd2hlbiB3ZSBoaXQgdGhlCi0gIC8vIGFycm93LCBhbmQgbm90IGRlY2xhcmUg
dGhlIGFyZ3VtZW50cyBhcyBsb2NhbHMgZm9yIHRoZSBhcnJvdwotICAvLyBib2R5LgotICBmdW5j
dGlvbiBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmIChzdGF0ZS5mYXRBcnJv
d0F0KSBzdGF0ZS5mYXRBcnJvd0F0ID0gbnVsbDsKLSAgICB2YXIgYXJyb3cgPSBzdHJlYW0uc3Ry
aW5nLmluZGV4T2YoIj0+Iiwgc3RyZWFtLnN0YXJ0KTsKLSAgICBpZiAoYXJyb3cgPCAwKSByZXR1
cm47Ci0KLSAgICB2YXIgZGVwdGggPSAwLCBzYXdTb21ldGhpbmcgPSBmYWxzZTsKLSAgICBmb3Ig
KHZhciBwb3MgPSBhcnJvdyAtIDE7IHBvcyA+PSAwOyAtLXBvcykgewotICAgICAgdmFyIGNoID0g
c3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKTsKLSAgICAgIHZhciBicmFja2V0ID0gYnJhY2tldHMu
aW5kZXhPZihjaCk7Ci0gICAgICBpZiAoYnJhY2tldCA+PSAwICYmIGJyYWNrZXQgPCAzKSB7Ci0g
ICAgICAgIGlmICghZGVwdGgpIHsgKytwb3M7IGJyZWFrOyB9Ci0gICAgICAgIGlmICgtLWRlcHRo
ID09IDApIGJyZWFrOwotICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMgJiYgYnJhY2tldCA8
IDYpIHsKLSAgICAgICAgKytkZXB0aDsKLSAgICAgIH0gZWxzZSBpZiAoL1skXHddLy50ZXN0KGNo
KSkgewotICAgICAgICBzYXdTb21ldGhpbmcgPSB0cnVlOwotICAgICAgfSBlbHNlIGlmIChzYXdT
b21ldGhpbmcgJiYgIWRlcHRoKSB7Ci0gICAgICAgICsrcG9zOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgpIHN0YXRlLmZhdEFy
cm93QXQgPSBwb3M7Ci0gIH0KLQotICAvLyBQYXJzZXIKLQotICB2YXIgYXRvbWljVHlwZXMgPSB7
ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6
IHRydWUsICJyZWdleHAiOiB0cnVlLCAidGhpcyI6IHRydWUsICJqc29ubGQta2V5d29yZCI6IHRy
dWV9OwotCi0gIGZ1bmN0aW9uIEpTTGV4aWNhbChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGln
biwgcHJldiwgaW5mbykgewotICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKLSAgICB0aGlz
LmNvbHVtbiA9IGNvbHVtbjsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMucHJldiA9
IHByZXY7Ci0gICAgdGhpcy5pbmZvID0gaW5mbzsKLSAgICBpZiAoYWxpZ24gIT0gbnVsbCkgdGhp
cy5hbGlnbiA9IGFsaWduOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5TY29wZShzdGF0ZSwgdmFybmFt
ZSkgewotICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpCi0g
ICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlOwotICAgIGZvciAodmFyIGN4
ID0gc3RhdGUuY29udGV4dDsgY3g7IGN4ID0gY3gucHJldikgewotICAgICAgZm9yICh2YXIgdiA9
IGN4LnZhcnM7IHY7IHYgPSB2Lm5leHQpCi0gICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkg
cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5
bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkgewotICAgIHZhciBjYyA9IHN0YXRlLmNjOwotICAg
IC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KLSAgICAvLyAo
TGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5
IGNhbGwuKQotICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFy
a2VkID0gbnVsbCwgY3guY2MgPSBjYzsKLQotICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Q
cm9wZXJ0eSgiYWxpZ24iKSkKLSAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlOwotCi0g
ICAgd2hpbGUodHJ1ZSkgewotICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5w
b3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDsKLSAgICAgIGlmIChjb21i
aW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7Ci0gICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tj
Yy5sZW5ndGggLSAxXS5sZXgpCi0gICAgICAgICAgY2MucG9wKCkoKTsKLSAgICAgICAgaWYgKGN4
Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKLSAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxl
IiAmJiBpblNjb3BlKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuICJ2YXJpYWJsZS0yIjsKLSAgICAg
ICAgcmV0dXJuIHN0eWxlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIENvbWJpbmF0b3Ig
dXRpbHMKLQotICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBu
dWxsLCBjYzogbnVsbH07Ci0gIGZ1bmN0aW9uIHBhc3MoKSB7Ci0gICAgZm9yICh2YXIgaSA9IGFy
Z3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0p
OwotICB9Ci0gIGZ1bmN0aW9uIGNvbnQoKSB7Ci0gICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVu
dHMpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUp
IHsKLSAgICBmdW5jdGlvbiBpbkxpc3QobGlzdCkgewotICAgICAgZm9yICh2YXIgdiA9IGxpc3Q7
IHY7IHYgPSB2Lm5leHQpCi0gICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuIHRy
dWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRl
OwotICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7Ci0gICAgICBjeC5tYXJrZWQgPSAiZGVmIjsKLSAg
ICAgIGlmIChpbkxpc3Qoc3RhdGUubG9jYWxWYXJzKSkgcmV0dXJuOwotICAgICAgc3RhdGUubG9j
YWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2FsVmFyc307Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGlmIChpbkxpc3Qoc3RhdGUuZ2xvYmFsVmFycykpIHJldHVybjsKLSAgICAg
IGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycykKLSAgICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9
IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0ZS5nbG9iYWxWYXJzfTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBDb21iaW5hdG9ycwotCi0gIHZhciBkZWZhdWx0VmFycyA9IHtuYW1lOiAidGhpcyIsIG5l
eHQ6IHtuYW1lOiAiYXJndW1lbnRzIn19OwotICBmdW5jdGlvbiBwdXNoY29udGV4dCgpIHsKLSAg
ICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4LnN0YXRlLmNvbnRleHQsIHZhcnM6IGN4LnN0
YXRlLmxvY2FsVmFyc307Ci0gICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnM7Ci0g
IH0KLSAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKLSAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBj
eC5zdGF0ZS5jb250ZXh0LnZhcnM7Ci0gICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNv
bnRleHQucHJldjsKLSAgfQotICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKLSAgICB2
YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5k
ZW50ID0gc3RhdGUuaW5kZW50ZWQ7Ci0gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICJz
dGF0IikgaW5kZW50ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKLSAgICAgIHN0YXRlLmxleGlj
YWwgPSBuZXcgSlNMZXhpY2FsKGluZGVudCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxs
LCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKLSAgICB9OwotICAgIHJlc3VsdC5sZXggPSB0cnVlOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgZnVuY3Rpb24gcG9wbGV4KCkgewotICAgIHZhciBz
dGF0ZSA9IGN4LnN0YXRlOwotICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHsKLSAgICAgIGlm
IChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gIikiKQotICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0
YXRlLmxleGljYWwuaW5kZW50ZWQ7Ci0gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNh
bC5wcmV2OwotICAgIH0KLSAgfQotICBwb3BsZXgubGV4ID0gdHJ1ZTsKLQotICBmdW5jdGlvbiBl
eHBlY3Qod2FudGVkKSB7Ci0gICAgZnVuY3Rpb24gZXhwKHR5cGUpIHsKLSAgICAgIGlmICh0eXBl
ID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSAiOyIp
IHJldHVybiBwYXNzKCk7Ci0gICAgICBlbHNlIHJldHVybiBjb250KGV4cCk7Ci0gICAgfTsKLSAg
ICByZXR1cm4gZXhwOwotICB9Ci0KLSAgZnVuY3Rpb24gc3RhdGVtZW50KHR5cGUsIHZhbHVlKSB7
Ci0gICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHB1c2hsZXgoInZhcmRlZiIsIHZh
bHVlLmxlbmd0aCksIHZhcmRlZiwgZXhwZWN0KCI7IiksIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUg
PT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwg
c3RhdGVtZW50LCBwb3BsZXgpOwotICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4g
Y29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKLSAgICBpZiAodHlwZSA9
PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7Ci0gICAgaWYg
KHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwotICAgIGlmICh0eXBlID09ICJpZiIpIHsKLSAg
ICAgIGlmIChjeC5zdGF0ZS5sZXhpY2FsLmluZm8gPT0gImVsc2UiICYmIGN4LnN0YXRlLmNjW2N4
LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleCkKLSAgICAgICAgY3guc3RhdGUuY2MucG9w
KCkoKTsKLSAgICAgIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3Rh
dGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7Ci0gICAgfQotICAgIGlmICh0eXBlID09ICJmdW5j
dGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKLSAgICBpZiAodHlwZSA9PSAiZm9yIikg
cmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBmb3JzcGVjLCBzdGF0ZW1lbnQsIHBvcGxleCk7
Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIp
LCBtYXliZWxhYmVsKTsKLSAgICBpZiAodHlwZSA9PSAic3dpdGNoIikgcmV0dXJuIGNvbnQocHVz
aGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3aXRjaCIpLCBleHBlY3Qo
InsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHBvcGxl
eCwgcG9wbGV4KTsKLSAgICBpZiAodHlwZSA9PSAiY2FzZSIpIHJldHVybiBjb250KGV4cHJlc3Np
b24sIGV4cGVjdCgiOiIpKTsKLSAgICBpZiAodHlwZSA9PSAiZGVmYXVsdCIpIHJldHVybiBjb250
KGV4cGVjdCgiOiIpKTsKLSAgICBpZiAodHlwZSA9PSAiY2F0Y2giKSByZXR1cm4gY29udChwdXNo
bGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBleHBlY3QoIigiKSwgZnVuYXJnLCBleHBlY3QoIiki
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxl
eCwgcG9wY29udGV4dCk7Ci0gICAgaWYgKHR5cGUgPT0gIm1vZHVsZSIpIHJldHVybiBjb250KHB1
c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGFmdGVyTW9kdWxlLCBwb3Bjb250ZXh0LCBwb3Bs
ZXgpOwotICAgIGlmICh0eXBlID09ICJjbGFzcyIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0i
KSwgY2xhc3NOYW1lLCBvYmpsaXQsIHBvcGxleCk7Ci0gICAgaWYgKHR5cGUgPT0gImV4cG9ydCIp
IHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0ZXJFeHBvcnQsIHBvcGxleCk7Ci0gICAg
aWYgKHR5cGUgPT0gImltcG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0ZXJJ
bXBvcnQsIHBvcGxleCk7Ci0gICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNz
aW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKLSAgfQotICBmdW5jdGlvbiBleHByZXNzaW9uKHR5
cGUpIHsKLSAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIGZhbHNlKTsKLSAgfQotICBm
dW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlKSB7Ci0gICAgcmV0dXJuIGV4cHJlc3Npb25J
bm5lcih0eXBlLCB0cnVlKTsKLSAgfQotICBmdW5jdGlvbiBleHByZXNzaW9uSW5uZXIodHlwZSwg
bm9Db21tYSkgewotICAgIGlmIChjeC5zdGF0ZS5mYXRBcnJvd0F0ID09IGN4LnN0cmVhbS5zdGFy
dCkgewotICAgICAgdmFyIGJvZHkgPSBub0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFycm93
Qm9keTsKLSAgICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1
c2hsZXgoIikiKSwgY29tbWFzZXAocGF0dGVybiwgIikiKSwgcG9wbGV4LCBleHBlY3QoIj0+Iiks
IGJvZHksIHBvcGNvbnRleHQpOwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAidmFyaWFibGUiKSBy
ZXR1cm4gcGFzcyhwdXNoY29udGV4dCwgcGF0dGVybiwgZXhwZWN0KCI9PiIpLCBib2R5LCBwb3Bj
b250ZXh0KTsKLSAgICB9Ci0KLSAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJh
dG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYTsKLSAgICBpZiAoYXRvbWljVHlwZXMuaGFz
T3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3ApOwotICAgIGlmICh0eXBlID09
ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9wKTsKLSAgICBpZiAo
dHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IG1heWJlZXhwcmVzc2lv
bk5vQ29tbWEgOiBtYXliZWV4cHJlc3Npb24pOwotICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJu
IGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGNvbXByZWhlbnNpb24sIGV4cGVj
dCgiKSIpLCBwb3BsZXgsIG1heWJlb3ApOwotICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIgfHwg
dHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IGV4cHJlc3Npb25Ob0NvbW1h
IDogZXhwcmVzc2lvbik7Ci0gICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4
KCJdIiksIGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTsKLSAgICBpZiAodHlwZSA9PSAi
eyIpIHJldHVybiBjb250Q29tbWFzZXAob2JqcHJvcCwgIn0iLCBudWxsLCBtYXliZW9wKTsKLSAg
ICBpZiAodHlwZSA9PSAicXVhc2kiKSB7IHJldHVybiBwYXNzKHF1YXNpLCBtYXliZW9wKTsgfQot
ICAgIHJldHVybiBjb250KCk7Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUp
IHsKLSAgICBpZiAodHlwZS5tYXRjaCgvWztcfVwpXF0sXS8pKSByZXR1cm4gcGFzcygpOwotICAg
IHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJlZXhwcmVzc2lv
bk5vQ29tbWEodHlwZSkgewotICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVy
biBwYXNzKCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUg
PT0gIiwiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKLSAgICByZXR1cm4gbWF5YmVvcGVyYXRv
ck5vQ29tbWEodHlwZSwgdmFsdWUsIGZhbHNlKTsKLSAgfQotICBmdW5jdGlvbiBtYXliZW9wZXJh
dG9yTm9Db21tYSh0eXBlLCB2YWx1ZSwgbm9Db21tYSkgewotICAgIHZhciBtZSA9IG5vQ29tbWEg
PT0gZmFsc2UgPyBtYXliZW9wZXJhdG9yQ29tbWEgOiBtYXliZW9wZXJhdG9yTm9Db21tYTsKLSAg
ICB2YXIgZXhwciA9IG5vQ29tbWEgPT0gZmFsc2UgPyBleHByZXNzaW9uIDogZXhwcmVzc2lvbk5v
Q29tbWE7Ci0gICAgaWYgKHZhbHVlID09ICI9PiIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBu
b0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFycm93Qm9keSwgcG9wY29udGV4dCk7Ci0gICAg
aWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgewotICAgICAgaWYgKC9cK1wrfC0tLy50ZXN0KHZhbHVl
KSkgcmV0dXJuIGNvbnQobWUpOwotICAgICAgaWYgKHZhbHVlID09ICI/IikgcmV0dXJuIGNvbnQo
ZXhwcmVzc2lvbiwgZXhwZWN0KCI6IiksIGV4cHIpOwotICAgICAgcmV0dXJuIGNvbnQoZXhwcik7
Ci0gICAgfQotICAgIGlmICh0eXBlID09ICJxdWFzaSIpIHsgcmV0dXJuIHBhc3MocXVhc2ksIG1l
KTsgfQotICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwotICAgIGlmICh0eXBlID09ICIoIikg
cmV0dXJuIGNvbnRDb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIikiLCAiY2FsbCIsIG1lKTsK
LSAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVybiBjb250KHByb3BlcnR5LCBtZSk7Ci0gICAgaWYg
KHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIG1heWJlZXhwcmVzc2lvbiwg
ZXhwZWN0KCJdIiksIHBvcGxleCwgbWUpOwotICB9Ci0gIGZ1bmN0aW9uIHF1YXNpKHR5cGUsIHZh
bHVlKSB7Ci0gICAgaWYgKHR5cGUgIT0gInF1YXNpIikgcmV0dXJuIHBhc3MoKTsKLSAgICBpZiAo
dmFsdWUuc2xpY2UodmFsdWUubGVuZ3RoIC0gMikgIT0gIiR7IikgcmV0dXJuIGNvbnQocXVhc2kp
OwotICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNvbnRpbnVlUXVhc2kpOwotICB9Ci0gIGZ1
bmN0aW9uIGNvbnRpbnVlUXVhc2kodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ9IikgewotICAg
ICAgY3gubWFya2VkID0gInN0cmluZy0yIjsKLSAgICAgIGN4LnN0YXRlLnRva2VuaXplID0gdG9r
ZW5RdWFzaTsKLSAgICAgIHJldHVybiBjb250KHF1YXNpKTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rp
b24gYXJyb3dCb2R5KHR5cGUpIHsKLSAgICBmaW5kRmF0QXJyb3coY3guc3RyZWFtLCBjeC5zdGF0
ZSk7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhzdGF0ZW1lbnQpOwotICAgIHJl
dHVybiBwYXNzKGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIGFycm93Qm9keU5vQ29tbWEo
dHlwZSkgewotICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTsKLSAgICBpZiAo
dHlwZSA9PSAieyIpIHJldHVybiBwYXNzKHN0YXRlbWVudCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhw
cmVzc2lvbk5vQ29tbWEpOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkgewotICAg
IGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwotICAgIHJl
dHVybiBwYXNzKG1heWJlb3BlcmF0b3JDb21tYSwgZXhwZWN0KCI7IiksIHBvcGxleCk7Ci0gIH0K
LSAgZnVuY3Rpb24gcHJvcGVydHkodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIp
IHtjeC5tYXJrZWQgPSAicHJvcGVydHkiOyByZXR1cm4gY29udCgpO30KLSAgfQotICBmdW5jdGlv
biBvYmpwcm9wKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgewot
ICAgICAgY3gubWFya2VkID0gInByb3BlcnR5IjsKLSAgICAgIGlmICh2YWx1ZSA9PSAiZ2V0IiB8
fCB2YWx1ZSA9PSAic2V0IikgcmV0dXJuIGNvbnQoZ2V0dGVyU2V0dGVyKTsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gIm51bWJlciIgfHwgdHlwZSA9PSAic3RyaW5nIikgewotICAgICAgY3gubWFy
a2VkID0ganNvbmxkTW9kZSA/ICJwcm9wZXJ0eSIgOiAodHlwZSArICIgcHJvcGVydHkiKTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gIlsiKSB7Ci0gICAgICByZXR1cm4gY29udChleHByZXNzaW9u
LCBleHBlY3QoIl0iKSwgYWZ0ZXJwcm9wKTsKLSAgICB9Ci0gICAgaWYgKGF0b21pY1R5cGVzLmhh
c093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChhZnRlcnByb3ApOwotICB9Ci0gIGZ1bmN0
aW9uIGdldHRlclNldHRlcih0eXBlKSB7Ci0gICAgaWYgKHR5cGUgIT0gInZhcmlhYmxlIikgcmV0
dXJuIHBhc3MoYWZ0ZXJwcm9wKTsKLSAgICBjeC5tYXJrZWQgPSAicHJvcGVydHkiOwotICAgIHJl
dHVybiBjb250KGZ1bmN0aW9uZGVmKTsKLSAgfQotICBmdW5jdGlvbiBhZnRlcnByb3AodHlwZSkg
ewotICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpOwot
ICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYpOwotICB9Ci0gIGZ1
bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkgewotICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkg
ewotICAgICAgaWYgKHR5cGUgPT0gIiwiKSB7Ci0gICAgICAgIHZhciBsZXggPSBjeC5zdGF0ZS5s
ZXhpY2FsOwotICAgICAgICBpZiAobGV4LmluZm8gPT0gImNhbGwiKSBsZXgucG9zID0gKGxleC5w
b3MgfHwgMCkgKyAxOwotICAgICAgICByZXR1cm4gY29udCh3aGF0LCBwcm9jZWVkKTsKLSAgICAg
IH0KLSAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIHJldHVybiBj
b250KGV4cGVjdChlbmQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKLSAg
ICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKLSAgICAgIHJldHVybiBwYXNzKHdo
YXQsIHByb2NlZWQpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gY29udENvbW1hc2VwKHdoYXQs
IGVuZCwgaW5mbykgewotICAgIGZvciAodmFyIGkgPSAzOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
aSsrKQotICAgICAgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwotICAgIHJldHVybiBjb250KHB1
c2hsZXgoZW5kLCBpbmZvKSwgY29tbWFzZXAod2hhdCwgZW5kKSwgcG9wbGV4KTsKLSAgfQotICBm
dW5jdGlvbiBibG9jayh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgp
OwotICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spOwotICB9Ci0gIGZ1bmN0aW9uIG1h
eWJldHlwZSh0eXBlKSB7Ci0gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSAiOiIpIHJldHVybiBjb250
KHR5cGVkZWYpOwotICB9Ci0gIGZ1bmN0aW9uIHR5cGVkZWYodHlwZSkgewotICAgIGlmICh0eXBl
ID09ICJ2YXJpYWJsZSIpe2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZS0zIjsgcmV0dXJuIGNvbnQoKTt9
Ci0gIH0KLSAgZnVuY3Rpb24gdmFyZGVmKCkgewotICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1h
eWJldHlwZSwgbWF5YmVBc3NpZ24sIHZhcmRlZkNvbnQpOwotICB9Ci0gIGZ1bmN0aW9uIHBhdHRl
cm4odHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7IHJlZ2lzdGVy
KHZhbHVlKTsgcmV0dXJuIGNvbnQoKTsgfQotICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNv
bnRDb21tYXNlcChwYXR0ZXJuLCAiXSIpOwotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNv
bnRDb21tYXNlcChwcm9wcGF0dGVybiwgIn0iKTsKLSAgfQotICBmdW5jdGlvbiBwcm9wcGF0dGVy
bih0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgJiYgIWN4LnN0cmVh
bS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpIHsKLSAgICAgIHJlZ2lzdGVyKHZhbHVlKTsKLSAgICAg
IHJldHVybiBjb250KG1heWJlQXNzaWduKTsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlh
YmxlIikgY3gubWFya2VkID0gInByb3BlcnR5IjsKLSAgICByZXR1cm4gY29udChleHBlY3QoIjoi
KSwgcGF0dGVybiwgbWF5YmVBc3NpZ24pOwotICB9Ci0gIGZ1bmN0aW9uIG1heWJlQXNzaWduKF90
eXBlLCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Np
b25Ob0NvbW1hKTsKLSAgfQotICBmdW5jdGlvbiB2YXJkZWZDb250KHR5cGUpIHsKLSAgICBpZiAo
dHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZik7Ci0gIH0KLSAgZnVuY3Rpb24gbWF5YmVl
bHNlKHR5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIgJiYgdmFsdWUg
PT0gImVsc2UiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiwgImVsc2UiKSwgc3RhdGVtZW50
LCBwb3BsZXgpOwotICB9Ci0gIGZ1bmN0aW9uIGZvcnNwZWModHlwZSkgewotICAgIGlmICh0eXBl
ID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhwZWN0KCIpIiks
IHBvcGxleCk7Ci0gIH0KLSAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewotICAgIGlmICh0eXBl
ID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYsIGV4cGVjdCgiOyIpLCBmb3JzcGVjMik7Ci0g
ICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMik7Ci0gICAgaWYgKHR5cGUg
PT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbm9mKTsKLSAgICByZXR1cm4gcGFz
cyhleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgZm9yc3BlYzIpOwotICB9Ci0gIGZ1bmN0aW9uIGZv
cm1heWJlaW5vZihfdHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gImluIiB8fCB2YWx1
ZSA9PSAib2YiKSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZXhwcmVzc2lv
bik7IH0KLSAgICByZXR1cm4gY29udChtYXliZW9wZXJhdG9yQ29tbWEsIGZvcnNwZWMyKTsKLSAg
fQotICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkgewotICAgIGlmICh0eXBlID09ICI7
IikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpOwotICAgIGlmICh2YWx1ZSA9PSAiaW4iIHx8IHZhbHVl
ID09ICJvZiIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9u
KTsgfQotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBmb3JzcGVjMyk7
Ci0gIH0KLSAgZnVuY3Rpb24gZm9yc3BlYzModHlwZSkgewotICAgIGlmICh0eXBlICE9ICIpIikg
Y29udChleHByZXNzaW9uKTsKLSAgfQotICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1
ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiKiIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVy
biBjb250KGZ1bmN0aW9uZGVmKTt9Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lz
dGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KLSAgICBpZiAodHlwZSA9PSAi
KCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KCIpIiksIGNvbW1hc2VwKGZ1bmFy
ZywgIikiKSwgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpOwotICB9Ci0gIGZ1bmN0aW9u
IGZ1bmFyZyh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJldHVybiBjb250KGZ1
bmFyZyk7Ci0gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlKTsKLSAgfQotICBmdW5j
dGlvbiBjbGFzc05hbWUodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUi
KSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChjbGFzc05hbWVBZnRlcik7fQotICB9Ci0g
IGZ1bmN0aW9uIGNsYXNzTmFtZUFmdGVyKF90eXBlLCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9
PSAiZXh0ZW5kcyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwotICB9Ci0gIGZ1bmN0aW9uIG9i
amxpdCh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udENvbW1hc2VwKG9i
anByb3AsICJ9Iik7Ci0gIH0KLSAgZnVuY3Rpb24gYWZ0ZXJNb2R1bGUodHlwZSwgdmFsdWUpIHsK
LSAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoc3RhdGVtZW50KTsKLSAgICBp
ZiAodHlwZSA9PSAidmFyaWFibGUiKSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQobWF5
YmVGcm9tKTsgfQotICB9Ci0gIGZ1bmN0aW9uIGFmdGVyRXhwb3J0KF90eXBlLCB2YWx1ZSkgewot
ICAgIGlmICh2YWx1ZSA9PSAiKiIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29u
dChtYXliZUZyb20sIGV4cGVjdCgiOyIpKTsgfQotICAgIGlmICh2YWx1ZSA9PSAiZGVmYXVsdCIp
IHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3Qo
IjsiKSk7IH0KLSAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQpOwotICB9Ci0gIGZ1bmN0aW9uIGFm
dGVySW1wb3J0KHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQo
KTsKLSAgICByZXR1cm4gcGFzcyhpbXBvcnRTcGVjLCBtYXliZUZyb20pOwotICB9Ci0gIGZ1bmN0
aW9uIGltcG9ydFNwZWModHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAieyIpIHJldHVy
biBjb250Q29tbWFzZXAoaW1wb3J0U3BlYywgIn0iKTsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFi
bGUiKSByZWdpc3Rlcih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnQoKTsKLSAgfQotICBmdW5jdGlv
biBtYXliZUZyb20oX3R5cGUsIHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09ICJmcm9tIikgeyBj
eC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9Ci0gIH0KLSAg
ZnVuY3Rpb24gYXJyYXlMaXRlcmFsKHR5cGUpIHsKLSAgICBpZiAodHlwZSA9PSAiXSIpIHJldHVy
biBjb250KCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEsIG1heWJlQXJyYXlD
b21wcmVoZW5zaW9uKTsKLSAgfQotICBmdW5jdGlvbiBtYXliZUFycmF5Q29tcHJlaGVuc2lvbih0
eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBwYXNzKGNvbXByZWhlbnNpb24s
IGV4cGVjdCgiXSIpKTsKLSAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KGNvbW1hc2Vw
KGV4cHJlc3Npb25Ob0NvbW1hLCAiXSIpKTsKLSAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHBy
ZXNzaW9uTm9Db21tYSwgIl0iKSk7Ci0gIH0KLSAgZnVuY3Rpb24gY29tcHJlaGVuc2lvbih0eXBl
KSB7Ci0gICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KGZvcnNwZWMsIGNvbXByZWhl
bnNpb24pOwotICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGNv
bXByZWhlbnNpb24pOwotICB9Ci0KLSAgLy8gSW50ZXJmYWNlCi0KLSAgcmV0dXJuIHsKLSAgICBz
dGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7Ci0gICAgICB2YXIgc3RhdGUgPSB7Ci0g
ICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCi0gICAgICAgIGxhc3RUeXBlOiAic29mIiwKLSAg
ICAgICAgY2M6IFtdLAotICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29sdW1u
IHx8IDApIC0gaW5kZW50VW5pdCwgMCwgImJsb2NrIiwgZmFsc2UpLAotICAgICAgICBsb2NhbFZh
cnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsCi0gICAgICAgIGNvbnRleHQ6IHBhcnNlckNvbmZp
Zy5sb2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LAotICAgICAgICBp
bmRlbnRlZDogMAotICAgICAgfTsKLSAgICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycyAm
JiB0eXBlb2YgcGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgPT0gIm9iamVjdCIpCi0gICAgICAgIHN0
YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFsVmFyczsKLSAgICAgIHJldHVybiBz
dGF0ZTsKLSAgICB9LAotCi0gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAg
ICAgIGlmIChzdHJlYW0uc29sKCkpIHsKLSAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093
blByb3BlcnR5KCJhbGlnbiIpKQotICAgICAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSBmYWxz
ZTsKLSAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKLSAgICAg
ICAgZmluZEZhdEFycm93KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfQotICAgICAgaWYgKHN0YXRl
LnRva2VuaXplICE9IHRva2VuQ29tbWVudCAmJiBzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51
bGw7Ci0gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKLSAg
ICAgIGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwotICAgICAgc3RhdGUubGFz
dFR5cGUgPSB0eXBlID09ICJvcGVyYXRvciIgJiYgKGNvbnRlbnQgPT0gIisrIiB8fCBjb250ZW50
ID09ICItLSIpID8gImluY2RlYyIgOiB0eXBlOwotICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUs
IHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pOwotICAgIH0sCi0KLSAgICBpbmRlbnQ6IGZ1
bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKLSAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0
b2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICBpZiAoc3RhdGUudG9r
ZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKLSAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0
QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWw7Ci0g
ICAgICAvLyBLbHVkZ2UgdG8gcHJldmVudCAnbWF5YmVsc2UnIGZyb20gYmxvY2tpbmcgbGV4aWNh
bCBzY29wZSBwb3BzCi0gICAgICBpZiAoIS9eXHMqZWxzZVxiLy50ZXN0KHRleHRBZnRlcikpIGZv
ciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICB2
YXIgYyA9IHN0YXRlLmNjW2ldOwotICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBs
ZXhpY2FsLnByZXY7Ci0gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlKSBicmVhazsKLSAg
ICAgIH0KLSAgICAgIGlmIChsZXhpY2FsLnR5cGUgPT0gInN0YXQiICYmIGZpcnN0Q2hhciA9PSAi
fSIpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7Ci0gICAgICBpZiAoc3RhdGVtZW50SW5kZW50ICYm
IGxleGljYWwudHlwZSA9PSAiKSIgJiYgbGV4aWNhbC5wcmV2LnR5cGUgPT0gInN0YXQiKQotICAg
ICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2OwotICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5
cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKLQotICAgICAgaWYgKHR5cGUgPT0gInZh
cmRlZiIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVy
YXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gbGV4aWNhbC5pbmZvICsgMSA6IDApOwot
ICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIgJiYgZmlyc3RDaGFyID09ICJ7IikgcmV0dXJu
IGxleGljYWwuaW5kZW50ZWQ7Ci0gICAgICBlbHNlIGlmICh0eXBlID09ICJmb3JtIikgcmV0dXJu
IGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwotICAgICAgZWxzZSBpZiAodHlwZSA9PSAi
c3RhdCIpCi0gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBl
ID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiID8gc3RhdGVtZW50SW5kZW50
IHx8IGluZGVudFVuaXQgOiAwKTsKLSAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dp
dGNoIiAmJiAhY2xvc2luZyAmJiBwYXJzZXJDb25maWcuZG91YmxlSW5kZW50U3dpdGNoICE9IGZh
bHNlKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/OmNhc2V8ZGVmYXVs
dClcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTsKLSAg
ICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9z
aW5nID8gMCA6IDEpOwotICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9z
aW5nID8gMCA6IGluZGVudFVuaXQpOwotICAgIH0sCi0KLSAgICBlbGVjdHJpY0NoYXJzOiAiOnt9
IiwKLSAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKLSAgICBi
bG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCi0gICAgbGluZUNvbW1lbnQ6
IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCi0gICAgZm9sZDogImJyYWNlIiwKLQotICAgIGhlbHBl
clR5cGU6IGpzb25Nb2RlID8gImpzb24iIDogImphdmFzY3JpcHQiLAotICAgIGpzb25sZE1vZGU6
IGpzb25sZE1vZGUsCi0gICAganNvbk1vZGU6IGpzb25Nb2RlCi0gIH07Ci19KTsKLQotQ29kZU1p
cnJvci5yZWdpc3RlckhlbHBlcigid29yZENoYXJzIiwgImphdmFzY3JpcHQiLCAvW1xcdyRdLyk7
Ci0KLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9qYXZhc2NyaXB0IiwgImphdmFzY3JpcHQi
KTsKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9lY21hc2NyaXB0IiwgImphdmFzY3JpcHQi
KTsKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJqYXZh
c2NyaXB0Iik7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQi
LCAiamF2YXNjcmlwdCIpOwotQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9qc29u
Iiwge25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwotQ29kZU1pcnJvci5kZWZpbmVN
SU1FKCJhcHBsaWNhdGlvbi94LWpzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVl
fSk7Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2xkK2pzb24iLCB7bmFtZTog
ImphdmFzY3JpcHQiLCBqc29ubGQ6IHRydWV9KTsKLUNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4
dC90eXBlc2NyaXB0IiwgeyBuYW1lOiAiamF2YXNjcmlwdCIsIHR5cGVzY3JpcHQ6IHRydWUgfSk7
Ci1Db2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3R5cGVzY3JpcHQiLCB7IG5hbWU6
ICJqYXZhc2NyaXB0IiwgdHlwZXNjcmlwdDogdHJ1ZSB9KTsKLQotfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db2RlTWlycm9yRm9ybWF0
dGVycy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVN
aXJyb3JGb3JtYXR0ZXJzLmpzCmluZGV4IDcxNDM5Y2QuLjRmNWNmYjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0
ZXJzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0Nv
ZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCkBAIC0yMTEsNyArMjExLDcgQEAgQ29kZU1pcnJvci5leHRl
bmRNb2RlKCJqYXZhc2NyaXB0IiwgewogICAgICAgICBpZiAoIWlzQ29tbWVudCAmJiBzdGF0ZS5s
ZXhpY2FsLnByZXYgJiYgc3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJmb3JtIiAmJiAhc3Rh
dGUubGV4aWNhbC5wcmV2Ll9qc1ByZXR0eVByaW50TWFya2VyICYmIChsYXN0Q29udGVudCA9PT0g
IikiIHx8IGxhc3RDb250ZW50ID09PSAiZWxzZSIgfHwgbGFzdENvbnRlbnQgPT09ICJkbyIpICYm
IChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICIpIikpIHsKICAgICAgICAgICAgIGlmIChjb250ZW50
ID09PSAieyIpIHsKICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBzdGF0ZSBhdCB0aGUgb3Bl
bmluZyBicmFjZSBzbyB3ZSBjYW4gcmV0dXJuIHRvIGl0IHdoZW4gd2Ugc2VlICJ9Ii4KLSAgICAg
ICAgICAgICAgICB2YXIgc2F2ZWRTdGF0ZSA9IHtpbmRlbnRDb3VudDpzdGF0ZS5fanNQcmV0dHlQ
cmludC5pbmRlbnRDb3VudCwgb3BlbkJyYWNlVHJhY2tpbmdDb3VudDpzdGF0ZS5fanNQcmV0dHlQ
cmludC5vcGVuQnJhY2VUcmFja2luZ0NvdW50fTsKKyAgICAgICAgICAgICAgICB2YXIgc2F2ZWRT
dGF0ZSA9IHtpbmRlbnRDb3VudDogc3RhdGUuX2pzUHJldHR5UHJpbnQuaW5kZW50Q291bnQsIG9w
ZW5CcmFjZVRyYWNraW5nQ291bnQ6IHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNr
aW5nQ291bnR9OwogICAgICAgICAgICAgICAgIHN0YXRlLl9qc1ByZXR0eVByaW50Lm9wZW5CcmFj
ZVN0YXJ0TWFya2Vycy5wdXNoKHNhdmVkU3RhdGUpOwogICAgICAgICAgICAgICAgIHN0YXRlLl9q
c1ByZXR0eVByaW50Lm9wZW5CcmFjZVRyYWNraW5nQ291bnQgPSAxOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgIT09ICJ9IikgewpAQCAtMzMzLDcgKzMzMyw3IEBA
IENvZGVNaXJyb3IuZXh0ZW5kTW9kZSgiY3NzIiwgewogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3RhdGUgPT09ICJwcm9wIikgLy8g
LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC4uLil0cmFuc2xhdGUoLi4uKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXRlID09
PSAibWVkaWEiIHx8IHN0YXRlLnN0YXRlID09PSAibWVkaWFfcGFyZW5zIikgLy8gU3BhY2UgaW4g
Im5vdChmb28pYW5kIiBidXQgbm90IGF0IHRoZSBlbmQgb2YgIm5vdChub3QoZm9vKSkiIAorICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0ZSA9
PT0gIm1lZGlhX3BhcmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9vKWFuZCIgYnV0IG5vdCBhdCB0
aGUgZW5kIG9mICJub3Qobm90KGZvbykpIgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNvbG9yOiByZ2IoLi4uKTsKICAg
ICAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>