[Pmwiki-users] Proposal for some extension of the syntax

laurent.riesterer at americas.bnpparibas.com laurent.riesterer at americas.bnpparibas.com
Thu May 22 15:08:45 CDT 2003


--0__=4EBBE7BDDFFD2BC38f9e8a93df938690918c4EBBE7BDDFFD2BC3
Content-type: text/plain; charset="us-ascii"


Hello,

I have played a little with PmWiki and I find it very good. I have coded two small changes I am exposing below.
I am including my modified 'pmwiki.php' for poeple who wants to try it.

Regards,
Laurent.


---------------------------------------------------------------------------
to copy/paste in your sandbox
---------------------------------------------------------------------------

A new syntax (following the one already existing) to allow use of style with tables:

||cellpadding=3 %border%
|||Header ||||
||cell 1 ||cell 2||
||cell 3 ||cell 4||

||
|||Header ||||
||cell 1 ||cell 2||
||cell 3 ||cell 4||


New convenient way to output code when using the Wiki to share sample of code
(and can be customized in the CSS under '.code')

[:
for(i=0; i<10; i++) {
      Object& o = objects[i];
      // do something
}
:]

or even PHP code:

[:
  $kpcount=0;
  while (preg_match("/\\[\\=(.*?)\\=\\]/s",$text,$match)) {
    $text = preg_replace("/\\[\\=(.*?)\\=\\]/s","$kp$kpcount$kp",$text,1);
    $kpv[$kpcount] = $match[1]; $kpcount++;
  }
:]


---------------------------------------------------------------------------
in local.php
---------------------------------------------------------------------------

