Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
#16 2018-03-16 23:38:44
- uli
- Moderator

- From: Cologne
- Registered: 2006-08-15
- Posts: 4,316
Re: Making your plugins 4.7-aware
etc wrote #310046:
Weird, I don’t see in the code what (after
prefs_idis removed) could be wrong.
I appreciate very much that you looked into the code.
When you try to change e.g. the paths to mysql/mysqldump, do they get stored in your installation? Mine are “reset” on saving.
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Re: Making your plugins 4.7-aware
uli wrote #310047:
I appreciate very much that you looked into the code.
When you try to change e.g. the paths to mysql/mysqldump, do they get stored in your installation? Mine are “reset” on saving.
^^ bug confirmed. Also the “save” button in the “DB Backup” page reads save_button.
Yiannis
——————————
NeMe | hblack.art | EMAP | A Sea change | Toolkit of Care
I do my best editing after I click on the submit button.
Offline
Re: Making your plugins 4.7-aware
This works on 4.7 for me:
# Name: rss_admin_db_manager v4.4.1
# Type: Admin/Public plugin
# Database management system.
# Author: Rob Sable
# URL: http://www.wilshireone.com/
# Recommended load order: 5
# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................
YToxMTp7czo0OiJuYW1lIjtzOjIwOiJyc3NfYWRtaW5fZGJfbWFuYWdlciI7czo2OiJhdXRo
b3IiO3M6OToiUm9iIFNhYmxlIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI3OiJodHRwOi8vd3d3
LndpbHNoaXJlb25lLmNvbS8iO3M6NzoidmVyc2lvbiI7czo1OiI0LjQuMSI7czoxMToiZGVz
Y3JpcHRpb24iO3M6Mjc6IkRhdGFiYXNlIG1hbmFnZW1lbnQgc3lzdGVtLiI7czo0OiJjb2Rl
IjtzOjE5NDQ5OiJpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQogICAgYWRkX3By
aXZzKCdyc3NfZGJfbWFuJywgJzEnKTsNCiAgICByZWdpc3Rlcl90YWIoImV4dGVuc2lvbnMi
LCAicnNzX2RiX21hbiIsICJEQiBNYW5hZ2VyIik7DQogICAgcmVnaXN0ZXJfY2FsbGJhY2so
InJzc19kYl9tYW4iLCAicnNzX2RiX21hbiIpOw0KDQogICAgYWRkX3ByaXZzKCdyc3Nfc3Fs
X3J1bicsICcxJyk7DQogICAgcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgInJzc19zcWxf
cnVuIiwgIlJ1biBTUUwiKTsNCiAgICByZWdpc3Rlcl9jYWxsYmFjaygicnNzX3NxbF9ydW4i
LCAicnNzX3NxbF9ydW4iKTsNCg0KICAgIGFkZF9wcml2cygncnNzX2RiX2JrJywgJzEnKTsN
CiAgICByZWdpc3Rlcl90YWIoImV4dGVuc2lvbnMiLCAicnNzX2RiX2JrIiwgIkRCIEJhY2t1
cCIpOw0KICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJyc3NfZGJfYmsiLCAicnNzX2RiX2JrIik7
DQp9DQoNCmZ1bmN0aW9uIHJzc19kYl9iaygkZXZlbnQsICRzdGVwKSB7DQogIGdsb2JhbCAk
cHJlZnMsICRyc3NfZGJia19wYXRoLCAkcnNzX2RiYmtfZHVtcCwgJHJzc19kYmJrX215c3Fs
LCAkcnNzX2RiYmtfbG9jaywgJHJzc19kYmJrX3R4cGxvZywgJHJzc19kYmJrX2RlYnVnLCAk
REIsICRmaWxlX2Jhc2VfcGF0aDsNCg0KICBpZiAoIWlzc2V0KCRyc3NfZGJia19sb2NrKSkg
ew0KICAgICRyc3NfZGJia19sb2NrID0gIjEiOw0KICAgICRycyA9IHNhZmVfaW5zZXJ0KCd0
eHBfcHJlZnMnLCAibmFtZT0ncnNzX2RiYmtfbG9jaycsIHZhbD0nJHJzc19kYmJrX2xvY2sn
Iik7DQogIH0NCg0KICBpZiAoIWlzc2V0KCRyc3NfZGJia190eHBsb2cpKSB7DQogICAgJHJz
c19kYmJrX3R4cGxvZyA9ICIxIjsNCiAgICAkcnMgPSBzYWZlX2luc2VydCgndHhwX3ByZWZz
JywgIm5hbWU9J3Jzc19kYmJrX3R4cGxvZycsIHZhbD0nJHJzc19kYmJrX3R4cGxvZyciKTsN
CiAgfQ0KDQogIGlmICghaXNzZXQoJHJzc19kYmJrX2RlYnVnKSkgew0KICAgICRyc3NfZGJi
a19kZWJ1ZyA9ICIwIjsNCiAgICAkcnMgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIm5h
bWU9J3Jzc19kYmJrX2RlYnVnJywgdmFsPSckcnNzX2RiYmtfZGVidWcnIik7DQogIH0NCg0K
ICBpZiAoIWlzc2V0KCRyc3NfZGJia19wYXRoKSkgew0KICAgICRyc3NfZGJia19wYXRoID0g
JGZpbGVfYmFzZV9wYXRoOw0KICAgICRycyA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAi
bmFtZT0ncnNzX2RiYmtfcGF0aCcsIHZhbD0nIi5hZGRzbGFzaGVzKCRyc3NfZGJia19wYXRo
KS4iJyIpOw0KICB9DQoNCiAgaWYgKCFpc3NldCgkcnNzX2RiYmtfZHVtcCkpIHsNCiAgICAk
cnNzX2RiYmtfZHVtcCA9ICJteXNxbGR1bXAiOw0KICAgICRycyA9IHNhZmVfaW5zZXJ0KCd0
eHBfcHJlZnMnLCAibmFtZT0ncnNzX2RiYmtfZHVtcCcsIHZhbD0nIi5hZGRzbGFzaGVzKCRy
c3NfZGJia19kdW1wKS4iJyIpOw0KICB9DQoNCiAgaWYgKCFpc3NldCgkcnNzX2RiYmtfbXlz
cWwpKSB7DQogICAgJHJzc19kYmJrX215c3FsID0gIm15c3FsIjsNCiAgICAkcnMgPSBzYWZl
X2luc2VydCgndHhwX3ByZWZzJywgIm5hbWU9J3Jzc19kYmJrX215c3FsJywgdmFsPSciLmFk
ZHNsYXNoZXMoJHJzc19kYmJrX215c3FsKS4iJyIpOw0KICB9DQoNCiAgaW5jbHVkZSh0eHBh
dGggLiAnL2luY2x1ZGUvdHhwX3ByZWZzLnBocCcpOw0KDQogICRia3BhdGggPSAkcnNzX2Ri
YmtfcGF0aDsNCiAgJGlzd2luID0gcHJlZ19tYXRjaCgnL1dpbi8nLHBocF91bmFtZSgpKTsN
CiAgJG15c3FsX2h1cCA9ICcgLWgnLiREQi0+aG9zdC4nIC11Jy4kREItPnVzZXIuJyAtcCcu
ZXNjYXBlc2hlbGxjbWQoJERCLT5wYXNzKTsNCiAgICAkdHhwbG9ncHMgPSBwcygncnNzX2Ri
YmtfdHhwbG9nJyk7DQoNCiAgaWYgKHBzKCJzYXZlIikpIHsNCg0KICAgICAgcGFnZXRvcCgi
REIgTWFuYWdlciIsICJQcmVmZXJlbmNlcyBTYXZlZCIpOw0KICAgICAgc2FmZV91cGRhdGUo
InR4cF9wcmVmcyIsICJ2YWwgPSAnIi5hZGRzbGFzaGVzKHBzKCdyc3NfZGJia19wYXRoJykp
LiInIiwibmFtZSA9ICdyc3NfZGJia19wYXRoJyIpOw0KICAgICAgc2FmZV91cGRhdGUoInR4
cF9wcmVmcyIsICJ2YWwgPSAnIi5hZGRzbGFzaGVzKHBzKCdyc3NfZGJia19kdW1wJykpLiIn
IiwibmFtZSA9ICdyc3NfZGJia19kdW1wJyIpOw0KICAgICAgc2FmZV91cGRhdGUoInR4cF9w
cmVmcyIsICJ2YWwgPSAnIi5hZGRzbGFzaGVzKHBzKCdyc3NfZGJia19teXNxbCcpKS4iJyIs
Im5hbWUgPSAncnNzX2RiYmtfbXlzcWwnIik7DQogICAgICBzYWZlX3VwZGF0ZSgidHhwX3By
ZWZzIiwgInZhbCA9ICciLnBzKCdyc3NfZGJia19sb2NrJykuIiciLCJuYW1lID0gJ3Jzc19k
YmJrX2xvY2snIik7DQogICAgICBpZiAoaXNzZXQoJHR4cGxvZ3BzKSkgc2FmZV91cGRhdGUo
InR4cF9wcmVmcyIsICJ2YWwgPSAnIi5wcygncnNzX2RiYmtfdHhwbG9nJykuIiciLCJuYW1l
ID0gJ3Jzc19kYmJrX3R4cGxvZyciKTsNCiAgICAgIHNhZmVfdXBkYXRlKCJ0eHBfcHJlZnMi
LCAidmFsID0gJyIucHMoJ3Jzc19kYmJrX2RlYnVnJykuIiciLCJuYW1lID0gJ3Jzc19kYmJr
X2RlYnVnJyIpOw0KICAgICAgaGVhZGVyKCJMb2NhdGlvbjogaW5kZXgucGhwP2V2ZW50PXJz
c19kYl9iayIpOw0KDQogIH0gIGVsc2UgaWYgKGdwcygiYmsiKSkgew0KDQogICAgICAgICAg
ICAkYmtfdGFibGUgPSAoZ3BzKCJia190YWJsZSIpKSA/ICIgLS10YWJsZXMgIi5ncHMoImJr
X3RhYmxlIikuIiAiIDogIiI7DQogICAgICAgICAgICAkdGFicGF0aCA9IChncHMoImJrX3Rh
YmxlIikpID8gIi0iLmdwcygiYmtfdGFibGUiKSA6ICIiOw0KICAgICAgJGd6aXAgPSBncHMo
Imd6aXAiKTsNCiAgICAgICAgICAgICRmaWxlbmFtZSA9IHRpbWUoKS4nLScuJERCLT5kYi4k
dGFicGF0aDsNCiAgICAgICRiYWNrdXBfcGF0aCA9ICRia3BhdGguJy8nLiRmaWxlbmFtZS4n
LnNxbCc7DQogICAgICAkbG9jayA9ICgkcnNzX2RiYmtfbG9jaykgPyAiIiA6ICIgLS1za2lw
LWxvY2stdGFibGVzIC0tc2tpcC1hZGQtbG9ja3MgIjsNCiAgICAgIGVjaG8gJHR4cGxvZ3Bz
Ow0KICAgICAgJG5vbG9nID0gKCRyc3NfZGJia190eHBsb2cpID8gIiIgOiAiIC0taWdub3Jl
LXRhYmxlPSIuJERCLT5kYi4iLnR4cF9sb2cgIjsNCiAgICAgICRub2xvZyA9IChpc3NldCgk
YmtfdGFibGUpICYmIGdwcygiYmtfdGFibGUiKSA9PSAidHhwX2xvZyIpID8gIiIgOiAkbm9s
b2c7DQoNCiAgICAgIGlmKCRnemlwKSB7DQogICAgICAgICRiYWNrdXBfcGF0aC49ICcuZ3on
Ow0KICAgICAgICAkYmFja3VwX2NtZCA9ICRyc3NfZGJia19kdW1wLiRteXNxbF9odXAuJyAt
USAtLWFkZC1kcm9wLXRhYmxlICcuJGxvY2suJG5vbG9nLiREQi0+ZGIuJGJrX3RhYmxlLicg
fCBnemlwID4gJy4kYmFja3VwX3BhdGg7DQogICAgICB9IGVsc2Ugew0KICAgICAgICAkYmFj
a3VwX2NtZCA9ICRyc3NfZGJia19kdW1wLiRteXNxbF9odXAuJyAtUSAtLWFkZC1kcm9wLXRh
YmxlICcuJGxvY2suJG5vbG9nLiREQi0+ZGIuJGJrX3RhYmxlLicgPiAnLiRiYWNrdXBfcGF0
aDsNCiAgICAgIH0NCiAgICAgICAgJGJrZGVidWcgPSAoJHJzc19kYmJrX2RlYnVnKSA/ICRi
YWNrdXBfY21kIDogJyc7DQogICAgICAkZXJyb3IgPSAiIjsNCg0KICAgICAgaWYgKGZ1bmN0
aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0KICAgICAgICBwYXNzdGhydSgkYmFja3VwX2Nt
ZCwgJGVycm9yKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgICRkdW1wSXQ9cG9wZW4oJGJh
Y2t1cF9jbWQsICdyJyk7DQogICAgICAgIHBjbG9zZSgkZHVtcEl0KTsNCiAgICAgIH0NCg0K
ICAgICAgaWYoIWlzX3dyaXRhYmxlKCRia3BhdGgpKSB7DQogICAgICAgIHBhZ2V0b3AoIkRC
IE1hbmFnZXIiLCAiQkFDS1VQIEZBSUxFRDogZm9sZGVyIGlzIG5vdCB3cml0YWJsZSIpOw0K
ICAgICAgfSBlbHNlaWYoJGVycm9yKSB7DQogICAgICAgIHVubGluaygkYmFja3VwX3BhdGgp
Ow0KICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIkJBQ0tVUCBGQUlMRUQuICBFUlJP
UiBOTzogIi4kZXJyb3IpOw0KICAgICAgfSBlbHNlIGlmKCFpc19maWxlKCRiYWNrdXBfcGF0
aCkpIHsNCiAgICAgICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJCQUNLVVAgRkFJTEVELiAg
RVJST1IgTk86ICIuJGVycm9yKTsNCiAgICAgIH0gZWxzZSBpZihmaWxlc2l6ZSgkYmFja3Vw
X3BhdGgpID09IDApIHsNCiAgICAgICAgdW5saW5rKCRiYWNrdXBfcGF0aCk7DQogICAgICAg
IHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiQkFDS1VQIEZBSUxFRC4gIEVSUk9SIE5POiAiLiRl
cnJvcik7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwg
IkJhY2tlZCBVcDogIi4kREItPmRiLiIgdG8gIi4kZmlsZW5hbWUpOw0KICAgICAgfQ0KDQog
IH0gZWxzZSBpZiAoZ3BzKCJkb3dubG9hZCIpKSB7DQoNCiAgICAkZm4gPSBncHMoImRvd25s
b2FkIik7DQogICAgJGZpbGVfcGF0aCA9ICRia3BhdGguJy8nLiRmbjsNCiAgICBoZWFkZXIo
IlByYWdtYTogcHVibGljIik7DQogICAgaGVhZGVyKCJFeHBpcmVzOiAwIik7DQogICAgaGVh
ZGVyKCJDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJl
LWNoZWNrPTAiKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vZm9y
Y2UtZG93bmxvYWQiKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtIik7DQogICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9u
L2Rvd25sb2FkIik7DQogICAgaWYgKHN1YnN0cigkZm4sIC0yKSA9PSAiZ3oiKSBoZWFkZXIo
IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQogICAgaGVhZGVyKCJDb250ZW50
LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRmaWxlX3Bh
dGgpLiI7Iik7DQogICAgaGVhZGVyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5h
cnkiKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiLmZpbGVzaXplKCRmaWxlX3Bh
dGgpKTsNCiAgICBAcmVhZGZpbGUoJGZpbGVfcGF0aCk7DQoNCiAgfSBlbHNlIGlmIChncHMo
InJlc3RvcmUiKSkgew0KDQogICAgaWYoc3RyaXN0cihncHMoInJlc3RvcmUiKSwgJy5neicp
KSB7DQogICAgICAkYmFja3VwX2NtZCA9ICdndW56aXAgPCAnLiRia3BhdGguJy8nLmdwcygi
cmVzdG9yZSIpLicgfCAnLiRyc3NfZGJia19teXNxbC4kbXlzcWxfaHVwLicgJy4kREItPmRi
Ow0KICAgIH0gZWxzZSB7DQogICAgICAkYmFja3VwX2NtZCA9ICRyc3NfZGJia19teXNxbC4k
bXlzcWxfaHVwLicgJy4kREItPmRiLicgPCAnLiRia3BhdGguJy8nLmdwcygicmVzdG9yZSIp
Ow0KICAgIH0NCg0KICAgICRia2RlYnVnID0gKCRyc3NfZGJia19kZWJ1ZykgPyAkYmFja3Vw
X2NtZCA6ICcnOw0KICAgICRlcnJvciA9ICIiOw0KDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0
cygncGFzc3RocnUnKSkgew0KICAgICAgcGFzc3RocnUoJGJhY2t1cF9jbWQsICRlcnJvcik7
DQogICAgfSBlbHNlIHsNCiAgICAgICRkdW1wSXQ9cG9wZW4oJGJhY2t1cF9jbWQsICdyJyk7
DQogICAgICBwY2xvc2UoJGR1bXBJdCk7DQogICAgfQ0KDQogICAgaWYoJGVycm9yKSB7DQog
ICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIkZBSUxFRCBUTyBSRVNUT1JFOiAiLiRlcnJv
cik7DQogICAgfSBlbHNlIHsNCiAgICAgIHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiUmVzdG9y
ZWQ6ICIuZ3BzKCJyZXN0b3JlIikuIiB0byAiLiREQi0+ZGIpOw0KICAgIH0NCg0KICB9IGVs
c2UgaWYoZ3BzKCJkZWxldGUiKSkgew0KDQogICAgICBpZihpc19maWxlKCRia3BhdGguJy8n
LmdwcygiZGVsZXRlIikpKSB7DQogICAgICAgIGlmKCF1bmxpbmsoJGJrcGF0aC4nLycuZ3Bz
KCJkZWxldGUiKSkpIHsNCiAgICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIlVuYWJs
ZSB0byBEZWxldGU6ICIuZ3BzKCJkZWxldGUiKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJEZWxldGVkOiAiLmdwcygiZGVsZXRlIikp
Ow0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwYWdldG9wKCJEQiBNYW5h
Z2VyIiwgIlVuYWJsZSB0byBEZWxldGU6ICIuZ3BzKCJkZWxldGUiKSk7DQogICAgICB9DQoN
CiAgfSBlbHNlIHsNCiAgICBwYWdldG9wKCJEQiBCYWNrdXAiKTsNCiAgfQ0KDQogICRnenAg
PSAoISRpc3dpbikgPyAiIHwgIi5ocmVmKCdnemlwcGVkIGZpbGUnLCAiaW5kZXgucGhwP2V2
ZW50PXJzc19kYl9iayZhbXA7Yms9JERCLT5kYiZhbXA7Z3ppcD0xIikgOiAiIjsNCg0KICAk
c3FsdmVyc2lvbiA9IGdldFJvdygiU0VMRUNUIFZFUlNJT04oKSBBUyB2ZXJzaW9uIik7DQog
ICRzcWx2ID0gZXhwbG9kZSgiLSIsICRzcWx2ZXJzaW9uWyd2ZXJzaW9uJ10pOw0KICAkYWxs
b3dub2xvZ3MgPSAoKGZsb2F0KSRzcWx2WzBdID49IChmbG9hdCkiNC4xLjkiKSA/IHRkYShn
VHh0KCdJbmNsdWRlIHR4cF9sb2c6JyksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVy
dGljYWwtYWxpZ246bWlkZGxlIicpLnRkYSh5ZXNub1JhZGlvKCJyc3NfZGJia190eHBsb2ci
LCAkcnNzX2RiYmtfdHhwbG9nKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2Fs
LWFsaWduOm1pZGRsZSInKSA6ICcnOw0KDQogICAgaWYgKGlzc2V0KCRia2RlYnVnKSAmJiAk
YmtkZWJ1ZykgZWNobyAnPHAgYWxpZ249ImNlbnRlciI+Jy4kYmtkZWJ1Zy4nPC9wPic7DQoN
CiAgZWNobw0KICBzdGFydFRhYmxlKCdsaXN0JykuDQogIGZvcm0oDQogIHRyKA0KICAgIHRk
YShnVHh0KCdMb2NrIFRhYmxlczonKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2ZXJ0
aWNhbC1hbGlnbjptaWRkbGUiJykudGRhKHllc25vUmFkaW8oInJzc19kYmJrX2xvY2siLCAk
cnNzX2RiYmtfbG9jayksICcgc3R5bGU9InRleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGln
bjptaWRkbGUiJykuDQogICAgJGFsbG93bm9sb2dzLg0KICAgIHRkYShnVHh0KCdEZWJ1ZyBN
b2RlOicpLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRs
ZSInKS50ZGEoeWVzbm9SYWRpbygicnNzX2RiYmtfZGVidWciLCAkcnNzX2RiYmtfZGVidWcp
LCAnIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLg0K
ICAgIHRkYShmSW5wdXQoInN1Ym1pdCIsInNhdmUiLGdUeHQoInNhdmUiKSwicHVibGlzaCIp
LmVJbnB1dCgicnNzX2RiX2JrIikuc0lucHV0KCdzYXZlcHJlZnMnKSwgIiBjb2xzcGFuPVwi
MlwiIGNsYXNzPVwibm9saW5lXCIiKQ0KICApLg0KICB0cigNCiAgICB0ZGEoZ1R4dCgnQmFj
a3VwIFBhdGg6JyksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246
bWlkZGxlIicpLnRkYSh0ZXh0X2lucHV0KCJyc3NfZGJia19wYXRoIiwkcnNzX2RiYmtfcGF0
aCwnNTAnKSwgJyBjb2xzcGFuPSIxNSInKQ0KICApLg0KICB0cigNCiAgICB0ZGEoZ1R4dCgn
bXlzcWxkdW1wIFBhdGg6JyksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwt
YWxpZ246bWlkZGxlIicpLnRkYSh0ZXh0X2lucHV0KCJyc3NfZGJia19kdW1wIiwkcnNzX2Ri
YmtfZHVtcCwnNTAnKSwgJyBjb2xzcGFuPSIxNSInKQ0KICApLg0KICB0cigNCiAgICB0ZGEo
Z1R4dCgnbXlzcWwgUGF0aDonKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNh
bC1hbGlnbjptaWRkbGUiJykudGRhKHRleHRfaW5wdXQoInJzc19kYmJrX215c3FsIiwkcnNz
X2RiYmtfbXlzcWwsJzUwJyksICcgY29sc3Bhbj0iMTUiJykpDQogICkuZW5kVGFibGUoKS4N
CiAgc3RhcnRUYWJsZSgibGlzdCIpLg0KICB0cigNCiAgICB0ZGEoaGVkKCdDcmVhdGUgYSBu
ZXcgYmFja3VwIG9mIHRoZSAnLiREQi0+ZGIuJyBkYXRhYmFzZScuYnIuDQogICAgaHJlZign
LnNxbCBmaWxlJywgImluZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO2JrPSREQi0+ZGIi
KS4kZ3pwLDMpLCcgY29sc3Bhbj0iNyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyInKQ0K
ICAgICkuDQogIHRyKHRkY3MoaGVkKCJQcmV2aW91cyBCYWNrdXAgRmlsZXMiLDEpLDcpKS4N
CiAgdHIoDQogICAgaGNlbGwoIk5vLiIpLg0KICAgIGhjZWxsKCJCYWNrdXAgRmlsZSBOYW1l
IikuDQogICAgaGNlbGwoIkJhY2t1cCBEYXRlL1RpbWUiKS4NCiAgICBoY2VsbCgiQmFja3Vw
IEZpbGUgU2l6ZSIpLg0KICAgIGhjZWxsKCIiKS4NCiAgICBoY2VsbCgiIikuDQogICAgaGNl
bGwoIiIpDQogICk7DQoNCiAgJHRvdGFsc2l6ZSA9IDA7DQogICRubyA9IDA7DQogIGlmKCFp
c19mb2xkZXJfZW1wdHkoJGJrcGF0aCkpIHsNCiAgICBpZiAoJGhhbmRsZSA9IG9wZW5kaXIo
JGJrcGF0aCkpIHsNCiAgICAgICRkYXRhYmFzZV9maWxlcyA9IGFycmF5KCk7DQogICAgICB3
aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7DQogICAgICAg
IGlmICgoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpICYmIChzdWJzdHIoJGZpbGUs
IC00KSA9PSAiLnNxbCIgfHwgc3Vic3RyKCRmaWxlLCAtNykgPT0gIi5zcWwuZ3oiKSkgew0K
ICAgICAgICAgICRkYXRhYmFzZV9maWxlc1tdID0gJGZpbGU7DQogICAgICAgIH0NCiAgICAg
IH0NCiAgICAgIGNsb3NlZGlyKCRoYW5kbGUpOw0KICAgICAgZm9yKCRpID0gKHNpemVvZigk
ZGF0YWJhc2VfZmlsZXMpLTEpOyAkaSA+IC0xOyAkaS0tKSB7DQogICAgICAgICRubysrOw0K
ICAgICAgICAkc3R5bGUgPSAoJG5vJTIgPT0gMCkgPyAnIHN0eWxlPSJiYWNrZ3JvdW5kLWNv
bG9yOiAjZWVlOyInIDogJyc7DQogICAgICAgICRkYXRhYmFzZV90ZXh0ID0gc3Vic3RyKCRk
YXRhYmFzZV9maWxlc1skaV0sIDExKTsNCiAgICAgICAgJGRhdGVfdGV4dCA9IHN0cmZ0aW1l
KCIlQSwgJUIgJWQsICVZIFslSDolTTolU10iLCBzdWJzdHIoJGRhdGFiYXNlX2ZpbGVzWyRp
XSwgMCwgMTApKTsNCiAgICAgICAgJHNpemVfdGV4dCA9IGZpbGVzaXplKCRia3BhdGguJy8n
LiRkYXRhYmFzZV9maWxlc1skaV0pOw0KICAgICAgICAkdG90YWxzaXplICs9ICRzaXplX3Rl
eHQ7DQoNCiAgICAgICAgZWNobw0KICAgICAgICB0cigNCiAgICAgICAgICB0ZCgkbm8pLg0K
ICAgICAgICAgIHRkKCRkYXRhYmFzZV90ZXh0KS4NCiAgICAgICAgICB0ZCgkZGF0ZV90ZXh0
KS4NCiAgICAgICAgICB0ZChwcmV0dHlGaWxlU2l6ZSgkc2l6ZV90ZXh0KSkuDQogICAgICAg
ICAgJzx0ZD48YSBocmVmPSJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX2JrJmFtcDtkb3dubG9h
ZD0nLiRkYXRhYmFzZV9maWxlc1skaV0uJyI+RG93bmxvYWQ8L2E+PC90ZD4nLg0KICAgICAg
ICAgICc8dGQ+PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PXJzc19kYl9iayZhbXA7cmVzdG9y
ZT0nLiRkYXRhYmFzZV9maWxlc1skaV0uJyIgIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcn
LmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPlJlc3RvcmU8L2E+PC90ZD4nLg0KICAgICAg
ICAgICc8dGQ+PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PXJzc19kYl9iayZhbXA7ZGVsZXRl
PScuJGRhdGFiYXNlX2ZpbGVzWyRpXS4nIiAgb25jbGljaz0icmV0dXJuIHZlcmlmeShcJycu
Z1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKSI+RGVsZXRlPC9hPjwvdGQ+JywgJHN0eWxlDQog
ICAgICAgICk7DQogICAgICB9DQoNCiAgICBlY2hvDQogICAgICB0cigNCiAgICAgICAgdGFn
KCRuby4iIEJhY2t1cCBGaWxlKHMpIiwgInRoIiwgJyBjb2xzcGFuPSIzIicpLg0KICAgICAg
ICB0YWcocHJldHR5RmlsZVNpemUoJHRvdGFsc2l6ZSksICJ0aCIsICcgY29sc3Bhbj0iNCIn
KQ0KICAgICAgKTsNCg0KICAgIH0gZWxzZSB7DQogICAgICBlY2hvDQogICAgICB0cigNCiAg
ICAgICAgdGRhKGhlZCgnWW91IGhhdmUgbm8gZGF0YWJhc2UgYmFja3VwcycuYnIuJ0NyZWF0
ZSBhIG5ldyBiYWNrdXAgb2YgdGhlICcuJERCLT5kYi4nIGRhdGFiYXNlJy5ici4NCiAgICAg
ICAgaHJlZignLnNxbCBmaWxlJywgImluZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO2Jr
PSREQi0+ZGIiKS4kZ3pwLDMpLCcgY29sc3Bhbj0iNyIgc3R5bGU9InRleHQtYWxpZ246Y2Vu
dGVyOyInKQ0KICAgICAgICApOw0KICAgIH0NCiAgfSBlbHNlIHsNCiAgICAgIGVjaG8NCiAg
ICAgIHRyKA0KICAgICAgICB0ZGEoaGVkKCdZb3UgaGF2ZSBubyBkYXRhYmFzZSBiYWNrdXBz
Jy5ici4nQ3JlYXRlIGEgbmV3IGJhY2t1cCBvZiB0aGUgJy4kREItPmRiLicgZGF0YWJhc2Un
LmJyLg0KICAgICAgICBocmVmKCcuc3FsIGZpbGUnLCAiaW5kZXgucGhwP2V2ZW50PXJzc19k
Yl9iayZhbXA7Yms9JERCLT5kYiIpLiRnenAsMyksJyBjb2xzcGFuPSI3IiBzdHlsZT0idGV4
dC1hbGlnbjpjZW50ZXI7IicpDQogICAgICAgICk7DQogIH0NCiAgZWNobyBlbmRUYWJsZSgp
Ow0KfQ0KDQpmdW5jdGlvbiByc3NfZGJfbWFuKCRldmVudCwgJHN0ZXApIHsNCiAgZ2xvYmFs
ICREQjsNCg0KICBpZiAoZ3BzKCJvcHRfdGFibGUiKSkgew0KICAgICRxdWVyeSA9ICJPUFRJ
TUlaRSBUQUJMRSAiLmdwcygib3B0X3RhYmxlIik7DQogICAgc2FmZV9xdWVyeSgkcXVlcnkp
Ow0KICAgIHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiT3B0aW16ZWQ6ICIuZ3BzKCJvcHRfdGFi
bGUiKSk7DQogIH0gZWxzZSAgaWYgKGdwcygicmVwX3RhYmxlIikpIHsNCiAgICAkcXVlcnkg
PSAiUkVQQUlSIFRBQkxFICIuZ3BzKCJyZXBfdGFibGUiKTsNCiAgICBzYWZlX3F1ZXJ5KCRx
dWVyeSk7DQogICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJSZXBhaXJlZDogIi5ncHMoInJl
cF90YWJsZSIpKTsNCiAgICB9IGVsc2UgIGlmIChncHMoInJlcF9hbGwiKSkgew0KICAgICAg
ICAkcXVlcnkgPSAiUkVQQUlSIFRBQkxFICIuZ3BzKCJyZXBfYWxsIik7DQogICAgICAgIHNh
ZmVfcXVlcnkoJHF1ZXJ5KTsNCiAgICAgICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJSZXBh
aXJlZCBBbGwgVGFibGVzIik7DQogIH0gZWxzZSAgaWYgKGdwcygiZHJvcF90YWJsZSIpKSB7
DQogICAgJHF1ZXJ5ID0gIkRST1AgVEFCTEUgIi5ncHMoImRyb3BfdGFibGUiKTsNCiAgICBz
YWZlX3F1ZXJ5KCRxdWVyeSk7DQogICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJEcm9wcGVk
OiAiLmdwcygiZHJvcF90YWJsZSIpKTsNCiAgfSBlbHNlIHsNCiAgICBwYWdldG9wKCJEYXRh
YmFzZSBNYW5hZ2VyIik7DQogIH0NCg0KICAgICRzcWx2ZXJzaW9uID0gZ2V0Um93KCJTRUxF
Q1QgVkVSU0lPTigpIEFTIHZlcnNpb24iKTsNCiAgICAkaGVhZGF0dHMgPSAnIHN0eWxlPSJj
b2xvcjojMDA2OUQxO3BhZGRpbmc6MCAxMHB4IDAgNXB4OyInOw0KDQogICAgZWNobw0KICAg
IHN0YXJ0VGFibGUoJ2RiaW5mbycpLg0KICAgIHRyKA0KICAgICAgICBoY2VsbCgiRGF0YWJh
c2UgSG9zdDoiKS4NCiAgICAgICAgdGRhKCREQi0+aG9zdCwgJGhlYWRhdHRzKS4NCiAgICAg
ICAgaGNlbGwoIkRhdGFiYXNlIE5hbWU6IikuDQogICAgICAgIHRkYSgkREItPmRiLCAkaGVh
ZGF0dHMpLg0KICAgICAgICBoY2VsbCgiRGF0YWJhc2UgVXNlcjoiKS4NCiAgICAgICAgdGRh
KCREQi0+dXNlciwgJGhlYWRhdHRzKS4NCiAgICAgICAgaGNlbGwoIkRhdGFiYXNlIFZlcnNp
b246IikuDQogICAgICAgIHRkYSgiTXlTUUwgdiIuJHNxbHZlcnNpb25bJ3ZlcnNpb24nXSwg
JGhlYWRhdHRzKQ0KICAgICkuDQogICAgZW5kVGFibGUoKS5icjsNCg0KICAgIGVjaG8NCiAg
ICBzdGFydFRhYmxlKCdsaXN0JykuDQogICAgdHIoDQogICAgICAgIGhjZWxsKCJOby4iKS4N
CiAgICAgICAgaGNlbGwoIlRhYmxlcyIpLg0KICAgICAgICBoY2VsbCgiUmVjb3JkcyIpLg0K
ICAgICAgICBoY2VsbCgiRGF0YSBVc2FnZSIpLg0KICAgICAgICBoY2VsbCgiSW5kZXggVXNh
Z2UiKS4NCiAgICAgICAgaGNlbGwoIlRvdGFsIFVzYWdlIikuDQogICAgICAgIGhjZWxsKCJP
dmVyaGVhZCIpLg0KICAgICAgICAvL2hjZWxsKCJPcHRpbWl6ZSIpLg0KICAgICAgICBoY2Vs
bCgiRXJyTm8iKS4NCiAgICAgICAgaGNlbGwoIlJlcGFpciIpLg0KICAgICAgICBoY2VsbCgi
QmFja3VwIikuDQogICAgICAgIGhjZWxsKCJEcm9wIikNCiAgICApOw0KDQogICAgICAgIGlm
KHZlcnNpb25fY29tcGFyZSgkc3FsdmVyc2lvblsndmVyc2lvbiddLCAnMy4yMycsICc+PScp
KSB7DQogICAgICAgICAgICAkbm8gPSAwOw0KICAgICAgICAgICAgJHJvd191c2FnZSA9IDA7
DQogICAgICAgICAgICAkZGF0YV91c2FnZSA9IDA7DQogICAgICAgICAgICAkaW5kZXhfdXNh
Z2UgPSAgMDsNCiAgICAgICAgICAgICRvdmVyaGVhZF91c2FnZSA9IDA7DQogICAgICAgICAg
ICAkYWxsdGFicyA9IGFycmF5KCk7DQoNCiAgICAgICAgICAgICR0YWJsZXNzdGF0dXMgPSBn
ZXRSb3dzKCJTSE9XIFRBQkxFIFNUQVRVUyIpOw0KICAgICAgICAgICAgZm9yZWFjaCgkdGFi
bGVzc3RhdHVzIGFzICAkdGFibGVzdGF0dXMpIHsNCiAgICAgICAgICAgICAgICBleHRyYWN0
KCR0YWJsZXN0YXR1cyk7DQoNCiAgICAgICAgICAgICAgICAkcSA9ICJTSE9XIEtFWVMgRlJP
TSBgIi4kTmFtZS4iYCI7DQogICAgICAgICAgICAgICAgc2FmZV9xdWVyeSgkcSk7DQogICAg
ICAgICAgICAgICAgJG15c3FsRXJybm8gPSBteXNxbGlfZXJybm8oJERCLT5saW5rKTsNCiAg
ICAgICAgICAgICAgICAkYWxsdGFic1tdID0gJE5hbWU7DQoNCiAgICAgICAgICAgICAgICAk
Y29sb3IgPSAoJG15c3FsRXJybm8gIT0gMCkgPyAnIHN0eWxlPSJjb2xvcjojRDEwMDAwOyIn
IDogJyBzdHlsZT0iY29sb3I6IzRCOUYwMDsiJzsNCiAgICAgICAgICAgICAgICAkY29sb3Iy
ID0gKCREYXRhX2ZyZWUgPiAwKSA/ICcgc3R5bGU9ImNvbG9yOiNEMTAwMDA7IicgOiAnIHN0
eWxlPSJjb2xvcjojNEI5RjAwOyInOw0KICAgICAgICAgICAgICAgICRzdHlsZSA9ICgkbm8l
MiA9PSAwKSA/ICcgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlZWU7IicgOiAnJzsNCg0K
ICAgICAgICAgICAgICAgICRubysrOw0KICAgICAgICAgICAgICAgICRyb3dfdXNhZ2UgKz0g
JFJvd3M7DQogICAgICAgICAgICAgICAgJGRhdGFfdXNhZ2UgKz0gJERhdGFfbGVuZ3RoOw0K
ICAgICAgICAgICAgICAgICRpbmRleF91c2FnZSArPSAgJEluZGV4X2xlbmd0aDsNCiAgICAg
ICAgICAgICAgICAkb3ZlcmhlYWRfdXNhZ2UgKz0gJERhdGFfZnJlZTsNCg0KICAgICAgICAg
ICAgICAgIGVjaG8NCiAgICAgICAgICAgICAgICB0cigNCiAgICAgICAgICAgICAgICAgICAg
dGQoJG5vKS4NCiAgICAgICAgICAgICAgICAgICAgdGQoaHJlZigkTmFtZSwgImluZGV4LnBo
cD9ldmVudD1yc3Nfc3FsX3J1biZhbXA7dG49Ii4kTmFtZSkpLg0KICAgICAgICAgICAgICAg
ICAgICB0ZCgiICIuJFJvd3MpLg0KICAgICAgICAgICAgICAgICAgICB0ZChwcmV0dHlGaWxl
U2l6ZSgkRGF0YV9sZW5ndGgpKS4NCiAgICAgICAgICAgICAgICAgICAgdGQocHJldHR5Rmls
ZVNpemUoJEluZGV4X2xlbmd0aCkpLg0KICAgICAgICAgICAgICAgICAgICB0ZChwcmV0dHlG
aWxlU2l6ZSgkRGF0YV9sZW5ndGggKyAkSW5kZXhfbGVuZ3RoKSkuDQogICAgICAgICAgICAg
ICAgICAgIHRkYShwcmV0dHlGaWxlU2l6ZSgkRGF0YV9mcmVlKSwgJGNvbG9yMikuDQogICAg
ICAgICAgICAgICAgICAgIHRkYSgiICIuJG15c3FsRXJybm8sICRjb2xvcikuDQogICAgICAg
ICAgICAgICAgICAgIHRkKGhyZWYoIlJlcGFpciIsICJpbmRleC5waHA/ZXZlbnQ9cnNzX2Ri
X21hbiZhbXA7cmVwX3RhYmxlPSIuJE5hbWUpKS4NCiAgICAgICAgICAgICAgICAgICAgdGQo
aHJlZigiQmFja3VwIiwgImluZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO2JrPTEmYW1w
O2JrX3RhYmxlPSIuJE5hbWUpLg0KICAgICAgICAgICAgICAgICAgICAnPHRkPjxhIGhyZWY9
ImluZGV4LnBocD9ldmVudD1yc3NfZGJfbWFuJmFtcDtkcm9wX3RhYmxlPScuJE5hbWUuJyIg
IG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJyki
PkRyb3A8L2E+PC90ZD4nKSwgJHN0eWxlDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAg
ICAgIH0NCg0KICAgICAgICAgICAgZWNobw0KICAgICAgICAgICAgdHIoDQogICAgICAgICAg
ICAgICAgaGNlbGwoIlRvdGFsIikuDQogICAgICAgICAgICAgICAgaGNlbGwoJG5vLiIgVGFi
bGVzIikuDQogICAgICAgICAgICAgICAgaGNlbGwobnVtYmVyX2Zvcm1hdCgkcm93X3VzYWdl
KSkuDQogICAgICAgICAgICAgICAgaGNlbGwocHJldHR5RmlsZVNpemUoJGRhdGFfdXNhZ2Up
KS4NCiAgICAgICAgICAgICAgICBoY2VsbChwcmV0dHlGaWxlU2l6ZSgkaW5kZXhfdXNhZ2Up
KS4NCiAgICAgICAgICAgICAgICBoY2VsbChwcmV0dHlGaWxlU2l6ZSgkZGF0YV91c2FnZSAr
ICRpbmRleF91c2FnZSkpLg0KICAgICAgICAgICAgICAgIGhjZWxsKHByZXR0eUZpbGVTaXpl
KCRvdmVyaGVhZF91c2FnZSkpLg0KICAgICAgICAgICAgICAgIGhjZWxsKCkuDQogICAgICAg
ICAgICAgICAgdGRhKGhyZWYoc3Ryb25nKCJSZXBhaXIgQWxsIiksICJpbmRleC5waHA/ZXZl
bnQ9cnNzX2RiX21hbiZhbXA7cmVwX2FsbD0iLmltcGxvZGUoIiwiLCRhbGx0YWJzKSksICcg
c3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyIgY29sc3Bhbj0iMyInKSwgJHN0eWxlDQogICAg
ICAgICAgICApOw0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlY2hvDQogICAg
ICAgICAgICB0cigNCiAgICAgICAgICAgICAgICB0ZGEoIkNvdWxkIE5vdCBTaG93IFRhYmxl
IFN0YXR1cyBCZWNhdXNlIFlvdXIgTVlTUUwgVmVyc2lvbiBJcyBMb3dlciBUaGFuIDMuMjMu
IiwgJyBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IiBjb2xzcGFuPTE0IicpDQogICAgICAg
ICAgICApOw0KICAgICAgICB9DQoNCmVjaG8NCiAgICB0cigNCiAgICAgICAgdGRhKGhyZWYo
IlJ1biBTUUwiLCAiaW5kZXgucGhwP2V2ZW50PXJzc19zcWxfcnVuIiksICcgc3R5bGU9InRl
eHQtYWxpZ246Y2VudGVyOyIgY29sc3Bhbj0iMTQiJykNCiAgICApLg0KICAgIGVuZFRhYmxl
KCk7DQp9DQoNCmZ1bmN0aW9uIHJzc19zcWxfcnVuKCRldmVudCwgJHN0ZXApIHsNCiAgZ2xv
YmFsICREQjsNCiAgcGFnZXRvcCgiUnVuIFNRTCBRdWVyeSIpOw0KICAkdGV4dD0iIjsNCiAg
JHJzZFtdPSIiOw0KICAkc3FsX3F1ZXJ5Mj0iIjsNCg0KICBpZiAoZ3BzKCJ0biIpKSB7DQog
ICAgJHRxID0gInNlbGVjdCAqIGZyb20gIi5ncHMoInRuIik7DQogIH0NCg0KICBpZiAoZ3Bz
KCJzcWxfcXVlcnkiKSB8fCBncHMoInRuIikpIHsNCiAgICAkc3FsX3F1ZXJpZXMyID0gKGdw
cygic3FsX3F1ZXJ5IikpID8gdHJpbShncHMoInNxbF9xdWVyeSIpKSA6IHRyaW0oJHRxKTsN
CiAgICAkdG90YWxxdWVyeWNvdW50ID0gMDsNCiAgICAkc3VjY2Vzc3F1ZXJ5ID0gMDsNCiAg
ICBpZigkc3FsX3F1ZXJpZXMyKSB7DQogICAgICAkc3FsX3F1ZXJpZXMgPSBhcnJheSgpOw0K
ICAgICAgJHNxbF9xdWVyaWVzMiA9IGV4cGxvZGUoIlxuIiwgJHNxbF9xdWVyaWVzMik7DQog
ICAgICBmb3JlYWNoKCRzcWxfcXVlcmllczIgYXMgJHNxbF9xdWVyeTIpIHsNCiAgICAgICAg
JHNxbF9xdWVyeTIgPSB0cmltKHN0cmlwc2xhc2hlcygkc3FsX3F1ZXJ5MikpOw0KICAgICAg
ICAkc3FsX3F1ZXJ5MiA9IHByZWdfcmVwbGFjZSgiL1tcclxuXSsvIiwgJycsICRzcWxfcXVl
cnkyKTsNCiAgICAgICAgaWYoIWVtcHR5KCRzcWxfcXVlcnkyKSkgew0KICAgICAgICAgICRz
cWxfcXVlcmllc1tdID0gJHNxbF9xdWVyeTI7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAg
ICAgZm9yZWFjaCgkc3FsX3F1ZXJpZXMgYXMgJHNxbF9xdWVyeSkgew0KICAgICAgICBpZiAo
cHJlZ19tYXRjaCgiL15cXHMqKGluc2VydHx1cGRhdGV8cmVwbGFjZXxkZWxldGV8Y3JlYXRl
fHRydW5jYXRlKSAvaSIsJHNxbF9xdWVyeSkpIHsNCiAgICAgICAgICAkcnVuX3F1ZXJ5ID0g
c2FmZV9xdWVyeSgkc3FsX3F1ZXJ5KTsNCiAgICAgICAgICBpZighJHJ1bl9xdWVyeSkgew0K
ICAgICAgICAgICAgJHRleHQgLj0gZ3JhZihteXNxbGlfZXJyb3IoJERCLT5saW5rKSwgJyBz
dHlsZT0iY29sb3I6I0QxMDAwMDsiJyk7DQogICAgICAgICAgICAkdGV4dCAuPSBncmFmKCRz
cWxfcXVlcnksICcgc3R5bGU9ImNvbG9yOiNEMTAwMDA7IicpOw0KICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAkc3VjY2Vzc3F1ZXJ5Kys7DQogICAgICAgICAgICAkdGV4dCAu
PSBncmFmKCRzcWxfcXVlcnksICcgc3R5bGU9ImNvbG9yOiM0QjlGMDA7IicpOw0KICAgICAg
ICAgIH0NCiAgICAgICAgICAkdG90YWxxdWVyeWNvdW50Kys7DQogICAgICAgIH0gZWxzZWlm
IChwcmVnX21hdGNoKCIvXlxccyooc2VsZWN0KSAvaSIsJHNxbF9xdWVyeSkpIHsNCiAgICAg
ICAgICAkcnVuX3F1ZXJ5ID0gc2FmZV9xdWVyeSgkc3FsX3F1ZXJ5KTsNCiAgICAgICAgICBp
ZigkcnVuX3F1ZXJ5KSAkc3VjY2Vzc3F1ZXJ5Kys7DQogICAgICAgICAgICBpZiAoJHJ1bl9x
dWVyeSAmJiBteXNxbGlfbnVtX3Jvd3MoJHJ1bl9xdWVyeSkgPiAwKSB7DQoNCiAgICAgICAg
ICAgICAgLyogZ2V0IGNvbHVtbiBtZXRhZGF0YSAqLw0KICAgICAgICAgICAgICAkaSA9IDA7
DQogICAgICAgICAgICAgICRoZWFkZXJzID0gIiI7DQogICAgICAgICAgICAgIHdoaWxlICgk
aSA8IG15c3FsaV9udW1fZmllbGRzKCRydW5fcXVlcnkpKSB7DQogICAgICAgICAgICAgICAg
ICRtZXRhID0gbXlzcWxpX2ZldGNoX2ZpZWxkKCRydW5fcXVlcnkpOw0KICAgICAgICAgICAg
ICAgICAkaGVhZGVycy49aGNlbGwoJG1ldGEtPm5hbWUpOw0KICAgICAgICAgICAgICAgICAk
aSsrOw0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgJHJzZFtdID0NCiAgICAg
ICAgICAgICAgJzxkaXYgY2xhc3M9InNjcm9sbFdyYXBwZXIiPicuc3RhcnRUYWJsZSgnbGlz
dCcsICcnLCAnc2Nyb2xsYWJsZScpLg0KICAgICAgICAgICAgICAnPHRoZWFkPicudHIoJGhl
YWRlcnMpLic8L3RoZWFkPjx0Ym9keT4nOw0KDQogICAgICAgICAgICAgIHdoaWxlICgkYSA9
IG15c3FsaV9mZXRjaF9hc3NvYygkcnVuX3F1ZXJ5KSkgJG91dFtdID0gJGE7DQogICAgICAg
ICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcnVuX3F1ZXJ5KTsNCg0KICAgICAgICAgICAg
ICBmb3JlYWNoICgkb3V0IGFzICRiKSB7DQogICAgICAgICAgICAgICAgJGRhdGEgPSAiIjsN
CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkYiBhcyAkZikgew0KICAgICAgICAgICAgICAg
ICAgJGRhdGEuPXRkKCRmKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
JHJzZFtdID0gdHIoJGRhdGEpOw0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg
JHJzZFtdID0gJzwvdGJvZHk+Jy5lbmRUYWJsZSgpLic8L2Rpdj4nLmJyOw0KICAgICAgICAg
ICAgICAkb3V0ID0gYXJyYXkoKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
ICAgICR0ZXh0IC49IGdyYWYobXlzcWxpX2Vycm9yKCREQi0+bGluayksICcgc3R5bGU9ImNv
bG9yOiNEMTAwMDA7IicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICR0ZXh0IC49IGdy
YWYoJHNxbF9xdWVyeSwgJyBzdHlsZT0iY29sb3I6I0QxMDAwMDsiJyk7DQogICAgICAgICAg
JHRvdGFscXVlcnljb3VudCsrOw0KICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiL15c
XHMqKGRyb3B8c2hvd3xncmFudCkgL2kiLCRzcWxfcXVlcnkpKSB7DQogICAgICAgICAgJHRl
eHQgLj0gZ3JhZigkc3FsX3F1ZXJ5LiIgLSBRVUVSWSBUWVBFIE5PVCBTVVBQT1JURUQiLCAn
IHN0eWxlPSJjb2xvcjojRDEwMDAwOyInKTsNCiAgICAgICAgICAkdG90YWxxdWVyeWNvdW50
Kys7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICR0ZXh0IC49IGdyYWYoJHN1Y2Nlc3Nx
dWVyeS4iLyIuJHRvdGFscXVlcnljb3VudC4iIFF1ZXJ5KHMpIEV4ZWN1dGVkIFN1Y2Nlc3Nm
dWxseSIsICcgc3R5bGU9ImNvbG9yOiMwMDY5RDE7IicpOw0KICAgIH0NCiAgfQ0KDQogIGVj
aG8NCiAgc3RhcnRUYWJsZSgnZWRpdCcpLg0KICB0cigNCiAgICB0ZCgNCiAgICAgIGZvcm0o
DQogICAgICAgIGdyYWYoIkVhY2ggcXVlcnkgbXVzdCBiZSBvbiBhIHNpbmdsZSBsaW5lLiAg
WW91IG1heSBydW4gbXVsdGlwbGUgcXVlcmllcyBhdCBvbmNlIGJ5IHN0YXJ0aW5nIGEgbmV3
IGxpbmUuIi5ici4iU3VwcG9ydGVkIHF1ZXJ5IHR5cGVzIGluY2x1ZGUgU0VMRUNULCBJTlNF
UlQsIFVQREFURSwgQ1JFQVRFLCBSRVBMQUNFLCBhbmQgREVMRVRFLiIpLg0KICAgICAgICBn
cmFmKCJXQVJOSU5HOiBBbGwgU1FMIHJ1biBpbiB0aGlzIHdpbmRvdyB3aWxsIGltbWVkaWF0
ZWx5IGFuZCBwZXJtYW5lbnRseSBjaGFuZ2UgeW91ciBkYXRhYmFzZS4iLCAnIHN0eWxlPSJm
b250LXdlaWdodDpib2xkOyInKS4NCiAgICAgICAgdGV4dF9hcmVhKCdzcWxfcXVlcnknLCcy
MDAnLCc1NTAnLCRzcWxfcXVlcnkyKS5ici4NCiAgICAgICAgZklucHV0KCdzdWJtaXQnLCdy
dW4nLGdUeHQoJ1J1bicpLCdwdWJsaXNoJykuaHJlZigiR28gdG8gRGF0YWJhc2UgTWFuYWdl
ciIsICJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX21hbiIpLg0KICAgICAgICBlSW5wdXQoJ3Jz
c19zcWxfcnVuJyksICcnLCAnIHZlcmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wn
KSInDQogICAgICApDQogICAgKQ0KICApLg0KICB0cigNCiAgICB0ZCgNCiAgICAgICAgZ3Jh
ZigkdGV4dC5ici5pbXBsb2RlKCcnLCAkcnNkKSkNCiAgICApDQogICkuDQogIGVuZFRhYmxl
KCk7DQoNCn0NCmZ1bmN0aW9uIHByZXR0eUZpbGVTaXplICgkYnl0ZXMpIHsNCiAgaWYgKCRi
eXRlcyA8IDEwMjQpIHsNCiAgICAgIHJldHVybiAiJGJ5dGVzIGJ5dGVzIjsNCiAgfSBlbHNl
IGlmIChzdHJsZW4oJGJ5dGVzKSA8PSA5ICYmIHN0cmxlbigkYnl0ZXMpID49IDcpIHsNCiAg
ICAgIHJldHVybiBudW1iZXJfZm9ybWF0KCRieXRlcyAvIDEwNDg1NzYsMikuIiBNQiI7DQog
IH0gZWxzZWlmIChzdHJsZW4oJGJ5dGVzKSA+PSAxMCkgew0KICAgICAgcmV0dXJuIG51bWJl
cl9mb3JtYXQoJGJ5dGVzIC8gMTA3Mzc0MTgyNCwyKS4iIEdCIjsNCiAgfQ0KICByZXR1cm4g
bnVtYmVyX2Zvcm1hdCgkYnl0ZXMgLyAxMDI0LDIpLiIgS0IiOw0KfQ0KDQpmdW5jdGlvbiBp
c19mb2xkZXJfZW1wdHkoJGRpcikgew0KICBpZiAoaXNfZGlyKCRkaXIpKSB7DQogICAgJGRs
PW9wZW5kaXIoJGRpcik7DQogICAgaWYgKCRkbCkgew0KICAgICAgd2hpbGUoJG5hbWUgPSBy
ZWFkZGlyKCRkbCkpIHsNCiAgICAgICAgaWYgKCFpc19kaXIoIiRkaXIvJG5hbWUiKSkgew0K
ICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICBicmVhazsNCiAgICAgIH0NCiAg
ICB9DQogICAgY2xvc2VkaXIoJGRsKTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQogIH0g
ZWxzZSByZXR1cm4gdHJ1ZTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtz
OjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjUxOTA6IjxwPjxiciAv
PgpoMS4gVGV4dHBhdHRlcm4gRGF0YWJhc2UgTWFuYWdlcjwvcD4KCjxwPgk8cD5UaGUgcnNz
X2FkbWluX2RiX21hbmFnZXIgcGx1Z2luIGFkZHMgMyBuZXcgdGFicyB0byB5b3VyIFRleHRw
YXR0ZXJuIGFkbWluIGludGVyZmFjZS4gIEVhY2ggdGFiIGNvbnRhaW5zIGRpZmZlcmVudCBm
dW5jdGlvbmFsaXR5IHRvIGhlbHAgbWFuYWdlPGJyIC8+CjwvcD4KCjxwPnlvdXIgPGEgaHJl
Zj0iaHR0cDovL3d3dy5teXNxbC5jb20vIj5NeVNRTDwvYT4gZGF0YWJhc2UuICBZb3UgY2Fu
IHRoaW5rIG9mIHRoaXMgcGx1Z2luIGFzIGEgbGlnaHR3ZWlnaHQgcmVwbGFjZW1lbnQgZm9y
IDxhIGhyZWY9Imh0dHA6Ly93d3cucGhwbXlhZG1pbi5uZXQvaG9tZV9wYWdlLyI+cGhwTXlB
ZG1pbjwvYT4uPC9wPjwvcD4KCgk8aDI+RGF0YWJhc2UgQmFja3VwPC9oMj4KCjxwPgk8cD5U
aGUgPHN0cm9uZz5EQiBCYWNrdXAgdGFiPC9zdHJvbmc+IGFsbG93cyB5b3UgdG8gYmFja3Vw
LCBkb3dubG9hZCBhbmQgcmVzdG9yZSB0aGUgTXlTUUwgZGF0YWJhc2UgdGhhdCBpcyB1c2Vk
IGZvciB5b3VyIFRleHRwYXR0ZXJuIGluc3RhbGxhdGlvbi48YnIgLz4KPC9wPgoKPHA+VGhl
IGRhdGFiYXNlIGJhY2t1cHMgYW5kIHJlc3RvcmVzIGFyZSBydW4gdXNpbmcgTXlTUUwmIzgy
MTc7cyA8YSBocmVmPSJodHRwOi8vZGV2Lm15c3FsLmNvbS9kb2MvbXlzcWwvZW4vbXlzcWxk
dW1wLmh0bWwiPm15c3FsZHVtcDwvYT4gY29tbWFuZC48YnIgLz4KPC9wPgoKPHA+T24gdGhp
cyB0YWIgeW91IGFyZSBhYmxlIHRvOjwvcD48L3A+CgoJPHVsPgoJCTxsaT5DcmVhdGUgYSAu
c3FsIGJhY2t1cCBmaWxlIG9uIHdpbmRvd3Mgd2l0aCB0aGUgYWRkaXRpb25hbCBvcHRpb24g
b2YgY3JlYXRpbmcgYSBnemlwcGVkIGJhY2t1cCBvbiAqbml4IG9wZXJhdGluZyBzeXN0ZW1z
PC9saT4KCQk8bGk+VmlldyBhIGxpc3Qgb2YgcHJldmlvdXMgYmFja3VwIGZpbGVzPC9saT4K
CQk8bGk+UmVzdG9yZSB5b3VyIGRhdGFiYXNlIGZyb20gb25lIG9mIHRoZSBwcmV2aW91cyBi
YWNrdXBzPC9saT4KCQk8bGk+RG93bmxvYWQgYSBiYWNrdXAgZmlsZTwvbGk+CgkJPGxpPkRl
bGV0ZSBvbGQgYmFja3VwczwvbGk+Cgk8L3VsPgoKCTxoMj5CYWNrdXAgUHJlZmVyZW5jZXM8
L2gyPgoKCTxwPllvdSBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBzZXZlcmFsIHByZWZlcmVu
Y2VzIHJlbGF0ZWQgdG8geW91ciBkYXRhYmFzZSBiYWNrdXBzLiAgWW91IGNhbiBzZXQgdGhl
c2Ugb3B0aW9ucyBvbiB0aGUgYmFja3VwIHRhYi4gIFRoZSBvcHRpb25zIGluY2x1ZGU6PC9w
PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5Mb2NrIFRhYmxlczwvc3Ryb25nPiAmIzgyMTE7IFlv
dXIgaG9zdCBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uLiAgRm9yIGV4YW1w
bGUsIGJ5IGRlZmF1bHQsIFRleHRkcml2ZSBkb2VzbiYjODIxNzt0IGFsbG93IHRhYmxlIGxv
Y2tpbmcuICBJZiB5b3VyIGJhY2t1cCBmYWlscywgdHJ5IHNldHRpbmcgdGhpcyB0byAmIzgy
MjA7Tm8mIzgyMjE7LjwvbGk+CgkJPGxpPjxzdHJvbmc+RGVidWcgTW9kZTwvc3Ryb25nPiAm
IzgyMTE7IFR1cm5pbmcgZGVidWdnaW5nIG9uIHdpbGwgZWNobyB0aGUgY29tbWFuZCBiZWlu
ZyBydW4gdG8gdGhlIHNjcmVlbi48L2xpPgoJCTxsaT48c3Ryb25nPkJhY2t1cCBQYXRoPC9z
dHJvbmc+ICYjODIxMTsgU2V0IHRoZSBkaXJlY3RvcnkgdGhhdCB5b3VyIGJhY2t1cHMgd2ls
bCBiZSBzYXZlZCB0by48L2xpPgoJCTxsaT48c3Ryb25nPk15c3FsZHVtcCBQYXRoPC9zdHJv
bmc+ICYjODIxMTsgSXRzIGxpa2VseSB0aGF0IHRoZSBkZWZhdWx0IHdpbGwgd29yayBmb3Ig
eW91LiAgSWYgbm90LCBlbnRlciB0aGUgZnVsbCBwYXRoIHRoZSB0aGUgZXhlY3V0YWJsZS48
L2xpPgoJCTxsaT48c3Ryb25nPk15c3FsIFBhdGg8L3N0cm9uZz4gJiM4MjExOyBJdHMgbGlr
ZWx5IHRoYXQgdGhlIGRlZmF1bHQgd2lsbCB3b3JrIGZvciB5b3UuICBJZiBub3QsIGVudGVy
IHRoZSBmdWxsIHBhdGggdGhlIHRoZSBleGVjdXRhYmxlLjwvbGk+Cgk8L3VsPgoKCTxoMj5E
YXRhYmFzZSBNYW5hZ2VyPC9oMj4KCjxwPgk8cD5UaGUgPHN0cm9uZz5EQiBNYW5hZ2VyIHRh
Yjwvc3Ryb25nPiBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIE15U1FMIGRhdGFi
YXNlIGFuZCBhbGwgb2YgaXRzIHRhYmxlcy4gIEEgZGV0YWlsZWQgbGlzdCBpbmNsdWRlcyB0
aGUgbmFtZSBvZiB0aGUgdGFibGUsIG51bWJlciBvZiByb3dzIGFuZCBmaWxlIHNwYWNlIHVz
YWdlLjxiciAvPgo8L3A+Cgo8cD5Zb3Ugd2lsbCBhbHNvIGJlIGFsZXJ0ZWQgb2YgYW55IG92
ZXJoZWFkIG9yIGVycm9ycyB0aGF0IG5lZWQgdG8gYmUgcmVwYWlyZWQuICBUYWJsZXMgY2Fu
IGJlIHJlcGFpcmVkLCBkcm9wcGVkIG9yIGJhY2tlZCB1cCBmcm9tIHRoaXMgbGlzdGluZy48
L3A+PC9wPgoKCTx1bD4KCQk8bGk+Q2xpY2tpbmcgb24gdGhlIG5hbWUgb2YgdGhlIHRhYmxl
IHdpbGwgcnVuIGEgc2VsZWN0ICogW3RhYmxlIG5hbWVdIDxzcGFuIGNsYXNzPSJjYXBzIj48
c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBz
Ij5TUUw8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IHN0YXRlbWVudCBhbmQgdGFrZSB5
b3UgdG8gdGhlIDxzdHJvbmc+UnVuIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0i
Y2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+
PC9zcGFuPjwvc3Bhbj48L3NwYW4+IHRhYjwvc3Ryb25nPiB0byBkaXNwbGF5IHRoZSByZXN1
bHRzLjwvbGk+CgkJPGxpPlJlcGFpciBhIHNpbmdsZSB0YWJsZSBpbiB0aGUgbGlzdGluZyBi
eSBjbGlja2luZyB0aGUgUmVwYWlyIGxpbmsuPC9saT4KCQk8bGk+UmVwYWlyIGFsbCB0YWJs
ZXMgaW4gdGhlIGxpc3RpbmcgYnkgY2xpY2tpbmcgdGhlIFJlcGFpciBBbGwgbGluay48L2xp
PgoJCTxsaT5CYWNrdXAgYSBzaW5nbGUgdGFibGUgaW4gdGhlIGxpc3RpbmcgYnkgY2xpY2tp
bmcgdGhlIEJhY2t1cCBsaW5rLjwvbGk+CgkJPGxpPkRyb3AgYSBzaW5nbGUgdGFibGUgaW4g
dGhlIGxpc3RpbmcgYnkgY2xpY2tpbmcgdGhlIERyb3AgbGluay48L2xpPgoJPC91bD4KCgk8
aDI+UnVuIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh
c3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+PC9zcGFuPjwvc3Bhbj48
L3NwYW4+IFdpbmRvdzwvaDI+Cgo8cD4JPHA+VGhlIDxzdHJvbmc+UnVuIDxzcGFuIGNsYXNz
PSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNs
YXNzPSJjYXBzIj5TUUw8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IHRhYjwvc3Ryb25n
PiBhbGxvd3MgZm9yIGZyZWUgZm9ybSBlbnRyeSBhbmQgZXhlY3V0aW9uIG9mIDxzcGFuIGNs
YXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFu
IGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IHN0YXRlbWVu
dHMuICBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBj
bGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj48L3NwYW4+PC9zcGFu
Pjwvc3Bhbj4gd2luZG93IGFjY2VwdHM8YnIgLz4KPC9wPgoKPHA+PHNwYW4gY2xhc3M9ImNh
cHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9
ImNhcHMiPlNFTEVDVDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4sIDxzcGFuIGNsYXNz
PSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNs
YXNzPSJjYXBzIj5JTlNFUlQ8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+LCA8c3BhbiBj
bGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3Bh
biBjbGFzcz0iY2FwcyI+VVBEQVRFPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPiwgPHNw
YW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+
PHNwYW4gY2xhc3M9ImNhcHMiPkNSRUFURTwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4s
IDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNh
cHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5SRVBMQUNFPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9z
cGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFz
cz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlRSVU5DQVRFPC9zcGFuPjwvc3Bhbj48L3Nw
YW4+PC9zcGFuPiwgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+
PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5ERUxFVEU8L3NwYW4+PC9z
cGFuPjwvc3Bhbj48L3NwYW4+IHN0YXRlbWVudHMuICBJZiBhIDxzcGFuIGNsYXNzPSJjYXBz
Ij48c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJj
YXBzIj5TRUxFQ1Q8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IHN0YXRlbWVudCBpcyBy
dW4sIHRoZSByZXN1bHRzIHdpbGwgYmUgZGlzcGxheWVkIHRvIHlvdSBiZWxvdyB0aGUgPHNw
YW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+
PHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bhbj4gd2lu
ZG93IGluIGEgdGFibGUuPGJyIC8+CjwvcD4KCjxwPlRoZSB0YWJsZSBtYXJrdXAgYWxsb3dz
IHlvdSB0byBhZGQgeW91ciBvd24gc3R5bGVzIGZvciBjcmVhdGluZyBhIDxhIGhyZWY9Imh0
dHA6Ly93d3cuYWdhdmVncm91cC5jb20vP3A9MzEiPjxzcGFuIGNsYXNzPSJjYXBzIj48c3Bh
biBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5D
U1M8L3NwYW4+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IFNjcm9sbGFibGUgVGFibGU8L2E+Ljwv
cD48L3A+CgoJPGgyPk1ham9yIFJhbnNvbSBDb250cmlidXRvcnM8L2gyPgoKCTxwPgk8dWw+
CgkJPGxpPkphbiBXaWxsZW0gZGUgQnJ1aWpuPC9saT4KCQk8bGk+SGVpa2tpIFlsPC9wPiI7
czozOiJtZDUiO3M6MzI6IjZlOTdjZDNmNzRhNGExOTMwODJmNzU4Y2YxMzY2MGU3Ijt9
Offline
Re: Making your plugins 4.7-aware
etc wrote #310057:
This works on 4.7 for me:
# Name: rss_admin_db_manager v4.4.1...
Confirmed. It works for me too now. Thanks so much Oleg.
Yiannis
——————————
NeMe | hblack.art | EMAP | A Sea change | Toolkit of Care
I do my best editing after I click on the submit button.
Offline
#20 2018-03-17 12:40:12
- uli
- Moderator

