# Name: rss_admin_db_manager v4.3 # Type: Admin/Client side plugin # Database management system. # Author: Rob Sable # URL: http://www.wilshireone.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjIwOiJyc3NfYWRtaW5fZGJfbWFuYWdlciI7czo2OiJhdXRo b3IiO3M6OToiUm9iIFNhYmxlIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI3OiJodHRwOi8vd3d3 LndpbHNoaXJlb25lLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiI0LjMiO3M6MTE6ImRlc2Ny aXB0aW9uIjtzOjI3OiJEYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbS4iO3M6NDoiY29kZSI7 czoxODczMDoiaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KICAgIGFkZF9wcml2 cygncnNzX2RiX21hbicsICcxJyk7DQogICAgcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwg InJzc19kYl9tYW4iLCAiREIgTWFuYWdlciIpOw0KICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJy c3NfZGJfbWFuIiwgInJzc19kYl9tYW4iKTsNCg0KICAgIGFkZF9wcml2cygncnNzX3NxbF9y dW4nLCAnMScpOw0KICAgIHJlZ2lzdGVyX3RhYigiZXh0ZW5zaW9ucyIsICJyc3Nfc3FsX3J1 biIsICJSdW4gU1FMIik7DQogICAgcmVnaXN0ZXJfY2FsbGJhY2soInJzc19zcWxfcnVuIiwg InJzc19zcWxfcnVuIik7DQoNCiAgICBhZGRfcHJpdnMoJ3Jzc19kYl9iaycsICcxJyk7DQog ICAgcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgInJzc19kYl9iayIsICJEQiBCYWNrdXAi KTsNCiAgICByZWdpc3Rlcl9jYWxsYmFjaygicnNzX2RiX2JrIiwgInJzc19kYl9iayIpOw0K fQ0KDQoNCmZ1bmN0aW9uIHJzc19kYl9iaygkZXZlbnQsICRzdGVwKSB7DQogIGdsb2JhbCAk cHJlZnMsICRyc3NfZGJia19wYXRoLCAkcnNzX2RiYmtfZHVtcCwgJHJzc19kYmJrX215c3Fs LCAkcnNzX2RiYmtfbG9jaywgJHJzc19kYmJrX3R4cGxvZywgJHJzc19kYmJrX2RlYnVnLCAk REIsICRmaWxlX2Jhc2VfcGF0aDsNCg0KICBpZiAoIWlzc2V0KCRyc3NfZGJia19sb2NrKSkg ew0KICAgICRyc3NfZGJia19sb2NrID0gIjEiOw0KICAgICRycyA9IHNhZmVfaW5zZXJ0KCd0 eHBfcHJlZnMnLCAibmFtZT0ncnNzX2RiYmtfbG9jaycsIHZhbD0nJHJzc19kYmJrX2xvY2sn LCBwcmVmc19pZD0nMSciKTsNCiAgfQ0KDQogIGlmICghaXNzZXQoJHJzc19kYmJrX3R4cGxv ZykpIHsNCiAgICAkcnNzX2RiYmtfdHhwbG9nID0gIjEiOw0KICAgICRycyA9IHNhZmVfaW5z ZXJ0KCd0eHBfcHJlZnMnLCAibmFtZT0ncnNzX2RiYmtfdHhwbG9nJywgdmFsPSckcnNzX2Ri YmtfdHhwbG9nJywgcHJlZnNfaWQ9JzEnIik7DQogIH0NCg0KICBpZiAoIWlzc2V0KCRyc3Nf ZGJia19kZWJ1ZykpIHsNCiAgICAkcnNzX2RiYmtfZGVidWcgPSAiMCI7DQogICAgJHJzID0g c2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICJuYW1lPSdyc3NfZGJia19kZWJ1ZycsIHZhbD0n JHJzc19kYmJrX2RlYnVnJywgcHJlZnNfaWQ9JzEnIik7DQogIH0NCg0KICBpZiAoIWlzc2V0 KCRyc3NfZGJia19wYXRoKSkgew0KICAgICRyc3NfZGJia19wYXRoID0gJGZpbGVfYmFzZV9w YXRoOw0KICAgICRycyA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAibmFtZT0ncnNzX2Ri YmtfcGF0aCcsIHZhbD0nIi5hZGRzbGFzaGVzKCRyc3NfZGJia19wYXRoKS4iJywgcHJlZnNf aWQ9JzEnIik7DQogIH0NCg0KICBpZiAoIWlzc2V0KCRyc3NfZGJia19kdW1wKSkgew0KICAg ICRyc3NfZGJia19kdW1wID0gIm15c3FsZHVtcCI7DQogICAgJHJzID0gc2FmZV9pbnNlcnQo J3R4cF9wcmVmcycsICJuYW1lPSdyc3NfZGJia19kdW1wJywgdmFsPSciLmFkZHNsYXNoZXMo JHJzc19kYmJrX2R1bXApLiInLCBwcmVmc19pZD0nMSciKTsNCiAgfQ0KDQogIGlmICghaXNz ZXQoJHJzc19kYmJrX215c3FsKSkgew0KICAgICRyc3NfZGJia19teXNxbCA9ICJteXNxbCI7 DQogICAgJHJzID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICJuYW1lPSdyc3NfZGJia19t eXNxbCcsIHZhbD0nIi5hZGRzbGFzaGVzKCRyc3NfZGJia19teXNxbCkuIicsIHByZWZzX2lk PScxJyIpOw0KICB9DQoNCiAgaW5jbHVkZSh0eHBhdGggLiAnL2luY2x1ZGUvdHhwX3ByZWZz LnBocCcpOw0KDQogICRia3BhdGggPSAkcnNzX2RiYmtfcGF0aDsNCiAgJGlzd2luID0gcHJl Z19tYXRjaCgnL1dpbi8nLHBocF91bmFtZSgpKTsNCiAgJG15c3FsX2h1cCA9ICcgLWgnLiRE Qi0+aG9zdC4nIC11Jy4kREItPnVzZXIuJyAtcCcuZXNjYXBlc2hlbGxjbWQoJERCLT5wYXNz KTsNCgkkdHhwbG9ncHMgPSBwcygncnNzX2RiYmtfdHhwbG9nJyk7DQoNCiAgaWYgKHBzKCJz YXZlIikpIHsNCg0KICAgICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJQcmVmZXJlbmNlcyBT YXZlZCIpOw0KICAgICAgc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAnIi5hZGRz bGFzaGVzKHBzKCdyc3NfZGJia19wYXRoJykpLiInIiwibmFtZSA9ICdyc3NfZGJia19wYXRo JyBhbmQgcHJlZnNfaWQgPScxJyIpOw0KICAgICAgc2FmZV91cGRhdGUoInR4cF9wcmVmcyIs ICJ2YWwgPSAnIi5hZGRzbGFzaGVzKHBzKCdyc3NfZGJia19kdW1wJykpLiInIiwibmFtZSA9 ICdyc3NfZGJia19kdW1wJyBhbmQgcHJlZnNfaWQgPScxJyIpOw0KICAgICAgc2FmZV91cGRh dGUoInR4cF9wcmVmcyIsICJ2YWwgPSAnIi5hZGRzbGFzaGVzKHBzKCdyc3NfZGJia19teXNx bCcpKS4iJyIsIm5hbWUgPSAncnNzX2RiYmtfbXlzcWwnIGFuZCBwcmVmc19pZCA9JzEnIik7 DQogICAgICBzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLnBzKCdyc3NfZGJi a19sb2NrJykuIiciLCJuYW1lID0gJ3Jzc19kYmJrX2xvY2snIGFuZCBwcmVmc19pZCA9JzEn Iik7DQogICAgICBpZiAoaXNzZXQoJHR4cGxvZ3BzKSkgc2FmZV91cGRhdGUoInR4cF9wcmVm cyIsICJ2YWwgPSAnIi5wcygncnNzX2RiYmtfdHhwbG9nJykuIiciLCJuYW1lID0gJ3Jzc19k YmJrX3R4cGxvZycgYW5kIHByZWZzX2lkID0nMSciKTsNCiAgICAgIHNhZmVfdXBkYXRlKCJ0 eHBfcHJlZnMiLCAidmFsID0gJyIucHMoJ3Jzc19kYmJrX2RlYnVnJykuIiciLCJuYW1lID0g J3Jzc19kYmJrX2RlYnVnJyBhbmQgcHJlZnNfaWQgPScxJyIpOw0KICAgICAgaGVhZGVyKCJM b2NhdGlvbjogaW5kZXgucGhwP2V2ZW50PXJzc19kYl9iayIpOw0KDQogIH0gIGVsc2UgaWYg KGdwcygiYmsiKSkgew0KDQoJCQkkYmtfdGFibGUgPSAoZ3BzKCJia190YWJsZSIpKSA/ICIg LS10YWJsZXMgIi5ncHMoImJrX3RhYmxlIikuIiAiIDogIiI7DQoJCQkkdGFicGF0aCA9IChn cHMoImJrX3RhYmxlIikpID8gIi0iLmdwcygiYmtfdGFibGUiKSA6ICIiOw0KICAgICAgJGd6 aXAgPSBncHMoImd6aXAiKTsNCgkJCSRmaWxlbmFtZSA9IHRpbWUoKS4nLScuJERCLT5kYi4k dGFicGF0aDsNCiAgICAgICRiYWNrdXBfcGF0aCA9ICRia3BhdGguJy8nLiRmaWxlbmFtZS4n LnNxbCc7DQogICAgICAkbG9jayA9ICgkcnNzX2RiYmtfbG9jaykgPyAiIiA6ICIgLS1za2lw LWxvY2stdGFibGVzIC0tc2tpcC1hZGQtbG9ja3MgIjsNCiAgICAgIGVjaG8gJHR4cGxvZ3Bz Ow0KICAgICAgJG5vbG9nID0gKCRyc3NfZGJia190eHBsb2cpID8gIiIgOiAiIC0taWdub3Jl LXRhYmxlPSIuJERCLT5kYi4iLnR4cF9sb2cgIjsNCiAgICAgICRub2xvZyA9IChpc3NldCgk YmtfdGFibGUpICYmIGdwcygiYmtfdGFibGUiKSA9PSAidHhwX2xvZyIpID8gIiIgOiAkbm9s b2c7DQoNCiAgICAgIGlmKCRnemlwKSB7DQogICAgICAgICRiYWNrdXBfcGF0aC49ICcuZ3on Ow0KICAgICAgICAkYmFja3VwX2NtZCA9ICRyc3NfZGJia19kdW1wLiRteXNxbF9odXAuJyAt USAtLWFkZC1kcm9wLXRhYmxlICcuJGxvY2suJG5vbG9nLiREQi0+ZGIuJGJrX3RhYmxlLicg fCBnemlwID4gJy4kYmFja3VwX3BhdGg7DQogICAgICB9IGVsc2Ugew0KICAgICAgICAkYmFj a3VwX2NtZCA9ICRyc3NfZGJia19kdW1wLiRteXNxbF9odXAuJyAtUSAtLWFkZC1kcm9wLXRh YmxlICcuJGxvY2suJG5vbG9nLiREQi0+ZGIuJGJrX3RhYmxlLicgPiAnLiRiYWNrdXBfcGF0 aDsNCiAgICAgIH0NCgkgICAgJGJrZGVidWcgPSAoJHJzc19kYmJrX2RlYnVnKSA/ICRiYWNr dXBfY21kIDogJyc7DQogICAgICAkZXJyb3IgPSAiIjsNCg0KICAgICAgaWYgKGZ1bmN0aW9u X2V4aXN0cygncGFzc3RocnUnKSkgew0KICAgICAgICBwYXNzdGhydSgkYmFja3VwX2NtZCwg JGVycm9yKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgICRkdW1wSXQ9cG9wZW4oJGJhY2t1 cF9jbWQsICdyJyk7DQogICAgICAgIHBjbG9zZSgkZHVtcEl0KTsNCiAgICAgIH0NCg0KICAg ICAgaWYoIWlzX3dyaXRhYmxlKCRia3BhdGgpKSB7DQogICAgICAgIHBhZ2V0b3AoIkRCIE1h bmFnZXIiLCAiQkFDS1VQIEZBSUxFRDogZm9sZGVyIGlzIG5vdCB3cml0YWJsZSIpOw0KICAg ICAgfSBlbHNlaWYoJGVycm9yKSB7DQogICAgICAgIHVubGluaygkYmFja3VwX3BhdGgpOw0K ICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIkJBQ0tVUCBGQUlMRUQuICBFUlJPUiBO TzogIi4kZXJyb3IpOw0KICAgICAgfSBlbHNlIGlmKCFpc19maWxlKCRiYWNrdXBfcGF0aCkp IHsNCiAgICAgICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJCQUNLVVAgRkFJTEVELiAgRVJS T1IgTk86ICIuJGVycm9yKTsNCiAgICAgIH0gZWxzZSBpZihmaWxlc2l6ZSgkYmFja3VwX3Bh dGgpID09IDApIHsNCiAgICAgICAgdW5saW5rKCRiYWNrdXBfcGF0aCk7DQogICAgICAgIHBh Z2V0b3AoIkRCIE1hbmFnZXIiLCAiQkFDS1VQIEZBSUxFRC4gIEVSUk9SIE5POiAiLiRlcnJv cik7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIkJh Y2tlZCBVcDogIi4kREItPmRiLiIgdG8gIi4kZmlsZW5hbWUpOw0KICAgICAgfQ0KDQogIH0g ZWxzZSBpZiAoZ3BzKCJkb3dubG9hZCIpKSB7DQoNCiAgICAkZm4gPSBncHMoImRvd25sb2Fk Iik7DQogICAgJGZpbGVfcGF0aCA9ICRia3BhdGguJy8nLiRmbjsNCiAgICBoZWFkZXIoIlBy YWdtYTogcHVibGljIik7DQogICAgaGVhZGVyKCJFeHBpcmVzOiAwIik7DQogICAgaGVhZGVy KCJDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNo ZWNrPTAiKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vZm9yY2Ut ZG93bmxvYWQiKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0 ZXQtc3RyZWFtIik7DQogICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2Rv d25sb2FkIik7DQogICAgaWYgKHN1YnN0cigkZm4sIC0yKSA9PSAiZ3oiKSBoZWFkZXIoIkNv bnRlbnQtVHlwZTogYXBwbGljYXRpb24vemlwIik7DQogICAgaGVhZGVyKCJDb250ZW50LURp c3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRmaWxlX3BhdGgp LiI7Iik7DQogICAgaGVhZGVyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnki KTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiLmZpbGVzaXplKCRmaWxlX3BhdGgp KTsNCiAgICBAcmVhZGZpbGUoJGZpbGVfcGF0aCk7DQoNCiAgfSBlbHNlIGlmIChncHMoInJl c3RvcmUiKSkgew0KDQogICAgaWYoc3RyaXN0cihncHMoInJlc3RvcmUiKSwgJy5neicpKSB7 DQogICAgICAkYmFja3VwX2NtZCA9ICdndW56aXAgPCAnLiRia3BhdGguJy8nLmdwcygicmVz dG9yZSIpLicgfCAnLiRyc3NfZGJia19teXNxbC4kbXlzcWxfaHVwLicgJy4kREItPmRiOw0K ICAgIH0gZWxzZSB7DQogICAgICAkYmFja3VwX2NtZCA9ICRyc3NfZGJia19teXNxbC4kbXlz cWxfaHVwLicgJy4kREItPmRiLicgPCAnLiRia3BhdGguJy8nLmdwcygicmVzdG9yZSIpOw0K ICAgIH0NCg0KICAgICRia2RlYnVnID0gKCRyc3NfZGJia19kZWJ1ZykgPyAkYmFja3VwX2Nt ZCA6ICcnOw0KICAgICRlcnJvciA9ICIiOw0KDQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygn cGFzc3RocnUnKSkgew0KICAgICAgcGFzc3RocnUoJGJhY2t1cF9jbWQsICRlcnJvcik7DQog ICAgfSBlbHNlIHsNCiAgICAgICRkdW1wSXQ9cG9wZW4oJGJhY2t1cF9jbWQsICdyJyk7DQog ICAgICBwY2xvc2UoJGR1bXBJdCk7DQogICAgfQ0KDQogICAgaWYoJGVycm9yKSB7DQogICAg ICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIkZBSUxFRCBUTyBSRVNUT1JFOiAiLiRlcnJvcik7 DQogICAgfSBlbHNlIHsNCiAgICAgIHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiUmVzdG9yZWQ6 ICIuZ3BzKCJyZXN0b3JlIikuIiB0byAiLiREQi0+ZGIpOw0KICAgIH0NCg0KICB9IGVsc2Ug aWYoZ3BzKCJkZWxldGUiKSkgew0KDQogICAgICBpZihpc19maWxlKCRia3BhdGguJy8nLmdw cygiZGVsZXRlIikpKSB7DQogICAgICAgIGlmKCF1bmxpbmsoJGJrcGF0aC4nLycuZ3BzKCJk ZWxldGUiKSkpIHsNCiAgICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIlVuYWJsZSB0 byBEZWxldGU6ICIuZ3BzKCJkZWxldGUiKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAg ICAgcGFnZXRvcCgiREIgTWFuYWdlciIsICJEZWxldGVkOiAiLmdwcygiZGVsZXRlIikpOw0K ICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwYWdldG9wKCJEQiBNYW5hZ2Vy IiwgIlVuYWJsZSB0byBEZWxldGU6ICIuZ3BzKCJkZWxldGUiKSk7DQogICAgICB9DQoNCiAg fSBlbHNlIHsNCiAgICBwYWdldG9wKCJEQiBCYWNrdXAiKTsNCiAgfQ0KDQogICRnenAgPSAo ISRpc3dpbikgPyAiIHwgIi5ocmVmKCdnemlwcGVkIGZpbGUnLCAiaW5kZXgucGhwP2V2ZW50 PXJzc19kYl9iayZhbXA7Yms9JERCLT5kYiZhbXA7Z3ppcD0xIikgOiAiIjsNCg0KICAkc3Fs dmVyc2lvbiA9IGdldFJvdygiU0VMRUNUIFZFUlNJT04oKSBBUyB2ZXJzaW9uIik7DQogICRz cWx2ID0gZXhwbG9kZSgiLSIsICRzcWx2ZXJzaW9uWyd2ZXJzaW9uJ10pOw0KICAkYWxsb3du b2xvZ3MgPSAoKGZsb2F0KSRzcWx2WzBdID49IChmbG9hdCkiNC4xLjkiKSA/IHRkYShnVHh0 KCdJbmNsdWRlIHR4cF9sb2c6JyksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGlj YWwtYWxpZ246bWlkZGxlIicpLnRkYSh5ZXNub1JhZGlvKCJyc3NfZGJia190eHBsb2ciLCAk cnNzX2RiYmtfdHhwbG9nKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFs aWduOm1pZGRsZSInKSA6ICcnOw0KDQoJaWYgKGlzc2V0KCRia2RlYnVnKSAmJiAkYmtkZWJ1 ZykgZWNobyAnPHAgYWxpZ249ImNlbnRlciI+Jy4kYmtkZWJ1Zy4nPC9wPic7DQoNCiAgZWNo bw0KICBzdGFydFRhYmxlKCdsaXN0JykuDQogIGZvcm0oDQogIHRyKA0KICAgIHRkYShnVHh0 KCdMb2NrIFRhYmxlczonKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNhbC1h bGlnbjptaWRkbGUiJykudGRhKHllc25vUmFkaW8oInJzc19kYmJrX2xvY2siLCAkcnNzX2Ri YmtfbG9jayksICcgc3R5bGU9InRleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRk bGUiJykuDQogICAgJGFsbG93bm9sb2dzLg0KICAgIHRkYShnVHh0KCdEZWJ1ZyBNb2RlOicp LCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSInKS50 ZGEoeWVzbm9SYWRpbygicnNzX2RiYmtfZGVidWciLCAkcnNzX2RiYmtfZGVidWcpLCAnIHN0 eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLg0KICAgIHRk YShmSW5wdXQoInN1Ym1pdCIsInNhdmUiLGdUeHQoInNhdmVfYnV0dG9uIiksInB1Ymxpc2gi KS5lSW5wdXQoInJzc19kYl9iayIpLnNJbnB1dCgnc2F2ZXByZWZzJyksICIgY29sc3Bhbj1c IjJcIiBjbGFzcz1cIm5vbGluZVwiIikNCiAgKS4NCiAgdHIoDQogICAgdGRhKGdUeHQoJ0Jh Y2t1cCBQYXRoOicpLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWdu Om1pZGRsZSInKS50ZGEodGV4dF9pbnB1dCgicnNzX2RiYmtfcGF0aCIsJHJzc19kYmJrX3Bh dGgsJzUwJyksICcgY29sc3Bhbj0iMTUiJykNCiAgKS4NCiAgdHIoDQogICAgdGRhKGdUeHQo J215c3FsZHVtcCBQYXRoOicpLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2Fs LWFsaWduOm1pZGRsZSInKS50ZGEodGV4dF9pbnB1dCgicnNzX2RiYmtfZHVtcCIsJHJzc19k YmJrX2R1bXAsJzUwJyksICcgY29sc3Bhbj0iMTUiJykNCiAgKS4NCiAgdHIoDQogICAgdGRh KGdUeHQoJ215c3FsIFBhdGg6JyksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGlj YWwtYWxpZ246bWlkZGxlIicpLnRkYSh0ZXh0X2lucHV0KCJyc3NfZGJia19teXNxbCIsJHJz c19kYmJrX215c3FsLCc1MCcpLCAnIGNvbHNwYW49IjE1IicpKQ0KICApLmVuZFRhYmxlKCku DQogIHN0YXJ0VGFibGUoImxpc3QiKS4NCiAgdHIoDQogICAgdGRhKGhlZCgnQ3JlYXRlIGEg bmV3IGJhY2t1cCBvZiB0aGUgJy4kREItPmRiLicgZGF0YWJhc2UnLmJyLg0KICAgIGhyZWYo Jy5zcWwgZmlsZScsICJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX2JrJmFtcDtiaz0kREItPmRi IikuJGd6cCwzKSwnIGNvbHNwYW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiJykN CiAgICApLg0KICB0cih0ZGNzKGhlZCgiUHJldmlvdXMgQmFja3VwIEZpbGVzIiwxKSw3KSku DQogIHRyKA0KICAgIGhjZWxsKCJOby4iKS4NCiAgICBoY2VsbCgiQmFja3VwIEZpbGUgTmFt ZSIpLg0KICAgIGhjZWxsKCJCYWNrdXAgRGF0ZS9UaW1lIikuDQogICAgaGNlbGwoIkJhY2t1 cCBGaWxlIFNpemUiKS4NCiAgICBoY2VsbCgiIikuDQogICAgaGNlbGwoIiIpLg0KICAgIGhj ZWxsKCIiKQ0KICApOw0KDQogICR0b3RhbHNpemUgPSAwOw0KICAkbm8gPSAwOw0KICBpZigh aXNfZm9sZGVyX2VtcHR5KCRia3BhdGgpKSB7DQogICAgaWYgKCRoYW5kbGUgPSBvcGVuZGly KCRia3BhdGgpKSB7DQogICAgICAkZGF0YWJhc2VfZmlsZXMgPSBhcnJheSgpOw0KICAgICAg d2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkgew0KICAgICAg ICBpZiAoKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSAmJiAoc3Vic3RyKCRmaWxl LCAtNCkgPT0gIi5zcWwiIHx8IHN1YnN0cigkZmlsZSwgLTcpID09ICIuc3FsLmd6IikpIHsN CiAgICAgICAgICAkZGF0YWJhc2VfZmlsZXNbXSA9ICRmaWxlOw0KICAgICAgICB9DQogICAg ICB9DQogICAgICBjbG9zZWRpcigkaGFuZGxlKTsNCiAgICAgIGZvcigkaSA9IChzaXplb2Yo JGRhdGFiYXNlX2ZpbGVzKS0xKTsgJGkgPiAtMTsgJGktLSkgew0KICAgICAgICAkbm8rKzsN CiAgICAgICAgJHN0eWxlID0gKCRubyUyID09IDApID8gJyBzdHlsZT0iYmFja2dyb3VuZC1j b2xvcjogI2VlZTsiJyA6ICcnOw0KICAgICAgICAkZGF0YWJhc2VfdGV4dCA9IHN1YnN0cigk ZGF0YWJhc2VfZmlsZXNbJGldLCAxMSk7DQogICAgICAgICRkYXRlX3RleHQgPSBzdHJmdGlt ZSgiJUEsICVCICVkLCAlWSBbJUg6JU06JVNdIiwgc3Vic3RyKCRkYXRhYmFzZV9maWxlc1sk aV0sIDAsIDEwKSk7DQogICAgICAgICRzaXplX3RleHQgPSBmaWxlc2l6ZSgkYmtwYXRoLicv Jy4kZGF0YWJhc2VfZmlsZXNbJGldKTsNCiAgICAgICAgJHRvdGFsc2l6ZSArPSAkc2l6ZV90 ZXh0Ow0KDQogICAgICAgIGVjaG8NCiAgICAgICAgdHIoDQogICAgICAgICAgdGQoJG5vKS4N CiAgICAgICAgICB0ZCgkZGF0YWJhc2VfdGV4dCkuDQogICAgICAgICAgdGQoJGRhdGVfdGV4 dCkuDQogICAgICAgICAgdGQocHJldHR5RmlsZVNpemUoJHNpemVfdGV4dCkpLg0KICAgICAg ICAgICc8dGQ+PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PXJzc19kYl9iayZhbXA7ZG93bmxv YWQ9Jy4kZGF0YWJhc2VfZmlsZXNbJGldLiciPkRvd25sb2FkPC9hPjwvdGQ+Jy4NCiAgICAg ICAgICAnPHRkPjxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO3Jlc3Rv cmU9Jy4kZGF0YWJhc2VfZmlsZXNbJGldLiciICBvbmNsaWNrPSJyZXR1cm4gdmVyaWZ5KFwn Jy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj5SZXN0b3JlPC9hPjwvdGQ+Jy4NCiAgICAg ICAgICAnPHRkPjxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO2RlbGV0 ZT0nLiRkYXRhYmFzZV9maWxlc1skaV0uJyIgIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcn LmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPkRlbGV0ZTwvYT48L3RkPicsICRzdHlsZQ0K ICAgICAgICApOw0KICAgICAgfQ0KDQogICAgZWNobw0KICAgICAgdHIoDQogICAgICAgIHRh Zygkbm8uIiBCYWNrdXAgRmlsZShzKSIsICJ0aCIsICcgY29sc3Bhbj0iMyInKS4NCiAgICAg ICAgdGFnKHByZXR0eUZpbGVTaXplKCR0b3RhbHNpemUpLCAidGgiLCAnIGNvbHNwYW49IjQi JykNCiAgICAgICk7DQoNCiAgICB9IGVsc2Ugew0KICAgICAgZWNobw0KICAgICAgdHIoDQog ICAgICAgIHRkYShoZWQoJ1lvdSBoYXZlIG5vIGRhdGFiYXNlIGJhY2t1cHMnLmJyLidDcmVh dGUgYSBuZXcgYmFja3VwIG9mIHRoZSAnLiREQi0+ZGIuJyBkYXRhYmFzZScuYnIuDQogICAg ICAgIGhyZWYoJy5zcWwgZmlsZScsICJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX2JrJmFtcDti az0kREItPmRiIikuJGd6cCwzKSwnIGNvbHNwYW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOmNl bnRlcjsiJykNCiAgICAgICAgKTsNCiAgICB9DQogIH0gZWxzZSB7DQogICAgICBlY2hvDQog ICAgICB0cigNCiAgICAgICAgdGRhKGhlZCgnWW91IGhhdmUgbm8gZGF0YWJhc2UgYmFja3Vw cycuYnIuJ0NyZWF0ZSBhIG5ldyBiYWNrdXAgb2YgdGhlICcuJERCLT5kYi4nIGRhdGFiYXNl Jy5ici4NCiAgICAgICAgaHJlZignLnNxbCBmaWxlJywgImluZGV4LnBocD9ldmVudD1yc3Nf ZGJfYmsmYW1wO2JrPSREQi0+ZGIiKS4kZ3pwLDMpLCcgY29sc3Bhbj0iNyIgc3R5bGU9InRl eHQtYWxpZ246Y2VudGVyOyInKQ0KICAgICAgICApOw0KICB9DQogIGVjaG8gZW5kVGFibGUo KTsNCn0NCg0KZnVuY3Rpb24gcnNzX2RiX21hbigkZXZlbnQsICRzdGVwKSB7DQogIGdsb2Jh bCAkREI7DQoNCiAgaWYgKGdwcygib3B0X3RhYmxlIikpIHsNCiAgICAkcXVlcnkgPSAiT1BU SU1JWkUgVEFCTEUgIi5ncHMoIm9wdF90YWJsZSIpOw0KICAgIHNhZmVfcXVlcnkoJHF1ZXJ5 KTsNCiAgICBwYWdldG9wKCJEQiBNYW5hZ2VyIiwgIk9wdGltemVkOiAiLmdwcygib3B0X3Rh YmxlIikpOw0KICB9IGVsc2UgIGlmIChncHMoInJlcF90YWJsZSIpKSB7DQogICAgJHF1ZXJ5 ID0gIlJFUEFJUiBUQUJMRSAiLmdwcygicmVwX3RhYmxlIik7DQogICAgc2FmZV9xdWVyeSgk cXVlcnkpOw0KICAgIHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiUmVwYWlyZWQ6ICIuZ3BzKCJy ZXBfdGFibGUiKSk7DQoJfSBlbHNlIAlpZiAoZ3BzKCJyZXBfYWxsIikpIHsNCgkJJHF1ZXJ5 ID0gIlJFUEFJUiBUQUJMRSAiLmdwcygicmVwX2FsbCIpOw0KCQlzYWZlX3F1ZXJ5KCRxdWVy eSk7DQoJCXBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiUmVwYWlyZWQgQWxsIFRhYmxlcyIpOw0K ICB9IGVsc2UgIGlmIChncHMoImRyb3BfdGFibGUiKSkgew0KICAgICRxdWVyeSA9ICJEUk9Q IFRBQkxFICIuZ3BzKCJkcm9wX3RhYmxlIik7DQogICAgc2FmZV9xdWVyeSgkcXVlcnkpOw0K ICAgIHBhZ2V0b3AoIkRCIE1hbmFnZXIiLCAiRHJvcHBlZDogIi5ncHMoImRyb3BfdGFibGUi KSk7DQogIH0gZWxzZSB7DQogICAgcGFnZXRvcCgiRGF0YWJhc2UgTWFuYWdlciIpOw0KICB9 DQoNCgkkc3FsdmVyc2lvbiA9IGdldFJvdygiU0VMRUNUIFZFUlNJT04oKSBBUyB2ZXJzaW9u Iik7DQoJJGhlYWRhdHRzID0gJyBzdHlsZT0iY29sb3I6IzAwNjlEMTtwYWRkaW5nOjAgMTBw eCAwIDVweDsiJzsNCg0KCWVjaG8NCglzdGFydFRhYmxlKCdkYmluZm8nKS4NCgl0cigNCgkJ aGNlbGwoIkRhdGFiYXNlIEhvc3Q6IikuDQoJCXRkYSgkREItPmhvc3QsICRoZWFkYXR0cyku DQoJCWhjZWxsKCJEYXRhYmFzZSBOYW1lOiIpLg0KCQl0ZGEoJERCLT5kYiwgJGhlYWRhdHRz KS4NCgkJaGNlbGwoIkRhdGFiYXNlIFVzZXI6IikuDQoJCXRkYSgkREItPnVzZXIsICRoZWFk YXR0cykuDQoJCWhjZWxsKCJEYXRhYmFzZSBWZXJzaW9uOiIpLg0KCQl0ZGEoIk15U1FMIHYi LiRzcWx2ZXJzaW9uWyd2ZXJzaW9uJ10sICRoZWFkYXR0cykNCgkpLg0KCWVuZFRhYmxlKCku YnI7DQoNCgllY2hvDQoJc3RhcnRUYWJsZSgnbGlzdCcpLg0KCXRyKA0KCQloY2VsbCgiTm8u IikuDQoJCWhjZWxsKCJUYWJsZXMiKS4NCgkJaGNlbGwoIlJlY29yZHMiKS4NCgkJaGNlbGwo IkRhdGEgVXNhZ2UiKS4NCgkJaGNlbGwoIkluZGV4IFVzYWdlIikuDQoJCWhjZWxsKCJUb3Rh bCBVc2FnZSIpLg0KCQloY2VsbCgiT3ZlcmhlYWQiKS4NCgkJLy9oY2VsbCgiT3B0aW1pemUi KS4NCgkJaGNlbGwoIkVyck5vIikuDQoJCWhjZWxsKCJSZXBhaXIiKS4NCgkJaGNlbGwoIkJh Y2t1cCIpLg0KCQloY2VsbCgiRHJvcCIpDQoJKTsNCg0KCQlpZigkc3FsdmVyc2lvblsndmVy c2lvbiddID49ICczLjIzJykgew0KCQkJJG5vID0gMDsNCgkJCSRyb3dfdXNhZ2UgPSAwOw0K CQkJJGRhdGFfdXNhZ2UgPSAwOw0KCQkJJGluZGV4X3VzYWdlID0gIDA7DQoJCQkkb3Zlcmhl YWRfdXNhZ2UgPSAwOw0KCQkJJGFsbHRhYnMgPSBhcnJheSgpOw0KDQoJCQkkdGFibGVzc3Rh dHVzID0gZ2V0Um93cygiU0hPVyBUQUJMRSBTVEFUVVMiKTsNCgkJCWZvcmVhY2goJHRhYmxl c3N0YXR1cyBhcyAgJHRhYmxlc3RhdHVzKSB7DQoJCQkJZXh0cmFjdCgkdGFibGVzdGF0dXMp Ow0KDQoJCQkJJHEgPSAiU0hPVyBLRVlTIEZST00gYCIuJE5hbWUuImAiOw0KCQkJCXNhZmVf cXVlcnkoJHEpOw0KCQkJCSRteXNxbEVycm5vID0gbXlzcWxfZXJybm8oKTsNCgkJCQkkYWxs dGFic1tdID0gJE5hbWU7DQoNCgkJCQkkY29sb3IgPSAoJG15c3FsRXJybm8gIT0gMCkgPyAn IHN0eWxlPSJjb2xvcjojRDEwMDAwOyInIDogJyBzdHlsZT0iY29sb3I6IzRCOUYwMDsiJzsN CgkJCQkkY29sb3IyID0gKCREYXRhX2ZyZWUgPiAwKSA/ICcgc3R5bGU9ImNvbG9yOiNEMTAw MDA7IicgOiAnIHN0eWxlPSJjb2xvcjojNEI5RjAwOyInOw0KCQkJCSRzdHlsZSA9ICgkbm8l MiA9PSAwKSA/ICcgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlZWU7IicgOiAnJzsNCg0K CQkJCSRubysrOw0KCQkJCSRyb3dfdXNhZ2UgKz0gJFJvd3M7DQoJCQkJJGRhdGFfdXNhZ2Ug Kz0gJERhdGFfbGVuZ3RoOw0KCQkJCSRpbmRleF91c2FnZSArPSAgJEluZGV4X2xlbmd0aDsN CgkJCQkkb3ZlcmhlYWRfdXNhZ2UgKz0gJERhdGFfZnJlZTsNCg0KCQkJCWVjaG8NCgkJCQl0 cigNCgkJCQkJdGQoJG5vKS4NCgkJCQkJdGQoaHJlZigkTmFtZSwgImluZGV4LnBocD9ldmVu dD1yc3Nfc3FsX3J1biZhbXA7dG49Ii4kTmFtZSkpLg0KCQkJCQl0ZCgiICIuJFJvd3MpLg0K CQkJCQl0ZChwcmV0dHlGaWxlU2l6ZSgkRGF0YV9sZW5ndGgpKS4NCgkJCQkJdGQocHJldHR5 RmlsZVNpemUoJEluZGV4X2xlbmd0aCkpLg0KCQkJCQl0ZChwcmV0dHlGaWxlU2l6ZSgkRGF0 YV9sZW5ndGggKyAkSW5kZXhfbGVuZ3RoKSkuDQoJCQkJCXRkYShwcmV0dHlGaWxlU2l6ZSgk RGF0YV9mcmVlKSwgJGNvbG9yMikuDQoJCQkJCXRkYSgiICIuJG15c3FsRXJybm8sICRjb2xv cikuDQoJCQkJCXRkKGhyZWYoIlJlcGFpciIsICJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX21h biZhbXA7cmVwX3RhYmxlPSIuJE5hbWUpKS4NCgkJCQkJdGQoaHJlZigiQmFja3VwIiwgImlu ZGV4LnBocD9ldmVudD1yc3NfZGJfYmsmYW1wO2JrPTEmYW1wO2JrX3RhYmxlPSIuJE5hbWUp Lg0KCQkJCQknPHRkPjxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1yc3NfZGJfbWFuJmFtcDtk cm9wX3RhYmxlPScuJE5hbWUuJyIgIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQo J2FyZV95b3Vfc3VyZScpLidcJykiPkRyb3A8L2E+PC90ZD4nKSwgJHN0eWxlDQoJCQkJKTsN CgkJCX0NCg0KCQkJZWNobw0KCQkJdHIoDQoJCQkJaGNlbGwoIlRvdGFsIikuDQoJCQkJaGNl bGwoJG5vLiIgVGFibGVzIikuDQoJCQkJaGNlbGwobnVtYmVyX2Zvcm1hdCgkcm93X3VzYWdl KSkuDQoJCQkJaGNlbGwocHJldHR5RmlsZVNpemUoJGRhdGFfdXNhZ2UpKS4NCgkJCQloY2Vs bChwcmV0dHlGaWxlU2l6ZSgkaW5kZXhfdXNhZ2UpKS4NCgkJCQloY2VsbChwcmV0dHlGaWxl U2l6ZSgkZGF0YV91c2FnZSArICRpbmRleF91c2FnZSkpLg0KCQkJCWhjZWxsKHByZXR0eUZp bGVTaXplKCRvdmVyaGVhZF91c2FnZSkpLg0KCQkJCWhjZWxsKCkuDQoJCQkJdGRhKGhyZWYo c3Ryb25nKCJSZXBhaXIgQWxsIiksICJpbmRleC5waHA/ZXZlbnQ9cnNzX2RiX21hbiZhbXA7 cmVwX2FsbD0iLmltcGxvZGUoIiwiLCRhbGx0YWJzKSksICcgc3R5bGU9InRleHQtYWxpZ246 Y2VudGVyOyIgY29sc3Bhbj0iMyInKSwgJHN0eWxlDQoJCQkpOw0KDQoJCX0gZWxzZSB7DQoJ CQllY2hvDQoJCQl0cigNCgkJCQl0ZGEoIkNvdWxkIE5vdCBTaG93IFRhYmxlIFN0YXR1cyBC ZWNhdXNlIFlvdXIgTVlTUUwgVmVyc2lvbiBJcyBMb3dlciBUaGFuIDMuMjMuIiwgJyBzdHls ZT0idGV4dC1hbGlnbjpjZW50ZXI7IiBjb2xzcGFuPTE0IicpDQoJCQkpOw0KCQl9DQoNCmVj aG8NCgl0cigNCgkJdGRhKGhyZWYoIlJ1biBTUUwiLCAiaW5kZXgucGhwP2V2ZW50PXJzc19z cWxfcnVuIiksICcgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyIgY29sc3Bhbj0iMTQiJykN CgkpLg0KCWVuZFRhYmxlKCk7DQp9DQoNCmZ1bmN0aW9uIHJzc19zcWxfcnVuKCRldmVudCwg JHN0ZXApIHsNCiAgcGFnZXRvcCgiUnVuIFNRTCBRdWVyeSIpOw0KICAkdGV4dD0iIjsNCiAg JHJzZFtdPSIiOw0KICAkc3FsX3F1ZXJ5Mj0iIjsNCg0KICBpZiAoZ3BzKCJ0biIpKSB7DQog ICAgJHRxID0gInNlbGVjdCAqIGZyb20gIi5ncHMoInRuIik7DQogIH0NCg0KICBpZiAoZ3Bz KCJzcWxfcXVlcnkiKSB8fCBncHMoInRuIikpIHsNCiAgICAkc3FsX3F1ZXJpZXMyID0gKGdw cygic3FsX3F1ZXJ5IikpID8gdHJpbShncHMoInNxbF9xdWVyeSIpKSA6IHRyaW0oJHRxKTsN CiAgICAkdG90YWxxdWVyeWNvdW50ID0gMDsNCiAgICAkc3VjY2Vzc3F1ZXJ5ID0gMDsNCiAg ICBpZigkc3FsX3F1ZXJpZXMyKSB7DQogICAgICAkc3FsX3F1ZXJpZXMgPSBhcnJheSgpOw0K ICAgICAgJHNxbF9xdWVyaWVzMiA9IGV4cGxvZGUoIlxuIiwgJHNxbF9xdWVyaWVzMik7DQog ICAgICBmb3JlYWNoKCRzcWxfcXVlcmllczIgYXMgJHNxbF9xdWVyeTIpIHsNCiAgICAgICAg JHNxbF9xdWVyeTIgPSB0cmltKHN0cmlwc2xhc2hlcygkc3FsX3F1ZXJ5MikpOw0KICAgICAg ICAkc3FsX3F1ZXJ5MiA9IHByZWdfcmVwbGFjZSgiL1tcclxuXSsvIiwgJycsICRzcWxfcXVl cnkyKTsNCiAgICAgICAgaWYoIWVtcHR5KCRzcWxfcXVlcnkyKSkgew0KICAgICAgICAgICRz cWxfcXVlcmllc1tdID0gJHNxbF9xdWVyeTI7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAg ICAgZm9yZWFjaCgkc3FsX3F1ZXJpZXMgYXMgJHNxbF9xdWVyeSkgew0KICAgICAgICBpZiAo cHJlZ19tYXRjaCgiL15cXHMqKGluc2VydHx1cGRhdGV8cmVwbGFjZXxkZWxldGV8Y3JlYXRl fHRydW5jYXRlKSAvaSIsJHNxbF9xdWVyeSkpIHsNCiAgICAgICAgICAkcnVuX3F1ZXJ5ID0g c2FmZV9xdWVyeSgkc3FsX3F1ZXJ5KTsNCiAgICAgICAgICBpZighJHJ1bl9xdWVyeSkgew0K ICAgICAgICAgICAgJHRleHQgLj0gZ3JhZihteXNxbF9lcnJvcigpLCAnIHN0eWxlPSJjb2xv cjojRDEwMDAwOyInKTsNCiAgICAgICAgICAgICR0ZXh0IC49IGdyYWYoJHNxbF9xdWVyeSwg JyBzdHlsZT0iY29sb3I6I0QxMDAwMDsiJyk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAg ICAgICAgICRzdWNjZXNzcXVlcnkrKzsNCiAgICAgICAgICAgICR0ZXh0IC49IGdyYWYoJHNx bF9xdWVyeSwgJyBzdHlsZT0iY29sb3I6IzRCOUYwMDsiJyk7DQogICAgICAgICAgfQ0KICAg ICAgICAgICR0b3RhbHF1ZXJ5Y291bnQrKzsNCiAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0 Y2goIi9eXFxzKihzZWxlY3QpIC9pIiwkc3FsX3F1ZXJ5KSkgew0KICAgICAgICAgICRydW5f cXVlcnkgPSBzYWZlX3F1ZXJ5KCRzcWxfcXVlcnkpOw0KICAgICAgICAgIGlmKCRydW5fcXVl cnkpICRzdWNjZXNzcXVlcnkrKzsNCiAgICAgICAgICAgIGlmICgkcnVuX3F1ZXJ5ICYmIG15 c3FsX251bV9yb3dzKCRydW5fcXVlcnkpID4gMCkgew0KDQogICAgICAgICAgICAgIC8qIGdl dCBjb2x1bW4gbWV0YWRhdGEgKi8NCiAgICAgICAgICAgICAgJGkgPSAwOw0KICAgICAgICAg ICAgICAkaGVhZGVycyA9ICIiOw0KICAgICAgICAgICAgICB3aGlsZSAoJGkgPCBteXNxbF9u dW1fZmllbGRzKCRydW5fcXVlcnkpKSB7DQogICAgICAgICAgICAgICAgICRtZXRhID0gbXlz cWxfZmV0Y2hfZmllbGQoJHJ1bl9xdWVyeSwgJGkpOw0KICAgICAgICAgICAgICAgICAkaGVh ZGVycy49aGNlbGwoJG1ldGEtPm5hbWUpOw0KICAgICAgICAgICAgICAgICAkaSsrOw0KICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgJHJzZFtdID0NCiAgICAgICAgICAgICAg JzxkaXYgY2xhc3M9InNjcm9sbFdyYXBwZXIiPicuc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAn c2Nyb2xsYWJsZScpLg0KICAgICAgICAgICAgICAnPHRoZWFkPicudHIoJGhlYWRlcnMpLic8 L3RoZWFkPjx0Ym9keT4nOw0KDQogICAgICAgICAgICAgIHdoaWxlICgkYSA9IG15c3FsX2Zl dGNoX2Fzc29jKCRydW5fcXVlcnkpKSAkb3V0W10gPSAkYTsNCiAgICAgICAgICAgICAgbXlz cWxfZnJlZV9yZXN1bHQoJHJ1bl9xdWVyeSk7DQoNCiAgICAgICAgICAgICAgZm9yZWFjaCAo JG91dCBhcyAkYikgew0KICAgICAgICAgICAgICAgICRkYXRhID0gIiI7DQogICAgICAgICAg ICAgICAgZm9yZWFjaCAoJGIgYXMgJGYpIHsNCiAgICAgICAgICAgICAgICAgICRkYXRhLj10 ZCgkZik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRyc2RbXSA9IHRy KCRkYXRhKTsNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICRyc2RbXSA9ICc8 L3Rib2R5PicuZW5kVGFibGUoKS4nPC9kaXY+Jy5icjsNCiAgICAgICAgICAgICAgJG91dCA9 IGFycmF5KCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAkdGV4dCAu PSBncmFmKG15c3FsX2Vycm9yKCksICcgc3R5bGU9ImNvbG9yOiNEMTAwMDA7IicpOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgICR0ZXh0IC49IGdyYWYoJHNxbF9xdWVyeSwgJyBzdHls ZT0iY29sb3I6I0QxMDAwMDsiJyk7DQogICAgICAgICAgJHRvdGFscXVlcnljb3VudCsrOw0K ICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiL15cXHMqKGRyb3B8c2hvd3xncmFudCkg L2kiLCRzcWxfcXVlcnkpKSB7DQogICAgICAgICAgJHRleHQgLj0gZ3JhZigkc3FsX3F1ZXJ5 LiIgLSBRVUVSWSBUWVBFIE5PVCBTVVBQT1JURUQiLCAnIHN0eWxlPSJjb2xvcjojRDEwMDAw OyInKTsNCiAgICAgICAgICAkdG90YWxxdWVyeWNvdW50Kys7DQogICAgICAgIH0NCiAgICAg IH0NCiAgICAgICR0ZXh0IC49IGdyYWYoJHN1Y2Nlc3NxdWVyeS4iLyIuJHRvdGFscXVlcnlj b3VudC4iIFF1ZXJ5KHMpIEV4ZWN1dGVkIFN1Y2Nlc3NmdWxseSIsICcgc3R5bGU9ImNvbG9y OiMwMDY5RDE7IicpOw0KICAgIH0NCiAgfQ0KDQogIGVjaG8NCiAgc3RhcnRUYWJsZSgnZWRp dCcpLg0KICB0cigNCiAgICB0ZCgNCiAgICAgIGZvcm0oDQogICAgICAgIGdyYWYoIkVhY2gg cXVlcnkgbXVzdCBiZSBvbiBhIHNpbmdsZSBsaW5lLiAgWW91IG1heSBydW4gbXVsdGlwbGUg cXVlcmllcyBhdCBvbmNlIGJ5IHN0YXJ0aW5nIGEgbmV3IGxpbmUuIi5ici4iU3VwcG9ydGVk IHF1ZXJ5IHR5cGVzIGluY2x1ZGUgU0VMRUNULCBJTlNFUlQsIFVQREFURSwgQ1JFQVRFLCBS RVBMQUNFLCBhbmQgREVMRVRFLiIpLg0KICAgICAgICBncmFmKCJXQVJOSU5HOiBBbGwgU1FM IHJ1biBpbiB0aGlzIHdpbmRvdyB3aWxsIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseSBj aGFuZ2UgeW91ciBkYXRhYmFzZS4iLCAnIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyInKS4N CiAgICAgICAgdGV4dF9hcmVhKCdzcWxfcXVlcnknLCcyMDAnLCc1NTAnLCRzcWxfcXVlcnky KS5ici4NCiAgICAgICAgZklucHV0KCdzdWJtaXQnLCdydW4nLGdUeHQoJ1J1bicpLCdwdWJs aXNoJykuaHJlZigiR28gdG8gRGF0YWJhc2UgTWFuYWdlciIsICJpbmRleC5waHA/ZXZlbnQ9 cnNzX2RiX21hbiIpLg0KICAgICAgICBlSW5wdXQoJ3Jzc19zcWxfcnVuJyksICcnLCAnIHZl cmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKSInDQogICAgICApDQogICAgKQ0K ICApLg0KICB0cigNCiAgICB0ZCgNCiAgICAgICAgZ3JhZigkdGV4dC5ici5pbXBsb2RlKCcn LCAkcnNkKSkNCiAgICApDQogICkuDQogIGVuZFRhYmxlKCk7DQoNCn0NCmZ1bmN0aW9uIHBy ZXR0eUZpbGVTaXplICgkYnl0ZXMpIHsNCiAgaWYgKCRieXRlcyA8IDEwMjQpIHsNCiAgICAg IHJldHVybiAiJGJ5dGVzIGJ5dGVzIjsNCiAgfSBlbHNlIGlmIChzdHJsZW4oJGJ5dGVzKSA8 PSA5ICYmIHN0cmxlbigkYnl0ZXMpID49IDcpIHsNCiAgICAgIHJldHVybiBudW1iZXJfZm9y bWF0KCRieXRlcyAvIDEwNDg1NzYsMikuIiBNQiI7DQogIH0gZWxzZWlmIChzdHJsZW4oJGJ5 dGVzKSA+PSAxMCkgew0KICAgICAgcmV0dXJuIG51bWJlcl9mb3JtYXQoJGJ5dGVzIC8gMTA3 Mzc0MTgyNCwyKS4iIEdCIjsNCiAgfQ0KICByZXR1cm4gbnVtYmVyX2Zvcm1hdCgkYnl0ZXMg LyAxMDI0LDIpLiIgS0IiOw0KfQ0KDQpmdW5jdGlvbiBpc19mb2xkZXJfZW1wdHkoJGRpcikg ew0KICBpZiAoaXNfZGlyKCRkaXIpKSB7DQogICAgJGRsPW9wZW5kaXIoJGRpcik7DQogICAg aWYgKCRkbCkgew0KICAgICAgd2hpbGUoJG5hbWUgPSByZWFkZGlyKCRkbCkpIHsNCiAgICAg ICAgaWYgKCFpc19kaXIoIiRkaXIvJG5hbWUiKSkgew0KICAgICAgICAgIHJldHVybiBmYWxz ZTsNCiAgICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICB9DQogICAgY2xvc2VkaXIoJGRs KTsNCiAgICB9DQogICAgcmV0dXJuIHRydWU7DQogIH0gZWxzZSByZXR1cm4gdHJ1ZTsNCn0N CiI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo0OiJoZWxwIjtz OjQyNzY6IjxwPgpoMS4gVGV4dHBhdHRlcm4gRGF0YWJhc2UgTWFuYWdlcjwvcD4KCgk8cD5U aGUgcnNzX2FkbWluX2RiX21hbmFnZXIgcGx1Z2luIGFkZHMgMyBuZXcgdGFicyB0byB5b3Vy IFRleHRwYXR0ZXJuIGFkbWluIGludGVyZmFjZS4gIEVhY2ggdGFiIGNvbnRhaW5zIGRpZmZl cmVudCBmdW5jdGlvbmFsaXR5IHRvIGhlbHAgbWFuYWdlPGJyIC8+Cgp5b3VyIDxhIGhyZWY9 Imh0dHA6Ly93d3cubXlzcWwuY29tLyI+TXlTUUw8L2E+IGRhdGFiYXNlLiAgWW91IGNhbiB0 aGluayBvZiB0aGlzIHBsdWdpbiBhcyBhIGxpZ2h0d2VpZ2h0IHJlcGxhY2VtZW50IGZvciA8 YSBocmVmPSJodHRwOi8vd3d3LnBocG15YWRtaW4ubmV0L2hvbWVfcGFnZS8iPnBocE15QWRt aW48L2E+LjwvcD4KCgk8aDI+RGF0YWJhc2UgQmFja3VwPC9oMj4KCgk8cD5UaGUgPHN0cm9u Zz5EQiBCYWNrdXAgdGFiPC9zdHJvbmc+IGFsbG93cyB5b3UgdG8gYmFja3VwLCBkb3dubG9h ZCBhbmQgcmVzdG9yZSB0aGUgTXlTUUwgZGF0YWJhc2UgdGhhdCBpcyB1c2VkIGZvciB5b3Vy IFRleHRwYXR0ZXJuIGluc3RhbGxhdGlvbi48YnIgLz4KClRoZSBkYXRhYmFzZSBiYWNrdXBz IGFuZCByZXN0b3JlcyBhcmUgcnVuIHVzaW5nIE15U1FMJiM4MjE3O3MgPGEgaHJlZj0iaHR0 cDovL2Rldi5teXNxbC5jb20vZG9jL215c3FsL2VuL215c3FsZHVtcC5odG1sIj5teXNxbGR1 bXA8L2E+IGNvbW1hbmQuPGJyIC8+CgpPbiB0aGlzIHRhYiB5b3UgYXJlIGFibGUgdG86PC9w PgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGEgLnNxbCBiYWNrdXAgZmlsZSBvbiB3aW5kb3dzIHdp dGggdGhlIGFkZGl0aW9uYWwgb3B0aW9uIG9mIGNyZWF0aW5nIGEgZ3ppcHBlZCBiYWNrdXAg b24gKm5peCBvcGVyYXRpbmcgc3lzdGVtczwvbGk+CgkJPGxpPlZpZXcgYSBsaXN0IG9mIHBy ZXZpb3VzIGJhY2t1cCBmaWxlczwvbGk+CgkJPGxpPlJlc3RvcmUgeW91ciBkYXRhYmFzZSBm cm9tIG9uZSBvZiB0aGUgcHJldmlvdXMgYmFja3VwczwvbGk+CgkJPGxpPkRvd25sb2FkIGEg YmFja3VwIGZpbGU8L2xpPgoJCTxsaT5EZWxldGUgb2xkIGJhY2t1cHM8L2xpPgoJPC91bD4K Cgk8aDI+QmFja3VwIFByZWZlcmVuY2VzPC9oMj4KCgk8cD5Zb3UgaGF2ZSB0aGUgYWJpbGl0 eSB0byBzZXQgc2V2ZXJhbCBwcmVmZXJlbmNlcyByZWxhdGVkIHRvIHlvdXIgZGF0YWJhc2Ug YmFja3Vwcy4gIFlvdSBjYW4gc2V0IHRoZXNlIG9wdGlvbnMgb24gdGhlIGJhY2t1cCB0YWIu ICBUaGUgb3B0aW9ucyBpbmNsdWRlOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+TG9jayBU YWJsZXM8L3N0cm9uZz4gJiM4MjExOyBZb3VyIGhvc3QgbWF5IG9yIG1heSBub3Qgc3VwcG9y dCB0aGlzIG9wdGlvbi4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0LCBUZXh0ZHJpdmUgZG9l c24mIzgyMTc7dCBhbGxvdyB0YWJsZSBsb2NraW5nLiAgSWYgeW91ciBiYWNrdXAgZmFpbHMs IHRyeSBzZXR0aW5nIHRoaXMgdG8gJiM4MjIwO05vJiM4MjIxOy48L2xpPgoJCTxsaT48c3Ry b25nPkRlYnVnIE1vZGU8L3N0cm9uZz4gJiM4MjExOyBUdXJuaW5nIGRlYnVnZ2luZyBvbiB3 aWxsIGVjaG8gdGhlIGNvbW1hbmQgYmVpbmcgcnVuIHRvIHRoZSBzY3JlZW4uPC9saT4KCQk8 bGk+PHN0cm9uZz5CYWNrdXAgUGF0aDwvc3Ryb25nPiAmIzgyMTE7IFNldCB0aGUgZGlyZWN0 b3J5IHRoYXQgeW91ciBiYWNrdXBzIHdpbGwgYmUgc2F2ZWQgdG8uPC9saT4KCQk8bGk+PHN0 cm9uZz5NeXNxbGR1bXAgUGF0aDwvc3Ryb25nPiAmIzgyMTE7IEl0cyBsaWtlbHkgdGhhdCB0 aGUgZGVmYXVsdCB3aWxsIHdvcmsgZm9yIHlvdS4gIElmIG5vdCwgZW50ZXIgdGhlIGZ1bGwg cGF0aCB0aGUgdGhlIGV4ZWN1dGFibGUuPC9saT4KCQk8bGk+PHN0cm9uZz5NeXNxbCBQYXRo PC9zdHJvbmc+ICYjODIxMTsgSXRzIGxpa2VseSB0aGF0IHRoZSBkZWZhdWx0IHdpbGwgd29y ayBmb3IgeW91LiAgSWYgbm90LCBlbnRlciB0aGUgZnVsbCBwYXRoIHRoZSB0aGUgZXhlY3V0 YWJsZS48L2xpPgoJPC91bD4KCgk8aDI+RGF0YWJhc2UgTWFuYWdlcjwvaDI+CgoJPHA+VGhl IDxzdHJvbmc+REIgTWFuYWdlciB0YWI8L3N0cm9uZz4gZGlzcGxheXMgaW5mb3JtYXRpb24g YWJvdXQgeW91ciBNeVNRTCBkYXRhYmFzZSBhbmQgYWxsIG9mIGl0cyB0YWJsZXMuICBBIGRl dGFpbGVkIGxpc3QgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIHRhYmxlLCBudW1iZXIgb2Yg cm93cyBhbmQgZmlsZSBzcGFjZSB1c2FnZS48YnIgLz4KCllvdSB3aWxsIGFsc28gYmUgYWxl cnRlZCBvZiBhbnkgb3ZlcmhlYWQgb3IgZXJyb3JzIHRoYXQgbmVlZCB0byBiZSByZXBhaXJl ZC4gIFRhYmxlcyBjYW4gYmUgcmVwYWlyZWQsIGRyb3BwZWQgb3IgYmFja2VkIHVwIGZyb20g dGhpcyBsaXN0aW5nLjwvcD4KCgk8dWw+CgkJPGxpPkNsaWNraW5nIG9uIHRoZSBuYW1lIG9m IHRoZSB0YWJsZSB3aWxsIHJ1biBhIHNlbGVjdCAqIFt0YWJsZSBuYW1lXSA8c3BhbiBjbGFz cz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj48L3NwYW4+IHN0YXRlbWVu dCBhbmQgdGFrZSB5b3UgdG8gdGhlIDxzdHJvbmc+UnVuIDxzcGFuIGNsYXNzPSJjYXBzIj48 c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPjwvc3Bhbj4gdGFiPC9zdHJvbmc+IHRvIGRp c3BsYXkgdGhlIHJlc3VsdHMuPC9saT4KCQk8bGk+UmVwYWlyIGEgc2luZ2xlIHRhYmxlIGlu IHRoZSBsaXN0aW5nIGJ5IGNsaWNraW5nIHRoZSBSZXBhaXIgbGluay48L2xpPgoJCTxsaT5S ZXBhaXIgYWxsIHRhYmxlcyBpbiB0aGUgbGlzdGluZyBieSBjbGlja2luZyB0aGUgUmVwYWly IEFsbCBsaW5rLjwvbGk+CgkJPGxpPkJhY2t1cCBhIHNpbmdsZSB0YWJsZSBpbiB0aGUgbGlz dGluZyBieSBjbGlja2luZyB0aGUgQmFja3VwIGxpbmsuPC9saT4KCQk8bGk+RHJvcCBhIHNp bmdsZSB0YWJsZSBpbiB0aGUgbGlzdGluZyBieSBjbGlja2luZyB0aGUgRHJvcCBsaW5rLjwv bGk+Cgk8L3VsPgoKCTxoMj5SdW4gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJj YXBzIj5TUUw8L3NwYW4+PC9zcGFuPiBXaW5kb3c8L2gyPgoKCTxwPlRoZSA8c3Ryb25nPlJ1 biA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj48L3Nw YW4+IHRhYjwvc3Ryb25nPiBhbGxvd3MgZm9yIGZyZWUgZm9ybSBlbnRyeSBhbmQgZXhlY3V0 aW9uIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFu Pjwvc3Bhbj4gc3RhdGVtZW50cy4gIFRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh c3M9ImNhcHMiPlNRTDwvc3Bhbj48L3NwYW4+IHdpbmRvdyBhY2NlcHRzPGJyIC8+Cgo8c3Bh biBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlNFTEVDVDwvc3Bhbj48L3NwYW4+ LCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPklOU0VSVDwvc3Bhbj48 L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlVQREFURTwv c3Bhbj48L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkNS RUFURTwvc3Bhbj48L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNh cHMiPlJFUExBQ0U8L3NwYW4+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNs YXNzPSJjYXBzIj5UUlVOQ0FURTwvc3Bhbj48L3NwYW4+LCBhbmQgPHNwYW4gY2xhc3M9ImNh cHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5ERUxFVEU8L3NwYW4+PC9zcGFuPiBzdGF0ZW1lbnRz LiAgSWYgYSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlNFTEVDVDwv c3Bhbj48L3NwYW4+IHN0YXRlbWVudCBpcyBydW4sIHRoZSByZXN1bHRzIHdpbGwgYmUgZGlz cGxheWVkIHRvIHlvdSBiZWxvdyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNz PSJjYXBzIj5TUUw8L3NwYW4+PC9zcGFuPiB3aW5kb3cgaW4gYSB0YWJsZS48YnIgLz4KClRo ZSB0YWJsZSBtYXJrdXAgYWxsb3dzIHlvdSB0byBhZGQgeW91ciBvd24gc3R5bGVzIGZvciBj cmVhdGluZyBhIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWdhdmVncm91cC5jb20vP3A9MzEiPjxz cGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bhbj4g U2Nyb2xsYWJsZSBUYWJsZTwvYT4uPC9wPgoKCTxoMj5NYWpvciBSYW5zb20gQ29udHJpYnV0 b3JzPC9oMj4KCgk8cD4JPHVsPgoJCTxsaT5KYW4gV2lsbGVtIGRlIEJydWlqbjwvbGk+CgkJ PGxpPkhlaWtraSBZbDwvcD4iO3M6MzoibWQ1IjtzOjMyOiJiYTA0ZjM2MDcyMTY1YmU5ZmI2 Mjk0MTkxMjA1NDI4MiI7fQ==