<?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>93620</bug_id>
          
          <creation_ts>2012-08-09 09:33:00 -0700</creation_ts>
          <short_desc>Web Inspector: add codemirror library as an experiment</short_desc>
          <delta_ts>2012-08-09 10:27:02 -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 (Deprecated)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691504</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-09 09:33:00 -0700</bug_when>
    <thetext>This change adds codemirror, deploys it, but does not include it into the inspector.html. Clients need to fetch it using XHR and eval into the inspector&apos;s context to use as a part of their experiements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691513</commentid>
    <comment_count>1</comment_count>
      <attachid>157471</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-09 09:44:36 -0700</bug_when>
    <thetext>Created attachment 157471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691554</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-09 10:27:02 -0700</bug_when>
    <thetext>Committed r125184: &lt;http://trac.webkit.org/changeset/125184&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157471</attachid>
            <date>2012-08-09 09:44:36 -0700</date>
            <delta_ts>2012-08-09 10:24:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93620-20120809204407.patch</filename>
            <type>text/plain</type>
            <size>187154</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA4MzcwM2M5ODQ4NmE3
ZGIyMGNhOTc5NDY5ZjhjOGI5ODUzMWQyNi4uNjY3NTRkNDE4MDMyZDUwNzUzODA2ZTY2NjVlODUy
MWU2ZmNmMGFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTA5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFkZCBjb2RlbWlycm9yIGxpYnJhcnkgYXMgYW4gZXhwZXJpbWVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM2MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZGRzIGNvZGVt
aXJyb3IsIGRlcGxveXMgaXQsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIGl0IGludG8gdGhlIGluc3Bl
Y3Rvci5odG1sLiBDbGllbnRzIG5lZWQgdG8gZmV0Y2ggaXQKKyAgICAgICAgdXNpbmcgWEhSIGFu
ZCBldmFsIGludG8gdGhlIGluc3BlY3RvcidzIGNvbnRleHQgdG8gdXNlIGFzIGEgcGFydCBvZiB0
aGVpciBleHBlcmltZW50cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9MSUNFTlNF
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3Nz
OiBBZGRlZC4KKyAgICAgICAgKC5Db2RlTWlycm9yKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2NtL3htbC5qczogQWRkZWQuCisgICAgICAgIChDb2RlTWlycm9yLmRlZmluZU1vZGUu
KToKKyAgICAgICAgKENvZGVNaXJyb3IuZGVmaW5lTW9kZSk6CisKIDIwMTItMDgtMDggIEFuZHJl
eSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBkaXNwbGF5IHByb2dyZXNzIGJhciB3aGlsZSBsb2FkaW5nIHRpbWVsaW5lIGRhdGEKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDU2NzI1ZTQ5ZmEyZTIwMmY3ODJlMzFmM2FjZjk2Nzhl
OTI3NTlhYi4uMzY3ZTE1MTQ3YmU2YzdmODNlZGM0YjEwMDRkMDMxNTZiMzdkNjM0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wOC0wOSAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBhZGQgY29kZW1pcnJvciBsaWJyYXJ5IGFzIGFuIGV4cGVyaW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorCiAyMDEyLTA4
LTA5ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW1dIFB1bGwgaW4gdGhlIGFuZHJvaWRfdG9vbHMgZGlyZWN0b3J5IGZvciBBbmRyb2lkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggYTYyYmE4YjY1YWE3YjY1N2RmOTA3MmQ2N2I2MDljYzFkNGRlMDVi
MC4uMGIwYzJmMGU1NDE4MDFjODhiMzkzYzJmMzNlYzY4OTM0ZTZmZWU2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNjQzOCw5ICs2NDM4LDExIEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3JTeW50YXhIaWdobGlnaHQuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL3BvcG92ZXIuY3NzJywKICAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3Jf
c3RhbmRhbG9uZV9jc3NfZmlsZXMpJywKKyAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3Jfc3Rh
bmRhbG9uZV9qc19maWxlcyknLAogICAgICAgICBdLAogICAgICAgICAnd2ViaW5zcGVjdG9yX3N0
YW5kYWxvbmVfY3NzX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
YXVkaXRzUGFuZWwuY3NzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nv
ZGVtaXJyb3IuY3NzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2RhdGFHcmlk
LmNzcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNz
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9maWx0ZXJlZEl0ZW1TZWxlY3Rp
b25EaWFsb2cuY3NzJywKQEAgLTY0NjQsNiArNjQ2NiwxMyBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvdGV4dFByb21wdC5jc3MnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvdGltZWxpbmVQYW5lbC5jc3MnLAogICAgICAgICBdLAorICAgICAgICAnd2ViaW5z
cGVjdG9yX3N0YW5kYWxvbmVfanNfZmlsZXMnOiBbCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9jbS9jb2RlbWlycm9yLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL2NtL2Nzcy5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9odG1s
bWl4ZWQuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvY20vamF2YXNjcmlw
dC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9jbS94bWwuanMnLAorICAg
ICAgICBdLAogICAgICAgICAnd2ViaW5zcGVjdG9yX3VnbGlmeWpzX2ZpbGVzJzogWwogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVWdsaWZ5SlMvcGFyc2UtanMuanMnLAogICAgICAg
ICBdLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCA2ZGU0ODk5YThlY2VjOWZlNzgxYzExNzg5MjFlYWE0YzQwMTk1NWRkLi5hYWUwYzMzMWJhOGM4
ZjMyYjNkZTgyNTBjYzk4MTFiYjhlMmZkMGFhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzU0ODYsNiArNzU0ODYsMzAgQEAKIAkJCQkJPgog
CQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxm
cm9udC1lbmRcY21cY29kZW1pcnJvci5jc3MiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGNvZGVtaXJy
b3IuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGNtXGNzcy5qcyIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcY21c
aHRtbG1peGVkLmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxjbVxqYXZhc2NyaXB0LmpzIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxjbVx4bWwuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFiYXNlLmpzIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjCmluZGV4IDJkMGEyMTVhMjcyZDI5NTY3MTNjMTNjMjBhYzE0MmE0Nzk0M2UyMDku
LjA1MTY4OTc5MTBiNjM4NTU2YmE0NWI4YmFiOTZhNTllZGQ5ZDJlMTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTMyLDYgKzMyLDEyIEBA
CiAgICAgPGZpbGU+Q1NTS2V5d29yZENvbXBsZXRpb25zLmpzPC9maWxlPgogICAgIDxmaWxlPkNT
U1NlbGVjdG9yUHJvZmlsZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q1NTU3R5bGVNb2RlbC5q
czwvZmlsZT4KKyAgICA8ZmlsZT5jbS9jb2RlbWlycm9yLmNzczwvZmlsZT4KKyAgICA8ZmlsZT5j
bS9jb2RlbWlycm9yLmpzPC9maWxlPgorICAgIDxmaWxlPmNtL2Nzcy5qczwvZmlsZT4KKyAgICA8
ZmlsZT5jbS9odG1sbWl4ZWQuanM8L2ZpbGU+CisgICAgPGZpbGU+Y20vamF2YXNjcmlwdC5qczwv
ZmlsZT4KKyAgICA8ZmlsZT5jbS94bWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YWJhc2UuanM8
L2ZpbGU+CiAgICAgPGZpbGU+RGF0YWJhc2VRdWVyeVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+
RGF0YWJhc2VUYWJsZVZpZXcuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2NtL0xJQ0VOU0UgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2NtL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzkxNmU5NmIyZGQyYjk2Yzg2M2Y5Y2Q4
ZTk3MDkxMDlmNjc1MTJlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvY20vTElDRU5TRQpAQCAtMCwwICsxLDIzIEBACitDb3B5cmlnaHQgKEMp
IDIwMTIgYnkgTWFyaWpuIEhhdmVyYmVrZSA8bWFyaWpuaEBnbWFpbC5jb20+CisKK1Blcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp
bmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv
biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91
dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0
byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu
c2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl
cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj
dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwg
Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JT
IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S
IE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU
IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU
SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRX
QVJFLgorCitQbGVhc2Ugbm90ZSB0aGF0IHNvbWUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIENvZGVN
aXJyb3IgZGlzdHJpYnV0aW9uCitpbmNsdWRlIHRoZWlyIG93biBMSUNFTlNFIGZpbGVzLCBhbmQg
YXJlIHJlbGVhc2VkIHVuZGVyIGRpZmZlcmVudAorbGljZW5jZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuY3NzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMGU5MWIyZDczM2ExMWZmZGExYjBlMmZmM2I1MGE0YjMwYjViYWM0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNz
cwpAQCAtMCwwICsxLDE3MyBAQAorLkNvZGVNaXJyb3IgeworICBsaW5lLWhlaWdodDogMWVtOwor
ICBmb250LWZhbWlseTogbW9ub3NwYWNlOworCisgIC8qIE5lY2Vzc2FyeSBzbyB0aGUgc2Nyb2xs
YmFyIGNhbiBiZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgd2l0aGluIHRoZSB3cmFwcGVyIG9uIExp
b24uICovCisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgLyogVGhpcyBwcmV2ZW50cyB1bndhbnRl
ZCBzY3JvbGxiYXJzIGZyb20gc2hvd2luZyB1cCBvbiB0aGUgYm9keSBhbmQgd3JhcHBlciBpbiBJ
RS4gKi8KKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLkNvZGVNaXJyb3Itc2Nyb2xsIHsKKyAg
b3ZlcmZsb3c6IGF1dG87CisgIGhlaWdodDogMzAwcHg7CisgIC8qIFRoaXMgaXMgbmVlZGVkIHRv
IHByZXZlbnQgYW4gSUVbNjddIGJ1ZyB3aGVyZSB0aGUgc2Nyb2xsZWQgY29udGVudAorICAgICBp
cyB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIHNjcm9sbGluZyBib3guICovCisgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgb3V0bGluZTogbm9uZTsKK30KKworLyogVmVydGljYWwgc2Nyb2xsYmFyICov
CisuQ29kZU1pcnJvci1zY3JvbGxiYXIgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHJpZ2h0
OiAwOyB0b3A6IDA7CisgIG92ZXJmbG93LXg6IGhpZGRlbjsKKyAgb3ZlcmZsb3cteTogc2Nyb2xs
OworICB6LWluZGV4OiA1OworfQorLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWlubmVyIHsKKyAgLyog
VGhpcyBuZWVkcyB0byBoYXZlIGEgbm9uemVybyB3aWR0aCBpbiBvcmRlciBmb3IgdGhlIHNjcm9s
bGJhciB0byBhcHBlYXIKKyAgICAgaW4gRmlyZWZveCBhbmQgSUU5LiAqLworICB3aWR0aDogMXB4
OworfQorLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLmNtLXNiLW92ZXJsYXAgeworICAvKiBFbnN1cmUg
dGhhdCB0aGUgc2Nyb2xsYmFyIGFwcGVhcnMgaW4gTGlvbiwgYW5kIHRoYXQgaXQgb3ZlcmxhcHMg
dGhlIGNvbnRlbnQKKyAgICAgcmF0aGVyIHRoYW4gc2l0dGluZyB0byB0aGUgcmlnaHQgb2YgaXQu
ICovCisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgei1pbmRleDogMTsKKyAgZmxvYXQ6IG5vbmU7
CisgIHJpZ2h0OiAwOworICBtaW4td2lkdGg6IDEycHg7Cit9CisuQ29kZU1pcnJvci1zY3JvbGxi
YXIuY20tc2Itbm9ub3ZlcmxhcCB7CisgIG1pbi13aWR0aDogMTJweDsKK30KKy5Db2RlTWlycm9y
LXNjcm9sbGJhci5jbS1zYi1pZTcgeworICBtaW4td2lkdGg6IDE4cHg7Cit9CisKKy5Db2RlTWly
cm9yLWd1dHRlciB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOworICB6
LWluZGV4OiAxMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKKyAgYm9yZGVyLXJpZ2h0
OiAxcHggc29saWQgI2VlZTsKKyAgbWluLXdpZHRoOiAyZW07CisgIGhlaWdodDogMTAwJTsKK30K
Ky5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsKKyAgY29sb3I6ICNhYWE7CisgIHRleHQtYWxpZ246
IHJpZ2h0OworICBwYWRkaW5nOiAuNGVtIC4yZW0gLjRlbSAuNGVtOworICB3aGl0ZS1zcGFjZTog
cHJlICFpbXBvcnRhbnQ7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy5Db2RlTWlycm9yLWxpbmVz
IHsKKyAgcGFkZGluZzogLjRlbTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgY3Vyc29yOiB0ZXh0
OworfQorCisuQ29kZU1pcnJvciBwcmUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CisgIC13
ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKKyAgLW8tYm9yZGVyLXJhZGl1czogMDsKKyAgYm9yZGVy
LXJhZGl1czogMDsKKyAgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJh
Y2tncm91bmQ6IHRyYW5zcGFyZW50OworICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgZm9udC1z
aXplOiBpbmhlcml0OworICBwYWRkaW5nOiAwOyBtYXJnaW46IDA7CisgIHdoaXRlLXNwYWNlOiBw
cmU7CisgIHdvcmQtd3JhcDogbm9ybWFsOworICBsaW5lLWhlaWdodDogaW5oZXJpdDsKKyAgY29s
b3I6IGluaGVyaXQ7Cit9CisKKy5Db2RlTWlycm9yLXdyYXAgcHJlIHsKKyAgd29yZC13cmFwOiBi
cmVhay13b3JkOworICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CisgIHdvcmQtYnJlYWs6IG5vcm1h
bDsKK30KKy5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKKyAgb3ZlcmZsb3ct
eDogaGlkZGVuOworfQorCisuQ29kZU1pcnJvciB0ZXh0YXJlYSB7CisgIG91dGxpbmU6IG5vbmUg
IWltcG9ydGFudDsKK30KKworLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKKyAg
ei1pbmRleDogMTA7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdmlzaWJpbGl0eTogaGlkZGVu
OworICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOworICBib3JkZXItcmlnaHQ6IG5vbmU7
CisgIHdpZHRoOiAwOworfQorLmNtLWtleW1hcC1mYXQtY3Vyc29yIHByZS5Db2RlTWlycm9yLWN1
cnNvciB7CisgIHdpZHRoOiBhdXRvOworICBib3JkZXI6IDA7CisgIGJhY2tncm91bmQ6IHRyYW5z
cGFyZW50OworICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDIwMCwgMCwgLjQpOworICBmaWx0ZXI6IHBy
b2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM2
NjAwYzgwMCwgZW5kQ29sb3JzdHI9IzRjMDBjODAwKTsKK30KKy8qIEtsdWRnZSB0byB0dXJuIG9m
ZiBmaWx0ZXIgaW4gaWU5Kywgd2hpY2ggYWxzbyBhY2NlcHRzIHJnYmEgKi8KKy5jbS1rZXltYXAt
ZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3I6bm90KCNub25zZW5zZV9pZCkgeworICBm
aWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVk
PWZhbHNlKTsKK30KKy5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLWN1cnNvci5Db2RlTWlycm9y
LW92ZXJ3cml0ZSB7fQorLkNvZGVNaXJyb3ItZm9jdXNlZCBwcmUuQ29kZU1pcnJvci1jdXJzb3Ig
eworICB2aXNpYmlsaXR5OiB2aXNpYmxlOworfQorCitkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7
IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KKy5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJy
b3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CisKKy5Db2RlTWlycm9yLXNlYXJj
aGluZyB7CisgIGJhY2tncm91bmQ6ICNmZmE7CisgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUs
IDAsIC40KTsKK30KKworLyogRGVmYXVsdCB0aGVtZSAqLworCisuY20tcy1kZWZhdWx0IHNwYW4u
Y20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQorLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0b20ge2Nv
bG9yOiAjMjE5O30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30K
Ky5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1kZWYge2NvbG9yOiAjMDBmO30KKy5jbS1zLWRlZmF1bHQg
c3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12
YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9CisuY20tcy1kZWZhdWx0IHNwYW4uY20tdmFyaWFibGUt
MyB7Y29sb3I6ICMwODU7fQorLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjog
YmxhY2s7fQorLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW9wZXJhdG9yIHtjb2xvcjogYmxhY2s7fQor
LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjYTUwO30KKy5jbS1zLWRlZmF1
bHQgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1z
dHJpbmctMiB7Y29sb3I6ICNmNTA7fQorLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW1ldGEge2NvbG9y
OiAjNTU1O30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQorLmNt
LXMtZGVmYXVsdCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQorLmNtLXMtZGVmYXVs
dCBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1i
cmFja2V0IHtjb2xvcjogI2NjNzt9CisuY20tcy1kZWZhdWx0IHNwYW4uY20tdGFnIHtjb2xvcjog
IzE3MDt9CisuY20tcy1kZWZhdWx0IHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjogIzAwYzt9Cisu
Y20tcy1kZWZhdWx0IHNwYW4uY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9CisuY20tcy1kZWZhdWx0
IHNwYW4uY20tcXVvdGUge2NvbG9yOiAjMDkwO30KKy5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1ociB7
Y29sb3I6ICM5OTk7fQorLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpbmsge2NvbG9yOiAjMDBjO30K
Kworc3Bhbi5jbS1oZWFkZXIsIHNwYW4uY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9Citz
cGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQorc3Bhbi5jbS1lbXN0cm9uZyB7Zm9udC1z
dHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDt9CitzcGFuLmNtLWxpbmsge3RleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lO30KKworc3Bhbi5jbS1pbnZhbGlkY2hhciB7Y29sb3I6ICNmMDA7
fQorCitkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtjb2xv
cjogIzBmMDt9CitkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFj
a2V0IHtjb2xvcjogI2YyMjt9CisKK0BtZWRpYSBwcmludCB7CisKKyAgLyogSGlkZSB0aGUgY3Vy
c29yIHdoZW4gcHJpbnRpbmcgKi8KKyAgLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29y
IHsKKyAgICB2aXNpYmlsaXR5OiBoaWRkZW47CisgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Y20vY29kZW1pcnJvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20v
Y29kZW1pcnJvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2I4ZjhjOTljOTQ1MDkwODE3ODk4NWVmN2QxYmEx
M2E3NGY5MWVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9jbS9jb2RlbWlycm9yLmpzCkBAIC0wLDAgKzEsMzIyMCBAQAorLy8gQWxsIGZ1bmN0
aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBlZGl0b3IncyBzdGF0ZSBsaXZlIGluc2lkZQor
Ly8gdGhlIENvZGVNaXJyb3IgZnVuY3Rpb24uIEJlbG93IHRoYXQsIGF0IHRoZSBib3R0b20gb2Yg
dGhlIGZpbGUsCisvLyBzb21lIHV0aWxpdGllcyBhcmUgZGVmaW5lZC4KKworLy8gQ29kZU1pcnJv
ciBpcyB0aGUgb25seSBnbG9iYWwgdmFyIHdlIGNsYWltCit2YXIgQ29kZU1pcnJvciA9IChmdW5j
dGlvbigpIHsKKyAgInVzZSBzdHJpY3QiOworICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0
IHByb2R1Y2VzIGFuIGVkaXRvciBpbnN0YW5jZS4gSXRzCisgIC8vIGNsb3N1cmUgaXMgdXNlZCB0
byBzdG9yZSB0aGUgZWRpdG9yIHN0YXRlLgorICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBn
aXZlbk9wdGlvbnMpIHsKKyAgICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIG9wdGlvbnMgYmFzZWQg
b24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KKyAgICB2YXIgb3B0aW9ucyA9IHt9LCBkZWZh
dWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHM7CisgICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRz
KQorICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KG9wdCkpCisgICAgICAgIG9wdGlv
bnNbb3B0XSA9IChnaXZlbk9wdGlvbnMgJiYgZ2l2ZW5PcHRpb25zLmhhc093blByb3BlcnR5KG9w
dCkgPyBnaXZlbk9wdGlvbnMgOiBkZWZhdWx0cylbb3B0XTsKKworICAgIHZhciBpbnB1dCA9IGVs
dCgidGV4dGFyZWEiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAw
OyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbSIpOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSgid3Jh
cCIsICJvZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsgaW5w
dXQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsKKyAgICAvLyBXcmFwcyBh
bmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKKyAgICB2YXIgaW5wdXREaXYgPSBlbHQoImRpdiIsIFtp
bnB1dF0sIG51bGwsICJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRo
OiAzcHg7IGhlaWdodDogMHB4OyIpOworICAgIC8vIFRoZSBlbXB0eSBzY3JvbGxiYXIgY29udGVu
dCwgdXNlZCBzb2xlbHkgZm9yIG1hbmFnaW5nIHRoZSBzY3JvbGxiYXIgdGh1bWIuCisgICAgdmFy
IHNjcm9sbGJhcklubmVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zY3JvbGxiYXIt
aW5uZXIiKTsKKyAgICAvLyBUaGUgdmVydGljYWwgc2Nyb2xsYmFyLiBIb3Jpem9udGFsIHNjcm9s
bGluZyBpcyBoYW5kbGVkIGJ5IHRoZSBzY3JvbGxlciBpdHNlbGYuCisgICAgdmFyIHNjcm9sbGJh
ciA9IGVsdCgiZGl2IiwgW3Njcm9sbGJhcklubmVyXSwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFyIik7
CisgICAgLy8gRElWcyBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBhY3R1YWwgY29k
ZQorICAgIHZhciBsaW5lRGl2ID0gZWx0KCJkaXYiKSwgc2VsZWN0aW9uRGl2ID0gZWx0KCJkaXYi
LCBudWxsLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAtMSIpOworICAgIC8v
IEJsaW5reSBjdXJzb3IsIGFuZCBlbGVtZW50IHVzZWQgdG8gZW5zdXJlIGN1cnNvciBmaXRzIGF0
IHRoZSBlbmQgb2YgYSBsaW5lCisgICAgdmFyIGN1cnNvciA9IGVsdCgicHJlIiwgIlx1MDBhMCIs
ICJDb2RlTWlycm9yLWN1cnNvciIpLCB3aWR0aEZvcmNlciA9IGVsdCgicHJlIiwgIlx1MDBhMCIs
ICJDb2RlTWlycm9yLWN1cnNvciIsICJ2aXNpYmlsaXR5OiBoaWRkZW4iKTsKKyAgICAvLyBVc2Vk
IHRvIG1lYXN1cmUgdGV4dCBzaXplCisgICAgdmFyIG1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGws
IG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDBweDsgb3Zl
cmZsb3c6IGhpZGRlbjsgdmlzaWJpbGl0eTogaGlkZGVuOyIpOworICAgIHZhciBsaW5lU3BhY2Ug
PSBlbHQoImRpdiIsIFttZWFzdXJlLCBjdXJzb3IsIHdpZHRoRm9yY2VyLCBzZWxlY3Rpb25EaXYs
IGxpbmVEaXZdLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAwIik7CisgICAg
dmFyIGd1dHRlclRleHQgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci10ZXh0
IiksIGd1dHRlciA9IGVsdCgiZGl2IiwgW2d1dHRlclRleHRdLCAiQ29kZU1pcnJvci1ndXR0ZXIi
KTsKKyAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcK
KyAgICB2YXIgbW92ZXIgPSBlbHQoImRpdiIsIFtndXR0ZXIsIGVsdCgiZGl2IiwgW2xpbmVTcGFj
ZV0sICJDb2RlTWlycm9yLWxpbmVzIildLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIik7Cisg
ICAgLy8gU2V0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKKyAg
ICB2YXIgc2l6ZXIgPSBlbHQoImRpdiIsIFttb3Zlcl0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRp
dmUiKTsKKyAgICAvLyBQcm92aWRlcyBzY3JvbGxpbmcKKyAgICB2YXIgc2Nyb2xsZXIgPSBlbHQo
ImRpdiIsIFtzaXplcl0sICJDb2RlTWlycm9yLXNjcm9sbCIpOworICAgIHNjcm9sbGVyLnNldEF0
dHJpYnV0ZSgidGFiSW5kZXgiLCAiLTEiKTsKKyAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0
aGUgZWRpdG9yIGxpdmVzLgorICAgIHZhciB3cmFwcGVyID0gZWx0KCJkaXYiLCBbaW5wdXREaXYs
IHNjcm9sbGJhciwgc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIgKyAob3B0aW9ucy5saW5lV3JhcHBp
bmcgPyAiIENvZGVNaXJyb3Itd3JhcCIgOiAiIikpOworICAgIGlmIChwbGFjZS5hcHBlbmRDaGls
ZCkgcGxhY2UuYXBwZW5kQ2hpbGQod3JhcHBlcik7IGVsc2UgcGxhY2Uod3JhcHBlcik7CisKKyAg
ICB0aGVtZUNoYW5nZWQoKTsga2V5TWFwQ2hhbmdlZCgpOworICAgIC8vIE5lZWRlZCB0byBoaWRl
IGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCisgICAgaWYgKGlvcykg
aW5wdXQuc3R5bGUud2lkdGggPSAiMHB4IjsKKyAgICBpZiAoIXdlYmtpdCkgc2Nyb2xsZXIuZHJh
Z2dhYmxlID0gdHJ1ZTsKKyAgICBsaW5lU3BhY2Uuc3R5bGUub3V0bGluZSA9ICJub25lIjsKKyAg
ICBpZiAob3B0aW9ucy50YWJpbmRleCAhPSBudWxsKSBpbnB1dC50YWJJbmRleCA9IG9wdGlvbnMu
dGFiaW5kZXg7CisgICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzKSBmb2N1c0lucHV0KCk7CisgICAg
aWYgKCFvcHRpb25zLmd1dHRlciAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgZ3V0dGVyLnN0eWxl
LmRpc3BsYXkgPSAibm9uZSI7CisgICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBUYWIga2V5IGluIEtI
VE1MCisgICAgaWYgKGtodG1sKSBpbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IiwgaW5wdXRE
aXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworCisgICAgLy8gQ2hlY2sgZm9yIE9TIFgg
Pj0gMTAuNy4gSWYgc28sIHdlIG5lZWQgdG8gZm9yY2UgYSB3aWR0aCBvbiB0aGUgc2Nyb2xsYmFy
LCBhbmQKKyAgICAvLyBtYWtlIGl0IG92ZXJsYXAgdGhlIGNvbnRlbnQuIChCdXQgd2Ugb25seSBk
byB0aGlzIGlmIHRoZSBzY3JvbGxiYXIgZG9lc24ndCBhbHJlYWR5CisgICAgLy8gaGF2ZSBhIG5h
dHVyYWwgd2lkdGguIElmIHRoZSBtb3VzZSBpcyBwbHVnZ2VkIGluIG9yIHRoZSB1c2VyIHNldHMg
dGhlIHN5c3RlbSBwcmVmCisgICAgLy8gdG8gYWx3YXlzIHNob3cgc2Nyb2xsYmFycywgdGhlIHNj
cm9sbGJhciBzaG91bGRuJ3Qgb3ZlcmxhcC4pCisgICAgaWYgKG1hY19nZUxpb24pIHsKKyAgICAg
IHNjcm9sbGJhci5jbGFzc05hbWUgKz0gKG92ZXJsYXBTY3JvbGxiYXJzKCkgPyAiIGNtLXNiLW92
ZXJsYXAiIDogIiBjbS1zYi1ub25vdmVybGFwIik7CisgICAgfSBlbHNlIGlmIChpZV9sdDgpIHsK
KyAgICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJh
ciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KKyAgICAgIHNjcm9sbGJhci5j
bGFzc05hbWUgKz0gIiBjbS1zYi1pZTciOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciBwcm9i
bGVtIHdpdGggSUUgaW5uZXJIVE1MIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBhCisgICAgLy8g
UCAob3Igc2ltaWxhcikgcGFyZW50IG5vZGUuCisgICAgdHJ5IHsgY2hhcldpZHRoKCk7IH0KKyAg
ICBjYXRjaCAoZSkgeworICAgICAgaWYgKGUubWVzc2FnZS5tYXRjaCgvcnVudGltZS9pKSkKKyAg
ICAgICAgZSA9IG5ldyBFcnJvcigiQSBDb2RlTWlycm9yIGluc2lkZSBhIFAtc3R5bGUgZWxlbWVu
dCBkb2VzIG5vdCB3b3JrIGluIEludGVybmV0IEV4cGxvcmVyLiAoaW5uZXJIVE1MIGJ1ZykiKTsK
KyAgICAgIHRocm93IGU7CisgICAgfQorCisgICAgLy8gRGVsYXllZCBvYmplY3Qgd3JhcCB0aW1l
b3V0cywgbWFraW5nIHN1cmUgb25seSBvbmUgaXMgYWN0aXZlLiBibGlua2VyIGhvbGRzIGFuIGlu
dGVydmFsLgorICAgIHZhciBwb2xsID0gbmV3IERlbGF5ZWQoKSwgaGlnaGxpZ2h0ID0gbmV3IERl
bGF5ZWQoKSwgYmxpbmtlcjsKKworICAgIC8vIG1vZGUgaG9sZHMgYSBtb2RlIEFQSSBvYmplY3Qu
IGRvYyBpcyB0aGUgdHJlZSBvZiBMaW5lIG9iamVjdHMsCisgICAgLy8gd29yayBhbiBhcnJheSBv
ZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBwYXJzZWQsIGFuZCBoaXN0b3J5IHRoZQorICAgIC8vIHVu
ZG8gaGlzdG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeSBjb25zdHJ1Y3RvcikuCisgICAgdmFyIG1v
ZGUsIGRvYyA9IG5ldyBCcmFuY2hDaHVuayhbbmV3IExlYWZDaHVuayhbbmV3IExpbmUoIiIpXSld
KSwgd29yaywgZm9jdXNlZDsKKyAgICBsb2FkTW9kZSgpOworICAgIC8vIFRoZSBzZWxlY3Rpb24u
IFRoZXNlIGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAorICAgIC8vIHBv
c2l0aW9ucy4gSW52ZXJ0ZWQgaXMgdXNlZCB0byByZW1lbWJlciB0aGF0IHRoZSB1c2VyIGlzCisg
ICAgLy8gc2VsZWN0aW5nIGJvdHRvbS10by10b3AuCisgICAgdmFyIHNlbCA9IHtmcm9tOiB7bGlu
ZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKKyAg
ICAvLyBTZWxlY3Rpb24tcmVsYXRlZCBmbGFncy4gc2hpZnRTZWxlY3Rpbmcgb2J2aW91c2x5IHRy
YWNrcworICAgIC8vIHdoZXRoZXIgdGhlIHVzZXIgaXMgaG9sZGluZyBzaGlmdC4KKyAgICB2YXIg
c2hpZnRTZWxlY3RpbmcsIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrLCBsYXN0U2Nyb2xsVG9w
ID0gMCwgZHJhZ2dpbmdUZXh0LAorICAgICAgICBvdmVyd3JpdGUgPSBmYWxzZSwgc3VwcHJlc3NF
ZGl0cyA9IGZhbHNlOworICAgIC8vIFZhcmlhYmxlcyB1c2VkIGJ5IHN0YXJ0T3BlcmF0aW9uL2Vu
ZE9wZXJhdGlvbiB0byB0cmFjayB3aGF0CisgICAgLy8gaGFwcGVuZWQgZHVyaW5nIHRoZSBvcGVy
YXRpb24uCisgICAgdmFyIHVwZGF0ZUlucHV0LCB1c2VyU2VsQ2hhbmdlLCBjaGFuZ2VzLCB0ZXh0
Q2hhbmdlZCwgc2VsZWN0aW9uQ2hhbmdlZCwgbGVhdmVJbnB1dEFsb25lLAorICAgICAgICBndXR0
ZXJEaXJ0eSwgY2FsbGJhY2tzOworICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJl
IGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCisgICAgdmFyIGRpc3BsYXlPZmZzZXQgPSAw
LCBzaG93aW5nRnJvbSA9IDAsIHNob3dpbmdUbyA9IDAsIGxhc3RTaXplQyA9IDA7CisgICAgLy8g
YnJhY2tldEhpZ2hsaWdodGVkIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBhIGJyYWNrZXQgaGFz
IGJlZW4KKyAgICAvLyBtYXJrZWQuCisgICAgdmFyIGJyYWNrZXRIaWdobGlnaHRlZDsKKyAgICAv
LyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBz
Y3JvbGxiYXIKKyAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCisgICAg
dmFyIG1heExpbmUgPSBnZXRMaW5lKDApLCB1cGRhdGVNYXhMaW5lID0gZmFsc2UsIG1heExpbmVD
aGFuZ2VkID0gdHJ1ZTsKKyAgICB2YXIgdGFiQ2FjaGUgPSB7fTsKKyAgICB2YXIgcG9sbGluZ0Zh
c3QgPSBmYWxzZTsgLy8gRW5zdXJlcyBzbG93UG9sbCBkb2Vzbid0IGNhbmNlbCBmYXN0UG9sbAor
ICAgIHZhciBnb2FsQ29sdW1uID0gbnVsbDsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRl
bnQuCisgICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAi
Iik7IHVwZGF0ZUlucHV0ID0gZmFsc2U7fSkoKTsKKyAgICB2YXIgaGlzdG9yeSA9IG5ldyBIaXN0
b3J5KCk7CisKKyAgICAvLyBSZWdpc3RlciBvdXIgZXZlbnQgaGFuZGxlcnMuCisgICAgY29ubmVj
dChzY3JvbGxlciwgIm1vdXNlZG93biIsIG9wZXJhdGlvbihvbk1vdXNlRG93bikpOworICAgIGNv
bm5lY3Qoc2Nyb2xsZXIsICJkYmxjbGljayIsIG9wZXJhdGlvbihvbkRvdWJsZUNsaWNrKSk7Cisg
ICAgY29ubmVjdChsaW5lU3BhY2UsICJzZWxlY3RzdGFydCIsIGVfcHJldmVudERlZmF1bHQpOwor
ICAgIC8vIEdlY2tvIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRo
ZSBtZW51LCBhdAorICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnlt
b3JlLiBDb250ZXh0IG1lbnUgaXMKKyAgICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciBH
ZWNrby4KKyAgICBpZiAoIWdlY2tvKSBjb25uZWN0KHNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBv
bkNvbnRleHRNZW51KTsKKyAgICBjb25uZWN0KHNjcm9sbGVyLCAic2Nyb2xsIiwgb25TY3JvbGxN
YWluKTsKKyAgICBjb25uZWN0KHNjcm9sbGJhciwgInNjcm9sbCIsIG9uU2Nyb2xsQmFyKTsKKyAg
ICBjb25uZWN0KHNjcm9sbGJhciwgIm1vdXNlZG93biIsIGZ1bmN0aW9uKCkge2lmIChmb2N1c2Vk
KSBzZXRUaW1lb3V0KGZvY3VzSW5wdXQsIDApO30pOworICAgIGNvbm5lY3Qod2luZG93LCAicmVz
aXplIiwgZnVuY3Rpb24oKSB7dXBkYXRlRGlzcGxheSh0cnVlKTt9KTsKKyAgICBjb25uZWN0KGlu
cHV0LCAia2V5dXAiLCBvcGVyYXRpb24ob25LZXlVcCkpOworICAgIGNvbm5lY3QoaW5wdXQsICJp
bnB1dCIsIGZhc3RQb2xsKTsKKyAgICBjb25uZWN0KGlucHV0LCAia2V5ZG93biIsIG9wZXJhdGlv
bihvbktleURvd24pKTsKKyAgICBjb25uZWN0KGlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24o
b25LZXlQcmVzcykpOworICAgIGNvbm5lY3QoaW5wdXQsICJmb2N1cyIsIG9uRm9jdXMpOworICAg
IGNvbm5lY3QoaW5wdXQsICJibHVyIiwgb25CbHVyKTsKKworICAgIGZ1bmN0aW9uIGRyYWdfKGUp
IHsKKyAgICAgIGlmIChvcHRpb25zLm9uRHJhZ0V2ZW50ICYmIG9wdGlvbnMub25EcmFnRXZlbnQo
aW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CisgICAgICBlX3N0b3AoZSk7CisgICAgfQor
ICAgIGlmIChvcHRpb25zLmRyYWdEcm9wKSB7CisgICAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJh
Z3N0YXJ0Iiwgb25EcmFnU3RhcnQpOworICAgICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdlbnRl
ciIsIGRyYWdfKTsKKyAgICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsK
KyAgICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKG9uRHJvcCkpOworICAg
IH0KKyAgICBjb25uZWN0KHNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQo
KTsgZmFzdFBvbGwoKTt9KTsKKyAgICBjb25uZWN0KGlucHV0LCAicGFzdGUiLCBmYXN0UG9sbCk7
CisgICAgY29ubmVjdChpbnB1dCwgImN1dCIsIG9wZXJhdGlvbihmdW5jdGlvbigpeworICAgICAg
aWYgKCFvcHRpb25zLnJlYWRPbmx5KSByZXBsYWNlU2VsZWN0aW9uKCIiKTsKKyAgICB9KSk7CisK
KyAgICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRhYiBrZXkgaW4gS0hUTUwKKyAgICBpZiAoa2h0bWwp
IGNvbm5lY3Qoc2l6ZXIsICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChkb2N1
bWVudC5hY3RpdmVFbGVtZW50ID09IGlucHV0KSBpbnB1dC5ibHVyKCk7CisgICAgICAgIGZvY3Vz
SW5wdXQoKTsKKyAgICB9KTsKKworICAgIC8vIElFIHRocm93cyB1bnNwZWNpZmllZCBlcnJvciBp
biBjZXJ0YWluIGNhc2VzLCB3aGVuCisgICAgLy8gdHJ5aW5nIHRvIGFjY2VzcyBhY3RpdmVFbGVt
ZW50IGJlZm9yZSBvbmxvYWQKKyAgICB2YXIgaGFzRm9jdXM7IHRyeSB7IGhhc0ZvY3VzID0gKGRv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gaW5wdXQpOyB9IGNhdGNoKGUpIHsgfQorICAgIGlmICho
YXNGb2N1cyB8fCBvcHRpb25zLmF1dG9mb2N1cykgc2V0VGltZW91dChvbkZvY3VzLCAyMCk7Cisg
ICAgZWxzZSBvbkJsdXIoKTsKKworICAgIGZ1bmN0aW9uIGlzTGluZShsKSB7cmV0dXJuIGwgPj0g
MCAmJiBsIDwgZG9jLnNpemU7fQorICAgIC8vIFRoZSBpbnN0YW5jZSBvYmplY3QgdGhhdCB3ZSds
bCByZXR1cm4uIE1vc3RseSBjYWxscyBvdXQgdG8KKyAgICAvLyBsb2NhbCBmdW5jdGlvbnMgaW4g
dGhlIENvZGVNaXJyb3IgZnVuY3Rpb24uIFNvbWUgZG8gc29tZSBleHRyYQorICAgIC8vIHJhbmdl
IGNoZWNraW5nIGFuZC9vciBjbGlwcGluZy4gb3BlcmF0aW9uIGlzIHVzZWQgdG8gd3JhcCB0aGUK
KyAgICAvLyBjYWxsIHNvIHRoYXQgY2hhbmdlcyBpdCBtYWtlcyBhcmUgdHJhY2tlZCwgYW5kIHRo
ZSBkaXNwbGF5IGlzCisgICAgLy8gdXBkYXRlZCBhZnRlcndhcmRzLgorICAgIHZhciBpbnN0YW5j
ZSA9IHdyYXBwZXIuQ29kZU1pcnJvciA9IHsKKyAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSwKKyAg
ICAgIHNldFZhbHVlOiBvcGVyYXRpb24oc2V0VmFsdWUpLAorICAgICAgZ2V0U2VsZWN0aW9uOiBn
ZXRTZWxlY3Rpb24sCisgICAgICByZXBsYWNlU2VsZWN0aW9uOiBvcGVyYXRpb24ocmVwbGFjZVNl
bGVjdGlvbiksCisgICAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJ
bnB1dCgpOyBvbkZvY3VzKCk7IGZhc3RQb2xsKCk7fSwKKyAgICAgIHNldE9wdGlvbjogZnVuY3Rp
b24ob3B0aW9uLCB2YWx1ZSkgeworICAgICAgICB2YXIgb2xkVmFsID0gb3B0aW9uc1tvcHRpb25d
OworICAgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTsKKyAgICAgICAgaWYgKG9wdGlvbiA9
PSAibW9kZSIgfHwgb3B0aW9uID09ICJpbmRlbnRVbml0IikgbG9hZE1vZGUoKTsKKyAgICAgICAg
ZWxzZSBpZiAob3B0aW9uID09ICJyZWFkT25seSIgJiYgdmFsdWUgPT0gIm5vY3Vyc29yIikge29u
Qmx1cigpOyBpbnB1dC5ibHVyKCk7fQorICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInJlYWRP
bmx5IiAmJiAhdmFsdWUpIHtyZXNldElucHV0KHRydWUpO30KKyAgICAgICAgZWxzZSBpZiAob3B0
aW9uID09ICJ0aGVtZSIpIHRoZW1lQ2hhbmdlZCgpOworICAgICAgICBlbHNlIGlmIChvcHRpb24g
PT0gImxpbmVXcmFwcGluZyIgJiYgb2xkVmFsICE9IHZhbHVlKSBvcGVyYXRpb24od3JhcHBpbmdD
aGFuZ2VkKSgpOworICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInRhYlNpemUiKSB1cGRhdGVE
aXNwbGF5KHRydWUpOworICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gImtleU1hcCIpIGtleU1h
cENoYW5nZWQoKTsKKyAgICAgICAgaWYgKG9wdGlvbiA9PSAibGluZU51bWJlcnMiIHx8IG9wdGlv
biA9PSAiZ3V0dGVyIiB8fCBvcHRpb24gPT0gImZpcnN0TGluZU51bWJlciIgfHwKKyAgICAgICAg
ICAgIG9wdGlvbiA9PSAidGhlbWUiIHx8IG9wdGlvbiA9PSAibGluZU51bWJlckZvcm1hdHRlciIp
IHsKKyAgICAgICAgICBndXR0ZXJDaGFuZ2VkKCk7CisgICAgICAgICAgdXBkYXRlRGlzcGxheSh0
cnVlKTsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0
aW9uKSB7cmV0dXJuIG9wdGlvbnNbb3B0aW9uXTt9LAorICAgICAgdW5kbzogb3BlcmF0aW9uKHVu
ZG8pLAorICAgICAgcmVkbzogb3BlcmF0aW9uKHJlZG8pLAorICAgICAgaW5kZW50TGluZTogb3Bl
cmF0aW9uKGZ1bmN0aW9uKG4sIGRpcikgeworICAgICAgICBpZiAodHlwZW9mIGRpciAhPSAic3Ry
aW5nIikgeworICAgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gb3B0aW9ucy5zbWFydElu
ZGVudCA/ICJzbWFydCIgOiAicHJldiI7CisgICAgICAgICAgZWxzZSBkaXIgPSBkaXIgPyAiYWRk
IiA6ICJzdWJ0cmFjdCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTGluZShuKSkgaW5kZW50
TGluZShuLCBkaXIpOworICAgICAgfSksCisgICAgICBpbmRlbnRTZWxlY3Rpb246IG9wZXJhdGlv
bihpbmRlbnRTZWxlY3RlZCksCisgICAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJu
IHt1bmRvOiBoaXN0b3J5LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0b3J5LnVuZG9uZS5sZW5ndGh9
O30sCisgICAgICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uKCkge2hpc3RvcnkgPSBuZXcgSGlzdG9y
eSgpO30sCisgICAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkgeworICAgICAgICBo
aXN0b3J5ID0gbmV3IEhpc3RvcnkoKTsKKyAgICAgICAgaGlzdG9yeS5kb25lID0gaGlzdERhdGEu
ZG9uZTsKKyAgICAgICAgaGlzdG9yeS51bmRvbmUgPSBoaXN0RGF0YS51bmRvbmU7CisgICAgICB9
LAorICAgICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7CisgICAgICAgIGhpc3RvcnkudGltZSA9
IDA7CisgICAgICAgIHJldHVybiB7ZG9uZTogaGlzdG9yeS5kb25lLmNvbmNhdChbXSksIHVuZG9u
ZTogaGlzdG9yeS51bmRvbmUuY29uY2F0KFtdKX07CisgICAgICB9LAorICAgICAgbWF0Y2hCcmFj
a2V0czogb3BlcmF0aW9uKGZ1bmN0aW9uKCl7bWF0Y2hCcmFja2V0cyh0cnVlKTt9KSwKKyAgICAg
IGdldFRva2VuQXQ6IG9wZXJhdGlvbihmdW5jdGlvbihwb3MpIHsKKyAgICAgICAgcG9zID0gY2xp
cFBvcyhwb3MpOworICAgICAgICByZXR1cm4gZ2V0TGluZShwb3MubGluZSkuZ2V0VG9rZW5BdCht
b2RlLCBnZXRTdGF0ZUJlZm9yZShwb3MubGluZSksIG9wdGlvbnMudGFiU2l6ZSwgcG9zLmNoKTsK
KyAgICAgIH0pLAorICAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSkgeworICAgICAg
ICBsaW5lID0gY2xpcExpbmUobGluZSA9PSBudWxsID8gZG9jLnNpemUgLSAxOiBsaW5lKTsKKyAg
ICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKGxpbmUgKyAxKTsKKyAgICAgIH0sCisgICAgICBj
dXJzb3JDb29yZHM6IGZ1bmN0aW9uKHN0YXJ0LCBtb2RlKSB7CisgICAgICAgIGlmIChzdGFydCA9
PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRlZDsKKyAgICAgICAgcmV0dXJuIHRoaXMuY2hhckNv
b3JkcyhzdGFydCA/IHNlbC5mcm9tIDogc2VsLnRvLCBtb2RlKTsKKyAgICAgIH0sCisgICAgICBj
aGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHsKKyAgICAgICAgcG9zID0gY2xpcFBvcyhw
b3MpOworICAgICAgICBpZiAobW9kZSA9PSAibG9jYWwiKSByZXR1cm4gbG9jYWxDb29yZHMocG9z
LCBmYWxzZSk7CisgICAgICAgIGlmIChtb2RlID09ICJkaXYiKSByZXR1cm4gbG9jYWxDb29yZHMo
cG9zLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHBhZ2VDb29yZHMocG9zKTsKKyAgICAgIH0sCisg
ICAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMpIHsKKyAgICAgICAgdmFyIG9mZiA9IGVs
dE9mZnNldChsaW5lU3BhY2UpOworICAgICAgICByZXR1cm4gY29vcmRzQ2hhcihjb29yZHMueCAt
IG9mZi5sZWZ0LCBjb29yZHMueSAtIG9mZi50b3ApOworICAgICAgfSwKKyAgICAgIG1hcmtUZXh0
OiBvcGVyYXRpb24obWFya1RleHQpLAorICAgICAgc2V0Qm9va21hcms6IHNldEJvb2ttYXJrLAor
ICAgICAgZmluZE1hcmtzQXQ6IGZpbmRNYXJrc0F0LAorICAgICAgc2V0TWFya2VyOiBvcGVyYXRp
b24oYWRkR3V0dGVyTWFya2VyKSwKKyAgICAgIGNsZWFyTWFya2VyOiBvcGVyYXRpb24ocmVtb3Zl
R3V0dGVyTWFya2VyKSwKKyAgICAgIHNldExpbmVDbGFzczogb3BlcmF0aW9uKHNldExpbmVDbGFz
cyksCisgICAgICBoaWRlTGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGgpIHtyZXR1cm4gc2V0TGlu
ZUhpZGRlbihoLCB0cnVlKTt9KSwKKyAgICAgIHNob3dMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24o
aCkge3JldHVybiBzZXRMaW5lSGlkZGVuKGgsIGZhbHNlKTt9KSwKKyAgICAgIG9uRGVsZXRlTGlu
ZTogZnVuY3Rpb24obGluZSwgZikgeworICAgICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJl
ciIpIHsKKyAgICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CisgICAgICAg
ICAgbGluZSA9IGdldExpbmUobGluZSk7CisgICAgICAgIH0KKyAgICAgICAgKGxpbmUuaGFuZGxl
cnMgfHwgKGxpbmUuaGFuZGxlcnMgPSBbXSkpLnB1c2goZik7CisgICAgICAgIHJldHVybiBsaW5l
OworICAgICAgfSwKKyAgICAgIGxpbmVJbmZvOiBsaW5lSW5mbywKKyAgICAgIGFkZFdpZGdldDog
ZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7CisgICAgICAgIHBvcyA9
IGxvY2FsQ29vcmRzKGNsaXBQb3MocG9zKSk7CisgICAgICAgIHZhciB0b3AgPSBwb3MueUJvdCwg
bGVmdCA9IHBvcy54OworICAgICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsK
KyAgICAgICAgc2l6ZXIuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICAgIGlmICh2ZXJ0ID09ICJv
dmVyIikgdG9wID0gcG9zLnk7CisgICAgICAgIGVsc2UgaWYgKHZlcnQgPT0gIm5lYXIiKSB7Cisg
ICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KHNjcm9sbGVyLm9mZnNldEhlaWdodCwgZG9j
LmhlaWdodCAqIHRleHRIZWlnaHQoKSksCisgICAgICAgICAgICAgIGhzcGFjZSA9IE1hdGgubWF4
KHNpemVyLmNsaWVudFdpZHRoLCBsaW5lU3BhY2UuY2xpZW50V2lkdGgpIC0gcGFkZGluZ0xlZnQo
KTsKKyAgICAgICAgICBpZiAocG9zLnlCb3QgKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSAm
JiBwb3MueSA+IG5vZGUub2Zmc2V0SGVpZ2h0KQorICAgICAgICAgICAgdG9wID0gcG9zLnkgLSBu
b2RlLm9mZnNldEhlaWdodDsKKyAgICAgICAgICBpZiAobGVmdCArIG5vZGUub2Zmc2V0V2lkdGgg
PiBoc3BhY2UpCisgICAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsK
KyAgICAgICAgfQorICAgICAgICBub2RlLnN0eWxlLnRvcCA9ICh0b3AgKyBwYWRkaW5nVG9wKCkp
ICsgInB4IjsKKyAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIi
OworICAgICAgICBpZiAoaG9yaXogPT0gInJpZ2h0IikgeworICAgICAgICAgIGxlZnQgPSBzaXpl
ci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7CisgICAgICAgICAgbm9kZS5zdHlsZS5y
aWdodCA9ICIwcHgiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChob3JpeiA9PSAi
bGVmdCIpIGxlZnQgPSAwOworICAgICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJtaWRkbGUiKSBs
ZWZ0ID0gKHNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aCkgLyAyOworICAgICAg
ICAgIG5vZGUuc3R5bGUubGVmdCA9IChsZWZ0ICsgcGFkZGluZ0xlZnQoKSkgKyAicHgiOworICAg
ICAgICB9CisgICAgICAgIGlmIChzY3JvbGwpCisgICAgICAgICAgc2Nyb2xsSW50b1ZpZXcobGVm
dCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQp
OworICAgICAgfSwKKworICAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gZG9jLnNp
emU7fSwKKyAgICAgIGNsaXBQb3M6IGNsaXBQb3MsCisgICAgICBnZXRDdXJzb3I6IGZ1bmN0aW9u
KHN0YXJ0KSB7CisgICAgICAgIGlmIChzdGFydCA9PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRl
ZDsKKyAgICAgICAgcmV0dXJuIGNvcHlQb3Moc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50byk7Cisg
ICAgICB9LAorICAgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9z
RXEoc2VsLmZyb20sIHNlbC50byk7fSwKKyAgICAgIHNldEN1cnNvcjogb3BlcmF0aW9uKGZ1bmN0
aW9uKGxpbmUsIGNoLCB1c2VyKSB7CisgICAgICAgIGlmIChjaCA9PSBudWxsICYmIHR5cGVvZiBs
aW5lLmxpbmUgPT0gIm51bWJlciIpIHNldEN1cnNvcihsaW5lLmxpbmUsIGxpbmUuY2gsIHVzZXIp
OworICAgICAgICBlbHNlIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcik7CisgICAgICB9KSwKKyAg
ICAgIHNldFNlbGVjdGlvbjogb3BlcmF0aW9uKGZ1bmN0aW9uKGZyb20sIHRvLCB1c2VyKSB7Cisg
ICAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikoY2xpcFBvcyhm
cm9tKSwgY2xpcFBvcyh0byB8fCBmcm9tKSk7CisgICAgICB9KSwKKyAgICAgIGdldExpbmU6IGZ1
bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKGxpbmUpKSByZXR1cm4gZ2V0TGluZShsaW5lKS50ZXh0
O30sCisgICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5l
KSkgcmV0dXJuIGdldExpbmUobGluZSk7fSwKKyAgICAgIHNldExpbmU6IG9wZXJhdGlvbihmdW5j
dGlvbihsaW5lLCB0ZXh0KSB7CisgICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5n
ZSh0ZXh0LCB7bGluZTogbGluZSwgY2g6IDB9LCB7bGluZTogbGluZSwgY2g6IGdldExpbmUobGlu
ZSkudGV4dC5sZW5ndGh9KTsKKyAgICAgIH0pLAorICAgICAgcmVtb3ZlTGluZTogb3BlcmF0aW9u
KGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgaWYgKGlzTGluZShsaW5lKSkgcmVwbGFjZVJhbmdl
KCIiLCB7bGluZTogbGluZSwgY2g6IDB9LCBjbGlwUG9zKHtsaW5lOiBsaW5lKzEsIGNoOiAwfSkp
OworICAgICAgfSksCisgICAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihyZXBsYWNlUmFuZ2Up
LAorICAgICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7cmV0dXJuIGdl
dFJhbmdlKGNsaXBQb3MoZnJvbSksIGNsaXBQb3ModG8pLCBsaW5lU2VwKTt9LAorCisgICAgICB0
cmlnZ2VyT25LZXlEb3duOiBvcGVyYXRpb24ob25LZXlEb3duKSwKKyAgICAgIGV4ZWNDb21tYW5k
OiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXShpbnN0YW5jZSk7fSwKKyAgICAg
IC8vIFN0dWZmIHVzZWQgYnkgY29tbWFuZHMsIHByb2JhYmx5IG5vdCBtdWNoIHVzZSB0byBvdXRz
aWRlIGNvZGUuCisgICAgICBtb3ZlSDogb3BlcmF0aW9uKG1vdmVIKSwKKyAgICAgIGRlbGV0ZUg6
IG9wZXJhdGlvbihkZWxldGVIKSwKKyAgICAgIG1vdmVWOiBvcGVyYXRpb24obW92ZVYpLAorICAg
ICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYob3ZlcndyaXRlKXsK
KyAgICAgICAgICBvdmVyd3JpdGUgPSBmYWxzZTsKKyAgICAgICAgICBjdXJzb3IuY2xhc3NOYW1l
ID0gY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCAiIik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgb3ZlcndyaXRlID0gdHJ1ZTsKKyAgICAgICAg
ICBjdXJzb3IuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci1vdmVyd3JpdGUiOworICAgICAgICB9
CisgICAgICB9LAorCisgICAgICBwb3NGcm9tSW5kZXg6IGZ1bmN0aW9uKG9mZikgeworICAgICAg
ICB2YXIgbGluZU5vID0gMCwgY2g7CisgICAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5j
dGlvbihsaW5lKSB7CisgICAgICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIDE7Cisg
ICAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICAgIG9mZiAtPSBzejsKKyAgICAgICAgICArK2xpbmVObzsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiBjbGlwUG9zKHtsaW5lOiBsaW5lTm8sIGNoOiBjaH0pOworICAgICAgfSwKKyAgICAg
IGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgeworICAgICAgICBpZiAoY29vcmRzLmxp
bmUgPCAwIHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOworICAgICAgICB2YXIgaW5kZXggPSBj
b29yZHMuY2g7CisgICAgICAgIGRvYy5pdGVyKDAsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGlu
ZSkgeworICAgICAgICAgIGluZGV4ICs9IGxpbmUudGV4dC5sZW5ndGggKyAxOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgfSwKKyAgICAgIHNjcm9sbFRvOiBmdW5j
dGlvbih4LCB5KSB7CisgICAgICAgIGlmICh4ICE9IG51bGwpIHNjcm9sbGVyLnNjcm9sbExlZnQg
PSB4OworICAgICAgICBpZiAoeSAhPSBudWxsKSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0gc2Nyb2xs
ZXIuc2Nyb2xsVG9wID0geTsKKyAgICAgICAgdXBkYXRlRGlzcGxheShbXSk7CisgICAgICB9LAor
ICAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB7eDogc2Ny
b2xsZXIuc2Nyb2xsTGVmdCwgeTogc2Nyb2xsYmFyLnNjcm9sbFRvcCwKKyAgICAgICAgICAgICAg
ICBoZWlnaHQ6IHNjcm9sbGJhci5zY3JvbGxIZWlnaHQsIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxX
aWR0aH07CisgICAgICB9LAorICAgICAgc2V0U2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkg
eworICAgICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7CisgICAgICAgICAgdmFsID0gU3Ry
aW5nKHZhbCk7CisgICAgICAgICAgcmV0dXJuIC9eXGQrJC8udGVzdCh2YWwpID8gdmFsICsgInB4
IiA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgd3JhcHBlci5z
dHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7CisgICAgICAgIGlmIChoZWlnaHQgIT0gbnVs
bCkgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdodCk7CisgICAgICAgIGlu
c3RhbmNlLnJlZnJlc2goKTsKKyAgICAgIH0sCisKKyAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24o
Zil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCisgICAgICBjb21wb3VuZENoYW5nZTogZnVuY3Rp
b24oZil7cmV0dXJuIGNvbXBvdW5kQ2hhbmdlKGYpO30sCisgICAgICByZWZyZXNoOiBmdW5jdGlv
bigpeworICAgICAgICB1cGRhdGVEaXNwbGF5KHRydWUsIG51bGwsIGxhc3RTY3JvbGxUb3ApOwor
ICAgICAgICBpZiAoc2Nyb2xsYmFyLnNjcm9sbEhlaWdodCA+IGxhc3RTY3JvbGxUb3ApCisgICAg
ICAgICAgc2Nyb2xsYmFyLnNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3A7CisgICAgICB9LAorICAg
ICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gaW5wdXQ7fSwKKyAgICAgIGdldFdy
YXBwZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB3cmFwcGVyO30sCisgICAgICBnZXRTY3Jv
bGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHNjcm9sbGVyO30sCisgICAgICBnZXRHdXR0
ZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiBndXR0ZXI7fQorICAgIH07CisKKyAgICBmdW5j
dGlvbiBnZXRMaW5lKG4pIHsgcmV0dXJuIGdldExpbmVBdChkb2MsIG4pOyB9CisgICAgZnVuY3Rp
b24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKKyAgICAgIGd1dHRlckRpcnR5ID0g
dHJ1ZTsKKyAgICAgIHZhciBkaWZmID0gaGVpZ2h0IC0gbGluZS5oZWlnaHQ7CisgICAgICBmb3Ig
KHZhciBuID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNldFZhbHVlKGNvZGUpIHsKKyAgICAgIHZhciB0b3AgPSB7bGluZTog
MCwgY2g6IDB9OworICAgICAgdXBkYXRlTGluZXModG9wLCB7bGluZTogZG9jLnNpemUgLSAxLCBj
aDogZ2V0TGluZShkb2Muc2l6ZS0xKS50ZXh0Lmxlbmd0aH0sCisgICAgICAgICAgICAgICAgICBz
cGxpdExpbmVzKGNvZGUpLCB0b3AsIHRvcCk7CisgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIGdldFZhbHVlKGxpbmVTZXApIHsKKyAgICAgIHZhciB0ZXh0ID0g
W107CisgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeyB0ZXh0LnB1
c2gobGluZS50ZXh0KTsgfSk7CisgICAgICByZXR1cm4gdGV4dC5qb2luKGxpbmVTZXAgfHwgIlxu
Iik7CisgICAgfQorCisgICAgZnVuY3Rpb24gb25TY3JvbGxCYXIoZSkgeworICAgICAgaWYgKHNj
cm9sbGJhci5zY3JvbGxUb3AgIT0gbGFzdFNjcm9sbFRvcCkgeworICAgICAgICBsYXN0U2Nyb2xs
VG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsYmFyLnNjcm9sbFRvcDsKKyAgICAgICAg
dXBkYXRlRGlzcGxheShbXSk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gb25TY3Jv
bGxNYWluKGUpIHsKKyAgICAgIGlmIChvcHRpb25zLmZpeGVkR3V0dGVyICYmIGd1dHRlci5zdHls
ZS5sZWZ0ICE9IHNjcm9sbGVyLnNjcm9sbExlZnQgKyAicHgiKQorICAgICAgICBndXR0ZXIuc3R5
bGUubGVmdCA9IHNjcm9sbGVyLnNjcm9sbExlZnQgKyAicHgiOworICAgICAgaWYgKHNjcm9sbGVy
LnNjcm9sbFRvcCAhPSBsYXN0U2Nyb2xsVG9wKSB7CisgICAgICAgIGxhc3RTY3JvbGxUb3AgPSBz
Y3JvbGxlci5zY3JvbGxUb3A7CisgICAgICAgIGlmIChzY3JvbGxiYXIuc2Nyb2xsVG9wICE9IGxh
c3RTY3JvbGxUb3ApCisgICAgICAgICAgc2Nyb2xsYmFyLnNjcm9sbFRvcCA9IGxhc3RTY3JvbGxU
b3A7CisgICAgICAgIHVwZGF0ZURpc3BsYXkoW10pOworICAgICAgfQorICAgICAgaWYgKG9wdGlv
bnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKKyAgICAgIHNldFNoaWZ0KGVfcHJvcChlLCAic2hpZnRL
ZXkiKSk7CisgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBjbGljayBpbiBhIHdpZGdl
dAorICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBh
cmVudE5vZGUpCisgICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gc2l6ZXIgJiYgbiAhPSBtb3Zl
cikgcmV0dXJuOworCisgICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGNsaWNrIGluIHRoZSBndXR0
ZXIKKyAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5w
YXJlbnROb2RlKQorICAgICAgICBpZiAobi5wYXJlbnROb2RlID09IGd1dHRlclRleHQpIHsKKyAg
ICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQorICAgICAgICAgICAgb3B0aW9ucy5v
bkd1dHRlckNsaWNrKGluc3RhbmNlLCBpbmRleE9mKGd1dHRlclRleHQuY2hpbGROb2Rlcywgbikg
KyBzaG93aW5nRnJvbSwgZSk7CisgICAgICAgICAgcmV0dXJuIGVfcHJldmVudERlZmF1bHQoZSk7
CisgICAgICAgIH0KKworICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpOworCisgICAg
ICBzd2l0Y2ggKGVfYnV0dG9uKGUpKSB7CisgICAgICBjYXNlIDM6CisgICAgICAgIGlmIChnZWNr
bykgb25Db250ZXh0TWVudShlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgY2FzZSAyOgorICAg
ICAgICBpZiAoc3RhcnQpIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7Cisg
ICAgICAgIHNldFRpbWVvdXQoZm9jdXNJbnB1dCwgMjApOworICAgICAgICBlX3ByZXZlbnREZWZh
dWx0KGUpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICAvLyBGb3IgYnV0dG9uIDEs
IGlmIGl0IHdhcyBjbGlja2VkIGluc2lkZSB0aGUgZWRpdG9yCisgICAgICAvLyAocG9zRnJvbU1v
dXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQorICAgICAgLy8g
c2VsZWN0aW9uLgorICAgICAgaWYgKCFzdGFydCkge2lmIChlX3RhcmdldChlKSA9PSBzY3JvbGxl
cikgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KKworICAgICAgaWYgKCFmb2N1c2VkKSBv
bkZvY3VzKCk7CisKKyAgICAgIHZhciBub3cgPSArbmV3IERhdGUsIHR5cGUgPSAic2luZ2xlIjsK
KyAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cg
LSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CisgICAgICAgIHR5
cGUgPSAidHJpcGxlIjsKKyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgc2V0
VGltZW91dChmb2N1c0lucHV0LCAyMCk7CisgICAgICAgIHNlbGVjdExpbmUoc3RhcnQubGluZSk7
CisgICAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2sudGltZSA+IG5vdyAtIDQw
MCAmJiBwb3NFcShsYXN0Q2xpY2sucG9zLCBzdGFydCkpIHsKKyAgICAgICAgdHlwZSA9ICJkb3Vi
bGUiOworICAgICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTogbm93LCBwb3M6IHN0YXJ0fTsK
KyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29y
ZEF0KHN0YXJ0KTsKKyAgICAgICAgc2V0U2VsZWN0aW9uVXNlcih3b3JkLmZyb20sIHdvcmQudG8p
OworICAgICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0K
KworICAgICAgZnVuY3Rpb24gZHJhZ0VuZChlMikgeworICAgICAgICBpZiAod2Via2l0KSBzY3Jv
bGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKKyAgICAgICAgZHJhZ2dpbmdUZXh0ID0gZmFsc2U7Cisg
ICAgICAgIHVwKCk7IGRyb3AoKTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGUuY2xpZW50WCAtIGUy
LmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xpZW50WSkgPCAxMCkgeworICAg
ICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOworICAgICAgICAgIHNldEN1cnNvcihzdGFydC5s
aW5lLCBzdGFydC5jaCwgdHJ1ZSk7CisgICAgICAgICAgZm9jdXNJbnB1dCgpOworICAgICAgICB9
CisgICAgICB9CisgICAgICB2YXIgbGFzdCA9IHN0YXJ0LCBnb2luZzsKKyAgICAgIGlmIChvcHRp
b25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFvcHRpb25zLnJlYWRPbmx5ICYmICFwb3NF
cShzZWwuZnJvbSwgc2VsLnRvKSAmJgorICAgICAgICAgICFwb3NMZXNzKHN0YXJ0LCBzZWwuZnJv
bSkgJiYgIXBvc0xlc3Moc2VsLnRvLCBzdGFydCkgJiYgdHlwZSA9PSAic2luZ2xlIikgeworICAg
ICAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KKyAgICAgICAgaWYgKHdl
YmtpdCkgc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsKKyAgICAgICAgdmFyIHVwID0gY29ubmVj
dChkb2N1bWVudCwgIm1vdXNldXAiLCBvcGVyYXRpb24oZHJhZ0VuZCksIHRydWUpOworICAgICAg
ICB2YXIgZHJvcCA9IGNvbm5lY3Qoc2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGRyYWdFbmQp
LCB0cnVlKTsKKyAgICAgICAgZHJhZ2dpbmdUZXh0ID0gdHJ1ZTsKKyAgICAgICAgLy8gSUUncyBh
cHByb2FjaCB0byBkcmFnZ2FibGUKKyAgICAgICAgaWYgKHNjcm9sbGVyLmRyYWdEcm9wKSBzY3Jv
bGxlci5kcmFnRHJvcCgpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBlX3ByZXZl
bnREZWZhdWx0KGUpOworICAgICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIHNldEN1cnNvcihzdGFy
dC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CisKKyAgICAgIHZhciBzdGFydHN0YXJ0ID0gc2VsLmZy
b20sIHN0YXJ0ZW5kID0gc2VsLnRvOworCisgICAgICBmdW5jdGlvbiBkb1NlbGVjdChjdXIpIHsK
KyAgICAgICAgaWYgKHR5cGUgPT0gInNpbmdsZSIpIHsKKyAgICAgICAgICBzZXRTZWxlY3Rpb25V
c2VyKHN0YXJ0LCBjdXIpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsK
KyAgICAgICAgICB2YXIgd29yZCA9IGZpbmRXb3JkQXQoY3VyKTsKKyAgICAgICAgICBpZiAocG9z
TGVzcyhjdXIsIHN0YXJ0c3RhcnQpKSBzZXRTZWxlY3Rpb25Vc2VyKHdvcmQuZnJvbSwgc3RhcnRl
bmQpOworICAgICAgICAgIGVsc2Ugc2V0U2VsZWN0aW9uVXNlcihzdGFydHN0YXJ0LCB3b3JkLnRv
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJ0cmlwbGUiKSB7CisgICAgICAgICAgaWYg
KHBvc0xlc3MoY3VyLCBzdGFydHN0YXJ0KSkgc2V0U2VsZWN0aW9uVXNlcihzdGFydGVuZCwgY2xp
cFBvcyh7bGluZTogY3VyLmxpbmUsIGNoOiAwfSkpOworICAgICAgICAgIGVsc2Ugc2V0U2VsZWN0
aW9uVXNlcihzdGFydHN0YXJ0LCBjbGlwUG9zKHtsaW5lOiBjdXIubGluZSArIDEsIGNoOiAwfSkp
OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7CisgICAg
ICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoZSwgdHJ1ZSk7CisgICAgICAgIGlmIChjdXIgJiYg
IXBvc0VxKGN1ciwgbGFzdCkpIHsKKyAgICAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsK
KyAgICAgICAgICBsYXN0ID0gY3VyOworICAgICAgICAgIGRvU2VsZWN0KGN1cik7CisgICAgICAg
ICAgdXBkYXRlSW5wdXQgPSBmYWxzZTsKKyAgICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVM
aW5lcygpOworICAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5l
IDwgdmlzaWJsZS5mcm9tKQorICAgICAgICAgICAgZ29pbmcgPSBzZXRUaW1lb3V0KG9wZXJhdGlv
bihmdW5jdGlvbigpe2V4dGVuZChlKTt9KSwgMTUwKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBmdW5jdGlvbiBkb25lKGUpIHsKKyAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKKyAg
ICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShlKTsKKyAgICAgICAgaWYgKGN1cikgZG9TZWxl
Y3QoY3VyKTsKKyAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgICAgZm9jdXNJbnB1
dCgpOworICAgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CisgICAgICAgIG1vdmUoKTsgdXAoKTsK
KyAgICAgIH0KKyAgICAgIHZhciBtb3ZlID0gY29ubmVjdChkb2N1bWVudCwgIm1vdXNlbW92ZSIs
IG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CisgICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7Cisg
ICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgICAgIGlmICghaWUgJiYgIWVfYnV0dG9u
KGUpKSBkb25lKGUpOworICAgICAgICBlbHNlIGV4dGVuZChlKTsKKyAgICAgIH0pLCB0cnVlKTsK
KyAgICAgIHZhciB1cCA9IGNvbm5lY3QoZG9jdW1lbnQsICJtb3VzZXVwIiwgb3BlcmF0aW9uKGRv
bmUpLCB0cnVlKTsKKyAgICB9CisgICAgZnVuY3Rpb24gb25Eb3VibGVDbGljayhlKSB7CisgICAg
ICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gd3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9k
ZSkKKyAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSByZXR1cm4gZV9wcmV2
ZW50RGVmYXVsdChlKTsKKyAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgfQorICAgIGZ1
bmN0aW9uIG9uRHJvcChlKSB7CisgICAgICBpZiAob3B0aW9ucy5vbkRyYWdFdmVudCAmJiBvcHRp
b25zLm9uRHJhZ0V2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAgZV9w
cmV2ZW50RGVmYXVsdChlKTsKKyAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoZSwgdHJ1ZSks
IGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7CisgICAgICBpZiAoIXBvcyB8fCBvcHRpb25z
LnJlYWRPbmx5KSByZXR1cm47CisgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdp
bmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CisgICAgICAgIHZhciBuID0gZmlsZXMu
bGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwOworICAgICAgICB2YXIgbG9hZEZpbGUg
PSBmdW5jdGlvbihmaWxlLCBpKSB7CisgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVh
ZGVyOworICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHRleHRbaV0gPSByZWFkZXIucmVzdWx0OworICAgICAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7
CisgICAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKKyAgICAgICAgICAgICAgb3BlcmF0
aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBlbmQgPSByZXBsYWNlUmFuZ2Uo
dGV4dC5qb2luKCIiKSwgcG9zLCBwb3MpOworICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblVz
ZXIocG9zLCBlbmQpOworICAgICAgICAgICAgICB9KSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH07CisgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CisgICAgICAgIH07Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwgaSk7
CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYgdGhlIGRy
b3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LgorICAgICAgICBpZiAoZHJh
Z2dpbmdUZXh0ICYmICEocG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCBwb3NMZXNzKHNlbC50bywg
cG9zKSkpIHJldHVybjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB2YXIgdGV4dCA9IGUuZGF0
YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKKyAgICAgICAgICBpZiAodGV4dCkgeworICAgICAg
ICAgICAgY29tcG91bmRDaGFuZ2UoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZhciBjdXJG
cm9tID0gc2VsLmZyb20sIGN1clRvID0gc2VsLnRvOworICAgICAgICAgICAgICBzZXRTZWxlY3Rp
b25Vc2VyKHBvcywgcG9zKTsKKyAgICAgICAgICAgICAgaWYgKGRyYWdnaW5nVGV4dCkgcmVwbGFj
ZVJhbmdlKCIiLCBjdXJGcm9tLCBjdXJUbyk7CisgICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rp
b24odGV4dCk7CisgICAgICAgICAgICAgIGZvY3VzSW5wdXQoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaChlKXt9CisgICAgICB9CisgICAg
fQorICAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGUpIHsKKyAgICAgIHZhciB0eHQgPSBnZXRTZWxl
Y3Rpb24oKTsKKyAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLCB0eHQpOworCisg
ICAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdl
LgorICAgICAgaWYgKGdlY2tvIHx8IGNocm9tZSB8fCBvcGVyYSkgeworICAgICAgICB2YXIgaW1n
ID0gZWx0KCdpbWcnKTsKKyAgICAgICAgaW1nLnNjciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQs
UjBsR09EZGhBZ0FDQUlBQUFBQUFBUC8vL3l3QUFBQUFBZ0FDQUFBQ0FvUlJBRHM9JzsgLy8xeDEg
aW1hZ2UKKyAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7Cisg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9IYW5kbGVCaW5kaW5nKGJvdW5kLCBkcm9w
U2hpZnQpIHsKKyAgICAgIGlmICh0eXBlb2YgYm91bmQgPT0gInN0cmluZyIpIHsKKyAgICAgICAg
Ym91bmQgPSBjb21tYW5kc1tib3VuZF07CisgICAgICAgIGlmICghYm91bmQpIHJldHVybiBmYWxz
ZTsKKyAgICAgIH0KKyAgICAgIHZhciBwcmV2U2hpZnQgPSBzaGlmdFNlbGVjdGluZzsKKyAgICAg
IHRyeSB7CisgICAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5KSBzdXBwcmVzc0VkaXRzID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGRyb3BTaGlmdCkgc2hpZnRTZWxlY3RpbmcgPSBudWxsOworICAgICAg
ICBib3VuZChpbnN0YW5jZSk7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgaWYgKGUgIT0g
UGFzcykgdGhyb3cgZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgc2hpZnRTZWxlY3RpbmcgPSBwcmV2U2hpZnQ7CisgICAgICAgIHN1cHByZXNzRWRp
dHMgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB2YXIg
bWF5YmVUcmFuc2l0aW9uOworICAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoZSkgeworICAg
ICAgLy8gSGFuZGxlIGF1dG8ga2V5bWFwIHRyYW5zaXRpb25zCisgICAgICB2YXIgc3RhcnRNYXAg
PSBnZXRLZXlNYXAob3B0aW9ucy5rZXlNYXApLCBuZXh0ID0gc3RhcnRNYXAuYXV0bzsKKyAgICAg
IGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOworICAgICAgaWYgKG5leHQgJiYgIWlzTW9k
aWZpZXJLZXkoZSkpIG1heWJlVHJhbnNpdGlvbiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmIChnZXRLZXlNYXAob3B0aW9ucy5rZXlNYXApID09IHN0YXJ0TWFwKSB7CisgICAg
ICAgICAgb3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGluc3Rh
bmNlKSA6IG5leHQpOworICAgICAgICB9CisgICAgICB9LCA1MCk7CisKKyAgICAgIHZhciBuYW1l
ID0ga2V5TmFtZXNbZV9wcm9wKGUsICJrZXlDb2RlIildLCBoYW5kbGVkID0gZmFsc2U7CisgICAg
ICBpZiAobmFtZSA9PSBudWxsIHx8IGUuYWx0R3JhcGhLZXkpIHJldHVybiBmYWxzZTsKKyAgICAg
IGlmIChlX3Byb3AoZSwgImFsdEtleSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKKyAgICAgIGlm
IChlX3Byb3AoZSwgImN0cmxLZXkiKSkgbmFtZSA9ICJDdHJsLSIgKyBuYW1lOworICAgICAgaWYg
KGVfcHJvcChlLCAibWV0YUtleSIpKSBuYW1lID0gIkNtZC0iICsgbmFtZTsKKworICAgICAgdmFy
IHN0b3BwZWQgPSBmYWxzZTsKKyAgICAgIGZ1bmN0aW9uIHN0b3AoKSB7IHN0b3BwZWQgPSB0cnVl
OyB9CisKKyAgICAgIGlmIChlX3Byb3AoZSwgInNoaWZ0S2V5IikpIHsKKyAgICAgICAgaGFuZGxl
ZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25z
LmtleU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7cmV0dXJu
IGRvSGFuZGxlQmluZGluZyhiLCB0cnVlKTt9LCBzdG9wKQorICAgICAgICAgICAgICAgfHwgbG9v
a3VwS2V5KG5hbWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25zLmtleU1hcCwgZnVuY3Rpb24o
YikgeworICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gInN0cmluZyIgJiYgL15nb1tB
LVpdLy50ZXN0KGIpKSByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGIpOworICAgICAgICAgICAgICAg
fSwgc3RvcCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5h
bWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25zLmtleU1hcCwgZG9IYW5kbGVCaW5kaW5nLCBz
dG9wKTsKKyAgICAgIH0KKyAgICAgIGlmIChzdG9wcGVkKSBoYW5kbGVkID0gZmFsc2U7CisgICAg
ICBpZiAoaGFuZGxlZCkgeworICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworICAgICAgICBy
ZXN0YXJ0QmxpbmsoKTsKKyAgICAgICAgaWYgKGllKSB7IGUub2xkS2V5Q29kZSA9IGUua2V5Q29k
ZTsgZS5rZXlDb2RlID0gMDsgfQorICAgICAgfQorICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAg
fQorICAgIGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5nKGUsIGNoKSB7CisgICAgICB2YXIgaGFu
ZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgb3B0aW9ucy5leHRyYUtleXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmtleU1hcCwgZnVuY3Rpb24oYikgeyBy
ZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGIsIHRydWUpOyB9KTsKKyAgICAgIGlmIChoYW5kbGVkKSB7
CisgICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgICAgIHJlc3RhcnRCbGluaygpOwor
ICAgICAgfQorICAgICAgcmV0dXJuIGhhbmRsZWQ7CisgICAgfQorCisgICAgdmFyIGxhc3RTdG9w
cGVkS2V5ID0gbnVsbDsKKyAgICBmdW5jdGlvbiBvbktleURvd24oZSkgeworICAgICAgaWYgKCFm
b2N1c2VkKSBvbkZvY3VzKCk7CisgICAgICBpZiAoaWUgJiYgZS5rZXlDb2RlID09IDI3KSB7IGUu
cmV0dXJuVmFsdWUgPSBmYWxzZTsgfQorICAgICAgaWYgKHBvbGxpbmdGYXN0KSB7IGlmIChyZWFk
SW5wdXQoKSkgcG9sbGluZ0Zhc3QgPSBmYWxzZTsgfQorICAgICAgaWYgKG9wdGlvbnMub25LZXlF
dmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47
CisgICAgICB2YXIgY29kZSA9IGVfcHJvcChlLCAia2V5Q29kZSIpOworICAgICAgLy8gSUUgZG9l
cyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KKyAgICAgIHNldFNoaWZ0KGNvZGUgPT0gMTYg
fHwgZV9wcm9wKGUsICJzaGlmdEtleSIpKTsKKyAgICAgIC8vIEZpcnN0IGdpdmUgb25LZXlFdmVu
dCBvcHRpb24gYSBjaGFuY2UgdG8gaGFuZGxlIHRoaXMuCisgICAgICB2YXIgaGFuZGxlZCA9IGhh
bmRsZUtleUJpbmRpbmcoZSk7CisgICAgICBpZiAob3BlcmEpIHsKKyAgICAgICAgbGFzdFN0b3Bw
ZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7CisgICAgICAgIC8vIE9wZXJhIGhhcyBubyBj
dXQgZXZlbnQuLi4gd2UgdHJ5IHRvIGF0IGxlYXN0IGNhdGNoIHRoZSBrZXkgY29tYm8KKyAgICAg
ICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgZV9wcm9wKGUsIG1hYyA/ICJtZXRhS2V5
IiA6ICJjdHJsS2V5IikpCisgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbigiIik7CisgICAgICB9
CisgICAgfQorICAgIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgeworICAgICAgaWYgKHBvbGxpbmdG
YXN0KSByZWFkSW5wdXQoKTsKKyAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9u
cy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAgdmFyIGtl
eUNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKSwgY2hhckNvZGUgPSBlX3Byb3AoZSwgImNoYXJD
b2RlIik7CisgICAgICBpZiAob3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xh
c3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KKyAgICAg
IGlmICgoKG9wZXJhICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSB8fCBraHRtbCkgJiYg
aGFuZGxlS2V5QmluZGluZyhlKSkgcmV0dXJuOworICAgICAgdmFyIGNoID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsKKyAgICAgIGlm
IChvcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYgbW9kZS5lbGVjdHJpY0NoYXJzICYmIG9wdGlvbnMu
c21hcnRJbmRlbnQgJiYgIW9wdGlvbnMucmVhZE9ubHkpIHsKKyAgICAgICAgaWYgKG1vZGUuZWxl
Y3RyaWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQorICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0
aW9uKGZ1bmN0aW9uKCkge2luZGVudExpbmUoc2VsLnRvLmxpbmUsICJzbWFydCIpO30pLCA3NSk7
CisgICAgICB9CisgICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoZSwgY2gpKSByZXR1cm47Cisg
ICAgICBmYXN0UG9sbCgpOworICAgIH0KKyAgICBmdW5jdGlvbiBvbktleVVwKGUpIHsKKyAgICAg
IGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBh
ZGRTdG9wKGUpKSkgcmV0dXJuOworICAgICAgaWYgKGVfcHJvcChlLCAia2V5Q29kZSIpID09IDE2
KSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gb25Gb2N1cygp
IHsKKyAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNvciIpIHJldHVybjsKKyAg
ICAgIGlmICghZm9jdXNlZCkgeworICAgICAgICBpZiAob3B0aW9ucy5vbkZvY3VzKSBvcHRpb25z
Lm9uRm9jdXMoaW5zdGFuY2UpOworICAgICAgICBmb2N1c2VkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KHNjcm9sbGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mb2N1c2VkXGIvKSA9PSAt
MSkKKyAgICAgICAgICBzY3JvbGxlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQi
OworICAgICAgICBpZiAoIWxlYXZlSW5wdXRBbG9uZSkgcmVzZXRJbnB1dCh0cnVlKTsKKyAgICAg
IH0KKyAgICAgIHNsb3dQb2xsKCk7CisgICAgICByZXN0YXJ0QmxpbmsoKTsKKyAgICB9CisgICAg
ZnVuY3Rpb24gb25CbHVyKCkgeworICAgICAgaWYgKGZvY3VzZWQpIHsKKyAgICAgICAgaWYgKG9w
dGlvbnMub25CbHVyKSBvcHRpb25zLm9uQmx1cihpbnN0YW5jZSk7CisgICAgICAgIGZvY3VzZWQg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGJyYWNrZXRIaWdobGlnaHRlZCkKKyAgICAgICAgICBvcGVy
YXRpb24oZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHsg
YnJhY2tldEhpZ2hsaWdodGVkKCk7IGJyYWNrZXRIaWdobGlnaHRlZCA9IG51bGw7IH0KKyAgICAg
ICAgICB9KSgpOworICAgICAgICBzY3JvbGxlci5jbGFzc05hbWUgPSBzY3JvbGxlci5jbGFzc05h
bWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsICIiKTsKKyAgICAgIH0KKyAgICAgIGNs
ZWFySW50ZXJ2YWwoYmxpbmtlcik7CisgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2lmICgh
Zm9jdXNlZCkgc2hpZnRTZWxlY3RpbmcgPSBudWxsO30sIDE1MCk7CisgICAgfQorCisgICAgLy8g
UmVwbGFjZSB0aGUgcmFuZ2UgZnJvbSBmcm9tIHRvIHRvIGJ5IHRoZSBzdHJpbmdzIGluIG5ld1Rl
eHQuCisgICAgLy8gQWZ0ZXJ3YXJkcywgc2V0IHRoZSBzZWxlY3Rpb24gdG8gc2VsRnJvbSwgc2Vs
VG8uCisgICAgZnVuY3Rpb24gdXBkYXRlTGluZXMoZnJvbSwgdG8sIG5ld1RleHQsIHNlbEZyb20s
IHNlbFRvKSB7CisgICAgICBpZiAoc3VwcHJlc3NFZGl0cykgcmV0dXJuOworICAgICAgaWYgKGhp
c3RvcnkpIHsKKyAgICAgICAgdmFyIG9sZCA9IFtdOworICAgICAgICBkb2MuaXRlcihmcm9tLmxp
bmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7IG9sZC5wdXNoKGxpbmUudGV4dCk7IH0p
OworICAgICAgICBoaXN0b3J5LmFkZENoYW5nZShmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBv
bGQpOworICAgICAgICB3aGlsZSAoaGlzdG9yeS5kb25lLmxlbmd0aCA+IG9wdGlvbnMudW5kb0Rl
cHRoKSBoaXN0b3J5LmRvbmUuc2hpZnQoKTsKKyAgICAgIH0KKyAgICAgIHVwZGF0ZUxpbmVzTm9V
bmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbyk7CisgICAgfQorICAgIGZ1bmN0
aW9uIHVucmVkb0hlbHBlcihmcm9tLCB0bykgeworICAgICAgaWYgKCFmcm9tLmxlbmd0aCkgcmV0
dXJuOworICAgICAgdmFyIHNldCA9IGZyb20ucG9wKCksIG91dCA9IFtdOworICAgICAgZm9yICh2
YXIgaSA9IHNldC5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkgeworICAgICAgICB2YXIgY2hh
bmdlID0gc2V0W2ldOworICAgICAgICB2YXIgcmVwbGFjZWQgPSBbXSwgZW5kID0gY2hhbmdlLnN0
YXJ0ICsgY2hhbmdlLmFkZGVkOworICAgICAgICBkb2MuaXRlcihjaGFuZ2Uuc3RhcnQsIGVuZCwg
ZnVuY3Rpb24obGluZSkgeyByZXBsYWNlZC5wdXNoKGxpbmUudGV4dCk7IH0pOworICAgICAgICBv
dXQucHVzaCh7c3RhcnQ6IGNoYW5nZS5zdGFydCwgYWRkZWQ6IGNoYW5nZS5vbGQubGVuZ3RoLCBv
bGQ6IHJlcGxhY2VkfSk7CisgICAgICAgIHZhciBwb3MgPSB7bGluZTogY2hhbmdlLnN0YXJ0ICsg
Y2hhbmdlLm9sZC5sZW5ndGggLSAxLAorICAgICAgICAgICAgICAgICAgIGNoOiBlZGl0RW5kKHJl
cGxhY2VkW3JlcGxhY2VkLmxlbmd0aC0xXSwgY2hhbmdlLm9sZFtjaGFuZ2Uub2xkLmxlbmd0aC0x
XSl9OworICAgICAgICB1cGRhdGVMaW5lc05vVW5kbyh7bGluZTogY2hhbmdlLnN0YXJ0LCBjaDog
MH0sIHtsaW5lOiBlbmQgLSAxLCBjaDogZ2V0TGluZShlbmQtMSkudGV4dC5sZW5ndGh9LCBjaGFu
Z2Uub2xkLCBwb3MsIHBvcyk7CisgICAgICB9CisgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7Cisg
ICAgICB0by5wdXNoKG91dCk7CisgICAgfQorICAgIGZ1bmN0aW9uIHVuZG8oKSB7dW5yZWRvSGVs
cGVyKGhpc3RvcnkuZG9uZSwgaGlzdG9yeS51bmRvbmUpO30KKyAgICBmdW5jdGlvbiByZWRvKCkg
e3VucmVkb0hlbHBlcihoaXN0b3J5LnVuZG9uZSwgaGlzdG9yeS5kb25lKTt9CisKKyAgICBmdW5j
dGlvbiB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8p
IHsKKyAgICAgIGlmIChzdXBwcmVzc0VkaXRzKSByZXR1cm47CisgICAgICB2YXIgcmVjb21wdXRl
TWF4TGVuZ3RoID0gZmFsc2UsIG1heExpbmVMZW5ndGggPSBtYXhMaW5lLnRleHQubGVuZ3RoOwor
ICAgICAgaWYgKCFvcHRpb25zLmxpbmVXcmFwcGluZykKKyAgICAgICAgZG9jLml0ZXIoZnJvbS5s
aW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeworICAgICAgICAgIGlmICghbGluZS5o
aWRkZW4gJiYgbGluZS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4
TGVuZ3RoID0gdHJ1ZTsgcmV0dXJuIHRydWU7fQorICAgICAgICB9KTsKKyAgICAgIGlmIChmcm9t
LmxpbmUgIT0gdG8ubGluZSB8fCBuZXdUZXh0Lmxlbmd0aCA+IDEpIGd1dHRlckRpcnR5ID0gdHJ1
ZTsKKworICAgICAgdmFyIG5saW5lcyA9IHRvLmxpbmUgLSBmcm9tLmxpbmUsIGZpcnN0TGluZSA9
IGdldExpbmUoZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKHRvLmxpbmUpOworICAgICAg
Ly8gRmlyc3QgYWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZSwgdGFraW5nIHNvbWUgY2FyZSB0byBs
ZWF2ZSBoaWdobGlnaHRpbmcgaW50YWN0LgorICAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5j
aCA9PSAwICYmIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PSAiIikgeworICAgICAgICAv
LyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtl
CisgICAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBw
b3NlZCB0by4KKyAgICAgICAgdmFyIGFkZGVkID0gW10sIHByZXZMaW5lID0gbnVsbDsKKyAgICAg
ICAgaWYgKGZyb20ubGluZSkgeworICAgICAgICAgIHByZXZMaW5lID0gZ2V0TGluZShmcm9tLmxp
bmUgLSAxKTsKKyAgICAgICAgICBwcmV2TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CisgICAg
ICAgIH0gZWxzZSBsYXN0TGluZS5maXhNYXJrU3RhcnRzKCk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQorICAgICAgICAgIGFkZGVk
LnB1c2goTGluZS5pbmhlcml0TWFya3MobmV3VGV4dFtpXSwgcHJldkxpbmUpKTsKKyAgICAgICAg
aWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcywgY2FsbGJhY2tzKTsKKyAg
ICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgZG9jLmluc2VydChmcm9tLmxpbmUsIGFkZGVkKTsKKyAg
ICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CisgICAgICAgIGlmIChuZXdU
ZXh0Lmxlbmd0aCA9PSAxKQorICAgICAgICAgIGZpcnN0TGluZS5yZXBsYWNlKGZyb20uY2gsIHRv
LmNoLCBuZXdUZXh0WzBdKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgbGFzdExpbmUgPSBm
aXJzdExpbmUuc3BsaXQodG8uY2gsIG5ld1RleHRbbmV3VGV4dC5sZW5ndGgtMV0pOworICAgICAg
ICAgIGZpcnN0TGluZS5yZXBsYWNlKGZyb20uY2gsIG51bGwsIG5ld1RleHRbMF0pOworICAgICAg
ICAgIGZpcnN0TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CisgICAgICAgICAgdmFyIGFkZGVk
ID0gW107CisgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGUgPSBuZXdUZXh0Lmxlbmd0aCAtIDE7
IGkgPCBlOyArK2kpCisgICAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5l
d1RleHRbaV0sIGZpcnN0TGluZSkpOworICAgICAgICAgIGFkZGVkLnB1c2gobGFzdExpbmUpOwor
ICAgICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOworICAgICAgICB9Cisg
ICAgICB9IGVsc2UgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpIHsKKyAgICAgICAgZmlyc3RMaW5l
LnJlcGxhY2UoZnJvbS5jaCwgbnVsbCwgbmV3VGV4dFswXSk7CisgICAgICAgIGxhc3RMaW5lLnJl
cGxhY2UobnVsbCwgdG8uY2gsICIiKTsKKyAgICAgICAgZmlyc3RMaW5lLmFwcGVuZChsYXN0TGlu
ZSk7CisgICAgICAgIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzLCBjYWxsYmFja3Mp
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGFkZGVkID0gW107CisgICAgICAgIGZpcnN0
TGluZS5yZXBsYWNlKGZyb20uY2gsIG51bGwsIG5ld1RleHRbMF0pOworICAgICAgICBsYXN0TGlu
ZS5yZXBsYWNlKG51bGwsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKKyAgICAg
ICAgZmlyc3RMaW5lLmZpeE1hcmtFbmRzKGxhc3RMaW5lKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDEsIGUgPSBuZXdUZXh0Lmxlbmd0aCAtIDE7IGkgPCBlOyArK2kpCisgICAgICAgICAgYWRkZWQu
cHVzaChMaW5lLmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKKyAgICAgICAg
aWYgKG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSwgY2Fs
bGJhY2tzKTsKKyAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CisgICAg
ICB9CisgICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAgICAgdmFyIHBlckxp
bmUgPSBNYXRoLm1heCg1LCBzY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aCgpIC0gMyk7
CisgICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgZnJvbS5saW5lICsgbmV3VGV4dC5sZW5ndGgs
IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgICBpZiAobGluZS5oaWRkZW4pIHJldHVybjsKKyAg
ICAgICAgICB2YXIgZ3Vlc3MgPSBNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUp
IHx8IDE7CisgICAgICAgICAgaWYgKGd1ZXNzICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVp
Z2h0KGxpbmUsIGd1ZXNzKTsKKyAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBk
b2MuaXRlcihmcm9tLmxpbmUsIGZyb20ubGluZSArIG5ld1RleHQubGVuZ3RoLCBmdW5jdGlvbihs
aW5lKSB7CisgICAgICAgICAgdmFyIGwgPSBsaW5lLnRleHQ7CisgICAgICAgICAgaWYgKCFsaW5l
LmhpZGRlbiAmJiBsLmxlbmd0aCA+IG1heExpbmVMZW5ndGgpIHsKKyAgICAgICAgICAgIG1heExp
bmUgPSBsaW5lOyBtYXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmVDaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlOworICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgICAgIGlmIChyZWNvbXB1dGVNYXhMZW5ndGgpIHVwZGF0ZU1heExp
bmUgPSB0cnVlOworICAgICAgfQorCisgICAgICAvLyBBZGQgdGhlc2UgbGluZXMgdG8gdGhlIHdv
cmsgYXJyYXksIHNvIHRoYXQgdGhleSB3aWxsIGJlCisgICAgICAvLyBoaWdobGlnaHRlZC4gQWRq
dXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgorICAgICAgdmFyIG5l
d1dvcmsgPSBbXSwgbGVuZGlmZiA9IG5ld1RleHQubGVuZ3RoIC0gbmxpbmVzIC0gMTsKKyAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gd29yay5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg
dmFyIHRhc2sgPSB3b3JrW2ldOworICAgICAgICBpZiAodGFzayA8IGZyb20ubGluZSkgbmV3V29y
ay5wdXNoKHRhc2spOworICAgICAgICBlbHNlIGlmICh0YXNrID4gdG8ubGluZSkgbmV3V29yay5w
dXNoKHRhc2sgKyBsZW5kaWZmKTsKKyAgICAgIH0KKyAgICAgIHZhciBobEVuZCA9IGZyb20ubGlu
ZSArIE1hdGgubWluKG5ld1RleHQubGVuZ3RoLCA1MDApOworICAgICAgaGlnaGxpZ2h0TGluZXMo
ZnJvbS5saW5lLCBobEVuZCk7CisgICAgICBuZXdXb3JrLnB1c2goaGxFbmQpOworICAgICAgd29y
ayA9IG5ld1dvcms7CisgICAgICBzdGFydFdvcmtlcigxMDApOworICAgICAgLy8gUmVtZW1iZXIg
dGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKKyAgICAg
IGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDEsIGRpZmY6IGxl
bmRpZmZ9KTsKKyAgICAgIHZhciBjaGFuZ2VPYmogPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0
OiBuZXdUZXh0fTsKKyAgICAgIGlmICh0ZXh0Q2hhbmdlZCkgeworICAgICAgICBmb3IgKHZhciBj
dXIgPSB0ZXh0Q2hhbmdlZDsgY3VyLm5leHQ7IGN1ciA9IGN1ci5uZXh0KSB7fQorICAgICAgICBj
dXIubmV4dCA9IGNoYW5nZU9iajsKKyAgICAgIH0gZWxzZSB0ZXh0Q2hhbmdlZCA9IGNoYW5nZU9i
ajsKKworICAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24KKyAgICAgIGZ1bmN0aW9uIHVwZGF0
ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZm
KSA/IG4gOiBuICsgbGVuZGlmZjt9CisgICAgICBzZXRTZWxlY3Rpb24oY2xpcFBvcyhzZWxGcm9t
KSwgY2xpcFBvcyhzZWxUbyksCisgICAgICAgICAgICAgICAgICAgdXBkYXRlTGluZShzZWwuZnJv
bS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IG5lZWRzU2Nyb2xsYmFyKCkgeworICAgICAgdmFyIHJlYWxIZWlnaHQgPSBkb2MuaGVpZ2h0ICog
dGV4dEhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKTsKKyAgICAgIHJldHVybiByZWFsSGVpZ2h0
IC0gMSA+IHNjcm9sbGVyLm9mZnNldEhlaWdodCA/IHJlYWxIZWlnaHQgOiBmYWxzZTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiB1cGRhdGVWZXJ0aWNhbFNjcm9sbChzY3JvbGxUb3ApIHsKKyAgICAg
IHZhciBzY3JvbGxIZWlnaHQgPSBuZWVkc1Njcm9sbGJhcigpOworICAgICAgc2Nyb2xsYmFyLnN0
eWxlLmRpc3BsYXkgPSBzY3JvbGxIZWlnaHQgPyAiYmxvY2siIDogIm5vbmUiOworICAgICAgaWYg
KHNjcm9sbEhlaWdodCkgeworICAgICAgICBzY3JvbGxiYXJJbm5lci5zdHlsZS5oZWlnaHQgPSBz
aXplci5zdHlsZS5taW5IZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyAicHgiOworICAgICAgICBzY3Jv
bGxiYXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgInB4IjsKKyAgICAg
ICAgaWYgKHNjcm9sbFRvcCAhPSBudWxsKSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0gc2Nyb2xsZXIu
c2Nyb2xsVG9wID0gc2Nyb2xsVG9wOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZXIuc3R5
bGUubWluSGVpZ2h0ID0gIiI7CisgICAgICB9CisgICAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIg
ZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgdmlydHVhbCBzY3JvbGwgcG9zaXRpb24KKyAg
ICAgIG1vdmVyLnN0eWxlLnRvcCA9IGRpc3BsYXlPZmZzZXQgKiB0ZXh0SGVpZ2h0KCkgKyAicHgi
OworICAgIH0KKworICAgIC8vIE9uIE1hYyBPUyBYIExpb24gYW5kIHVwLCBkZXRlY3Qgd2hldGhl
ciB0aGUgbW91c2UgaXMgcGx1Z2dlZCBpbiBieSBtZWFzdXJpbmcKKyAgICAvLyB0aGUgd2lkdGgg
b2YgYSBkaXYgd2l0aCBhIHNjcm9sbGJhciBpbiBpdC4gSWYgdGhlIHdpZHRoIGlzIDw9IDEsIHRo
ZW4KKyAgICAvLyB0aGUgbW91c2UgaXNuJ3QgcGx1Z2dlZCBpbiBhbmQgc2Nyb2xsYmFycyBzaG91
bGQgb3ZlcmxhcCB0aGUgY29udGVudC4KKyAgICBmdW5jdGlvbiBvdmVybGFwU2Nyb2xsYmFycygp
IHsKKyAgICAgIHZhciB0bXBTYklubmVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1z
Y3JvbGxiYXItaW5uZXIiLCAiaGVpZ2h0OiAyMDBweCIpOworICAgICAgdmFyIHRtcFNiID0gZWx0
KCJkaXYiLCBbdG1wU2JJbm5lcl0sICJDb2RlTWlycm9yLXNjcm9sbGJhciIsICJwb3NpdGlvbjog
YWJzb2x1dGU7IGxlZnQ6IC05OTk5cHg7IGhlaWdodDogMTAwcHg7Iik7CisgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHRtcFNiKTsKKyAgICAgIHZhciByZXN1bHQgPSAodG1wU2Iub2Zm
c2V0V2lkdGggPD0gMSk7CisgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRtcFNiKTsK
KyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tcHV0ZU1heExl
bmd0aCgpIHsKKyAgICAgIG1heExpbmUgPSBnZXRMaW5lKDApOyBtYXhMaW5lQ2hhbmdlZCA9IHRy
dWU7CisgICAgICB2YXIgbWF4TGluZUxlbmd0aCA9IG1heExpbmUudGV4dC5sZW5ndGg7CisgICAg
ICBkb2MuaXRlcigxLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgbCA9
IGxpbmUudGV4dDsKKyAgICAgICAgaWYgKCFsaW5lLmhpZGRlbiAmJiBsLmxlbmd0aCA+IG1heExp
bmVMZW5ndGgpIHsKKyAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmUg
PSBsaW5lOworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIHVwZGF0ZU1heExpbmUgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoY29kZSwgZnJvbSwgdG8pIHsK
KyAgICAgIGZyb20gPSBjbGlwUG9zKGZyb20pOworICAgICAgaWYgKCF0bykgdG8gPSBmcm9tOyBl
bHNlIHRvID0gY2xpcFBvcyh0byk7CisgICAgICBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKKyAg
ICAgIGZ1bmN0aW9uIGFkanVzdFBvcyhwb3MpIHsKKyAgICAgICAgaWYgKHBvc0xlc3MocG9zLCBm
cm9tKSkgcmV0dXJuIHBvczsKKyAgICAgICAgaWYgKCFwb3NMZXNzKHRvLCBwb3MpKSByZXR1cm4g
ZW5kOworICAgICAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY29kZS5sZW5ndGggLSAodG8ubGlu
ZSAtIGZyb20ubGluZSkgLSAxOworICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CisgICAgICAgIGlm
IChwb3MubGluZSA9PSB0by5saW5lKQorICAgICAgICAgIGNoICs9IGNvZGVbY29kZS5sZW5ndGgt
MV0ubGVuZ3RoIC0gKHRvLmNoIC0gKHRvLmxpbmUgPT0gZnJvbS5saW5lID8gZnJvbS5jaCA6IDAp
KTsKKyAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OworICAgICAgfQorICAgICAg
dmFyIGVuZDsKKyAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9uKGVu
ZDEpIHsKKyAgICAgICAgZW5kID0gZW5kMTsKKyAgICAgICAgcmV0dXJuIHtmcm9tOiBhZGp1c3RQ
b3Moc2VsLmZyb20pLCB0bzogYWRqdXN0UG9zKHNlbC50byl9OworICAgICAgfSk7CisgICAgICBy
ZXR1cm4gZW5kOworICAgIH0KKyAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUsIGNv
bGxhcHNlKSB7CisgICAgICByZXBsYWNlUmFuZ2UxKHNwbGl0TGluZXMoY29kZSksIHNlbC5mcm9t
LCBzZWwudG8sIGZ1bmN0aW9uKGVuZCkgeworICAgICAgICBpZiAoY29sbGFwc2UgPT0gImVuZCIp
IHJldHVybiB7ZnJvbTogZW5kLCB0bzogZW5kfTsKKyAgICAgICAgZWxzZSBpZiAoY29sbGFwc2Ug
PT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKKyAgICAg
ICAgZWxzZSByZXR1cm4ge2Zyb206IHNlbC5mcm9tLCB0bzogZW5kfTsKKyAgICAgIH0pOworICAg
IH0KKyAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UxKGNvZGUsIGZyb20sIHRvLCBjb21wdXRlU2Vs
KSB7CisgICAgICB2YXIgZW5kY2ggPSBjb2RlLmxlbmd0aCA9PSAxID8gY29kZVswXS5sZW5ndGgg
KyBmcm9tLmNoIDogY29kZVtjb2RlLmxlbmd0aC0xXS5sZW5ndGg7CisgICAgICB2YXIgbmV3U2Vs
ID0gY29tcHV0ZVNlbCh7bGluZTogZnJvbS5saW5lICsgY29kZS5sZW5ndGggLSAxLCBjaDogZW5k
Y2h9KTsKKyAgICAgIHVwZGF0ZUxpbmVzKGZyb20sIHRvLCBjb2RlLCBuZXdTZWwuZnJvbSwgbmV3
U2VsLnRvKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRSYW5nZShmcm9tLCB0bywgbGluZVNl
cCkgeworICAgICAgdmFyIGwxID0gZnJvbS5saW5lLCBsMiA9IHRvLmxpbmU7CisgICAgICBpZiAo
bDEgPT0gbDIpIHJldHVybiBnZXRMaW5lKGwxKS50ZXh0LnNsaWNlKGZyb20uY2gsIHRvLmNoKTsK
KyAgICAgIHZhciBjb2RlID0gW2dldExpbmUobDEpLnRleHQuc2xpY2UoZnJvbS5jaCldOworICAg
ICAgZG9jLml0ZXIobDEgKyAxLCBsMiwgZnVuY3Rpb24obGluZSkgeyBjb2RlLnB1c2gobGluZS50
ZXh0KTsgfSk7CisgICAgICBjb2RlLnB1c2goZ2V0TGluZShsMikudGV4dC5zbGljZSgwLCB0by5j
aCkpOworICAgICAgcmV0dXJuIGNvZGUuam9pbihsaW5lU2VwIHx8ICJcbiIpOworICAgIH0KKyAg
ICBmdW5jdGlvbiBnZXRTZWxlY3Rpb24obGluZVNlcCkgeworICAgICAgcmV0dXJuIGdldFJhbmdl
KHNlbC5mcm9tLCBzZWwudG8sIGxpbmVTZXApOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNsb3dQ
b2xsKCkgeworICAgICAgaWYgKHBvbGxpbmdGYXN0KSByZXR1cm47CisgICAgICBwb2xsLnNldChv
cHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7CisgICAgICAgIHN0YXJ0T3BlcmF0aW9u
KCk7CisgICAgICAgIHJlYWRJbnB1dCgpOworICAgICAgICBpZiAoZm9jdXNlZCkgc2xvd1BvbGwo
KTsKKyAgICAgICAgZW5kT3BlcmF0aW9uKCk7CisgICAgICB9KTsKKyAgICB9CisgICAgZnVuY3Rp
b24gZmFzdFBvbGwoKSB7CisgICAgICB2YXIgbWlzc2VkID0gZmFsc2U7CisgICAgICBwb2xsaW5n
RmFzdCA9IHRydWU7CisgICAgICBmdW5jdGlvbiBwKCkgeworICAgICAgICBzdGFydE9wZXJhdGlv
bigpOworICAgICAgICB2YXIgY2hhbmdlZCA9IHJlYWRJbnB1dCgpOworICAgICAgICBpZiAoIWNo
YW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IHBvbGwuc2V0KDYwLCBwKTt9CisgICAg
ICAgIGVsc2Uge3BvbGxpbmdGYXN0ID0gZmFsc2U7IHNsb3dQb2xsKCk7fQorICAgICAgICBlbmRP
cGVyYXRpb24oKTsKKyAgICAgIH0KKyAgICAgIHBvbGwuc2V0KDIwLCBwKTsKKyAgICB9CisKKyAg
ICAvLyBQcmV2aW5wdXQgaXMgYSBoYWNrIHRvIHdvcmsgd2l0aCBJTUUuIElmIHdlIHJlc2V0IHRo
ZSB0ZXh0YXJlYQorICAgIC8vIG9uIGV2ZXJ5IGNoYW5nZSwgdGhhdCBicmVha3MgSU1FLiBTbyB3
ZSBsb29rIGZvciBjaGFuZ2VzCisgICAgLy8gY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbnRl
bnQgaW5zdGVhZC4gKE1vZGVybiBicm93c2VycyBoYXZlCisgICAgLy8gZXZlbnRzIHRoYXQgaW5k
aWNhdGUgSU1FIHRha2luZyBwbGFjZSwgYnV0IHRoZXNlIGFyZSBub3Qgd2lkZWx5CisgICAgLy8g
c3VwcG9ydGVkIG9yIGNvbXBhdGlibGUgZW5vdWdoIHlldCB0byByZWx5IG9uLikKKyAgICB2YXIg
cHJldklucHV0ID0gIiI7CisgICAgZnVuY3Rpb24gcmVhZElucHV0KCkgeworICAgICAgaWYgKGxl
YXZlSW5wdXRBbG9uZSB8fCAhZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5wdXQpIHx8IG9wdGlv
bnMucmVhZE9ubHkpIHJldHVybiBmYWxzZTsKKyAgICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7
CisgICAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQpIHJldHVybiBmYWxzZTsKKyAgICAgIHNoaWZ0
U2VsZWN0aW5nID0gbnVsbDsKKyAgICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJ
bnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKKyAgICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2
SW5wdXRbc2FtZV0gPT0gdGV4dFtzYW1lXSkgKytzYW1lOworICAgICAgaWYgKHNhbWUgPCBwcmV2
SW5wdXQubGVuZ3RoKQorICAgICAgICBzZWwuZnJvbSA9IHtsaW5lOiBzZWwuZnJvbS5saW5lLCBj
aDogc2VsLmZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpfTsKKyAgICAgIGVsc2Ug
aWYgKG92ZXJ3cml0ZSAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkKKyAgICAgICAgc2VsLnRv
ID0ge2xpbmU6IHNlbC50by5saW5lLCBjaDogTWF0aC5taW4oZ2V0TGluZShzZWwudG8ubGluZSku
dGV4dC5sZW5ndGgsIHNlbC50by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNhbWUpKX07CisgICAgICBy
ZXBsYWNlU2VsZWN0aW9uKHRleHQuc2xpY2Uoc2FtZSksICJlbmQiKTsKKyAgICAgIGlmICh0ZXh0
Lmxlbmd0aCA+IDEwMDApIHsgaW5wdXQudmFsdWUgPSBwcmV2SW5wdXQgPSAiIjsgfQorICAgICAg
ZWxzZSBwcmV2SW5wdXQgPSB0ZXh0OworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGZ1
bmN0aW9uIHJlc2V0SW5wdXQodXNlcikgeworICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2Vs
LnRvKSkgeworICAgICAgICBwcmV2SW5wdXQgPSAiIjsKKyAgICAgICAgaW5wdXQudmFsdWUgPSBn
ZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgc2VsZWN0SW5wdXQoaW5wdXQpOworICAgICAgfSBlbHNl
IGlmICh1c2VyKSBwcmV2SW5wdXQgPSBpbnB1dC52YWx1ZSA9ICIiOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGZvY3VzSW5wdXQoKSB7CisgICAgICBpZiAob3B0aW9ucy5yZWFkT25seSAhPSAibm9j
dXJzb3IiKSBpbnB1dC5mb2N1cygpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjcm9sbEVkaXRv
ckludG9WaWV3KCkgeworICAgICAgdmFyIHJlY3QgPSBjdXJzb3IuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CisgICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIGNvb3JkaW5hdGVzIHdoZW4gdGhlIGlu
c3RhbmNlIHNpdHMgaW5zaWRlIG9mIGFuIGlmcmFtZSBhbmQgdGhlIGN1cnNvciBpcyBoaWRkZW4K
KyAgICAgIGlmIChpZSAmJiByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkgcmV0dXJuOworICAgICAg
dmFyIHdpbkggPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5v
ZmZzZXRIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpOworICAg
ICAgaWYgKHJlY3QudG9wIDwgMCB8fCByZWN0LmJvdHRvbSA+IHdpbkgpIHNjcm9sbEN1cnNvcklu
dG9WaWV3KCk7CisgICAgfQorICAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KCkgewor
ICAgICAgdmFyIGNvb3JkcyA9IGNhbGN1bGF0ZUN1cnNvckNvb3JkcygpOworICAgICAgc2Nyb2xs
SW50b1ZpZXcoY29vcmRzLngsIGNvb3Jkcy55LCBjb29yZHMueCwgY29vcmRzLnlCb3QpOworICAg
IH0KKyAgICBmdW5jdGlvbiBjYWxjdWxhdGVDdXJzb3JDb29yZHMoKSB7CisgICAgICB2YXIgY3Vy
c29yID0gbG9jYWxDb29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8pOworICAg
ICAgdmFyIHggPSBvcHRpb25zLmxpbmVXcmFwcGluZyA/IE1hdGgubWluKGN1cnNvci54LCBsaW5l
U3BhY2Uub2Zmc2V0V2lkdGgpIDogY3Vyc29yLng7CisgICAgICByZXR1cm4ge3g6IHgsIHk6IGN1
cnNvci55LCB5Qm90OiBjdXJzb3IueUJvdH07CisgICAgfQorICAgIGZ1bmN0aW9uIHNjcm9sbElu
dG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICB2YXIgc2Nyb2xsUG9zID0gY2FsY3VsYXRl
U2Nyb2xsUG9zKHgxLCB5MSwgeDIsIHkyKTsKKyAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVm
dCAhPSBudWxsKSB7c2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvcy5zY3JvbGxMZWZ0O30K
KyAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtzY3JvbGxiYXIuc2Nyb2xs
VG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zLnNjcm9sbFRvcDt9CisgICAgfQor
ICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyh4MSwgeTEsIHgyLCB5MikgeworICAgICAg
dmFyIHBsID0gcGFkZGluZ0xlZnQoKSwgcHQgPSBwYWRkaW5nVG9wKCk7CisgICAgICB5MSArPSBw
dDsgeTIgKz0gcHQ7IHgxICs9IHBsOyB4MiArPSBwbDsKKyAgICAgIHZhciBzY3JlZW4gPSBzY3Jv
bGxlci5jbGllbnRIZWlnaHQsIHNjcmVlbnRvcCA9IHNjcm9sbGJhci5zY3JvbGxUb3AsIHJlc3Vs
dCA9IHt9OworICAgICAgdmFyIGRvY0JvdHRvbSA9IG5lZWRzU2Nyb2xsYmFyKCkgfHwgSW5maW5p
dHk7CisgICAgICB2YXIgYXRUb3AgPSB5MSA8IHB0ICsgMTAsIGF0Qm90dG9tID0geTIgKyBwdCA+
IGRvY0JvdHRvbSAtIDEwOworICAgICAgaWYgKHkxIDwgc2NyZWVudG9wKSByZXN1bHQuc2Nyb2xs
VG9wID0gYXRUb3AgPyAwIDogTWF0aC5tYXgoMCwgeTEpOworICAgICAgZWxzZSBpZiAoeTIgPiBz
Y3JlZW50b3AgKyBzY3JlZW4pIHJlc3VsdC5zY3JvbGxUb3AgPSAoYXRCb3R0b20gPyBkb2NCb3R0
b20gOiB5MikgLSBzY3JlZW47CisKKyAgICAgIHZhciBzY3JlZW53ID0gc2Nyb2xsZXIuY2xpZW50
V2lkdGgsIHNjcmVlbmxlZnQgPSBzY3JvbGxlci5zY3JvbGxMZWZ0OworICAgICAgdmFyIGd1dHRl
cncgPSBvcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyLmNsaWVudFdpZHRoIDogMDsKKyAgICAg
IHZhciBhdExlZnQgPSB4MSA8IGd1dHRlcncgKyBwbCArIDEwOworICAgICAgaWYgKHgxIDwgc2Ny
ZWVubGVmdCArIGd1dHRlcncgfHwgYXRMZWZ0KSB7CisgICAgICAgIGlmIChhdExlZnQpIHgxID0g
MDsKKyAgICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0
dGVydyk7CisgICAgICB9IGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKSB7
CisgICAgICAgIHJlc3VsdC5zY3JvbGxMZWZ0ID0geDIgKyAxMCAtIHNjcmVlbnc7CisgICAgICB9
CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHZpc2libGVMaW5l
cyhzY3JvbGxUb3ApIHsKKyAgICAgIHZhciBsaCA9IHRleHRIZWlnaHQoKSwgdG9wID0gKHNjcm9s
bFRvcCAhPSBudWxsID8gc2Nyb2xsVG9wIDogc2Nyb2xsYmFyLnNjcm9sbFRvcCkgLSBwYWRkaW5n
VG9wKCk7CisgICAgICB2YXIgZnJvbUhlaWdodCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodG9w
IC8gbGgpKTsKKyAgICAgIHZhciB0b0hlaWdodCA9IE1hdGguY2VpbCgodG9wICsgc2Nyb2xsZXIu
Y2xpZW50SGVpZ2h0KSAvIGxoKTsKKyAgICAgIHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0KGRv
YywgZnJvbUhlaWdodCksCisgICAgICAgICAgICAgIHRvOiBsaW5lQXRIZWlnaHQoZG9jLCB0b0hl
aWdodCl9OworICAgIH0KKyAgICAvLyBVc2VzIGEgc2V0IG9mIGNoYW5nZXMgcGx1cyB0aGUgY3Vy
cmVudCBzY3JvbGwgcG9zaXRpb24gdG8KKyAgICAvLyBkZXRlcm1pbmUgd2hpY2ggRE9NIHVwZGF0
ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCisgICAgLy8gdXBkYXRlcy4KKyAgICBm
dW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHN1cHByZXNzQ2FsbGJhY2ssIHNjcm9sbFRv
cCkgeworICAgICAgaWYgKCFzY3JvbGxlci5jbGllbnRXaWR0aCkgeworICAgICAgICBzaG93aW5n
RnJvbSA9IHNob3dpbmdUbyA9IGRpc3BsYXlPZmZzZXQgPSAwOworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICAvLyBDb21wdXRlIHRoZSBuZXcgdmlzaWJsZSB3aW5kb3cKKyAgICAgIC8v
IElmIHNjcm9sbFRvcCBpcyBzcGVjaWZpZWQsIHVzZSB0aGF0IHRvIGRldGVybWluZSB3aGljaCBs
aW5lcworICAgICAgLy8gdG8gcmVuZGVyIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsYmFy
IHBvc2l0aW9uLgorICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoc2Nyb2xsVG9wKTsK
KyAgICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJl
ZCBhbmQgbm90aGluZyBjaGFuZ2VkLgorICAgICAgaWYgKGNoYW5nZXMgIT09IHRydWUgJiYgY2hh
bmdlcy5sZW5ndGggPT0gMCAmJiB2aXNpYmxlLmZyb20gPiBzaG93aW5nRnJvbSAmJiB2aXNpYmxl
LnRvIDwgc2hvd2luZ1RvKSB7CisgICAgICAgIHVwZGF0ZVZlcnRpY2FsU2Nyb2xsKHNjcm9sbFRv
cCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgo
dmlzaWJsZS5mcm9tIC0gMTAwLCAwKSwgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgdmlzaWJsZS50
byArIDEwMCk7CisgICAgICBpZiAoc2hvd2luZ0Zyb20gPCBmcm9tICYmIGZyb20gLSBzaG93aW5n
RnJvbSA8IDIwKSBmcm9tID0gc2hvd2luZ0Zyb207CisgICAgICBpZiAoc2hvd2luZ1RvID4gdG8g
JiYgc2hvd2luZ1RvIC0gdG8gPCAyMCkgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgc2hvd2luZ1Rv
KTsKKworICAgICAgLy8gQ3JlYXRlIGEgcmFuZ2Ugb2YgdGhlb3JldGljYWxseSBpbnRhY3QgbGlu
ZXMsIGFuZCBwdW5jaCBob2xlcworICAgICAgLy8gaW4gdGhhdCB1c2luZyB0aGUgY2hhbmdlIGlu
Zm8uCisgICAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1ZSA/IFtdIDoKKyAgICAgICAg
Y29tcHV0ZUludGFjdChbe2Zyb206IHNob3dpbmdGcm9tLCB0bzogc2hvd2luZ1RvLCBkb21TdGFy
dDogMH1dLCBjaGFuZ2VzKTsKKyAgICAgIC8vIENsaXAgb2ZmIHRoZSBwYXJ0cyB0aGF0IHdvbid0
IGJlIHZpc2libGUKKyAgICAgIHZhciBpbnRhY3RMaW5lcyA9IDA7CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGludGFjdC5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcmFuZ2UgPSBpbnRh
Y3RbaV07CisgICAgICAgIGlmIChyYW5nZS5mcm9tIDwgZnJvbSkge3JhbmdlLmRvbVN0YXJ0ICs9
IChmcm9tIC0gcmFuZ2UuZnJvbSk7IHJhbmdlLmZyb20gPSBmcm9tO30KKyAgICAgICAgaWYgKHJh
bmdlLnRvID4gdG8pIHJhbmdlLnRvID0gdG87CisgICAgICAgIGlmIChyYW5nZS5mcm9tID49IHJh
bmdlLnRvKSBpbnRhY3Quc3BsaWNlKGktLSwgMSk7CisgICAgICAgIGVsc2UgaW50YWN0TGluZXMg
Kz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tOworICAgICAgfQorICAgICAgaWYgKGludGFjdExpbmVz
ID09IHRvIC0gZnJvbSAmJiBmcm9tID09IHNob3dpbmdGcm9tICYmIHRvID09IHNob3dpbmdUbykg
eworICAgICAgICB1cGRhdGVWZXJ0aWNhbFNjcm9sbChzY3JvbGxUb3ApOworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICBpbnRhY3Quc29ydChmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGEu
ZG9tU3RhcnQgLSBiLmRvbVN0YXJ0O30pOworCisgICAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KCks
IGd1dHRlckRpc3BsYXkgPSBndXR0ZXIuc3R5bGUuZGlzcGxheTsKKyAgICAgIGxpbmVEaXYuc3R5
bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgIHBhdGNoRGlzcGxheShmcm9tLCB0bywgaW50YWN0
KTsKKyAgICAgIGxpbmVEaXYuc3R5bGUuZGlzcGxheSA9IGd1dHRlci5zdHlsZS5kaXNwbGF5ID0g
IiI7CisKKyAgICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IHNob3dpbmdGcm9tIHx8IHRvICE9
IHNob3dpbmdUbyB8fCBsYXN0U2l6ZUMgIT0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7Cisg
ICAgICAvLyBUaGlzIGlzIGp1c3QgYSBib2d1cyBmb3JtdWxhIHRoYXQgZGV0ZWN0cyB3aGVuIHRo
ZSBlZGl0b3IgaXMKKyAgICAgIC8vIHJlc2l6ZWQgb3IgdGhlIGZvbnQgc2l6ZSBjaGFuZ2VzLgor
ICAgICAgaWYgKGRpZmZlcmVudCkgbGFzdFNpemVDID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsg
dGg7CisgICAgICBzaG93aW5nRnJvbSA9IGZyb207IHNob3dpbmdUbyA9IHRvOworICAgICAgZGlz
cGxheU9mZnNldCA9IGhlaWdodEF0TGluZShkb2MsIGZyb20pOworCisgICAgICAvLyBTaW5jZSB0
aGlzIGlzIGFsbCByYXRoZXIgZXJyb3IgcHJvbmUsIGl0IGlzIGhvbm91cmVkIHdpdGggdGhlCisg
ICAgICAvLyBvbmx5IGFzc2VydGlvbiBpbiB0aGUgd2hvbGUgZmlsZS4KKyAgICAgIGlmIChsaW5l
RGl2LmNoaWxkTm9kZXMubGVuZ3RoICE9IHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJBRCBQQVRDSCEgIiArIEpTT04uc3RyaW5naWZ5KGludGFjdCkg
KyAiIHNpemU9IiArIChzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkgKworICAgICAgICAgICAgICAg
ICAgICAgICAgIiBub2Rlcz0iICsgbGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCk7CisKKyAgICAg
IGZ1bmN0aW9uIGNoZWNrSGVpZ2h0cygpIHsKKyAgICAgICAgdmFyIGN1ck5vZGUgPSBsaW5lRGl2
LmZpcnN0Q2hpbGQsIGhlaWdodENoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZG9jLml0ZXIoc2hv
d2luZ0Zyb20sIHNob3dpbmdUbywgZnVuY3Rpb24obGluZSkgeworICAgICAgICAgIC8vIFdvcmsg
YXJvdW5kIGJpemFycm8gSUU3IGJ1ZyB3aGVyZSwgc29tZXRpbWVzLCBvdXIgY3VyTm9kZQorICAg
ICAgICAgIC8vIGlzIG1hZ2ljYWxseSByZXBsYWNlZCB3aXRoIGEgbmV3IG5vZGUgaW4gdGhlIERP
TSwgbGVhdmluZworICAgICAgICAgIC8vIHVzIHdpdGggYSByZWZlcmVuY2UgdG8gYW4gb3JwaGFu
IChuZXh0U2libGluZy1sZXNzKSBub2RlLgorICAgICAgICAgIGlmICghY3VyTm9kZSkgcmV0dXJu
OworICAgICAgICAgIGlmICghbGluZS5oaWRkZW4pIHsKKyAgICAgICAgICAgIHZhciBoZWlnaHQg
PSBNYXRoLnJvdW5kKGN1ck5vZGUub2Zmc2V0SGVpZ2h0IC8gdGgpIHx8IDE7CisgICAgICAgICAg
ICBpZiAobGluZS5oZWlnaHQgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICAgIHVwZGF0ZUxpbmVI
ZWlnaHQobGluZSwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgZ3V0dGVyRGlydHkgPSBoZWlnaHRD
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgY3Vy
Tm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4g
aGVpZ2h0Q2hhbmdlZDsKKyAgICAgIH0KKworICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5n
KSB7CisgICAgICAgIGNoZWNrSGVpZ2h0cygpOworICAgICAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0g
bmVlZHNTY3JvbGxiYXIoKTsKKyAgICAgICAgdmFyIHNob3VsZEhhdmVTY3JvbGxiYXIgPSBzY3Jv
bGxIZWlnaHQgPyAiYmxvY2siIDogIm5vbmUiOworICAgICAgICBpZiAoc2Nyb2xsYmFyLnN0eWxl
LmRpc3BsYXkgIT0gc2hvdWxkSGF2ZVNjcm9sbGJhcikgeworICAgICAgICAgIHNjcm9sbGJhci5z
dHlsZS5kaXNwbGF5ID0gc2hvdWxkSGF2ZVNjcm9sbGJhcjsKKyAgICAgICAgICBpZiAoc2Nyb2xs
SGVpZ2h0KSBzY3JvbGxiYXJJbm5lci5zdHlsZS5oZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyAicHgi
OworICAgICAgICAgIGNoZWNrSGVpZ2h0cygpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gZ3V0dGVyRGlzcGxheTsKKyAgICAgIGlmIChkaWZmZXJl
bnQgfHwgZ3V0dGVyRGlydHkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGd1dHRlciBncmV3IGluIHNp
emUsIHJlLWNoZWNrIGhlaWdodHMuIElmIHRob3NlIGNoYW5nZWQsIHJlLWRyYXcgZ3V0dGVyLgor
ICAgICAgICB1cGRhdGVHdXR0ZXIoKSAmJiBvcHRpb25zLmxpbmVXcmFwcGluZyAmJiBjaGVja0hl
aWdodHMoKSAmJiB1cGRhdGVHdXR0ZXIoKTsKKyAgICAgIH0KKyAgICAgIHVwZGF0ZVZlcnRpY2Fs
U2Nyb2xsKHNjcm9sbFRvcCk7CisgICAgICB1cGRhdGVTZWxlY3Rpb24oKTsKKyAgICAgIGlmICgh
c3VwcHJlc3NDYWxsYmFjayAmJiBvcHRpb25zLm9uVXBkYXRlKSBvcHRpb25zLm9uVXBkYXRlKGlu
c3RhbmNlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXB1
dGVJbnRhY3QoaW50YWN0LCBjaGFuZ2VzKSB7CisgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNo
YW5nZXMubGVuZ3RoIHx8IDA7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgdmFyIGNoYW5nZSA9IGNo
YW5nZXNbaV0sIGludGFjdDIgPSBbXSwgZGlmZiA9IGNoYW5nZS5kaWZmIHx8IDA7CisgICAgICAg
IGZvciAodmFyIGogPSAwLCBsMiA9IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7CisgICAg
ICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2pdOworICAgICAgICAgIGlmIChjaGFuZ2UudG8gPD0g
cmFuZ2UuZnJvbSAmJiBjaGFuZ2UuZGlmZikKKyAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJv
bTogcmFuZ2UuZnJvbSArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOworICAgICAgICAgIGVsc2Ug
aWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tIHx8IGNoYW5nZS5mcm9tID49IHJhbmdlLnRvKQor
ICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHJhbmdlKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChjaGFuZ2UuZnJvbSA+IHJhbmdlLmZyb20pCisgICAgICAgICAgICAgIGludGFj
dDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IGNoYW5nZS5mcm9tLCBkb21TdGFydDogcmFu
Z2UuZG9tU3RhcnR9KTsKKyAgICAgICAgICAgIGlmIChjaGFuZ2UudG8gPCByYW5nZS50bykKKyAg
ICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiBjaGFuZ2UudG8gKyBkaWZmLCB0bzogcmFu
Z2UudG8gKyBkaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVN0YXJ0OiByYW5n
ZS5kb21TdGFydCArIChjaGFuZ2UudG8gLSByYW5nZS5mcm9tKX0pOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpbnRhY3QgPSBpbnRhY3QyOworICAgICAgfQorICAgICAgcmV0dXJu
IGludGFjdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoZnJvbSwgdG8sIGlu
dGFjdCkgeworICAgICAgZnVuY3Rpb24ga2lsbE5vZGUobm9kZSkgeworICAgICAgICB2YXIgdG1w
ID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KG5vZGUpOworICAgICAgICByZXR1cm4gdG1wOworICAgICAgfQorICAgICAgLy8gVGhlIGZpcnN0
IHBhc3MgcmVtb3ZlcyB0aGUgRE9NIG5vZGVzIHRoYXQgYXJlbid0IGludGFjdC4KKyAgICAgIGlm
ICghaW50YWN0Lmxlbmd0aCkgcmVtb3ZlQ2hpbGRyZW4obGluZURpdik7CisgICAgICBlbHNlIHsK
KyAgICAgICAgdmFyIGRvbVBvcyA9IDAsIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQsIG47
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgdmFyIGN1ciA9IGludGFjdFtpXTsKKyAgICAgICAgICB3aGlsZSAoY3VyLmRvbVN0YXJ0
ID4gZG9tUG9zKSB7Y3VyTm9kZSA9IGtpbGxOb2RlKGN1ck5vZGUpOyBkb21Qb3MrKzt9CisgICAg
ICAgICAgZm9yICh2YXIgaiA9IDAsIGUgPSBjdXIudG8gLSBjdXIuZnJvbTsgaiA8IGU7ICsraikg
e2N1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOyBkb21Qb3MrKzt9CisgICAgICAgIH0KKyAg
ICAgICAgd2hpbGUgKGN1ck5vZGUpIGN1ck5vZGUgPSBraWxsTm9kZShjdXJOb2RlKTsKKyAgICAg
IH0KKyAgICAgIC8vIFRoaXMgcGFzcyBmaWxscyBpbiB0aGUgbGluZXMgdGhhdCBhY3R1YWxseSBj
aGFuZ2VkLgorICAgICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwgY3VyTm9kZSA9
IGxpbmVEaXYuZmlyc3RDaGlsZCwgaiA9IGZyb207CisgICAgICBkb2MuaXRlcihmcm9tLCB0bywg
ZnVuY3Rpb24obGluZSkgeworICAgICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRv
ID09IGopIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKTsKKyAgICAgICAgaWYgKCFuZXh0SW50
YWN0IHx8IG5leHRJbnRhY3QuZnJvbSA+IGopIHsKKyAgICAgICAgICBpZiAobGluZS5oaWRkZW4p
IHZhciBsaW5lRWxlbWVudCA9IGVsdCgicHJlIik7CisgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIgbGluZUVsZW1lbnQgPSBsaW5lLmdldEVsZW1lbnQobWFrZVRhYik7CisgICAgICAg
ICAgICBpZiAobGluZS5jbGFzc05hbWUpIGxpbmVFbGVtZW50LmNsYXNzTmFtZSA9IGxpbmUuY2xh
c3NOYW1lOworICAgICAgICAgICAgLy8gS2x1ZGdlIHRvIG1ha2Ugc3VyZSB0aGUgc3R5bGVkIGVs
ZW1lbnQgbGllcyBiZWhpbmQgdGhlIHNlbGVjdGlvbiAoYnkgei1pbmRleCkKKyAgICAgICAgICAg
IGlmIChsaW5lLmJnQ2xhc3NOYW1lKSB7CisgICAgICAgICAgICAgIHZhciBwcmUgPSBlbHQoInBy
ZSIsICJcdTAwYTAiLCBsaW5lLmJnQ2xhc3NOYW1lLCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0
OiAwOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7IHotaW5kZXg6IC0yIik7CisgICAgICAg
ICAgICAgIGxpbmVFbGVtZW50ID0gZWx0KCJkaXYiLCBbcHJlLCBsaW5lRWxlbWVudF0sIG51bGws
ICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg
ICAgICAgbGluZURpdi5pbnNlcnRCZWZvcmUobGluZUVsZW1lbnQsIGN1ck5vZGUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOworICAg
ICAgICB9CisgICAgICAgICsrajsKKyAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVw
ZGF0ZUd1dHRlcigpIHsKKyAgICAgIGlmICghb3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGlu
ZU51bWJlcnMpIHJldHVybjsKKyAgICAgIHZhciBoVGV4dCA9IG1vdmVyLm9mZnNldEhlaWdodCwg
aEVkaXRvciA9IHNjcm9sbGVyLmNsaWVudEhlaWdodDsKKyAgICAgIGd1dHRlci5zdHlsZS5oZWln
aHQgPSAoaFRleHQgLSBoRWRpdG9yIDwgMiA/IGhFZGl0b3IgOiBoVGV4dCkgKyAicHgiOworICAg
ICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBpID0g
c2hvd2luZ0Zyb20sIG5vcm1hbE5vZGU7CisgICAgICBkb2MuaXRlcihzaG93aW5nRnJvbSwgTWF0
aC5tYXgoc2hvd2luZ1RvLCBzaG93aW5nRnJvbSArIDEpLCBmdW5jdGlvbihsaW5lKSB7CisgICAg
ICAgIGlmIChsaW5lLmhpZGRlbikgeworICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVs
dCgicHJlIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBtYXJrZXIgPSBsaW5l
Lmd1dHRlck1hcmtlcjsKKyAgICAgICAgICB2YXIgdGV4dCA9IG9wdGlvbnMubGluZU51bWJlcnMg
PyBvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVy
KSA6IG51bGw7CisgICAgICAgICAgaWYgKG1hcmtlciAmJiBtYXJrZXIudGV4dCkKKyAgICAgICAg
ICAgIHRleHQgPSBtYXJrZXIudGV4dC5yZXBsYWNlKCIlTiUiLCB0ZXh0ICE9IG51bGwgPyB0ZXh0
IDogIiIpOworICAgICAgICAgIGVsc2UgaWYgKHRleHQgPT0gbnVsbCkKKyAgICAgICAgICAgIHRl
eHQgPSAiXHUwMGEwIjsKKyAgICAgICAgICB2YXIgbWFya2VyRWxlbWVudCA9IGZyYWdtZW50LmFw
cGVuZENoaWxkKGVsdCgicHJlIiwgbnVsbCwgbWFya2VyICYmIG1hcmtlci5zdHlsZSkpOworICAg
ICAgICAgIG1hcmtlckVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDsKKyAgICAgICAgICBmb3IgKHZh
ciBqID0gMTsgaiA8IGxpbmUuaGVpZ2h0OyArK2opIHsKKyAgICAgICAgICAgIG1hcmtlckVsZW1l
bnQuYXBwZW5kQ2hpbGQoZWx0KCJiciIpKTsKKyAgICAgICAgICAgIG1hcmtlckVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MDBhMCIpKTsKKyAgICAgICAgICB9
CisgICAgICAgICAgaWYgKCFtYXJrZXIpIG5vcm1hbE5vZGUgPSBpOworICAgICAgICB9CisgICAg
ICAgICsraTsKKyAgICAgIH0pOworICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CisgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChndXR0ZXJUZXh0LCBmcmFnbWVudCk7CisgICAg
ICAvLyBNYWtlIHN1cmUgc2Nyb2xsaW5nIGRvZXNuJ3QgY2F1c2UgbnVtYmVyIGd1dHRlciBzaXpl
IHRvIHBvcAorICAgICAgaWYgKG5vcm1hbE5vZGUgIT0gbnVsbCAmJiBvcHRpb25zLmxpbmVOdW1i
ZXJzKSB7CisgICAgICAgIHZhciBub2RlID0gZ3V0dGVyVGV4dC5jaGlsZE5vZGVzW25vcm1hbE5v
ZGUgLSBzaG93aW5nRnJvbV07CisgICAgICAgIHZhciBtaW53aWR0aCA9IFN0cmluZyhkb2Muc2l6
ZSkubGVuZ3RoLCB2YWwgPSBlbHRUZXh0KG5vZGUuZmlyc3RDaGlsZCksIHBhZCA9ICIiOworICAg
ICAgICB3aGlsZSAodmFsLmxlbmd0aCArIHBhZC5sZW5ndGggPCBtaW53aWR0aCkgcGFkICs9ICJc
dTAwYTAiOworICAgICAgICBpZiAocGFkKSBub2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShwYWQpLCBub2RlLmZpcnN0Q2hpbGQpOworICAgICAgfQorICAgICAgZ3V0dGVy
LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgIHZhciByZXNpemVkID0gTWF0aC5hYnMoKHBhcnNl
SW50KGxpbmVTcGFjZS5zdHlsZS5tYXJnaW5MZWZ0KSB8fCAwKSAtIGd1dHRlci5vZmZzZXRXaWR0
aCkgPiAyOworICAgICAgbGluZVNwYWNlLnN0eWxlLm1hcmdpbkxlZnQgPSBndXR0ZXIub2Zmc2V0
V2lkdGggKyAicHgiOworICAgICAgZ3V0dGVyRGlydHkgPSBmYWxzZTsKKyAgICAgIHJldHVybiBy
ZXNpemVkOworICAgIH0KKyAgICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oKSB7CisgICAgICB2
YXIgY29sbGFwc2VkID0gcG9zRXEoc2VsLmZyb20sIHNlbC50byk7CisgICAgICB2YXIgZnJvbVBv
cyA9IGxvY2FsQ29vcmRzKHNlbC5mcm9tLCB0cnVlKTsKKyAgICAgIHZhciB0b1BvcyA9IGNvbGxh
cHNlZCA/IGZyb21Qb3MgOiBsb2NhbENvb3JkcyhzZWwudG8sIHRydWUpOworICAgICAgdmFyIGhl
YWRQb3MgPSBzZWwuaW52ZXJ0ZWQgPyBmcm9tUG9zIDogdG9Qb3MsIHRoID0gdGV4dEhlaWdodCgp
OworICAgICAgdmFyIHdyYXBPZmYgPSBlbHRPZmZzZXQod3JhcHBlciksIGxpbmVPZmYgPSBlbHRP
ZmZzZXQobGluZURpdik7CisgICAgICBpbnB1dERpdi5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBN
YXRoLm1pbihzY3JvbGxlci5vZmZzZXRIZWlnaHQsIGhlYWRQb3MueSArIGxpbmVPZmYudG9wIC0g
d3JhcE9mZi50b3ApKSArICJweCI7CisgICAgICBpbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5t
YXgoMCwgTWF0aC5taW4oc2Nyb2xsZXIub2Zmc2V0V2lkdGgsIGhlYWRQb3MueCArIGxpbmVPZmYu
bGVmdCAtIHdyYXBPZmYubGVmdCkpICsgInB4IjsKKyAgICAgIGlmIChjb2xsYXBzZWQpIHsKKyAg
ICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IGhlYWRQb3MueSArICJweCI7CisgICAgICAgIGN1cnNv
ci5zdHlsZS5sZWZ0ID0gKG9wdGlvbnMubGluZVdyYXBwaW5nID8gTWF0aC5taW4oaGVhZFBvcy54
LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogaGVhZFBvcy54KSArICJweCI7CisgICAgICAgIGN1
cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNw
bGF5ID0gIm5vbmUiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHNhbWVMaW5lID0gZnJv
bVBvcy55ID09IHRvUG9zLnksIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOworICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBsaW5lU3BhY2UuY2xpZW50V2lkdGgg
fHwgbGluZVNwYWNlLm9mZnNldFdpZHRoOworICAgICAgICB2YXIgY2xpZW50SGVpZ2h0ID0gbGlu
ZVNwYWNlLmNsaWVudEhlaWdodCB8fCBsaW5lU3BhY2Uub2Zmc2V0SGVpZ2h0OworICAgICAgICB2
YXIgYWRkID0gZnVuY3Rpb24obGVmdCwgdG9wLCByaWdodCwgaGVpZ2h0KSB7CisgICAgICAgICAg
dmFyIHJzdHlsZSA9IHF1aXJrc01vZGUgPyAid2lkdGg6ICIgKyAoIXJpZ2h0ID8gY2xpZW50V2lk
dGggOiBjbGllbnRXaWR0aCAtIHJpZ2h0IC0gbGVmdCkgKyAicHgiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAicmlnaHQ6ICIgKyByaWdodCArICJweCI7CisgICAgICAgICAg
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zZWxlY3Rl
ZCIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKyBsZWZ0ICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInB4OyB0b3A6ICIgKyB0b3AgKyAicHg7ICIgKyByc3R5bGUg
KyAiOyBoZWlnaHQ6ICIgKyBoZWlnaHQgKyAicHgiKSk7CisgICAgICAgIH07CisgICAgICAgIGlm
IChzZWwuZnJvbS5jaCAmJiBmcm9tUG9zLnkgPj0gMCkgeworICAgICAgICAgIHZhciByaWdodCA9
IHNhbWVMaW5lID8gY2xpZW50V2lkdGggLSB0b1Bvcy54IDogMDsKKyAgICAgICAgICBhZGQoZnJv
bVBvcy54LCBmcm9tUG9zLnksIHJpZ2h0LCB0aCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1p
ZGRsZVN0YXJ0ID0gTWF0aC5tYXgoMCwgZnJvbVBvcy55ICsgKHNlbC5mcm9tLmNoID8gdGggOiAw
KSk7CisgICAgICAgIHZhciBtaWRkbGVIZWlnaHQgPSBNYXRoLm1pbih0b1Bvcy55LCBjbGllbnRI
ZWlnaHQpIC0gbWlkZGxlU3RhcnQ7CisgICAgICAgIGlmIChtaWRkbGVIZWlnaHQgPiAwLjIgKiB0
aCkKKyAgICAgICAgICBhZGQoMCwgbWlkZGxlU3RhcnQsIDAsIG1pZGRsZUhlaWdodCk7CisgICAg
ICAgIGlmICgoIXNhbWVMaW5lIHx8ICFzZWwuZnJvbS5jaCkgJiYgdG9Qb3MueSA8IGNsaWVudEhl
aWdodCAtIC41ICogdGgpCisgICAgICAgICAgYWRkKDAsIHRvUG9zLnksIGNsaWVudFdpZHRoIC0g
dG9Qb3MueCwgdGgpOworICAgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChzZWxlY3Rpb25EaXYs
IGZyYWdtZW50KTsKKyAgICAgICAgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAg
ICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc2V0U2hpZnQodmFsKSB7CisgICAgICBpZiAodmFsKSBzaGlmdFNlbGVjdGlu
ZyA9IHNoaWZ0U2VsZWN0aW5nIHx8IChzZWwuaW52ZXJ0ZWQgPyBzZWwudG8gOiBzZWwuZnJvbSk7
CisgICAgICBlbHNlIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKKyAgICB9CisgICAgZnVuY3Rpb24g
c2V0U2VsZWN0aW9uVXNlcihmcm9tLCB0bykgeworICAgICAgdmFyIHNoID0gc2hpZnRTZWxlY3Rp
bmcgJiYgY2xpcFBvcyhzaGlmdFNlbGVjdGluZyk7CisgICAgICBpZiAoc2gpIHsKKyAgICAgICAg
aWYgKHBvc0xlc3Moc2gsIGZyb20pKSBmcm9tID0gc2g7CisgICAgICAgIGVsc2UgaWYgKHBvc0xl
c3ModG8sIHNoKSkgdG8gPSBzaDsKKyAgICAgIH0KKyAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0
byk7CisgICAgICB1c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisgICAgLy8gVXBkYXRlIHRo
ZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJlIG9ubHkgdXNlZCBieQorICAgIC8vIHVwZGF0
ZUxpbmVzLCBzaW5jZSB0aGV5IGhhdmUgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBsaW5lCisgICAg
Ly8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KKyAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24o
ZnJvbSwgdG8sIG9sZEZyb20sIG9sZFRvKSB7CisgICAgICBnb2FsQ29sdW1uID0gbnVsbDsKKyAg
ICAgIGlmIChvbGRGcm9tID09IG51bGwpIHtvbGRGcm9tID0gc2VsLmZyb20ubGluZTsgb2xkVG8g
PSBzZWwudG8ubGluZTt9CisgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIGZyb20pICYmIHBvc0Vx
KHNlbC50bywgdG8pKSByZXR1cm47CisgICAgICBpZiAocG9zTGVzcyh0bywgZnJvbSkpIHt2YXIg
dG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9IHRtcDt9CisKKyAgICAgIC8vIFNraXAgb3ZlciBo
aWRkZW4gbGluZXMuCisgICAgICBpZiAoZnJvbS5saW5lICE9IG9sZEZyb20pIHsKKyAgICAgICAg
dmFyIGZyb20xID0gc2tpcEhpZGRlbihmcm9tLCBvbGRGcm9tLCBzZWwuZnJvbS5jaCk7CisgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIG5vbi1oaWRkZW4gbGluZSBsZWZ0LCBmb3JjZSB2aXNpYmls
aXR5IG9uIGN1cnJlbnQgbGluZQorICAgICAgICBpZiAoIWZyb20xKSBzZXRMaW5lSGlkZGVuKGZy
b20ubGluZSwgZmFsc2UpOworICAgICAgICBlbHNlIGZyb20gPSBmcm9tMTsKKyAgICAgIH0KKyAg
ICAgIGlmICh0by5saW5lICE9IG9sZFRvKSB0byA9IHNraXBIaWRkZW4odG8sIG9sZFRvLCBzZWwu
dG8uY2gpOworCisgICAgICBpZiAocG9zRXEoZnJvbSwgdG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxz
ZTsKKyAgICAgIGVsc2UgaWYgKHBvc0VxKGZyb20sIHNlbC50bykpIHNlbC5pbnZlcnRlZCA9IGZh
bHNlOworICAgICAgZWxzZSBpZiAocG9zRXEodG8sIHNlbC5mcm9tKSkgc2VsLmludmVydGVkID0g
dHJ1ZTsKKworICAgICAgaWYgKG9wdGlvbnMuYXV0b0NsZWFyRW1wdHlMaW5lcyAmJiBwb3NFcShz
ZWwuZnJvbSwgc2VsLnRvKSkgeworICAgICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IGZy
b20gOiB0bzsKKyAgICAgICAgaWYgKGhlYWQubGluZSAhPSBzZWwuZnJvbS5saW5lICYmIHNlbC5m
cm9tLmxpbmUgPCBkb2Muc2l6ZSkgeworICAgICAgICAgIHZhciBvbGRMaW5lID0gZ2V0TGluZShz
ZWwuZnJvbS5saW5lKTsKKyAgICAgICAgICBpZiAoL15ccyskLy50ZXN0KG9sZExpbmUudGV4dCkp
CisgICAgICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgaWYgKG9sZExpbmUucGFyZW50ICYmIC9eXHMrJC8udGVzdChvbGRMaW5lLnRleHQpKSB7
CisgICAgICAgICAgICAgICAgdmFyIG5vID0gbGluZU5vKG9sZExpbmUpOworICAgICAgICAgICAg
ICAgIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IG5vLCBjaDogMH0sIHtsaW5lOiBubywgY2g6IG9s
ZExpbmUudGV4dC5sZW5ndGh9KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMTAp
KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzZWwuZnJvbSA9IGZyb207IHNlbC50byA9
IHRvOworICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIGZ1bmN0aW9u
IHNraXBIaWRkZW4ocG9zLCBvbGRMaW5lLCBvbGRDaCkgeworICAgICAgZnVuY3Rpb24gZ2V0Tm9u
SGlkZGVuKGRpcikgeworICAgICAgICB2YXIgbE5vID0gcG9zLmxpbmUgKyBkaXIsIGVuZCA9IGRp
ciA9PSAxID8gZG9jLnNpemUgOiAtMTsKKyAgICAgICAgd2hpbGUgKGxObyAhPSBlbmQpIHsKKyAg
ICAgICAgICB2YXIgbGluZSA9IGdldExpbmUobE5vKTsKKyAgICAgICAgICBpZiAoIWxpbmUuaGlk
ZGVuKSB7CisgICAgICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CisgICAgICAgICAgICBpZiAodG9F
bmQgfHwgY2ggPiBvbGRDaCB8fCBjaCA+IGxpbmUudGV4dC5sZW5ndGgpIGNoID0gbGluZS50ZXh0
Lmxlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiB7bGluZTogbE5vLCBjaDogY2h9OworICAgICAg
ICAgIH0KKyAgICAgICAgICBsTm8gKz0gZGlyOworICAgICAgICB9CisgICAgICB9CisgICAgICB2
YXIgbGluZSA9IGdldExpbmUocG9zLmxpbmUpOworICAgICAgdmFyIHRvRW5kID0gcG9zLmNoID09
IGxpbmUudGV4dC5sZW5ndGggJiYgcG9zLmNoICE9IG9sZENoOworICAgICAgaWYgKCFsaW5lLmhp
ZGRlbikgcmV0dXJuIHBvczsKKyAgICAgIGlmIChwb3MubGluZSA+PSBvbGRMaW5lKSByZXR1cm4g
Z2V0Tm9uSGlkZGVuKDEpIHx8IGdldE5vbkhpZGRlbigtMSk7CisgICAgICBlbHNlIHJldHVybiBn
ZXROb25IaWRkZW4oLTEpIHx8IGdldE5vbkhpZGRlbigxKTsKKyAgICB9CisgICAgZnVuY3Rpb24g
c2V0Q3Vyc29yKGxpbmUsIGNoLCB1c2VyKSB7CisgICAgICB2YXIgcG9zID0gY2xpcFBvcyh7bGlu
ZTogbGluZSwgY2g6IGNoIHx8IDB9KTsKKyAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6
IHNldFNlbGVjdGlvbikocG9zLCBwb3MpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNsaXBMaW5l
KG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obiwgZG9jLnNpemUtMSkpO30KKyAgICBm
dW5jdGlvbiBjbGlwUG9zKHBvcykgeworICAgICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJuIHts
aW5lOiAwLCBjaDogMH07CisgICAgICBpZiAocG9zLmxpbmUgPj0gZG9jLnNpemUpIHJldHVybiB7
bGluZTogZG9jLnNpemUtMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9Owor
ICAgICAgdmFyIGNoID0gcG9zLmNoLCBsaW5lbGVuID0gZ2V0TGluZShwb3MubGluZSkudGV4dC5s
ZW5ndGg7CisgICAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHJldHVybiB7bGlu
ZTogcG9zLmxpbmUsIGNoOiBsaW5lbGVufTsKKyAgICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0dXJu
IHtsaW5lOiBwb3MubGluZSwgY2g6IDB9OworICAgICAgZWxzZSByZXR1cm4gcG9zOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmRQb3NIKGRpciwgdW5pdCkgeworICAgICAgdmFyIGVuZCA9IHNl
bC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZW5kLmxpbmUsIGNoID0gZW5k
LmNoOworICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmUpOworICAgICAgZnVuY3Rpb24g
ZmluZE5leHRMaW5lKCkgeworICAgICAgICBmb3IgKHZhciBsID0gbGluZSArIGRpciwgZSA9IGRp
ciA8IDAgPyAtMSA6IGRvYy5zaXplOyBsICE9IGU7IGwgKz0gZGlyKSB7CisgICAgICAgICAgdmFy
IGxvID0gZ2V0TGluZShsKTsKKyAgICAgICAgICBpZiAoIWxvLmhpZGRlbikgeyBsaW5lID0gbDsg
bGluZU9iaiA9IGxvOyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBm
dW5jdGlvbiBtb3ZlT25jZShib3VuZFRvTGluZSkgeworICAgICAgICBpZiAoY2ggPT0gKGRpciA8
IDAgPyAwIDogbGluZU9iai50ZXh0Lmxlbmd0aCkpIHsKKyAgICAgICAgICBpZiAoIWJvdW5kVG9M
aW5lICYmIGZpbmROZXh0TGluZSgpKSBjaCA9IGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3Ro
IDogMDsKKyAgICAgICAgICBlbHNlIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGNoICs9
IGRpcjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgICBpZiAodW5pdCA9PSAi
Y2hhciIpIG1vdmVPbmNlKCk7CisgICAgICBlbHNlIGlmICh1bml0ID09ICJjb2x1bW4iKSBtb3Zl
T25jZSh0cnVlKTsKKyAgICAgIGVsc2UgaWYgKHVuaXQgPT0gIndvcmQiKSB7CisgICAgICAgIHZh
ciBzYXdXb3JkID0gZmFsc2U7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICBpZiAoZGly
IDwgMCkgaWYgKCFtb3ZlT25jZSgpKSBicmVhazsKKyAgICAgICAgICBpZiAoaXNXb3JkQ2hhcihs
aW5lT2JqLnRleHQuY2hhckF0KGNoKSkpIHNhd1dvcmQgPSB0cnVlOworICAgICAgICAgIGVsc2Ug
aWYgKHNhd1dvcmQpIHtpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fSBicmVhazt9
CisgICAgICAgICAgaWYgKGRpciA+IDApIGlmICghbW92ZU9uY2UoKSkgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB7bGluZTogbGluZSwgY2g6IGNofTsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gbW92ZUgoZGlyLCB1bml0KSB7CisgICAgICB2YXIgcG9zID0gZGlyIDwgMCA/
IHNlbC5mcm9tIDogc2VsLnRvOworICAgICAgaWYgKHNoaWZ0U2VsZWN0aW5nIHx8IHBvc0VxKHNl
bC5mcm9tLCBzZWwudG8pKSBwb3MgPSBmaW5kUG9zSChkaXIsIHVuaXQpOworICAgICAgc2V0Q3Vy
c29yKHBvcy5saW5lLCBwb3MuY2gsIHRydWUpOworICAgIH0KKyAgICBmdW5jdGlvbiBkZWxldGVI
KGRpciwgdW5pdCkgeworICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFj
ZVJhbmdlKCIiLCBzZWwuZnJvbSwgc2VsLnRvKTsKKyAgICAgIGVsc2UgaWYgKGRpciA8IDApIHJl
cGxhY2VSYW5nZSgiIiwgZmluZFBvc0goZGlyLCB1bml0KSwgc2VsLnRvKTsKKyAgICAgIGVsc2Ug
cmVwbGFjZVJhbmdlKCIiLCBzZWwuZnJvbSwgZmluZFBvc0goZGlyLCB1bml0KSk7CisgICAgICB1
c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisgICAgZnVuY3Rpb24gbW92ZVYoZGlyLCB1bml0
KSB7CisgICAgICB2YXIgZGlzdCA9IDAsIHBvcyA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/
IHNlbC5mcm9tIDogc2VsLnRvLCB0cnVlKTsKKyAgICAgIGlmIChnb2FsQ29sdW1uICE9IG51bGwp
IHBvcy54ID0gZ29hbENvbHVtbjsKKyAgICAgIGlmICh1bml0ID09ICJwYWdlIikgZGlzdCA9IE1h
dGgubWluKHNjcm9sbGVyLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOworICAgICAgZWxzZSBpZiAodW5pdCA9
PSAibGluZSIpIGRpc3QgPSB0ZXh0SGVpZ2h0KCk7CisgICAgICB2YXIgdGFyZ2V0ID0gY29vcmRz
Q2hhcihwb3MueCwgcG9zLnkgKyBkaXN0ICogZGlyICsgMik7CisgICAgICBpZiAodW5pdCA9PSAi
cGFnZSIpIHNjcm9sbGJhci5zY3JvbGxUb3AgKz0gbG9jYWxDb29yZHModGFyZ2V0LCB0cnVlKS55
IC0gcG9zLnk7CisgICAgICBzZXRDdXJzb3IodGFyZ2V0LmxpbmUsIHRhcmdldC5jaCwgdHJ1ZSk7
CisgICAgICBnb2FsQ29sdW1uID0gcG9zLng7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFdv
cmRBdChwb3MpIHsKKyAgICAgIHZhciBsaW5lID0gZ2V0TGluZShwb3MubGluZSkudGV4dDsKKyAg
ICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOworICAgICAgaWYgKGxpbmUpIHsK
KyAgICAgICAgaWYgKHBvcy5hZnRlciA9PT0gZmFsc2UgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAt
LXN0YXJ0OyBlbHNlICsrZW5kOworICAgICAgICB2YXIgc3RhcnRDaGFyID0gbGluZS5jaGFyQXQo
c3RhcnQpOworICAgICAgICB2YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhcikgPyBpc1dv
cmRDaGFyIDoKKyAgICAgICAgICAgICAgICAgICAgL1xzLy50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5j
dGlvbihjaCkge3JldHVybiAvXHMvLnRlc3QoY2gpO30gOgorICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbihjaCkge3JldHVybiAhL1xzLy50ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCk7fTsK
KyAgICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEp
KSkgLS1zdGFydDsKKyAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxp
bmUuY2hhckF0KGVuZCkpKSArK2VuZDsKKyAgICAgIH0KKyAgICAgIHJldHVybiB7ZnJvbToge2xp
bmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LCB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogZW5kfX07
CisgICAgfQorICAgIGZ1bmN0aW9uIHNlbGVjdExpbmUobGluZSkgeworICAgICAgc2V0U2VsZWN0
aW9uVXNlcih7bGluZTogbGluZSwgY2g6IDB9LCBjbGlwUG9zKHtsaW5lOiBsaW5lICsgMSwgY2g6
IDB9KSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGluZGVudFNlbGVjdGVkKG1vZGUpIHsKKyAgICAg
IGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGluZGVudExpbmUoc2VsLmZyb20u
bGluZSwgbW9kZSk7CisgICAgICB2YXIgZSA9IHNlbC50by5saW5lIC0gKHNlbC50by5jaCA/IDAg
OiAxKTsKKyAgICAgIGZvciAodmFyIGkgPSBzZWwuZnJvbS5saW5lOyBpIDw9IGU7ICsraSkgaW5k
ZW50TGluZShpLCBtb2RlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmRlbnRMaW5lKG4sIGhv
dykgeworICAgICAgaWYgKCFob3cpIGhvdyA9ICJhZGQiOworICAgICAgaWYgKGhvdyA9PSAic21h
cnQiKSB7CisgICAgICAgIGlmICghbW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKKyAgICAgICAg
ZWxzZSB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShuKTsKKyAgICAgIH0KKworICAgICAgdmFy
IGxpbmUgPSBnZXRMaW5lKG4pLCBjdXJTcGFjZSA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50
YWJTaXplKSwKKyAgICAgICAgICBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxz
Ki8pWzBdLCBpbmRlbnRhdGlvbjsKKyAgICAgIGlmIChob3cgPT0gInNtYXJ0IikgeworICAgICAg
ICBpbmRlbnRhdGlvbiA9IG1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3Bh
Y2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKKyAgICAgICAgaWYgKGluZGVudGF0aW9uID09
IFBhc3MpIGhvdyA9ICJwcmV2IjsKKyAgICAgIH0KKyAgICAgIGlmIChob3cgPT0gInByZXYiKSB7
CisgICAgICAgIGlmIChuKSBpbmRlbnRhdGlvbiA9IGdldExpbmUobi0xKS5pbmRlbnRhdGlvbihv
cHRpb25zLnRhYlNpemUpOworICAgICAgICBlbHNlIGluZGVudGF0aW9uID0gMDsKKyAgICAgIH0K
KyAgICAgIGVsc2UgaWYgKGhvdyA9PSAiYWRkIikgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIG9w
dGlvbnMuaW5kZW50VW5pdDsKKyAgICAgIGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSBpbmRl
bnRhdGlvbiA9IGN1clNwYWNlIC0gb3B0aW9ucy5pbmRlbnRVbml0OworICAgICAgaW5kZW50YXRp
b24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7CisgICAgICB2YXIgZGlmZiA9IGluZGVudGF0
aW9uIC0gY3VyU3BhY2U7CisKKyAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiIiwgcG9zID0gMDsK
KyAgICAgIGlmIChvcHRpb25zLmluZGVudFdpdGhUYWJzKQorICAgICAgICBmb3IgKHZhciBpID0g
TWF0aC5mbG9vcihpbmRlbnRhdGlvbiAvIG9wdGlvbnMudGFiU2l6ZSk7IGk7IC0taSkge3BvcyAr
PSBvcHRpb25zLnRhYlNpemU7IGluZGVudFN0cmluZyArPSAiXHQiO30KKyAgICAgIHdoaWxlIChw
b3MgPCBpbmRlbnRhdGlvbikgeysrcG9zOyBpbmRlbnRTdHJpbmcgKz0gIiAiO30KKworICAgICAg
cmVwbGFjZVJhbmdlKGluZGVudFN0cmluZywge2xpbmU6IG4sIGNoOiAwfSwge2xpbmU6IG4sIGNo
OiBjdXJTcGFjZVN0cmluZy5sZW5ndGh9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkTW9k
ZSgpIHsKKyAgICAgIG1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgb3B0aW9ucy5t
b2RlKTsKKyAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IGxpbmUu
c3RhdGVBZnRlciA9IG51bGw7IH0pOworICAgICAgd29yayA9IFswXTsKKyAgICAgIHN0YXJ0V29y
a2VyKCk7CisgICAgfQorICAgIGZ1bmN0aW9uIGd1dHRlckNoYW5nZWQoKSB7CisgICAgICB2YXIg
dmlzaWJsZSA9IG9wdGlvbnMuZ3V0dGVyIHx8IG9wdGlvbnMubGluZU51bWJlcnM7CisgICAgICBn
dXR0ZXIuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAiIiA6ICJub25lIjsKKyAgICAgIGlmICh2
aXNpYmxlKSBndXR0ZXJEaXJ0eSA9IHRydWU7CisgICAgICBlbHNlIGxpbmVEaXYucGFyZW50Tm9k
ZS5zdHlsZS5tYXJnaW5MZWZ0ID0gMDsKKyAgICB9CisgICAgZnVuY3Rpb24gd3JhcHBpbmdDaGFu
Z2VkKGZyb20sIHRvKSB7CisgICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAg
ICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAgICAgICB2YXIg
cGVyTGluZSA9IHNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKCkgLSAzOworICAgICAg
ICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeworICAgICAgICAgIGlmIChs
aW5lLmhpZGRlbikgcmV0dXJuOworICAgICAgICAgIHZhciBndWVzcyA9IE1hdGguY2VpbChsaW5l
LnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsKKyAgICAgICAgICBpZiAoZ3Vlc3MgIT0gMSkg
dXBkYXRlTGluZUhlaWdodChsaW5lLCBndWVzcyk7CisgICAgICAgIH0pOworICAgICAgICBsaW5l
U3BhY2Uuc3R5bGUubWluV2lkdGggPSB3aWR0aEZvcmNlci5zdHlsZS5sZWZ0ID0gIiI7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1l
LnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCAiIik7CisgICAgICAgIGNvbXB1dGVNYXhMZW5n
dGgoKTsKKyAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAg
ICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMSAmJiAhbGluZS5oaWRkZW4pIHVwZGF0ZUxpbmVI
ZWlnaHQobGluZSwgMSk7CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgY2hhbmdlcy5wdXNo
KHtmcm9tOiAwLCB0bzogZG9jLnNpemV9KTsKKyAgICB9CisgICAgZnVuY3Rpb24gbWFrZVRhYihj
b2wpIHsKKyAgICAgIHZhciB3ID0gb3B0aW9ucy50YWJTaXplIC0gY29sICUgb3B0aW9ucy50YWJT
aXplLCBjYWNoZWQgPSB0YWJDYWNoZVt3XTsKKyAgICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNo
ZWQ7CisgICAgICBmb3IgKHZhciBzdHIgPSAiIiwgaSA9IDA7IGkgPCB3OyArK2kpIHN0ciArPSAi
ICI7CisgICAgICB2YXIgc3BhbiA9IGVsdCgic3BhbiIsIHN0ciwgImNtLXRhYiIpOworICAgICAg
cmV0dXJuICh0YWJDYWNoZVt3XSA9IHtlbGVtZW50OiBzcGFuLCB3aWR0aDogd30pOworICAgIH0K
KyAgICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQoKSB7CisgICAgICBzY3JvbGxlci5jbGFzc05hbWUg
PSBzY3JvbGxlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cUysvZywgIiIpICsKKyAgICAg
ICAgb3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOworICAgIH0K
KyAgICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKCkgeworICAgICAgdmFyIHN0eWxlID0ga2V5TWFw
W29wdGlvbnMua2V5TWFwXS5zdHlsZTsKKyAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gd3JhcHBl
ci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCAiIikgKworICAgICAgICAo
c3R5bGUgPyAiIGNtLWtleW1hcC0iICsgc3R5bGUgOiAiIik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gVGV4dE1hcmtlcigpIHsgdGhpcy5zZXQgPSBbXTsgfQorICAgIFRleHRNYXJrZXIucHJvdG90
eXBlLmNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgdmFyIG1pbiA9IEluZmlu
aXR5LCBtYXggPSAtSW5maW5pdHk7CisgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuc2V0
Lmxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2V0W2ldLCBt
ayA9IGxpbmUubWFya2VkOworICAgICAgICBpZiAoIW1rIHx8ICFsaW5lLnBhcmVudCkgY29udGlu
dWU7CisgICAgICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTsKKyAgICAgICAgbWluID0gTWF0
aC5taW4obWluLCBsaW5lTik7IG1heCA9IE1hdGgubWF4KG1heCwgbGluZU4pOworICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IG1rLmxlbmd0aDsgKytqKQorICAgICAgICAgIGlmIChta1tqXS5t
YXJrZXIgPT0gdGhpcykgbWsuc3BsaWNlKGotLSwgMSk7CisgICAgICB9CisgICAgICBpZiAobWlu
ICE9IEluZmluaXR5KQorICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IG1pbiwgdG86IG1heCAr
IDF9KTsKKyAgICB9KTsKKyAgICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24o
KSB7CisgICAgICB2YXIgZnJvbSwgdG87CisgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMu
c2V0Lmxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2V0W2ld
LCBtayA9IGxpbmUubWFya2VkOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1rLmxlbmd0
aDsgKytqKSB7CisgICAgICAgICAgdmFyIG1hcmsgPSBta1tqXTsKKyAgICAgICAgICBpZiAobWFy
ay5tYXJrZXIgPT0gdGhpcykgeworICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSAhPSBudWxsIHx8
IG1hcmsudG8gIT0gbnVsbCkgeworICAgICAgICAgICAgICB2YXIgZm91bmQgPSBsaW5lTm8obGlu
ZSk7CisgICAgICAgICAgICAgIGlmIChmb3VuZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1hcmsuZnJvbSAhPSBudWxsKSBmcm9tID0ge2xpbmU6IGZvdW5kLCBjaDogbWFyay5mcm9t
fTsKKyAgICAgICAgICAgICAgICBpZiAobWFyay50byAhPSBudWxsKSB0byA9IHtsaW5lOiBmb3Vu
ZCwgY2g6IG1hcmsudG99OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiB0
b307CisgICAgfTsKKworICAgIGZ1bmN0aW9uIG1hcmtUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUp
IHsKKyAgICAgIGZyb20gPSBjbGlwUG9zKGZyb20pOyB0byA9IGNsaXBQb3ModG8pOworICAgICAg
dmFyIHRtID0gbmV3IFRleHRNYXJrZXIoKTsKKyAgICAgIGlmICghcG9zTGVzcyhmcm9tLCB0bykp
IHJldHVybiB0bTsKKyAgICAgIGZ1bmN0aW9uIGFkZChsaW5lLCBmcm9tLCB0bywgY2xhc3NOYW1l
KSB7CisgICAgICAgIGdldExpbmUobGluZSkuYWRkTWFyayhuZXcgTWFya2VkVGV4dChmcm9tLCB0
bywgY2xhc3NOYW1lLCB0bSkpOworICAgICAgfQorICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5s
aW5lKSBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCB0by5jaCwgY2xhc3NOYW1lKTsKKyAgICAgIGVs
c2UgeworICAgICAgICBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCBudWxsLCBjbGFzc05hbWUpOwor
ICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lICsgMSwgZSA9IHRvLmxpbmU7IGkgPCBlOyAr
K2kpCisgICAgICAgICAgYWRkKGksIG51bGwsIG51bGwsIGNsYXNzTmFtZSk7CisgICAgICAgIGFk
ZCh0by5saW5lLCBudWxsLCB0by5jaCwgY2xhc3NOYW1lKTsKKyAgICAgIH0KKyAgICAgIGNoYW5n
ZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDF9KTsKKyAgICAgIHJldHVy
biB0bTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRCb29rbWFyayhwb3MpIHsKKyAgICAgIHBv
cyA9IGNsaXBQb3MocG9zKTsKKyAgICAgIHZhciBibSA9IG5ldyBCb29rbWFyayhwb3MuY2gpOwor
ICAgICAgZ2V0TGluZShwb3MubGluZSkuYWRkTWFyayhibSk7CisgICAgICByZXR1cm4gYm07Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmluZE1hcmtzQXQocG9zKSB7CisgICAgICBwb3MgPSBjbGlw
UG9zKHBvcyk7CisgICAgICB2YXIgbWFya2VycyA9IFtdLCBtYXJrZWQgPSBnZXRMaW5lKHBvcy5s
aW5lKS5tYXJrZWQ7CisgICAgICBpZiAoIW1hcmtlZCkgcmV0dXJuIG1hcmtlcnM7CisgICAgICBm
b3IgKHZhciBpID0gMCwgZSA9IG1hcmtlZC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgICAg
dmFyIG0gPSBtYXJrZWRbaV07CisgICAgICAgIGlmICgobS5mcm9tID09IG51bGwgfHwgbS5mcm9t
IDw9IHBvcy5jaCkgJiYKKyAgICAgICAgICAgIChtLnRvID09IG51bGwgfHwgbS50byA+PSBwb3Mu
Y2gpKQorICAgICAgICAgIG1hcmtlcnMucHVzaChtLm1hcmtlciB8fCBtKTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBtYXJrZXJzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZEd1dHRlck1hcmtl
cihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIHsKKyAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVt
YmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOworICAgICAgbGluZS5ndXR0ZXJN
YXJrZXIgPSB7dGV4dDogdGV4dCwgc3R5bGU6IGNsYXNzTmFtZX07CisgICAgICBndXR0ZXJEaXJ0
eSA9IHRydWU7CisgICAgICByZXR1cm4gbGluZTsKKyAgICB9CisgICAgZnVuY3Rpb24gcmVtb3Zl
R3V0dGVyTWFya2VyKGxpbmUpIHsKKyAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikg
bGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOworICAgICAgbGluZS5ndXR0ZXJNYXJrZXIg
PSBudWxsOworICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoYW5nZUxpbmUoaGFuZGxlLCBvcCkgeworICAgICAgdmFyIG5vID0gaGFuZGxlLCBsaW5lID0g
aGFuZGxlOworICAgICAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRM
aW5lKGNsaXBMaW5lKGhhbmRsZSkpOworICAgICAgZWxzZSBubyA9IGxpbmVObyhoYW5kbGUpOwor
ICAgICAgaWYgKG5vID09IG51bGwpIHJldHVybiBudWxsOworICAgICAgaWYgKG9wKGxpbmUsIG5v
KSkgY2hhbmdlcy5wdXNoKHtmcm9tOiBubywgdG86IG5vICsgMX0pOworICAgICAgZWxzZSByZXR1
cm4gbnVsbDsKKyAgICAgIHJldHVybiBsaW5lOworICAgIH0KKyAgICBmdW5jdGlvbiBzZXRMaW5l
Q2xhc3MoaGFuZGxlLCBjbGFzc05hbWUsIGJnQ2xhc3NOYW1lKSB7CisgICAgICByZXR1cm4gY2hh
bmdlTGluZShoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgaWYgKGxpbmUuY2xhc3NO
YW1lICE9IGNsYXNzTmFtZSB8fCBsaW5lLmJnQ2xhc3NOYW1lICE9IGJnQ2xhc3NOYW1lKSB7Cisg
ICAgICAgICAgbGluZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICAgICAgbGluZS5iZ0Ns
YXNzTmFtZSA9IGJnQ2xhc3NOYW1lOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICB9KTsKKyAgICB9CisgICAgZnVuY3Rpb24gc2V0TGluZUhpZGRlbihoYW5kbGUsIGhp
ZGRlbikgeworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUoaGFuZGxlLCBmdW5jdGlvbihsaW5lLCBu
bykgeworICAgICAgICBpZiAobGluZS5oaWRkZW4gIT0gaGlkZGVuKSB7CisgICAgICAgICAgbGlu
ZS5oaWRkZW4gPSBoaWRkZW47CisgICAgICAgICAgaWYgKCFvcHRpb25zLmxpbmVXcmFwcGluZykg
eworICAgICAgICAgICAgaWYgKGhpZGRlbiAmJiBsaW5lLnRleHQubGVuZ3RoID09IG1heExpbmUu
dGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgdXBkYXRlTWF4TGluZSA9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFoaWRkZW4gJiYgbGluZS50ZXh0Lmxlbmd0aCA+IG1heExpbmUu
dGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgbWF4TGluZSA9IGxpbmU7IHVwZGF0ZU1heExp
bmUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgdXBkYXRl
TGluZUhlaWdodChsaW5lLCBoaWRkZW4gPyAwIDogMSk7CisgICAgICAgICAgdmFyIGZsaW5lID0g
c2VsLmZyb20ubGluZSwgdGxpbmUgPSBzZWwudG8ubGluZTsKKyAgICAgICAgICBpZiAoaGlkZGVu
ICYmIChmbGluZSA9PSBubyB8fCB0bGluZSA9PSBubykpIHsKKyAgICAgICAgICAgIHZhciBmcm9t
ID0gZmxpbmUgPT0gbm8gPyBza2lwSGlkZGVuKHtsaW5lOiBmbGluZSwgY2g6IDB9LCBmbGluZSwg
MCkgOiBzZWwuZnJvbTsKKyAgICAgICAgICAgIHZhciB0byA9IHRsaW5lID09IG5vID8gc2tpcEhp
ZGRlbih7bGluZTogdGxpbmUsIGNoOiAwfSwgdGxpbmUsIDApIDogc2VsLnRvOworICAgICAgICAg
ICAgLy8gQ2FuJ3QgaGlkZSB0aGUgbGFzdCB2aXNpYmxlIGxpbmUsIHdlJ2QgaGF2ZSBubyBwbGFj
ZSB0byBwdXQgdGhlIGN1cnNvcgorICAgICAgICAgICAgaWYgKCF0bykgcmV0dXJuOworICAgICAg
ICAgICAgc2V0U2VsZWN0aW9uKGZyb20sIHRvKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0
dXJuIChndXR0ZXJEaXJ0eSA9IHRydWUpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBsaW5lSW5mbyhsaW5lKSB7CisgICAgICBpZiAodHlwZW9mIGxpbmUgPT0g
Im51bWJlciIpIHsKKyAgICAgICAgaWYgKCFpc0xpbmUobGluZSkpIHJldHVybiBudWxsOworICAg
ICAgICB2YXIgbiA9IGxpbmU7CisgICAgICAgIGxpbmUgPSBnZXRMaW5lKGxpbmUpOworICAgICAg
ICBpZiAoIWxpbmUpIHJldHVybiBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIG4g
PSBsaW5lTm8obGluZSk7CisgICAgICAgIGlmIChuID09IG51bGwpIHJldHVybiBudWxsOworICAg
ICAgfQorICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOworICAgICAgcmV0dXJu
IHtsaW5lOiBuLCBoYW5kbGU6IGxpbmUsIHRleHQ6IGxpbmUudGV4dCwgbWFya2VyVGV4dDogbWFy
a2VyICYmIG1hcmtlci50ZXh0LAorICAgICAgICAgICAgICBtYXJrZXJDbGFzczogbWFya2VyICYm
IG1hcmtlci5zdHlsZSwgbGluZUNsYXNzOiBsaW5lLmNsYXNzTmFtZSwgYmdDbGFzczogbGluZS5i
Z0NsYXNzTmFtZX07CisgICAgfQorCisgICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ28gZnJvbSBw
aXhlbCBwb3NpdGlvbnMgdG8gY2hhcmFjdGVyCisgICAgLy8gcG9zaXRpb25zLCB0YWtpbmcgdmFy
eWluZyBjaGFyYWN0ZXIgd2lkdGhzIGludG8gYWNjb3VudC4KKyAgICBmdW5jdGlvbiBjaGFyRnJv
bVgobGluZSwgeCkgeworICAgICAgaWYgKHggPD0gMCkgcmV0dXJuIDA7CisgICAgICB2YXIgbGlu
ZU9iaiA9IGdldExpbmUobGluZSksIHRleHQgPSBsaW5lT2JqLnRleHQ7CisgICAgICBmdW5jdGlv
biBnZXRYKGxlbikgeworICAgICAgICByZXR1cm4gbWVhc3VyZUxpbmUobGluZU9iaiwgbGVuKS5s
ZWZ0OworICAgICAgfQorICAgICAgdmFyIGZyb20gPSAwLCBmcm9tWCA9IDAsIHRvID0gdGV4dC5s
ZW5ndGgsIHRvWDsKKyAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91
ciBzZWFyY2guCisgICAgICB2YXIgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbCh4
IC8gY2hhcldpZHRoKCkpKTsKKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgdmFyIGVzdFggPSBn
ZXRYKGVzdGltYXRlZCk7CisgICAgICAgIGlmIChlc3RYIDw9IHggJiYgZXN0aW1hdGVkIDwgdG8p
IGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoZXN0aW1hdGVkICogMS4yKSk7Cisg
ICAgICAgIGVsc2Uge3RvWCA9IGVzdFg7IHRvID0gZXN0aW1hdGVkOyBicmVhazt9CisgICAgICB9
CisgICAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIHRvOworICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEg
c3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KKyAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxv
b3IodG8gKiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOworICAgICAgaWYgKGVzdFggPCB4
KSB7ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KKyAgICAgIC8vIERvIGEgYmluYXJ5
IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
aWYgKHRvIC0gZnJvbSA8PSAxKSByZXR1cm4gKHRvWCAtIHggPiB4IC0gZnJvbVgpID8gZnJvbSA6
IHRvOworICAgICAgICB2YXIgbWlkZGxlID0gTWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1p
ZGRsZVggPSBnZXRYKG1pZGRsZSk7CisgICAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlk
ZGxlOyB0b1ggPSBtaWRkbGVYO30KKyAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVgg
PSBtaWRkbGVYO30KKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBtZWFzdXJlTGluZShs
aW5lLCBjaCkgeworICAgICAgaWYgKGNoID09IDApIHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwfTsK
KyAgICAgIHZhciB3YnIgPSBvcHRpb25zLmxpbmVXcmFwcGluZyAmJiBjaCA8IGxpbmUudGV4dC5s
ZW5ndGggJiYKKyAgICAgICAgICAgICAgICBzcGFuQWZmZWN0c1dyYXBwaW5nLnRlc3QobGluZS50
ZXh0LnNsaWNlKGNoIC0gMSwgY2ggKyAxKSk7CisgICAgICB2YXIgcHJlID0gbGluZS5nZXRFbGVt
ZW50KG1ha2VUYWIsIGNoLCB3YnIpOworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3Vy
ZSwgcHJlKTsKKyAgICAgIHZhciBhbmNob3IgPSBwcmUuYW5jaG9yOworICAgICAgdmFyIHRvcCA9
IGFuY2hvci5vZmZzZXRUb3AsIGxlZnQgPSBhbmNob3Iub2Zmc2V0TGVmdDsKKyAgICAgIC8vIE9s
ZGVyIElFcyByZXBvcnQgemVybyBvZmZzZXRzIGZvciBzcGFucyBkaXJlY3RseSBhZnRlciBhIHdy
YXAKKyAgICAgIGlmIChpZSAmJiB0b3AgPT0gMCAmJiBsZWZ0ID09IDApIHsKKyAgICAgICAgdmFy
IGJhY2t1cCA9IGVsdCgic3BhbiIsICJ4Iik7CisgICAgICAgIGFuY2hvci5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZShiYWNrdXAsIGFuY2hvci5uZXh0U2libGluZyk7CisgICAgICAgIHRvcCA9IGJh
Y2t1cC5vZmZzZXRUb3A7CisgICAgICB9CisgICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBs
ZWZ0fTsKKyAgICB9CisgICAgZnVuY3Rpb24gbG9jYWxDb29yZHMocG9zLCBpbkxpbmVXcmFwKSB7
CisgICAgICB2YXIgeCwgbGggPSB0ZXh0SGVpZ2h0KCksIHkgPSBsaCAqIChoZWlnaHRBdExpbmUo
ZG9jLCBwb3MubGluZSkgLSAoaW5MaW5lV3JhcCA/IGRpc3BsYXlPZmZzZXQgOiAwKSk7CisgICAg
ICBpZiAocG9zLmNoID09IDApIHggPSAwOworICAgICAgZWxzZSB7CisgICAgICAgIHZhciBzcCA9
IG1lYXN1cmVMaW5lKGdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gpOworICAgICAgICB4ID0gc3Au
bGVmdDsKKyAgICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB5ICs9IE1hdGgubWF4KDAs
IHNwLnRvcCk7CisgICAgICB9CisgICAgICByZXR1cm4ge3g6IHgsIHk6IHksIHlCb3Q6IHkgKyBs
aH07CisgICAgfQorICAgIC8vIENvb3JkcyBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbAorICAgIGZ1
bmN0aW9uIGNvb3Jkc0NoYXIoeCwgeSkgeworICAgICAgaWYgKHkgPCAwKSByZXR1cm4ge2xpbmU6
IDAsIGNoOiAwfTsKKyAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgY3cgPSBjaGFyV2lkdGgo
KSwgaGVpZ2h0UG9zID0gZGlzcGxheU9mZnNldCArIE1hdGguZmxvb3IoeSAvIHRoKTsKKyAgICAg
IHZhciBsaW5lTm8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRQb3MpOworICAgICAgaWYgKGxp
bmVObyA+PSBkb2Muc2l6ZSkgcmV0dXJuIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBnZXRMaW5l
KGRvYy5zaXplIC0gMSkudGV4dC5sZW5ndGh9OworICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5l
KGxpbmVObyksIHRleHQgPSBsaW5lT2JqLnRleHQ7CisgICAgICB2YXIgdHcgPSBvcHRpb25zLmxp
bmVXcmFwcGluZywgaW5uZXJPZmYgPSB0dyA/IGhlaWdodFBvcyAtIGhlaWdodEF0TGluZShkb2Ms
IGxpbmVObykgOiAwOworICAgICAgaWYgKHggPD0gMCAmJiBpbm5lck9mZiA9PSAwKSByZXR1cm4g
e2xpbmU6IGxpbmVObywgY2g6IDB9OworICAgICAgdmFyIHdyb25nTGluZSA9IGZhbHNlOworICAg
ICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKKyAgICAgICAgdmFyIHNwID0gbWVhc3VyZUxpbmUobGlu
ZU9iaiwgbGVuKTsKKyAgICAgICAgaWYgKHR3KSB7CisgICAgICAgICAgdmFyIG9mZiA9IE1hdGgu
cm91bmQoc3AudG9wIC8gdGgpOworICAgICAgICAgIHdyb25nTGluZSA9IG9mZiAhPSBpbm5lck9m
ZjsKKyAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgc3AubGVmdCArIChvZmYgLSBpbm5lck9m
ZikgKiBzY3JvbGxlci5jbGllbnRXaWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNw
LmxlZnQ7CisgICAgICB9CisgICAgICB2YXIgZnJvbSA9IDAsIGZyb21YID0gMCwgdG8gPSB0ZXh0
Lmxlbmd0aCwgdG9YOworICAgICAgLy8gR3Vlc3MgYSBzdWl0YWJsZSB1cHBlciBib3VuZCBmb3Ig
b3VyIHNlYXJjaC4KKyAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWls
KCh4ICsgaW5uZXJPZmYgKiBzY3JvbGxlci5jbGllbnRXaWR0aCAqIC45KSAvIGN3KSk7CisgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOworICAgICAg
ICBpZiAoZXN0WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0
bywgTWF0aC5jZWlsKGVzdGltYXRlZCAqIDEuMikpOworICAgICAgICBlbHNlIHt0b1ggPSBlc3RY
OyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQorICAgICAgfQorICAgICAgaWYgKHggPiB0b1gpIHJl
dHVybiB7bGluZTogbGluZU5vLCBjaDogdG99OworICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3Vp
dGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KKyAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3Io
dG8gKiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOworICAgICAgaWYgKGVzdFggPCB4KSB7
ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KKyAgICAgIC8vIERvIGEgYmluYXJ5IHNl
YXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KKyAgICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYg
KHRvIC0gZnJvbSA8PSAxKSB7CisgICAgICAgICAgdmFyIGFmdGVyID0geCAtIGZyb21YIDwgdG9Y
IC0geDsKKyAgICAgICAgICByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IGFmdGVyID8gZnJvbSA6
IHRvLCBhZnRlcjogYWZ0ZXJ9OworICAgICAgICB9CisgICAgICAgIHZhciBtaWRkbGUgPSBNYXRo
LmNlaWwoKGZyb20gKyB0bykgLyAyKSwgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKKyAgICAgICAg
aWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7IGlmICh3cm9uZ0xp
bmUpIHRvWCArPSAxMDAwOyB9CisgICAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0g
bWlkZGxlWDt9CisgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBhZ2VDb29yZHMocG9zKSB7
CisgICAgICB2YXIgbG9jYWwgPSBsb2NhbENvb3Jkcyhwb3MsIHRydWUpLCBvZmYgPSBlbHRPZmZz
ZXQobGluZVNwYWNlKTsKKyAgICAgIHJldHVybiB7eDogb2ZmLmxlZnQgKyBsb2NhbC54LCB5OiBv
ZmYudG9wICsgbG9jYWwueSwgeUJvdDogb2ZmLnRvcCArIGxvY2FsLnlCb3R9OworICAgIH0KKwor
ICAgIHZhciBjYWNoZWRIZWlnaHQsIGNhY2hlZEhlaWdodEZvciwgbWVhc3VyZVByZTsKKyAgICBm
dW5jdGlvbiB0ZXh0SGVpZ2h0KCkgeworICAgICAgaWYgKG1lYXN1cmVQcmUgPT0gbnVsbCkgewor
ICAgICAgICBtZWFzdXJlUHJlID0gZWx0KCJwcmUiKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCA0OTsgKytpKSB7CisgICAgICAgICAgbWVhc3VyZVByZS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKKyAgICAgICAgICBtZWFzdXJlUHJlLmFwcGVuZENoaWxk
KGVsdCgiYnIiKSk7CisgICAgICAgIH0KKyAgICAgICAgbWVhc3VyZVByZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKKyAgICAgIH0KKyAgICAgIHZhciBvZmZzZXRI
ZWlnaHQgPSBsaW5lRGl2LmNsaWVudEhlaWdodDsKKyAgICAgIGlmIChvZmZzZXRIZWlnaHQgPT0g
Y2FjaGVkSGVpZ2h0Rm9yKSByZXR1cm4gY2FjaGVkSGVpZ2h0OworICAgICAgY2FjaGVkSGVpZ2h0
Rm9yID0gb2Zmc2V0SGVpZ2h0OworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwg
bWVhc3VyZVByZS5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgY2FjaGVkSGVpZ2h0ID0gbWVhc3Vy
ZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAvIDUwIHx8IDE7CisgICAgICByZW1vdmVDaGlsZHJl
bihtZWFzdXJlKTsKKyAgICAgIHJldHVybiBjYWNoZWRIZWlnaHQ7CisgICAgfQorICAgIHZhciBj
YWNoZWRXaWR0aCwgY2FjaGVkV2lkdGhGb3IgPSAwOworICAgIGZ1bmN0aW9uIGNoYXJXaWR0aCgp
IHsKKyAgICAgIGlmIChzY3JvbGxlci5jbGllbnRXaWR0aCA9PSBjYWNoZWRXaWR0aEZvcikgcmV0
dXJuIGNhY2hlZFdpZHRoOworICAgICAgY2FjaGVkV2lkdGhGb3IgPSBzY3JvbGxlci5jbGllbnRX
aWR0aDsKKyAgICAgIHZhciBhbmNob3IgPSBlbHQoInNwYW4iLCAieCIpOworICAgICAgdmFyIHBy
ZSA9IGVsdCgicHJlIiwgW2FuY2hvcl0pOworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVh
c3VyZSwgcHJlKTsKKyAgICAgIHJldHVybiAoY2FjaGVkV2lkdGggPSBhbmNob3Iub2Zmc2V0V2lk
dGggfHwgMTApOworICAgIH0KKyAgICBmdW5jdGlvbiBwYWRkaW5nVG9wKCkge3JldHVybiBsaW5l
U3BhY2Uub2Zmc2V0VG9wO30KKyAgICBmdW5jdGlvbiBwYWRkaW5nTGVmdCgpIHtyZXR1cm4gbGlu
ZVNwYWNlLm9mZnNldExlZnQ7fQorCisgICAgZnVuY3Rpb24gcG9zRnJvbU1vdXNlKGUsIGxpYmVy
YWwpIHsKKyAgICAgIHZhciBvZmZXID0gZWx0T2Zmc2V0KHNjcm9sbGVyLCB0cnVlKSwgeCwgeTsK
KyAgICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJh
Z2dlZCBhcm91bmQgcXVpY2tseS4KKyAgICAgIHRyeSB7IHggPSBlLmNsaWVudFg7IHkgPSBlLmNs
aWVudFk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KKyAgICAgIC8vIFRoaXMgaXMgYSBt
ZXNzIG9mIGEgaGV1cmlzdGljIHRvIHRyeSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYQorICAgICAg
Ly8gc2Nyb2xsLWJhciB3YXMgY2xpY2tlZCBvciBub3QsIGFuZCB0byByZXR1cm4gbnVsbCBpZiBv
bmUgd2FzCisgICAgICAvLyAoYW5kICFsaWJlcmFsKS4KKyAgICAgIGlmICghbGliZXJhbCAmJiAo
eCAtIG9mZlcubGVmdCA+IHNjcm9sbGVyLmNsaWVudFdpZHRoIHx8IHkgLSBvZmZXLnRvcCA+IHNj
cm9sbGVyLmNsaWVudEhlaWdodCkpCisgICAgICAgIHJldHVybiBudWxsOworICAgICAgdmFyIG9m
ZkwgPSBlbHRPZmZzZXQobGluZVNwYWNlLCB0cnVlKTsKKyAgICAgIHJldHVybiBjb29yZHNDaGFy
KHggLSBvZmZMLmxlZnQsIHkgLSBvZmZMLnRvcCk7CisgICAgfQorICAgIGZ1bmN0aW9uIG9uQ29u
dGV4dE1lbnUoZSkgeworICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlKSwgc2Nyb2xsUG9z
ID0gc2Nyb2xsYmFyLnNjcm9sbFRvcDsKKyAgICAgIGlmICghcG9zIHx8IG9wZXJhKSByZXR1cm47
IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KKyAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRv
KSB8fCBwb3NMZXNzKHBvcywgc2VsLmZyb20pIHx8ICFwb3NMZXNzKHBvcywgc2VsLnRvKSkKKyAg
ICAgICAgb3BlcmF0aW9uKHNldEN1cnNvcikocG9zLmxpbmUsIHBvcy5jaCk7CisKKyAgICAgIHZh
ciBvbGRDU1MgPSBpbnB1dC5zdHlsZS5jc3NUZXh0OworICAgICAgaW5wdXREaXYuc3R5bGUucG9z
aXRpb24gPSAiYWJzb2x1dGUiOworICAgICAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlv
bjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkg
LSA1KSArCisgICAgICAgICJweDsgbGVmdDogIiArIChlLmNsaWVudFggLSA1KSArICJweDsgei1p
bmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7ICIgKworICAgICAgICAiYm9yZGVyLXdpZHRo
OiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRl
cjogYWxwaGEob3BhY2l0eT01KTsiOworICAgICAgbGVhdmVJbnB1dEFsb25lID0gdHJ1ZTsKKyAg
ICAgIHZhciB2YWwgPSBpbnB1dC52YWx1ZSA9IGdldFNlbGVjdGlvbigpOworICAgICAgZm9jdXNJ
bnB1dCgpOworICAgICAgc2VsZWN0SW5wdXQoaW5wdXQpOworICAgICAgZnVuY3Rpb24gcmVoaWRl
KCkgeworICAgICAgICB2YXIgbmV3VmFsID0gc3BsaXRMaW5lcyhpbnB1dC52YWx1ZSkuam9pbigi
XG4iKTsKKyAgICAgICAgaWYgKG5ld1ZhbCAhPSB2YWwgJiYgIW9wdGlvbnMucmVhZE9ubHkpIG9w
ZXJhdGlvbihyZXBsYWNlU2VsZWN0aW9uKShuZXdWYWwsICJlbmQiKTsKKyAgICAgICAgaW5wdXRE
aXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICBpbnB1dC5zdHlsZS5jc3NU
ZXh0ID0gb2xkQ1NTOworICAgICAgICBpZiAoaWVfbHQ5KSBzY3JvbGxiYXIuc2Nyb2xsVG9wID0g
c2Nyb2xsUG9zOworICAgICAgICBsZWF2ZUlucHV0QWxvbmUgPSBmYWxzZTsKKyAgICAgICAgcmVz
ZXRJbnB1dCh0cnVlKTsKKyAgICAgICAgc2xvd1BvbGwoKTsKKyAgICAgIH0KKworICAgICAgaWYg
KGdlY2tvKSB7CisgICAgICAgIGVfc3RvcChlKTsKKyAgICAgICAgdmFyIG1vdXNldXAgPSBjb25u
ZWN0KHdpbmRvdywgIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICBtb3VzZXVwKCk7
CisgICAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKKyAgICAgICAgfSwgdHJ1ZSk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOworICAgICAgfQor
ICAgIH0KKworICAgIC8vIEN1cnNvci1ibGlua2luZworICAgIGZ1bmN0aW9uIHJlc3RhcnRCbGlu
aygpIHsKKyAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CisgICAgICB2YXIgb24gPSB0cnVl
OworICAgICAgY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAiIjsKKyAgICAgIGJsaW5rZXIgPSBz
ZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAgY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkg
PSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKKyAgICAgIH0sIDY1MCk7CisgICAgfQorCisg
ICAgdmFyIG1hdGNoaW5nID0geyIoIjogIik+IiwgIikiOiAiKDwiLCAiWyI6ICJdPiIsICJdIjog
Ils8IiwgInsiOiAifT4iLCAifSI6ICJ7PCJ9OworICAgIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMo
YXV0b2NsZWFyKSB7CisgICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDog
c2VsLnRvLCBsaW5lID0gZ2V0TGluZShoZWFkLmxpbmUpLCBwb3MgPSBoZWFkLmNoIC0gMTsKKyAg
ICAgIHZhciBtYXRjaCA9IChwb3MgPj0gMCAmJiBtYXRjaGluZ1tsaW5lLnRleHQuY2hhckF0KHBv
cyldKSB8fCBtYXRjaGluZ1tsaW5lLnRleHQuY2hhckF0KCsrcG9zKV07CisgICAgICBpZiAoIW1h
dGNoKSByZXR1cm47CisgICAgICB2YXIgY2ggPSBtYXRjaC5jaGFyQXQoMCksIGZvcndhcmQgPSBt
YXRjaC5jaGFyQXQoMSkgPT0gIj4iLCBkID0gZm9yd2FyZCA/IDEgOiAtMSwgc3QgPSBsaW5lLnN0
eWxlczsKKyAgICAgIGZvciAodmFyIG9mZiA9IHBvcyArIDEsIGkgPSAwLCBlID0gc3QubGVuZ3Ro
OyBpIDwgZTsgaSs9MikKKyAgICAgICAgaWYgKChvZmYgLT0gc3RbaV0ubGVuZ3RoKSA8PSAwKSB7
dmFyIHN0eWxlID0gc3RbaSsxXTsgYnJlYWs7fQorCisgICAgICB2YXIgc3RhY2sgPSBbbGluZS50
ZXh0LmNoYXJBdChwb3MpXSwgcmUgPSAvWygpe31bXF1dLzsKKyAgICAgIGZ1bmN0aW9uIHNjYW4o
bGluZSwgZnJvbSwgdG8pIHsKKyAgICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKKyAgICAg
ICAgdmFyIHN0ID0gbGluZS5zdHlsZXMsIHBvcyA9IGZvcndhcmQgPyAwIDogbGluZS50ZXh0Lmxl
bmd0aCAtIDEsIGN1cjsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZvcndhcmQgPyAwIDogc3QubGVu
Z3RoIC0gMiwgZSA9IGZvcndhcmQgPyBzdC5sZW5ndGggOiAtMjsgaSAhPSBlOyBpICs9IDIqZCkg
eworICAgICAgICAgIHZhciB0ZXh0ID0gc3RbaV07CisgICAgICAgICAgaWYgKHN0W2krMV0gIT0g
c3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CisgICAgICAgICAgZm9y
ICh2YXIgaiA9IGZvcndhcmQgPyAwIDogdGV4dC5sZW5ndGggLSAxLCB0ZSA9IGZvcndhcmQgPyB0
ZXh0Lmxlbmd0aCA6IC0xOyBqICE9IHRlOyBqICs9IGQsIHBvcys9ZCkgeworICAgICAgICAgICAg
aWYgKHBvcyA+PSBmcm9tICYmIHBvcyA8IHRvICYmIHJlLnRlc3QoY3VyID0gdGV4dC5jaGFyQXQo
aikpKSB7CisgICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CisgICAgICAg
ICAgICAgIGlmIChtYXRjaC5jaGFyQXQoMSkgPT0gIj4iID09IGZvcndhcmQpIHN0YWNrLnB1c2go
Y3VyKTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2sucG9wKCkgIT0gbWF0Y2guY2hhckF0
KDApKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogZmFsc2V9OworICAgICAgICAgICAgICBlbHNl
IGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBmb3IgKHZh
ciBpID0gaGVhZC5saW5lLCBlID0gZm9yd2FyZCA/IE1hdGgubWluKGkgKyAxMDAsIGRvYy5zaXpl
KSA6IE1hdGgubWF4KC0xLCBpIC0gMTAwKTsgaSAhPSBlOyBpKz1kKSB7CisgICAgICAgIHZhciBs
aW5lID0gZ2V0TGluZShpKSwgZmlyc3QgPSBpID09IGhlYWQubGluZTsKKyAgICAgICAgdmFyIGZv
dW5kID0gc2NhbihsaW5lLCBmaXJzdCAmJiBmb3J3YXJkID8gcG9zICsgMSA6IDAsIGZpcnN0ICYm
ICFmb3J3YXJkID8gcG9zIDogbGluZS50ZXh0Lmxlbmd0aCk7CisgICAgICAgIGlmIChmb3VuZCkg
YnJlYWs7CisgICAgICB9CisgICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IHtwb3M6IG51bGwsIG1h
dGNoOiBmYWxzZX07CisgICAgICB2YXIgc3R5bGUgPSBmb3VuZC5tYXRjaCA/ICJDb2RlTWlycm9y
LW1hdGNoaW5nYnJhY2tldCIgOiAiQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQiOworICAg
ICAgdmFyIG9uZSA9IG1hcmtUZXh0KHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3N9LCB7bGluZTog
aGVhZC5saW5lLCBjaDogcG9zKzF9LCBzdHlsZSksCisgICAgICAgICAgdHdvID0gZm91bmQucG9z
ICE9IG51bGwgJiYgbWFya1RleHQoe2xpbmU6IGksIGNoOiBmb3VuZC5wb3N9LCB7bGluZTogaSwg
Y2g6IGZvdW5kLnBvcyArIDF9LCBzdHlsZSk7CisgICAgICB2YXIgY2xlYXIgPSBvcGVyYXRpb24o
ZnVuY3Rpb24oKXtvbmUuY2xlYXIoKTsgdHdvICYmIHR3by5jbGVhcigpO30pOworICAgICAgaWYg
KGF1dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKKyAgICAgIGVsc2UgYnJhY2tldEhp
Z2hsaWdodGVkID0gY2xlYXI7CisgICAgfQorCisgICAgLy8gRmluZHMgdGhlIGxpbmUgdG8gc3Rh
cnQgd2l0aCB3aGVuIHN0YXJ0aW5nIGEgcGFyc2UuIFRyaWVzIHRvCisgICAgLy8gZmluZCBhIGxp
bmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYQorICAgIC8v
IHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhl
CisgICAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxl
YXN0IGNvbnRleHQgdG8KKyAgICAvLyBwYXJzZSBjb3JyZWN0bHkuCisgICAgZnVuY3Rpb24gZmlu
ZFN0YXJ0TGluZShuKSB7CisgICAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lOworICAgICAgZm9y
ICh2YXIgc2VhcmNoID0gbiwgbGltID0gbiAtIDQwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7
CisgICAgICAgIGlmIChzZWFyY2ggPT0gMCkgcmV0dXJuIDA7CisgICAgICAgIHZhciBsaW5lID0g
Z2V0TGluZShzZWFyY2gtMSk7CisgICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBz
ZWFyY2g7CisgICAgICAgIHZhciBpbmRlbnRlZCA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50
YWJTaXplKTsKKyAgICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRl
bnRlZCkgeworICAgICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOworICAgICAgICAgIG1pbmlu
ZGVudCA9IGluZGVudGVkOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbWlubGlu
ZTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUobikgeworICAgICAgdmFyIHN0
YXJ0ID0gZmluZFN0YXJ0TGluZShuKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEp
LnN0YXRlQWZ0ZXI7CisgICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHN0YXJ0U3RhdGUobW9kZSk7
CisgICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKKyAgICAgIGRvYy5p
dGVyKHN0YXJ0LCBuLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGxpbmUuaGlnaGxpZ2h0KG1v
ZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOworICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBj
b3B5U3RhdGUobW9kZSwgc3RhdGUpOworICAgICAgfSk7CisgICAgICBpZiAoc3RhcnQgPCBuKSBj
aGFuZ2VzLnB1c2goe2Zyb206IHN0YXJ0LCB0bzogbn0pOworICAgICAgaWYgKG4gPCBkb2Muc2l6
ZSAmJiAhZ2V0TGluZShuKS5zdGF0ZUFmdGVyKSB3b3JrLnB1c2gobik7CisgICAgICByZXR1cm4g
c3RhdGU7CisgICAgfQorICAgIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmVzKHN0YXJ0LCBlbmQpIHsK
KyAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHN0YXJ0KTsKKyAgICAgIGRvYy5pdGVy
KHN0YXJ0LCBlbmQsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgbGluZS5oaWdobGlnaHQobW9k
ZSwgc3RhdGUsIG9wdGlvbnMudGFiU2l6ZSk7CisgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNv
cHlTdGF0ZShtb2RlLCBzdGF0ZSk7CisgICAgICB9KTsKKyAgICB9CisgICAgZnVuY3Rpb24gaGln
aGxpZ2h0V29ya2VyKCkgeworICAgICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIG9wdGlvbnMud29y
a1RpbWU7CisgICAgICB2YXIgZm91bmRXb3JrID0gd29yay5sZW5ndGg7CisgICAgICB3aGlsZSAo
d29yay5sZW5ndGgpIHsKKyAgICAgICAgaWYgKCFnZXRMaW5lKHNob3dpbmdGcm9tKS5zdGF0ZUFm
dGVyKSB2YXIgdGFzayA9IHNob3dpbmdGcm9tOworICAgICAgICBlbHNlIHZhciB0YXNrID0gd29y
ay5wb3AoKTsKKyAgICAgICAgaWYgKHRhc2sgPj0gZG9jLnNpemUpIGNvbnRpbnVlOworICAgICAg
ICB2YXIgc3RhcnQgPSBmaW5kU3RhcnRMaW5lKHRhc2spLCBzdGF0ZSA9IHN0YXJ0ICYmIGdldExp
bmUoc3RhcnQtMSkuc3RhdGVBZnRlcjsKKyAgICAgICAgaWYgKHN0YXRlKSBzdGF0ZSA9IGNvcHlT
dGF0ZShtb2RlLCBzdGF0ZSk7CisgICAgICAgIGVsc2Ugc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUp
OworCisgICAgICAgIHZhciB1bmNoYW5nZWQgPSAwLCBjb21wYXJlID0gbW9kZS5jb21wYXJlU3Rh
dGVzLCByZWFsQ2hhbmdlID0gZmFsc2UsCisgICAgICAgICAgICBpID0gc3RhcnQsIGJhaWwgPSBm
YWxzZTsKKyAgICAgICAgZG9jLml0ZXIoaSwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAg
ICAgICAgICB2YXIgaGFkU3RhdGUgPSBsaW5lLnN0YXRlQWZ0ZXI7CisgICAgICAgICAgaWYgKCtu
ZXcgRGF0ZSA+IGVuZCkgeworICAgICAgICAgICAgd29yay5wdXNoKGkpOworICAgICAgICAgICAg
c3RhcnRXb3JrZXIob3B0aW9ucy53b3JrRGVsYXkpOworICAgICAgICAgICAgaWYgKHJlYWxDaGFu
Z2UpIGNoYW5nZXMucHVzaCh7ZnJvbTogdGFzaywgdG86IGkgKyAxfSk7CisgICAgICAgICAgICBy
ZXR1cm4gKGJhaWwgPSB0cnVlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGNoYW5nZWQg
PSBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSwgb3B0aW9ucy50YWJTaXplKTsKKyAgICAgICAg
ICBpZiAoY2hhbmdlZCkgcmVhbENoYW5nZSA9IHRydWU7CisgICAgICAgICAgbGluZS5zdGF0ZUFm
dGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKKyAgICAgICAgICB2YXIgZG9uZSA9IG51bGw7
CisgICAgICAgICAgaWYgKGNvbXBhcmUpIHsKKyAgICAgICAgICAgIHZhciBzYW1lID0gaGFkU3Rh
dGUgJiYgY29tcGFyZShoYWRTdGF0ZSwgc3RhdGUpOworICAgICAgICAgICAgaWYgKHNhbWUgIT0g
UGFzcykgZG9uZSA9ICEhc2FtZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGRvbmUgPT0g
bnVsbCkgeworICAgICAgICAgICAgaWYgKGNoYW5nZWQgIT09IGZhbHNlIHx8ICFoYWRTdGF0ZSkg
dW5jaGFuZ2VkID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCsrdW5jaGFuZ2VkID4gMyAmJiAo
IW1vZGUuaW5kZW50IHx8IG1vZGUuaW5kZW50KGhhZFN0YXRlLCAiIikgPT0gbW9kZS5pbmRlbnQo
c3RhdGUsICIiKSkpCisgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgIH0KKyAg
ICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgKytpOworICAgICAgICB9
KTsKKyAgICAgICAgaWYgKGJhaWwpIHJldHVybjsKKyAgICAgICAgaWYgKHJlYWxDaGFuZ2UpIGNo
YW5nZXMucHVzaCh7ZnJvbTogdGFzaywgdG86IGkgKyAxfSk7CisgICAgICB9CisgICAgICBpZiAo
Zm91bmRXb3JrICYmIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZSkKKyAgICAgICAgb3B0aW9u
cy5vbkhpZ2hsaWdodENvbXBsZXRlKGluc3RhbmNlKTsKKyAgICB9CisgICAgZnVuY3Rpb24gc3Rh
cnRXb3JrZXIodGltZSkgeworICAgICAgaWYgKCF3b3JrLmxlbmd0aCkgcmV0dXJuOworICAgICAg
aGlnaGxpZ2h0LnNldCh0aW1lLCBvcGVyYXRpb24oaGlnaGxpZ2h0V29ya2VyKSk7CisgICAgfQor
CisgICAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGNoYW5nZXMgaW4gc3VjaCBhIHdh
eSB0aGF0IGVhY2gKKyAgICAvLyBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIGN1cnNv
ciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQKKyAgICAvLyBiZSBhd2t3YXJkLCBzbG93LCBhbmQg
ZXJyb3ItcHJvbmUpLCBidXQgaW5zdGVhZCB1cGRhdGVzIGFyZQorICAgIC8vIGJhdGNoZWQgYW5k
IHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgorICAgIGZ1bmN0aW9uIHN0
YXJ0T3BlcmF0aW9uKCkgeworICAgICAgdXBkYXRlSW5wdXQgPSB1c2VyU2VsQ2hhbmdlID0gdGV4
dENoYW5nZWQgPSBudWxsOworICAgICAgY2hhbmdlcyA9IFtdOyBzZWxlY3Rpb25DaGFuZ2VkID0g
ZmFsc2U7IGNhbGxiYWNrcyA9IFtdOworICAgIH0KKyAgICBmdW5jdGlvbiBlbmRPcGVyYXRpb24o
KSB7CisgICAgICBpZiAodXBkYXRlTWF4TGluZSkgY29tcHV0ZU1heExlbmd0aCgpOworICAgICAg
aWYgKG1heExpbmVDaGFuZ2VkICYmICFvcHRpb25zLmxpbmVXcmFwcGluZykgeworICAgICAgICB2
YXIgY3Vyc29yV2lkdGggPSB3aWR0aEZvcmNlci5vZmZzZXRXaWR0aCwgbGVmdCA9IG1lYXN1cmVM
aW5lKG1heExpbmUsIG1heExpbmUudGV4dC5sZW5ndGgpLmxlZnQ7CisgICAgICAgIHdpZHRoRm9y
Y2VyLnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKKyAgICAgICAgbGluZVNwYWNlLnN0eWxlLm1p
bldpZHRoID0gKGxlZnQgKyBjdXJzb3JXaWR0aCkgKyAicHgiOworICAgICAgICBtYXhMaW5lQ2hh
bmdlZCA9IGZhbHNlOworICAgICAgfQorICAgICAgdmFyIG5ld1Njcm9sbFBvcywgdXBkYXRlZDsK
KyAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7CisgICAgICAgIHZhciBjb29yZHMgPSBjYWxj
dWxhdGVDdXJzb3JDb29yZHMoKTsKKyAgICAgICAgbmV3U2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Ny
b2xsUG9zKGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLngsIGNvb3Jkcy55Qm90KTsKKyAgICAg
IH0KKyAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCB8fCBuZXdTY3JvbGxQb3MgJiYgbmV3U2Nyb2xs
UG9zLnNjcm9sbFRvcCAhPSBudWxsKQorICAgICAgICB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShj
aGFuZ2VzLCB0cnVlLCBuZXdTY3JvbGxQb3MgJiYgbmV3U2Nyb2xsUG9zLnNjcm9sbFRvcCk7Cisg
ICAgICBpZiAoIXVwZGF0ZWQpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHVwZGF0
ZVNlbGVjdGlvbigpOworICAgICAgICBpZiAoZ3V0dGVyRGlydHkpIHVwZGF0ZUd1dHRlcigpOwor
ICAgICAgfQorICAgICAgaWYgKG5ld1Njcm9sbFBvcykgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsK
KyAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7c2Nyb2xsRWRpdG9ySW50b1ZpZXcoKTsgcmVz
dGFydEJsaW5rKCk7fQorCisgICAgICBpZiAoZm9jdXNlZCAmJiAhbGVhdmVJbnB1dEFsb25lICYm
CisgICAgICAgICAgKHVwZGF0ZUlucHV0ID09PSB0cnVlIHx8ICh1cGRhdGVJbnB1dCAhPT0gZmFs
c2UgJiYgc2VsZWN0aW9uQ2hhbmdlZCkpKQorICAgICAgICByZXNldElucHV0KHVzZXJTZWxDaGFu
Z2UpOworCisgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCAmJiBvcHRpb25zLm1hdGNoQnJhY2tl
dHMpCisgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAg
IGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHticmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhp
Z2hsaWdodGVkID0gbnVsbDt9CisgICAgICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8p
KSBtYXRjaEJyYWNrZXRzKGZhbHNlKTsKKyAgICAgICAgfSksIDIwKTsKKyAgICAgIHZhciBzYyA9
IHNlbGVjdGlvbkNoYW5nZWQsIGNicyA9IGNhbGxiYWNrczsgLy8gdGhlc2UgY2FuIGJlIHJlc2V0
IGJ5IGNhbGxiYWNrcworICAgICAgaWYgKHRleHRDaGFuZ2VkICYmIG9wdGlvbnMub25DaGFuZ2Ug
JiYgaW5zdGFuY2UpCisgICAgICAgIG9wdGlvbnMub25DaGFuZ2UoaW5zdGFuY2UsIHRleHRDaGFu
Z2VkKTsKKyAgICAgIGlmIChzYyAmJiBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkpCisgICAgICAg
IG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eShpbnN0YW5jZSk7CisgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNicy5sZW5ndGg7ICsraSkgY2JzW2ldKGluc3RhbmNlKTsKKyAgICAgIGlmICh1cGRh
dGVkICYmIG9wdGlvbnMub25VcGRhdGUpIG9wdGlvbnMub25VcGRhdGUoaW5zdGFuY2UpOworICAg
IH0KKyAgICB2YXIgbmVzdGVkT3BlcmF0aW9uID0gMDsKKyAgICBmdW5jdGlvbiBvcGVyYXRpb24o
ZikgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIW5lc3RlZE9wZXJh
dGlvbisrKSBzdGFydE9wZXJhdGlvbigpOworICAgICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7fQorICAgICAgICBmaW5hbGx5IHtpZiAoIS0tbmVzdGVkT3Bl
cmF0aW9uKSBlbmRPcGVyYXRpb24oKTt9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXBvdW5kQ2hhbmdlKGYpIHsKKyAgICAgIGhpc3Rv
cnkuc3RhcnRDb21wb3VuZCgpOworICAgICAgdHJ5IHsgcmV0dXJuIGYoKTsgfSBmaW5hbGx5IHsg
aGlzdG9yeS5lbmRDb21wb3VuZCgpOyB9CisgICAgfQorCisgICAgZm9yICh2YXIgZXh0IGluIGV4
dGVuc2lvbnMpCisgICAgICBpZiAoZXh0ZW5zaW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShleHQp
ICYmCisgICAgICAgICAgIWluc3RhbmNlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4dCkpCisgICAg
ICAgIGluc3RhbmNlW2V4dF0gPSBleHRlbnNpb25zW2V4dF07CisgICAgcmV0dXJuIGluc3RhbmNl
OworICB9IC8vIChlbmQgb2YgZnVuY3Rpb24gQ29kZU1pcnJvcikKKworICAvLyBUaGUgZGVmYXVs
dCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgIENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7CisgICAg
dmFsdWU6ICIiLAorICAgIG1vZGU6IG51bGwsCisgICAgdGhlbWU6ICJkZWZhdWx0IiwKKyAgICBp
bmRlbnRVbml0OiAyLAorICAgIGluZGVudFdpdGhUYWJzOiBmYWxzZSwKKyAgICBzbWFydEluZGVu
dDogdHJ1ZSwKKyAgICB0YWJTaXplOiA0LAorICAgIGtleU1hcDogImRlZmF1bHQiLAorICAgIGV4
dHJhS2V5czogbnVsbCwKKyAgICBlbGVjdHJpY0NoYXJzOiB0cnVlLAorICAgIGF1dG9DbGVhckVt
cHR5TGluZXM6IGZhbHNlLAorICAgIG9uS2V5RXZlbnQ6IG51bGwsCisgICAgb25EcmFnRXZlbnQ6
IG51bGwsCisgICAgbGluZVdyYXBwaW5nOiBmYWxzZSwKKyAgICBsaW5lTnVtYmVyczogZmFsc2Us
CisgICAgZ3V0dGVyOiBmYWxzZSwKKyAgICBmaXhlZEd1dHRlcjogZmFsc2UsCisgICAgZmlyc3RM
aW5lTnVtYmVyOiAxLAorICAgIHJlYWRPbmx5OiBmYWxzZSwKKyAgICBkcmFnRHJvcDogdHJ1ZSwK
KyAgICBvbkNoYW5nZTogbnVsbCwKKyAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAorICAgIG9u
R3V0dGVyQ2xpY2s6IG51bGwsCisgICAgb25IaWdobGlnaHRDb21wbGV0ZTogbnVsbCwKKyAgICBv
blVwZGF0ZTogbnVsbCwKKyAgICBvbkZvY3VzOiBudWxsLCBvbkJsdXI6IG51bGwsIG9uU2Nyb2xs
OiBudWxsLAorICAgIG1hdGNoQnJhY2tldHM6IGZhbHNlLAorICAgIHdvcmtUaW1lOiAxMDAsCisg
ICAgd29ya0RlbGF5OiAyMDAsCisgICAgcG9sbEludGVydmFsOiAxMDAsCisgICAgdW5kb0RlcHRo
OiA0MCwKKyAgICB0YWJpbmRleDogbnVsbCwKKyAgICBhdXRvZm9jdXM6IG51bGwsCisgICAgbGlu
ZU51bWJlckZvcm1hdHRlcjogZnVuY3Rpb24oaW50ZWdlcikgeyByZXR1cm4gaW50ZWdlcjsgfQor
ICB9OworCisgIHZhciBpb3MgPSAvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2Vu
dCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgbWFj
ID0gaW9zIHx8IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKKyAgdmFyIHdpbiA9IC9X
aW4vLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKKworICAvLyBLbm93biBtb2RlcywgYnkgbmFt
ZSBhbmQgYnkgTUlNRQorICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1vZGVzID0ge30sIG1pbWVN
b2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307CisgIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKKyAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMu
bW9kZSAmJiBuYW1lICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsK
KyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKKyAgICAgIG1vZGUuZGVwZW5kZW5jaWVz
ID0gW107CisgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkg
bW9kZS5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbaV0pOworICAgIH0KKyAgICBtb2Rlc1tu
YW1lXSA9IG1vZGU7CisgIH07CisgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSA9IGZ1bmN0aW9uKG1p
bWUsIHNwZWMpIHsKKyAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOworICB9OworICBDb2RlTWly
cm9yLnJlc29sdmVNb2RlID0gZnVuY3Rpb24oc3BlYykgeworICAgIGlmICh0eXBlb2Ygc3BlYyA9
PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykpCisgICAgICBzcGVj
ID0gbWltZU1vZGVzW3NwZWNdOworICAgIGVsc2UgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmci
ICYmIC9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChzcGVjKSkKKyAgICAgIHJldHVybiBD
b2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICBpZiAodHlwZW9m
IHNwZWMgPT0gInN0cmluZyIpIHJldHVybiB7bmFtZTogc3BlY307CisgICAgZWxzZSByZXR1cm4g
c3BlYyB8fCB7bmFtZTogIm51bGwifTsKKyAgfTsKKyAgQ29kZU1pcnJvci5nZXRNb2RlID0gZnVu
Y3Rpb24ob3B0aW9ucywgc3BlYykgeworICAgIHZhciBzcGVjID0gQ29kZU1pcnJvci5yZXNvbHZl
TW9kZShzcGVjKTsKKyAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOworICAgIGlm
ICghbWZhY3RvcnkpIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxh
aW4iKTsKKyAgICByZXR1cm4gbWZhY3Rvcnkob3B0aW9ucywgc3BlYyk7CisgIH07CisgIENvZGVN
aXJyb3IubGlzdE1vZGVzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGxpc3QgPSBbXTsKKyAgICBm
b3IgKHZhciBtIGluIG1vZGVzKQorICAgICAgaWYgKG1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxl
KG0pKSBsaXN0LnB1c2gobSk7CisgICAgcmV0dXJuIGxpc3Q7CisgIH07CisgIENvZGVNaXJyb3Iu
bGlzdE1JTUVzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGxpc3QgPSBbXTsKKyAgICBmb3IgKHZh
ciBtIGluIG1pbWVNb2RlcykKKyAgICAgIGlmIChtaW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFi
bGUobSkpIGxpc3QucHVzaCh7bWltZTogbSwgbW9kZTogbWltZU1vZGVzW21dfSk7CisgICAgcmV0
dXJuIGxpc3Q7CisgIH07CisKKyAgdmFyIGV4dGVuc2lvbnMgPSBDb2RlTWlycm9yLmV4dGVuc2lv
bnMgPSB7fTsKKyAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBm
dW5jKSB7CisgICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGZ1bmM7CisgIH07CisKKyAgdmFyIGNvbW1h
bmRzID0gQ29kZU1pcnJvci5jb21tYW5kcyA9IHsKKyAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uKGNt
KSB7Y20uc2V0U2VsZWN0aW9uKHtsaW5lOiAwLCBjaDogMH0sIHtsaW5lOiBjbS5saW5lQ291bnQo
KSAtIDF9KTt9LAorICAgIGtpbGxMaW5lOiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGZyb20g
PSBjbS5nZXRDdXJzb3IodHJ1ZSksIHRvID0gY20uZ2V0Q3Vyc29yKGZhbHNlKSwgc2VsID0gIXBv
c0VxKGZyb20sIHRvKTsKKyAgICAgIGlmICghc2VsICYmIGNtLmdldExpbmUoZnJvbS5saW5lKS5s
ZW5ndGggPT0gZnJvbS5jaCkgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCB7bGluZTogZnJvbS5s
aW5lICsgMSwgY2g6IDB9KTsKKyAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBz
ZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9KTsKKyAgICB9LAorICAgIGRlbGV0ZUxpbmU6IGZ1
bmN0aW9uKGNtKSB7dmFyIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lOyBjbS5yZXBsYWNlUmFuZ2Uo
IiIsIHtsaW5lOiBsLCBjaDogMH0sIHtsaW5lOiBsfSk7fSwKKyAgICB1bmRvOiBmdW5jdGlvbihj
bSkge2NtLnVuZG8oKTt9LAorICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCisg
ICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20pIHtjbS5zZXRDdXJzb3IoMCwgMCwgdHJ1ZSk7fSwK
KyAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmxp
bmVDb3VudCgpIC0gMX0sIG51bGwsIHRydWUpO30sCisgICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9u
KGNtKSB7Y20uc2V0Q3Vyc29yKGNtLmdldEN1cnNvcigpLmxpbmUsIDAsIHRydWUpO30sCisgICAg
Z29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKKyAgICAgIHZhciBjdXIgPSBjbS5nZXRD
dXJzb3IoKTsKKyAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShjdXIubGluZSksIGZpcnN0Tm9u
V1MgPSBNYXRoLm1heCgwLCB0ZXh0LnNlYXJjaCgvXFMvKSk7CisgICAgICBjbS5zZXRDdXJzb3Io
Y3VyLmxpbmUsIGN1ci5jaCA8PSBmaXJzdE5vbldTICYmIGN1ci5jaCA/IDAgOiBmaXJzdE5vbldT
LCB0cnVlKTsKKyAgICB9LAorICAgIGdvTGluZUVuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxl
Y3Rpb24oe2xpbmU6IGNtLmdldEN1cnNvcigpLmxpbmV9LCBudWxsLCB0cnVlKTt9LAorICAgIGdv
TGluZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAibGluZSIpO30sCisgICAgZ29MaW5l
RG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCisgICAgZ29QYWdlVXA6
IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJwYWdlIik7fSwKKyAgICBnb1BhZ2VEb3duOiBm
dW5jdGlvbihjbSkge2NtLm1vdmVWKDEsICJwYWdlIik7fSwKKyAgICBnb0NoYXJMZWZ0OiBmdW5j
dGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY2hhciIpO30sCisgICAgZ29DaGFyUmlnaHQ6IGZ1bmN0
aW9uKGNtKSB7Y20ubW92ZUgoMSwgImNoYXIiKTt9LAorICAgIGdvQ29sdW1uTGVmdDogZnVuY3Rp
b24oY20pIHtjbS5tb3ZlSCgtMSwgImNvbHVtbiIpO30sCisgICAgZ29Db2x1bW5SaWdodDogZnVu
Y3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY29sdW1uIik7fSwKKyAgICBnb1dvcmRMZWZ0OiBmdW5j
dGlvbihjbSkge2NtLm1vdmVIKC0xLCAid29yZCIpO30sCisgICAgZ29Xb3JkUmlnaHQ6IGZ1bmN0
aW9uKGNtKSB7Y20ubW92ZUgoMSwgIndvcmQiKTt9LAorICAgIGRlbENoYXJMZWZ0OiBmdW5jdGlv
bihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKKyAgICBkZWxDaGFyUmlnaHQ6IGZ1bmN0
aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiY2hhciIpO30sCisgICAgZGVsV29yZExlZnQ6IGZ1bmN0
aW9uKGNtKSB7Y20uZGVsZXRlSCgtMSwgIndvcmQiKTt9LAorICAgIGRlbFdvcmRSaWdodDogZnVu
Y3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKKyAgICBpbmRlbnRBdXRvOiBmdW5j
dGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic21hcnQiKTt9LAorICAgIGluZGVudE1vcmU6
IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJhZGQiKTt9LAorICAgIGluZGVudExl
c3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30sCisgICAg
aW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIp
O30sCisgICAgZGVmYXVsdFRhYjogZnVuY3Rpb24oY20pIHsKKyAgICAgIGlmIChjbS5zb21ldGhp
bmdTZWxlY3RlZCgpKSBjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOworICAgICAgZWxzZSBjbS5y
ZXBsYWNlU2VsZWN0aW9uKCJcdCIsICJlbmQiKTsKKyAgICB9LAorICAgIHRyYW5zcG9zZUNoYXJz
OiBmdW5jdGlvbihjbSkgeworICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0g
Y20uZ2V0TGluZShjdXIubGluZSk7CisgICAgICBpZiAoY3VyLmNoID4gMCAmJiBjdXIuY2ggPCBs
aW5lLmxlbmd0aCAtIDEpCisgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIu
Y2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICB7
bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggLSAxfSwge2xpbmU6IGN1ci5saW5lLCBjaDogY3Vy
LmNoICsgMX0pOworICAgIH0sCisgICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsK
KyAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgImVuZCIpOworICAgICAgY20uaW5kZW50
TGluZShjbS5nZXRDdXJzb3IoKS5saW5lKTsKKyAgICB9LAorICAgIHRvZ2dsZU92ZXJ3cml0ZTog
ZnVuY3Rpb24oY20pIHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9CisgIH07CisKKyAgdmFyIGtleU1h
cCA9IENvZGVNaXJyb3Iua2V5TWFwID0ge307CisgIGtleU1hcC5iYXNpYyA9IHsKKyAgICAiTGVm
dCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGluZVVw
IiwgIkRvd24iOiAiZ29MaW5lRG93biIsCisgICAgIkVuZCI6ICJnb0xpbmVFbmQiLCAiSG9tZSI6
ICJnb0xpbmVTdGFydFNtYXJ0IiwgIlBhZ2VVcCI6ICJnb1BhZ2VVcCIsICJQYWdlRG93biI6ICJn
b1BhZ2VEb3duIiwKKyAgICAiRGVsZXRlIjogImRlbENoYXJSaWdodCIsICJCYWNrc3BhY2UiOiAi
ZGVsQ2hhckxlZnQiLCAiVGFiIjogImRlZmF1bHRUYWIiLCAiU2hpZnQtVGFiIjogImluZGVudEF1
dG8iLAorICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVP
dmVyd3JpdGUiCisgIH07CisgIC8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVk
IGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5CisgIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFu
ZHMgYXJlIHNpbXBseSBpZ25vcmVkLgorICBrZXlNYXAucGNEZWZhdWx0ID0geworICAgICJDdHJs
LUEiOiAic2VsZWN0QWxsIiwgIkN0cmwtRCI6ICJkZWxldGVMaW5lIiwgIkN0cmwtWiI6ICJ1bmRv
IiwgIlNoaWZ0LUN0cmwtWiI6ICJyZWRvIiwgIkN0cmwtWSI6ICJyZWRvIiwKKyAgICAiQ3RybC1I
b21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAi
Z29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKKyAgICAiQ3RybC1MZWZ0IjogImdv
V29yZExlZnQiLCAiQ3RybC1SaWdodCI6ICJnb1dvcmRSaWdodCIsICJBbHQtTGVmdCI6ICJnb0xp
bmVTdGFydCIsICJBbHQtUmlnaHQiOiAiZ29MaW5lRW5kIiwKKyAgICAiQ3RybC1CYWNrc3BhY2Ui
OiAiZGVsV29yZExlZnQiLCAiQ3RybC1EZWxldGUiOiAiZGVsV29yZFJpZ2h0IiwgIkN0cmwtUyI6
ICJzYXZlIiwgIkN0cmwtRiI6ICJmaW5kIiwKKyAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNo
aWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlm
dC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCisgICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0
cmwtXSI6ICJpbmRlbnRNb3JlIiwKKyAgICBmYWxsdGhyb3VnaDogImJhc2ljIgorICB9OworICBr
ZXlNYXAubWFjRGVmYXVsdCA9IHsKKyAgICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjog
ImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAidW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNt
ZC1ZIjogInJlZG8iLAorICAgICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdv
RG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvV29yZExlZnQi
LAorICAgICJBbHQtUmlnaHQiOiAiZ29Xb3JkUmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lU3Rh
cnQiLCAiQ21kLVJpZ2h0IjogImdvTGluZUVuZCIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRM
ZWZ0IiwKKyAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbFdvcmRSaWdodCIsICJBbHQtRGVs
ZXRlIjogImRlbFdvcmRSaWdodCIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAor
ICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQt
QWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCisgICAg
IkNtZC1bIjogImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsCisgICAgZmFsbHRo
cm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KKyAgfTsKKyAga2V5TWFwWyJkZWZhdWx0Il0gPSBt
YWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CisgIGtleU1hcC5lbWFj
c3kgPSB7CisgICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVm
dCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAorICAgICJB
bHQtRiI6ICJnb1dvcmRSaWdodCIsICJBbHQtQiI6ICJnb1dvcmRMZWZ0IiwgIkN0cmwtQSI6ICJn
b0xpbmVTdGFydCIsICJDdHJsLUUiOiAiZ29MaW5lRW5kIiwKKyAgICAiQ3RybC1WIjogImdvUGFn
ZVVwIiwgIlNoaWZ0LUN0cmwtViI6ICJnb1BhZ2VEb3duIiwgIkN0cmwtRCI6ICJkZWxDaGFyUmln
aHQiLCAiQ3RybC1IIjogImRlbENoYXJMZWZ0IiwKKyAgICAiQWx0LUQiOiAiZGVsV29yZFJpZ2h0
IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwg
IkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKKyAgfTsKKworICBmdW5jdGlvbiBnZXRLZXlNYXAo
dmFsKSB7CisgICAgaWYgKHR5cGVvZiB2YWwgPT0gInN0cmluZyIpIHJldHVybiBrZXlNYXBbdmFs
XTsKKyAgICBlbHNlIHJldHVybiB2YWw7CisgIH0KKyAgZnVuY3Rpb24gbG9va3VwS2V5KG5hbWUs
IGV4dHJhTWFwLCBtYXAsIGhhbmRsZSwgc3RvcCkgeworICAgIGZ1bmN0aW9uIGxvb2t1cChtYXAp
IHsKKyAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOworICAgICAgdmFyIGZvdW5kID0gbWFwW25h
bWVdOworICAgICAgaWYgKGZvdW5kID09PSBmYWxzZSkgeworICAgICAgICBpZiAoc3RvcCkgc3Rv
cCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChmb3VuZCAhPSBu
dWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOworICAgICAgaWYgKG1hcC5ub2ZhbGx0
aHJvdWdoKSB7CisgICAgICAgIGlmIChzdG9wKSBzdG9wKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgfQorICAgICAgdmFyIGZhbGx0aHJvdWdoID0gbWFwLmZhbGx0aHJvdWdoOworICAg
ICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gpICE9ICJbb2JqZWN0IEFycmF5
XSIpCisgICAgICAgIHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gpOworICAgICAgZm9yICh2YXIg
aSA9IDAsIGUgPSBmYWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgICAgaWYg
KGxvb2t1cChmYWxsdGhyb3VnaFtpXSkpIHJldHVybiB0cnVlOworICAgICAgfQorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZXh0cmFNYXAgJiYgbG9va3VwKGV4dHJhTWFwKSkg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGxvb2t1cChtYXApOworICB9CisgIGZ1bmN0aW9uIGlz
TW9kaWZpZXJLZXkoZXZlbnQpIHsKKyAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVu
dCwgImtleUNvZGUiKV07CisgICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5hbWUgPT0gIkFs
dCIgfHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7CisgIH0KKworICBDb2RlTWly
cm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhLCBvcHRpb25zKSB7CisgICAgaWYg
KCFvcHRpb25zKSBvcHRpb25zID0ge307CisgICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZh
bHVlOworICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJpbmRleCkKKyAg
ICAgIG9wdGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJpbmRleDsKKyAgICBpZiAob3B0aW9u
cy5hdXRvZm9jdXMgPT0gbnVsbCAmJiB0ZXh0YXJlYS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIp
ICE9IG51bGwpCisgICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IHRydWU7CisKKyAgICBmdW5jdGlv
biBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gaW5zdGFuY2UuZ2V0VmFsdWUoKTt9CisgICAgaWYg
KHRleHRhcmVhLmZvcm0pIHsKKyAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBtYWtlIHRoZSBz
dWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KKyAgICAgIHZhciBybVN1Ym1pdCA9IGNv
bm5lY3QodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUsIHRydWUpOworICAgICAgaWYgKHR5
cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIHZhciBy
ZWFsU3VibWl0ID0gdGV4dGFyZWEuZm9ybS5zdWJtaXQ7CisgICAgICAgIHRleHRhcmVhLmZvcm0u
c3VibWl0ID0gZnVuY3Rpb24gd3JhcHBlZFN1Ym1pdCgpIHsKKyAgICAgICAgICBzYXZlKCk7Cisg
ICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OworICAgICAgICAgIHRl
eHRhcmVhLmZvcm0uc3VibWl0KCk7CisgICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSB3
cmFwcGVkU3VibWl0OworICAgICAgICB9OworICAgICAgfQorICAgIH0KKworICAgIHRleHRhcmVh
LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgdmFyIGluc3RhbmNlID0gQ29kZU1pcnJvcihm
dW5jdGlvbihub2RlKSB7CisgICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShu
b2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7CisgICAgfSwgb3B0aW9ucyk7CisgICAgaW5zdGFu
Y2Uuc2F2ZSA9IHNhdmU7CisgICAgaW5zdGFuY2UuZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIHRleHRhcmVhOyB9OworICAgIGluc3RhbmNlLnRvVGV4dEFyZWEgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHNhdmUoKTsKKyAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
aW5zdGFuY2UuZ2V0V3JhcHBlckVsZW1lbnQoKSk7CisgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNw
bGF5ID0gIiI7CisgICAgICBpZiAodGV4dGFyZWEuZm9ybSkgeworICAgICAgICBybVN1Ym1pdCgp
OworICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIp
CisgICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OworICAgICAgfQor
ICAgIH07CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9OworCisgIHZhciBnZWNrbyA9IC9nZWNr
b1wvXGR7N30vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgaWUgPSAvTVNJRSBc
ZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAgdmFyIGllX2x0OCA9IC9NU0lFIFsxLTdd
XGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CisgIHZhciBpZV9sdDkgPSAvTVNJRSBbMS04
XVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgcXVpcmtzTW9kZSA9IGllICYm
IGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSA1OworICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50
ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgb3BlcmEgPSAvT3BlcmFcLy8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KTsKKyAgdmFyIHNhZmFyaSA9IC9BcHBsZSBDb21wdXRlci8udGVzdChu
YXZpZ2F0b3IudmVuZG9yKTsKKyAgdmFyIGtodG1sID0gL0tIVE1MXC8vLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCk7CisgIHZhciBtYWNfZ2VMaW9uID0gL01hYyBPUyBYIDEwXEQoWzctOV18XGRc
ZClcRC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKworICAvLyBVdGlsaXR5IGZ1bmN0aW9u
cyBmb3Igd29ya2luZyB3aXRoIHN0YXRlLiBFeHBvcnRlZCBiZWNhdXNlIG1vZGVzCisgIC8vIHNv
bWV0aW1lcyBuZWVkIHRvIGRvIHRoaXMuCisgIGZ1bmN0aW9uIGNvcHlTdGF0ZShtb2RlLCBzdGF0
ZSkgeworICAgIGlmIChzdGF0ZSA9PT0gdHJ1ZSkgcmV0dXJuIHN0YXRlOworICAgIGlmIChtb2Rl
LmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKTsKKyAgICB2YXIgbnN0YXRl
ID0ge307CisgICAgZm9yICh2YXIgbiBpbiBzdGF0ZSkgeworICAgICAgdmFyIHZhbCA9IHN0YXRl
W25dOworICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtd
KTsKKyAgICAgIG5zdGF0ZVtuXSA9IHZhbDsKKyAgICB9CisgICAgcmV0dXJuIG5zdGF0ZTsKKyAg
fQorICBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGNvcHlTdGF0ZTsKKyAgZnVuY3Rpb24gc3RhcnRT
dGF0ZShtb2RlLCBhMSwgYTIpIHsKKyAgICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5z
dGFydFN0YXRlKGExLCBhMikgOiB0cnVlOworICB9CisgIENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9
IHN0YXJ0U3RhdGU7CisKKyAgLy8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUn
cyBwYXJzZXIuCisgIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKKyAg
ICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwOworICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwor
ICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKKyAgfQorICBTdHJpbmdTdHJlYW0ucHJv
dG90eXBlID0geworICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMu
c3RyaW5nLmxlbmd0aDt9LAorICAgIHNvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID09
IDA7fSwKKyAgICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRo
aXMucG9zKTt9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMucG9zIDwg
dGhpcy5zdHJpbmcubGVuZ3RoKQorICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRo
aXMucG9zKyspOworICAgIH0sCisgICAgZWF0OiBmdW5jdGlvbihtYXRjaCkgeworICAgICAgdmFy
IGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKKyAgICAgIGlmICh0eXBlb2YgbWF0
Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOworICAgICAgZWxzZSB2YXIgb2sg
PSBjaCAmJiAobWF0Y2gudGVzdCA/IG1hdGNoLnRlc3QoY2gpIDogbWF0Y2goY2gpKTsKKyAgICAg
IGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaDt9CisgICAgfSwKKyAgICBlYXRXaGlsZTog
ZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOworICAgICAgd2hp
bGUgKHRoaXMuZWF0KG1hdGNoKSl7fQorICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7Cisg
ICAgfSwKKyAgICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc3RhcnQgPSB0aGlz
LnBvczsKKyAgICAgIHdoaWxlICgvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQo
dGhpcy5wb3MpKSkgKyt0aGlzLnBvczsKKyAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0Owor
ICAgIH0sCisgICAgc2tpcFRvRW5kOiBmdW5jdGlvbigpIHt0aGlzLnBvcyA9IHRoaXMuc3RyaW5n
Lmxlbmd0aDt9LAorICAgIHNraXBUbzogZnVuY3Rpb24oY2gpIHsKKyAgICAgIHZhciBmb3VuZCA9
IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTsKKyAgICAgIGlmIChmb3VuZCA+IC0x
KSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWU7fQorICAgIH0sCisgICAgYmFja1VwOiBm
dW5jdGlvbihuKSB7dGhpcy5wb3MgLT0gbjt9LAorICAgIGNvbHVtbjogZnVuY3Rpb24oKSB7cmV0
dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUpO30s
CisgICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0
cmluZywgbnVsbCwgdGhpcy50YWJTaXplKTt9LAorICAgIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJu
LCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKKyAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9
PSAic3RyaW5nIikgeworICAgICAgICB2YXIgY2FzZWQgPSBmdW5jdGlvbihzdHIpIHtyZXR1cm4g
Y2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fTsKKyAgICAgICAgaWYg
KGNhc2VkKHRoaXMuc3RyaW5nKS5pbmRleE9mKGNhc2VkKHBhdHRlcm4pLCB0aGlzLnBvcykgPT0g
dGhpcy5wb3MpIHsKKyAgICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9
IHBhdHRlcm4ubGVuZ3RoOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBv
cykubWF0Y2gocGF0dGVybik7CisgICAgICAgIGlmIChtYXRjaCAmJiBjb25zdW1lICE9PSBmYWxz
ZSkgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICByZXR1cm4gbWF0Y2g7Cisg
ICAgICB9CisgICAgfSwKKyAgICBjdXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmlu
Zy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyk7fQorICB9OworICBDb2RlTWlycm9yLlN0cmlu
Z1N0cmVhbSA9IFN0cmluZ1N0cmVhbTsKKworICBmdW5jdGlvbiBNYXJrZWRUZXh0KGZyb20sIHRv
LCBjbGFzc05hbWUsIG1hcmtlcikgeworICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0
bzsgdGhpcy5zdHlsZSA9IGNsYXNzTmFtZTsgdGhpcy5tYXJrZXIgPSBtYXJrZXI7CisgIH0KKyAg
TWFya2VkVGV4dC5wcm90b3R5cGUgPSB7CisgICAgYXR0YWNoOiBmdW5jdGlvbihsaW5lKSB7IHRo
aXMubWFya2VyLnNldC5wdXNoKGxpbmUpOyB9LAorICAgIGRldGFjaDogZnVuY3Rpb24obGluZSkg
eworICAgICAgdmFyIGl4ID0gaW5kZXhPZih0aGlzLm1hcmtlci5zZXQsIGxpbmUpOworICAgICAg
aWYgKGl4ID4gLTEpIHRoaXMubWFya2VyLnNldC5zcGxpY2UoaXgsIDEpOworICAgIH0sCisgICAg
c3BsaXQ6IGZ1bmN0aW9uKHBvcywgbGVuQmVmb3JlKSB7CisgICAgICBpZiAodGhpcy50byA8PSBw
b3MgJiYgdGhpcy50byAhPSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAgIHZhciBmcm9tID0gdGhp
cy5mcm9tIDwgcG9zIHx8IHRoaXMuZnJvbSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZnJvbSAtIHBv
cyArIGxlbkJlZm9yZTsKKyAgICAgIHZhciB0byA9IHRoaXMudG8gPT0gbnVsbCA/IG51bGwgOiB0
aGlzLnRvIC0gcG9zICsgbGVuQmVmb3JlOworICAgICAgcmV0dXJuIG5ldyBNYXJrZWRUZXh0KGZy
b20sIHRvLCB0aGlzLnN0eWxlLCB0aGlzLm1hcmtlcik7CisgICAgfSwKKyAgICBkdXA6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gbmV3IE1hcmtlZFRleHQobnVsbCwgbnVsbCwgdGhpcy5zdHlsZSwgdGhp
cy5tYXJrZXIpOyB9LAorICAgIGNsaXBUbzogZnVuY3Rpb24oZnJvbU9wZW4sIGZyb20sIHRvT3Bl
biwgdG8sIGRpZmYpIHsKKyAgICAgIGlmIChmcm9tT3BlbiAmJiB0byA+IHRoaXMuZnJvbSAmJiAo
dG8gPCB0aGlzLnRvIHx8IHRoaXMudG8gPT0gbnVsbCkpCisgICAgICAgIHRoaXMuZnJvbSA9IG51
bGw7CisgICAgICBlbHNlIGlmICh0aGlzLmZyb20gIT0gbnVsbCAmJiB0aGlzLmZyb20gPj0gZnJv
bSkKKyAgICAgICAgdGhpcy5mcm9tID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwor
ICAgICAgaWYgKHRvT3BlbiAmJiAoZnJvbSA8IHRoaXMudG8gfHwgdGhpcy50byA9PSBudWxsKSAm
JiAoZnJvbSA+IHRoaXMuZnJvbSB8fCB0aGlzLmZyb20gPT0gbnVsbCkpCisgICAgICAgIHRoaXMu
dG8gPSBudWxsOworICAgICAgZWxzZSBpZiAodGhpcy50byAhPSBudWxsICYmIHRoaXMudG8gPiBm
cm9tKQorICAgICAgICB0aGlzLnRvID0gdG8gPCB0aGlzLnRvID8gdGhpcy50byArIGRpZmYgOiBm
cm9tOworICAgIH0sCisgICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSAh
PSBudWxsICYmIHRoaXMudG8gIT0gbnVsbCAmJiB0aGlzLmZyb20gPj0gdGhpcy50bzsgfSwKKyAg
ICBzYW1lU2V0OiBmdW5jdGlvbih4KSB7IHJldHVybiB0aGlzLm1hcmtlciA9PSB4Lm1hcmtlcjsg
fQorICB9OworCisgIGZ1bmN0aW9uIEJvb2ttYXJrKHBvcykgeworICAgIHRoaXMuZnJvbSA9IHBv
czsgdGhpcy50byA9IHBvczsgdGhpcy5saW5lID0gbnVsbDsKKyAgfQorICBCb29rbWFyay5wcm90
b3R5cGUgPSB7CisgICAgYXR0YWNoOiBmdW5jdGlvbihsaW5lKSB7IHRoaXMubGluZSA9IGxpbmU7
IH0sCisgICAgZGV0YWNoOiBmdW5jdGlvbihsaW5lKSB7IGlmICh0aGlzLmxpbmUgPT0gbGluZSkg
dGhpcy5saW5lID0gbnVsbDsgfSwKKyAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCBsZW5CZWZvcmUp
IHsKKyAgICAgIGlmIChwb3MgPCB0aGlzLmZyb20pIHsKKyAgICAgICAgdGhpcy5mcm9tID0gdGhp
cy50byA9ICh0aGlzLmZyb20gLSBwb3MpICsgbGVuQmVmb3JlOworICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgIH0KKyAgICB9LAorICAgIGlzRGVhZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlz
LmZyb20gPiB0aGlzLnRvOyB9LAorICAgIGNsaXBUbzogZnVuY3Rpb24oZnJvbU9wZW4sIGZyb20s
IHRvT3BlbiwgdG8sIGRpZmYpIHsKKyAgICAgIGlmICgoZnJvbU9wZW4gfHwgZnJvbSA8IHRoaXMu
ZnJvbSkgJiYgKHRvT3BlbiB8fCB0byA+IHRoaXMudG8pKSB7CisgICAgICAgIHRoaXMuZnJvbSA9
IDA7IHRoaXMudG8gPSAtMTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5mcm9tID4gZnJvbSkgewor
ICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBk
aWZmOworICAgICAgfQorICAgIH0sCisgICAgc2FtZVNldDogZnVuY3Rpb24oeCkgeyByZXR1cm4g
ZmFsc2U7IH0sCisgICAgZmluZDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMubGluZSB8
fCAhdGhpcy5saW5lLnBhcmVudCkgcmV0dXJuIG51bGw7CisgICAgICByZXR1cm4ge2xpbmU6IGxp
bmVObyh0aGlzLmxpbmUpLCBjaDogdGhpcy5mcm9tfTsKKyAgICB9LAorICAgIGNsZWFyOiBmdW5j
dGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmxpbmUpIHsKKyAgICAgICAgdmFyIGZvdW5kID0gaW5k
ZXhPZih0aGlzLmxpbmUubWFya2VkLCB0aGlzKTsKKyAgICAgICAgaWYgKGZvdW5kICE9IC0xKSB0
aGlzLmxpbmUubWFya2VkLnNwbGljZShmb3VuZCwgMSk7CisgICAgICAgIHRoaXMubGluZSA9IG51
bGw7CisgICAgICB9CisgICAgfQorICB9OworCisgIC8vIFdoZW4gbWVhc3VyaW5nIHRoZSBwb3Np
dGlvbiBvZiB0aGUgZW5kIG9mIGEgbGluZSwgZGlmZmVyZW50CisgIC8vIGJyb3dzZXJzIHJlcXVp
cmUgZGlmZmVyZW50IGFwcHJvYWNoZXMuIElmIGFuIGVtcHR5IHNwYW4gaXMgYWRkZWQsCisgIC8v
IG1hbnkgYnJvd3NlcnMgcmVwb3J0IGJvZ3VzIG9mZnNldHMuIE9mIHRob3NlLCBzb21lIChXZWJr
aXQsCisgIC8vIHJlY2VudCBJRSkgd2lsbCBhY2NlcHQgYSBzcGFjZSB3aXRob3V0IG1vdmluZyB0
aGUgd2hvbGUgc3BhbiB0bworICAvLyB0aGUgbmV4dCBsaW5lIHdoZW4gd3JhcHBpbmcgaXQsIG90
aGVycyB3b3JrIHdpdGggYSB6ZXJvLXdpZHRoCisgIC8vIHNwYWNlLgorICB2YXIgZW9sU3BhbkNv
bnRlbnQgPSAiICI7CisgIGlmIChnZWNrbyB8fCAoaWUgJiYgIWllX2x0OCkpIGVvbFNwYW5Db250
ZW50ID0gIlx1MjAwYiI7CisgIGVsc2UgaWYgKG9wZXJhKSBlb2xTcGFuQ29udGVudCA9ICIiOwor
CisgIC8vIExpbmUgb2JqZWN0cy4gVGhlc2UgaG9sZCBzdGF0ZSByZWxhdGVkIHRvIGEgbGluZSwg
aW5jbHVkaW5nCisgIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KKyAg
ZnVuY3Rpb24gTGluZSh0ZXh0LCBzdHlsZXMpIHsKKyAgICB0aGlzLnN0eWxlcyA9IHN0eWxlcyB8
fCBbdGV4dCwgbnVsbF07CisgICAgdGhpcy50ZXh0ID0gdGV4dDsKKyAgICB0aGlzLmhlaWdodCA9
IDE7CisgIH0KKyAgTGluZS5pbmhlcml0TWFya3MgPSBmdW5jdGlvbih0ZXh0LCBvcmlnKSB7Cisg
ICAgdmFyIGxuID0gbmV3IExpbmUodGV4dCksIG1rID0gb3JpZyAmJiBvcmlnLm1hcmtlZDsKKyAg
ICBpZiAobWspIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgaWYgKG1rW2ldLnRvID09IG51bGwgJiYgbWtbaV0uc3R5bGUpIHsKKyAgICAgICAg
ICB2YXIgbmV3bWsgPSBsbi5tYXJrZWQgfHwgKGxuLm1hcmtlZCA9IFtdKSwgbWFyayA9IG1rW2ld
OworICAgICAgICAgIHZhciBubWFyayA9IG1hcmsuZHVwKCk7IG5ld21rLnB1c2gobm1hcmspOyBu
bWFyay5hdHRhY2gobG4pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBs
bjsKKyAgfTsKKyAgTGluZS5wcm90b3R5cGUgPSB7CisgICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9m
IGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFyb3VuZCBpdCBpbnRhY3QuCisgICAgcmVwbGFj
ZTogZnVuY3Rpb24oZnJvbSwgdG9fLCB0ZXh0KSB7CisgICAgICB2YXIgc3QgPSBbXSwgbWsgPSB0
aGlzLm1hcmtlZCwgdG8gPSB0b18gPT0gbnVsbCA/IHRoaXMudGV4dC5sZW5ndGggOiB0b187Cisg
ICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMuc3R5bGVzLCBzdCk7CisgICAgICBpZiAodGV4
dCkgc3QucHVzaCh0ZXh0LCBudWxsKTsKKyAgICAgIGNvcHlTdHlsZXModG8sIHRoaXMudGV4dC5s
ZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7CisgICAgICB0aGlzLnN0eWxlcyA9IHN0OworICAgICAg
dGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIGZyb20pICsgdGV4dCArIHRoaXMudGV4dC5z
bGljZSh0byk7CisgICAgICB0aGlzLnN0YXRlQWZ0ZXIgPSBudWxsOworICAgICAgaWYgKG1rKSB7
CisgICAgICAgIHZhciBkaWZmID0gdGV4dC5sZW5ndGggLSAodG8gLSBmcm9tKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgeworICAgICAgICAgIHZhciBtYXJr
ID0gbWtbaV07CisgICAgICAgICAgbWFyay5jbGlwVG8oZnJvbSA9PSBudWxsLCBmcm9tIHx8IDAs
IHRvXyA9PSBudWxsLCB0bywgZGlmZik7CisgICAgICAgICAgaWYgKG1hcmsuaXNEZWFkKCkpIHtt
YXJrLmRldGFjaCh0aGlzKTsgbWsuc3BsaWNlKGktLSwgMSk7fQorICAgICAgICB9CisgICAgICB9
CisgICAgfSwKKyAgICAvLyBTcGxpdCBhIHBhcnQgb2ZmIGEgbGluZSwga2VlcGluZyBzdHlsZXMg
YW5kIG1hcmtlcnMgaW50YWN0LgorICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIHRleHRCZWZvcmUp
IHsKKyAgICAgIHZhciBzdCA9IFt0ZXh0QmVmb3JlLCBudWxsXSwgbWsgPSB0aGlzLm1hcmtlZDsK
KyAgICAgIGNvcHlTdHlsZXMocG9zLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3Qp
OworICAgICAgdmFyIHRha2VuID0gbmV3IExpbmUodGV4dEJlZm9yZSArIHRoaXMudGV4dC5zbGlj
ZShwb3MpLCBzdCk7CisgICAgICBpZiAobWspIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBtay5sZW5ndGg7ICsraSkgeworICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07CisgICAgICAg
ICAgdmFyIG5ld21hcmsgPSBtYXJrLnNwbGl0KHBvcywgdGV4dEJlZm9yZS5sZW5ndGgpOworICAg
ICAgICAgIGlmIChuZXdtYXJrKSB7CisgICAgICAgICAgICBpZiAoIXRha2VuLm1hcmtlZCkgdGFr
ZW4ubWFya2VkID0gW107CisgICAgICAgICAgICB0YWtlbi5tYXJrZWQucHVzaChuZXdtYXJrKTsg
bmV3bWFyay5hdHRhY2godGFrZW4pOworICAgICAgICAgICAgaWYgKG5ld21hcmsgPT0gbWFyaykg
bWsuc3BsaWNlKGktLSwgMSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAg
ICByZXR1cm4gdGFrZW47CisgICAgfSwKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKGxpbmUpIHsKKyAg
ICAgIHZhciBteWxlbiA9IHRoaXMudGV4dC5sZW5ndGgsIG1rID0gbGluZS5tYXJrZWQsIG15bWsg
PSB0aGlzLm1hcmtlZDsKKyAgICAgIHRoaXMudGV4dCArPSBsaW5lLnRleHQ7CisgICAgICBjb3B5
U3R5bGVzKDAsIGxpbmUudGV4dC5sZW5ndGgsIGxpbmUuc3R5bGVzLCB0aGlzLnN0eWxlcyk7Cisg
ICAgICBpZiAobXltaykgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG15bWsubGVuZ3Ro
OyArK2kpCisgICAgICAgICAgaWYgKG15bWtbaV0udG8gPT0gbnVsbCkgbXlta1tpXS50byA9IG15
bGVuOworICAgICAgfQorICAgICAgaWYgKG1rICYmIG1rLmxlbmd0aCkgeworICAgICAgICBpZiAo
IW15bWspIHRoaXMubWFya2VkID0gbXltayA9IFtdOworICAgICAgICBvdXRlcjogZm9yICh2YXIg
aSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgeworICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07
CisgICAgICAgICAgaWYgKCFtYXJrLmZyb20pIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgbXltay5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICB2YXIgbXltYXJrID0gbXlt
a1tqXTsKKyAgICAgICAgICAgICAgaWYgKG15bWFyay50byA9PSBteWxlbiAmJiBteW1hcmsuc2Ft
ZVNldChtYXJrKSkgeworICAgICAgICAgICAgICAgIG15bWFyay50byA9IG1hcmsudG8gPT0gbnVs
bCA/IG51bGwgOiBtYXJrLnRvICsgbXlsZW47CisgICAgICAgICAgICAgICAgaWYgKG15bWFyay5p
c0RlYWQoKSkgeworICAgICAgICAgICAgICAgICAgbXltYXJrLmRldGFjaCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgIG1rLnNwbGljZShpLS0sIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgIH0KKyAgICAgICAgICBteW1rLnB1c2gobWFyayk7CisgICAgICAgICAgbWFy
ay5hdHRhY2godGhpcyk7CisgICAgICAgICAgbWFyay5mcm9tICs9IG15bGVuOworICAgICAgICAg
IGlmIChtYXJrLnRvICE9IG51bGwpIG1hcmsudG8gKz0gbXlsZW47CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9LAorICAgIGZpeE1hcmtFbmRzOiBmdW5jdGlvbihvdGhlcikgeworICAgICAgdmFy
IG1rID0gdGhpcy5tYXJrZWQsIG9tayA9IG90aGVyLm1hcmtlZDsKKyAgICAgIGlmICghbWspIHJl
dHVybjsKKyAgICAgIG91dGVyOiBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7
CisgICAgICAgIHZhciBtYXJrID0gbWtbaV0sIGNsb3NlID0gbWFyay50byA9PSBudWxsOworICAg
ICAgICBpZiAoY2xvc2UgJiYgb21rKSB7CisgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBv
bWsubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHZhciBvbSA9IG9ta1tqXTsKKyAgICAgICAg
ICAgIGlmICghb20uc2FtZVNldChtYXJrKSB8fCBvbS5mcm9tICE9IG51bGwpIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSA9PSB0aGlzLnRleHQubGVuZ3RoICYmIG9tLnRvID09
IDApIHsKKyAgICAgICAgICAgICAgb21rLnNwbGljZShqLCAxKTsKKyAgICAgICAgICAgICAgbWsu
c3BsaWNlKGktLSwgMSk7CisgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY2xvc2UgPSBmYWxzZTsgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZSkgbWFyay50
byA9IHRoaXMudGV4dC5sZW5ndGg7CisgICAgICB9CisgICAgfSwKKyAgICBmaXhNYXJrU3RhcnRz
OiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBtayA9IHRoaXMubWFya2VkOworICAgICAgaWYgKCFt
aykgcmV0dXJuOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkKKyAg
ICAgICAgaWYgKG1rW2ldLmZyb20gPT0gbnVsbCkgbWtbaV0uZnJvbSA9IDA7CisgICAgfSwKKyAg
ICBhZGRNYXJrOiBmdW5jdGlvbihtYXJrKSB7CisgICAgICBtYXJrLmF0dGFjaCh0aGlzKTsKKyAg
ICAgIGlmICh0aGlzLm1hcmtlZCA9PSBudWxsKSB0aGlzLm1hcmtlZCA9IFtdOworICAgICAgdGhp
cy5tYXJrZWQucHVzaChtYXJrKTsKKyAgICAgIHRoaXMubWFya2VkLnNvcnQoZnVuY3Rpb24oYSwg
Yil7cmV0dXJuIChhLmZyb20gfHwgMCkgLSAoYi5mcm9tIHx8IDApO30pOworICAgIH0sCisgICAg
Ly8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCB1cGRhdGUgdGhlIHN0
eWxlcworICAgIC8vIGFycmF5LCB3aGljaCBjb250YWlucyBhbHRlcm5hdGluZyBmcmFnbWVudHMg
b2YgdGV4dCBhbmQgQ1NTCisgICAgLy8gY2xhc3Nlcy4KKyAgICBoaWdobGlnaHQ6IGZ1bmN0aW9u
KG1vZGUsIHN0YXRlLCB0YWJTaXplKSB7CisgICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0
cmVhbSh0aGlzLnRleHQsIHRhYlNpemUpLCBzdCA9IHRoaXMuc3R5bGVzLCBwb3MgPSAwOworICAg
ICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKKyAgICAg
IGlmICh0aGlzLnRleHQgPT0gIiIgJiYgbW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0
YXRlKTsKKyAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CisgICAgICAgIHZhciBzdHlsZSA9
IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnRl
eHQuc2xpY2Uoc3RyZWFtLnN0YXJ0LCBzdHJlYW0ucG9zKTsKKyAgICAgICAgc3RyZWFtLnN0YXJ0
ID0gc3RyZWFtLnBvczsKKyAgICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCisg
ICAgICAgICAgc3RbcG9zLTJdICs9IHN1YnN0cjsKKyAgICAgICAgZWxzZSBpZiAoc3Vic3RyKSB7
CisgICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAm
JiBzdFtwb3MtMl0gIT0gcHJldldvcmQpKSkgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgc3Rb
cG9zKytdID0gc3Vic3RyOyBzdFtwb3MrK10gPSBzdHlsZTsKKyAgICAgICAgICBwcmV2V29yZCA9
IGN1cldvcmQ7IGN1cldvcmQgPSBzdFtwb3NdOworICAgICAgICB9CisgICAgICAgIC8vIEdpdmUg
dXAgd2hlbiBsaW5lIGlzIHJpZGljdWxvdXNseSBsb25nCisgICAgICAgIGlmIChzdHJlYW0ucG9z
ID4gNTAwMCkgeworICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0u
cG9zKTsgc3RbcG9zKytdID0gbnVsbDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgaWYgKHN0Lmxlbmd0aCAhPSBwb3MpIHtzdC5sZW5ndGggPSBwb3M7IGNoYW5n
ZWQgPSB0cnVlO30KKyAgICAgIGlmIChwb3MgJiYgc3RbcG9zLTJdICE9IHByZXZXb3JkKSBjaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgIC8vIFNob3J0IGxpbmVzIHdpdGggc2ltcGxlIGhpZ2hsaWdodHMg
cmV0dXJuIG51bGwsIGFuZCBhcmUKKyAgICAgIC8vIGNvdW50ZWQgYXMgY2hhbmdlZCBieSB0aGUg
ZHJpdmVyIGJlY2F1c2UgdGhleSBhcmUgbGlrZWx5IHRvCisgICAgICAvLyBoaWdobGlnaHQgdGhl
IHNhbWUgd2F5IGluIHZhcmlvdXMgY29udGV4dHMuCisgICAgICByZXR1cm4gY2hhbmdlZCB8fCAo
c3QubGVuZ3RoIDwgNSAmJiB0aGlzLnRleHQubGVuZ3RoIDwgMTAgPyBudWxsIDogZmFsc2UpOwor
ICAgIH0sCisgICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0
ZXIuIFVzZWZ1bCBmb3IgaGFja3MKKyAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9k
ZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCisgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24o
bW9kZSwgc3RhdGUsIHRhYlNpemUsIGNoKSB7CisgICAgICB2YXIgdHh0ID0gdGhpcy50ZXh0LCBz
dHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHR4dCwgdGFiU2l6ZSk7CisgICAgICB3aGlsZSAoc3Ry
ZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKKyAgICAgICAgc3RyZWFtLnN0YXJ0ID0g
c3RyZWFtLnBvczsKKyAgICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRl
KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwKKyAgICAgICAg
ICAgICAgZW5kOiBzdHJlYW0ucG9zLAorICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJy
ZW50KCksCisgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUgfHwgbnVsbCwKKyAgICAgICAg
ICAgICAgc3RhdGU6IHN0YXRlfTsKKyAgICB9LAorICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbih0
YWJTaXplKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMudGV4dCwgbnVsbCwgdGFiU2l6ZSk7fSwK
KyAgICAvLyBQcm9kdWNlcyBhbiBIVE1MIGZyYWdtZW50IGZvciB0aGUgbGluZSwgdGFraW5nIHNl
bGVjdGlvbiwKKyAgICAvLyBtYXJraW5nLCBhbmQgaGlnaGxpZ2h0aW5nIGludG8gYWNjb3VudC4K
KyAgICBnZXRFbGVtZW50OiBmdW5jdGlvbihtYWtlVGFiLCB3cmFwQXQsIHdyYXBXQlIpIHsKKyAg
ICAgIHZhciBmaXJzdCA9IHRydWUsIGNvbCA9IDAsIHNwZWNpYWxzID0gL1tcdFx1MDAwMC1cdTAw
MTlcdTIwMGJcdTIwMjhcdTIwMjlcdUZFRkZdL2c7CisgICAgICB2YXIgcHJlID0gZWx0KCJwcmUi
KTsKKyAgICAgIGZ1bmN0aW9uIHNwYW5fKGh0bWwsIHRleHQsIHN0eWxlKSB7CisgICAgICAgIGlm
ICghdGV4dCkgcmV0dXJuOworICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSwgaW4g
c29tZSBjb21wYXQgbW9kZXMsIElFIGlnbm9yZXMgbGVhZGluZyBzcGFjZXMKKyAgICAgICAgaWYg
KGZpcnN0ICYmIGllICYmIHRleHQuY2hhckF0KDApID09ICIgIikgdGV4dCA9ICJcdTAwYTAiICsg
dGV4dC5zbGljZSgxKTsKKyAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFzcGVj
aWFscy50ZXN0KHRleHQpKSB7CisgICAgICAgICAgY29sICs9IHRleHQubGVuZ3RoOworICAgICAg
ICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCksIHBvcyA9IDA7CisgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgIHNwZWNpYWxzLmxhc3RJbmRleCA9IHBvczsKKyAgICAgICAgICAgIHZhciBtID0gc3BlY2lh
bHMuZXhlYyh0ZXh0KTsKKyAgICAgICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXggLSBw
b3MgOiB0ZXh0Lmxlbmd0aCAtIHBvczsKKyAgICAgICAgICAgIGlmIChza2lwcGVkKSB7CisgICAg
ICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4
dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKSk7CisgICAgICAgICAgICAgIGNvbCArPSBza2lw
cGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtKSBicmVhazsKKyAgICAgICAg
ICAgIHBvcyArPSBza2lwcGVkICsgMTsKKyAgICAgICAgICAgIGlmIChtWzBdID09ICJcdCIpIHsK
KyAgICAgICAgICAgICAgdmFyIHRhYiA9IG1ha2VUYWIoY29sKTsKKyAgICAgICAgICAgICAgY29u
dGVudC5hcHBlbmRDaGlsZCh0YWIuZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAg
ICAgICBjb2wgKz0gdGFiLndpZHRoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgIlx1MjAyMiIsICJjbS1pbnZhbGlkY2hhciIpOwor
ICAgICAgICAgICAgICB0b2tlbi50aXRsZSA9ICJcXHUiICsgbVswXS5jaGFyQ29kZUF0KDApLnRv
U3RyaW5nKDE2KTsKKyAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZCh0b2tlbik7Cisg
ICAgICAgICAgICAgIGNvbCArPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3R5bGUpIGh0bWwuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW2Nv
bnRlbnRdLCBzdHlsZSkpOworICAgICAgICBlbHNlIGh0bWwuYXBwZW5kQ2hpbGQoY29udGVudCk7
CisgICAgICB9CisgICAgICB2YXIgc3BhbiA9IHNwYW5fOworICAgICAgaWYgKHdyYXBBdCAhPSBu
dWxsKSB7CisgICAgICAgIHZhciBvdXRQb3MgPSAwLCBhbmNob3IgPSBwcmUuYW5jaG9yID0gZWx0
KCJzcGFuIik7CisgICAgICAgIHNwYW4gPSBmdW5jdGlvbihodG1sLCB0ZXh0LCBzdHlsZSkgewor
ICAgICAgICAgIHZhciBsID0gdGV4dC5sZW5ndGg7CisgICAgICAgICAgaWYgKHdyYXBBdCA+PSBv
dXRQb3MgJiYgd3JhcEF0IDwgb3V0UG9zICsgbCkgeworICAgICAgICAgICAgaWYgKHdyYXBBdCA+
IG91dFBvcykgeworICAgICAgICAgICAgICBzcGFuXyhodG1sLCB0ZXh0LnNsaWNlKDAsIHdyYXBB
dCAtIG91dFBvcyksIHN0eWxlKTsKKyAgICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhl
IGRlZmluaXRpb24gb2Ygc3BhbkFmZmVjdHNXcmFwcGluZworICAgICAgICAgICAgICBpZiAod3Jh
cFdCUikgaHRtbC5hcHBlbmRDaGlsZChlbHQoIndiciIpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAgICAgICAgICAgIHZhciBjdXQgPSB3
cmFwQXQgLSBvdXRQb3M7CisgICAgICAgICAgICBzcGFuXyhhbmNob3IsIG9wZXJhID8gdGV4dC5z
bGljZShjdXQsIGN1dCArIDEpIDogdGV4dC5zbGljZShjdXQpLCBzdHlsZSk7CisgICAgICAgICAg
ICBpZiAob3BlcmEpIHNwYW5fKGh0bWwsIHRleHQuc2xpY2UoY3V0ICsgMSksIHN0eWxlKTsKKyAg
ICAgICAgICAgIHdyYXBBdC0tOworICAgICAgICAgICAgb3V0UG9zICs9IGw7CisgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG91dFBvcyArPSBsOworICAgICAgICAgICAgc3Bhbl8oaHRt
bCwgdGV4dCwgc3R5bGUpOworICAgICAgICAgICAgaWYgKG91dFBvcyA9PSB3cmFwQXQgJiYgb3V0
UG9zID09IGxlbikgeworICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChhbmNob3IsIGVvbFNw
YW5Db250ZW50KTsKKyAgICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChhbmNob3IpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3RvcCBvdXRwdXR0aW5nIEhUTUwgd2hlbiBnb25l
IHN1ZmZpY2llbnRseSBmYXIgYmV5b25kIG1lYXN1cmUKKyAgICAgICAgICAgIGVsc2UgaWYgKG91
dFBvcyA+IHdyYXBBdCArIDEwICYmIC9ccy8udGVzdCh0ZXh0KSkgc3BhbiA9IGZ1bmN0aW9uKCl7
fTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICB9CisKKyAgICAgIHZhciBzdCA9IHRo
aXMuc3R5bGVzLCBhbGxUZXh0ID0gdGhpcy50ZXh0LCBtYXJrZWQgPSB0aGlzLm1hcmtlZDsKKyAg
ICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aDsKKyAgICAgIGZ1bmN0aW9uIHN0eWxlVG9DbGFz
cyhzdHlsZSkgeworICAgICAgICBpZiAoIXN0eWxlKSByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0
dXJuICJjbS0iICsgc3R5bGUucmVwbGFjZSgvICsvZywgIiBjbS0iKTsKKyAgICAgIH0KKyAgICAg
IGlmICghYWxsVGV4dCAmJiB3cmFwQXQgPT0gbnVsbCkgeworICAgICAgICBzcGFuKHByZSwgIiAi
KTsKKyAgICAgIH0gZWxzZSBpZiAoIW1hcmtlZCB8fCAhbWFya2VkLmxlbmd0aCkgeworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgY2ggPSAwOyBjaCA8IGxlbjsgaSs9MikgeworICAgICAgICAgIHZh
ciBzdHIgPSBzdFtpXSwgc3R5bGUgPSBzdFtpKzFdLCBsID0gc3RyLmxlbmd0aDsKKyAgICAgICAg
ICBpZiAoY2ggKyBsID4gbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgbGVuIC0gY2gpOworICAgICAg
ICAgIGNoICs9IGw7CisgICAgICAgICAgc3BhbihwcmUsIHN0ciwgc3R5bGVUb0NsYXNzKHN0eWxl
KSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBwb3MgPSAwLCBpID0g
MCwgdGV4dCA9ICIiLCBzdHlsZSwgc2cgPSAwOworICAgICAgICB2YXIgbmV4dENoYW5nZSA9IG1h
cmtlZFswXS5mcm9tIHx8IDAsIG1hcmtzID0gW10sIG1hcmtwb3MgPSAwOworICAgICAgICB2YXIg
YWR2YW5jZU1hcmtzID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIG07CisgICAgICAgICAg
d2hpbGUgKG1hcmtwb3MgPCBtYXJrZWQubGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICgobSA9
IG1hcmtlZFttYXJrcG9zXSkuZnJvbSA9PSBwb3MgfHwgbS5mcm9tID09IG51bGwpKSB7CisgICAg
ICAgICAgICBpZiAobS5zdHlsZSAhPSBudWxsKSBtYXJrcy5wdXNoKG0pOworICAgICAgICAgICAg
KyttYXJrcG9zOworICAgICAgICAgIH0KKyAgICAgICAgICBuZXh0Q2hhbmdlID0gbWFya3BvcyA8
IG1hcmtlZC5sZW5ndGggPyBtYXJrZWRbbWFya3Bvc10uZnJvbSA6IEluZmluaXR5OworICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IHZhciB0byA9IG1hcmtzW2ldLnRvOworICAgICAgICAgICAgaWYgKHRvID09IG51bGwpIHRvID0g
SW5maW5pdHk7CisgICAgICAgICAgICBpZiAodG8gPT0gcG9zKSBtYXJrcy5zcGxpY2UoaS0tLCAx
KTsKKyAgICAgICAgICAgIGVsc2UgbmV4dENoYW5nZSA9IE1hdGgubWluKHRvLCBuZXh0Q2hhbmdl
KTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHZhciBtID0gMDsKKyAgICAgICAg
d2hpbGUgKHBvcyA8IGxlbikgeworICAgICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgYWR2
YW5jZU1hcmtzKCk7CisgICAgICAgICAgdmFyIHVwdG8gPSBNYXRoLm1pbihsZW4sIG5leHRDaGFu
Z2UpOworICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAodGV4dCkgewor
ICAgICAgICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7CisgICAgICAgICAgICAg
IHZhciBhcHBsaWVkU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBtYXJrcy5sZW5ndGg7ICsraikKKyAgICAgICAgICAgICAgICBhcHBsaWVkU3R5bGUgPSAo
YXBwbGllZFN0eWxlID8gYXBwbGllZFN0eWxlICsgIiAiIDogIiIpICsgbWFya3Nbal0uc3R5bGU7
CisgICAgICAgICAgICAgIHNwYW4ocHJlLCBlbmQgPiB1cHRvID8gdGV4dC5zbGljZSgwLCB1cHRv
IC0gcG9zKSA6IHRleHQsIGFwcGxpZWRTdHlsZSk7CisgICAgICAgICAgICAgIGlmIChlbmQgPj0g
dXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVhazt9
CisgICAgICAgICAgICAgIHBvcyA9IGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRl
eHQgPSBzdFtpKytdOyBzdHlsZSA9IHN0eWxlVG9DbGFzcyhzdFtpKytdKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBwcmU7CisgICAgfSwKKyAgICBjbGVh
blVwOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKKyAgICAgIGlmICh0
aGlzLm1hcmtlZCkKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLm1hcmtlZC5sZW5n
dGg7IGkgPCBlOyArK2kpIHRoaXMubWFya2VkW2ldLmRldGFjaCh0aGlzKTsKKyAgICB9CisgIH07
CisgIC8vIFV0aWxpdHkgdXNlZCBieSByZXBsYWNlIGFuZCBzcGxpdCBhYm92ZQorICBmdW5jdGlv
biBjb3B5U3R5bGVzKGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKKyAgICBmb3IgKHZhciBpID0g
MCwgcG9zID0gMCwgc3RhdGUgPSAwOyBwb3MgPCB0bzsgaSs9MikgeworICAgICAgdmFyIHBhcnQg
PSBzb3VyY2VbaV0sIGVuZCA9IHBvcyArIHBhcnQubGVuZ3RoOworICAgICAgaWYgKHN0YXRlID09
IDApIHsKKyAgICAgICAgaWYgKGVuZCA+IGZyb20pIGRlc3QucHVzaChwYXJ0LnNsaWNlKGZyb20g
LSBwb3MsIE1hdGgubWluKHBhcnQubGVuZ3RoLCB0byAtIHBvcykpLCBzb3VyY2VbaSsxXSk7Cisg
ICAgICAgIGlmIChlbmQgPj0gZnJvbSkgc3RhdGUgPSAxOworICAgICAgfSBlbHNlIGlmIChzdGF0
ZSA9PSAxKSB7CisgICAgICAgIGlmIChlbmQgPiB0bykgZGVzdC5wdXNoKHBhcnQuc2xpY2UoMCwg
dG8gLSBwb3MpLCBzb3VyY2VbaSsxXSk7CisgICAgICAgIGVsc2UgZGVzdC5wdXNoKHBhcnQsIHNv
dXJjZVtpKzFdKTsKKyAgICAgIH0KKyAgICAgIHBvcyA9IGVuZDsKKyAgICB9CisgIH0KKworICAv
LyBEYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBzZXF1ZW5jZSBvZiBsaW5lcy4KKyAgZnVu
Y3Rpb24gTGVhZkNodW5rKGxpbmVzKSB7CisgICAgdGhpcy5saW5lcyA9IGxpbmVzOworICAgIHRo
aXMucGFyZW50ID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aCwg
aGVpZ2h0ID0gMDsgaSA8IGU7ICsraSkgeworICAgICAgbGluZXNbaV0ucGFyZW50ID0gdGhpczsK
KyAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CisgICAgfQorICAgIHRoaXMuaGVpZ2h0
ID0gaGVpZ2h0OworICB9CisgIExlYWZDaHVuay5wcm90b3R5cGUgPSB7CisgICAgY2h1bmtTaXpl
OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoOyB9LAorICAgIHJlbW92ZTog
ZnVuY3Rpb24oYXQsIG4sIGNhbGxiYWNrcykgeworICAgICAgZm9yICh2YXIgaSA9IGF0LCBlID0g
YXQgKyBuOyBpIDwgZTsgKytpKSB7CisgICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsK
KyAgICAgICAgdGhpcy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7CisgICAgICAgIGxpbmUuY2xlYW5V
cCgpOworICAgICAgICBpZiAobGluZS5oYW5kbGVycykKKyAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGxpbmUuaGFuZGxlcnMubGVuZ3RoOyArK2opIGNhbGxiYWNrcy5wdXNoKGxpbmUuaGFu
ZGxlcnNbal0pOworICAgICAgfQorICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pOworICAg
IH0sCisgICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CisgICAgICBsaW5lcy5zcGxpY2Uu
YXBwbHkobGluZXMsIFtsaW5lcy5sZW5ndGgsIDBdLmNvbmNhdCh0aGlzLmxpbmVzKSk7CisgICAg
fSwKKyAgICBpbnNlcnRIZWlnaHQ6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7CisgICAg
ICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CisgICAgICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5z
bGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhdCkpOwor
ICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIGxpbmVz
W2ldLnBhcmVudCA9IHRoaXM7CisgICAgfSwKKyAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9w
KSB7CisgICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpCisgICAgICAgIGlm
IChvcCh0aGlzLmxpbmVzW2F0XSkpIHJldHVybiB0cnVlOworICAgIH0KKyAgfTsKKyAgZnVuY3Rp
b24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHsKKyAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47
CisgICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwLCBlID0g
Y2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CisgICAgICB2YXIgY2ggPSBjaGlsZHJlbltp
XTsKKyAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7Cisg
ICAgICBjaC5wYXJlbnQgPSB0aGlzOworICAgIH0KKyAgICB0aGlzLnNpemUgPSBzaXplOworICAg
IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHRoaXMucGFyZW50ID0gbnVsbDsKKyAgfQorICBC
cmFuY2hDaHVuay5wcm90b3R5cGUgPSB7CisgICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMuc2l6ZTsgfSwKKyAgICByZW1vdmU6IGZ1bmN0aW9uKGF0LCBuLCBjYWxsYmFja3Mp
IHsKKyAgICAgIHRoaXMuc2l6ZSAtPSBuOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRy
ZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7CisgICAgICAgIGlmIChhdCA8IHN6KSB7Cisg
ICAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxk
LmhlaWdodDsKKyAgICAgICAgICBjaGlsZC5yZW1vdmUoYXQsIHJtLCBjYWxsYmFja3MpOworICAg
ICAgICAgIHRoaXMuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDsKKyAgICAgICAg
ICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFy
ZW50ID0gbnVsbDsgfQorICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgYnJlYWs7CisgICAg
ICAgICAgYXQgPSAwOworICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CisgICAgICB9CisgICAgICBp
ZiAodGhpcy5zaXplIC0gbiA8IDI1KSB7CisgICAgICAgIHZhciBsaW5lcyA9IFtdOworICAgICAg
ICB0aGlzLmNvbGxhcHNlKGxpbmVzKTsKKyAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVh
ZkNodW5rKGxpbmVzKV07CisgICAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpczsK
KyAgICAgIH0KKyAgICB9LAorICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgeworICAgICAg
Zm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhp
cy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7CisgICAgfSwKKyAgICBpbnNlcnQ6IGZ1bmN0
aW9uKGF0LCBsaW5lcykgeworICAgICAgdmFyIGhlaWdodCA9IDA7CisgICAgICBmb3IgKHZhciBp
ID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhl
aWdodDsKKyAgICAgIHRoaXMuaW5zZXJ0SGVpZ2h0KGF0LCBsaW5lcywgaGVpZ2h0KTsKKyAgICB9
LAorICAgIGluc2VydEhlaWdodDogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKKyAgICAg
IHRoaXMuc2l6ZSArPSBsaW5lcy5sZW5ndGg7CisgICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7
CisgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsg
KytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQu
Y2h1bmtTaXplKCk7CisgICAgICAgIGlmIChhdCA8PSBzeikgeworICAgICAgICAgIGNoaWxkLmlu
c2VydEhlaWdodChhdCwgbGluZXMsIGhlaWdodCk7CisgICAgICAgICAgaWYgKGNoaWxkLmxpbmVz
ICYmIGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7CisgICAgICAgICAgICB3aGlsZSAoY2hpbGQu
bGluZXMubGVuZ3RoID4gNTApIHsKKyAgICAgICAgICAgICAgdmFyIHNwaWxsZWQgPSBjaGlsZC5s
aW5lcy5zcGxpY2UoY2hpbGQubGluZXMubGVuZ3RoIC0gMjUsIDI1KTsKKyAgICAgICAgICAgICAg
dmFyIG5ld2xlYWYgPSBuZXcgTGVhZkNodW5rKHNwaWxsZWQpOworICAgICAgICAgICAgICBjaGls
ZC5oZWlnaHQgLT0gbmV3bGVhZi5oZWlnaHQ7CisgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4u
c3BsaWNlKGkgKyAxLCAwLCBuZXdsZWFmKTsKKyAgICAgICAgICAgICAgbmV3bGVhZi5wYXJlbnQg
PSB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7Cisg
ICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGF0IC09IHN6
OworICAgICAgfQorICAgIH0sCisgICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHJldHVybjsKKyAgICAgIHZhciBtZSA9IHRo
aXM7CisgICAgICBkbyB7CisgICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNl
KG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpOworICAgICAgICB2YXIgc2libGluZyA9IG5ldyBC
cmFuY2hDaHVuayhzcGlsbGVkKTsKKyAgICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21l
IHRoZSBwYXJlbnQgbm9kZQorICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1l
LmNoaWxkcmVuKTsKKyAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lOworICAgICAgICAgIG1lLmNo
aWxkcmVuID0gW2NvcHksIHNpYmxpbmddOworICAgICAgICAgIG1lID0gY29weTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICBtZS5zaXplIC09IHNpYmxpbmcuc2l6ZTsKKyAgICAgICAgICBt
ZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7CisgICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRl
eE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpOworICAgICAgICAgIG1lLnBhcmVudC5jaGlsZHJl
bi5zcGxpY2UobXlJbmRleCArIDEsIDAsIHNpYmxpbmcpOworICAgICAgICB9CisgICAgICAgIHNp
YmxpbmcucGFyZW50ID0gbWUucGFyZW50OworICAgICAgfSB3aGlsZSAobWUuY2hpbGRyZW4ubGVu
Z3RoID4gMTApOworICAgICAgbWUucGFyZW50Lm1heWJlU3BpbGwoKTsKKyAgICB9LAorICAgIGl0
ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkgeyB0aGlzLml0ZXJOKGZyb20sIHRvIC0gZnJvbSwg
b3ApOyB9LAorICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKKyAgICAgIGZvciAodmFy
IGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKKyAgICAgICAg
dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKKyAg
ICAgICAgaWYgKGF0IDwgc3opIHsKKyAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6
IC0gYXQpOworICAgICAgICAgIGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAg
YXQgPSAwOworICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CisgICAgICB9CisgICAgfQorICB9Owor
CisgIGZ1bmN0aW9uIGdldExpbmVBdChjaHVuaywgbikgeworICAgIHdoaWxlICghY2h1bmsubGlu
ZXMpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9
IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOworICAgICAgICBpZiAo
biA8IHN6KSB7IGNodW5rID0gY2hpbGQ7IGJyZWFrOyB9CisgICAgICAgIG4gLT0gc3o7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBjaHVuay5saW5lc1tuXTsKKyAgfQorICBmdW5jdGlvbiBs
aW5lTm8obGluZSkgeworICAgIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsK
KyAgICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUp
OworICAgIGZvciAodmFyIGNodW5rID0gY3VyLnBhcmVudDsgY2h1bms7IGN1ciA9IGNodW5rLCBj
aHVuayA9IGNodW5rLnBhcmVudCkgeworICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5j
aGlsZHJlbi5sZW5ndGg7IDsgKytpKSB7CisgICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9
PSBjdXIpIGJyZWFrOworICAgICAgICBubyArPSBjaHVuay5jaGlsZHJlbltpXS5jaHVua1NpemUo
KTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5vOworICB9CisgIGZ1bmN0aW9uIGxpbmVB
dEhlaWdodChjaHVuaywgaCkgeworICAgIHZhciBuID0gMDsKKyAgICBvdXRlcjogZG8geworICAg
ICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kp
IHsKKyAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIGNoID0gY2hpbGQuaGVp
Z2h0OworICAgICAgICBpZiAoaCA8IGNoKSB7IGNodW5rID0gY2hpbGQ7IGNvbnRpbnVlIG91dGVy
OyB9CisgICAgICAgIGggLT0gY2g7CisgICAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7Cisg
ICAgICB9CisgICAgICByZXR1cm4gbjsKKyAgICB9IHdoaWxlICghY2h1bmsubGluZXMpOworICAg
IGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsubGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7Cisg
ICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxpbmUuaGVpZ2h0OworICAgICAg
aWYgKGggPCBsaCkgYnJlYWs7CisgICAgICBoIC09IGxoOworICAgIH0KKyAgICByZXR1cm4gbiAr
IGk7CisgIH0KKyAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNodW5rLCBuKSB7CisgICAgdmFyIGgg
PSAwOworICAgIG91dGVyOiBkbyB7CisgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNo
aWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgeworICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5j
aGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKKyAgICAgICAgaWYgKG4gPCBzeikg
eyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQorICAgICAgICBuIC09IHN6OworICAg
ICAgICBoICs9IGNoaWxkLmhlaWdodDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBoOworICAgIH0g
d2hpbGUgKCFjaHVuay5saW5lcyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIGgg
Kz0gY2h1bmsubGluZXNbaV0uaGVpZ2h0OworICAgIHJldHVybiBoOworICB9CisKKyAgLy8gVGhl
IGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUgbWFkZSBjbG9zZSB0b2dl
dGhlcgorICAvLyBhbmQgYXQgYWxtb3N0IHRoZSBzYW1lIHRpbWUgaW50byBiaWdnZXIgdW5kb2Fi
bGUgdW5pdHMuCisgIGZ1bmN0aW9uIEhpc3RvcnkoKSB7CisgICAgdGhpcy50aW1lID0gMDsKKyAg
ICB0aGlzLmRvbmUgPSBbXTsgdGhpcy51bmRvbmUgPSBbXTsKKyAgICB0aGlzLmNvbXBvdW5kID0g
MDsKKyAgICB0aGlzLmNsb3NlZCA9IGZhbHNlOworICB9CisgIEhpc3RvcnkucHJvdG90eXBlID0g
eworICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBvbGQpIHsKKyAgICAgIHRo
aXMudW5kb25lLmxlbmd0aCA9IDA7CisgICAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyID0g
dGhpcy5kb25lW3RoaXMuZG9uZS5sZW5ndGggLSAxXSwgbGFzdCA9IGN1ciAmJiBjdXJbY3VyLmxl
bmd0aCAtIDFdOworICAgICAgdmFyIGR0aW1lID0gdGltZSAtIHRoaXMudGltZTsKKworICAgICAg
aWYgKHRoaXMuY29tcG91bmQgJiYgY3VyICYmICF0aGlzLmNsb3NlZCkgeworICAgICAgICBjdXIu
cHVzaCh7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfSk7CisgICAgICB9IGVs
c2UgaWYgKGR0aW1lID4gNDAwIHx8ICFsYXN0IHx8IHRoaXMuY2xvc2VkIHx8CisgICAgICAgICAg
ICAgICAgIGxhc3Quc3RhcnQgPiBzdGFydCArIG9sZC5sZW5ndGggfHwgbGFzdC5zdGFydCArIGxh
c3QuYWRkZWQgPCBzdGFydCkgeworICAgICAgICB0aGlzLmRvbmUucHVzaChbe3N0YXJ0OiBzdGFy
dCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH1dKTsKKyAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxz
ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBzdGFydEJlZm9yZSA9IE1hdGgubWF4KDAs
IGxhc3Quc3RhcnQgLSBzdGFydCksCisgICAgICAgICAgICBlbmRBZnRlciA9IE1hdGgubWF4KDAs
IChzdGFydCArIG9sZC5sZW5ndGgpIC0gKGxhc3Quc3RhcnQgKyBsYXN0LmFkZGVkKSk7CisgICAg
ICAgIGZvciAodmFyIGkgPSBzdGFydEJlZm9yZTsgaSA+IDA7IC0taSkgbGFzdC5vbGQudW5zaGlm
dChvbGRbaSAtIDFdKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGVuZEFmdGVyOyBpID4gMDsgLS1p
KSBsYXN0Lm9sZC5wdXNoKG9sZFtvbGQubGVuZ3RoIC0gaV0pOworICAgICAgICBpZiAoc3RhcnRC
ZWZvcmUpIGxhc3Quc3RhcnQgPSBzdGFydDsKKyAgICAgICAgbGFzdC5hZGRlZCArPSBhZGRlZCAt
IChvbGQubGVuZ3RoIC0gc3RhcnRCZWZvcmUgLSBlbmRBZnRlcik7CisgICAgICB9CisgICAgICB0
aGlzLnRpbWUgPSB0aW1lOworICAgIH0sCisgICAgc3RhcnRDb21wb3VuZDogZnVuY3Rpb24oKSB7
CisgICAgICBpZiAoIXRoaXMuY29tcG91bmQrKykgdGhpcy5jbG9zZWQgPSB0cnVlOworICAgIH0s
CisgICAgZW5kQ29tcG91bmQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCEtLXRoaXMuY29tcG91
bmQpIHRoaXMuY2xvc2VkID0gdHJ1ZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gc3RvcE1l
dGhvZCgpIHtlX3N0b3AodGhpcyk7fQorICAvLyBFbnN1cmUgYW4gZXZlbnQgaGFzIGEgc3RvcCBt
ZXRob2QuCisgIGZ1bmN0aW9uIGFkZFN0b3AoZXZlbnQpIHsKKyAgICBpZiAoIWV2ZW50LnN0b3Ap
IGV2ZW50LnN0b3AgPSBzdG9wTWV0aG9kOworICAgIHJldHVybiBldmVudDsKKyAgfQorCisgIGZ1
bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkgeworICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBl
LnByZXZlbnREZWZhdWx0KCk7CisgICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7CisgIH0K
KyAgZnVuY3Rpb24gZV9zdG9wUHJvcGFnYXRpb24oZSkgeworICAgIGlmIChlLnN0b3BQcm9wYWdh
dGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1
ZTsKKyAgfQorICBmdW5jdGlvbiBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3Rv
cFByb3BhZ2F0aW9uKGUpO30KKyAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7CisgIENvZGVN
aXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7CisgIENvZGVNaXJyb3Iu
ZV9zdG9wUHJvcGFnYXRpb24gPSBlX3N0b3BQcm9wYWdhdGlvbjsKKworICBmdW5jdGlvbiBlX3Rh
cmdldChlKSB7cmV0dXJuIGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDt9CisgIGZ1bmN0aW9uIGVf
YnV0dG9uKGUpIHsKKyAgICB2YXIgYiA9IGUud2hpY2g7CisgICAgaWYgKGIgPT0gbnVsbCkgewor
ICAgICAgaWYgKGUuYnV0dG9uICYgMSkgYiA9IDE7CisgICAgICBlbHNlIGlmIChlLmJ1dHRvbiAm
IDIpIGIgPSAzOworICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSBiID0gMjsKKyAgICB9Cisg
ICAgaWYgKG1hYyAmJiBlLmN0cmxLZXkgJiYgYiA9PSAxKSBiID0gMzsKKyAgICByZXR1cm4gYjsK
KyAgfQorCisgIC8vIEFsbG93IDNyZC1wYXJ0eSBjb2RlIHRvIG92ZXJyaWRlIGV2ZW50IHByb3Bl
cnRpZXMgYnkgYWRkaW5nIGFuIG92ZXJyaWRlCisgIC8vIG9iamVjdCB0byBhbiBldmVudCBvYmpl
Y3QuCisgIGZ1bmN0aW9uIGVfcHJvcChlLCBwcm9wKSB7CisgICAgdmFyIG92ZXJyaWRkZW4gPSBl
Lm92ZXJyaWRlICYmIGUub3ZlcnJpZGUuaGFzT3duUHJvcGVydHkocHJvcCk7CisgICAgcmV0dXJu
IG92ZXJyaWRkZW4gPyBlLm92ZXJyaWRlW3Byb3BdIDogZVtwcm9wXTsKKyAgfQorCisgIC8vIEV2
ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uLiBJZiBkaXNjb25uZWN0IGlzIHRydWUsIGl0J2xsIHJl
dHVybiBhCisgIC8vIGZ1bmN0aW9uIHRoYXQgdW5yZWdpc3RlcnMgdGhlIGhhbmRsZXIuCisgIGZ1
bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlciwgZGlzY29ubmVjdCkgeworICAgIGlm
ICh0eXBlb2Ygbm9kZS5hZGRFdmVudExpc3RlbmVyID09ICJmdW5jdGlvbiIpIHsKKyAgICAgIG5v
ZGUuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7CisgICAgICBpZiAoZGlz
Y29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBl
LCBoYW5kbGVyLCBmYWxzZSk7fTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHdyYXBIYW5kbGVy
ID0gZnVuY3Rpb24oZXZlbnQpIHtoYW5kbGVyKGV2ZW50IHx8IHdpbmRvdy5ldmVudCk7fTsKKyAg
ICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKKyAgICAgIGlm
IChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5kZXRhY2hFdmVudCgib24iICsg
dHlwZSwgd3JhcEhhbmRsZXIpO307CisgICAgfQorICB9CisgIENvZGVNaXJyb3IuY29ubmVjdCA9
IGNvbm5lY3Q7CisKKyAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CisgIERl
bGF5ZWQucHJvdG90eXBlID0ge3NldDogZnVuY3Rpb24obXMsIGYpIHtjbGVhclRpbWVvdXQodGhp
cy5pZCk7IHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTt9fTsKKworICB2YXIgUGFzcyA9IENv
ZGVNaXJyb3IuUGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3Iu
UGFzcyI7fX07CisKKyAgLy8gRGV0ZWN0IGRyYWctYW5kLWRyb3AKKyAgdmFyIGRyYWdBbmREcm9w
ID0gZnVuY3Rpb24oKSB7CisgICAgLy8gVGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQt
ZHJvcCBzdXBwb3J0IGluIElFNi04LCBidXQgSQorICAgIC8vIGNvdWxkbid0IGdldCBpdCB0byB3
b3JrIHlldC4KKyAgICBpZiAoaWVfbHQ5KSByZXR1cm4gZmFsc2U7CisgICAgdmFyIGRpdiA9IGVs
dCgnZGl2Jyk7CisgICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGlu
IGRpdjsKKyAgfSgpOworCisgIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3bGluZXMgaW4g
dGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgorICB2YXIgbGluZVNlcCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgdGUgPSBlbHQoInRleHRhcmVhIik7CisgICAgdGUudmFsdWUgPSAiZm9v
XG5iYXIiOworICAgIGlmICh0ZS52YWx1ZS5pbmRleE9mKCJcciIpID4gLTEpIHJldHVybiAiXHJc
biI7CisgICAgcmV0dXJuICJcbiI7CisgIH0oKTsKKworICAvLyBGb3IgYSByZWFzb24gSSBoYXZl
IHlldCB0byBmaWd1cmUgb3V0LCBzb21lIGJyb3dzZXJzIGRpc2FsbG93CisgIC8vIHdvcmQgd3Jh
cHBpbmcgYmV0d2VlbiBjZXJ0YWluIGNoYXJhY3RlcnMgKm9ubHkqIGlmIGEgbmV3IGlubGluZQor
ICAvLyBlbGVtZW50IGlzIHN0YXJ0ZWQgYmV0d2VlbiB0aGVtLiBUaGlzIG1ha2VzIGl0IGhhcmQg
dG8gcmVsaWFibHkKKyAgLy8gbWVhc3VyZSB0aGUgcG9zaXRpb24gb2YgdGhpbmdzLCBzaW5jZSB0
aGF0IHJlcXVpcmVzIGluc2VydGluZyBhbgorICAvLyBleHRyYSBzcGFuLiBUaGlzIHRlcnJpYmx5
IGZyYWdpbGUgc2V0IG9mIHJlZ2V4cHMgbWF0Y2hlcyB0aGUKKyAgLy8gY2hhcmFjdGVyIGNvbWJp
bmF0aW9ucyB0aGF0IHN1ZmZlciBmcm9tIHRoaXMgcGhlbm9tZW5vbiBvbiB0aGUKKyAgLy8gdmFy
aW91cyBicm93c2Vycy4KKyAgdmFyIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXiQvOyAvLyBXb24n
dCBtYXRjaCBhbnkgdHdvLWNoYXJhY3RlciBzdHJpbmcKKyAgaWYgKGdlY2tvKSBzcGFuQWZmZWN0
c1dyYXBwaW5nID0gLyQnLzsKKyAgZWxzZSBpZiAoc2FmYXJpKSBzcGFuQWZmZWN0c1dyYXBwaW5n
ID0gL1wtW14gXC0/XXxcP1teICEnXCJcKSwuXC1cLzo7XD9cXVx9XS87CisgIGVsc2UgaWYgKGNo
cm9tZSkgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC9cLVteIFwtXC4/XXxcP1teIFwtXC4/XF1cfTo7
ISdcIlwpLFwvXXxbXC4hXCIjJiVcKSorLDo7PT5cXXxcfX5dW1woXHtcWzxdfFwkJy87CisKKyAg
Ly8gQ291bnRzIHRoZSBjb2x1bW4gb2Zmc2V0IGluIGEgc3RyaW5nLCB0YWtpbmcgdGFicyBpbnRv
IGFjY291bnQuCisgIC8vIFVzZWQgbW9zdGx5IHRvIGZpbmQgaW5kZW50YXRpb24uCisgIGZ1bmN0
aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kLCB0YWJTaXplKSB7CisgICAgaWYgKGVuZCA9PSBu
dWxsKSB7CisgICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pOworICAgICAg
aWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKKyAgICB9CisgICAgZm9yICh2YXIg
aSA9IDAsIG4gPSAwOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkp
ID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CisgICAgICBlbHNlICsrbjsK
KyAgICB9CisgICAgcmV0dXJuIG47CisgIH0KKworICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVs
dCkgeworICAgIGlmIChlbHQuY3VycmVudFN0eWxlKSByZXR1cm4gZWx0LmN1cnJlbnRTdHlsZTsK
KyAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0LCBudWxsKTsKKyAgfQorCisg
IGZ1bmN0aW9uIGVsdE9mZnNldChub2RlLCBzY3JlZW4pIHsKKyAgICAvLyBUYWtlIHRoZSBwYXJ0
cyBvZiBib3VuZGluZyBjbGllbnQgcmVjdCB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIHNvIHdl
IGFyZSBhYmxlIHRvIGVkaXQgaWYgbmVlZCBiZSwKKyAgICAvLyBzaW5jZSB0aGUgcmV0dXJuZWQg
dmFsdWUgY2Fubm90IGJlIGNoYW5nZWQgZXh0ZXJuYWxseSAodGhleSBhcmUga2VwdCBpbiBzeW5j
IGFzIHRoZSBlbGVtZW50IG1vdmVzIHdpdGhpbiB0aGUgcGFnZSkKKyAgICB0cnkgeyB2YXIgYm94
ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgYm94ID0geyB0b3A6IGJveC50b3AsIGxl
ZnQ6IGJveC5sZWZ0IH07IH0KKyAgICBjYXRjaChlKSB7IGJveCA9IHt0b3A6IDAsIGxlZnQ6IDB9
OyB9CisgICAgaWYgKCFzY3JlZW4pIHsKKyAgICAgIC8vIEdldCB0aGUgdG9wbGV2ZWwgc2Nyb2xs
LCB3b3JraW5nIGFyb3VuZCBicm93c2VyIGRpZmZlcmVuY2VzLgorICAgICAgaWYgKHdpbmRvdy5w
YWdlWU9mZnNldCA9PSBudWxsKSB7CisgICAgICAgIHZhciB0ID0gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50IHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZTsKKyAgICAgICAgaWYgKHQuc2Nyb2xs
VG9wID09IG51bGwpIHQgPSBkb2N1bWVudC5ib2R5OworICAgICAgICBib3gudG9wICs9IHQuc2Ny
b2xsVG9wOyBib3gubGVmdCArPSB0LnNjcm9sbExlZnQ7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBib3gudG9wICs9IHdpbmRvdy5wYWdlWU9mZnNldDsgYm94LmxlZnQgKz0gd2luZG93LnBhZ2VY
T2Zmc2V0OworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYm94OworICB9CisKKyAgLy8gR2V0
IGEgbm9kZSdzIHRleHQgY29udGVudC4KKyAgZnVuY3Rpb24gZWx0VGV4dChub2RlKSB7CisgICAg
cmV0dXJuIG5vZGUudGV4dENvbnRlbnQgfHwgbm9kZS5pbm5lclRleHQgfHwgbm9kZS5ub2RlVmFs
dWUgfHwgIiI7CisgIH0KKyAgZnVuY3Rpb24gc2VsZWN0SW5wdXQobm9kZSkgeworICAgIGlmIChp
b3MpIHsgLy8gTW9iaWxlIFNhZmFyaSBhcHBhcmVudGx5IGhhcyBhIGJ1ZyB3aGVyZSBzZWxlY3Qo
KSBpcyBicm9rZW4uCisgICAgICBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsKKyAgICAgIG5vZGUu
c2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7CisgICAgfSBlbHNlIG5vZGUuc2VsZWN0
KCk7CisgIH0KKworICAvLyBPcGVyYXRpb25zIG9uIHtsaW5lLCBjaH0gb2JqZWN0cy4KKyAgZnVu
Y3Rpb24gcG9zRXEoYSwgYikge3JldHVybiBhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPT0gYi5j
aDt9CisgIGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwg
KGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KKyAgZnVuY3Rpb24gY29weVBvcyh4
KSB7cmV0dXJuIHtsaW5lOiB4LmxpbmUsIGNoOiB4LmNofTt9CisKKyAgZnVuY3Rpb24gZWx0KHRh
ZywgY29udGVudCwgY2xhc3NOYW1lLCBzdHlsZSkgeworICAgIHZhciBlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCh0YWcpOworICAgIGlmIChjbGFzc05hbWUpIGUuY2xhc3NOYW1lID0gY2xhc3NO
YW1lOworICAgIGlmIChzdHlsZSkgZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7CisgICAgaWYgKHR5
cGVvZiBjb250ZW50ID09ICJzdHJpbmciKSBzZXRUZXh0Q29udGVudChlLCBjb250ZW50KTsKKyAg
ICBlbHNlIGlmIChjb250ZW50KSBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyAr
K2kpIGUuYXBwZW5kQ2hpbGQoY29udGVudFtpXSk7CisgICAgcmV0dXJuIGU7CisgIH0KKyAgZnVu
Y3Rpb24gcmVtb3ZlQ2hpbGRyZW4oZSkgeworICAgIGUuaW5uZXJIVE1MID0gIiI7CisgICAgcmV0
dXJuIGU7CisgIH0KKyAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQocGFyZW50LCBlKSB7
CisgICAgcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKTsKKyAgfQorICBmdW5j
dGlvbiBzZXRUZXh0Q29udGVudChlLCBzdHIpIHsKKyAgICBpZiAoaWVfbHQ5KSB7CisgICAgICBl
LmlubmVySFRNTCA9ICIiOworICAgICAgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzdHIpKTsKKyAgICB9IGVsc2UgZS50ZXh0Q29udGVudCA9IHN0cjsKKyAgfQorICBDb2Rl
TWlycm9yLnNldFRleHRDb250ZW50ID0gc2V0VGV4dENvbnRlbnQ7CisKKyAgLy8gVXNlZCB0byBw
b3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIGFuIHVuZG8vcmVkbyBieSBmaW5kaW5nIHRoZQorICAv
LyBsYXN0IGVkaXRlZCBjaGFyYWN0ZXIuCisgIGZ1bmN0aW9uIGVkaXRFbmQoZnJvbSwgdG8pIHsK
KyAgICBpZiAoIXRvKSByZXR1cm4gMDsKKyAgICBpZiAoIWZyb20pIHJldHVybiB0by5sZW5ndGg7
CisgICAgZm9yICh2YXIgaSA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpID49IDAgJiYg
aiA+PSAwOyAtLWksIC0taikKKyAgICAgIGlmIChmcm9tLmNoYXJBdChpKSAhPSB0by5jaGFyQXQo
aikpIGJyZWFrOworICAgIHJldHVybiBqICsgMTsKKyAgfQorCisgIGZ1bmN0aW9uIGluZGV4T2Yo
Y29sbGVjdGlvbiwgZWx0KSB7CisgICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNv
bGxlY3Rpb24uaW5kZXhPZihlbHQpOworICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlv
bi5sZW5ndGg7IGkgPCBlOyArK2kpCisgICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJl
dHVybiBpOworICAgIHJldHVybiAtMTsKKyAgfQorICBmdW5jdGlvbiBpc1dvcmRDaGFyKGNoKSB7
CisgICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xv
d2VyQ2FzZSgpOworICB9CisKKyAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUg
dmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KKyAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0
IGxpbmVzLgorICB2YXIgc3BsaXRMaW5lcyA9ICJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoICE9
IDMgPyBmdW5jdGlvbihzdHJpbmcpIHsKKyAgICB2YXIgcG9zID0gMCwgcmVzdWx0ID0gW10sIGwg
PSBzdHJpbmcubGVuZ3RoOworICAgIHdoaWxlIChwb3MgPD0gbCkgeworICAgICAgdmFyIG5sID0g
c3RyaW5nLmluZGV4T2YoIlxuIiwgcG9zKTsKKyAgICAgIGlmIChubCA9PSAtMSkgbmwgPSBzdHJp
bmcubGVuZ3RoOworICAgICAgdmFyIGxpbmUgPSBzdHJpbmcuc2xpY2UocG9zLCBzdHJpbmcuY2hh
ckF0KG5sIC0gMSkgPT0gIlxyIiA/IG5sIC0gMSA6IG5sKTsKKyAgICAgIHZhciBydCA9IGxpbmUu
aW5kZXhPZigiXHIiKTsKKyAgICAgIGlmIChydCAhPSAtMSkgeworICAgICAgICByZXN1bHQucHVz
aChsaW5lLnNsaWNlKDAsIHJ0KSk7CisgICAgICAgIHBvcyArPSBydCArIDE7CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXN1bHQucHVzaChsaW5lKTsKKyAgICAgICAgcG9zID0gbmwgKyAxOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9IDogZnVuY3Rpb24oc3RyaW5n
KXtyZXR1cm4gc3RyaW5nLnNwbGl0KC9cclxuP3xcbi8pO307CisgIENvZGVNaXJyb3Iuc3BsaXRM
aW5lcyA9IHNwbGl0TGluZXM7CisKKyAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24gPyBmdW5jdGlvbih0ZSkgeworICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFy
dCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KKyAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfQor
ICB9IDogZnVuY3Rpb24odGUpIHsKKyAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVyRG9jdW1l
bnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQorICAgIGNhdGNoKGUpIHt9CisgICAgaWYgKCFy
YW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gcmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIHJhbmdlKSAhPSAwOwor
ICB9OworCisgIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB7dG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkge3N0cmVhbS5za2lwVG9FbmQoKTt9fTsK
KyAgfSk7CisgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsICJudWxsIik7CisK
KyAgdmFyIGtleU5hbWVzID0gezM6ICJFbnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFiIiwg
MTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkN0cmwiLCAxODogIkFsdCIsCisgICAgICAg
ICAgICAgICAgICAxOTogIlBhdXNlIiwgMjA6ICJDYXBzTG9jayIsIDI3OiAiRXNjIiwgMzI6ICJT
cGFjZSIsIDMzOiAiUGFnZVVwIiwgMzQ6ICJQYWdlRG93biIsIDM1OiAiRW5kIiwKKyAgICAgICAg
ICAgICAgICAgIDM2OiAiSG9tZSIsIDM3OiAiTGVmdCIsIDM4OiAiVXAiLCAzOTogIlJpZ2h0Iiwg
NDA6ICJEb3duIiwgNDQ6ICJQcmludFNjcm4iLCA0NTogIkluc2VydCIsCisgICAgICAgICAgICAg
ICAgICA0NjogIkRlbGV0ZSIsIDU5OiAiOyIsIDkxOiAiTW9kIiwgOTI6ICJNb2QiLCA5MzogIk1v
ZCIsIDEwOTogIi0iLCAxMDc6ICI9IiwgMTI3OiAiRGVsZXRlIiwKKyAgICAgICAgICAgICAgICAg
IDE4NjogIjsiLCAxODc6ICI9IiwgMTg4OiAiLCIsIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAi
LyIsIDE5MjogImAiLCAyMTk6ICJbIiwgMjIwOiAiXFwiLAorICAgICAgICAgICAgICAgICAgMjIx
OiAiXSIsIDIyMjogIiciLCA2MzI3NjogIlBhZ2VVcCIsIDYzMjc3OiAiUGFnZURvd24iLCA2MzI3
NTogIkVuZCIsIDYzMjczOiAiSG9tZSIsCisgICAgICAgICAgICAgICAgICA2MzIzNDogIkxlZnQi
LCA2MzIzMjogIlVwIiwgNjMyMzU6ICJSaWdodCIsIDYzMjMzOiAiRG93biIsIDYzMzAyOiAiSW5z
ZXJ0IiwgNjMyNzI6ICJEZWxldGUifTsKKyAgQ29kZU1pcnJvci5rZXlOYW1lcyA9IGtleU5hbWVz
OworICAoZnVuY3Rpb24oKSB7CisgICAgLy8gTnVtYmVyIGtleXMKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0gPSBTdHJpbmcoaSk7CisgICAgLy8gQWxw
aGFiZXRpYyBrZXlzCisgICAgZm9yICh2YXIgaSA9IDY1OyBpIDw9IDkwOyBpKyspIGtleU5hbWVz
W2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTsKKyAgICAvLyBGdW5jdGlvbiBrZXlzCisgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykga2V5TmFtZXNbaSArIDExMV0gPSBrZXlOYW1l
c1tpICsgNjMyMzVdID0gIkYiICsgaTsKKyAgfSkoKTsKKworICByZXR1cm4gQ29kZU1pcnJvcjsK
K30pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2Nt
L2Nzcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvY20vY3NzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZiYjNiY2QxOTZkZjc2YzQyNjcyYmExODdkNTFiNWZkNmE4YmJmYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nzcy5q
cwpAQCAtMCwwICsxLDE3NCBAQAorQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlv
bihjb25maWcpIHsKKyAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwgdHlwZTsK
KworICB2YXIga2V5d29yZHMgPSBrZXlTZXQoWyJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVi
b3JkZXIiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwgImFmdGVyLXdoaXRlLXNwYWNlIiwgImFo
ZWFkIiwgImFsaWFzIiwgImFsbCIsICJhbGwtc2Nyb2xsIiwKKyAgICAiYWx0ZXJuYXRlIiwgImFs
d2F5cyIsICJhbWhhcmljIiwgImFtaGFyaWMtYWJlZ2VkZSIsICJhbnRpYWxpYXNlZCIsICJhcHB3
b3Jrc3BhY2UiLCAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwgImFzdGVyaXNrcyIsCisgICAg
ImF1dG8iLCAiYXZvaWQiLCAiYmFja2dyb3VuZCIsICJiYWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAi
YmVsb3ciLCAiYmlkaS1vdmVycmlkZSIsICJiaW5hcnkiLCAiYmVuZ2FsaSIsICJibGluayIsCisg
ICAgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9sZCIsICJib2xkZXIiLCAiYm9yZGVyIiwgImJv
cmRlci1ib3giLCAiYm90aCIsICJib3R0b20iLCAiYnJlYWstYWxsIiwgImJyZWFrLXdvcmQiLCAi
YnV0dG9uIiwKKyAgICAiYnV0dG9uLWJldmVsIiwgImJ1dHRvbmZhY2UiLCAiYnV0dG9uaGlnaGxp
Z2h0IiwgImJ1dHRvbnNoYWRvdyIsICJidXR0b250ZXh0IiwgImNhbWJvZGlhbiIsICJjYXBpdGFs
aXplIiwgImNhcHMtbG9jay1pbmRpY2F0b3IiLAorICAgICJjYXB0aW9uIiwgImNhcHRpb250ZXh0
IiwgImNhcmV0IiwgImNlbGwiLCAiY2VudGVyIiwgImNoZWNrYm94IiwgImNpcmNsZSIsICJjamst
ZWFydGhseS1icmFuY2giLCAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGljIiwK
KyAgICAiY2xlYXIiLCAiY2xpcCIsICJjbG9zZS1xdW90ZSIsICJjb2wtcmVzaXplIiwgImNvbGxh
cHNlIiwgImNvbXBhY3QiLCAiY29uZGVuc2VkIiwgImNvbnRhaW4iLCAiY29udGVudCIsICJjb250
ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLAorICAgICJjb250aW51b3VzIiwgImNvcHkiLCAiY292
ZXIiLCAiY3JvcCIsICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9yIiwgImN1cnNp
dmUiLCAiZGFzaGVkIiwgImRlY2ltYWwiLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iLCAiZGVmYXVs
dCIsCisgICAgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9uLWF0b3AiLCAiZGVzdGluYXRp
b24taW4iLCAiZGVzdGluYXRpb24tb3V0IiwgImRlc3RpbmF0aW9uLW92ZXIiLCAiZGV2YW5hZ2Fy
aSIsICJkaXNjIiwgImRpc2NhcmQiLCAiZG9jdW1lbnQiLAorICAgICJkb3QtZGFzaCIsICJkb3Qt
ZG90LWRhc2giLCAiZG90dGVkIiwgImRvdWJsZSIsICJkb3duIiwgImUtcmVzaXplIiwgImVhc2Ui
LCAiZWFzZS1pbiIsICJlYXNlLWluLW91dCIsICJlYXNlLW91dCIsICJlbGVtZW50IiwKKyAgICAi
ZWxsaXBzaXMiLCAiZW1iZWQiLCAiZW5kIiwgImV0aGlvcGljIiwgImV0aGlvcGljLWFiZWdlZGUi
LCAiZXRoaW9waWMtYWJlZ2VkZS1hbS1ldCIsICJldGhpb3BpYy1hYmVnZWRlLWdleiIsCisgICAg
ImV0aGlvcGljLWFiZWdlZGUtdGktZXIiLCAiZXRoaW9waWMtYWJlZ2VkZS10aS1ldCIsICJldGhp
b3BpYy1oYWxlaGFtZS1hYS1lciIsICJldGhpb3BpYy1oYWxlaGFtZS1hYS1ldCIsCisgICAgImV0
aGlvcGljLWhhbGVoYW1lLWFtLWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLWdleiIsICJldGhpb3Bp
Yy1oYWxlaGFtZS1vbS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1zaWQtZXQiLAorICAgICJldGhp
b3BpYy1oYWxlaGFtZS1zby1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS10aS1lciIsICJldGhpb3Bp
Yy1oYWxlaGFtZS10aS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS10aWciLCAiZXctcmVzaXplIiwg
ImV4cGFuZGVkIiwKKyAgICAiZXh0cmEtY29uZGVuc2VkIiwgImV4dHJhLWV4cGFuZGVkIiwgImZh
bnRhc3kiLCAiZmFzdCIsICJmaWxsIiwgImZpeGVkIiwgImZsYXQiLCAiZm9vdG5vdGVzIiwgImZv
cndhcmRzIiwgImZyb20iLCAiZ2VvbWV0cmljUHJlY2lzaW9uIiwKKyAgICAiZ2VvcmdpYW4iLCAi
Z3JheXRleHQiLCAiZ3Jvb3ZlIiwgImd1amFyYXRpIiwgImd1cm11a2hpIiwgImhhbmQiLCAiaGFu
Z3VsIiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGVicmV3IiwgImhlbHAiLAorICAgICJoaWRkZW4i
LCAiaGlkZSIsICJoaWdoZXIiLCAiaGlnaGxpZ2h0IiwgImhpZ2hsaWdodHRleHQiLCAiaGlyYWdh
bmEiLCAiaGlyYWdhbmEtaXJvaGEiLCAiaG9yaXpvbnRhbCIsICJoc2wiLCAiaHNsYSIsICJpY29u
IiwgImlnbm9yZSIsCisgICAgImluYWN0aXZlYm9yZGVyIiwgImluYWN0aXZlY2FwdGlvbiIsICJp
bmFjdGl2ZWNhcHRpb250ZXh0IiwgImluZmluaXRlIiwgImluZm9iYWNrZ3JvdW5kIiwgImluZm90
ZXh0IiwgImluaGVyaXQiLCAiaW5pdGlhbCIsICJpbmxpbmUiLAorICAgICJpbmxpbmUtYXhpcyIs
ICJpbmxpbmUtYmxvY2siLCAiaW5saW5lLXRhYmxlIiwgImluc2V0IiwgImluc2lkZSIsICJpbnRy
aW5zaWMiLCAiaW52ZXJ0IiwgIml0YWxpYyIsICJqdXN0aWZ5IiwgImthbm5hZGEiLCAia2F0YWth
bmEiLAorICAgICJrYXRha2FuYS1pcm9oYSIsICJraG1lciIsICJsYW5kc2NhcGUiLCAibGFvIiwg
ImxhcmdlIiwgImxhcmdlciIsICJsZWZ0IiwgImxldmVsIiwgImxpZ2h0ZXIiLCAibGluZS10aHJv
dWdoIiwgImxpbmVhciIsICJsaW5lcyIsCisgICAgImxpc3QtaXRlbSIsICJsaXN0Ym94IiwgImxp
c3RpdGVtIiwgImxvY2FsIiwgImxvZ2ljYWwiLCAibG91ZCIsICJsb3dlciIsICJsb3dlci1hbHBo
YSIsICJsb3dlci1hcm1lbmlhbiIsICJsb3dlci1ncmVlayIsCisgICAgImxvd2VyLWhleGFkZWNp
bWFsIiwgImxvd2VyLWxhdGluIiwgImxvd2VyLW5vcndlZ2lhbiIsICJsb3dlci1yb21hbiIsICJs
b3dlcmNhc2UiLCAibHRyIiwgIm1hbGF5YWxhbSIsICJtYXRjaCIsICJtZWRpYS1jb250cm9scy1i
YWNrZ3JvdW5kIiwKKyAgICAibWVkaWEtY3VycmVudC10aW1lLWRpc3BsYXkiLCAibWVkaWEtZnVs
bHNjcmVlbi1idXR0b24iLCAibWVkaWEtbXV0ZS1idXR0b24iLCAibWVkaWEtcGxheS1idXR0b24i
LCAibWVkaWEtcmV0dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbiIsCisgICAgIm1lZGlhLXJld2luZC1i
dXR0b24iLCAibWVkaWEtc2Vlay1iYWNrLWJ1dHRvbiIsICJtZWRpYS1zZWVrLWZvcndhcmQtYnV0
dG9uIiwgIm1lZGlhLXNsaWRlciIsICJtZWRpYS1zbGlkZXJ0aHVtYiIsICJtZWRpYS10aW1lLXJl
bWFpbmluZy1kaXNwbGF5IiwKKyAgICAibWVkaWEtdm9sdW1lLXNsaWRlciIsICJtZWRpYS12b2x1
bWUtc2xpZGVyLWNvbnRhaW5lciIsICJtZWRpYS12b2x1bWUtc2xpZGVydGh1bWIiLCAibWVkaXVt
IiwgIm1lbnUiLCAibWVudWxpc3QiLCAibWVudWxpc3QtYnV0dG9uIiwKKyAgICAibWVudWxpc3Qt
dGV4dCIsICJtZW51bGlzdC10ZXh0ZmllbGQiLCAibWVudXRleHQiLCAibWVzc2FnZS1ib3giLCAi
bWlkZGxlIiwgIm1pbi1pbnRyaW5zaWMiLCAibWl4IiwgIm1vbmdvbGlhbiIsICJtb25vc3BhY2Ui
LCAibW92ZSIsICJtdWx0aXBsZSIsCisgICAgIm15YW5tYXIiLCAibi1yZXNpemUiLCAibmFycm93
ZXIiLCAibmF2eSIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAibm8tY2xvc2UtcXVvdGUi
LCAibm8tZHJvcCIsICJuby1vcGVuLXF1b3RlIiwgIm5vLXJlcGVhdCIsICJub25lIiwKKyAgICAi
bm9ybWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsICJucy1yZXNpemUiLCAibnctcmVzaXpl
IiwgIm53c2UtcmVzaXplIiwgIm9ibGlxdWUiLCAib2N0YWwiLCAib3Blbi1xdW90ZSIsICJvcHRp
bWl6ZUxlZ2liaWxpdHkiLAorICAgICJvcHRpbWl6ZVNwZWVkIiwgIm9yaXlhIiwgIm9yb21vIiwg
Im91dHNldCIsICJvdXRzaWRlIiwgIm92ZXJsYXkiLCAib3ZlcmxpbmUiLCAicGFkZGluZyIsICJw
YWRkaW5nLWJveCIsICJwYWludGVkIiwgInBhdXNlZCIsCisgICAgInBlcnNpYW4iLCAicGx1cy1k
YXJrZXIiLCAicGx1cy1saWdodGVyIiwgInBvaW50ZXIiLCAicG9ydHJhaXQiLCAicHJlIiwgInBy
ZS1saW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwKKyAgICAicHVz
aC1idXR0b24iLCAicmFkaW8iLCAicmVhZC1vbmx5IiwgInJlYWQtd3JpdGUiLCAicmVhZC13cml0
ZS1wbGFpbnRleHQtb25seSIsICJyZWxhdGl2ZSIsICJyZXBlYXQiLCAicmVwZWF0LXgiLAorICAg
ICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwgInJnYiIsICJyZ2JhIiwgInJpZGdlIiwg
InJpZ2h0IiwgInJvdW5kIiwgInJvdy1yZXNpemUiLCAicnRsIiwgInJ1bi1pbiIsICJydW5uaW5n
IiwgInMtcmVzaXplIiwgInNhbnMtc2VyaWYiLAorICAgICJzY3JvbGwiLCAic2Nyb2xsYmFyIiwg
InNlLXJlc2l6ZSIsICJzZWFyY2hmaWVsZCIsICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwg
InNlYXJjaGZpZWxkLWRlY29yYXRpb24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLAor
ICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLCAic2VtaS1jb25kZW5zZWQiLCAi
c2VtaS1leHBhbmRlZCIsICJzZXBhcmF0ZSIsICJzZXJpZiIsICJzaG93IiwgInNpZGFtYSIsICJz
aW5nbGUiLAorICAgICJza2lwLXdoaXRlLXNwYWNlIiwgInNsaWRlIiwgInNsaWRlci1ob3Jpem9u
dGFsIiwgInNsaWRlci12ZXJ0aWNhbCIsICJzbGlkZXJ0aHVtYi1ob3Jpem9udGFsIiwgInNsaWRl
cnRodW1iLXZlcnRpY2FsIiwgInNsb3ciLAorICAgICJzbWFsbCIsICJzbWFsbC1jYXBzIiwgInNt
YWxsLWNhcHRpb24iLCAic21hbGxlciIsICJzb2xpZCIsICJzb21hbGkiLCAic291cmNlLWF0b3Ai
LCAic291cmNlLWluIiwgInNvdXJjZS1vdXQiLCAic291cmNlLW92ZXIiLAorICAgICJzcGFjZSIs
ICJzcXVhcmUiLCAic3F1YXJlLWJ1dHRvbiIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJh
ciIsICJzdHJldGNoIiwgInN0cm9rZSIsICJzdWIiLCAic3VicGl4ZWwtYW50aWFsaWFzZWQiLCAi
c3VwZXIiLAorICAgICJzdy1yZXNpemUiLCAidGFibGUiLCAidGFibGUtY2FwdGlvbiIsICJ0YWJs
ZS1jZWxsIiwgInRhYmxlLWNvbHVtbiIsICJ0YWJsZS1jb2x1bW4tZ3JvdXAiLCAidGFibGUtZm9v
dGVyLWdyb3VwIiwgInRhYmxlLWhlYWRlci1ncm91cCIsCisgICAgInRhYmxlLXJvdyIsICJ0YWJs
ZS1yb3ctZ3JvdXAiLCAidGVsdWd1IiwgInRleHQiLCAidGV4dC1ib3R0b20iLCAidGV4dC10b3Ai
LCAidGV4dGFyZWEiLCAidGV4dGZpZWxkIiwgInRoYWkiLCAidGhpY2siLCAidGhpbiIsCisgICAg
InRocmVlZGRhcmtzaGFkb3ciLCAidGhyZWVkZmFjZSIsICJ0aHJlZWRoaWdobGlnaHQiLCAidGhy
ZWVkbGlnaHRzaGFkb3ciLCAidGhyZWVkc2hhZG93IiwgInRpYmV0YW4iLCAidGlncmUiLCAidGln
cmlueWEtZXIiLCAidGlncmlueWEtZXItYWJlZ2VkZSIsCisgICAgInRpZ3JpbnlhLWV0IiwgInRp
Z3JpbnlhLWV0LWFiZWdlZGUiLCAidG8iLCAidG9wIiwgInRyYW5zcGFyZW50IiwgInVsdHJhLWNv
bmRlbnNlZCIsICJ1bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidXAiLCAidXBwZXItYWxw
aGEiLCAidXBwZXItYXJtZW5pYW4iLAorICAgICJ1cHBlci1ncmVlayIsICJ1cHBlci1oZXhhZGVj
aW1hbCIsICJ1cHBlci1sYXRpbiIsICJ1cHBlci1ub3J3ZWdpYW4iLCAidXBwZXItcm9tYW4iLCAi
dXBwZXJjYXNlIiwgInVyZHUiLCAidXJsIiwgInZlcnRpY2FsIiwgInZlcnRpY2FsLXRleHQiLCAi
dmlzaWJsZSIsCisgICAgInZpc2libGVGaWxsIiwgInZpc2libGVQYWludGVkIiwgInZpc2libGVT
dHJva2UiLCAidmlzdWFsIiwgInctcmVzaXplIiwgIndhaXQiLCAid2F2ZSIsICJ3aGl0ZSIsICJ3
aWRlciIsICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsCisgICAgIngtbGFy
Z2UiLCAieC1zbWFsbCIsICJ4b3IiLCAieHgtbGFyZ2UiLCAieHgtc21hbGwiLCAieWVsbG93Iiwg
Ii13YXAtbWFycXVlZSIsICItd2Via2l0LWFjdGl2ZWxpbmsiLCAiLXdlYmtpdC1hdXRvIiwgIi13
ZWJraXQtYmFzZWxpbmUtbWlkZGxlIiwKKyAgICAiLXdlYmtpdC1ib2R5IiwgIi13ZWJraXQtYm94
IiwgIi13ZWJraXQtY2VudGVyIiwgIi13ZWJraXQtY29udHJvbCIsICItd2Via2l0LWZvY3VzLXJp
bmctY29sb3IiLCAiLXdlYmtpdC1ncmFiIiwgIi13ZWJraXQtZ3JhYmJpbmciLAorICAgICItd2Vi
a2l0LWdyYWRpZW50IiwgIi13ZWJraXQtaW5saW5lLWJveCIsICItd2Via2l0LWxlZnQiLCAiLXdl
YmtpdC1saW5rIiwgIi13ZWJraXQtbWFycXVlZSIsICItd2Via2l0LW1pbmktY29udHJvbCIsICIt
d2Via2l0LW5vd3JhcCIsICItd2Via2l0LXBpY3RvZ3JhcGgiLAorICAgICItd2Via2l0LXJpZ2h0
IiwgIi13ZWJraXQtc21hbGwtY29udHJvbCIsICItd2Via2l0LXRleHQiLCAiLXdlYmtpdC14eHgt
bGFyZ2UiLCAiLXdlYmtpdC16b29tLWluIiwgIi13ZWJraXQtem9vbS1vdXQiXSk7CisKKyAgZnVu
Y3Rpb24ga2V5U2V0KGFycmF5KSB7IHZhciBrZXlzID0ge307IGZvciAodmFyIGkgPSAwOyBpIDwg
YXJyYXkubGVuZ3RoOyArK2kpIGtleXNbYXJyYXlbaV1dID0gdHJ1ZTsgcmV0dXJuIGtleXM7IH0K
KyAgZnVuY3Rpb24gcmV0KHN0eWxlLCB0cCkge3R5cGUgPSB0cDsgcmV0dXJuIHN0eWxlO30KKwor
ICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgeworICAgIHZhciBjaCA9IHN0cmVh
bS5uZXh0KCk7CisgICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0v
KTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KKyAgICBlbHNlIGlmIChj
aCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiKiIpKSB7CisgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRv
a2VuQ0NvbW1lbnQ7CisgICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsK
KyAgICB9CisgICAgZWxzZSBpZiAoY2ggPT0gIjwiICYmIHN0cmVhbS5lYXQoIiEiKSkgeworICAg
ICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OworICAgICAgcmV0dXJuIHRva2Vu
U0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNoID09ICI9
IikgcmV0KG51bGwsICJjb21wYXJlIik7CisgICAgZWxzZSBpZiAoKGNoID09ICJ+IiB8fCBjaCA9
PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgcmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIpOwor
ICAgIGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7CisgICAgICBzdGF0ZS50b2tl
bml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKKyAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJl
YW0sIHN0YXRlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CisgICAgICBzdHJl
YW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CisgICAgICByZXR1cm4gcmV0KCJhdG9tIiwgImhhc2gi
KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2ggPT0gIiEiKSB7CisgICAgICBzdHJlYW0ubWF0Y2go
L15ccypcdyovKTsKKyAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7Cisg
ICAgfQorICAgIGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKKyAgICAgIHN0cmVhbS5lYXRXaGls
ZSgvW1x3LiVdLyk7CisgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOworICAgIH0K
KyAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgeworICAgICAgcmV0dXJuIHJldChu
dWxsLCAic2VsZWN0LW9wIik7CisgICAgfQorICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0
KGNoKSkgeworICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7CisgICAgfQorICAgIGVsc2Ugewor
ICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOworICAgICAgcmV0dXJuIHJldCgidmFy
aWFibGUiLCAidmFyaWFibGUiKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB0b2tlbkNDb21t
ZW50KHN0cmVhbSwgc3RhdGUpIHsKKyAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CisgICAg
d2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKKyAgICAgIGlmIChtYXliZUVu
ZCAmJiBjaCA9PSAiLyIpIHsKKyAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7Cisg
ICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CisgIH0KKworICBmdW5j
dGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKKyAgICB2YXIgZGFzaGVzID0g
MCwgY2g7CisgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKKyAgICAg
IGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKKyAgICAgICAgc3RhdGUudG9rZW5pemUg
PSB0b2tlbkJhc2U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGFzaGVzID0gKGNo
ID09ICItIikgPyBkYXNoZXMgKyAxIDogMDsKKyAgICB9CisgICAgcmV0dXJuIHJldCgiY29tbWVu
dCIsICJjb21tZW50Iik7CisgIH0KKworICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewor
ICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAgICB2YXIgZXNjYXBlZCA9
IGZhbHNlLCBjaDsKKyAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7
CisgICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CisgICAgICB9CisgICAg
ICBpZiAoIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOworICAgICAgcmV0dXJu
IHJldCgic3RyaW5nIiwgInN0cmluZyIpOworICAgIH07CisgIH0KKworICByZXR1cm4geworICAg
IHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKKyAgICAgIHJldHVybiB7dG9rZW5pemU6IHRv
a2VuQmFzZSwKKyAgICAgICAgICAgICAgYmFzZUluZGVudDogYmFzZSB8fCAwLAorICAgICAgICAg
ICAgICBzdGFjazogW119OworICAgIH0sCisKKyAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBz
dGF0ZSkgeworICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKKyAgICAg
IHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOworCisgICAgICB2YXIg
Y29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKKyAgICAgIGlmICh0
eXBlID09ICJoYXNoIiAmJiBjb250ZXh0ICE9ICJydWxlIikgc3R5bGUgPSAic3RyaW5nLTIiOwor
ICAgICAgZWxzZSBpZiAoc3R5bGUgPT0gInZhcmlhYmxlIikgeworICAgICAgICBpZiAoY29udGV4
dCA9PSAicnVsZSIpIHN0eWxlID0ga2V5d29yZHNbc3RyZWFtLmN1cnJlbnQoKV0gPyAia2V5d29y
ZCIgOiAibnVtYmVyIjsKKyAgICAgICAgZWxzZSBpZiAoIWNvbnRleHQgfHwgY29udGV4dCA9PSAi
QG1lZGlheyIpIHN0eWxlID0gInRhZyI7CisgICAgICB9CisKKyAgICAgIGlmIChjb250ZXh0ID09
ICJydWxlIiAmJiAvXltce1x9O10kLy50ZXN0KHR5cGUpKQorICAgICAgICBzdGF0ZS5zdGFjay5w
b3AoKTsKKyAgICAgIGlmICh0eXBlID09ICJ7IikgeworICAgICAgICBpZiAoY29udGV4dCA9PSAi
QG1lZGlhIikgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwor
ICAgICAgICBlbHNlIHN0YXRlLnN0YWNrLnB1c2goInsiKTsKKyAgICAgIH0KKyAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gIn0iKSBzdGF0ZS5zdGFjay5wb3AoKTsKKyAgICAgIGVsc2UgaWYgKHR5cGUg
PT0gIkBtZWRpYSIpIHN0YXRlLnN0YWNrLnB1c2goIkBtZWRpYSIpOworICAgICAgZWxzZSBpZiAo
Y29udGV4dCA9PSAieyIgJiYgdHlwZSAhPSAiY29tbWVudCIpIHN0YXRlLnN0YWNrLnB1c2goInJ1
bGUiKTsKKyAgICAgIHJldHVybiBzdHlsZTsKKyAgICB9LAorCisgICAgaW5kZW50OiBmdW5jdGlv
bihzdGF0ZSwgdGV4dEFmdGVyKSB7CisgICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsK
KyAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRBZnRlcikpCisgICAgICAgIG4gLT0gc3RhdGUuc3Rh
Y2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID09ICJydWxlIiA/IDIgOiAxOworICAgICAgcmV0dXJu
IHN0YXRlLmJhc2VJbmRlbnQgKyBuICogaW5kZW50VW5pdDsKKyAgICB9LAorCisgICAgZWxlY3Ry
aWNDaGFyczogIn0iCisgIH07Cit9KTsKKworQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2Nz
cyIsICJjc3MiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvY20vaHRtbG1peGVkLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9j
bS9odG1sbWl4ZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ3Y2FhNzE3M2VlZWE0ZjhkZTE3NTQ3YjA1YWE3
MTU0MWYxZTgwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvY20vaHRtbG1peGVkLmpzCkBAIC0wLDAgKzEsODUgQEAKK0NvZGVNaXJyb3IuZGVm
aW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKKyAg
dmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywge25hbWU6ICJ4bWwiLCBo
dG1sTW9kZTogdHJ1ZX0pOworICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZp
ZywgImphdmFzY3JpcHQiKTsKKyAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29u
ZmlnLCAiY3NzIik7CisKKyAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CisgICAgdmFy
IHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOworICAgIGlm
IChzdHlsZSA9PSAidGFnIiAmJiBzdHJlYW0uY3VycmVudCgpID09ICI+IiAmJiBzdGF0ZS5odG1s
U3RhdGUuY29udGV4dCkgeworICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuaHRtbFN0
YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKKyAgICAgICAgc3RhdGUudG9rZW4gPSBqYXZhc2NyaXB0
OworICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0ganNNb2RlLnN0YXJ0U3RhdGUoaHRtbE1vZGUu
aW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKKyAgICAgICAgc3RhdGUubW9kZSA9ICJqYXZh
c2NyaXB0IjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKC9ec3R5bGUkL2kudGVzdChzdGF0ZS5o
dG1sU3RhdGUuY29udGV4dC50YWdOYW1lKSkgeworICAgICAgICBzdGF0ZS50b2tlbiA9IGNzczsK
KyAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGNzc01vZGUuc3RhcnRTdGF0ZShodG1sTW9kZS5p
bmRlbnQoc3RhdGUuaHRtbFN0YXRlLCAiIikpOworICAgICAgICBzdGF0ZS5tb2RlID0gImNzcyI7
CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdHlsZTsKKyAgfQorICBmdW5jdGlvbiBtYXli
ZUJhY2t1cChzdHJlYW0sIHBhdCwgc3R5bGUpIHsKKyAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJl
bnQoKTsKKyAgICB2YXIgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7CisgICAgaWYgKGNsb3NlID4g
LTEpIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGNsb3NlKTsKKyAgICByZXR1cm4gc3R5bGU7
CisgIH0KKyAgZnVuY3Rpb24gamF2YXNjcmlwdChzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0
cmVhbS5tYXRjaCgvXjxcL1xzKnNjcmlwdFxzKj4vaSwgZmFsc2UpKSB7CisgICAgICBzdGF0ZS50
b2tlbiA9IGh0bWw7CisgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDsKKyAgICAgIHN0YXRl
Lm1vZGUgPSAiaHRtbCI7CisgICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTsKKyAgICB9
CisgICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnNjcmlwdFxzKj4vLAorICAg
ICAgICAgICAgICAgICAgICAgICBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRl
KSk7CisgIH0KKyAgZnVuY3Rpb24gY3NzKHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAoc3RyZWFt
Lm1hdGNoKC9ePFwvXHMqc3R5bGVccyo+L2ksIGZhbHNlKSkgeworICAgICAgc3RhdGUudG9rZW4g
PSBodG1sOworICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7CisgICAgICBzdGF0ZS5tb2Rl
ID0gImh0bWwiOworICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICAg
IHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzdHlsZVxzKj4vLAorICAgICAgICAg
ICAgICAgICAgICAgICBjc3NNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwor
ICB9CisKKyAgcmV0dXJuIHsKKyAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICAgIHZh
ciBzdGF0ZSA9IGh0bWxNb2RlLnN0YXJ0U3RhdGUoKTsKKyAgICAgIHJldHVybiB7dG9rZW46IGh0
bWwsIGxvY2FsU3RhdGU6IG51bGwsIG1vZGU6ICJodG1sIiwgaHRtbFN0YXRlOiBzdGF0ZX07Cisg
ICAgfSwKKworICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKKyAgICAgIGlmIChzdGF0
ZS5sb2NhbFN0YXRlKQorICAgICAgICB2YXIgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShz
dGF0ZS50b2tlbiA9PSBjc3MgPyBjc3NNb2RlIDoganNNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTsK
KyAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBsb2NhbFN0YXRlOiBsb2NhbCwgbW9k
ZTogc3RhdGUubW9kZSwKKyAgICAgICAgICAgICAgaHRtbFN0YXRlOiBDb2RlTWlycm9yLmNvcHlT
dGF0ZShodG1sTW9kZSwgc3RhdGUuaHRtbFN0YXRlKX07CisgICAgfSwKKworICAgIHRva2VuOiBm
dW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFt
LCBzdGF0ZSk7CisgICAgfSwKKworICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRl
cikgeworICAgICAgaWYgKHN0YXRlLnRva2VuID09IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4
dEFmdGVyKSkKKyAgICAgICAgcmV0dXJuIGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUs
IHRleHRBZnRlcik7CisgICAgICBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PSBqYXZhc2NyaXB0KQor
ICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIp
OworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gY3NzTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxT
dGF0ZSwgdGV4dEFmdGVyKTsKKyAgICB9LAorCisgICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24o
YSwgYikgeworICAgICAgaWYgKGEubW9kZSAhPSBiLm1vZGUpIHJldHVybiBmYWxzZTsKKyAgICAg
IGlmIChhLmxvY2FsU3RhdGUpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICByZXR1cm4g
aHRtbE1vZGUuY29tcGFyZVN0YXRlcyhhLmh0bWxTdGF0ZSwgYi5odG1sU3RhdGUpOworICAgIH0s
CisKKyAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIKKyAgfTsKK30sICJ4bWwiLCAiamF2YXNjcmlw
dCIsICJjc3MiKTsKKworQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwiLCAiaHRtbG1p
eGVkIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2Nt
L2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2ph
dmFzY3JpcHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVjZTFiZWZjOWE1MmU3ZDUyNTAwYzExNTJhZWI4MDg3
M2NlNjRkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvY20vamF2YXNjcmlwdC5qcwpAQCAtMCwwICsxLDM2MSBAQAorQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKKyAg
dmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKKyAgdmFyIGpzb25Nb2RlID0gcGFy
c2VyQ29uZmlnLmpzb247CisKKyAgLy8gVG9rZW5pemVyCisKKyAgdmFyIGtleXdvcmRzID0gZnVu
Y3Rpb24oKXsKKyAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHls
ZTogImtleXdvcmQifTt9CisgICAgdmFyIEEgPSBrdygia2V5d29yZCBhIiksIEIgPSBrdygia2V5
d29yZCBiIiksIEMgPSBrdygia2V5d29yZCBjIik7CisgICAgdmFyIG9wZXJhdG9yID0ga3coIm9w
ZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKKyAgICByZXR1
cm4geworICAgICAgImlmIjogQSwgIndoaWxlIjogQSwgIndpdGgiOiBBLCAiZWxzZSI6IEIsICJk
byI6IEIsICJ0cnkiOiBCLCAiZmluYWxseSI6IEIsCisgICAgICAicmV0dXJuIjogQywgImJyZWFr
IjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAor
ICAgICAgInZhciI6IGt3KCJ2YXIiKSwgImNvbnN0Ijoga3coInZhciIpLCAibGV0Ijoga3coInZh
ciIpLAorICAgICAgImZ1bmN0aW9uIjoga3coImZ1bmN0aW9uIiksICJjYXRjaCI6IGt3KCJjYXRj
aCIpLAorICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNh
c2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCisgICAgICAiaW4iOiBv
cGVyYXRvciwgInR5cGVvZiI6IG9wZXJhdG9yLCAiaW5zdGFuY2VvZiI6IG9wZXJhdG9yLAorICAg
ICAgInRydWUiOiBhdG9tLCAiZmFsc2UiOiBhdG9tLCAibnVsbCI6IGF0b20sICJ1bmRlZmluZWQi
OiBhdG9tLCAiTmFOIjogYXRvbSwgIkluZmluaXR5IjogYXRvbQorICAgIH07CisgIH0oKTsKKwor
ICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOworCisgIGZ1bmN0aW9uIGNo
YWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKKyAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CisgICAgcmV0
dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2Fw
ZWQoc3RyZWFtLCBlbmQpIHsKKyAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0OworICAgIHdo
aWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKKyAgICAgIGlmIChuZXh0ID09
IGVuZCAmJiAhZXNjYXBlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZXNjYXBlZCA9
ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKKyAgICB9CisgICAgcmV0dXJuIGVzY2FwZWQ7Cisg
IH0KKworICAvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRp
cGxlIHZhbHVlcyB3aXRob3V0CisgIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgorICB2
YXIgdHlwZSwgY29udGVudDsKKyAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkgeworICAg
IHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7CisgICAgcmV0dXJuIHN0eWxlOworICB9CisKKyAg
ZnVuY3Rpb24ganNUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgeworICAgIHZhciBjaCA9IHN0cmVh
bS5uZXh0KCk7CisgICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCisgICAgICByZXR1cm4g
Y2hhaW4oc3RyZWFtLCBzdGF0ZSwganNUb2tlblN0cmluZyhjaCkpOworICAgIGVsc2UgaWYgKC9b
XFtcXXt9XChcKSw7XDpcLl0vLnRlc3QoY2gpKQorICAgICAgcmV0dXJuIHJldChjaCk7CisgICAg
ZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHsKKyAgICAgIHN0cmVhbS5l
YXRXaGlsZSgvW1xkYS1mXS9pKTsKKyAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIi
KTsKKyAgICB9ICAgICAgCisgICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSB8fCBjaCA9PSAiLSIg
JiYgc3RyZWFtLmVhdCgvXGQvKSkgeworICAgICAgc3RyZWFtLm1hdGNoKC9eXGQqKD86XC5cZCop
Pyg/OltlRV1bK1wtXT9cZCspPy8pOworICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJl
ciIpOworICAgIH0KKyAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKKyAgICAgIGlmIChzdHJlYW0u
ZWF0KCIqIikpIHsKKyAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGpzVG9rZW5D
b21tZW50KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeworICAg
ICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CisgICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAi
Y29tbWVudCIpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoc3RhdGUucmVBbGxvd2VkKSB7Cisg
ICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CisgICAgICAgIHN0cmVhbS5l
YXRXaGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQor
ICAgICAgICByZXR1cm4gcmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKKyAgICAgIH0KKyAgICAg
IGVsc2UgeworICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOworICAgICAg
ICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOworICAgICAg
fQorICAgIH0KKyAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsKKyAgICAgICAgc3RyZWFtLnNraXBU
b0VuZCgpOworICAgICAgICByZXR1cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOworICAgIH0KKyAg
ICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgeworICAgICAgc3RyZWFtLmVhdFdo
aWxlKGlzT3BlcmF0b3JDaGFyKTsKKyAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgbnVsbCwg
c3RyZWFtLmN1cnJlbnQoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc3RyZWFtLmVhdFdo
aWxlKC9bXHdcJF9dLyk7CisgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksIGtub3du
ID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07
CisgICAgICByZXR1cm4gKGtub3duICYmIHN0YXRlLmt3QWxsb3dlZCkgPyByZXQoa25vd24udHlw
ZSwga25vd24uc3R5bGUsIHdvcmQpIDoKKyAgICAgICAgICAgICAgICAgICAgIHJldCgidmFyaWFi
bGUiLCAidmFyaWFibGUiLCB3b3JkKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBqc1Rva2Vu
U3RyaW5nKHF1b3RlKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKKyAg
ICAgIGlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKQorICAgICAgICBzdGF0
ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOworICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0
cmluZyIpOworICAgIH07CisgIH0KKworICBmdW5jdGlvbiBqc1Rva2VuQ29tbWVudChzdHJlYW0s
IHN0YXRlKSB7CisgICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOworICAgIHdoaWxlIChjaCA9
IHN0cmVhbS5uZXh0KCkpIHsKKyAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKKyAg
ICAgICAgc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOworICAgIH0KKyAgICByZXR1cm4gcmV0
KCJjb21tZW50IiwgImNvbW1lbnQiKTsKKyAgfQorCisgIC8vIFBhcnNlcgorCisgIHZhciBhdG9t
aWNUeXBlcyA9IHsiYXRvbSI6IHRydWUsICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVl
LCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4cCI6IHRydWV9OworCisgIGZ1bmN0aW9uIEpTTGV4aWNh
bChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldiwgaW5mbykgeworICAgIHRoaXMu
aW5kZW50ZWQgPSBpbmRlbnRlZDsKKyAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKKyAgICB0aGlz
LnR5cGUgPSB0eXBlOworICAgIHRoaXMucHJldiA9IHByZXY7CisgICAgdGhpcy5pbmZvID0gaW5m
bzsKKyAgICBpZiAoYWxpZ24gIT0gbnVsbCkgdGhpcy5hbGlnbiA9IGFsaWduOworICB9CisKKyAg
ZnVuY3Rpb24gaW5TY29wZShzdGF0ZSwgdmFybmFtZSkgeworICAgIGZvciAodmFyIHYgPSBzdGF0
ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpCisgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUp
IHJldHVybiB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5
cGUsIGNvbnRlbnQsIHN0cmVhbSkgeworICAgIHZhciBjYyA9IHN0YXRlLmNjOworICAgIC8vIENv
bW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KKyAgICAvLyAoTGVzcyB3
YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwu
KQorICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFya2VkID0g
bnVsbCwgY3guY2MgPSBjYzsKKyAgCisgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3Bl
cnR5KCJhbGlnbiIpKQorICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CisKKyAgICB3
aGlsZSh0cnVlKSB7CisgICAgICB2YXIgY29tYmluYXRvciA9IGNjLmxlbmd0aCA/IGNjLnBvcCgp
IDoganNvbk1vZGUgPyBleHByZXNzaW9uIDogc3RhdGVtZW50OworICAgICAgaWYgKGNvbWJpbmF0
b3IodHlwZSwgY29udGVudCkpIHsKKyAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxl
bmd0aCAtIDFdLmxleCkKKyAgICAgICAgICBjYy5wb3AoKSgpOworICAgICAgICBpZiAoY3gubWFy
a2VkKSByZXR1cm4gY3gubWFya2VkOworICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiICYm
IGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gInZhcmlhYmxlLTIiOworICAgICAgICBy
ZXR1cm4gc3R5bGU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQ29tYmluYXRvciB1dGls
cworCisgIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgY29sdW1uOiBudWxsLCBtYXJrZWQ6IG51bGws
IGNjOiBudWxsfTsKKyAgZnVuY3Rpb24gcGFzcygpIHsKKyAgICBmb3IgKHZhciBpID0gYXJndW1l
bnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7Cisg
IH0KKyAgZnVuY3Rpb24gY29udCgpIHsKKyAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZnVuY3Rpb24gcmVnaXN0ZXIodmFybmFtZSkgewor
ICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOworICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7CisgICAg
ICBjeC5tYXJrZWQgPSAiZGVmIjsKKyAgICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7
IHY7IHYgPSB2Lm5leHQpCisgICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuOwor
ICAgICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2Fs
VmFyc307CisgICAgfQorICB9CisKKyAgLy8gQ29tYmluYXRvcnMKKworICB2YXIgZGVmYXVsdFZh
cnMgPSB7bmFtZTogInRoaXMiLCBuZXh0OiB7bmFtZTogImFyZ3VtZW50cyJ9fTsKKyAgZnVuY3Rp
b24gcHVzaGNvbnRleHQoKSB7CisgICAgaWYgKCFjeC5zdGF0ZS5jb250ZXh0KSBjeC5zdGF0ZS5s
b2NhbFZhcnMgPSBkZWZhdWx0VmFyczsKKyAgICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4
LnN0YXRlLmNvbnRleHQsIHZhcnM6IGN4LnN0YXRlLmxvY2FsVmFyc307CisgIH0KKyAgZnVuY3Rp
b24gcG9wY29udGV4dCgpIHsKKyAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBjeC5zdGF0ZS5jb250
ZXh0LnZhcnM7CisgICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHQucHJldjsK
KyAgfQorICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKKyAgICB2YXIgcmVzdWx0ID0g
ZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKKyAgICAgIHN0YXRlLmxl
eGljYWwgPSBuZXcgSlNMZXhpY2FsKHN0YXRlLmluZGVudGVkLCBjeC5zdHJlYW0uY29sdW1uKCks
IHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pOworICAgIH07CisgICAgcmVzdWx0Lmxl
eCA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBmdW5jdGlvbiBwb3BsZXgoKSB7
CisgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CisgICAgaWYgKHN0YXRlLmxleGljYWwucHJldikg
eworICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAiKSIpCisgICAgICAgIHN0YXRlLmlu
ZGVudGVkID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKKyAgICAgIHN0YXRlLmxleGljYWwgPSBz
dGF0ZS5sZXhpY2FsLnByZXY7CisgICAgfQorICB9CisgIHBvcGxleC5sZXggPSB0cnVlOworCisg
IGZ1bmN0aW9uIGV4cGVjdCh3YW50ZWQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gZXhwZWN0aW5n
KHR5cGUpIHsKKyAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTsKKyAgICAg
IGVsc2UgaWYgKHdhbnRlZCA9PSAiOyIpIHJldHVybiBwYXNzKCk7CisgICAgICBlbHNlIHJldHVy
biBjb250KGFyZ3VtZW50cy5jYWxsZWUpOworICAgIH07CisgIH0KKworICBmdW5jdGlvbiBzdGF0
ZW1lbnQodHlwZSkgeworICAgIGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udChwdXNobGV4
KCJ2YXJkZWYiKSwgdmFyZGVmMSwgZXhwZWN0KCI7IiksIHBvcGxleCk7CisgICAgaWYgKHR5cGUg
PT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwg
c3RhdGVtZW50LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4g
Y29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKKyAgICBpZiAodHlwZSA9
PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CisgICAgaWYg
KHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOworICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIp
IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKKyAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0dXJu
IGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHBlY3QoIigiKSwgcHVzaGxleCgiKSIpLCBmb3JzcGVj
MSwgZXhwZWN0KCIpIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBv
cGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJl
dHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgbWF5YmVsYWJlbCk7CisgICAgaWYgKHR5cGUgPT0g
InN3aXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgcHVzaGxl
eCgifSIsICJzd2l0Y2giKSwgZXhwZWN0KCJ7IiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0g
ImNhc2UiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjoiKSk7CisgICAgaWYgKHR5
cGUgPT0gImRlZmF1bHQiKSByZXR1cm4gY29udChleHBlY3QoIjoiKSk7CisgICAgaWYgKHR5cGUg
PT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29udGV4dCwgZXhw
ZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOworICAgIHJldHVy
biBwYXNzKHB1c2hsZXgoInN0YXQiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIHBvcGxleCk7
CisgIH0KKyAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CisgICAgaWYgKGF0b21pY1R5cGVz
Lmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTsKKyAgICBp
ZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CisgICAgaWYg
KHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lvbik7CisgICAg
aWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIG1heWJlZXhwcmVzc2lv
biwgZXhwZWN0KCIpIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CisgICAgaWYgKHR5cGUgPT0g
Im9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CisgICAgaWYgKHR5cGUgPT0gIlsi
KSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sICJdIiksIHBv
cGxleCwgbWF5YmVvcGVyYXRvcik7CisgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChw
dXNobGV4KCJ9IiksIGNvbW1hc2VwKG9ianByb3AsICJ9IiksIHBvcGxleCwgbWF5YmVvcGVyYXRv
cik7CisgICAgcmV0dXJuIGNvbnQoKTsKKyAgfQorICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb24o
dHlwZSkgeworICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVybiBwYXNzKCk7
CisgICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7CisgIH0KKyAgICAKKyAgZnVuY3Rpb24gbWF5
YmVvcGVyYXRvcih0eXBlLCB2YWx1ZSkgeworICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIgJiYg
L1wrXCt8LS0vLnRlc3QodmFsdWUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTsKKyAgICBp
ZiAodHlwZSA9PSAib3BlcmF0b3IiICYmIHZhbHVlID09ICI/IikgcmV0dXJuIGNvbnQoZXhwcmVz
c2lvbiwgZXhwZWN0KCI6IiksIGV4cHJlc3Npb24pOworICAgIGlmICh0eXBlID09ICI7IikgcmV0
dXJuOworICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21t
YXNlcChleHByZXNzaW9uLCAiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOworICAgIGlmICh0
eXBlID09ICIuIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1heWJlb3BlcmF0b3IpOworICAgIGlm
ICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBl
Y3QoIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKKyAgfQorICBmdW5jdGlvbiBtYXliZWxh
YmVsKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KHBvcGxleCwgc3Rh
dGVtZW50KTsKKyAgICByZXR1cm4gcGFzcyhtYXliZW9wZXJhdG9yLCBleHBlY3QoIjsiKSwgcG9w
bGV4KTsKKyAgfQorICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7CisgICAgaWYgKHR5cGUgPT0g
InZhcmlhYmxlIikge2N4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7IHJldHVybiBjb250KCk7fQorICB9
CisgIGZ1bmN0aW9uIG9ianByb3AodHlwZSkgeworICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIp
IGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7CisgICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3Bl
cnR5KHR5cGUpKSByZXR1cm4gY29udChleHBlY3QoIjoiKSwgZXhwcmVzc2lvbik7CisgIH0KKyAg
ZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kKSB7CisgICAgZnVuY3Rpb24gcHJvY2VlZCh0eXBl
KSB7CisgICAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHdoYXQsIHByb2NlZWQpOwor
ICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOworICAgICAgcmV0dXJuIGNvbnQo
ZXhwZWN0KGVuZCkpOworICAgIH0KKyAgICByZXR1cm4gZnVuY3Rpb24gY29tbWFTZXBhcmF0ZWQo
dHlwZSkgeworICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOworICAgICAgZWxz
ZSByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTsKKyAgICB9OworICB9CisgIGZ1bmN0aW9uIGJs
b2NrKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBjb250KCk7CisgICAgcmV0
dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7CisgIH0KKyAgZnVuY3Rpb24gdmFyZGVmMSh0eXBl
LCB2YWx1ZSkgeworICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpe3JlZ2lzdGVyKHZhbHVlKTsg
cmV0dXJuIGNvbnQodmFyZGVmMik7fQorICAgIHJldHVybiBjb250KCk7CisgIH0KKyAgZnVuY3Rp
b24gdmFyZGVmMih0eXBlLCB2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBj
b250KGV4cHJlc3Npb24sIHZhcmRlZjIpOworICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNv
bnQodmFyZGVmMSk7CisgIH0KKyAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgeworICAgIGlmICh0
eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYxLCBmb3JzcGVjMik7CisgICAgaWYgKHR5
cGUgPT0gIjsiKSByZXR1cm4gcGFzcyhmb3JzcGVjMik7CisgICAgaWYgKHR5cGUgPT0gInZhcmlh
YmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbik7CisgICAgcmV0dXJuIHBhc3MoZm9yc3BlYzIp
OworICB9CisgIGZ1bmN0aW9uIGZvcm1heWJlaW4odHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodmFs
dWUgPT0gImluIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CisgICAgcmV0dXJuIGNvbnQobWF5
YmVvcGVyYXRvciwgZm9yc3BlYzIpOworICB9CisgIGZ1bmN0aW9uIGZvcnNwZWMyKHR5cGUsIHZh
bHVlKSB7CisgICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMyk7CisgICAg
aWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOworICAgIHJldHVybiBj
b250KGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBmb3JzcGVjMyk7CisgIH0KKyAgZnVuY3Rpb24g
Zm9yc3BlYzModHlwZSkgeworICAgIGlmICh0eXBlICE9ICIpIikgY29udChleHByZXNzaW9uKTsK
KyAgfQorICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkgeworICAgIGlmICh0eXBl
ID09ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVm
KTt9CisgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIHB1c2hj
b250ZXh0LCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwgc3RhdGVtZW50LCBwb3Bjb250
ZXh0KTsKKyAgfQorICBmdW5jdGlvbiBmdW5hcmcodHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodHlw
ZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgpO30KKyAgfQor
CisgIC8vIEludGVyZmFjZQorCisgIHJldHVybiB7CisgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24o
YmFzZWNvbHVtbikgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgdG9rZW5pemU6IGpzVG9rZW5C
YXNlLAorICAgICAgICByZUFsbG93ZWQ6IHRydWUsCisgICAgICAgIGt3QWxsb3dlZDogdHJ1ZSwK
KyAgICAgICAgY2M6IFtdLAorICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29s
dW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgImJsb2NrIiwgZmFsc2UpLAorICAgICAgICBsb2Nh
bFZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsCisgICAgICAgIGNvbnRleHQ6IHBhcnNlckNv
bmZpZy5sb2NhbFZhcnMgJiYge3ZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnN9LAorICAgICAg
ICBpbmRlbnRlZDogMAorICAgICAgfTsKKyAgICB9LAorCisgICAgdG9rZW46IGZ1bmN0aW9uKHN0
cmVhbSwgc3RhdGUpIHsKKyAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKKyAgICAgICAgaWYgKCFz
dGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQorICAgICAgICAgIHN0YXRlLmxl
eGljYWwuYWxpZ24gPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5k
ZW50YXRpb24oKTsKKyAgICAgIH0KKyAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJu
IG51bGw7CisgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsK
KyAgICAgIGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOworICAgICAgc3RhdGUu
cmVBbGxvd2VkID0gISEodHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gImtleXdvcmQgYyIg
fHwgdHlwZS5tYXRjaCgvXltcW3t9XCgsOzpdJC8pKTsKKyAgICAgIHN0YXRlLmt3QWxsb3dlZCA9
IHR5cGUgIT0gJy4nOworICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBj
b250ZW50LCBzdHJlYW0pOworICAgIH0sCisKKyAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0
ZXh0QWZ0ZXIpIHsKKyAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBqc1Rva2VuQmFzZSkgcmV0
dXJuIDA7CisgICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFy
QXQoMCksIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsOworICAgICAgaWYgKGxleGljYWwudHlwZSA9
PSAic3RhdCIgJiYgZmlyc3RDaGFyID09ICJ9IikgbGV4aWNhbCA9IGxleGljYWwucHJldjsKKyAg
ICAgIHZhciB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09IHR5cGU7
CisgICAgICBpZiAodHlwZSA9PSAidmFyZGVmIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyA0
OworICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIgJiYgZmlyc3RDaGFyID09ICJ7IikgcmV0
dXJuIGxleGljYWwuaW5kZW50ZWQ7CisgICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IiB8fCB0
eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OworICAg
ICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09ICJzd2l0Y2giICYmICFjbG9zaW5nKQorICAgICAg
ICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0
ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTsKKyAgICAgIGVsc2UgaWYg
KGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEp
OworICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGlu
ZGVudFVuaXQpOworICAgIH0sCisKKyAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IgorICB9OworfSk7
CisKK0NvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9qYXZhc2NyaXB0IiwgImphdmFzY3JpcHQi
KTsKK0NvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2
YXNjcmlwdCIsIGpzb246IHRydWV9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvY20veG1sLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9jbS94bWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q2OWY2MmZkNWIzNGQwOGViMmZhZGI0NGE1NTdl
ODdkNjdiZjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvY20veG1sLmpzCkBAIC0wLDAgKzEsMzI2IEBACitDb2RlTWlycm9yLmRlZmluZU1v
ZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CisgIHZhciBpbmRlbnRV
bml0ID0gY29uZmlnLmluZGVudFVuaXQ7CisgIHZhciBLbHVkZ2VzID0gcGFyc2VyQ29uZmlnLmh0
bWxNb2RlID8geworICAgIGF1dG9TZWxmQ2xvc2VyczogeydhcmVhJzogdHJ1ZSwgJ2Jhc2UnOiB0
cnVlLCAnYnInOiB0cnVlLCAnY29sJzogdHJ1ZSwgJ2NvbW1hbmQnOiB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAgICdlbWJlZCc6IHRydWUsICdmcmFtZSc6IHRydWUsICdocic6IHRydWUsICdp
bWcnOiB0cnVlLCAnaW5wdXQnOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICdrZXlnZW4n
OiB0cnVlLCAnbGluayc6IHRydWUsICdtZXRhJzogdHJ1ZSwgJ3BhcmFtJzogdHJ1ZSwgJ3NvdXJj
ZSc6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRy
dWV9LAorICAgIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0
Z3JvdXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAncnAnOiB0cnVlLCAncnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAndGQnOiB0cnVl
LCAndGZvb3QnOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHIn
OiB0cnVlfSwKKyAgICBjb250ZXh0R3JhYmJlcnM6IHsKKyAgICAgICdkZCc6IHsnZGQnOiB0cnVl
LCAnZHQnOiB0cnVlfSwKKyAgICAgICdkdCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSwKKyAg
ICAgICdsaSc6IHsnbGknOiB0cnVlfSwKKyAgICAgICdvcHRpb24nOiB7J29wdGlvbic6IHRydWUs
ICdvcHRncm91cCc6IHRydWV9LAorICAgICAgJ29wdGdyb3VwJzogeydvcHRncm91cCc6IHRydWV9
LAorICAgICAgJ3AnOiB7J2FkZHJlc3MnOiB0cnVlLCAnYXJ0aWNsZSc6IHRydWUsICdhc2lkZSc6
IHRydWUsICdibG9ja3F1b3RlJzogdHJ1ZSwgJ2Rpcic6IHRydWUsCisgICAgICAgICAgICAnZGl2
JzogdHJ1ZSwgJ2RsJzogdHJ1ZSwgJ2ZpZWxkc2V0JzogdHJ1ZSwgJ2Zvb3Rlcic6IHRydWUsICdm
b3JtJzogdHJ1ZSwKKyAgICAgICAgICAgICdoMSc6IHRydWUsICdoMic6IHRydWUsICdoMyc6IHRy
dWUsICdoNCc6IHRydWUsICdoNSc6IHRydWUsICdoNic6IHRydWUsCisgICAgICAgICAgICAnaGVh
ZGVyJzogdHJ1ZSwgJ2hncm91cCc6IHRydWUsICdocic6IHRydWUsICdtZW51JzogdHJ1ZSwgJ25h
dic6IHRydWUsICdvbCc6IHRydWUsCisgICAgICAgICAgICAncCc6IHRydWUsICdwcmUnOiB0cnVl
LCAnc2VjdGlvbic6IHRydWUsICd0YWJsZSc6IHRydWUsICd1bCc6IHRydWV9LAorICAgICAgJ3Jw
JzogeydycCc6IHRydWUsICdydCc6IHRydWV9LAorICAgICAgJ3J0JzogeydycCc6IHRydWUsICdy
dCc6IHRydWV9LAorICAgICAgJ3Rib2R5Jzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9
LAorICAgICAgJ3RkJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LAorICAgICAgJ3Rmb290Jzog
eyd0Ym9keSc6IHRydWV9LAorICAgICAgJ3RoJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LAor
ICAgICAgJ3RoZWFkJzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9LAorICAgICAgJ3Ry
Jzogeyd0cic6IHRydWV9CisgICAgfSwKKyAgICBkb05vdEluZGVudDogeyJwcmUiOiB0cnVlfSwK
KyAgICBhbGxvd1VucXVvdGVkOiB0cnVlLAorICAgIGFsbG93TWlzc2luZzogdHJ1ZQorICB9IDog
eworICAgIGF1dG9TZWxmQ2xvc2Vyczoge30sCisgICAgaW1wbGljaXRseUNsb3NlZDoge30sCisg
ICAgY29udGV4dEdyYWJiZXJzOiB7fSwKKyAgICBkb05vdEluZGVudDoge30sCisgICAgYWxsb3dV
bnF1b3RlZDogZmFsc2UsCisgICAgYWxsb3dNaXNzaW5nOiBmYWxzZQorICB9OworICB2YXIgYWxp
Z25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOworCisgIC8vIFJldHVybiB2YXJpYWJs
ZXMgZm9yIHRva2VuaXplcnMKKyAgdmFyIHRhZ05hbWUsIHR5cGU7CisKKyAgZnVuY3Rpb24gaW5U
ZXh0KHN0cmVhbSwgc3RhdGUpIHsKKyAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKKyAgICAg
IHN0YXRlLnRva2VuaXplID0gcGFyc2VyOworICAgICAgcmV0dXJuIHBhcnNlcihzdHJlYW0sIHN0
YXRlKTsKKyAgICB9CisKKyAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOworICAgIGlmIChjaCA9
PSAiPCIpIHsKKyAgICAgIGlmIChzdHJlYW0uZWF0KCIhIikpIHsKKyAgICAgICAgaWYgKHN0cmVh
bS5lYXQoIlsiKSkgeworICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1
cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CisgICAgICAgICAgZWxzZSByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJl
dHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKKyAgICAgICAgZWxzZSBpZiAo
c3RyZWFtLm1hdGNoKCJET0NUWVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsKKyAgICAgICAgICBzdHJlYW0u
ZWF0V2hpbGUoL1tcd1wuX1wtXS8pOworICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHJldHVybiBudWxsOworICAgICAgfQorICAgICAg
ZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CisgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3
XC5fXC1dLyk7CisgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5CbG9jaygibWV0YSIsICI/PiIp
OworICAgICAgICByZXR1cm4gIm1ldGEiOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAg
IHR5cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOworICAgICAg
ICBzdHJlYW0uZWF0U3BhY2UoKTsKKyAgICAgICAgdGFnTmFtZSA9ICIiOworICAgICAgICB2YXIg
YzsKKyAgICAgICAgd2hpbGUgKChjID0gc3RyZWFtLmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9d
LykpKSB0YWdOYW1lICs9IGM7CisgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CisgICAg
ICAgIHJldHVybiAidGFnIjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoY2ggPT0gIiYi
KSB7CisgICAgICB2YXIgb2s7CisgICAgICBpZiAoc3RyZWFtLmVhdCgiIyIpKSB7CisgICAgICAg
IGlmIChzdHJlYW0uZWF0KCJ4IikpIHsKKyAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgv
W2EtZkEtRlxkXS8pICYmIHN0cmVhbS5lYXQoIjsiKTsgICAgICAgICAgCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcZF0vKSAmJiBzdHJlYW0uZWF0
KCI7Iik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG9rID0gc3RyZWFtLmVh
dFdoaWxlKC9bXHdcLlwtOl0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7CisgICAgICB9CisgICAgICBy
ZXR1cm4gb2sgPyAiYXRvbSIgOiAiZXJyb3IiOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0
cmVhbS5lYXRXaGlsZSgvW14mPF0vKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIGluVGFnKHN0cmVhbSwgc3RhdGUpIHsKKyAgICB2YXIgY2ggPSBzdHJlYW0u
bmV4dCgpOworICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+
IikpKSB7CisgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKKyAgICAgIHR5cGUgPSBjaCA9
PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xvc2VUYWciOworICAgICAgcmV0dXJuICJ0YWciOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHsKKyAgICAgIHR5cGUgPSAiZXF1YWxzIjsK
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNo
KSkgeworICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7CisgICAgICByZXR1
cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgc3RyZWFtLmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTsKKyAgICAgIHJldHVy
biAid29yZCI7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gaW5BdHRyaWJ1dGUocXVvdGUpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgeworICAgICAgd2hpbGUgKCFzdHJl
YW0uZW9sKCkpIHsKKyAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHsKKyAgICAg
ICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICB9CisgICAgICByZXR1cm4gInN0cmluZyI7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0
aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc3Ry
ZWFtLCBzdGF0ZSkgeworICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKKyAgICAgICAgaWYg
KHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkgeworICAgICAgICAgIHN0YXRlLnRva2VuaXplID0g
aW5UZXh0OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN0cmVhbS5uZXh0
KCk7CisgICAgICB9CisgICAgICByZXR1cm4gc3R5bGU7CisgICAgfTsKKyAgfQorICBmdW5jdGlv
biBkb2N0eXBlKGRlcHRoKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsK
KyAgICAgIHZhciBjaDsKKyAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxs
KSB7CisgICAgICAgIGlmIChjaCA9PSAiPCIpIHsKKyAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9
IGRvY3R5cGUoZGVwdGggKyAxKTsKKyAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3Ry
ZWFtLCBzdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIj4iKSB7CisgICAgICAgICAg
aWYgKGRlcHRoID09IDEpIHsKKyAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRl
LnRva2VuaXplID0gZG9jdHlwZShkZXB0aCAtIDEpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRl
LnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgICAgcmV0dXJuICJtZXRhIjsKKyAgICB9OworICB9CisKKyAgdmFyIGN1clN0YXRlLCBz
ZXRTdHlsZTsKKyAgZnVuY3Rpb24gcGFzcygpIHsKKyAgICBmb3IgKHZhciBpID0gYXJndW1lbnRz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7
CisgIH0KKyAgZnVuY3Rpb24gY29udCgpIHsKKyAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50
cyk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBmdW5jdGlvbiBwdXNoQ29udGV4dCh0YWdO
YW1lLCBzdGFydE9mTGluZSkgeworICAgIHZhciBub0luZGVudCA9IEtsdWRnZXMuZG9Ob3RJbmRl
bnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKGN1clN0YXRlLmNvbnRleHQgJiYgY3VyU3Rh
dGUuY29udGV4dC5ub0luZGVudCk7CisgICAgY3VyU3RhdGUuY29udGV4dCA9IHsKKyAgICAgIHBy
ZXY6IGN1clN0YXRlLmNvbnRleHQsCisgICAgICB0YWdOYW1lOiB0YWdOYW1lLAorICAgICAgaW5k
ZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCwKKyAgICAgIHN0YXJ0T2ZMaW5lOiBzdGFydE9mTGluZSwK
KyAgICAgIG5vSW5kZW50OiBub0luZGVudAorICAgIH07CisgIH0KKyAgZnVuY3Rpb24gcG9wQ29u
dGV4dCgpIHsKKyAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUuY29udGV4dCA9IGN1
clN0YXRlLmNvbnRleHQucHJldjsKKyAgfQorCisgIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkgewor
ICAgIGlmICh0eXBlID09ICJvcGVuVGFnIikgeworICAgICAgY3VyU3RhdGUudGFnTmFtZSA9IHRh
Z05hbWU7CisgICAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUuc3Rh
cnRPZkxpbmUpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImNsb3NlVGFnIikgeworICAgICAg
dmFyIGVyciA9IGZhbHNlOworICAgICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIHsKKyAgICAgICAg
aWYgKGN1clN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lKSB7CisgICAgICAgICAgaWYg
KEtsdWRnZXMuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS5jb250ZXh0
LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHsKKyAgICAgICAgICAgIHBvcENvbnRleHQoKTsKKyAg
ICAgICAgICB9CisgICAgICAgICAgZXJyID0gIWN1clN0YXRlLmNvbnRleHQgfHwgY3VyU3RhdGUu
Y29udGV4dC50YWdOYW1lICE9IHRhZ05hbWU7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIGVyciA9IHRydWU7CisgICAgICB9CisgICAgICBpZiAoZXJyKSBzZXRTdHlsZSA9ICJl
cnJvciI7CisgICAgICByZXR1cm4gY29udChlbmRjbG9zZXRhZyhlcnIpKTsKKyAgICB9CisgICAg
cmV0dXJuIGNvbnQoKTsKKyAgfQorICBmdW5jdGlvbiBlbmR0YWcoc3RhcnRPZkxpbmUpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24odHlwZSkgeworICAgICAgaWYgKHR5cGUgPT0gInNlbGZjbG9zZVRh
ZyIgfHwKKyAgICAgICAgICAodHlwZSA9PSAiZW5kVGFnIiAmJiBLbHVkZ2VzLmF1dG9TZWxmQ2xv
c2Vycy5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSkgewor
ICAgICAgICBtYXliZVBvcENvbnRleHQoY3VyU3RhdGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsK
KyAgICAgICAgcmV0dXJuIGNvbnQoKTsKKyAgICAgIH0KKyAgICAgIGlmICh0eXBlID09ICJlbmRU
YWciKSB7CisgICAgICAgIG1heWJlUG9wQ29udGV4dChjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJD
YXNlKCkpOworICAgICAgICBwdXNoQ29udGV4dChjdXJTdGF0ZS50YWdOYW1lLCBzdGFydE9mTGlu
ZSk7CisgICAgICAgIHJldHVybiBjb250KCk7CisgICAgICB9CisgICAgICByZXR1cm4gY29udCgp
OworICAgIH07CisgIH0KKyAgZnVuY3Rpb24gZW5kY2xvc2V0YWcoZXJyKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKKyAg
ICAgIGlmICh0eXBlID09ICJlbmRUYWciKSB7IHBvcENvbnRleHQoKTsgcmV0dXJuIGNvbnQoKTsg
fQorICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOworICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRz
LmNhbGxlZSk7CisgICAgfTsKKyAgfQorICBmdW5jdGlvbiBtYXliZVBvcENvbnRleHQobmV4dFRh
Z05hbWUpIHsKKyAgICB2YXIgcGFyZW50VGFnTmFtZTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgaWYgKCFjdXJTdGF0ZS5jb250ZXh0KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICAgIHBhcmVudFRhZ05hbWUgPSBjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2Uo
KTsKKyAgICAgIGlmICghS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkocGFy
ZW50VGFnTmFtZSkgfHwKKyAgICAgICAgICAhS2x1ZGdlcy5jb250ZXh0R3JhYmJlcnNbcGFyZW50
VGFnTmFtZV0uaGFzT3duUHJvcGVydHkobmV4dFRhZ05hbWUpKSB7CisgICAgICAgIHJldHVybjsK
KyAgICAgIH0KKyAgICAgIHBvcENvbnRleHQoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBh
dHRyaWJ1dGVzKHR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSAid29yZCIpIHtzZXRTdHlsZSA9ICJh
dHRyaWJ1dGUiOyByZXR1cm4gY29udChhdHRyaWJ1dGUsIGF0dHJpYnV0ZXMpO30KKyAgICBpZiAo
dHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSByZXR1cm4gcGFzcygp
OworICAgIHNldFN0eWxlID0gImVycm9yIjsKKyAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzKTsK
KyAgfQorICBmdW5jdGlvbiBhdHRyaWJ1dGUodHlwZSkgeworICAgIGlmICh0eXBlID09ICJlcXVh
bHMiKSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgaWYgKCFLbHVkZ2Vz
LmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSAiZXJyb3IiOworICAgIHJldHVybiAodHlwZSA9PSAi
ZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSA/IHBhc3MoKSA6IGNvbnQoKTsKKyAg
fQorICBmdW5jdGlvbiBhdHR2YWx1ZSh0eXBlKSB7CisgICAgaWYgKHR5cGUgPT0gInN0cmluZyIp
IHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOworICAgIGlmICh0eXBlID09ICJ3b3JkIiAmJiBL
bHVkZ2VzLmFsbG93VW5xdW90ZWQpIHtzZXRTdHlsZSA9ICJzdHJpbmciOyByZXR1cm4gY29udCgp
O30KKyAgICBzZXRTdHlsZSA9ICJlcnJvciI7CisgICAgcmV0dXJuICh0eXBlID09ICJlbmRUYWci
IHx8IHR5cGUgPT0gInNlbGZDbG9zZVRhZyIpID8gcGFzcygpIDogY29udCgpOworICB9CisgIGZ1
bmN0aW9uIGF0dHZhbHVlbWF5YmUodHlwZSkgeworICAgIGlmICh0eXBlID09ICJzdHJpbmciKSBy
ZXR1cm4gY29udChhdHR2YWx1ZW1heWJlKTsKKyAgICBlbHNlIHJldHVybiBwYXNzKCk7CisgIH0K
KworICByZXR1cm4geworICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJu
IHt0b2tlbml6ZTogaW5UZXh0LCBjYzogW10sIGluZGVudGVkOiAwLCBzdGFydE9mTGluZTogdHJ1
ZSwgdGFnTmFtZTogbnVsbCwgY29udGV4dDogbnVsbH07CisgICAgfSwKKworICAgIHRva2VuOiBm
dW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CisgICAg
ICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKKyAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBz
dHJlYW0uaW5kZW50YXRpb24oKTsKKyAgICAgIH0KKyAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2Uo
KSkgcmV0dXJuIG51bGw7CisKKyAgICAgIHNldFN0eWxlID0gdHlwZSA9IHRhZ05hbWUgPSBudWxs
OworICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CisgICAg
ICBzdGF0ZS50eXBlID0gdHlwZTsKKyAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUg
IT0gImNvbW1lbnQiKSB7CisgICAgICAgIGN1clN0YXRlID0gc3RhdGU7CisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50
OworICAgICAgICAgIGlmIChjb21iKHR5cGUgfHwgc3R5bGUpKSBicmVhazsKKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKKyAgICAgIHJldHVybiBz
ZXRTdHlsZSB8fCBzdHlsZTsKKyAgICB9LAorCisgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwg
dGV4dEFmdGVyLCBmdWxsTGluZSkgeworICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0
OworICAgICAgaWYgKChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAh
PSBpblRleHQpIHx8CisgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KQorICAg
ICAgICByZXR1cm4gZnVsbExpbmUgPyBmdWxsTGluZS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3Ro
IDogMDsKKyAgICAgIGlmIChhbGlnbkNEQVRBICYmIC88IVxbQ0RBVEFcWy8udGVzdCh0ZXh0QWZ0
ZXIpKSByZXR1cm4gMDsKKyAgICAgIGlmIChjb250ZXh0ICYmIC9ePFwvLy50ZXN0KHRleHRBZnRl
cikpCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CisgICAgICB3aGlsZSAoY29udGV4
dCAmJiAhY29udGV4dC5zdGFydE9mTGluZSkKKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJl
djsKKyAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0
OworICAgICAgZWxzZSByZXR1cm4gMDsKKyAgICB9LAorCisgICAgY29tcGFyZVN0YXRlczogZnVu
Y3Rpb24oYSwgYikgeworICAgICAgaWYgKGEuaW5kZW50ZWQgIT0gYi5pbmRlbnRlZCB8fCBhLnRv
a2VuaXplICE9IGIudG9rZW5pemUpIHJldHVybiBmYWxzZTsKKyAgICAgIGZvciAodmFyIGNhID0g
YS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikg
eworICAgICAgICBpZiAoIWNhIHx8ICFjYikgcmV0dXJuIGNhID09IGNiOworICAgICAgICBpZiAo
Y2EudGFnTmFtZSAhPSBjYi50YWdOYW1lIHx8IGNhLmluZGVudCAhPSBjYi5pbmRlbnQpIHJldHVy
biBmYWxzZTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZWxlY3RyaWNDaGFyczogIi8iCisgIH07
Cit9KTsKKworQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsICJ4bWwiKTsKK0NvZGVN
aXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInhtbCIpOworaWYgKCFDb2RlTWly
cm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIikpCisgIENvZGVNaXJyb3Iu
ZGVmaW5lTUlNRSgidGV4dC9odG1sIiwge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc5OGFkZDRhYzY1MzFiYWY0ZTFhZDUyYzNj
MWIxMTFjZDc4MmJmNGEuLjkxZjg1MjFiMzVkOWEzM2JkYTQwZWQxMjY5OGVmYTI0ODYzMGJkZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTk3OCw2ICs5NzgsNyBAQAogICAgICAg
ICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9TY3JpcHRG
b3JtYXR0ZXJXb3JrZXIuanMnLAogICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikv
cmVzb3VyY2VzL2luc3BlY3Rvci9kZXZUb29scy5jc3MnLAogICAgICAgICAgICAgICAgICAgICAn
PChQUk9EVUNUX0RJUikvcmVzb3VyY2VzL2luc3BlY3Rvci9kZXZ0b29sc19leHRlbnNpb25fYXBp
LmpzJywKKyAgICAgICAgICAgICAgICAgICAgJzxAKHdlYmluc3BlY3Rvcl9zdGFuZGFsb25lX2pz
X2ZpbGVzKScsCiAgICAgICAgICAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0b3Jfc3RhbmRhbG9u
ZV9jc3NfZmlsZXMpJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICdpbWFn
ZXMnOiBbCkBAIC0xMDkzLDYgKzEwOTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICdv
dXRwdXRzJzogWyc8KFBST0RVQ1RfRElSKS9yZXNvdXJjZXMvaW5zcGVjdG9yL0RldlRvb2xzLmpz
J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWydweXRob24nLCAnPEAoX3Nj
cmlwdF9uYW1lKScsICc8QChfaW5wdXRfcGFnZSknLCAnPEAoX3NlYXJjaF9wYXRoKScsICc8QChf
b3V0cHV0cyknXSwKICAgICAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgICAg
ICdjb3BpZXMnOiBbeworICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwo
UFJPRFVDVF9ESVIpL3Jlc291cmNlcy9pbnNwZWN0b3InLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJ2ZpbGVzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QCh3ZWJpbnNwZWN0
b3Jfc3RhbmRhbG9uZV9qc19maWxlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjb25jYXRlbmF0ZWRfaGVh
cF9zbmFwc2hvdF93b3JrZXJfanMnLAo=
</data>
<flag name="review"
          id="167386"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>