{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\eipControl\\EipTreeselect.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\eipControl\\EipTreeselect.vue","mtime":1705040076774},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2xqemMtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9sanpjLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIuanMiOwppbXBvcnQgInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5zdGlja3kuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsKaW1wb3J0IGhvdGVudFV0aWxzIGZyb20gIkAvaG90ZW50LXVpLXV0aWwuanMiOwppbXBvcnQgc3ViX3Bpb19taXhpbiBmcm9tICJAL3N1Yi1wZXJtaXNzaW9uLW1peGluLmpzIjsKaW1wb3J0IHJlcSBmcm9tICJAL3JlcXVlc3QuanMiOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogImVpcC10cmVlc2VsZWN0IiwKICBwcm9wczogWyJ2YWxpZGF0ZSIsICJ2YWx1ZSIsICJuYW1lIiwgInBlcm1pc3Npb24iLCAibXVsdGlwbGUiLCAic2VsZWN0bGlzdCIsICJnYW5nZWQiLCAiZmlsdGVyYWJsZSIsICJhbGxvd0NyZWF0ZSIsICJzdHlsZXMiLCAiY3VzdG9tUXVlcnkiXSwKICBtaXhpbnM6IFtzdWJfcGlvX21peGluXSwKICAvL+a3t+WFpeaWueW8j+W8leWFpeihqOWNlee7hOS7tuS4reWFrOWFseWxnuaAp++8jOWkhOeQhuWtkOihqOOAgeWtmeihqOihjOWGheiBlOWKqO+8iOWIh+mdouS/ruaUuXBlcm1pc3Npb25fc3ViX3N1Yu+8iQogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBjb25maWc6IHt9LAogICAgICB0b3RhbDogMTAsCiAgICAgIHBhZ2VTaXplOiA1LAogICAgICBjdXJyZW50UGFnZTogMSwKICAgICAgb3B0aW9uczogW10sCiAgICAgIHRlbXBvcHRpb25zOiBbXSwKICAgICAgdmFsdWVEZXNjOiAiIiwKICAgICAgdGFnRm9ybWF0VmFsdWU6IFtdLAogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogImNoaWxkcmVuIiwKICAgICAgICBsYWJlbDogInZhbHVlIgogICAgICB9LAogICAgICBuZXdWYWxpZGF0ZTogbnVsbCwKICAgICAgY3VyU3ViSW5kZXg6IG51bGwKICAgIH07CiAgfSwKICB3YXRjaDogewogICAgdmFsdWVEZXNjOiBmdW5jdGlvbiB2YWx1ZURlc2MobmV3VmFsLCBvbGRWYWwpIHsKICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT0gb2xkVmFsKSB7CiAgICAgICAgdGhpcy50YWdGb3JtYXRWYWx1ZSA9IG5ld1ZhbC5zcGxpdCgiLCIpOwogICAgICB9CiAgICB9CiAgfSwKICBjb21wdXRlZDogewogICAgaW5wdXRWYWw6IHsKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsKICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsKICAgICAgICAgICAgICB2YXIgY2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICAgICAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjaGVja2VkTm9kZXMpLAogICAgICAgICAgICAgICAgX3N0ZXA7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5zcGxpdCgiLCIpLmluY2x1ZGVzKGRhdGEua2V5KSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkKGRhdGEsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsKICAgICAgICAgICAgICB2YXIgX2NoZWNrZWROb2RlcyA9IHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5nZXRDaGVja2VkTm9kZXMoKTsKICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKF9jaGVja2VkTm9kZXMpLAogICAgICAgICAgICAgICAgX3N0ZXAyOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykgewogICAgICAgICAgICAgICAgICB2YXIgX2RhdGEgPSBfc3RlcDIudmFsdWU7CiAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkKF9kYXRhLCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZSA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgKyAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHsKICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkgewogICAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB2YWwuam9pbigiLCIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB2YWwpOwogICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHZhbCkgewogICAgICAgICAgICAvL+WIpOaWreWvueivneahhuaYr+WQpue7keWumuS6huWFs+iBlOafpeivogogICAgICAgICAgICBpZiAodGhpcy5jdXN0b21RdWVyeSAmJiB0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb24gJiYgdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICB2YXIgY3VzdFF1ZXJ5SnNvbiA9IHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbjsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RRdWVyeUpzb24ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChjdXN0UXVlcnlKc29uW2ldLmNvbmRpdGlvbmZpZWxkLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgdGhpcy5kb1F1ZXJ5KGN1c3RRdWVyeUpzb25baV0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiWyIgKyBjdXN0UXVlcnlKc29uW2ldLmNvbW1lbnQgKyAiXeWFs+iBlOafpeivouWPluWAvOWPguaVsOacque7keWumuihqOWNleWtl+autSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGlucHV0V3JpdGVhYmxlOiBmdW5jdGlvbiBpbnB1dFdyaXRlYWJsZSgpIHsKICAgICAgcmV0dXJuIHV0aWxzLmdldFdyaXRlYWJsZSh0aGlzLnBlcm1pc3Npb25fc3ViKTsKICAgIH0sCiAgICBpbnB1dFZhbGlkYXRlOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5uZXdWYWxpZGF0ZSkgewogICAgICAgIHJldHVybiB0aGlzLm5ld1ZhbGlkYXRlOwogICAgICB9CiAgICAgIHZhciB2YWxpZGF0ZU9iaiA9IHRoaXMuJHN0b3JlLnN0YXRlLmluZGV4LnZhbGlkYXRlOwogICAgICByZXR1cm4gdXRpbHMuYWRkUmVxdWlyZWRPck5vdCh0aGlzLnBlcm1pc3Npb25fc3ViLCB0aGlzLnZhbGlkYXRlLCB2YWxpZGF0ZU9iaiwgdGhpcyk7CiAgICB9LAogICAgaW5wdXROYW1lOiBmdW5jdGlvbiBpbnB1dE5hbWUoKSB7CiAgICAgIHZhciBsYWJlbGRlc2MgPSAiIjsKICAgICAgaWYgKHRoaXMuJHNsb3RzICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzYyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW4gJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQpIHsKICAgICAgICBsYWJlbGRlc2MgPSB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW5bMF0udGV4dDsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpICsgIi0iICsgbGFiZWxkZXNjOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7CiAgICAgIH0KICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNlbGVjdGxpc3QgPyB0aGlzLnNlbGVjdGxpc3QgOiBbXTsKICAgIHZhciBfbWUgPSB0aGlzOwogICAgdmFyIF9ob3RlbnRVdGlscyRnZXRTdWJTYyA9IGhvdGVudFV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChfbWUuJGVsKSwKICAgICAgc3ViU2NvcGVFbCA9IF9ob3RlbnRVdGlscyRnZXRTdWJTYy5zdWJTY29wZUVsOwogICAgaWYgKHN1YlNjb3BlRWwpIHsKICAgICAgdGhpcy5jdXJTdWJJbmRleCA9IHN1YlNjb3BlRWwuZGF0YXNldFsiaW5kZXgiXTsKICAgIH0KICAgIHZhciBnYW5nZWQgPSB0aGlzLmdhbmdlZDsKICAgIC8v5Yik5pat5piv5ZCm5pyJ5Y+C5pWw57uR5a6aCiAgICBpZiAoZ2FuZ2VkICYmIGdhbmdlZC5iaW5kICYmIEpTT04uc3RyaW5naWZ5KGdhbmdlZC5iaW5kKSAhPSAie30iICYmIHRoaXMuY29uZmlnKSB7CiAgICAgIHZhciBiaW5kID0gZ2FuZ2VkLmJpbmQ7CiAgICAgIHZhciBmb3JtVm0gPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX21lKTsKICAgICAgZm9yICh2YXIga2V5IGluIGJpbmQpIHsKICAgICAgICB2YXIgcGFyYW1Eb20gPSBudWxsOwogICAgICAgIGlmICh0aGlzLmN1clN1YkluZGV4ID09IG51bGwpIHsKICAgICAgICAgIHBhcmFtRG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW21vZGVsLW5hbWU9IicgKyBiaW5kW2tleV0gKyAnIl0nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHN1YkZpbGVkTmFtZSA9IGJpbmRba2V5XS5zcGxpdCgiLiIpWzNdOwogICAgICAgICAgcGFyYW1Eb20gPSBzdWJTY29wZUVsLnF1ZXJ5U2VsZWN0b3IoJ1ttb2RlbC1uYW1lPSJpdGVtLicgKyBzdWJGaWxlZE5hbWUgKyAnIl0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmFtRG9tICYmIHBhcmFtRG9tLl9fdnVlX18pIHsKICAgICAgICAgIHBhcmFtRG9tLl9fdnVlX18uJHdhdGNoKCJ2YWx1ZSIsIGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCkgewogICAgICAgICAgICBpZiAobmV3VmFsICE9IG9sZFZhbCkgewogICAgICAgICAgICAgIF9tZS5zZWFyY2goZmFsc2UsIG5ld1ZhbCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2VsZWN0bGlzdCA/IHRoaXMuc2VsZWN0bGlzdCA6IFtdOwogICAgLy/liqjmgIHkvKDlhaUKICAgIGlmICh0aGlzLmdhbmdlZCAmJiB0aGlzLmdhbmdlZC5hbGlhcyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoIDwgMSAmJiB0aGlzLmdhbmdlZCkgewogICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICB0aGlzXy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0QnlBbGlhc0NxIiwgdGhpc18uZ2FuZ2VkLmFsaWFzKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGlzXy5jb25maWcgPSByZXM7CiAgICAgICAgdmFyIG9iaklzRW1wdHkgPSB0aGlzXy5vYmpJc0VtcHR5KHRoaXNfLmdhbmdlZC5iaW5kKTsKICAgICAgICBpZiAodGhpc18uZ2FuZ2VkICYmICFvYmpJc0VtcHR5KSB7CiAgICAgICAgICB0aGlzXy5oYW5kZWxJbml0R2FuZ2Vkc2VhcmNoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXNfLnNlYXJjaChmYWxzZSwgIiIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICB0aGlzLiR2YWxpZGF0b3IgPSB0aGlzLiRyb290LiR2YWxpZGF0b3I7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvL+WIpOaWreWvueixoemHjOmdoueahOWAvOaYr+WQpuS4uuepugogICAgb2JqSXNFbXB0eTogZnVuY3Rpb24gb2JqSXNFbXB0eShvYmopIHsKICAgICAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgICAgIGlmIChvYmpba2V5XSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBkb1F1ZXJ5OiBmdW5jdGlvbiBkb1F1ZXJ5KHBhcmFtKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBwYXJhbUxvYWREYXRhLCBwSW5zdCwgaSwgYmluZFZhbCwgb2JqLCBxdWVyeVVybCwgcmVxdWVzdE1ldGhvZDsKICAgICAgICByZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBwYXJhbUxvYWREYXRhID0gW107CiAgICAgICAgICAgICAgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX3RoaXMyKTsgLy/ojrflj5blhbPogZTmn6Xor6Lnu5HlrprnmoTooajljZXlj4LmlbAKICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW0uY29uZGl0aW9uZmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChwYXJhbS5jb25kaXRpb25maWVsZFtpXS5maWVsZFBhdGggIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgYmluZFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHBJbnN0LCBwYXJhbS5jb25kaXRpb25maWVsZFtpXS5maWVsZFBhdGgsIG51bGwpOwogICAgICAgICAgICAgICAgICBvYmogPSB7CiAgICAgICAgICAgICAgICAgICAga2V5OiBwYXJhbS5jb25kaXRpb25maWVsZFtpXS5maWVsZCwKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYmluZFZhbAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICBwYXJhbUxvYWREYXRhLnB1c2gob2JqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcXVlcnlVcmwgPSBwYXJhbS5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gIiR7Zm9ybX0vZm9ybS9jdXN0b21RdWVyeS92MS9kb1F1ZXJ5P2FsaWFzPSIgKyBwYXJhbS5hbGlhcyArICImcGFnZT0xIiA6IHBhcmFtLnVybDsKICAgICAgICAgICAgICByZXF1ZXN0TWV0aG9kID0gIlBPU1QiOyAvL+WmguaenOWFs+iBlOaVsOaNruWIl+ihqOafpeivouaVsOaNruS4jeaYr+aVsOaNrua6kOWImeivt+axguaWueazleS4unJlc3RmdWzphY3nva7nmoTor7fmsYLmlrnlvI8KICAgICAgICAgICAgICBpZiAocGFyYW0uZHNUeXBlICE9ICdkYXRhU291cmNlJykgewogICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZCA9IHBhcmFtLnJlcXVlc3RUeXBlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvL+afpeivouaVsOaNrgogICAgICAgICAgICAgIHJlcS5yZXF1ZXN0KHsKICAgICAgICAgICAgICAgIHVybDogcXVlcnlVcmwsCiAgICAgICAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RNZXRob2QsCiAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbUxvYWREYXRhCiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICAvL+WIpOaWreaYr+WQpuacieWFs+iBlOafpeivouaVsOaNrui/lOWbngogICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnJvd3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAvL+iOt+WPluWFs+iBlOafpeivoui/lOWbnueahOihqOWNleWPguaVsAogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcGFyYW0ucmVzdWx0ZmllbGQubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJlc3VsdGZpZWxkW19pXS5maWVsZFBhdGggIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVzLmRhdGEucm93cy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucm93c1tqXVtwYXJhbS5yZXN1bHRmaWVsZFtfaV0uY29tbWVudF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKyByZXMuZGF0YS5yb3dzW2pdW3BhcmFtLnJlc3VsdGZpZWxkW19pXS5jb21tZW50XSArICIsIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygwLCB2YWwubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAvL+i1i+WAvOe7mee7keWumueahOWtl+autQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsIHBhcmFtLnJlc3VsdGZpZWxkW19pXS5maWVsZFBhdGgsIHZhbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAvL+iOt+WPluWFs+iBlOafpeivoui/lOWbnueahOihqOWNleWPguaVsAogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBwYXJhbS5yZXN1bHRmaWVsZC5sZW5ndGg7IF9pMisrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJlc3VsdGZpZWxkW19pMl0uZmllbGRQYXRoICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAvL+i1i+WAvOe7mee7keWumueahOWtl+autQogICAgICAgICAgICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsIHBhcmFtLnJlc3VsdGZpZWxkW19pMl0uZmllbGRQYXRoLCAiIiwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICBoYW5kZWxJbml0R2FuZ2Vkc2VhcmNoOiBmdW5jdGlvbiBoYW5kZWxJbml0R2FuZ2Vkc2VhcmNoKCkgewogICAgICB2YXIgX21lID0gdGhpczsKICAgICAgdmFyIF9ob3RlbnRVdGlscyRnZXRTdWJTYzIgPSBob3RlbnRVdGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoX21lLiRlbCksCiAgICAgICAgc3ViU2NvcGVFbCA9IF9ob3RlbnRVdGlscyRnZXRTdWJTYzIuc3ViU2NvcGVFbDsKICAgICAgaWYgKHN1YlNjb3BlRWwpIHsKICAgICAgICB0aGlzLmN1clN1YkluZGV4ID0gc3ViU2NvcGVFbC5kYXRhc2V0WyJpbmRleCJdOwogICAgICB9CiAgICAgIHZhciBnYW5nZWQgPSB0aGlzLmdhbmdlZDsKICAgICAgLy/liKTmlq3mmK/lkKbmnInlj4LmlbDnu5HlrpoKICAgICAgaWYgKGdhbmdlZCAmJiBKU09OLnN0cmluZ2lmeShnYW5nZWQuYmluZCkgIT0gInt9IiAmJiB0aGlzLmNvbmZpZykgewogICAgICAgIHZhciBiaW5kID0gZ2FuZ2VkLmJpbmQ7CiAgICAgICAgdmFyIGZvcm1WbSA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfbWUpOwogICAgICAgIGlmICh0aGlzLmN1clN1YkluZGV4ID09IG51bGwpIHsKICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiaW5kKSB7CiAgICAgICAgICAgIHZhciBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfbWUpOwogICAgICAgICAgICB2YXIgdmFsID0gdXRpbHMuZ2V0VmFsdWVCeVBhdGgocEluc3QsIGJpbmRba2V5XSk7CiAgICAgICAgICAgIF9tZS5zZWFyY2goZmFsc2UsIHZhbCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiaW5kKSB7CiAgICAgICAgICAgIHZhciBzdWJGaWxlZE5hbWUgPSBiaW5kW2tleV0uc3BsaXQoIi4iKVszXTsKICAgICAgICAgICAgdmFyIHBhcmFtRG9tID0gc3ViU2NvcGVFbC5xdWVyeVNlbGVjdG9yKCdbbW9kZWwtbmFtZT0iaXRlbS4nICsgc3ViRmlsZWROYW1lICsgJyJdJyk7CiAgICAgICAgICAgIGlmIChwYXJhbURvbSAmJiBwYXJhbURvbS5fX3Z1ZV9fICYmIHBhcmFtRG9tLl9fdnVlX18udmFsdWUpIHsKICAgICAgICAgICAgICB2YXIgbmV3VmFsID0gcGFyYW1Eb20uX192dWVfXy52YWx1ZSArICIiOwogICAgICAgICAgICAgIF9tZS5zZWFyY2goZmFsc2UsIG5ld1ZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7CiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7CiAgICAgICAgdGhpcy50ZW1wb3B0aW9ucyA9IFtdOwogICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkS2V5cyhbXSwgdHJ1ZSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLnNldEN1cnJlbnROb2RlKHt9KTsKICAgICAgfQogICAgfSwKICAgIGNsaWNrTmF0aXZlOiBmdW5jdGlvbiBjbGlja05hdGl2ZSgpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIC8v5Yqo5oCB5Lyg5YWlCiAgICAgIGlmICh0aGlzLmdhbmdlZCAmJiB0aGlzLmdhbmdlZC5hbGlhcyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoIDwgMSkgewogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJmb3JtL2dldEJ5QWxpYXNDcSIsIHRoaXMuZ2FuZ2VkLmFsaWFzKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIF90aGlzMy5jb25maWcgPSByZXM7CiAgICAgICAgICBfdGhpczMuc2VhcmNoKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICBzZWxlY3RCbHVyOiBmdW5jdGlvbiBzZWxlY3RCbHVyKHZhbCkgewogICAgICB0aGlzLnNlYXJjaCgpOwogICAgfSwKICAgIGhhbmRsZUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGVja0NoYW5nZShkYXRhKSB7CiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7CiAgICAgICAgdmFyIGNoZWNrZWROb2RlcyA9IHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5nZXRDaGVja2VkTm9kZXMoKTsKICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9IFtdOwogICAgICAgIHRoaXMudGVtcG9wdGlvbnMgPSBjaGVja2VkTm9kZXM7CiAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihjaGVja2VkTm9kZXMpLAogICAgICAgICAgX3N0ZXAzOwogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOykgewogICAgICAgICAgICB2YXIgX2RhdGEyID0gX3N0ZXAzLnZhbHVlOwogICAgICAgICAgICBtb2RlbFZhbHVlLnB1c2goX2RhdGEyLmtleSk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBfaXRlcmF0b3IzLmUoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgbW9kZWxWYWx1ZS5qb2luKCIsIikpOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlTm9kZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVOb2RlQ2xpY2soZGF0YSkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLnNldENoZWNrZWQoZGF0YSwgdHJ1ZSk7CiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkgewogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgZGF0YS5rZXkpOwogICAgICAgIGlmIChkYXRhLmtleSkgewogICAgICAgICAgLy/liKTmlq3lr7nor53moYbmmK/lkKbnu5HlrprkuoblhbPogZTmn6Xor6IKICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXJ5ICYmIHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbiAmJiB0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb24ubGVuZ3RoID4gMCkgewogICAgICAgICAgICB2YXIgY3VzdFF1ZXJ5SnNvbiA9IHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbjsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0UXVlcnlKc29uLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgaWYgKGN1c3RRdWVyeUpzb25baV0uY29uZGl0aW9uZmllbGQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgdGhpcy5kb1F1ZXJ5KGN1c3RRdWVyeUpzb25baV0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJbIiArIGN1c3RRdWVyeUpzb25baV0uY29tbWVudCArICJd5YWz6IGU5p+l6K+i5Y+W5YC85Y+C5pWw5pyq57uR5a6a6KGo5Y2V5a2X5q61Iik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdC5ibHVyKCk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczQuJHZhbGlkYXRvci52YWxpZGF0ZSgpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHRoaXMubXVsdGlwbGUpIHsKICAgICAgICB2YXIgY2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICAgIHZhciBtb2RlbFZhbHVlID0gW107CiAgICAgICAgdGhpcy50ZW1wb3B0aW9ucyA9IGNoZWNrZWROb2RlczsKICAgICAgICB2YXIgX2l0ZXJhdG9yNCA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGNoZWNrZWROb2RlcyksCiAgICAgICAgICBfc3RlcDQ7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAoX2l0ZXJhdG9yNC5zKCk7ICEoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgIHZhciBfZGF0YTMgPSBfc3RlcDQudmFsdWU7CiAgICAgICAgICAgIG1vZGVsVmFsdWUucHVzaChfZGF0YTMua2V5KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9pdGVyYXRvcjQuZShlcnIpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBfaXRlcmF0b3I0LmYoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCBtb2RlbFZhbHVlLmpvaW4oIiwiKSk7CiAgICAgIH0KICAgIH0sCiAgICBmaWx0ZXJOb2RlOiBmdW5jdGlvbiBmaWx0ZXJOb2RlKHZhbHVlLCBkYXRhKSB7CiAgICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZGF0YS52YWx1ZS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7CiAgICB9LAogICAgZmlsdGVyTWV0aG9kOiBmdW5jdGlvbiBmaWx0ZXJNZXRob2QocXVlcnkpIHsKICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmZpbHRlcihxdWVyeSk7CiAgICB9LAogICAgcmVtb3RlTWV0aG9kOiBmdW5jdGlvbiByZW1vdGVNZXRob2QodmFsKSB7CiAgICAgIGlmICh2YWwpIHsKICAgICAgICB0aGlzLnNlYXJjaChmYWxzZSwgdmFsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnBhcmFtID0gIiI7CiAgICAgICAgdGhpcy5zZWFyY2goKTsKICAgICAgfQogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UoY3VycmVudFBhZ2UpIHsKICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlOwogICAgICB0aGlzLnNlYXJjaChjdXJyZW50UGFnZSk7CiAgICB9LAogICAgc2VhcmNoOiBmdW5jdGlvbiBzZWFyY2goY3VycmVudFBhZ2UsIHBhcmFtLCBnYW5nZWRDaGFuZ2UpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHRoaXMub3B0aW9ucyA9IFtdOwogICAgICBpZiAoZ2FuZ2VkQ2hhbmdlKSB7CiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCAiIik7CiAgICAgIH0KICAgICAgdmFyIG9iaklzRW1wdHkgPSB0aGlzLm9iaklzRW1wdHkodGhpcy5nYW5nZWQuYmluZCk7CiAgICAgIGlmICghdGhpcy5jb25maWcgfHwgdGhpcy5nYW5nZWQuYmluZCAmJiAhb2JqSXNFbXB0eSAmJiAhcGFyYW0pIHJldHVybjsKICAgICAgdmFyIHN0ciA9IHRoaXMuY29uZmlnOwogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB2YXIgZ2FuZ2VkID0gdGhpcy5nYW5nZWQ7CiAgICAgIHRoaXMucGFnZVNpemUgPSBzdHIucGFnZVNpemU7CiAgICAgIC8vIGlmKHN0ci5uZWVkUGFnZSA9PT0gMSl7CiAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgcGFnZTogY3VycmVudFBhZ2UgPyBjdXJyZW50UGFnZSA6IDEsCiAgICAgICAgICBwYWdlU2l6ZTogc3RyLnBhZ2VTaXplLAogICAgICAgICAgc2hvd1RvdGFsOiAidHJ1ZSIKICAgICAgICB9CiAgICAgIH07CiAgICAgIGlmIChwYXJhbSkgewogICAgICAgIGlmIChzdHIuZHNUeXBlID09ICJkYXRhU291cmNlIikgewogICAgICAgICAgdmFyIEJhc2U2NCA9IHJlcXVpcmUoImpzLWJhc2U2NCIpLkJhc2U2NDsKICAgICAgICAgIHN0ci5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlID8gY3VycmVudFBhZ2UgOiAxOwogICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdhbmdlZC5iaW5kKSA9PT0gInt9IikgewogICAgICAgICAgICBzdHIucXVlcnlEYXRhID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShbewogICAgICAgICAgICAgIGtleTogZ2FuZ2VkLnZhbHVlQmluZCwKICAgICAgICAgICAgICB2YWx1ZTogcGFyYW0KICAgICAgICAgICAgfV0pKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBxdWVyeURhdGEgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGdhbmdlZC5iaW5kKSB7CiAgICAgICAgICAgICAgdmFyIHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKF90aGlzKTsKICAgICAgICAgICAgICB2YXIgdmFsID0gdXRpbHMuZ2V0VmFsdWVCeVBhdGgocEluc3QsIGdhbmdlZC5iaW5kW2tleV0sIHRoaXMuY3VyU3ViSW5kZXgpOwogICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgIHF1ZXJ5RGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAga2V5OiBrZXksCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBxdWVyeURhdGEucHVzaCh7CiAgICAgICAgICAgICAgICAgIGtleToga2V5LAogICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyYW0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzdHIucXVlcnlEYXRhID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShxdWVyeURhdGEpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHRlbXBsYXRlUGEgPSB0aGlzLmNvbmZpZy5kYXRhUGFyYW07CiAgICAgICAgICBpZiAodGhpcy5jb25maWcucmVxdWVzdFR5cGUgPT0gIlBPU1QiICYmIHRlbXBsYXRlUGEpIHsKICAgICAgICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZShzdHIuY29uZGl0aW9uZmllbGQpOwogICAgICAgICAgICBjb25kaXRpb25maWVsZC5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHsKICAgICAgICAgICAgICB2YXIgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX3RoaXMpOwogICAgICAgICAgICAgIHZhciB2YWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwSW5zdCwgZ2FuZ2VkLmJpbmRbZWxlLmZpZWxkXSk7CiAgICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgdGVtcGxhdGVQYSA9IHRlbXBsYXRlUGEucmVwbGFjZShuZXcgUmVnRXhwKCJcXHsiICsgZWxlLmZpZWxkICsgIlxcfSIsICJnIiksIHZhbCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRlbXBsYXRlUGEgPSB0ZW1wbGF0ZVBhLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFx7IiArIGVsZS5maWVsZCArICJcXH0iLCAiZyIpLCBwYXJhbSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgICAgc3RyLnBhZ2VCZWFuID0gdXRpbHMucGFyc2VUb0pzb24odGVtcGxhdGVQYSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHN0ci5wYWdlQmVhbiA9IHBhZ2VCZWFuOwogICAgICAgIHN0ci5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlID8gY3VycmVudFBhZ2UgOiAxOwogICAgICAgIHN0ci5xdWVyeURhdGEgPSAiIjsKICAgICAgfQogICAgICAvL30KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vc2VsZWN0UXVlcnkiLCBzdHIpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChfdGhpczUuY29uZmlnICYmIF90aGlzNS5jb25maWcuZHNUeXBlID09PSAicmVzdGZ1bCIpIHsKICAgICAgICAgIF90aGlzLm9wdGlvbnMgPSByZXMucm93czsKICAgICAgICAgIC8vdHJlZeaVsOe7hOi9rGxpc3QKICAgICAgICAgIF90aGlzNS5hZGRTZWxlY3RMaXN0KF90aGlzLm9wdGlvbnMpOwogICAgICAgICAgLy/lpITnkIblj6ror7vlm57loavmmL7npLoKICAgICAgICAgIGlmIChfdGhpcy5pbnB1dFZhbCAmJiBfdGhpcy5pbnB1dFZhbC5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBfdGhpcy5pbnB1dFZhbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3RoaXMuaW5wdXRWYWwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBfdGhpczUuZmluZERlc2MoX3RoaXMub3B0aW9ucywgX3RoaXMuaW5wdXRWYWxbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8v6buY6K6k6YCJ5Lit5qCR6IqC54K5CiAgICAgICAgICAgIGlmIChfdGhpczUuaW5wdXRXcml0ZWFibGUpIHsKICAgICAgICAgICAgICBfdGhpczUuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkS2V5cyhfdGhpcy5pbnB1dFZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF90aGlzNS5maW5kRGVzYyhfdGhpcy5vcHRpb25zLCBfdGhpcy5pbnB1dFZhbCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX3RoaXM1LnZhbHVlRGVzYyAhPSAiIikgewogICAgICAgICAgICBfdGhpczUudmFsdWVEZXNjID0gX3RoaXM1LnZhbHVlRGVzYy5zdWJzdHJpbmcoMCwgX3RoaXM1LnZhbHVlRGVzYy5sZW5ndGggLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX3RoaXMudG90YWwgPSByZXMudG90YWw7CiAgICAgICAgX3RoaXMub3B0aW9ucyA9IFtdOwogICAgICAgIHJlcy5yb3dzLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKICAgICAgICAgIHZhciBvcHRpb24gPSB7fTsKICAgICAgICAgIGlmIChfdGhpcy5nYW5nZWQudmFsdWVCaW5kKSB7CiAgICAgICAgICAgIG9wdGlvbi5rZXkgPSBtW2dhbmdlZC52YWx1ZUJpbmRdICsgIiI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX3RoaXMuZ2FuZ2VkLmxhYmVsQmluZCkgewogICAgICAgICAgICBvcHRpb24udmFsdWUgPSBtW2dhbmdlZC5sYWJlbEJpbmRdOwogICAgICAgICAgfQogICAgICAgICAgX3RoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7CiAgICAgICAgfSk7CgogICAgICAgIC8vdHJlZeaVsOe7hOi9rGxpc3QKICAgICAgICBfdGhpczUuYWRkU2VsZWN0TGlzdChfdGhpcy5vcHRpb25zKTsKICAgICAgICBpZiAoX3RoaXMuaW5wdXRWYWwgJiYgX3RoaXMuaW5wdXRWYWwuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgX3RoaXMuaW5wdXRWYWwubGVuZ3RoID4gMCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfdGhpcy5pbnB1dFZhbC5sZW5ndGg7IGorKykgewogICAgICAgICAgICBfdGhpczUuZmluZERlc2MoX3RoaXMub3B0aW9ucywgX3RoaXMuaW5wdXRWYWxbal0pOwogICAgICAgICAgfQogICAgICAgICAgLy/pu5jorqTpgInkuK3moJHoioLngrkKICAgICAgICAgIF90aGlzNS4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBfdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlICYmIF90aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q2hlY2tlZEtleXMoX3RoaXMuaW5wdXRWYWwpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS5maW5kRGVzYyhfdGhpcy5vcHRpb25zLCBfdGhpcy5pbnB1dFZhbCk7CiAgICAgICAgfQogICAgICAgIGlmIChfdGhpczUudmFsdWVEZXNjICE9ICIiKSB7CiAgICAgICAgICBfdGhpczUudmFsdWVEZXNjID0gX3RoaXM1LnZhbHVlRGVzYy5zdWJzdHJpbmcoMCwgX3RoaXM1LnZhbHVlRGVzYy5sZW5ndGggLSAxKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIGZpbmREZXNjOiBmdW5jdGlvbiBmaW5kRGVzYyhsaXN0LCBrZXkpIHsKICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAobGlzdFtpXS5rZXkgPT0ga2V5KSB7CiAgICAgICAgICAgIHRoaXMudmFsdWVEZXNjICs9IGxpc3RbaV0udmFsdWUgKyAiLCI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsaXN0W2ldLmNoaWxkcmVuKSB7CiAgICAgICAgICAgIHRoaXMuZmluZERlc2MobGlzdFtpXS5jaGlsZHJlbiwga2V5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBhZGRTZWxlY3RMaXN0OiBmdW5jdGlvbiBhZGRTZWxlY3RMaXN0KGxpc3QpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID4gMCkgewogICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAobCkgewogICAgICAgICAgX3RoaXM2LnRlbXBvcHRpb25zLnB1c2gobCk7CiAgICAgICAgICBpZiAobC5jaGlsZHJlbikgewogICAgICAgICAgICBfdGhpczYuYWRkU2VsZWN0TGlzdChsLmNoaWxkcmVuKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KfTs="},null]}