- From: Cologne
- Registered: 2006-08-15
- Posts: 4,316
Re: Making your plugins 4.7-aware
Yay, prefs are saved, and the backups are correctly created, not just pseudo ones in 20b-sizes. Thank you very much, Oleg, for fixing this super-important plugin! :))
I noticed one thing, though, and I can’t tell if I had that already. On the Diagnostics panel, and only there, when Debug mode is on I get an error, twice:
Notice "Undefined index: success"
in /Users/Uli/Sites/txp470-dev/textpattern/include/txp_diag.php at line 173.
textpattern/include/txp_diag.php:173 adminErrorHandler()
textpattern/include/txp_diag.php:499 diag_msg_wrap()
textpattern/include/txp_diag.php:66 doDiagnostics()
textpattern/index.php:252 include()
Do you guys get this, too, with rss_admin_db_manager installed?
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Re: Making your plugins 4.7-aware
Uli, are you sure you have the latest greatest dev? We had this error in the first beta, but it should be patched now.
Offline
#22 2018-03-17 14:22:28
- uli
- Moderator

- From: Cologne
- Registered: 2006-08-15
- Posts: 4,316
Re: Making your plugins 4.7-aware
etc wrote #310076:
Uli, are you sure you have the latest greatest dev? We had this error in the first beta, but it should be patched now.
I just downloaded and installed the beta yesterday. Now with the latest nightly the errors are gone. Thanks!
In bad weather I never leave home without wet_plugout, smd_where_used and adi_form_links
Offline
Re: Making your plugins 4.7-aware
Hi, I’m wondering if there is a kind a good practice or convention for naming plugin related global attributes? I know the txp- prefix is reserved but how should we avoid clashes between two plugins with same global attribute names?
Thanks.
Last edited by NicolasGraph (2018-07-13 07:51:43)
Offline
Re: Making your plugins 4.7-aware
NicolasGraph wrote #313010:
Hi, I’m wondering if there is a kind a good practice or convention for naming plugin related global attributes? I know the
txp-prefix is reserved but how should we avoid clashes between two plugins with same global attribute names?
I guess the same convention applies that for the tags: you should prefix them, but you don’t have to. The parser does not care, fwiw.
Offline
Re: Making your plugins 4.7-aware
etc wrote #313011:
I guess the same convention applies that for the tags: you should prefix them, but you don’t have to. The parser does not care, fwiw.
Thanks Oleg, that what I thought… but in fact what I’m trying to figure is how to avoid clashes in my own plugin tags.
Anyway, In my case I guess I can, for example add a cookie global dedicated attribute to txp:oui_cookie to replace of the name attribute like so <article::id cookie="id" />.
Wouldn’t it be useful to add a variable global dedicated attribute to txp:variable in the same way?
Last edited by NicolasGraph (2018-07-13 08:41:50)
Offline
Re: Making your plugins 4.7-aware
…also, did you think about a case where a bloody plugin dev like me would try to register something like if_cookie as a global attribute? The following code would display a video player if the cookie named cookies-consent is set: <oui::vimeo play="279236253" if_cookie="cookies-consent" />.
It seems to work if the condition is true but, while nothing is displayed when the condition is false, I get this error:
Tag error: <oui::vimeo play="279236253" if_cookie="cookies-consent" /> -> Warning: Invalid argument supplied for foreach() while parsing form default on page archive
textpattern/lib/txplib_publish.php:471 processTags()
textpattern/publish/taghandlers.php:2812 parse()
body()
textpattern/vendors/Textpattern/Tag/Registry.php:116 call_user_func()
textpattern/lib/txplib_publish.php:547 Textpattern\Tag\Registry->process()
textpattern/lib/txplib_publish.php:471 processTags()
textpattern/lib/txplib_misc.php:4364 parse()
textpattern/publish.php:938 parse_form()
textpattern/publish.php:971 doArticle()
textpattern/publish.php:732 parseArticles()
Last edited by NicolasGraph (2018-07-13 11:26:29)
Offline
Re: Making your plugins 4.7-aware
Salut Nicolas,
I’m not sure about how you want to achieve it. I’ve tried the following “plugin”
Txp::get('\Textpattern\Tag\Registry')->registerAttr('if_test');
function if_test($atts, $thing = null) {
return gps('test') ? $thing : 'nothing';
}
and it seems to work fine. An important thing to know is that the global attributes are currently {post}-processed. When you call something like
<txp:body if_test />
the workflow is the following:
body()function is called and parses the articles body;- the result is passed as
$thingtoif_test()along withif_testattribute itself; if_test()decides what to do with it and outputs the result.
My internet connection is very poor atm, I can not download and test oui_player, sorry.
Offline
Re: Making your plugins 4.7-aware
Merci Oleg,
No worry about your connection, I will take a fresh look on my issue on Monday and I will come back with my own minimal test case if I can’t fix because it is not part of an official release of my plug-in yet.
Bon weekend.
Last edited by NicolasGraph (2018-07-14 11:39:32)
Offline
Re: Making your plugins 4.7-aware
Hi, thanks to your example Oleg, I understood what was wrong with my own test.
Here is the kind of thing I tried:
<oui::if_gps name="test">
<txp:body />
</oui::if_gps>
or…
<txp:body if_gps="test" />
with this plugin code:
Txp::get('\Textpattern\Tag\Registry')->registerAttr('oui_if_gps', 'if_gps');
function oui_if_gps($atts, $thing = null) {
extract(lAtts(array(
'name' => '',
'if_gps' => '',
), $atts));
$name or $name = $if_gps;
$out = gps($name) ? true : false;
return parse($thing, $out);
}
This tag could be called by its own, with maybe more attributes/options but the if_gps attribute here is a global alias for name. It allows to peform simplest tests without the need to add the oui_if_gps tag.
Because the tag could be used by its own as a container, I uses return parse($thing, $out);, however, its triggers an error when $out is false.
Doing return $out ? $thing : ''; does work but it would not parse potential else contents.
In my case I could check if the tag was used through the global attribute to conditionate the return, but it could be a problem if the global attribute wouldn’t have its own name I guess.
I don’t know if the parser should manage this kind of use or not, or if, has I aked before, there should be a convention about global attributes to name them differently than others; in which case checking the use of a global attribute could seem alright.
Edit: I can’t remember how I should highlight the code in the forum; is it sticked anywhere ? bc(prism language-php).. does not work.
Last edited by NicolasGraph (2018-07-16 15:23:04)
Offline
Re: Making your plugins 4.7-aware
NicolasGraph wrote #313030:
Edit: I can’t remember how I should highlight the code in the forum; is it sticked anywhere ?bc(prism language-php)..does not work.
You want to use “bc..” followed by the language the code is in: html, php, etc.
Offline