658f7f88b81582504c687b40ee6ef153.json 37 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js!D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\setting\\devise\\diyIndex.vue?vue&type=script&crossorigin=anonymous&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\setting\\devise\\diyIndex.vue","mtime":1761703101492},{"path":"D:\\front\\item\\zyAdmin\\babel.config.js","mtime":1761614925168},{"path":"D:\\front\\item\\zyAdmin\\.babelrc","mtime":1761614925165},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1761614937017},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovZnJvbnQvaXRlbS96eUFkbWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCB7IGNhdGVnb3J5TGlzdCBhcyBfY2F0ZWdvcnlMaXN0LCBkaXlQcm9JbmZvLCBkaXlQcm9TYXZlLCBzZXREZWZhdWx0LCByZWNvdmVyeSwgZGl5VXBkYXRlTmFtZSwgZ2V0Um91dGluZUNvZGUgfSBmcm9tICdAL2FwaS9kaXknOwppbXBvcnQgdnVlZHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSc7CmltcG9ydCBtUGFnZSBmcm9tICdAL2NvbXBvbmVudHMvbW9iaWxlUGFnZS9pbmRleC5qcyc7CmltcG9ydCBtQ29uZmlnIGZyb20gJ0AvY29tcG9uZW50cy9tb2JpbGVDb25maWcvaW5kZXguanMnOwppbXBvcnQgZm9vdFBhZ2UgZnJvbSAnQC9jb21wb25lbnRzL3BhZ2VzRm9vdCc7CmltcG9ydCB7IG1hcFN0YXRlIH0gZnJvbSAndnVleCc7CmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7CmltcG9ydCB0aGVtZSBmcm9tICdAL21peGlucy90aGVtZSc7CmltcG9ydCBTZXR0aW5nIGZyb20gJ0Avc2V0dGluZyc7CmltcG9ydCBRUkNvZGUgZnJvbSAncXJjb2RlanMyJzsKZXhwb3J0IGRlZmF1bHQgewogIGluamVjdDogWydyZWxvYWQnXSwKICBuYW1lOiAnaW5kZXgudnVlJywKICBjb21wb25lbnRzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoewogICAgZm9vdFBhZ2U6IGZvb3RQYWdlLAogICAgaHRtbDJjYW52YXM6IGh0bWwyY2FudmFzLAogICAgZHJhZ2dhYmxlOiB2dWVkcmFnZ2FibGUKICB9LCBtUGFnZSksIG1Db25maWcpLAogIGZpbHRlcnM6IHsKICAgIGZpbHRlclR4dDogZnVuY3Rpb24gZmlsdGVyVHh0KHZhbCkgewogICAgICBpZiAodmFsKSB7CiAgICAgICAgcmV0dXJuIHZhbCA9IHZhbC5zdWJzdHIoMCwgdmFsLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CiAgfSwKICBjb21wdXRlZDogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtYXBTdGF0ZSh7CiAgICB0aXRsZVR4dDogZnVuY3Rpb24gdGl0bGVUeHQoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlVGl0bGUgfHwgJ+mmlumhtSc7CiAgICB9LAogICAgc2hvd1R4dDogZnVuY3Rpb24gc2hvd1R4dChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VTaG93OwogICAgfSwKICAgIGNvbG9yVHh0OiBmdW5jdGlvbiBjb2xvclR4dChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VDb2xvcjsKICAgIH0sCiAgICBwaWNUeHQ6IGZ1bmN0aW9uIHBpY1R4dChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VQaWM7CiAgICB9LAogICAgY29sb3JQaWNrZXJUeHQ6IGZ1bmN0aW9uIGNvbG9yUGlja2VyVHh0KHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5tb2JpbGRDb25maWcucGFnZUNvbG9yUGlja2VyOwogICAgfSwKICAgIHRhYlZhbFR4dDogZnVuY3Rpb24gdGFiVmFsVHh0KHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5tb2JpbGRDb25maWcucGFnZVRhYlZhbDsKICAgIH0sCiAgICBwaWNVcmxUeHQ6IGZ1bmN0aW9uIHBpY1VybFR4dChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VQaWNVcmw7CiAgICB9LAogICAgcGFnZUZvb3RlclR5cGU6IGZ1bmN0aW9uIHBhZ2VGb290ZXJUeXBlKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5tb2JpbGRDb25maWcucGFnZUZvb3Rlci5uYXZDb25maWcudGFiVmFsIHx8IDA7CiAgICB9LAogICAgcGFnZUZvb3RlckJvdHRvbTogZnVuY3Rpb24gcGFnZUZvb3RlckJvdHRvbShzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VGb290ZXIubWJDb25maWcudmFsOwogICAgfSwKICAgIGRlZmF1bHRBcnJheXM6IGZ1bmN0aW9uIGRlZmF1bHRBcnJheXMoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLm1vYmlsZENvbmZpZy5kZWZhdWx0QXJyYXk7CiAgICB9CiAgfSkpLCB7fSwgewogICAgbmFtZVR4dDogewogICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VOYW1lOwogICAgICB9LAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkgewogICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1VQTkFNRScsIHZhbHVlKTsKICAgICAgfQogICAgfQogIH0pLAogIG1peGluczogW3RoZW1lXSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgQmFzZVVSTDogU2V0dGluZy5hcGlCYXNlVVJMLnJlcGxhY2UoL2FkbWluYXBpLywgJycpLAogICAgICBxcmNvZGVJbWc6ICcnLAogICAgICBtb2RhbDogZmFsc2UsCiAgICAgIGNsaWVudEhlaWdodDogJycsCiAgICAgIC8v6aG16Z2i5Yqo5oCB6auY5bqmCiAgICAgIHJvbGxIZWlnaHQ6ICcnLAogICAgICBsZWZ0TWVudTogW10sCiAgICAgIC8vIOW3puS+p+iPnOWNlQogICAgICBsQ29uZmlnOiBbXSwKICAgICAgLy8g5bem5L6n57uE5Lu2CiAgICAgIG1Db25maWc6IFtdLAogICAgICAvLyDkuK3pl7Tnu4Tku7bmuLLmn5MKICAgICAgckNvbmZpZzogW10sCiAgICAgIC8vIOWPs+S+p+e7hOS7tumFjee9rgogICAgICBhY3RpdmVDb25maWdOYW1lOiAnJywKICAgICAgcHJvcHNPYmo6IHt9LAogICAgICAvLyDnu4Tku7bkvKDpgJLnmoTmlbDmja4sCiAgICAgIGFjdGl2ZUluZGV4OiAtMTAwLAogICAgICAvLyDpgInkuK3nmoTkuIvmoIcKICAgICAgbnVtYmVyOiAwLAogICAgICBwYWdlSWQ6ICcnLAogICAgICBwYWdlTmFtZTogJycsCiAgICAgIHBhZ2VUeXBlOiAnJywKICAgICAgY2F0ZWdvcnk6IFtdLAogICAgICB0YWJMaXN0OiBbewogICAgICAgIHRpdGxlOiAn57uE5Lu25bqTJywKICAgICAgICBrZXk6IDAKICAgICAgfSwgewogICAgICAgIHRpdGxlOiAn6aG16Z2i6ZO+5o6lJywKICAgICAgICBrZXk6IDEKICAgICAgfV0sCiAgICAgIGZvb3RBY3RpdmU6IGZhbHNlLAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgcmVsTG9hZGluZzogZmFsc2UsCiAgICAgIGlzU2VhcmNoOiBmYWxzZSwKICAgICAgaXNUYWI6IGZhbHNlLAogICAgICBpc0ZsbG93OiBmYWxzZSwKICAgICAgaXNDb21iOiBmYWxzZSwKICAgICAgaXNTZXJ2aWNlOiBmYWxzZSwKICAgICAgdmlzaWJsZTogdHJ1ZSwKICAgICAgZGl5U3RhdHVzOiAwLAogICAgICBuYW1lTW9kYWw6IGZhbHNlLAogICAgICBzYXZlTmFtZTogJycKICAgIH07CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKICAgIHRoaXMuY2F0ZWdvcnlMaXN0KCk7CiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMuJHJvdXRlLnF1ZXJ5LmlkOwogICAgdGhpcy5wYWdlTmFtZSA9IHRoaXMuJHJvdXRlLnF1ZXJ5Lm5hbWU7CiAgICB0aGlzLnBhZ2VUeXBlID0gdGhpcy4kcm91dGUucXVlcnkudHlwZTsKICAgIHRoaXMubENvbmZpZyA9IHRoaXMub2JqVG9BcnIobVBhZ2UpOwogICAgdmFyIGltZ0xpc3QgPSB7CiAgICAgIGltZ0xpc3Q6IFtyZXF1aXJlKCdAL2Fzc2V0cy9pbWFnZXMvZm9vdC0wMDUucG5nJyksIHJlcXVpcmUoJ0AvYXNzZXRzL2ltYWdlcy9mb290LTAwNi5wbmcnKV0sCiAgICAgIG5hbWU6ICfotK3nianovaYnLAogICAgICBsaW5rOiAnL3BhZ2VzL29yZGVyX2FkZGNhcnQvb3JkZXJfYWRkY2FydCcKICAgIH07CiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgIF90aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9GT09URVInLCB7CiAgICAgICAgdGl0bGU6ICfmmK/lkKboh6rlrprkuYknLAogICAgICAgIG5hbWU6IGltZ0xpc3QKICAgICAgfSk7CiAgICAgIF90aGlzLmFycmF5U29ydCgpOwogICAgICBpZiAoX3RoaXMucGFnZUlkICE9IDApIHsKICAgICAgICBfdGhpcy5nZXREZWZhdWx0Q29uZmlnKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3RoaXMuc2hvd1RpdGxlKCk7CiAgICAgIH0KICAgICAgX3RoaXMuY2xpZW50SGVpZ2h0ID0gIiIuY29uY2F0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIC0gNjUuODE7IC8v6I635Y+W5rWP6KeI5Zmo5Y+v6KeG5Yy65Z+f6auY5bqmCiAgICAgIHZhciBIID0gIiIuY29uY2F0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIC0gMTgwOwogICAgICBfdGhpcy5yb2xsSGVpZ2h0ID0gSCA+IDY1MCA/IDY1MCA6IEg7CiAgICAgIHZhciB0aGF0ID0gX3RoaXM7CiAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGF0LmNsaWVudEhlaWdodCA9ICIiLmNvbmNhdChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSAtIDY1LjgxOwogICAgICAgIHZhciBIID0gIiIuY29uY2F0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIC0gMTgwOwogICAgICAgIHRoYXQucm9sbEhlaWdodCA9IEggPiA2NTAgPyA2NTAgOiBIOwogICAgICB9OwogICAgfSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICBleHBvcnRWaWV3OiBmdW5jdGlvbiBleHBvcnRWaWV3KCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgY29uc29sZS5sb2coX3RoaXMyLm1Db25maWcpOwogICAgICB9KTsKICAgIH0sCiAgICBpbXBvcnRWaWV3OiBmdW5jdGlvbiBpbXBvcnRWaWV3KCkge30sCiAgICBwcmV2aWV3OiBmdW5jdGlvbiBwcmV2aWV3KCkgewogICAgICB0aGlzLm1vZGFsID0gdHJ1ZTsKICAgICAgdGhpcy5jcmVhdFFyQ29kZSh0aGlzLnBhZ2VJZCwgdGhpcy5kaXlTdGF0dXMpOwogICAgICB0aGlzLnJvdXRpbmVDb2RlKHRoaXMucGFnZUlkKTsKICAgIH0sCiAgICAvL+Wwj+eoi+W6j+S6jOe7tOeggQogICAgcm91dGluZUNvZGU6IGZ1bmN0aW9uIHJvdXRpbmVDb2RlKGlkKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICBnZXRSb3V0aW5lQ29kZShpZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXMzLnFyY29kZUltZyA9IHJlcy5kYXRhLmltYWdlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgX3RoaXMzLiRtZXNzYWdlLmVycm9yKGVycik7CiAgICAgIH0pOwogICAgfSwKICAgIC8v55Sf5oiQ5LqM57u056CBCiAgICBjcmVhdFFyQ29kZTogZnVuY3Rpb24gY3JlYXRRckNvZGUoaWQsIHN0YXR1cykgewogICAgICB0aGlzLiRyZWZzLnFyQ29kZVVybC5pbm5lckhUTUwgPSAnJzsKICAgICAgdmFyIHVybCA9ICcnOwogICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgdXJsID0gIiIuY29uY2F0KHRoaXMuQmFzZVVSTCwgInBhZ2VzL2luZGV4L2luZGV4Iik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXJsID0gIiIuY29uY2F0KHRoaXMuQmFzZVVSTCwgInBhZ2VzL2FubmV4L3NwZWNpYWwvaW5kZXg/aWQ9IikuY29uY2F0KGlkKTsKICAgICAgfQogICAgICB2YXIgcXJjb2RlID0gbmV3IFFSQ29kZSh0aGlzLiRyZWZzLnFyQ29kZVVybCwgewogICAgICAgIHRleHQ6IHVybCwKICAgICAgICAvLyDpnIDopoHovazmjaLkuLrkuoznu7TnoIHnmoTlhoXlrrkKICAgICAgICB3aWR0aDogMTYwLAogICAgICAgIGhlaWdodDogMTYwLAogICAgICAgIGNvbG9yRGFyazogJyMwMDAwMDAnLAogICAgICAgIGNvbG9yTGlnaHQ6ICcjZmZmZmZmJywKICAgICAgICBjb3JyZWN0TGV2ZWw6IFFSQ29kZS5Db3JyZWN0TGV2ZWwuSAogICAgICB9KTsKICAgIH0sCiAgICBjaGFuZ05hbWU6IGZ1bmN0aW9uIGNoYW5nTmFtZSh2YWwpIHsKICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvVVBOQU1FJywgdmFsKTsKICAgIH0sCiAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbCgpIHsKICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7CiAgICB9LAogICAgZGV0ZXJtaW5lOiBmdW5jdGlvbiBkZXRlcm1pbmUoKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICBpZiAodGhpcy5uYW1lVHh0LnRyaW0oKSA9PSAnJykgewogICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fovpPlhaXmqKHmnb/lkI3np7AnKTsKICAgICAgfQogICAgICBpZiAodGhpcy5wYWdlSWQgPT0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5L+u5pS55oiQ5YqfJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGRpeVVwZGF0ZU5hbWUodGhpcy5wYWdlSWQsIHsKICAgICAgICBuYW1lOiB0aGlzLm5hbWVUeHQKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM0LnZpc2libGUgPSBmYWxzZTsKICAgICAgICBfdGhpczQuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgIF90aGlzNC4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsKICAgICAgfSk7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgfSwKICAgIHJldHVyblRhcDogZnVuY3Rpb24gcmV0dXJuVGFwKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdGhpcy4kbXNnYm94KHsKICAgICAgICB0aXRsZTogJ+a4qemmqOaPkOekuicsCiAgICAgICAgbWVzc2FnZTogJ+ehruWumuemu+W8gOatpOmhtemdou+8n+ezu+e7n+WPr+iDveS4jeS8muS/neWtmOaCqOaJgOWBmueahOabtOaUueOAgicsCiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgaWNvbkNsYXNzOiAnZWwtaWNvbi13YXJuaW5nJywKICAgICAgICBjb25maXJtQnV0dG9uQ2xhc3M6ICdidG4tY3VzdG9tLWNhbmNlbCcKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM1LiRyb3V0ZXIucHVzaChfdGhpczUuJHJvdXRlUHJvU3RyICsgJy9zZXR0aW5nL3BhZ2VzL2RldmlzZS8wJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgIH0sCiAgICBsZWZ0UmVtb3ZlOiBmdW5jdGlvbiBsZWZ0UmVtb3ZlKF9yZWYpIHsKICAgICAgdmFyIHRvID0gX3JlZi50bywKICAgICAgICBmcm9tID0gX3JlZi5mcm9tLAogICAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sCiAgICAgICAgY2xvbmUgPSBfcmVmLmNsb25lLAogICAgICAgIG9sZEluZGV4ID0gX3JlZi5vbGRJbmRleCwKICAgICAgICBuZXdJbmRleCA9IF9yZWYubmV3SW5kZXg7CiAgICAgIGlmICh0aGlzLmlzU2VhcmNoICYmIG5ld0luZGV4ID09IDApIHsKICAgICAgICBpZiAoaXRlbS5fdW5kZXJseWluZ192bV8ubmFtZSA9PSAnel93ZWNoYXRfYXR0ZW50aW9uJykgewogICAgICAgICAgdGhpcy5pc0ZsbG93ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvQVJSQVlSRUFTVCcsIHRoaXMubUNvbmZpZ1swXS5udW0pOwogICAgICAgICAgdGhpcy5tQ29uZmlnLnNwbGljZSgwLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuaXNGbGxvdyA9IHRydWUgJiYgbmV3SW5kZXggPj0gMSkgewogICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0FSUkFZUkVBU1QnLCB0aGlzLm1Db25maWdbMF0ubnVtKTsKICAgICAgfQogICAgfSwKICAgIG9uTW92ZTogZnVuY3Rpb24gb25Nb3ZlKGUpIHsKICAgICAgaWYgKGUucmVsYXRlZENvbnRleHQuZWxlbWVudC5uYW1lID09ICdzZWFyY2hfYm94JykgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoZS5yZWxhdGVkQ29udGV4dC5lbGVtZW50Lm5hbWUgPT0gJ25hdl9iYXInKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChlLnJlbGF0ZWRDb250ZXh0LmVsZW1lbnQubmFtZSA9PSAnaG9tZV9jb21iJykgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBvbkNvcHk6IGZ1bmN0aW9uIG9uQ29weSgpIHsKICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCflpI3liLbmiJDlip8nKTsKICAgIH0sCiAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKCkgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCflpI3liLblpLHotKUnKTsKICAgIH0sCiAgICAvL+iuvue9rum7mOiupOaVsOaNrgogICAgc2V0bW9yZW46IGZ1bmN0aW9uIHNldG1vcmVuKCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgc2V0RGVmYXVsdCh0aGlzLnBhZ2VJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM2LiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICBfdGhpczYuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8v5oGi5aSN6buY6K6kCiAgICBnZXRtb3JlbjogZnVuY3Rpb24gZ2V0bW9yZW4oKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICByZWNvdmVyeSh0aGlzLnBhZ2VJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7CiAgICAgICAgX3RoaXM3LnJlbG9hZCgpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgX3RoaXM3LiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDpobXpnaLmoIfpopjngrnlh7sKICAgIHNob3dUaXRsZTogZnVuY3Rpb24gc2hvd1RpdGxlKCkgewogICAgICBjb25zb2xlLmxvZygnZGlhbmppJyk7CiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTAwOwogICAgICB2YXIgb2JqID0ge307CiAgICAgIGZvciAodmFyIGkgaW4gbUNvbmZpZykgewogICAgICAgIGlmIChpID09ICdwYWdlVGl0bGUnKSB7CiAgICAgICAgICAvLyB0aGlzLnJDb25maWcgPSBvYmoKICAgICAgICAgIG9iaiA9IG1Db25maWdbaV07CiAgICAgICAgICBvYmouY29uZmlnTmFtZSA9IG1Db25maWdbaV0ubmFtZTsKICAgICAgICAgIG9iai5jbmFtZSA9ICfpobXpnaLorr7nva4nOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgYWJjID0gb2JqOwogICAgICB0aGlzLnJDb25maWcgPSBbXTsKICAgICAgdGhpcy5yQ29uZmlnWzBdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTsKICAgIH0sCiAgICAvLyDpobXpnaLlupXpg6jngrnlh7sKICAgIHNob3dGb290OiBmdW5jdGlvbiBzaG93Rm9vdCgpIHsKICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xMDE7CiAgICAgIHZhciBvYmogPSB7fTsKICAgICAgZm9yICh2YXIgaSBpbiBtQ29uZmlnKSB7CiAgICAgICAgaWYgKGkgPT0gJ3BhZ2VGb290JykgewogICAgICAgICAgLy8gdGhpcy5yQ29uZmlnID0gb2JqCiAgICAgICAgICBvYmogPSBtQ29uZmlnW2ldOwogICAgICAgICAgb2JqLmNvbmZpZ05hbWUgPSBtQ29uZmlnW2ldLm5hbWU7CiAgICAgICAgICBvYmouY25hbWUgPSAn5bqV6YOo6I+c5Y2VJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGFiYyA9IG9iajsKICAgICAgdGhpcy5yQ29uZmlnID0gW107CiAgICAgIHRoaXMuckNvbmZpZ1swXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7CiAgICB9LAogICAgLy8g5a+56LGh6L2s5pWw57uECiAgICBvYmpUb0FycjogZnVuY3Rpb24gb2JqVG9BcnIoZGF0YSkgewogICAgICB2YXIgb2JqID0gT2JqZWN0LmtleXMoZGF0YSk7CiAgICAgIHZhciBtID0gb2JqLm1hcChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgcmV0dXJuIGRhdGFba2V5XTsKICAgICAgfSk7CiAgICAgIHJldHVybiBtOwogICAgfSwKICAgIGxvZzogZnVuY3Rpb24gbG9nKGV2dCkgewogICAgICAvLyDkuK3pl7Tmi5bmi73mjpLluo8KICAgICAgaWYgKGV2dC5tb3ZlZCkgewogICAgICAgIGlmIChldnQubW92ZWQuZWxlbWVudC5uYW1lID09ICdzZWFyY2hfYm94JykgewogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+l57uE5Lu256aB5q2i5ouW5ou9Jyk7CiAgICAgICAgfQogICAgICAgIC8vIGlmIChldnQubW92ZWQuZWxlbWVudC5uYW1lID09ICJuYXZfYmFyIikgewogICAgICAgIC8vICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor6Xnu4Tku7bnpoHmraLmi5bmi70iKTsKICAgICAgICAvLyB9CiAgICAgICAgZXZ0Lm1vdmVkLm9sZE51bSA9IHRoaXMubUNvbmZpZ1tldnQubW92ZWQub2xkSW5kZXhdLm51bTsKICAgICAgICBldnQubW92ZWQubmV3TnVtID0gdGhpcy5tQ29uZmlnW2V2dC5tb3ZlZC5uZXdJbmRleF0ubnVtOwogICAgICAgIGV2dC5tb3ZlZC5zdGF0dXMgPSBldnQubW92ZWQub2xkSW5kZXggPiBldnQubW92ZWQubmV3SW5kZXg7CiAgICAgICAgdGhpcy5tQ29uZmlnLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpbmRleCkgewogICAgICAgICAgZWwubnVtID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAxMDAwICsgaW5kZXg7CiAgICAgICAgfSk7CiAgICAgICAgZXZ0Lm1vdmVkLmxpc3QgPSB0aGlzLm1Db25maWc7CiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107CiAgICAgICAgdmFyIGl0ZW0gPSBldnQubW92ZWQuZWxlbWVudDsKICAgICAgICB2YXIgdGVtcEl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTsKICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7CiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGV2dC5tb3ZlZC5uZXdJbmRleDsKICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9TRVRDT05GSUdOQU1FJywgaXRlbS5uYW1lKTsKICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9kZWZhdWx0QXJyYXlTb3J0JywgZXZ0Lm1vdmVkKTsKICAgICAgfQogICAgICAvLyDku47lt6blkJHlj7Pmi5bmi73mjpLluo8KICAgICAgaWYgKGV2dC5hZGRlZCkgewogICAgICAgIHZhciBkYXRhID0gZXZ0LmFkZGVkLmVsZW1lbnQ7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDEwMDA7CiAgICAgICAgZGF0YS5udW0gPSB0aW1lc3RhbXA7CiAgICAgICAgdGhpcy5hY3RpdmVDb25maWdOYW1lID0gZGF0YS5uYW1lOwogICAgICAgIHZhciBfdGVtcEl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKICAgICAgICBfdGVtcEl0ZW0uaWQgPSAnaWQnICsgX3RlbXBJdGVtLm51bTsKICAgICAgICB0aGlzLm1Db25maWdbZXZ0LmFkZGVkLm5ld0luZGV4XSA9IF90ZW1wSXRlbTsKICAgICAgICB0aGlzLnJDb25maWcgPSBbXTsKICAgICAgICB0aGlzLnJDb25maWcucHVzaChfdGVtcEl0ZW0pOwogICAgICAgIHRoaXMubUNvbmZpZy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaW5kZXgpIHsKICAgICAgICAgIGVsLm51bSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICogMTAwMCArIGluZGV4OwogICAgICAgIH0pOwogICAgICAgIGV2dC5hZGRlZC5saXN0ID0gdGhpcy5tQ29uZmlnOwogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBldnQuYWRkZWQubmV3SW5kZXg7CiAgICAgICAgLy8g5L+d5a2Y57uE5Lu25ZCN56ewCiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VUQ09ORklHTkFNRScsIGRhdGEubmFtZSk7CiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvZGVmYXVsdEFycmF5U29ydCcsIGV2dC5hZGRlZCk7CiAgICAgIH0KICAgIH0sCiAgICBjbG9uZURvZzogZnVuY3Rpb24gY2xvbmVEb2coZGF0YSkgewogICAgICAvLyB0aGlzLm1Db25maWcucHVzaCh0ZW1wSXRlbSkKICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe30sIGRhdGEpOwogICAgfSwKICAgIC8v5pWw57uE5YWD57Sg5LqS5o2i5L2N572uCiAgICBzd2FwQXJyYXk6IGZ1bmN0aW9uIHN3YXBBcnJheShhcnIsIGluZGV4MSwgaW5kZXgyKSB7CiAgICAgIGFycltpbmRleDFdID0gYXJyLnNwbGljZShpbmRleDIsIDEsIGFycltpbmRleDFdKVswXTsKICAgICAgcmV0dXJuIGFycjsKICAgIH0sCiAgICAvL+eCueWHu+S4iuS4i+enu+WKqO+8mwogICAgbW92ZVBhZ2U6IGZ1bmN0aW9uIG1vdmVQYWdlKGl0ZW0sIGluZGV4LCB0eXBlKSB7CiAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgaWYgKGluZGV4ID09IDApIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGluZGV4ID09IHRoaXMubUNvbmZpZy5sZW5ndGggLSAxKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpdGVtLm5hbWUgPT0gJ3NlYXJjaF9ib3gnIHx8IGl0ZW0ubmFtZSA9PSAnbmF2X2JhcicgfHwgaXRlbS5uYW1lID09ICdob21lX2NvbWInKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+l57uE5Lu256aB5q2i56e75YqoJyk7CiAgICAgIH0KICAgICAgaWYgKHR5cGUpIHsKICAgICAgICBpZiAodGhpcy5tQ29uZmlnW2luZGV4IC0gMV0ubmFtZSA9PSAnc2VhcmNoX2JveCcgfHwgdGhpcy5tQ29uZmlnW2luZGV4IC0gMV0ubmFtZSA9PSAnbmF2X2JhcicgfHwgdGhpcy5tQ29uZmlnW2luZGV4IC0gMV0ubmFtZSA9PSAnaG9tZV9jb21iJykgewogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5pCc57Si5qGG5oiW6YCJ6aG55Y2h5oiW6L2u5pKt5pCc57Si5b+F6aG75Li66aG26YOoJyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3dhcEFycmF5KHRoaXMubUNvbmZpZywgaW5kZXggLSAxLCBpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zd2FwQXJyYXkodGhpcy5tQ29uZmlnLCBpbmRleCwgaW5kZXggKyAxKTsKICAgICAgfQogICAgICB2YXIgb2JqID0ge307CiAgICAgIHRoaXMuckNvbmZpZyA9IFtdOwogICAgICBvYmoub2xkSW5kZXggPSBpbmRleDsKICAgICAgaWYgKHR5cGUpIHsKICAgICAgICBvYmoubmV3SW5kZXggPSBpbmRleCAtIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JqLm5ld0luZGV4ID0gaW5kZXggKyAxOwogICAgICB9CiAgICAgIHRoaXMubUNvbmZpZy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaW5kZXgpIHsKICAgICAgICBlbC5udW0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDEwMDAgKyBpbmRleDsKICAgICAgfSk7CiAgICAgIHZhciB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOwogICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7CiAgICAgIG9iai5lbGVtZW50ID0gaXRlbTsKICAgICAgb2JqLmxpc3QgPSB0aGlzLm1Db25maWc7CiAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4IC0gMTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXggKyAxOwogICAgICB9CiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1NFVENPTkZJR05BTUUnLCBpdGVtLm5hbWUpOwogICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9kZWZhdWx0QXJyYXlTb3J0Jywgb2JqKTsKICAgIH0sCiAgICAvLyDnu4Tku7bmt7vliqAKICAgIGFkZERvbUNvbjogZnVuY3Rpb24gYWRkRG9tQ29uKGl0ZW0sIHR5cGUsIGluZGV4KSB7CiAgICAgIGlmIChpdGVtLm5hbWUgPT0gJ3NlYXJjaF9ib3gnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTZWFyY2gpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor6Xnu4Tku7blj6rog73mt7vliqDkuIDmrKEnKTsKICAgICAgICBpZiAodGhpcy5pc0NvbWIpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfova7mkq3mkJzntKLkuI3og73lkozmkJzntKLnu4Tku7bkuI7pgInpobnljaHnu4Tku7blkIzml7blrZjlnKgnKTsKICAgICAgICB0aGlzLmlzU2VhcmNoID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXRlbS5uYW1lID09ICduYXZfYmFyJykgewogICAgICAgIGlmICh0aGlzLmlzVGFiKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+l57uE5Lu25Y+q6IO95re75Yqg5LiA5qyhJyk7CiAgICAgICAgaWYgKHRoaXMuaXNDb21iKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6L2u5pKt5pCc57Si5LiN6IO95ZKM5pCc57Si57uE5Lu25LiO6YCJ6aG55Y2h57uE5Lu25ZCM5pe25a2Y5ZyoJyk7CiAgICAgICAgdGhpcy5pc1RhYiA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9jb21iJykgewogICAgICAgIGlmICh0aGlzLmlzQ29tYikgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivpee7hOS7tuWPquiDvea3u+WKoOS4gOasoScpOwogICAgICAgIGlmICh0aGlzLmlzU2VhcmNoIHx8IHRoaXMuaXNUYWIpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfova7mkq3mkJzntKLkuI3og73lkozmkJzntKLnu4Tku7bkuI7pgInpobnljaHnu4Tku7blkIzml7blrZjlnKgnKTsKICAgICAgICB0aGlzLmlzQ29tYiA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9zZXJ2aWNlJykgewogICAgICAgIGlmICh0aGlzLmlzU2VydmljZSkgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivpee7hOS7tuWPquiDvea3u+WKoOS4gOasoScpOwogICAgICAgIHRoaXMuaXNTZXJ2aWNlID0gdHJ1ZTsKICAgICAgfQogICAgICB2YXIgb2JqID0ge307CiAgICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDEwMDA7CiAgICAgIGl0ZW0ubnVtID0gIiIuY29uY2F0KHRpbWVzdGFtcCk7CiAgICAgIGl0ZW0uaWQgPSAiaWQiLmNvbmNhdCh0aW1lc3RhbXApOwogICAgICB0aGlzLmFjdGl2ZUNvbmZpZ05hbWUgPSBpdGVtLm5hbWU7CiAgICAgIHZhciB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOwogICAgICBjb25zb2xlLmxvZyh0ZW1wSXRlbSwgJ3RlbXBJdGVtdGVtcEl0ZW10ZW1wSXRlbScpOwogICAgICBpZiAoaXRlbS5uYW1lID09ICdob21lX2NvbWInKSB7CiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107CiAgICAgICAgdGhpcy5tQ29uZmlnLnVuc2hpZnQodGVtcEl0ZW0pOwogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwOwogICAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRlbXBJdGVtKTsKICAgICAgfSBlbHNlIGlmIChpdGVtLm5hbWUgPT0gJ3NlYXJjaF9ib3gnKSB7CiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107CiAgICAgICAgdGhpcy5tQ29uZmlnLnVuc2hpZnQodGVtcEl0ZW0pOwogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwOwogICAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRlbXBJdGVtKTsKICAgICAgfSBlbHNlIGlmIChpdGVtLm5hbWUgPT0gJ25hdl9iYXInKSB7CiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107CiAgICAgICAgaWYgKHRoaXMubUNvbmZpZ1swXSAmJiB0aGlzLm1Db25maWdbMF0ubmFtZSA9PT0gJ3NlYXJjaF9ib3gnKSB7CiAgICAgICAgICB0aGlzLm1Db25maWcuc3BsaWNlKDEsIDAsIHRlbXBJdGVtKTsKICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLm1Db25maWcuc3BsaWNlKDAsIDAsIHRlbXBJdGVtKTsKICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwOwogICAgICAgIH0KICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHR5cGUpIHsKICAgICAgICAgIHRoaXMuckNvbmZpZyA9IFtdOwogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT0gMCAmJiB0aGlzLm1Db25maWdbMV0gJiYgdGhpcy5tQ29uZmlnWzFdLm5hbWUgPT0gJ25hdl9iYXInKSB7CiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAyOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXggPj0gMCA/IHRoaXMuYWN0aXZlSW5kZXggKyAxIDogdGhpcy5tQ29uZmlnLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubUNvbmZpZy5zcGxpY2UodGhpcy5hY3RpdmVJbmRleCwgMCwgdGVtcEl0ZW0pOwogICAgICAgICAgdGhpcy5yQ29uZmlnLnB1c2godGVtcEl0ZW0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLm1Db25maWcuc3BsaWNlKGluZGV4ICsgMSwgMCwgdGVtcEl0ZW0pOwogICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLm1Db25maWcuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGluZGV4KSB7CiAgICAgICAgZWwubnVtID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAxMDAwICsgaW5kZXg7CiAgICAgIH0pOwogICAgICAvLyDkv53lrZjnu4Tku7blkI3np7AKICAgICAgb2JqLmVsZW1lbnQgPSBpdGVtOwogICAgICBvYmoubGlzdCA9IHRoaXMubUNvbmZpZzsKICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VUQ09ORklHTkFNRScsIGl0ZW0ubmFtZSk7CiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL2RlZmF1bHRBcnJheVNvcnQnLCBvYmopOwogICAgfSwKICAgIC8v5Lit6Ze06aG154K55Ye75re75Yqg5qih5Z2X77ybCiAgICBiaW5kQWRkRG9tOiBmdW5jdGlvbiBiaW5kQWRkRG9tKGl0ZW0sIHR5cGUsIGluZGV4KSB7CiAgICAgIHZhciBpID0gaXRlbTsKICAgICAgdGhpcy5sQ29uZmlnLmZvckVhY2goZnVuY3Rpb24gKGopIHsKICAgICAgICBpZiAoaXRlbS5uYW1lID09IGoubmFtZSkgewogICAgICAgICAgaSA9IGo7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5hZGREb21Db24oaSwgdHlwZSwgaW5kZXgpOwogICAgfSwKICAgIC8v5bem6L656YWN572u5qih5Z2X54K55Ye75re75Yqg77ybCiAgICBhZGREb206IGZ1bmN0aW9uIGFkZERvbShpdGVtLCB0eXBlKSB7CiAgICAgIHRoaXMuYWRkRG9tQ29uKGl0ZW0sIHR5cGUpOwogICAgfSwKICAgIC8vIOeCueWHu+aYvuekuuebuOW6lOeahOmFjee9rgogICAgYmluZGNvbmZpZzogZnVuY3Rpb24gYmluZGNvbmZpZyhpdGVtLCBpbmRleCkgewogICAgICB0aGlzLnJDb25maWcgPSBbXTsKICAgICAgdmFyIHRlbXBJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7CiAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRlbXBJdGVtKTsKICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4OwogICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9TRVRDT05GSUdOQU1FJywgaXRlbS5uYW1lKTsKICAgIH0sCiAgICBiaW5kSGlkZTogZnVuY3Rpb24gYmluZEhpZGUoaXRlbSkgewogICAgICB2YXIgb2JqID0gdGhpcy4kc3RvcmUuc3RhdGUubW9iaWxkQ29uZmlnLmRlZmF1bHRBcnJheTsKICAgICAgdmFyIG51bSA9IHRoaXMuckNvbmZpZ1swXS5udW07CiAgICAgIG9ialtudW1dLmlzSGlkZSA9ICFvYmpbbnVtXS5pc0hpZGU7CiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1VQREFURUFSUicsIHsKICAgICAgICBudW06IG51bSwKICAgICAgICB2YWw6IG9ialtudW1dCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOe7hOS7tuWIoOmZpAogICAgYmluZERlbGV0ZTogZnVuY3Rpb24gYmluZERlbGV0ZShpdGVtLCBrZXkpIHsKICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnc2VhcmNoX2JveCcpIHsKICAgICAgICB0aGlzLmlzU2VhcmNoID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnbmF2X2JhcicpIHsKICAgICAgICB0aGlzLmlzVGFiID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9jb21iJykgewogICAgICAgIHRoaXMuaXNDb21iID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9zZXJ2aWNlJykgewogICAgICAgIHRoaXMuaXNTZXJ2aWNlID0gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5tQ29uZmlnLnNwbGljZShrZXksIDEpOwogICAgICB0aGlzLnJDb25maWcuc3BsaWNlKDAsIDEpOwogICAgICBpZiAodGhpcy5tQ29uZmlnLmxlbmd0aCAhPSBrZXkpIHsKICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0aGlzLm1Db25maWdba2V5XSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMubUNvbmZpZy5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBrZXkgLSAxOwogICAgICAgICAgdGhpcy5yQ29uZmlnLnB1c2godGhpcy5tQ29uZmlnW2tleSAtIDFdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5zaG93VGl0bGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8g5Yig6Zmk56ys5Yeg5Liq6YWN572uCiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0RFTEVURUFSUkFZJywgaXRlbSk7CiAgICB9LAogICAgLy8g57uE5Lu26L+U5ZueCiAgICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZyhkYXRhKSB7CiAgICAgIHZhciBwcm9wc09iaiA9IHRoaXMucHJvcHNPYmo7CiAgICAgIHByb3BzT2JqLmRhdGEgPSBkYXRhOwogICAgICBwcm9wc09iai5uYW1lID0gdGhpcy5hY3RpdmVDb25maWdOYW1lOwogICAgfSwKICAgIGFkZFNvcnQ6IGZ1bmN0aW9uIGFkZFNvcnQoYXJyLCBpbmRleDEsIGluZGV4MikgewogICAgICBhcnJbaW5kZXgxXSA9IGFyci5zcGxpY2UoaW5kZXgyLCAxLCBhcnJbaW5kZXgxXSlbMF07CiAgICAgIHJldHVybiBhcnI7CiAgICB9LAogICAgLy8g5pWw57uE5o6S5bqPCiAgICBhcnJheVNvcnQ6IGZ1bmN0aW9uIGFycmF5U29ydCgpIHsKICAgICAgdmFyIHRlbXBBcnIgPSBbXTsKICAgICAgdmFyIGJhc2lzID0gewogICAgICAgIHRpdGxlOiAn5Z+656GA57uE5Lu2JywKICAgICAgICBsaXN0OiBbXSwKICAgICAgICBpc09wZW46IHRydWUKICAgICAgfTsKICAgICAgdmFyIG1hcmtldGluZyA9IHsKICAgICAgICB0aXRsZTogJ+iQpemUgOe7hOS7ticsCiAgICAgICAgbGlzdDogW10sCiAgICAgICAgaXNPcGVuOiB0cnVlCiAgICAgIH07CiAgICAgIHZhciB0b29sID0gewogICAgICAgIHRpdGxlOiAn5bel5YW357uE5Lu2JywKICAgICAgICBsaXN0OiBbXSwKICAgICAgICBpc09wZW46IHRydWUKICAgICAgfTsKICAgICAgdGhpcy5sQ29uZmlnLm1hcChmdW5jdGlvbiAoZWwsIGluZGV4KSB7CiAgICAgICAgaWYgKGVsLnR5cGUgPT0gMCkgewogICAgICAgICAgYmFzaXMubGlzdC5wdXNoKGVsKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVsLnR5cGUgPT0gMSkgewogICAgICAgICAgbWFya2V0aW5nLmxpc3QucHVzaChlbCk7CiAgICAgICAgfQogICAgICAgIGlmIChlbC50eXBlID09IDIpIHsKICAgICAgICAgIHRvb2wubGlzdC5wdXNoKGVsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0ZW1wQXJyLnB1c2goYmFzaXMsIG1hcmtldGluZywgdG9vbCk7CiAgICAgIHRoaXMubGVmdE1lbnUgPSB0ZW1wQXJyOwogICAgfSwKICAgIC8vIHRvSW1hZ2UodmFsKXsKICAgIC8vICAgICBodG1sMmNhbnZhcyh0aGlzLiRyZWZzLmltZ0NvbnRhaW5lcix7CiAgICAvLyAgICAgICAgIHVzZUNPUlM6dHJ1ZSwKICAgIC8vICAgICAgICAgbG9nZ2luZzp0cnVlLAogICAgLy8gICAgICAgICB0YWludFRlc3Q6IGZhbHNlLAogICAgLy8gICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwKICAgIC8vICAgICB9KS50aGVuKChjYW52YXMpID0+IHsKICAgIC8vICAgICAgICAgbGV0IGltZ1VybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsKICAgIC8vICAgICAgICAgdGhpcy5kaXlTYXZlRGF0ZSh2YWwsaW1nVXJsKQogICAgLy8gICAgIH0pOwogICAgLy8gfSwKICAgIGRpeVNhdmVEYXRlOiBmdW5jdGlvbiBkaXlTYXZlRGF0ZSh2YWwsIG51bSwgdHlwZSwgc2F2ZSkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgZGl5UHJvU2F2ZSh0eXBlID8gMCA6IHRoaXMucGFnZUlkLCB7CiAgICAgICAgdHlwZTogdGhpcy5wYWdlVHlwZSB8fCBzYXZlLAogICAgICAgIHZhbHVlOiB2YWwsCiAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVUeHQsCiAgICAgICAgbmFtZTogdGhpcy5uYW1lVHh0IHx8ICfmqKHmnb8nLAogICAgICAgIGlzX3Nob3c6IHRoaXMuc2hvd1R4dCA/IDEgOiAwLAogICAgICAgIGlzX2JnX2NvbG9yOiB0aGlzLmNvbG9yVHh0ID8gMSA6IDAsCiAgICAgICAgY29sb3JfcGlja2VyOiB0aGlzLmNvbG9yUGlja2VyVHh0LAogICAgICAgIGJnX3BpYzogdGhpcy5waWNVcmxUeHQsCiAgICAgICAgYmdfdGFiX3ZhbDogdGhpcy50YWJWYWxUeHQsCiAgICAgICAgaXNfYmdfcGljOiB0aGlzLnBpY1R4dCA/IDEgOiAwCiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzOC5wYWdlSWQgPSByZXMuZGF0YS5pZDsKICAgICAgICBfdGhpczguJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgICB2YXIgdGhhdCA9IF90aGlzODsKICAgICAgICBfdGhpczgubmFtZU1vZGFsID0gZmFsc2U7CiAgICAgICAgaWYgKG51bSA9PSAyKSB7CiAgICAgICAgICBfdGhpczgucmVsTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKF90aGlzOC4kcm91dGVQcm9TdHIgKyAnL3NldHRpbmcvcGFnZXMvZGV2aXNlLzAnKTsKICAgICAgICAgIH0sIDIwMDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczgubG9hZGluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzOC5yZWxMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgX3RoaXM4LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBfdGhpczguJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgIH0pOwogICAgfSwKICAgIHNhdmVNb2RhbDogZnVuY3Rpb24gc2F2ZU1vZGFsKCkgewogICAgICBpZiAoIXRoaXMuc2F2ZU5hbWUpIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOi+k+WFpeaooeadv+WQjeensCcpOwogICAgICB0aGlzLnNhdmVDb25maWcoMSwgdGhpcy5zYXZlTmFtZSk7CiAgICB9LAogICAgY2xvc2VXaW5kb3c6IGZ1bmN0aW9uIGNsb3NlV2luZG93KCkgewogICAgICB0aGlzLiRtc2dib3goewogICAgICAgIHRpdGxlOiAn5o+Q56S6JywKICAgICAgICBtZXNzYWdlOiAn5YWz6Zet6aG16Z2i5YmN6K+35YWI5L+d5a2Y5pWw5o2u77yM5pyq5L+d5a2Y55qE6K+d5pWw5o2u5Lya5Lii5aSxJywKICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgICBpY29uQ2xhc3M6ICdlbC1pY29uLXdhcm5pbmcnLAogICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogJ2J0bi1jdXN0b20tY2FuY2VsJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHRoaXMuc2F2ZUNvbmZpZygpOwogICAgICAgICAgd2luZG93LmNsb3NlKCk7CiAgICAgICAgfSwgMTAwMCk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgIH0sCiAgICAvLyDkv53lrZjphY3nva4KICAgIHNhdmVDb25maWc6IGZ1bmN0aW9uIHNhdmVDb25maWcobnVtLCB0eXBlLCBzYXZlKSB7CiAgICAgIHZhciBfdGhpczkgPSB0aGlzOwogICAgICBpZiAodGhpcy5tQ29uZmlnLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+aaguacqua3u+WKoOS7u+S9lee7hOS7tu+8jOS/neWtmOWksei0pe+8gScpOwogICAgICB9CiAgICAgIGlmIChudW0gPT0gMSkgewogICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5yZWxMb2FkaW5nID0gdHJ1ZTsKICAgICAgfQogICAgICB2YXIgdmFsID0gdGhpcy4kc3RvcmUuc3RhdGUubW9iaWxkQ29uZmlnLmRlZmF1bHRBcnJheTsKICAgICAgaWYgKCF0aGlzLmZvb3RBY3RpdmUpIHsKICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAxMDAwOwogICAgICAgIHZhbFt0aW1lc3RhbXBdID0gdGhpcy4kc3RvcmUuc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VGb290ZXI7CiAgICAgICAgdGhpcy5mb290QWN0aXZlID0gdHJ1ZTsKICAgICAgfQogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM5LmRpeVNhdmVEYXRlKHZhbCwgbnVtLCB0eXBlLCBzYXZlKTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g6I635Y+W6buY6K6k6YWN572uCiAgICBnZXREZWZhdWx0Q29uZmlnOiBmdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlnKCkgewogICAgICB2YXIgX3RoaXMwID0gdGhpczsKICAgICAgZGl5UHJvSW5mbyh0aGlzLnBhZ2VJZCwgewogICAgICAgIHR5cGU6IDEKICAgICAgfSkudGhlbihmdW5jdGlvbiAoX3JlZjIpIHsKICAgICAgICB2YXIgZGF0YSA9IF9yZWYyLmRhdGE7CiAgICAgICAgdmFyIG9iaiA9IHt9OwogICAgICAgIHZhciB0ZW1wQVJSID0gW107CiAgICAgICAgX3RoaXMwLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy90aXRsZVVwZGF0YScsIGRhdGEuaW5mby50aXRsZSk7CiAgICAgICAgX3RoaXMwLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9uYW1lVXBkYXRhJywgZGF0YS5pbmZvLm5hbWUpOwogICAgICAgIF90aGlzMC4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvc2hvd1VwZGF0YScsIGRhdGEuaW5mby5pc19zaG93KTsKICAgICAgICBfdGhpczAuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL2NvbG9yVXBkYXRhJywgZGF0YS5pbmZvLmlzX2JnX2NvbG9yIHx8IDApOwogICAgICAgIF90aGlzMC4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGljVXBkYXRhJywgZGF0YS5pbmZvLmlzX2JnX3BpYyB8fCAwKTsKICAgICAgICBfdGhpczAuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3BpY2tlclVwZGF0YScsIGRhdGEuaW5mby5jb2xvcl9waWNrZXIgfHwgJyNmNWY1ZjUnKTsKICAgICAgICBfdGhpczAuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3JhZGlvVXBkYXRhJywgZGF0YS5pbmZvLmJnX3RhYl92YWwgfHwgMCk7CiAgICAgICAgX3RoaXMwLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWN1cmxVcGRhdGEnLCBkYXRhLmluZm8uYmdfcGljIHx8ICcnKTsKICAgICAgICBfdGhpczAuZGl5U3RhdHVzID0gZGF0YS5pbmZvLnN0YXR1czsKICAgICAgICB2YXIgbmV3QXJyID0gX3RoaXMwLm9ialRvQXJyKGRhdGEuaW5mby52YWx1ZSk7CiAgICAgICAgZnVuY3Rpb24gc29ydE51bWJlcihhLCBiKSB7CiAgICAgICAgICByZXR1cm4gYS50aW1lc3RhbXAgLSBiLnRpbWVzdGFtcDsKICAgICAgICB9CiAgICAgICAgbmV3QXJyLnNvcnQoc29ydE51bWJlcik7CiAgICAgICAgbmV3QXJyLm1hcChmdW5jdGlvbiAoZWwsIGluZGV4KSB7CiAgICAgICAgICBpZiAoZWwubmFtZSA9PSAnaGVhZGVyU2VyY2gnKSB7CiAgICAgICAgICAgIF90aGlzMC5pc1NlYXJjaCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZWwubmFtZSA9PSAndGFiTmF2JykgewogICAgICAgICAgICBfdGhpczAuaXNUYWIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGVsLm5hbWUgPT0gJ2hvbWVDb21iJykgewogICAgICAgICAgICBfdGhpczAuaXNDb21iID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlbC5uYW1lID09ICdjdXN0b21lclNlcnZpY2UnKSB7CiAgICAgICAgICAgIF90aGlzMC5pc1NlcnZpY2UgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGVsLm5hbWUgPT0gJ2dvb2RMaXN0JykgewogICAgICAgICAgICAvLyBsZXQgc3RvcmFnZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgICAgICAgICAgIC8vIHN0b3JhZ2Uuc2V0SXRlbShlbC50aW1lc3RhbXAsIGVsLnNlbGVjdENvbmZpZy5hY3RpdmVWYWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbC5pZCA9ICdpZCcgKyBlbC50aW1lc3RhbXA7CiAgICAgICAgICBfdGhpczAubENvbmZpZy5tYXAoZnVuY3Rpb24gKGl0ZW0sIGopIHsKICAgICAgICAgICAgaWYgKGVsLm5hbWUgPT0gaXRlbS5kZWZhdWx0TmFtZSkgewogICAgICAgICAgICAgIGl0ZW0ubnVtID0gZWwudGltZXN0YW1wOwogICAgICAgICAgICAgIGl0ZW0uaWQgPSAnaWQnICsgZWwudGltZXN0YW1wOwogICAgICAgICAgICAgIHZhciB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOwogICAgICAgICAgICAgIHRlbXBBUlIucHVzaCh0ZW1wSXRlbSk7CiAgICAgICAgICAgICAgb2JqW2VsLnRpbWVzdGFtcF0gPSBlbDsKICAgICAgICAgICAgICBfdGhpczAubUNvbmZpZy5wdXNoKHRlbXBJdGVtKTsKICAgICAgICAgICAgICAvLyDkv53lrZjpu5jorqTnu4Tku7bphY3nva4KICAgICAgICAgICAgICBfdGhpczAuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0FEREFSUkFZJywgewogICAgICAgICAgICAgICAgbnVtOiBlbC50aW1lc3RhbXAsCiAgICAgICAgICAgICAgICB2YWw6IGVsCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHZhciBvYmpzID0gbmV3QXJyW25ld0Fyci5sZW5ndGggLSAxXTsKICAgICAgICBpZiAob2Jqcy5uYW1lID09ICdwYWdlRm9vdCcpIHsKICAgICAgICAgIF90aGlzMC4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvZm9vdFBhZ2VVcGRhdGEnLCBvYmpzKTsKICAgICAgICB9CiAgICAgICAgX3RoaXMwLnNob3dUaXRsZSgpOwogICAgICB9KTsKICAgIH0sCiAgICBjYXRlZ29yeUxpc3Q6IGZ1bmN0aW9uIGNhdGVnb3J5TGlzdCgpIHsKICAgICAgdmFyIF90aGlzMSA9IHRoaXM7CiAgICAgIF9jYXRlZ29yeUxpc3QoZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMS5jYXRlZ29yeSA9IHJlcy5kYXRhOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDph43nva4KICAgIHJlYXN0OiBmdW5jdGlvbiByZWFzdCgpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICBpZiAodGhpcy5wYWdlSWQgPT0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+aWsOWinumhtemdou+8jOaXoOazlemHjee9ricpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJGNvbmZpcm0oJ+atpOaTjeS9nOWwhua4heepuuaooeadv+WGheWuuSwg5piv5ZCm57un57utPycsICfmj5DnpLonLCB7CiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgX3RoaXMxMC5tQ29uZmlnID0gW107CiAgICAgICAgICBfdGhpczEwLnJDb25maWcgPSBbXTsKICAgICAgICAgIF90aGlzMTAuYWN0aXZlSW5kZXggPSAtOTk7CiAgICAgICAgICBfdGhpczEwLmdldERlZmF1bHRDb25maWcoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3RpdGxlVXBkYXRhJywgJycpOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvbmFtZVVwZGF0YScsICcnKTsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3Nob3dVcGRhdGEnLCAxKTsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL2NvbG9yVXBkYXRhJywgMCk7CiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWNVcGRhdGEnLCAwKTsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3BpY2tlclVwZGF0YScsICcjZjVmNWY1Jyk7CiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9yYWRpb1VwZGF0YScsIDApOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGljdXJsVXBkYXRhJywgJycpOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VURU1QVFknKTsKICB9LAogIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkgewogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvdGl0bGVVcGRhdGEnLCAnJyk7CiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9uYW1lVXBkYXRhJywgJycpOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvc2hvd1VwZGF0YScsIDEpOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvY29sb3JVcGRhdGEnLCAwKTsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3BpY1VwZGF0YScsIDApOwogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGlja2VyVXBkYXRhJywgJyNmNWY1ZjUnKTsKICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3JhZGlvVXBkYXRhJywgMCk7CiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWN1cmxVcGRhdGEnLCAnJyk7CiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9TRVRFTVBUWScpOwogIH0KfTs="},null]}