$HTMLHeaderFmt .= "<style type='text/css'>
.code        { FONT-WEIGHT: bold; COLOR: #802020; FONT-FAMILY: monospace; BACKGROUND-COLOR: #e0e0e0; }
table.border { border-collapse: collapse; }
th.border    { border: thin solid #000000; background-color: #e0e0e0;}
td.border    { border: thin solid #000000; }
</style>";


(See attached file: pmwiki.php)


This message and any attachments (the "message") is
intended solely for the addressees and is confidential. 
If you receive this message in error, please delete it and 
immediately notify the sender. Any use not in accord with 
its purpose, any dissemination or disclosure, either whole 
or partial, is prohibited except formal approval. The internet
can not guarantee the integrity of this message. 
BNP PARIBAS (and its subsidiaries) shall (will) not 
therefore be liable for the message if modified. 

                ---------------------------------------------

Ce message et toutes les pieces jointes (ci-apres le 
"message") sont etablis a l'intention exclusive de ses 
destinataires et sont confidentiels. Si vous recevez ce 
message par erreur, merci de le detruire et d'en avertir 
immediatement l'expediteur. Toute utilisation de ce 
message non conforme a sa destination, toute diffusion 
ou toute publication, totale ou partielle, est interdite, sauf 
autorisation expresse. L'internet ne permettant pas 
d'assurer l'integrite de ce message, BNP PARIBAS (et ses
filiales) decline(nt) toute responsabilite au titre de ce 
message, dans l'hypothese ou il aurait ete modifie.


--0__=4EBBE7BDDFFD2BC38f9e8a93df938690918c4EBBE7BDDFFD2BC3
Content-type: application/octet-stream; 
	name="pmwiki.php"
Content-Disposition: attachment; filename="pmwiki.php"
Content-transfer-encoding: base64

PD9waHAKLyoKICAgIFBtV2lraQogICAgQ29weXJpZ2h0IDIwMDEtMjAwMyBQYXRyaWNrIFIuIE1p
Y2hhdWQgCiAgICBwbWljaGF1ZEBwb2JveC5jb20KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgICBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt
MTMwNyAgVVNBCiovCiMkZXJybGV2ZWwgPSBlcnJvcl9yZXBvcnRpbmcoKTsgZXJyb3JfcmVwb3J0
aW5nKCRlcnJsZXZlbHxFX05PVElDRSk7CmlmIChpbmlfZ2V0KCdyZWdpc3Rlcl9nbG9iYWxzJykp
IHsKICBmb3JlYWNoKCRIVFRQX1BPU1RfVkFSUyBhcyAkaz0+JHYpIHsgdW5zZXQoJHska30pOyB9
CiAgZm9yZWFjaCgkSFRUUF9HRVRfVkFSUyBhcyAkaz0+JHYpIHsgdW5zZXQoJHska30pOyB9CiAg
Zm9yZWFjaCgkSFRUUF9DT09LSUVfVkFSUyBhcyAkaz0+JHYpIHsgdW5zZXQoJHska30pOyB9Cn0K
JFVuc2FmZUdsb2JhbHMgPSBhcnJheV9rZXlzKCRHTE9CQUxTKTsKQGluY2x1ZGVfb25jZSgic2Ny
aXB0cy92ZXJzaW9uLnBocCIpOwokV2lraVRpdGxlID0gIlBtV2lraSI7CiREZWZhdWx0R3JvdXAg
PSAiTWFpbiI7CiREZWZhdWx0VGl0bGUgPSAiSG9tZVBhZ2UiOwokU2NyaXB0VXJsID0gJ2h0dHA6
Ly8nLiRIVFRQX1NFUlZFUl9WQVJTWydIVFRQX0hPU1QnXTsKaWYgKCRIVFRQX1NFUlZFUl9WQVJT
WydTRVJWRVJfUE9SVCddICE9ICI4MCIpCiAgJFNjcmlwdFVybCAuPSAnOicuJEhUVFBfU0VSVkVS
X1ZBUlNbJ1NFUlZFUl9QT1JUJ107CiRTY3JpcHRVcmwgLj0gJEhUVFBfU0VSVkVSX1ZBUlNbJ1ND
UklQVF9OQU1FJ107CiRTY3JpcHREaXIgPSBwcmVnX3JlcGxhY2UoIiMvW14vXSpcJCMiLCIiLCRT
Y3JpcHRVcmwsMSk7CiRXaWtpSW1nVXJsID0gIiRTY3JpcHREaXIvcG13aWtpLTUwLmdpZiI7CiRE
aWZmS2VlcERheXMgPSAzNjUwOwokV2lraURpciA9ICJ3aWtpLmQiOwokQm9keVdpZHRoID0gNjAw
OwokQm9keUxlZnQgPSAyMDsKJERlbGV0ZUtleVdvcmQgPSAiZGVsZXRlIjsKJFJlZGlyZWN0RGVs
YXkgPSAwOwokQXV0aEZ1bmN0aW9uID0gJ0Jhc2ljQXV0aCc7CiREZWZhdWx0UGFzc3dvcmRzID0g
YXJyYXkoJ2FkbWluJz0+JyonLCdhdHRyJz0+JycsJ2VkaXQnPT4nJywncmVhZCc9PicnKTsKJEF1
dGhSZWFsbUZtdCA9ICckV2lraVRpdGxlIC0gJEdyb3VwJzsKJEF1dGhEZW5pZWRGbXQgPSAnQSB2
YWxpZCBwYXNzd29yZCBpcyByZXF1aXJlZCB0byBhY2Nlc3MgdGhpcyBmZWF0dXJlLic7CiREZWZh
dWx0UGFnZVRleHRGbXQgPSAnRGVzY3JpYmUgJFRsaW5rIGhlcmUuJzsKJEdyb3VwSGVhZGVyRm10
ID0gJyRHcm91cC5Hcm91cEhlYWRlcic7CiRHcm91cEF0dHJpYnV0ZXNGbXQgPSAnJEdyb3VwLkdy
b3VwQXR0cmlidXRlcyc7CiRUaW1lRm10ID0gIiVCICVkLCAlWSwgYXQgJWw6JU0gJVAiOwokSFRU
UEhlYWRlcnM9YXJyYXkoIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5
LTE7Iik7CiRIVE1MU3RhcnRGbXQgPSAKICAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzND
Ly9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiAKICAgIFwiaHR0cDovL3d3dy53My5v
cmcvVFIvaHRtbDQwL2xvb3NlLmR0ZFwiPgogIDxodG1sPjxoZWFkPiI7CiRIVE1MVGl0bGVGbXQg
PSAiPHRpdGxlPlwkV2lraVRpdGxlIC0gXCRIVE1MVGl0bGU8L3RpdGxlPiI7CiRIVE1MSGVhZGVy
Rm10ID0gIjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgSFIgeyB0ZXh0LWFsaWduOmxlZnQ7IH0K
ICBCT0RZIHsgZm9udC1mYW1pbHk6dmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmOyB9CiAgLndpa2lo
ZWFkZXIgeyBmb250LXNpemU6MzJweDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQogIC53aWtpb3BzLCAu
d2lraWZvb3RlciB7IGZvbnQtc2l6ZToxM3B4OyB9CiAgLndpa2lib2R5IHsgbWFyZ2luLWxlZnQ6
XCRCb2R5TGVmdHB4OyB3aWR0aDpcJEJvZHlXaWR0aHB4OyB9CiAgLnJldmRhdGUgeyBmb250LWZh
bWlseTp2ZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxMXB4OyB9CiAgLnJldnR5cGUgeyBm
b250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxMXB4OyBmb250LXdlaWdo
dDpib2xkOyB9CiAgLnJldmFkZCB7IGJhY2tncm91bmQ6Izk5ZmY5OTsgY29sb3I6YmxhY2s7IH0K
ICAucmV2ZGVsIHsgYmFja2dyb3VuZDojZmZmZjk5OyBjb2xvcjpibGFjazsgfQo8L3N0eWxlPiI7
CiRIVE1MRW5kRm10ID0gIjwvZGl2PjwvYm9keT48L2h0bWw+IjsKJEhUTUxCb2R5Rm10ID0gIjwv
aGVhZD48Ym9keSBiZ2NvbG9yPScjZmZmZmZmJz48ZGl2IGNsYXNzPSd3aWtpYm9keSc+IjsKJFBh
Z2VOYW1lRm10ID0gJyRHcm91cC4kVGl0bGVfJzsKJFBhZ2VGaWxlRm10ID0gJyRQYWdlTmFtZSc7
CiRQYWdlVXJsRm10ID0gJyRTY3JpcHRVcmwvJEdyb3VwLyRUaXRsZV8nOwokUGFnZUhlYWRlckZt
dCA9ICIKICA8dGFibGUgd2lkdGg9J1wkQm9keVdpZHRoJyBjZWxscGFkZGluZz0nMCcgY2VsbHNw
YWNpbmc9JzAnIGJvcmRlcj0nMCc+CiAgPHRyPjx0ZCB2YWxpZ249J2JvdHRvbScgYWxpZ249J2xl
ZnQnIHdpZHRoPScxMCUnPlwkV2lraUltZyZuYnNwOyZuYnNwOzwvdGQ+CiAgICA8dGQgdmFsaWdu
PSdib3R0b20nIGFsaWduPSdsZWZ0Jz48YSBocmVmPSdcJFNjcmlwdFVybC9cJEdyb3VwJz5cJEdy
b3VwPC9hPiAvPGJyPgogICAgICA8c3BhbiBjbGFzcz0nd2lraWhlYWRlcic+PGEgaHJlZj0nXCRT
Y3JpcHRVcmw/YWN0aW9uPXNlYXJjaCZhbXA7dGV4dD1cJFRpdGxlXyc+XCRUaXRsZTwvYT48L3Nw
YW4+PC90ZD4KICAgIDx0ZCB2YWxpZ249J2JvdHRvbScgYWxpZ249J3JpZ2h0JyBjbGFzcz0nd2lr
aW9wcyc+CiAgICAgIDxhIGhyZWY9J1wkU2NyaXB0VXJsL01haW4vU2VhcmNoV2lraSc+U2VhcmNo
V2lraTwvYT48YnI+CiAgICAgIDxhIGhyZWY9J1wkU2NyaXB0VXJsL1wkR3JvdXAvUmVjZW50Q2hh
bmdlcyc+XCRHcm91cC5SZWNlbnRDaGFuZ2VzPC9hPjxicj4KICAgICAgPGEgaHJlZj0nXCRQYWdl
VXJsP2FjdGlvbj1lZGl0Jz5FZGl0IFBhZ2U8L2E+PGJyPgogICAgICA8YSBocmVmPSdcJFBhZ2VV
cmw/YWN0aW9uPWRpZmYnPlBhZ2UgUmV2aXNpb25zPC9hPjwvdGQ+CiAgIDwvdHI+PC90YWJsZT48
aHI+PHA+IjsKJFBhZ2VGb290ZXJGbXQgPSAiPGhyPjxzbWFsbD4KICA8YSBocmVmPSdcJFBhZ2VV
cmw/YWN0aW9uPWVkaXQnPkVkaXQgUGFnZTwvYT4gLSAKICA8YSBocmVmPSdcJFBhZ2VVcmw/YWN0
aW9uPWRpZmYnPlBhZ2UgUmV2aXNpb25zPC9hPiAtCiAgPGEgaHJlZj0nXCRTY3JpcHRVcmwvUG1X
aWtpL1dpa2lIZWxwJz5XaWtpSGVscDwvYT4gLQogIDxhIGhyZWY9J1wkU2NyaXB0VXJsL01haW4v
U2VhcmNoV2lraSc+U2VhcmNoV2lraTwvYT4gLQogIDxhIGhyZWY9J1wkU2NyaXB0VXJsL1wkR3Jv
dXAvUmVjZW50Q2hhbmdlcyc+UmVjZW50Q2hhbmdlczwvYT48YnI+CiAgUGFnZSBsYXN0IG1vZGlm
aWVkIG9uIFwkTGFzdE1vZGlmaWVkPC9zbWFsbD4iOwokUGFnZUVkaXRGbXQgPSAiPGZvcm0gYWN0
aW9uPSdcJFNjcmlwdFVybCcgbWV0aG9kPSdwb3N0Jz4KICA8aW5wdXQgdHlwZT0naGlkZGVuJyBu
YW1lPSdwYWdlbmFtZScgdmFsdWU9J1wkUGFnZU5hbWUnPgogIDxpbnB1dCB0eXBlPSdoaWRkZW4n
IG5hbWU9J2FjdGlvbicgdmFsdWU9J3Bvc3QnPgogIDxoMT5cJFBhZ2VOYW1lCiAgICA8aW5wdXQg
dHlwZT0nc3VibWl0JyB2YWx1ZT0nIFNhdmUgJz4KICAgIDxpbnB1dCB0eXBlPSdyZXNldCcgdmFs
dWU9JyBSZXNldCAnPjwvaDE+CiAgPHA+PGEgaHJlZj0nXCRTY3JpcHRVcmwvUG1XaWtpL1RpcHNG
b3JFZGl0aW5nJz5UaXBzRm9yRWRpdGluZzwvYT4KICAgIDxhIGhyZWY9J1wkU2NyaXB0VXJsL1Bt
V2lraS9UZXh0Rm9ybWF0dGluZ1J1bGVzJz5UZXh0Rm9ybWF0dGluZ1J1bGVzPC9hPgogIDxwPjx0
ZXh0YXJlYSBuYW1lPSd0ZXh0JyByb3dzPScyNScgY29scz0nODAnCiAgICBvbktleURvd249J2lm
IChldmVudC5rZXlDb2RlID09IDI3KSBldmVudC5yZXR1cm5WYWx1ZT1mYWxzZTsnCiAgICB3cmFw
PSd2aXJ0dWFsJz5cJFRleHQ8L3RleHRhcmVhPjxicj48L2Zvcm0+IjsKJEVkaXRRdWlja1JlZmVy
ZW5jZVBhZ2UgPSAiUG1XaWtpLkVkaXRRdWlja1JlZmVyZW5jZSI7CiRQYWdlRGlmZkZtdCA9ICI8
aDE+PGEgaHJlZj0nXCRQYWdlVXJsJz5cJFBhZ2VOYW1lPC9hPiBSZXZpc2lvbnM8L2gxPiI7CiRQ
YWdlRGlmZkZvb3RGbXQgPSAiPHA+PGhyPkJhY2sgdG8gPGEgaHJlZj0nXCRQYWdlVXJsJz5cJFBh
Z2VOYW1lPC9hPiI7CgokRm10V2lraUxpbmsgPSAnRm10V2lraUxpbmsnOwokRm10VXJsTGluayA9
ICdGbXRVcmxMaW5rJzsKJFdpa2lQYWdlRXhpc3RzRm10ID0gIjxhIGhyZWY9J1wkUGFnZVVybCc+
XCRMaW5rVGV4dDwvYT4iOwokV2lraVBhZ2VDcmVhdGVGbXQgPSAKICAiXCRMaW5rVGV4dDxhIGhy
ZWY9J1wkUGFnZVVybD9hY3Rpb249ZWRpdCc+PzwvYT4iOwokV2lraVBhZ2VDcmVhdGVTcGFjZUZt
dCA9CiAgIlwkTGlua1RleHQ8YSBocmVmPSdcJFBhZ2VVcmw/YWN0aW9uPWVkaXQnPj88L2E+IjsK
JFVybExpbmtGbXQgPSAiPGEgaHJlZj0nXCRVcmwnPlwkTGlua1RleHQ8L2E+IjsKJFVybEltZ0Zt
dCA9ICI8aW1nIHNyYz0nXCRVcmwnIGJvcmRlcj0nMCcgYWx0PScnIGltZz4iOwokR3JvdXBOYW1l
UGF0dGVybj0iW0EtWl1bQS1aYS16MC05XSsiOwokV2lraVdvcmRQYXR0ZXJuPSJbQS1aXVtBLVph
LXowLTldKig/OltBLVpdW2EtejAtOV18W2EtejAtOV1bQS1aXSlbQS1aYS16MC05XSoiOwokRnJl
ZUxpbmtQYXR0ZXJuPSJ7eyg/PihbQS1aYS16XVtBLVphLXowLTldKig/Oig/OltcXHNfXSp8LSlb
QS1aYS16MC05XSspKikoPzpcXHwoKD86KD86W1xcc19dKnwtKVtBLVphLXowLTldKSopKT8pfX0o
KD86LT9bQS1aYS16MC05XSspKikiOwokUGFnZVRpdGxlUGF0dGVybj0iW0EtWl1bQS1aYS16MC05
XSooPzotW0EtWmEtejAtOV0rKSoiOwokVXJsUGF0aFBhdHRlcm49IlteXFxzPD5bXFxdXCJcJygp
XSpbXlxcczw+W1xcXVwiXCcoKSwuP10iOwokVXJsTWV0aG9kUGF0dGVybj0iaHR0cHxmdHB8bmV3
c3xmaWxlfGdvcGhlcnxuYXB8aHR0cHMiOwokSW1nRXh0UGF0dGVybj0iXFwuKGdpZnxqcGd8anBl
Z3xwbmcpIjsKJEludGVyTWFwRmlsZXM9YXJyYXkoJ3NjcmlwdHMvaW50ZXJtYXAudHh0JywnbG9j
YWxtYXAudHh0JywKICAnbG9jYWwvbG9jYWxtYXAudHh0Jyk7CiRMaW5rUGF0dGVybnM9YXJyYXko
KTsKCiRSZWNlbnRDaGFuZ2VzID0gYXJyYXkoCiAgIk1haW4uQWxsUmVjZW50Q2hhbmdlcyI9Pick
R3JvdXAuJFRsaW5rJywKICAnJEdyb3VwLlJlY2VudENoYW5nZXMnPT4nJEdyb3VwLyRUbGluaycp
OwokRG91YmxlQnJhY2tldHMgPSBhcnJheSgnW1skR3JvdXBdXSc9PickR3JvdXAnLCAnW1skVGl0
bGVdXSc9PickVGl0bGUnLAogICdbWyRHcm91cHNwYWNlZF1dJz0+JyRHcm91cHNwYWNlZCcsJ1tb
JFRpdGxlc3BhY2VkXV0nPT4nJFRpdGxlc3BhY2VkJywKICAnW1skVGxpbmtdXSc9PickVGxpbmsn
LAogICdbW25vaGVhZGVyXV0nPT4nJywnW1tub2Zvb3Rlcl1dJz0+JycsJ1tbbm9ncm91cGhlYWRl
cl1dJz0+JycsCiAgJ1tbbm90aXRsZV1dJz0+JycsCiAgJ1tbc3BhY2V3aWtpd29yZHNdXSc9Picn
LAogICdbWyRMYXN0TW9kaWZpZWRdXSc9PickTGFzdE1vZGlmaWVkJywnW1skVmVyc2lvbl1dJz0+
JyRWZXJzaW9uJywKICAnW1skRGVmYXVsdEdyb3VwXV0nPT4nJERlZmF1bHRHcm91cCcsCiAgJ1tb
JEVkaXQnID0+ICdbWyRQYWdlVXJsP2FjdGlvbj1lZGl0ICcsCiAgJ1tbJERpZmYnID0+ICdbWyRQ
YWdlVXJsP2FjdGlvbj1kaWZmICcpOwokSW5saW5lUmVwbGFjZW1lbnRzID0gYXJyYXkoCiAgIi8n
JycnJyguKj8pJycnJycvIiA9PiAiPGVtPjxzdHJvbmc+XCQxPC9zdHJvbmc+PC9lbT4iLAogICIv
JycnKC4qPyknJycvIiA9PiAiPHN0cm9uZz5cJDE8L3N0cm9uZz4iLAogICIvJycoLio/KScnLyIg
PT4gIjxlbT5cJDE8L2VtPiIsCiAgIi9AQCguKj8pQEAvIiA9PiAiPGNvZGU+XCQxPC9jb2RlPiIs
CiAgIi9cXFtcXFsmbHQ7Jmx0O1xcXVxcXS8iID0+ICI8YnIgY2xlYXI9J2FsbCc+IiwKICAiL1xc
WygoWy0rXSkrKSguKj8pXFwxXFxdL2UiID0+IAogICAgIic8Zm9udCBzaXplPVwnXCQyJy5zdHJs
ZW4oJ1wkMScpLidcJz4nLnN0cl9yZXBsYWNlKCdcXFwiJywnXCInLCckMycpLic8L2ZvbnQ+JyIs
CiAgIi9eLS0tLSsvIiA9PiAiPGhyPiIsCiAgIi8mYW1wOyhbQS1aYS16MC05XSs7fCNcZCs7KS8i
ID0+ICImXCQxIik7CiRQYWdlQXR0cmlidXRlcyA9IGFycmF5KAogICdwYXNzd2RyZWFkJyA9PiAn
U2V0IG5ldyByZWFkIHBhc3N3b3JkOicsCiAgJ3Bhc3N3ZGVkaXQnID0+ICdTZXQgbmV3IGVkaXQg
cGFzc3dvcmQ6JywKICAncGFzc3dkYXR0cicgPT4gJ1NldCBuZXcgYXR0cmlidXRlIHBhc3N3b3Jk
OicpOwokSGFuZGxlQWN0aW9ucyA9IGFycmF5KAogICdlZGl0JyA9PiAnSGFuZGxlRWRpdCcsICdw
b3N0JyA9PiAnSGFuZGxlUG9zdCcsCiAgJ2F0dHInID0+ICdIYW5kbGVBdHRyJywgJ3Bvc3RhdHRy
JyA9PiAnSGFuZGxlUG9zdEF0dHInLAogICdzb3VyY2UnID0+ICdIYW5kbGVTb3VyY2UnLCAnZGlm
ZicgPT4gJ0hhbmRsZURpZmYnKTsKJFdpa2lTdHlsZVBhdHRlcm4gPSAnJSV8JVtBLVphLXpdWy0s
PSNcXHdcXHNdKiUnOwokV2lraVN0eWxlVGFncyA9IGFycmF5KAogICdjb2xvcicgPT4gYXJyYXko
ICdzdHlsZScgPT4gJ2NvbG9yOiR2YWx1ZTsgJykgLCAKICAnYmdjb2xvcicgPT4gYXJyYXkoICdz
dHlsZScgPT4gJ2JhY2tncm91bmQtY29sb3I6JHZhbHVlOyAnKSwKICAnZm9udC1zaXplJyA9PiBh
cnJheSggJ3N0eWxlJyA9PiAnZm9udC1zaXplOiR2YWx1ZTsgJyksCiAgJ3RhcmdldCcgPT4gYXJy
YXkoICdhJyA9PiAndGFyZ2V0PVwnJHZhbHVlXCcgJyksCiAgJ2hzcGFjZScgPT4gYXJyYXkoICdp
bWcnID0+ICdoc3BhY2U9XCckdmFsdWVcJyAnKSwKICAndnNwYWNlJyA9PiBhcnJheSggJ2ltZycg
PT4gJ3ZzcGFjZT1cJyR2YWx1ZVwnICcpCik7CgokTm93ID0gdGltZSgpOyAKJE1heEluY2x1ZGVz
ID0gMTA7CiRUYWJsZUNsYXNzID0gIiI7CiRUYWJsZUF0dHIgPSAiIjsKJFRhYmxlQ2VsbEF0dHIg
PSAidmFsaWduPSd0b3AnIjsKJE5ld2xpbmUgPSAiXDI2MiI7CiRLZWVwVG9rZW4gPSAiXDI2MyI7
CiRMaW5rVG9rZW4gPSAiXDI2NCI7CiRDb2RlVG9rZW4gPSAiXDI2NSI7CiRFbmFibGVTdGRDb25m
aWcgPSAxOwoKdW1hc2soMDAyKTsKCiRndmFycyA9IGFycmF5KCdwYWdlbmFtZScsJ2FjdGlvbics
J3RleHQnLCdyZXN0b3JlJyk7CmZvcmVhY2goJGd2YXJzIGFzICR2KSB7CiAgaWYgKGlzc2V0KCRI
VFRQX0dFVF9WQVJTWyR2XSkpICQkdj0kSFRUUF9HRVRfVkFSU1skdl07CiAgZWxzZWlmIChpc3Nl
dCgkSFRUUF9QT1NUX1ZBUlNbJHZdKSkgJCR2PSRIVFRQX1BPU1RfVkFSU1skdl07Cn0KCmlmICgh
aXNzZXQoJHBhZ2VuYW1lKSB8fCAkcGFnZW5hbWU9PSIiKSAKICAkcGFnZW5hbWU9QHN1YnN0cigk
SFRUUF9TRVJWRVJfVkFSU1snUEFUSF9JTkZPJ10sMSk7CmlmICghaXNzZXQoJGFjdGlvbikpICRh
Y3Rpb249J2Jyb3dzZSc7CgppZiAoZmlsZV9leGlzdHMoJ2xvY2FsLnBocCcpKSB7IGluY2x1ZGUo
J2xvY2FsLnBocCcpOyAkTG9jYWxDb25mPTE7IH0KZWxzZWlmIChmaWxlX2V4aXN0cygnbG9jYWwv
bG9jYWwucGhwJykpIAogIHsgaW5jbHVkZSgnbG9jYWwvbG9jYWwucGhwJyk7ICRMb2NhbENvbmY9
MTsgfQppZiAoJEVuYWJsZVN0ZENvbmZpZyAmJiBmaWxlX2V4aXN0cygnc2NyaXB0cy9zdGRjb25m
aWcucGhwJykpIAogIGluY2x1ZGVfb25jZSgnc2NyaXB0cy9zdGRjb25maWcucGhwJyk7Cgpta2dp
ZGRpcigkV2lraURpcik7CmlmICghZmlsZV9leGlzdHMoIiRXaWtpRGlyLy5odGFjY2VzcyIpICYm
IAogICAgJGZwPUBmb3BlbigiJFdpa2lEaXIvLmh0YWNjZXNzIiwidyIpKSB7CiAgZndyaXRlKCRm
cCwiT3JkZXIgRGVueSxBbGxvd1xuRGVueSBmcm9tIGFsbFxuIik7CiAgZmNsb3NlKCRmcCk7Cn0K
aWYgKCFpc3NldCgkRGVmYXVsdFBhZ2UpKSAkRGVmYXVsdFBhZ2U9IiREZWZhdWx0R3JvdXAvJERl
ZmF1bHRUaXRsZSI7CmlmICghaXNzZXQoJFdpa2lJbWcpKSAKICAkV2lraUltZz0iPGEgaHJlZj0n
JFNjcmlwdFVybC8kRGVmYXVsdFBhZ2UnPjxpbWcgc3JjPSckV2lraUltZ1VybCcgCiAgICBhbHQ9
JyRXaWtpVGl0bGUnIGJvcmRlcj0nMCc+PC9hPiI7CmlmICghaXNzZXQoJFdpa2lMaWJEaXJzKSkg
JFdpa2lMaWJEaXJzPWFycmF5KCRXaWtpRGlyLCJ3aWtpbGliLmQiKTsKaWYgKCFpc3NldCgkVXJs
TGlua1RleHRGbXQpKSAkVXJsTGlua1RleHRGbXQ9JFVybExpbmtGbXQ7CgokTGlua1BhdHRlcm5z
WzIwMF1bIlxcYm1haWx0bzooJFVybFBhdGhQYXR0ZXJuKSJdID0gIjxhIGhyZWY9JyQwJz4kMTwv
YT4iOwokTGlua1BhdHRlcm5zWzMwMF1bIlxcYigkVXJsTWV0aG9kUGF0dGVybik6KCRVcmxQYXRo
UGF0dGVybikiXSA9ICRGbXRVcmxMaW5rOwoKZm9yZWFjaCgkSW50ZXJNYXBGaWxlcyBhcyAkbWFw
ZmlsZSkgewogIGlmIChAISgkbWFwZmQ9Zm9wZW4oJG1hcGZpbGUsInIiKSkpIGNvbnRpbnVlOwog
IHdoaWxlICgkbWFwbGluZT1mZ2V0cygkbWFwZmQsMTAyNCkpIHsKICAgIGlmIChwcmVnX21hdGNo
KCIvXlxccypcJC8iLCRtYXBsaW5lKSkgY29udGludWU7CiAgICBsaXN0KCRtYXBpZCwkbWFwdXJs
KSA9IHByZWdfc3BsaXQoIi9cXHMrLyIsJG1hcGxpbmUpOwogICAgJExpbmtQYXR0ZXJuc1s0MDBd
WyJcXGIkbWFwaWQ6KCRVcmxQYXRoUGF0dGVybikiXSA9ICRGbXRVcmxMaW5rOwogICAgJEludGVy
TWFwVXJsc1skbWFwaWRdID0gJG1hcHVybDsKICB9CiAgZmNsb3NlKCRtYXBmZCk7Cn0KCiRMaW5r
UGF0dGVybnNbNTAwXVsiXFxiKCRHcm91cE5hbWVQYXR0ZXJuKFtcXC8uXSkpPygkRnJlZUxpbmtQ
YXR0ZXJuKSJdICA9IAogICRGbXRXaWtpTGluazsKJExpbmtQYXR0ZXJuc1s2MDBdWyRGcmVlTGlu
a1BhdHRlcm5dICA9ICRGbXRXaWtpTGluazsKJExpbmtQYXR0ZXJuc1s3MDBdWyJcXGIkR3JvdXBO
YW1lUGF0dGVybihbXFwvLl0pJFdpa2lXb3JkUGF0dGVybiJdID0gCiAgJEZtdFdpa2lMaW5rOwok
TGlua1BhdHRlcm5zWzc4MF1bIlxcW1xcWyMoW0EtWmEtel1bLS46XFx3XSo/KVxcXVxcXSJdID0g
IjxhIG5hbWU9JyQxJz48L2E+IjsKJExpbmtQYXR0ZXJuc1s4MDBdWyJcXGIkV2lraVdvcmRQYXR0
ZXJuIl0gPSAkRm10V2lraUxpbms7CgokTGFzdE1vZGlmaWVkID0gc3RyZnRpbWUoJFRpbWVGbXQs
JE5vdyk7CgppZiAoJGFjdGlvbj09ImNyeXB0IikgeyBIYW5kbGVDcnlwdCgpOyBleGl0OyB9Cgpp
ZiAoJHBhZ2VuYW1lPT0nJykgJHBhZ2VuYW1lPSREZWZhdWx0UGFnZTsKaWYgKHByZWdfbWF0Y2go
Ii9eKCRHcm91cE5hbWVQYXR0ZXJuKVtcXC8uXT9cJC8iLCRwYWdlbmFtZSwkbWF0Y2gpKSB7CiAg
aWYgKFBhZ2VFeGlzdHMoJG1hdGNoWzFdLicuJy4kbWF0Y2hbMV0pKSBSZWRpcmVjdCgkbWF0Y2hb
MV0uJy4nLiRtYXRjaFsxXSk7CiAgZWxzZSBSZWRpcmVjdCgkbWF0Y2hbMV0uIi4kRGVmYXVsdFRp
dGxlIik7Cn0KaWYgKCFwcmVnX21hdGNoKCIvXigkR3JvdXBOYW1lUGF0dGVybilbXFwvLl0oJFBh
Z2VUaXRsZVBhdHRlcm4pXCQvIiwkcGFnZW5hbWUsCiAgICAkbWF0Y2gpKQogIEFib3J0KCInJHBh
Z2VuYW1lJyBpcyBub3QgYSB2YWxpZCBQbVdpa2kgcGFnZSBuYW1lIik7CiRwYWdlbmFtZT1GbXRQ
YWdlTmFtZSgnJFBhZ2VOYW1lJywkcGFnZW5hbWUpOwoKJGhhbmRsZSA9ICRIYW5kbGVBY3Rpb25z
WyRhY3Rpb25dOwppZiAoZnVuY3Rpb25fZXhpc3RzKCRoYW5kbGUpKSAkaGFuZGxlKCRwYWdlbmFt
ZSk7CmVsc2UgeyBIYW5kbGVCcm93c2UoJHBhZ2VuYW1lKTsgfQpFbmRIVE1MKCk7CkxvY2soLTEp
OwoKZnVuY3Rpb24gU0RWKCYkdmFyLCR2YWwpIHsgaWYgKCFpc3NldCgkdmFyKSkgJHZhcj0kdmFs
OyB9CgpmdW5jdGlvbiBta2dpZGRpcigkZGlyKSB7CiAgZ2xvYmFsICRGb3JjZU1rZGlyOwogIGlm
IChpc19kaXIoJGRpcikpIHJldHVybjsKICBpZiAoISRGb3JjZU1rZGlyKSB7CiAgICAkcGFyZW50
ID0gZGlybmFtZSgkZGlyKTsKICAgICRycGFyZW50ID0gcmVhbHBhdGgoJHBhcmVudCk7CiAgICAk
cGVybXMgPSBmaWxlcGVybXMoJHBhcmVudCk7CiAgICBpZiAodW1hc2soKSE9MCAmJiBwb3NpeF9n
ZXRlZ2lkKCkhPWZpbGVncm91cCgkcGFyZW50KSAmJiAKICAgICAgICAoJHBlcm1zICYgMDIwMDAp
PT0wKSAKICAgICAgQWJvcnQoIlBtV2lraSB3YW50cyBzZXRnaWQgcGVybWlzc2lvbnMgZW5hYmxl
ZCBvbiA8dHQ+JHJwYXJlbnQ8L3R0Pjxicj4KICAgICAgICBiZWZvcmUgaXQgY3JlYXRlcyB0aGUg
PHR0PiRkaXI8L3R0PiBkaXJlY3RvcnkuICA8YnI+CiAgICAgICAgVHJ5IGV4ZWN1dGluZyA8cHJl
PiAgICBjaG1vZCAyNzc3ICRycGFyZW50PC9wcmU+IAogICAgICAgIG9uIHlvdXIgc2VydmVyIGFu
ZCByZWxvYWRpbmcgdGhpcyBwYWdlLiAgQWZ0ZXJ3YXJkcywgeW91IAogICAgICAgIGNhbiByZXN0
b3JlIHRoZSBwZXJtaXNzaW9uczxicj50byB0aGVpciBjdXJyZW50IHNldHRpbmcgYnkgZXhlY3V0
aW5nCiAgICAgICAgPHByZT4gICAgY2htb2QgIi5kZWNvY3QoJHBlcm1zICYgMDM3NzcpLiIgJHJw
YXJlbnQ8L3ByZT5JZiB0aGlzCiAgICAgICAgZG9lc24ndCB3b3JrIGZvciB5b3UsIHNlZSB0aGUg
bGluayBiZWxvdy4iLCJTZXRnaWQiKTsKICB9CiAgbWtkaXIoJGRpciwwNzc3KSBvciAKICAgIEFi
b3J0KCJDYW5ub3QgY3JlYXRlIDx0dD4kZGlyPC90dD48YnI+CiAgICAgIEN1cnJlbnQgZGlyZWN0
b3J5IGlzIDx0dD4iLmdldGN3ZCgpLiI8L3R0PiIsIk1rZGlyIik7Cn0KCmZ1bmN0aW9uIEFib3J0
KCRtc2csJGFyZWYgPSBOVUxMKSB7CiAgU3RhcnRIVE1MKCJQcm9ncmFtIGVycm9yIik7CiAgZWNo
bygiPGgzPlBtV2lraSBjYW4ndCBwcm9jZXNzIHlvdXIgcmVxdWVzdDwvaDM+CiAgICAkbXNnPHA+
V2UgYXJlIHNvcnJ5IGZvciBhbnkgaW5jb252ZW5pZW5jZS4iKTsKICBpZiAoJGFyZWYpIHsKICAg
ICRocmVmID0gImh0dHA6Ly93d3cucG1pY2hhdWQuY29tL3JlZi9QbVdpa2kvJGFyZWYiOwogICAg
ZWNobygiPHA+PGEgaHJlZj0nJGhyZWYnIHRhcmdldD0nX2JsYW5rJz4kaHJlZjwvYT4iKTsKICB9
CiAgRW5kSFRNTCgpOwogIGV4aXQoKTsKfQoKZnVuY3Rpb24gU3RhcnRIVE1MKCR0aXRsZSA9ICIi
LCRwYWdlbmFtZSA9IE5VTEwpIHsKICBnbG9iYWwgJGNhbGxlZFN0YXJ0SFRNTDsgaWYgKCRjYWxs
ZWRTdGFydEhUTUwrKykgcmV0dXJuOwogIGdsb2JhbCAkSFRNTFN0YXJ0Rm10LCRIVE1MVGl0bGVG
bXQsJEhUTUxIZWFkZXJGbXQsJEhUTUxCb2R5Rm10LAogICAgJEhUVFBIZWFkZXJzOwoKICBoZWFk
ZXIoIkV4cGlyZXM6IFR1ZSwgMDEgSmFuIDIwMDIgMDA6MDA6MDAgR01UIik7CiAgQGhlYWRlcigi
TGFzdC1Nb2RpZmllZDogIi5nbXN0cmZ0aW1lKCclYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UJykp
OwogIEBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZh
bGlkYXRlIik7CiAgQGhlYWRlcigiQ2FjaGUtQ29udHJvbDogcG9zdC1jaGVjaz0wLCBwcmUtY2hl
Y2s9MCIsIGZhbHNlKTsKICBmb3JlYWNoKCRIVFRQSGVhZGVycyBhcyAkaCkgQGhlYWRlcigkaCk7
CiAgZWNobyBzdHJfcmVwbGFjZSgnJEhUTUxUaXRsZScsJHRpdGxlLEZtdFBhZ2VOYW1lKCRIVE1M
U3RhcnRGbXQuCiAgICAkSFRNTFRpdGxlRm10LiRIVE1MSGVhZGVyRm10LiRIVE1MQm9keUZtdCwk
cGFnZW5hbWUpKTsKfQoKZnVuY3Rpb24gRW5kSFRNTCgkcGFnZW5hbWU9TlVMTCkgewogIHN0YXRp
YyAkY2FsbGVkOyBpZiAoJGNhbGxlZCsrKSByZXR1cm47CiAgZ2xvYmFsICRjYWxsZWRTdGFydEhU
TUwsJEhUTUxFbmRGbXQ7CiAgaWYgKCRjYWxsZWRTdGFydEhUTUwpIGVjaG8gRm10UGFnZU5hbWUo
JEhUTUxFbmRGbXQsJHBhZ2VuYW1lKTsKfQoKZnVuY3Rpb24gUmVkaXJlY3QoJHBhZ2VuYW1lKSB7
CiAgZ2xvYmFsICRSZWRpcmVjdERlbGF5LCRTY3JpcHRVcmwsJERlZmF1bHRQYWdlOwogIGNsZWFy
c3RhdGNhY2hlKCk7CiAgaWYgKCFQYWdlRXhpc3RzKCRwYWdlbmFtZSkpICRwYWdlbmFtZT0kRGVm
YXVsdFBhZ2U7CiAgJHBhZ2V1cmw9Rm10UGFnZU5hbWUoJyRQYWdlVXJsJywkcGFnZW5hbWUpOwog
IGhlYWRlcigiTG9jYXRpb246ICRwYWdldXJsIik7CiAgZXhpdDsKfQoKZnVuY3Rpb24gRW5jb2Rl
TmV3bGluZSgkc3RyKSAKICB7IHJldHVybiBzdHJfcmVwbGFjZSgiXG4iLCRHTE9CQUxTWyJOZXds
aW5lIl0sJHN0cik7IH0KCmZ1bmN0aW9uIEFzU3BhY2VkKCR3b3JkKSB7CiAgJHdvcmQgPSBzdHJf
cmVwbGFjZSgnXycsJyAnLCR3b3JkKTsKICAkd29yZCA9IHByZWdfcmVwbGFjZSgiLyhbYS16MC05
XSkoW0EtWl0pLyIsIlwkMSBcJDIiLCR3b3JkKTsKICAkd29yZCA9IHByZWdfcmVwbGFjZSgiLyhb
MC05XSsoIHxcJCkpLyIsIiBcJDEiLCR3b3JkKTsKICByZXR1cm4gcHJlZ19yZXBsYWNlKCIvKFtB
LVpdKShbQS1aXVthLXowLTldKS8iLCJcJDEgXCQyIiwkd29yZCk7Cn0KCmZ1bmN0aW9uIEZtdFVy
bExpbmsoJHBhdCwkcmVmLCR0eHQpIHsKICBnbG9iYWwgJEludGVyTWFwVXJscywkSW1nRXh0UGF0
dGVybiwkVXJsTGlua0ZtdCwkVXJsSW1nRm10LCRVcmxMaW5rVGV4dEZtdDsKICAkbGluayA9ICRV
cmxMaW5rRm10OyAkcnR4dD0kcmVmOwogIGlmICghaXNfbnVsbCgkdHh0KSkgeyAkcnR4dD0kdHh0
OyAkbGluaz0kVXJsTGlua1RleHRGbXQ7IH0KICBlbHNlaWYgKHByZWdfbWF0Y2goIi8kSW1nRXh0
UGF0dGVyblwkLyIsJHJlZikpIHsgJGxpbms9JFVybEltZ0ZtdDsgfQogIGlmIChwcmVnX21hdGNo
KCcvXihbXjpdKik6KC4qKSQvJywkcmVmLCRtYXRjaCkpIHsKICAgIGlmICgkSW50ZXJNYXBVcmxz
WyRtYXRjaFsxXV0pICRyZWY9JEludGVyTWFwVXJsc1skbWF0Y2hbMV1dLiRtYXRjaFsyXTsKICB9
CiAgJGxpbmsgPSBzdHJfcmVwbGFjZSgnJFVybCcsJHJlZiwkbGluayk7CiAgcmV0dXJuIHN0cl9y
ZXBsYWNlKCckTGlua1RleHQnLCRydHh0LCRsaW5rKTsKfQoKZnVuY3Rpb24gRm10V2lraUxpbmso
JHBhdCwkcmVmLCRidGV4dCwkb3V0PU5VTEwsJHBuYW1lPU5VTEwpIHsKICBnbG9iYWwgJEdyb3Vw
TmFtZVBhdHRlcm4sJEZyZWVMaW5rUGF0dGVybiwkUGFnZU5hbWVTcGFjZSwkU3BhY2VXaWtpV29y
ZHMsCiAgICAkV2lraVBhZ2VFeGlzdHNGbXQsJFdpa2lQYWdlQ3JlYXRlU3BhY2VGbXQsJFdpa2lQ
YWdlQ3JlYXRlRm10LAogICAgJFBhZ2VUaXRsZVBhdHRlcm47CiAgaWYgKHByZWdfbWF0Y2goIi9e
KCRHcm91cE5hbWVQYXR0ZXJuKShbXFwvLl0pLyIsJHJlZiwkbWF0Y2gpCiAgICAgICYmICRtYXRj
aFsyXT09Jy4nKSAkdHh0PSRtYXRjaFsxXS4nLic7CiAgaWYgKCRtYXRjaFsxXT4iIikgJGdyb3Vw
PSRtYXRjaFsxXTsKICBlbHNlICRncm91cCA9IHByZWdfcmVwbGFjZSgnL1tcXC8uXS4qJC8nLCcn
LAogICAgICAoJHBuYW1lPiIiKSA/ICRwbmFtZSA6ICRHTE9CQUxTWydwYWdlbmFtZSddKTsKICBp
ZiAocHJlZ19tYXRjaCgiLyRGcmVlTGlua1BhdHRlcm5cJC8iLCRyZWYsJGZsKSkgewogICAgJHRp
dGxlPXByZWdfcmVwbGFjZSgnL1tfXFxzXSsvJywnICcsJGZsWzFdLiRmbFsyXSk7CiAgICAkdGl0
bGU9c3RyX3JlcGxhY2UoJyAnLCRQYWdlTmFtZVNwYWNlLHVjd29yZHMoJHRpdGxlKSk7CiAgICAk
dHh0IC49ICRmbFsxXS4kZmxbM107CiAgfSBlbHNlIHsgCiAgICAkdGl0bGUgPSBwcmVnX3JlcGxh
Y2UoJy9eLipbXFwvLl0vJywnJywkcmVmKTsgCiAgICAkdHh0IC49ICgkU3BhY2VXaWtpV29yZHMp
ID8gQXNTcGFjZWQoJHRpdGxlKSA6ICR0aXRsZTsKICB9CiAgaWYgKCRvdXQ9PSdQYWdlTmFtZScp
IHJldHVybiAiJGdyb3VwLiR0aXRsZSI7CiAgaWYgKCFwcmVnX21hdGNoKCIvXiRQYWdlVGl0bGVQ
YXR0ZXJuXCQvIiwkdGl0bGUpKSByZXR1cm4gJHJlZjsKICBpZiAoIWlzX251bGwoJGJ0ZXh0KSkg
JHR4dD0kYnRleHQ7CiAgaWYgKFBhZ2VFeGlzdHMoIiRncm91cC4kdGl0bGUiKSkgJGZtdD0kV2lr
aVBhZ2VFeGlzdHNGbXQ7CiAgZWxzZWlmIChwcmVnX21hdGNoKCcvXFxzLycsJHR4dCkpICRmbXQ9
JFdpa2lQYWdlQ3JlYXRlU3BhY2VGbXQ7CiAgZWxzZSAkZm10PSRXaWtpUGFnZUNyZWF0ZUZtdDsK
ICByZXR1cm4gc3RyX3JlcGxhY2UoJyRMaW5rVGV4dCcsJHR4dCxGbXRQYWdlTmFtZSgkZm10LCIk
Z3JvdXAuJHRpdGxlIikpOwp9CgpmdW5jdGlvbiBGbXRQYWdlTmFtZSgkZm10LCRwYWdlbmFtZSkg
ewogIGdsb2JhbCAkVW5zYWZlR2xvYmFscywkR3JvdXBOYW1lUGF0dGVybiwkUGFnZVRpdGxlUGF0
dGVybiwKICAgICRQYWdlVXJsRm10LCRQYWdlTmFtZUZtdCwkV2lraVdvcmRQYXR0ZXJuOwogIHN0
YXRpYyAkZzsKICBzdGF0aWMgJHFrID0gYXJyYXkoJyRTY3JpcHRVcmwnLCckR3JvdXBzcGFjZWQn
LCckR3JvdXAnLAogICAgJyRUaXRsZXNwYWNlZCcsJyRUaXRsZV8nLCckVGl0bGUnLCckVGxpbmsn
KTsKICAkcXY9JHFrOyAkcXZbMF09JEdMT0JBTFNbJ1NjcmlwdFVybCddOwogIGlmICghaXNfbnVs
bCgkcGFnZW5hbWUpICYmICFwcmVnX21hdGNoKCIvXigkR3JvdXBOYW1lUGF0dGVybilbXFwvLl0o
JFBhZ2VUaXRsZVBhdHRlcm4pXCQvIiwkcGFnZW5hbWUsJG1hdGNoKSkgcmV0dXJuICIiOwogICRx
diA9IEBhcnJheSgkR0xPQkFMU1snU2NyaXB0VXJsJ10sQXNTcGFjZWQoJG1hdGNoWzFdKSwkbWF0
Y2hbMV0sCiAgICBBc1NwYWNlZCgkbWF0Y2hbMl0pLCRtYXRjaFsyXSxzdHJfcmVwbGFjZSgnXycs
JyAnLCRtYXRjaFsyXSksCiAgICBwcmVnX21hdGNoKCIvXiRXaWtpV29yZFBhdHRlcm5cJC8iLCRt
YXRjaFsyXSkgPyAkbWF0Y2hbMl0gOgogICAgICAne3snLnN0cl9yZXBsYWNlKCdfJywnICcsJG1h
dGNoWzJdKS4nfX0nKTsKICAkZm10PXN0cl9yZXBsYWNlKCckUGFnZVVybCcsJFBhZ2VVcmxGbXQs
JGZtdCk7CiAgJGZtdD1zdHJfcmVwbGFjZSgnJFBhZ2VOYW1lJywkUGFnZU5hbWVGbXQsJGZtdCk7
CiAgaWYgKHBocHZlcnNpb24oKT49IjQuMC41IikgJGZtdD1zdHJfcmVwbGFjZSgkcWssJHF2LCRm
bXQpOwogIGVsc2UgZm9yKCRpPTA7JGk8Y291bnQoJHFrKTskaSsrKSAkZm10PXN0cl9yZXBsYWNl
KCRxa1skaV0sJHF2WyRpXSwkZm10KTsKICBpZiAoc3RycG9zKCRmbXQsJyQnKT09PWZhbHNlKSBy
ZXR1cm4gJGZtdDsKICBpZiAoY291bnQoJGcpIT1jb3VudCgkR0xPQkFMUyktY291bnQoJFVuc2Fm
ZUdsb2JhbHMpKSB7CiAgICBmb3JlYWNoKCRHTE9CQUxTIGFzICRuPT4kdikgewogICAgICBpZiAo
aW5fYXJyYXkoJG4sJFVuc2FmZUdsb2JhbHMpKSBjb250aW51ZTsKICAgICAgaWYgKGlzX2FycmF5
KCR2KSkgeyAkVW5zYWZlR2xvYmFsc1tdPSRuOyBjb250aW51ZTsgfQogICAgICAkZ1siXCQkbiJd
PSR2OwogICAgfQogICAga3Jzb3J0KCRnKTsgcmVzZXQoJGcpOwogIH0KICBpZiAoaXNzZXQoJGdb
JGZtdF0pKSByZXR1cm4gJGdbJGZtdF07CiAgaWYgKHBocHZlcnNpb24oKT49IjQuMC41IikgCiAg
ICByZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkZyksYXJyYXlfdmFsdWVzKCRnKSwkZm10
KTsKICBmb3JlYWNoKCRnIGFzICRuPT4kdikgJGZtdD1zdHJfcmVwbGFjZSgkbiwkdiwkZm10KTsK
ICByZXR1cm4gJGZtdDsKfQoKZnVuY3Rpb24gRGlmZigkb2xkdGV4dCwkbmV3dGV4dCkgewogIGds
b2JhbCAkV2lraURpciwkTmV3bGluZTsKICAkdGVtcG9sZCA9IHRlbXBuYW0oJFdpa2lEaXIsIm9s
ZCIpOwogIGlmICgkb2xkZnAgPSBmb3BlbigkdGVtcG9sZCwidyIpKSB7IAogICAgZnB1dHMoJG9s
ZGZwLHN0cl9yZXBsYWNlKCROZXdsaW5lLCJcbiIsJG9sZHRleHQpKTsgCiAgICBmY2xvc2UoJG9s
ZGZwKTsgCiAgfQogICR0ZW1wbmV3ID0gdGVtcG5hbSgkV2lraURpciwibmV3Iik7CiAgaWYgKCRu
ZXdmcCA9IGZvcGVuKCR0ZW1wbmV3LCJ3IikpIHsgCiAgICBmcHV0cygkbmV3ZnAsc3RyX3JlcGxh
Y2UoJE5ld2xpbmUsIlxuIiwkbmV3dGV4dCkpOyAKICAgIGZjbG9zZSgkbmV3ZnApOyAKICB9CiAg
QCRkaWZmID0gYC91c3IvYmluL2RpZmYgJHRlbXBvbGQgJHRlbXBuZXdgOwogIEB1bmxpbmsoJHRl
bXBvbGQpOyBAdW5saW5rKCR0ZW1wbmV3KTsKICByZXR1cm4gJGRpZmY7Cn0KCmZ1bmN0aW9uIFBh
dGNoKCRwYWdlLCRyZXN0b3JlKSB7CiAgZ2xvYmFsICRXaWtpRGlyLCROZXdsaW5lOwogIExvY2so
Mik7CiAgJHR4dGZpbGUgPSB0ZW1wbmFtKCRXaWtpRGlyLCJ0eHQiKTsKICAkcGF0ZmlsZSA9IHRl
bXBuYW0oJFdpa2lEaXIsInBhdCIpOwogIGlmICgkdHh0ZnAgPSBmb3BlbigkdHh0ZmlsZSwidyIp
KSB7CiAgICBmcHV0cygkdHh0ZnAsc3RyX3JlcGxhY2UoJE5ld2xpbmUsIlxuIiwkcGFnZVsndGV4
dCddKSk7CiAgICBmY2xvc2UoJHR4dGZwKTsKICB9CiAga3Jzb3J0KCRwYWdlKTsgcmVzZXQoJHBh
Z2UpOwogIGZvcmVhY2goJHBhZ2UgYXMgJGs9PiR2KSB7CiAgICBpZiAoJGsgPCAkcmVzdG9yZSkg
YnJlYWs7CiAgICBpZiAoIXByZWdfbWF0Y2goJy9eZGlmZjovJywkaykpIGNvbnRpbnVlOwogICAg
aWYgKCRwYXRmcCA9IGZvcGVuKCRwYXRmaWxlLCJ3IikpIHsKICAgICAgZnB1dHMoJHBhdGZwLHN0
cl9yZXBsYWNlKCROZXdsaW5lLCJcbiIsJHYpKTsKICAgICAgZmNsb3NlKCRwYXRmcCk7CiAgICB9
CiAgICAkZGlmZiA9IGAvdXNyL2Jpbi9wYXRjaCAkdHh0ZmlsZSAkcGF0ZmlsZSAyPi9kZXYvbnVs
bGA7CiAgfQogICR0ZXh0ID0gaW1wbG9kZSgnJyxmaWxlKCR0eHRmaWxlKSk7CiAgQHVubGluaygk
dHh0ZmlsZSk7IEB1bmxpbmsoJHBhdGZpbGUpOwogIHJldHVybiAkdGV4dDsKfQoKZnVuY3Rpb24g
UGFnZUV4aXN0cygkcGFnZW5hbWUpIHsKICBnbG9iYWwgJFdpa2lMaWJEaXJzLCRQYWdlRmlsZUZt
dDsKICAkcGFnZWZpbGUgPSBGbXRQYWdlTmFtZSgkUGFnZUZpbGVGbXQsJHBhZ2VuYW1lKTsKICBp
ZiAoISRwYWdlZmlsZSkgcmV0dXJuIGZhbHNlOwogIGZvcmVhY2ggKCRXaWtpTGliRGlycyBhcyAk
ZGlyKSB7CiAgICBpZiAoZmlsZV9leGlzdHMoIiRkaXIvJHBhZ2VmaWxlIikpIHJldHVybiB0cnVl
OwogIH0KICByZXR1cm4gZmFsc2U7Cn0KICAgIApmdW5jdGlvbiBMb2NrKCRvcCkgewogIGdsb2Jh
bCAkV2lraURpcjsKICBzdGF0aWMgJGxvY2tmcCwkY3Vyb3A7CiAgaWYgKCEkbG9ja2ZwKSB7CiAg
ICAkbG9ja2ZwPWZvcGVuKCIkV2lraURpci8uZmxvY2siLCJ3Iikgb3IgCiAgICAgIEFib3J0KCJD
YW5ub3QgYWNxdWlyZSBsb2NrZmlsZSIsIkxvY2tmaWxlIik7CiAgfQogIGlmICgkb3A8MCkgeyBm
bG9jaygkbG9ja2ZwLExPQ0tfVU4pOyBmY2xvc2UoJGxvY2tmcCk7ICRsb2NrZnA9MDsgJGN1cm9w
PTA7IH0KICBlbHNlaWYgKCRvcD09MCkgeyBmbG9jaygkbG9ja2ZwLExPQ0tfVU4pOyAkY3Vyb3A9
MDsgfQogIGVsc2VpZiAoJG9wPT0xICYmICRjdXJvcDwxKSB7IGZsb2NrKCRsb2NrZnAsTE9DS19T
SCk7ICRjdXJvcD0xOyB9CiAgZWxzZWlmICgkb3A9PTIgJiYgJGN1cm9wPDIpIHsgZmxvY2soJGxv
Y2tmcCxMT0NLX0VYKTsgJGN1cm9wPTI7IH0KfQoKZnVuY3Rpb24gUmVhZFBhZ2UoJHBhZ2VuYW1l
LCRkZWZhdWx0dGV4dD1OVUxMKSB7CiAgZ2xvYmFsICRXaWtpTGliRGlycywkUGFnZUZpbGVGbXQs
JERlZmF1bHRQYWdlVGV4dEZtdCwkTm93LCRUaW1lRm10OwogICRwYWdlZmlsZSA9IEZtdFBhZ2VO
YW1lKCRQYWdlRmlsZUZtdCwkcGFnZW5hbWUpOwogIGlmICghJHBhZ2VmaWxlKSByZXR1cm4gZmFs
c2U7CiAgaWYgKGlzX251bGwoJGRlZmF1bHR0ZXh0KSkgJGRlZmF1bHR0ZXh0PSREZWZhdWx0UGFn
ZVRleHRGbXQ7CiAgJHBhZ2VbInRleHQiXSA9IEZtdFBhZ2VOYW1lKCRkZWZhdWx0dGV4dCwkcGFn
ZW5hbWUpOwogICRwYWdlWyJ0aW1lIl0gPSAkTm93OwogIExvY2soMSk7CiAgZm9yZWFjaCAoJFdp
a2lMaWJEaXJzIGFzICRkaXIpIHsKICAgICRmcCA9IEBmb3BlbigiJGRpci8kcGFnZWZpbGUiLCJy
Iik7CiAgICBpZiAoJGZwKSBicmVhazsKICB9CiAgaWYgKCRmcCkgewogICAgd2hpbGUgKCFmZW9m
KCRmcCkpIHsKICAgICAgJGxpbmUgPSBmZ2V0cygkZnAsNDA5Nik7CiAgICAgIHdoaWxlICghc3Ry
c3RyKCRsaW5lLCJcbiIpICYmICFmZW9mKCRmcCkpIHsgJGxpbmUgLj0gZmdldHMoJGZwLDQwOTYp
OyB9CiAgICAgIEBsaXN0KCRrLCR2KSA9IGV4cGxvZGUoIj0iLHJ0cmltKCRsaW5lKSwyKTsKICAg
ICAgJHBhZ2VbJGtdID0gJHY7CiAgICB9CiAgICBmY2xvc2UoJGZwKTsKICB9CiAgJHBhZ2VbJ3Rp
bWVmbXQnXSA9IHN0cmZ0aW1lKCRUaW1lRm10LCRwYWdlWyd0aW1lJ10pOwogIHJldHVybiAkcGFn
ZTsKfQoKZnVuY3Rpb24gV3JpdGVQYWdlKCRwYWdlbmFtZSwkcGFnZSkgewogIGdsb2JhbCAkTm93
LCRIVFRQX1NFUlZFUl9WQVJTLCRXaWtpRGlyLCRQYWdlRmlsZUZtdCwkVmVyc2lvbjsKICBMb2Nr
KDIpOwogIGZvcmVhY2ggKGFycmF5KCd0aW1lZm10JywncGFnZW5hbWUnLCdhY3Rpb24nLCd2ZXJz
aW9uJykgYXMgJGspCiAgICB1bnNldCgkcGFnZVska10pOwogICRwYWdlWyd0aW1lJ10gPSAkTm93
OyAKICAkcGFnZVsnaG9zdCddID0gJEhUVFBfU0VSVkVSX1ZBUlNbJ1JFTU9URV9BRERSJ107CiAg
JHBhZ2VbJ2FnZW50J10gPSAkSFRUUF9TRVJWRVJfVkFSU1snSFRUUF9VU0VSX0FHRU5UJ107CiAg
JHBhZ2VbJ3JldiddID0gJHBhZ2VbJ3JldiddKzE7CiAgJHBhZ2VmaWxlID0gRm10UGFnZU5hbWUo
JFBhZ2VGaWxlRm10LCRwYWdlbmFtZSk7CiAgaWYgKCRwYWdlZmlsZSAmJiAoJGZwPWZvcGVuKCIk
V2lraURpci8kcGFnZWZpbGUiLCJ3IikpKSB7CiAgICBmcHV0cygkZnAsInZlcnNpb249JFZlcnNp
b25cbiIpOwogICAgZm9yZWFjaCgkcGFnZSBhcyAkaz0+JHYpIAogICAgICB7IGlmICgkaz4iIikg
ZnB1dHMoJGZwLEVuY29kZU5ld2xpbmUoIiRrPSR2IikuIlxuIik7IH0KICAgIGZjbG9zZSgkZnAp
OwogIH0gZWxzZSBBYm9ydCgiQ2Fubm90IHdyaXRlIHRleHQgdG8gJHBhZ2VuYW1lICgkcGFnZWZp
bGUpIik7IAp9ICAKCmZ1bmN0aW9uIEVtaXRDb2RlKCRjb2RlLCRkZXB0aCwkYXR0cj0iIikgewog
IHN0YXRpYyAkY3M7CiAgaWYgKCEkY3MpIHsgJGNzID0gYXJyYXkoKTsgfQogIGlmICgkY3NbMF09
PSdUQUJMRScgJiYgJGNvZGUhPSRjc1swXSkgCiAgICB3aGlsZSAoY291bnQoJGNzKT4wKSB7IGVj
aG8gIjwvIixhcnJheV9wb3AoJGNzKSwiPiI7IH0KICBpZiAoJGNvZGU9PSdQJykgeyBlY2hvICgk
Y3NbMF09PSdQUkUnKSA/ICJcbiIgOiAiPFA+IjsgcmV0dXJuOyB9CiAgaWYgKCRjc1swXT09J1BS
RScgJiYgJGNvZGUhPSRjc1swXSkgCiAgICB3aGlsZSAoY291bnQoJGNzKT4wKSB7IGVjaG8gIjwv
IixhcnJheV9wb3AoJGNzKSwiPiI7IH0KICB3aGlsZSAoY291bnQoJGNzKT4kZGVwdGgpIHsgZWNo
byAiPC8iLGFycmF5X3BvcCgkY3MpLCI+IjsgfQogIHdoaWxlIChjb3VudCgkY3MpPCRkZXB0aCkg
eyBhcnJheV9wdXNoKCRjcywkY29kZSk7IGVjaG8gIjwkY29kZSAkYXR0cj4iOyB9CiAgaWYgKCRk
ZXB0aD4wICYmICRjc1skZGVwdGgtMV0gIT0gJGNvZGUpIAogICAgeyBlY2hvICI8LyIsYXJyYXlf
cG9wKCRjcyksIj48JGNvZGUgJGF0dHI+IjsgYXJyYXlfcHVzaCgkY3MsJGNvZGUpOyB9Cn0KCmZ1
bmN0aW9uIEZvcm1hdFRhYmxlUm93KCR4LCRjZWxsYXR0ciwkY2VsbHR5cGUpIHsKICBnbG9iYWwg
JFRhYmxlQ2xhc3M7CiAgJHggPSBwcmVnX3JlcGxhY2UoIi9cXHxcXHxcJC8iLCIiLCR4KTsKICAk
dGQgPSBleHBsb2RlKCd8fCcsJHgpOyAkeT0nJzsKICBmb3IoJGk9MDskaTxjb3VudCgkdGQpOyRp
KyspIHsKICAgIGlmICgkdGRbJGldPT0iIikgY29udGludWU7CiAgICBpZiAocHJlZ19tYXRjaCgi
L15cXHMrXCQvIiwkdGRbJGldKSkgJHRkWyRpXT0iJm5ic3A7IjsKICAgICRhdHRyPSIgJGNlbGxh
dHRyIjsKICAgIGlmIChwcmVnX21hdGNoKCIvXlxccy4qXFxzXCQvIiwkdGRbJGldKSkgeyAkYXR0
ciAuPSAiIGFsaWduPSdjZW50ZXInIjsgfQogICAgZWxzZWlmIChwcmVnX21hdGNoKCIvXlxccy8i
LCR0ZFskaV0pKSB7ICRhdHRyIC49ICIgYWxpZ249J3JpZ2h0JyI7IH0KICAgIGZvcigkY29sc3Bh
bj0xOyRpKyRjb2xzcGFuPGNvdW50KCR0ZCk7JGNvbHNwYW4rKykgCiAgICAgIGlmICgkdGRbJGNv
bHNwYW4rJGldICE9ICIiKSBicmVhazsKICAgIGlmICgkY29sc3Bhbj4xKSB7ICRhdHRyIC49ICIg
Y29sc3Bhbj0nJGNvbHNwYW4nIjsgfQogICAgJHkgLj0gIjwkY2VsbHR5cGUkYXR0ciRUYWJsZUNs
YXNzPiIuJHRkWyRpXS4iPC8kY2VsbHR5cGU+IjsKICB9CiAgcmV0dXJuICI8dHI+JHk8L3RyPiI7
Cn0KCmZ1bmN0aW9uIEVtaXRDZWxsKCR4LCR5KSB7CiAgc3RhdGljICR0YWJsZWF0dHIsJGludGFi
bGU7CiAgaWYgKCR4ID09ICdjZWxsJyB8fCAkeCA9PSAnY2VsbG5yJykgewogICAgaWYgKCEkaW50
YWJsZSkgeyBlY2hvICI8dGFibGUgJHRhYmxlYXR0cj48dHI+PHRkICR5PiI7ICRpbnRhYmxlPTE7
IH0KICAgIGVsc2UgaWYgKCR4ID09ICdjZWxsbnInKSB7IGVjaG8gIjwvdGQ+PC90cj48dHI+PHRk
ICR5PiI7IH0KICAgIGVsc2UgeyBlY2hvICI8L3RkPjx0ZCAkeT4iOyB9CiAgICByZXR1cm47CiAg
fSAKICBpZiAoJGludGFibGUpIHsgZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsgJGludGFibGU9
MDsgfQogICR0YWJsZWF0dHIgPSAkeTsKfQoKZnVuY3Rpb24gQXBwbHlTdHlsZXMoJHgpIHsKICBn
bG9iYWwgJFdpa2lTdHlsZVBhdHRlcm4sJFdpa2lTdHlsZSwkV2lraVN0eWxlVGFnczsKICAkbGlu
ZXBhcnRzID0gcHJlZ19zcGxpdCgiLygkV2lraVN0eWxlUGF0dGVybikvIiwkeCwtMSwKICAgIFBS
RUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7CiAgd2hpbGUgKCRsaW5lcGFydHMpIHsKICAgICRzdHls
ZSA9IGFycmF5KCk7CiAgICBpZiAocHJlZ19tYXRjaCgiL14kV2lraVN0eWxlUGF0dGVyblwkLyIs
JGxpbmVwYXJ0c1swXSkpIHsKICAgICAgJHNsaXN0PXByZWdfc3BsaXQoJy9bXi0jPSxcXHddKy8n
LGFycmF5X3NoaWZ0KCRsaW5lcGFydHMpLC0xLAogICAgICAgIFBSRUdfU1BMSVRfTk9fRU1QVFkp
OwogICAgICBmb3JlYWNoKCRzbGlzdCBhcyAkcykgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcv
XihbXj1dKyk9KC4qKSQvJywkcywkbWF0Y2gpKSB7CiAgICAgICAgICAkc3R5bGVbJG1hdGNoWzFd
XSA9ICRtYXRjaFsyXTsKICAgICAgICB9IGVsc2UgeyAkc3R5bGUgPSBhcnJheV9tZXJnZSgkc3R5
bGUsJFdpa2lTdHlsZVskc10pOyB9CiAgICAgIH0KICAgICAgaWYgKCRzdHlsZVsnZGVmaW5lJ10p
IHsgCiAgICAgICAgJGQgPSAkc3R5bGVbJ2RlZmluZSddOyB1bnNldCgkc3R5bGVbJ2RlZmluZSdd
KTsKICAgICAgICAkV2lraVN0eWxlWyRkXSA9ICRzdHlsZTsKICAgICAgfQogICAgfQogICAgJGwg
PSBhcnJheV9zaGlmdCgkbGluZXBhcnRzKTsKICAgIGlmICgkbD4iIikgewogICAgICB1bnNldCgk
c3R5bGVhdHRyKTsKICAgICAgZm9yZWFjaCgkc3R5bGUgYXMgJGs9PiR2KSB7CiAgICAgICAgaWYg
KCFpc19hcnJheSgkV2lraVN0eWxlVGFnc1ska10pKSBjb250aW51ZTsKICAgICAgICBmb3JlYWNo
KCRXaWtpU3R5bGVUYWdzWyRrXSBhcyAkdGFnPT4kdykgewogICAgICAgICAgJHcgPSBzdHJfcmVw
bGFjZSgnJHZhbHVlJywkdiwkdyk7CiAgICAgICAgICBpZiAoJHRhZz09J3N0eWxlJykgJHN0eWxl
YXR0ci49JHc7CiAgICAgICAgICBlbHNlICRsPXByZWdfcmVwbGFjZSgiLyg8JHRhZyApLyIsIlwk
MSR3ICIsJGwpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoJHN0eWxlYXR0cikgeyAKICAg
ICAgICAkb3V0IC49IHByZWdfcmVwbGFjZSgiLyg8XFx3KyApLyIsIlwkMXN0eWxlPSckc3R5bGVh
dHRyJyAiLAogICAgICAgICAgIjxzcGFuID4kbDwvc3Bhbj4iKTsKICAgICAgfQogICAgICBlbHNl
ICRvdXQgLj0gJGw7CiAgICB9CiAgfQogIHJldHVybiAkb3V0Owp9CiAgCmZ1bmN0aW9uIFByaW50
VGV4dCgkcGFnZW5hbWUsJHRleHQpIHsKICBnbG9iYWwgJE5ld2xpbmUsJEtlZXBUb2tlbiwkTGlu
a1Rva2VuLCRDb2RlVG9rZW4sJExpbmtQYXR0ZXJucywkSW1nRXh0UGF0dGVybiwKICAgICREb3Vi
bGVCcmFja2V0cywkVGFibGVDbGFzcywkVGFibGVBdHRyLCRUYWJsZUNlbGxBdHRyLAogICAgJElu
bGluZVJlcGxhY2VtZW50cywkV2lraVN0eWxlUGF0dGVybjsKICBnbG9iYWwgJEZyZWVMaW5rUGF0
dGVybjsKICBzdGF0aWMgJHJlZmNvdW50OwogIGtzb3J0KCRMaW5rUGF0dGVybnMpOwogIGZvcmVh
Y2goJExpbmtQYXR0ZXJucyBhcyAkbj0+JGEpCiAgICBmb3JlYWNoKCRhIGFzICRwPT4kcikgJGxp
bmtwYXRzWyRwXT0kcjsKICAka3A9JEtlZXBUb2tlbjsgJGxwPSRMaW5rVG9rZW47CiAgJHRleHQg
PSBodG1sc3BlY2lhbGNoYXJzKCR0ZXh0LEVOVF9OT1FVT1RFUyk7CiAgJHRleHQgPSBzdHJfcmVw
bGFjZSgkTmV3bGluZSwiXG4iLCR0ZXh0KTsKICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJcXFxuIiwi
ICIsJHRleHQpOwogICRjZD0kQ29kZVRva2VuOwogICRjZGNvdW50PTA7CiAgd2hpbGUgKHByZWdf
bWF0Y2goIi9cXFtcXDooLio/KVxcOlxcXS9zIiwkdGV4dCwkbWF0Y2gpKSB7CiAgICAkdGV4dCA9
IHByZWdfcmVwbGFjZSgiL1xcW1xcOiguKj8pXFw6XFxdL3MiLCIkY2QkY2Rjb3VudCRjZCIsJHRl
eHQsMSk7CiAgICAkY2R2WyRjZGNvdW50XSA9IHByZWdfcmVwbGFjZSgiL1x0L3MiLCIgICAgIiwk
bWF0Y2hbMV0sLTEpOwogICAgJGNkY291bnQrKzsKICB9CiAgJGtwY291bnQ9MDsKICB3aGlsZSAo
cHJlZ19tYXRjaCgiL1xcW1xcPSguKj8pXFw9XFxdL3MiLCR0ZXh0LCRtYXRjaCkpIHsKICAgICR0
ZXh0ID0gcHJlZ19yZXBsYWNlKCIvXFxbXFw9KC4qPylcXD1cXF0vcyIsIiRrcCRrcGNvdW50JGtw
IiwkdGV4dCwxKTsKICAgICRrcHZbJGtwY291bnRdID0gJG1hdGNoWzFdOyAka3Bjb3VudCsrOwog
IH0KICBmb3JlYWNoKCREb3VibGVCcmFja2V0cyBhcyAkbj0+JGZtdCkgewogICAgaWYgKCRuWzBd
IT0nLycpICR0ZXh0PXN0cl9yZXBsYWNlKCRuLEZtdFBhZ2VOYW1lKCRmbXQsJHBhZ2VuYW1lKSwk
dGV4dCk7CiAgfQogICRsaW5lcyA9IGV4cGxvZGUoIlxuIiwkdGV4dCk7CiAgZm9yZWFjaCgkbGlu
ZXMgYXMgJHgpIHsKICAgIGZvcmVhY2goJERvdWJsZUJyYWNrZXRzIGFzICRuPT4kZm10KSB7CiAg
ICAgIGlmICgkblswXT09Jy8nKSAkeD1wcmVnX3JlcGxhY2UoJG4sJGZtdCwkeCk7CiAgICB9CiAg
ICAkbHBjb3VudCA9IDA7CiAgICAkbHB2ID0gYXJyYXkoKTsKICAgIGZvcmVhY2goJGxpbmtwYXRz
IGFzICRwYXQ9PiRyZXApIHsKICAgICAgJHJlID0gIi9cXFtcXFsoJHBhdCkoIC4qPyk/KFxcXVxc
XSkvIjsKICAgICAgd2hpbGUocHJlZ19tYXRjaCgkcmUsJHgsJG1hdGNoKSkgewogICAgICAgICR4
PXByZWdfcmVwbGFjZSgkcmUsIiRscCRscGNvdW50JGxwIiwkeCwxKTsKICAgICAgICBhcnJheV9w
b3AoJG1hdGNoKTsgJHR4dD1hcnJheV9wb3AoJG1hdGNoKTsKICAgICAgICBpZiAoJHR4dD09IiIp
ICR0eHQ9IiRscCMkbHAiOwogICAgICAgIGVsc2UgewogICAgICAgICAgJHR4dCA9IGx0cmltKCR0
eHQpOwogICAgICAgICAgaWYgKHByZWdfbWF0Y2goIi8kSW1nRXh0UGF0dGVyblwkLyIsJHR4dCkp
IHsKICAgICAgICAgICAgZm9yZWFjaCgkbGlua3BhdHMgYXMgJHA9PiRyKSB7CiAgICAgICAgICAg
ICAgaWYgKHByZWdfbWF0Y2goIi9eJHBcJC8iLCR0eHQpKSB7CiAgICAgICAgICAgICAgICBpZiAo
ZnVuY3Rpb25fZXhpc3RzKCRyKSkgJHR4dCA9ICRyKCRwLCR0eHQsTlVMTCk7IAogICAgICAgICAg
ICAgICAgZWxzZSAkdHh0ID0gcHJlZ19yZXBsYWNlKCRwLCRyLCR0eHQpOwogICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IAogICAg
ICAgIH0KICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRyZXApKSAKICAgICAgICAgICR0eHQg
PSAkcmVwKCRwYXQsJG1hdGNoWzFdLCR0eHQpOwogICAgICAgIGVsc2UgewogICAgICAgICAgJHIg
PSBwcmVnX3JlcGxhY2UoIi9eJHBhdFwkLyIsJHJlcCwkbWF0Y2hbMV0pOwogICAgICAgICAgcHJl
Z19tYXRjaCgiLyhuYW1lfGhyZWYpPScuKj8nLyIsJHIsJG1hdGNoKTsKICAgICAgICAgICR0eHQg
PSAiPGEgIi4kbWF0Y2hbMF0uIj4kdHh0PC9hPiI7CiAgICAgICAgfQogICAgICAgICRscHZbJGxw
Y291bnQrK10gPSAkdHh0OwogICAgICB9CiAgICB9CiAgICBmb3JlYWNoKCRsaW5rcGF0cyBhcyAk
cGF0PT4kcmVwKSB7CiAgICAgICRyZSA9ICIvKCRwYXQpLyI7CiAgICAgIHdoaWxlKHByZWdfbWF0
Y2goJHJlLCR4LCRtYXRjaCkpIHsKICAgICAgICAkeD1wcmVnX3JlcGxhY2UoJHJlLCIkbHAkbHBj
b3VudCRscCIsJHgsMSk7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygkcmVwKSkgCiAgICAg
ICAgICAkdHh0ID0gJHJlcCgkcGF0LCRtYXRjaFsxXSxOVUxMKTsKICAgICAgICBlbHNlICR0eHQg
PSBwcmVnX3JlcGxhY2UoIi9eJHBhdFwkLyIsJHJlcCwkbWF0Y2hbMV0pOwogICAgICAgICRscHZb
JGxwY291bnQrK10gPSAkdHh0OwogICAgICB9CiAgICB9CiAgICBpZiAocHJlZ19tYXRjaCgiL15c
XFtcXFsodGFibGV8Y2VsbHxjZWxsbnJ8dGFibGVlbmQpKFxccy4qPyk/XFxdXFxdLyIsJHgsJG1h
dGNoKSkgewogICAgICBFbWl0Q29kZSgiIiwwKTsKICAgICAgRW1pdENlbGwoJG1hdGNoWzFdLCRt
YXRjaFsyXSk7CiAgICAgICR4PXByZWdfcmVwbGFjZSgiL15cXFtcXFsuKj9cXF1cXF0vIiwiIiwk
eCk7CiAgICB9CiAgICBlbHNlIGlmIChwcmVnX21hdGNoKCIvXlxccypcJC8iLCR4KSkgewogICAg
ICBFbWl0Q29kZSgiUCIsMCk7IGNvbnRpbnVlOwogICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goIi9e
KDorKVteOl0qOi8iLCR4LCRtYXRjaCkpIHsKICAgICAgJHg9cHJlZ19yZXBsYWNlKCIvXjorKFte
Ol0qKTovIiwiPGR0PlxcMTwvZHQ+PGRkPiIsJHgpOwogICAgICBFbWl0Q29kZSgiREwiLHN0cmxl
bigkbWF0Y2hbMV0pKTsKICAgIH0gZWxzZWlmIChwcmVnX21hdGNoKCIvXihcXCorKS8iLCR4LCRt
YXRjaCkpIHsKICAgICAgJHg9cHJlZ19yZXBsYWNlKCIvXlxcKisvIiwiPGxpPiIsJHgpOwogICAg
ICBFbWl0Q29kZSgiVUwiLHN0cmxlbigkbWF0Y2hbMV0pKTsKICAgIH0gZWxzZWlmIChwcmVnX21h
dGNoKCIvXigjKykvIiwkeCwkbWF0Y2gpKSB7CiAgICAgICR4PXByZWdfcmVwbGFjZSgiL14jKy8i
LCI8bGk+IiwkeCk7CiAgICAgIEVtaXRDb2RlKCJPTCIsc3RybGVuKCRtYXRjaFsxXSkpOwogICAg
fSBlbHNlaWYgKHByZWdfbWF0Y2goIi9eXHMvIiwkeCkpIHsKICAgICAgRW1pdENvZGUoIlBSRSIs
MSk7CiAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiL15cXHwoXFx8XFx8LipcXHxcXHwpLyIsJHgs
JG1hdGNoKSkgewogICAgICBFbWl0Q29kZSgiVEFCTEUiLDEsJFRhYmxlQXR0cik7CiAgICAgICR4
PUZvcm1hdFRhYmxlUm93KCRtYXRjaFsxXSwkVGFibGVDZWxsQXR0ciwgInRoIik7CiAgICB9IGVs
c2VpZiAocHJlZ19tYXRjaCgiL15cXHxcXHwuKlxcfFxcfC8iLCR4LCRtYXRjaCkpIHsKICAgICAg
RW1pdENvZGUoIlRBQkxFIiwxLCRUYWJsZUF0dHIpOwogICAgICAkeD1Gb3JtYXRUYWJsZVJvdygk
eCwkVGFibGVDZWxsQXR0ciwgInRkIik7CiAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiL15cXHxc
XHwoLiopLyIsJHgsJG1hdGNoKSkgewogICAgICBFbWl0Q29kZSgiIiwwKTsKICAgICAgaWYgKHBy
ZWdfbWF0Y2goIi8lKFtBLVphLXpdWy0sPSNcXHdcXHNdKiklLyIsJG1hdGNoWzFdLCRjbGFzcykp
IHsKCSRUYWJsZUNsYXNzID0gIiBjbGFzcz1cIiRjbGFzc1sxXVwiIjsKCSRtYXRjaFsxXT1wcmVn
X3JlcGxhY2UoIi8lKFtBLVphLXpdWy0sPSNcXHdcXHNdKiklLyIsJ2NsYXNzPSIkMSInLCRtYXRj
aFsxXSk7CiAgICAgIH0gZWxzZSB7CgkkVGFibGVDbGFzcyA9ICIiOwogICAgICB9CiAgICAgICRU
YWJsZUF0dHIgPSAkbWF0Y2hbMV07CiAgICAgIGNvbnRpbnVlOwogICAgfSBlbHNlaWYgKHByZWdf
bWF0Y2goIi9eKCErKS8iLCR4LCRtYXRjaCkpIHsKICAgICAgJGg9ImgiLnN0cmxlbigkbWF0Y2hb
MV0pOwogICAgICAkeD1wcmVnX3JlcGxhY2UoIi9eKCErKS8iLCI8JGg+IiwkeCkuIjwvJGg+IjsK
ICAgICAgRW1pdENvZGUoIiIsMCk7CiAgICB9IGVsc2UgRW1pdENvZGUoIiIsMCk7CiAgICBmb3Jl
YWNoICgkSW5saW5lUmVwbGFjZW1lbnRzIGFzICRwYXQgPT4gJHJlcCkgCiAgICAgICR4ID0gcHJl
Z19yZXBsYWNlKCRwYXQsJHJlcCwkeCk7CiAgICBpZiAocHJlZ19tYXRjaCgiL15cXHMqKCRscChc
XGQrKSRscClcXHMqXCQvIiwkeCwkbWF0Y2gpKSAKICAgICAgJHggPSBzdHJfcmVwbGFjZSgiIGlt
Zz4iLCI+PGJyPiIsJGxwdlskbWF0Y2hbMl1dKTsgCiAgICBpZiAocHJlZ19tYXRjaCgiL15cXHMq
KCRscChcXGQrKSRscCkuKlxcUy8iLCR4LCRtYXRjaCkpIAogICAgICAkeCA9IHN0cl9yZXBsYWNl
KCRtYXRjaFsxXSwKICAgICAgICBzdHJfcmVwbGFjZSgiIGltZz4iLCIgYWxpZ249J2xlZnQnPiIs
JGxwdlskbWF0Y2hbMl1dKSwgJHgpOyAKICAgIGlmIChwcmVnX21hdGNoKCIvXFxTLiooJGxwKFxc
ZCspJGxwKVxccypcJC8iLCR4LCRtYXRjaCkpIHsKICAgICAgJHJ0ID0gc3RyX3JlcGxhY2UoIiBp
bWc+IiwiIGFsaWduPSdyaWdodCc+IiwkbHB2WyRtYXRjaFsyXV0pOwogICAgICBpZiAoc3Ryc3Ry
KCRydCwiPGltZyIpKSAkeD0kcnQuc3RyX3JlcGxhY2UoJG1hdGNoWzFdLCIiLCR4KTsKICAgICAg
ZWxzZSAkeD1zdHJfcmVwbGFjZSgkbWF0Y2hbMV0sJHJ0LCR4KTsKICAgIH0gCiAgICAkeCA9IHBy
ZWdfcmVwbGFjZSgiLyRscChcXGQrKSRscC9lIiwnc3RyX3JlcGxhY2UoIiBpbWc+IiwiPiIsJGxw
dlskMV0pJywkeCk7CiAgICAkeCA9IHByZWdfcmVwbGFjZSgiLyRscCMkbHAvZSIsJyJbIi4rKyRy
ZWZjb3VudC4iXSInLCR4KTsKICAgIGlmICgkV2lraVN0eWxlUGF0dGVybikgJHggPSBBcHBseVN0
eWxlcygkeCk7CiAgICAkeCA9IHByZWdfcmVwbGFjZSgiLyRrcChcXGQrKSRrcC9lIiwnJGtwdlsk
MV0nLCR4KTsKICAgICR4ID0gcHJlZ19yZXBsYWNlKCIvJGNkKFxcZCspJGNkL2UiLCciPHByZSBj
bGFzcz1jb2RlPiIuJGNkdlskMV0uIjwvcHJlPiInLCR4KTsKICAgIGVjaG8gJHgsIlxuIjsKICB9
CiAgRW1pdENvZGUoIiIsMCk7CiAgRW1pdENlbGwoIiIsIiIpOwp9CgpmdW5jdGlvbiBIYW5kbGVC
cm93c2UoJHBhZ2VuYW1lKSB7CiAgZ2xvYmFsICRHcm91cE5hbWVQYXR0ZXJuLCRQYWdlVGl0bGVQ
YXR0ZXJuLCRNYXhJbmNsdWRlcywkU3BhY2VXaWtpV29yZHMsCiAgICAkR3JvdXBIZWFkZXJGbXQs
JExhc3RNb2RpZmllZCwkUGFnZUhlYWRlckZtdCwkUGFnZVRpdGxlRm10LAogICAgJFBhZ2VGb290
ZXJGbXQ7CiAgJHBhZ2UgPSBSZXRyaWV2ZUF1dGhQYWdlKCRwYWdlbmFtZSwicmVhZCIpOyAKICBp
ZiAoISRwYWdlKSB7IEFib3J0KCJJbnZhbGlkIHBhZ2UgbmFtZSIpOyB9CiAgJExhc3RNb2RpZmll
ZCA9ICRwYWdlWyd0aW1lZm10J107CiAgJGluY2xjb3VudD0wOwogIHdoaWxlICgkaW5jbGNvdW50
PCRNYXhJbmNsdWRlcyAmJgogICAgICBwcmVnX21hdGNoKCIvXFxbXFxbaW5jbHVkZTooLio/KVxc
XVxcXS8iLCRwYWdlWyd0ZXh0J10sJG1hdGNoKSkgewogICAgJGluY2xuYW1lPSRtYXRjaFsxXTsg
JGluY2x0ZXh0PScnOwogICAgaWYgKCFwcmVnX21hdGNoKCIvXiRHcm91cE5hbWVQYXR0ZXJuKFtc
XC8uXSkkUGFnZVRpdGxlUGF0dGVyblwkLyIsCiAgICAgICAgJGluY2xuYW1lKSkKICAgICAgJGlu
Y2xuYW1lID0gRm10UGFnZU5hbWUoJyRHcm91cCcsJHBhZ2VuYW1lKS4iLiRpbmNsbmFtZSI7CiAg
ICAkaW5jbHBhZ2UgPSBSZXRyaWV2ZUF1dGhQYWdlKCRpbmNsbmFtZSwicmVhZCIsZmFsc2UpOwog
ICAgaWYgKCRpbmNscGFnZSkgJGluY2x0ZXh0PSRpbmNscGFnZVsndGV4dCddOwogICAgJHBhZ2Vb
J3RleHQnXSA9IHByZWdfcmVwbGFjZSgiL1xcW1xcW2luY2x1ZGU6KC4qPylcXF1cXF0vIiwKICAg
ICAgJGluY2x0ZXh0LCRwYWdlWyd0ZXh0J10sMSk7CiAgICAkaW5jbGNvdW50Kys7CiAgfQogIGlm
ICghc3Ryc3RyKCRwYWdlWyd0ZXh0J10sIltbbm9ncm91cGhlYWRlcl1dIikpIHsKICAgICRoZG5h
bWUgPSBGbXRQYWdlTmFtZSgkR3JvdXBIZWFkZXJGbXQsJHBhZ2VuYW1lKTsKICAgIGlmICgkaGRu
YW1lICE9ICRwYWdlbmFtZSkgeyAKICAgICAgJGhkcGFnZT1SZWFkUGFnZSgkaGRuYW1lLCIiKTsg
CiAgICAgICRwYWdlWyd0ZXh0J10gPSAkaGRwYWdlWyd0ZXh0J10uJHBhZ2VbJ3RleHQnXTsKICAg
IH0KICB9CiAgTG9jaygwKTsKICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRQYWdlSGVhZGVyRm10KSkg
JFBhZ2VIZWFkZXJGbXQoJHBhZ2VuYW1lLCRwYWdlKTsKICBlbHNlIHsKICAgIFN0YXJ0SFRNTCgk
cGFnZW5hbWUsJHBhZ2VuYW1lKTsKICAgIGlmICghc3Ryc3RyKCRwYWdlWyd0ZXh0J10sJ1tbbm9o
ZWFkZXJdXScpKSAKICAgICAgZWNobyBGbXRQYWdlTmFtZSgkUGFnZUhlYWRlckZtdCwkcGFnZW5h
bWUpOyAKICB9CiAgaWYgKGZ1bmN0aW9uX2V4aXN0cygkUGFnZVRpdGxlRm10KSkgJFBhZ2VUaXRs
ZUZtdCgkcGFnZW5hbWUsJHBhZ2UpOwogIGVsc2UgaWYgKCFzdHJzdHIoJHBhZ2VbJ3RleHQnXSwn
W1tub3RpdGxlXV0nKSkKICAgIGVjaG8gRm10UGFnZU5hbWUoJFBhZ2VUaXRsZUZtdCwkcGFnZW5h
bWUpOwogIGlmIChzdHJzdHIoJHBhZ2VbJ3RleHQnXSwnW1tzcGFjZXdpa2l3b3Jkc11dJykpICRT
cGFjZVdpa2lXb3Jkcz0xOwogIFByaW50VGV4dCgkcGFnZW5hbWUsJHBhZ2VbJ3RleHQnXSk7CiAg
aWYgKCFzdHJzdHIoJHBhZ2VbJ3RleHQnXSwiW1tub2Zvb3Rlcl1dIikpIHsKICAgIGlmIChmdW5j
dGlvbl9leGlzdHMoJFBhZ2VGb290ZXJGbXQpKSAkUGFnZUZvb3RlckZtdCgkcGFnZW5hbWUsJHBh
Z2UpOwogICAgZWxzZSBlY2hvIEZtdFBhZ2VOYW1lKCRQYWdlRm9vdGVyRm10LCRwYWdlbmFtZSk7
CiAgfQogIEVuZEhUTUwoKTsKfQoKZnVuY3Rpb24gSGFuZGxlRWRpdCgkcGFnZW5hbWUpIHsKICBn
bG9iYWwgJE5ld2xpbmUsJFBhZ2VFZGl0Rm10LCRyZXN0b3JlLCRFZGl0UXVpY2tSZWZlcmVuY2VQ
YWdlOwogICRwYWdlID0gUmV0cmlldmVBdXRoUGFnZSgkcGFnZW5hbWUsImVkaXQiKTsKICBpZiAo
ISRwYWdlKSB7IEFib3J0KCI/Y2Fubm90IGVkaXQgJHBhZ2VuYW1lIik7IH0KICBpZiAoJHJlc3Rv
cmUpIHsgJHRleHQgPSBQYXRjaCgkcGFnZSwkcmVzdG9yZSk7IH0KICBlbHNlIHsgJHRleHQgPSAk
cGFnZVsndGV4dCddOyB9CiAgJHRleHQgPSBzdHJfcmVwbGFjZSgkTmV3bGluZSwiXG4iLCR0ZXh0
KTsKICAkdGV4dCA9IGh0bWxzcGVjaWFsY2hhcnMoJHRleHQsRU5UX05PUVVPVEVTKTsKICBpZiAo
ZnVuY3Rpb25fZXhpc3RzKCRQYWdlRWRpdEZtdCkpIHsgJFBhZ2VFZGl0Rm10KCRwYWdlbmFtZSwk
cGFnZSk7IH0KICBlbHNlIHsgCiAgICBTdGFydEhUTUwoIkVkaXQgJHBhZ2VuYW1lIiwkcGFnZW5h
bWUpOyAKICAgIGVjaG8gc3RyX3JlcGxhY2UoJyRUZXh0JywkdGV4dCxGbXRQYWdlTmFtZSgkUGFn
ZUVkaXRGbXQsJHBhZ2VuYW1lKSk7CiAgICBpZiAoJEVkaXRRdWlja1JlZmVyZW5jZVBhZ2UpIHsK
ICAgICAgJHFycGFnZSA9IFJlYWRQYWdlKCRFZGl0UXVpY2tSZWZlcmVuY2VQYWdlKTsKICAgICAg
UHJpbnRUZXh0KCRFZGl0UXVpY2tSZWZlcmVuY2VQYWdlLCRxcnBhZ2VbJ3RleHQnXSk7CiAgICB9
CiAgfQogIEVuZEhUTUwoKTsKfQoKZnVuY3Rpb24gSGFuZGxlUG9zdCgkcGFnZW5hbWUpIHsKICBn
bG9iYWwgJFdpa2lEaXIsJERlbGV0ZUtleVdvcmQsJFJlY2VudENoYW5nZXMsJEhUVFBfUE9TVF9W
QVJTLCROb3csCiAgICAkVGltZUZtdCwkUGFnZUZpbGVGbXQsJE5ld2xpbmUsJERpZmZLZWVwRGF5
czsKICBmb3JlYWNoKCRIVFRQX1BPU1RfVkFSUyBhcyAkaz0+JHYpCiAgICB7ICRuZXdbJGtdPXN0
cl9yZXBsYWNlKCJcciIsIiIsc3RyaXBzbGFzaGVzKCRIVFRQX1BPU1RfVkFSU1ska10pKTsgfQog
IExvY2soMik7CiAgJHBhZ2UgPSBSZXRyaWV2ZUF1dGhQYWdlKCRwYWdlbmFtZSwiZWRpdCIpOwog
IGlmICghJHBhZ2UpIHsgQWJvcnQoIj9jYW5ub3QgcG9zdCAkcGFnZW5hbWUiKTsgfQogICRwYWdl
bmFtZSA9IEZtdFBhZ2VOYW1lKCckUGFnZU5hbWUnLCRwYWdlbmFtZSk7CiAgaWYgKHN0cl9yZXBs
YWNlKCROZXdsaW5lLCJcbiIsJG5ld1sndGV4dCddKT09CiAgICAgIHN0cl9yZXBsYWNlKCROZXds
aW5lLCJcbiIsJHBhZ2VbJ3RleHQnXSkpIAogICAgeyBSZWRpcmVjdCgkcGFnZW5hbWUpOyByZXR1
cm47IH0KICBpZiAoJHBhZ2VbInRpbWUiXT4wKSAKICAgIHsgJG5ld1siZGlmZjokTm93OiIuJHBh
Z2VbJ3RpbWUnXV0gPSBEaWZmKCRuZXdbInRleHQiXSwkcGFnZVsidGV4dCJdKTsgfQogIGZvcmVh
Y2goJG5ldyBhcyAkaz0+JHYpIHsKICAgIGlmICgkaz09J3BhZ2VuYW1lJyB8fCAkaz09J2FjdGlv
bicpIGNvbnRpbnVlOwogICAgJHBhZ2VbJGtdID0gJHY7CiAgfQogICRrZWVwZ210ID0gJE5vdy0k
RGlmZktlZXBEYXlzKjg2NDAwOwogICRrZXlzID0gYXJyYXlfa2V5cygkcGFnZSk7CiAgZm9yZWFj
aCAoJGtleXMgYXMgJGspIAogICAgaWYgKHByZWdfbWF0Y2goIi9eZGlmZjooXFxkKyk6LyIsJGss
JG1hdGNoKSkKICAgICAgaWYgKCRtYXRjaFsxXSA8ICRrZWVwZ210KSB1bnNldCgkcGFnZVska10p
OwogICRwYWdlZmlsZSA9IEZtdFBhZ2VOYW1lKCRQYWdlRmlsZUZtdCwkcGFnZW5hbWUpOwogIGlm
ICgkcGFnZVsndGV4dCddPT0kRGVsZXRlS2V5V29yZCkgCiAgICB7IEByZW5hbWUoIiRXaWtpRGly
LyRwYWdlZmlsZSIsIiRXaWtpRGlyLyRwYWdlZmlsZSwkTm93Iik7IH0KICBlbHNlIFdyaXRlUGFn
ZSgkcGFnZW5hbWUsJHBhZ2UpOwogIGZvcmVhY2goJFJlY2VudENoYW5nZXMgYXMgJHJjZm10ID0+
ICRwZ2ZtdCkgewogICAgJHJjbmFtZT1GbXRQYWdlTmFtZSgkcmNmbXQsJHBhZ2VuYW1lKTsgaWYg
KCEkcmNuYW1lKSBjb250aW51ZTsKICAgICRwZ25hbWU9Rm10UGFnZU5hbWUoJHBnZm10LCRwYWdl
bmFtZSk7IGlmICghJHBnbmFtZSkgY29udGludWU7CiAgICBpZiAoQCRzZWVuWyRyY25hbWVdKysp
IGNvbnRpbnVlOwogICAgJHJjcGFnZSA9IFJlYWRQYWdlKCRyY25hbWUsIiIpOwogICAgJHJjcGFn
ZVsndGV4dCddID0gIiogJHBnbmFtZSAuIC4gLiAuIC4gLiAiLnN0cmZ0aW1lKCRUaW1lRm10LCRO
b3cpLiJcbiIuCiAgICAgIHByZWdfcmVwbGFjZSgiJVxcKiAiLnByZWdfcXVvdGUoJHBnbmFtZSku
IiAuKj8kTmV3bGluZSUiLCIiLAogICAgICAgICRyY3BhZ2VbJ3RleHQnXSk7CiAgICBXcml0ZVBh
Z2UoJHJjbmFtZSwkcmNwYWdlKTsKICB9CiAgUmVkaXJlY3QoJHBhZ2VuYW1lKTsgCn0KCmZ1bmN0
aW9uIEhhbmRsZVNvdXJjZSgkcGFnZW5hbWUpIHsKICBnbG9iYWwgJE5ld2xpbmU7CiAgJHBhZ2Ug
PSBSZXRyaWV2ZUF1dGhQYWdlKCRwYWdlbmFtZSwicmVhZCIpOwogIGlmICghJHBhZ2UpIEFib3J0
KCI/Y2Fubm90IHNvdXJjZSAkcGFnZW5hbWUiKTsKICBMb2NrKDApOwogIGhlYWRlcigiQ29udGVu
dC1UeXBlOiB0ZXh0L3BsYWluIik7CiAgJHRleHQgPSBzdHJfcmVwbGFjZSgkTmV3bGluZSwiXG4i
LCRwYWdlWyd0ZXh0J10pOwogIGVjaG8gJHRleHQ7Cn0KCmZ1bmN0aW9uIEhhbmRsZURpZmYoJHBh
Z2VuYW1lKSB7CiAgZ2xvYmFsICRUaW1lRm10LCROZXdsaW5lLCRQYWdlRGlmZkZtdCwkUGFnZURp
ZmZGb290Rm10OwogICRwYWdlID0gUmV0cmlldmVBdXRoUGFnZSgkcGFnZW5hbWUsInJlYWQiKTsK
ICAkcGFnZXVybCA9IEZtdFBhZ2VOYW1lKCckUGFnZVVybCcsJHBhZ2VuYW1lKTsKICBpZiAoISRw
YWdlKSB7IEFib3J0KCI/Y2Fubm90IGRpZmYgJHBhZ2VuYW1lIik7IH0KICBMb2NrKDApOwogIGty
c29ydCgkcGFnZSk7IHJlc2V0KCRwYWdlKTsKICBTdGFydEhUTUwoIiRwYWdlbmFtZSBSZXZpc2lv
bnMiLCRwYWdlbmFtZSk7CiAgZWNobyBGbXRQYWdlTmFtZSgkUGFnZURpZmZGbXQsJHBhZ2VuYW1l
KTsKICBmb3JlYWNoKCRwYWdlIGFzICRrPT4kdikgewogICAgaWYgKCFwcmVnX21hdGNoKCIvXmRp
ZmY6KFxkKyk6KFxkKykvIiwkaywkbWF0Y2gpKSBjb250aW51ZTsKICAgICRnbXQ9JG1hdGNoWzFd
OwogICAgZWNobyAiPHA+PHRhYmxlIHdpZHRoPScxMDAlJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBh
ZGRpbmc9JzAnIGJvcmRlcj0nMSc+XG4iOwogICAgZWNobyAiPHRyPjx0ZCBjbGFzcz0ncmV2ZGF0
ZSc+Iiwgc3RyZnRpbWUoJFRpbWVGbXQsJGdtdCksIjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD48
dGFibGUgd2lkdGg9JzEwMCUnPlxuIjsKICAgICRkaWZmbGluZXMgPSBleHBsb2RlKCROZXdsaW5l
LCR2LiROZXdsaW5lKTsKICAgICRpbj1hcnJheSgpOyAkb3V0PWFycmF5KCk7ICRkdHlwZT0iIjsK
ICAgIGZvcmVhY2ggKCRkaWZmbGluZXMgYXMgJGQpIHsKICAgICAgaWYgKCRkWzBdPT0nLScgfHwg
JGRbMF09PSdcXCcpIGNvbnRpbnVlOwogICAgICBpZiAoJGRbMF09PSc8JykgeyAkb3V0W109c3Vi
c3RyKCRkLDIpOyBjb250aW51ZTsgfQogICAgICBpZiAoJGRbMF09PSc+JykgeyAkaW5bXT1zdWJz
dHIoJGQsMik7IGNvbnRpbnVlOyB9CiAgICAgIGlmIChwcmVnX21hdGNoKCIvXihcXGQrKSgsKFxc
ZCspKT9hXFxkLyIsJGR0eXBlLCRtYXRjaCkpIHsKICAgICAgICAkbCA9IChpc3NldCgkbWF0Y2hb
M10pKSA/ICJzICIuJG1hdGNoWzFdLiItIi4kbWF0Y2hbM10gOiAiICIuJG1hdGNoWzFdOwogICAg
ICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3JldnR5cGUnPkRlbGV0ZWQgbGlu
ZSRsOjwvdGQ+PC90cj5cbiI7CiAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0nNCcgY2xhc3M9
J3JldmRlbCc+Jm5ic3A7PC90ZD48dGQ+IjsKICAgICAgICBQcmludFRleHQoJHBhZ2VuYW1lLGpv
aW4oJE5ld2xpbmUsJGluKSk7CiAgICAgICAgZWNobyAiPC90ZD48L3RyPlxuIjsKICAgICAgfSBl
bHNlaWYgKHByZWdfbWF0Y2goIi9kKFxcZCspKCwoXFxkKykpPyQvIiwkZHR5cGUsJG1hdGNoKSkg
ewogICAgICAgICRsID0gKGlzc2V0KCRtYXRjaFszXSkpID8gInMgIi4kbWF0Y2hbMV0uIi0iLiRt
YXRjaFszXSA6ICIgIi4kbWF0Y2hbMV07CiAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPScy
JyBjbGFzcz0ncmV2dHlwZSc+QWRkZWQgbGluZSRsOjwvdGQ+PC90cj5cbiI7CiAgICAgICAgZWNo
byAiPHRyPjx0ZCB3aWR0aD0nNCcgY2xhc3M9J3JldmFkZCc+Jm5ic3A7PC90ZD48dGQ+IjsKICAg
ICAgICBQcmludFRleHQoJHBhZ2VuYW1lLGpvaW4oJE5ld2xpbmUsJG91dCkpOwogICAgICAgIGVj
aG8gIjwvdGQ+PC90cj5cbiI7CiAgICAgIH0gZWxzZWlmIChwcmVnX21hdGNoKCIvYyhcXGQrKSgs
KFxcZCspKT8kLyIsJGR0eXBlLCRtYXRjaCkpIHsKICAgICAgICAkbCA9IChpc3NldCgkbWF0Y2hb
M10pKSA/ICJzICIuJG1hdGNoWzFdLiItIi4kbWF0Y2hbM10gOiAiICIuJG1hdGNoWzFdOwogICAg
ICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3JldnR5cGUnPkNoYW5nZWQgbGlu
ZSRsIAoJICBmcm9tOjwvdGQ+PC90cj5cbiI7CiAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0n
NCcgY2xhc3M9J3JldmRlbCc+Jm5ic3A7PC90ZD48dGQ+IjsKICAgICAgICBQcmludFRleHQoJHBh
Z2VuYW1lLGpvaW4oJE5ld2xpbmUsJGluKSk7CiAgICAgICAgZWNobyAiPC90ZD48L3RyPlxuIjsK
ICAgICAgICBlY2hvICI8dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSdyZXZ0eXBlJz50bzo8L3Rk
PjwvdHI+IjsKICAgICAgICBlY2hvICI8dHI+PHRkIHdpZHRoPSc0JyBjbGFzcz0ncmV2YWRkJz4m
bmJzcDs8L3RkPjx0ZD4iOwogICAgICAgIFByaW50VGV4dCgkcGFnZW5hbWUsam9pbigkTmV3bGlu
ZSwkb3V0KSk7CiAgICAgICAgZWNobyAiPC90ZD48L3RyPlxuIjsKICAgICAgfQogICAgICAkaW49
YXJyYXkoKTsgJG91dD1hcnJheSgpOyAkZHR5cGU9JGQ7CiAgICB9CiAgICBlY2hvICI8L3RhYmxl
PjwvdGQ+PC90cj48L3RhYmxlPlxuIjsKICAgIGVjaG8gIjxwPjxhIGhyZWY9JyRwYWdldXJsP2Fj
dGlvbj1lZGl0JmFtcDtyZXN0b3JlPSRrJz48c3BhbiBjbGFzcz0ncmV2ZGF0ZSc+UmVzdG9yZTwv
c3Bhbj48L2E+XG4iOwogIH0KICBlY2hvIEZtdFBhZ2VOYW1lKCRQYWdlRGlmZkZvb3RGbXQsJHBh
Z2VuYW1lKTsKICBFbmRIVE1MKCk7Cn0KCmZ1bmN0aW9uIEhhbmRsZUNyeXB0KCkgewogIGdsb2Jh
bCAkSFRUUF9QT1NUX1ZBUlMsJFNjcmlwdFVybDsKICBTdGFydEhUTUwoIkVuY3J5cHQgUGFzc3dv
cmQiKTsKICAkcGFzc3dkID0gQCRIVFRQX1BPU1RfVkFSU1sicGFzc3dkIl07CiAgaWYgKCRwYXNz
d2QpIHsgZWNobyAiPHA+RW5jcnlwdGVkIHBhc3N3b3JkID0gIixjcnlwdCgkcGFzc3dkKSwiPC9w
PiI7IH0KICBlY2hvICI8cD48Zm9ybSBhY3Rpb249JyRTY3JpcHRVcmwnIG1ldGhvZD0nUE9TVCc+
CiAgICBFbnRlciBwYXNzd29yZCB0byBlbmNyeXB0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0n
cGFzc3dkJyB2YWx1ZT0nJz4KICAgIDxpbnB1dCB0eXBlPSdzdWJtaXQnPgogICAgPGlucHV0IHR5
cGU9J2hpZGRlbicgbmFtZT0nYWN0aW9uJyB2YWx1ZT0nY3J5cHQnPjwvZm9ybT4iOwogIEVuZEhU
TUwoKTsKfQoKZnVuY3Rpb24gQmFzaWNBdXRoKCRwYWdlbmFtZSwkbGV2ZWwsJGF1dGhwcm9tcHQ9
dHJ1ZSkgewogIGdsb2JhbCAkSFRUUF9TRVJWRVJfVkFSUywkQXV0aFJlYWxtRm10LCRBdXRoRGVu
aWVkRm10LCREZWZhdWx0UGFzc3dvcmRzLAogICAgJEdyb3VwQXR0cmlidXRlc0ZtdDsKICAkcGFn
ZSA9IFJlYWRQYWdlKCRwYWdlbmFtZSk7CiAgaWYgKCEkcGFnZSkgeyByZXR1cm4gZmFsc2U7IH0K
ICBAJHBhc3N3ZCA9ICRwYWdlWyJwYXNzd2QkbGV2ZWwiXTsKICBpZiAoJHBhc3N3ZD09IiIpIHsg
CiAgICAkZ3JvdXBwZyA9IFJlYWRQYWdlKEZtdFBhZ2VOYW1lKCRHcm91cEF0dHJpYnV0ZXNGbXQs
JHBhZ2VuYW1lKSk7CiAgICBAJHBhc3N3ZCA9ICRncm91cHBnWyJwYXNzd2QkbGV2ZWwiXTsKICB9
CiAgaWYgKCRwYXNzd2Q9PSIiKSB7ICRwYXNzd2Q9JERlZmF1bHRQYXNzd29yZHNbJGxldmVsXTsg
fQogIGlmICgkcGFzc3dkPT0iIikgcmV0dXJuICRwYWdlOwogIGZvcmVhY2ggKGFycmF5X21lcmdl
KCREZWZhdWx0UGFzc3dvcmRzWydhZG1pbiddLCRwYXNzd2QpIGFzICRwdykgCiAgICBpZiAoY3J5
cHQoJEhUVFBfU0VSVkVSX1ZBUlNbJ1BIUF9BVVRIX1BXJ10sJHB3KT09JHB3KSByZXR1cm4gJHBh
Z2U7CiAgaWYgKCEkYXV0aHByb21wdCkgcmV0dXJuIGZhbHNlOwogICRyZWFsbT1GbXRQYWdlTmFt
ZSgkQXV0aFJlYWxtRm10LCRwYWdlbmFtZSk7CiAgSGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBC
YXNpYyByZWFsbT1cIiRyZWFsbVwiIik7CiAgSGVhZGVyKCJIVFRQLzEuMCA0MDEgVW5hdXRob3Jp
emVkIik7CiAgZWNobyBGbXRQYWdlTmFtZSgkQXV0aERlbmllZEZtdCwkcGFnZW5hbWUpOwogIGV4
aXQ7Cn0KCmZ1bmN0aW9uIFJldHJpZXZlQXV0aFBhZ2UoJHBhZ2VuYW1lLCRsZXZlbCwkYXV0aHBy
b21wdD10cnVlKSB7CiAgZ2xvYmFsICRBdXRoRnVuY3Rpb247CiAgaWYgKCFmdW5jdGlvbl9leGlz
dHMoJEF1dGhGdW5jdGlvbikpIAogICAgQWJvcnQoIj9JbnZhbGlkIEF1dGhGdW5jdGlvbiBzcGVj
aWZpZWQ6ICRBdXRoRnVuY3Rpb24iLCJBdXRoRnVuY3Rpb24iKTsKICByZXR1cm4gJEF1dGhGdW5j
dGlvbigkcGFnZW5hbWUsJGxldmVsLCRhdXRocHJvbXB0KTsKfQoKZnVuY3Rpb24gSGFuZGxlQXR0
cigkcGFnZW5hbWUpIHsKICBnbG9iYWwgJFNjcmlwdFVybCwkUGFnZUF0dHJpYnV0ZXM7CiAgJHBh
Z2UgPSBSZXRyaWV2ZUF1dGhQYWdlKCRwYWdlbmFtZSwiYXR0ciIpOwogIGlmICghJHBhZ2UpIHsg
QWJvcnQoIj91bmFibGUgdG8gcmVhZCAkcGFnZW5hbWUiKTsgfQogIFN0YXJ0SFRNTCgiRWRpdCAk
cGFnZW5hbWUgQXR0cmlidXRlcyIsJHBhZ2VuYW1lKTsKICBlY2hvICI8aDE+JHBhZ2VuYW1lIEF0
dHJpYnV0ZXM8L2gxPgogICAgPGZvcm0gYWN0aW9uPSckU2NyaXB0VXJsJyBtZXRob2Q9J3Bvc3Qn
PgogICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0aW9uJyB2YWx1ZT0ncG9zdGF0dHIn
PgogICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ncGFnZW5hbWUnIHZhbHVlPSckcGFnZW5h
bWUnPgogICAgPHA+RW50ZXIgbmV3IGF0dHJpYnV0ZXMgZm9yIHRoaXMgcGFnZSBiZWxvdy4gIExl
YXZpbmcgYSBmaWVsZCBibGFuawogICAgd2lsbCBsZWF2ZSB0aGUgYXR0cmlidXRlIHVuY2hhbmdl
ZC4gIFRvIGNsZWFyIGFuIGF0dHJpYnV0ZSwgZW50ZXIgJ2NsZWFyJy4KICAgIDx0YWJsZT4iOwog
IGZvcmVhY2goJFBhZ2VBdHRyaWJ1dGVzIGFzICRhdHRyPT4kcHJvbXB0KSB7CiAgICAkdmFsdWUg
PSAoc3Vic3RyKCRhdHRyLDAsNik9PSdwYXNzd2QnKSA/ICcnIDogJHBhZ2VbJGtdOwogICAgZWNo
byAiPHRyPjx0ZD4kcHJvbXB0PC90ZD4KICAgICAgPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1l
PSckYXR0cicgdmFsdWU9JyR2YWx1ZSc+PC90ZD48L3RyPiI7CiAgfQogIGVjaG8gIjwvdGFibGU+
PGlucHV0IHR5cGU9J3N1Ym1pdCc+PC9mb3JtPiI7CiAgRW5kSFRNTCgpOwp9CgpmdW5jdGlvbiBI
YW5kbGVQb3N0QXR0cigkcGFnZW5hbWUpIHsKICBnbG9iYWwgJEhUVFBfUE9TVF9WQVJTLCRQYWdl
QXR0cmlidXRlczsKICAkcGFnZSA9IFJldHJpZXZlQXV0aFBhZ2UoJHBhZ2VuYW1lLCJhdHRyIik7
CiAgaWYgKCEkcGFnZSkgeyBBYm9ydCgiP2Nhbm5vdCBnZXQgJHBhZ2VuYW1lIik7IH0KICBmb3Jl
YWNoKCRQYWdlQXR0cmlidXRlcyBhcyAkaz0+JHYpIHsKICAgICRuZXdwdyA9ICRIVFRQX1BPU1Rf
VkFSU1ska107CiAgICBpZiAoJG5ld3B3PT0iY2xlYXIiKSB1bnNldCgkcGFnZVska10pOwogICAg
ZWxzZSBpZiAoJG5ld3B3PiIiKSAkcGFnZVska109Y3J5cHQoJG5ld3B3KTsKICB9CiAgV3JpdGVQ
YWdlKCRwYWdlbmFtZSwkcGFnZSk7CiAgUmVkaXJlY3QoJHBhZ2VuYW1lKTsKICBleGl0Owp9Cgo/
Pgo=

--0__=4EBBE7BDDFFD2BC38f9e8a93df938690918c4EBBE7BDDFFD2BC3--





More information about the pmwiki-users mailing list