{"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\\EipHotSubDialog.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\eipControl\\EipHotSubDialog.vue","mtime":1705040076727},{"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:aW1wb3J0IF9yZWFkT25seUVycm9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2xqemMtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcmVhZE9ubHlFcnJvci5qcyI7CmltcG9ydCBfdHlwZW9mIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2xqemMtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIjsKaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9sanpjLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICJ2dWV4IjsKaW1wb3J0IHV0aWxzIGZyb20gIkAvdXRpbHMuanMiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiaHQtaG90LXN1YkRpYWxvZyIsCiAgcHJvcHM6IFsidmFsaWRhdGUiLCAidmFsdWUiLCAiYnRuTmFtZSIsICJhdHRlciIsICJzaW5nbGUiLCAiY3VzdGRpYWxvZyJdLAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBjdXN0b21EaWFsb2dTaG93TGlzdDogZmFsc2UsCiAgICAgIGN1c3RvbURpYWxvZ1Nob3dUcmVlOiBmYWxzZSwKICAgICAgc2VsZWN0T3JnUHJvcHM6IHsKICAgICAgICBsYWJlbDogImJ0bk5hbWUiCiAgICAgIH0sCiAgICAgIHN0eWxlOiAiIiwKICAgICAgLy/lr7nor53moYblrr3pq5gKICAgICAgc2VsZWN0T3JnczogbnVsbCwKICAgICAgaW5wdXRTdWZmaXhIZWlnaHQ6IDMwLAogICAgICBjb25maWc6IG51bGwsCiAgICAgIHVwZGF0aW5nOiBmYWxzZSwKICAgICAgZGlzcGxheWZpZWxkOiBbXSwKICAgICAgLy/mmL7npLrlrZfmrrUKICAgICAgY3VzdG9tRGlhbG9nOiB7fSwKICAgICAgLy8KICAgICAgY29tbWVudDogIiIsCiAgICAgIHF1ZXJ5UGFyYW06ICIiLAogICAgICBwcm9wczE6IFtdLAogICAgICBzaG93RGF0YTogW10sCiAgICAgIGNoZWNrQm94RGF0YUFsbDogW10sCiAgICAgIC8v6YCJ5Lit5a+56LGh55qE6ZuG5ZCICiAgICAgIGRlZmF1bHRQcm9wczogewogICAgICAgIGNoaWxkcmVuOiAiY2hpbGRyZW5zIiwKICAgICAgICBsYWJlbDogImxhYmVsIgogICAgICB9LAogICAgICBwcm9wc0RhdGE6IFtdLAogICAgICBxdWVyeXNTaG93OiBmYWxzZSwKICAgICAgLy/mmK/lkKbmmL7npLrmkJzntKLmoYYKICAgICAgdW5kZWZpbmVkYTogIiIsCiAgICAgIG9wTWFwOiB7CiAgICAgICAgJ0VRJzogJ0VRVUFMJywKICAgICAgICAnR0UnOiAnR1JFQVRfRVFVQUwnLAogICAgICAgICdHVCc6ICdHUkVBVCcsCiAgICAgICAgJ0xUJzogJ0xFU1MnLAogICAgICAgICdMRSc6ICdMRVNTX0VRVUFMJywKICAgICAgICAnSU4nOiAnSU4nLAogICAgICAgICdMSyc6ICdMSUtFJywKICAgICAgICAnTEZLJzogJ0xFRlRfTElLRScsCiAgICAgICAgJ1JISyc6ICdSSUdIVF9MSUtFJwogICAgICB9CiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IG1hcFN0YXRlKHsKICAgIHBhZ2luYXRpb246IGZ1bmN0aW9uIHBhZ2luYXRpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy5wYWdpbmF0aW9uOwogICAgfSwKICAgIHRvdGFsOiBmdW5jdGlvbiB0b3RhbChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUuZGlhbG9nLnRvdGFsOwogICAgfSwKICAgIGRpYWxvZ0RhdGE6IGZ1bmN0aW9uIGRpYWxvZ0RhdGEoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy5yb3dzOwogICAgfSwKICAgIGlucHV0VmFsOiBmdW5jdGlvbiBpbnB1dFZhbCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG5hbWVBcnkgPSB0aGlzLnZhbHVlLnNwbGl0KCIsIik7CiAgICAgICAgaWYgKHRoaXMudmFsdWUuaW5kZXhPZigifHwiKSA+IDApIHsKICAgICAgICAgIG5hbWVBcnkgPSB0aGlzLnZhbHVlLnNwbGl0KCJ8fCIpWzBdLnNwbGl0KCIsIik7CiAgICAgICAgICB0aGlzLnNob3dEYXRhID0gSlNPTi5wYXJzZSh0aGlzLnZhbHVlLnNwbGl0KCJ8fCIpWzFdKTsKICAgICAgICB9CiAgICAgICAgdmFyIGlkQXJ5ID0gbnVsbDsKICAgICAgICB2YXIgYWNjb3VudEFyeSA9IG51bGw7CiAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICAgIG5hbWVBcnkuZm9yRWFjaChmdW5jdGlvbiAobSwgaSkgewogICAgICAgICAgdmFyIG4gPSB7CiAgICAgICAgICAgIHZhbHVlOiBtCiAgICAgICAgICB9OwogICAgICAgICAgcmVzdWx0LnB1c2gobik7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSwKICAgIGlucHV0V3JpdGVhYmxlOiBmdW5jdGlvbiBpbnB1dFdyaXRlYWJsZSgpIHsKICAgICAgcmV0dXJuIHV0aWxzLmdldFdyaXRlYWJsZSh0aGlzLnBlcm1pc3Npb24pOwogICAgfSwKICAgIGlucHV0VmFsaWRhdGU6IGZ1bmN0aW9uIGlucHV0VmFsaWRhdGUoKSB7CiAgICAgIHZhciB2YWxpZGF0ZU9iaiA9IHRoaXMuJHN0b3JlLnN0YXRlLmluZGV4LnZhbGlkYXRlOwogICAgICByZXR1cm4gdXRpbHMuYWRkUmVxdWlyZWRPck5vdCh0aGlzLnBlcm1pc3Npb24sIHRoaXMudmFsaWRhdGUsIHZhbGlkYXRlT2JqLCB0aGlzKTsKICAgIH0sCiAgICBpbnB1dE5hbWU6IGZ1bmN0aW9uIGlucHV0TmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKTsKICAgIH0sCiAgICAvLyDmmK/lkKbmnInlm57loavorr7nva4KICAgIGJpbmRTZXQ6IGZ1bmN0aW9uIGJpbmRTZXQoKSB7CiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yY29uZmlnID8gdGhpcy5zZWxlY3RvcmNvbmZpZy5iaW5kIDogbnVsbDsKICAgIH0sCiAgICBnZXRQbGFjZWhvbGRlcjogZnVuY3Rpb24gZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLmN1c3RkaWFsb2cubmFtZTsKICAgIH0KICB9KSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge30sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHRoaXMuJHZhbGlkYXRvciA9IHRoaXMuJHJvb3QuJHZhbGlkYXRvcjsKICB9LAogIHdhdGNoOiB7CiAgICBjdXN0b21EaWFsb2dTaG93VHJlZTogZnVuY3Rpb24gY3VzdG9tRGlhbG9nU2hvd1RyZWUobmV3VmFsKSB7CiAgICAgIGlmIChuZXdWYWwpIHsKICAgICAgICB0aGlzLmNoZWNrQm94RGF0YUFsbCA9IFtdOwogICAgICAgIGlmICh0aGlzLmlucHV0VmFsICYmIHRoaXMuaW5wdXRWYWwuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmlucHV0VmFsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gW107CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY3VzdG9tRGlhbG9nU2hvd0xpc3Q6IGZ1bmN0aW9uIGN1c3RvbURpYWxvZ1Nob3dMaXN0KG5ld1ZhbCkgewogICAgICBpZiAobmV3VmFsKSB7CiAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwgPSBbXTsKICAgICAgICBpZiAodGhpcy5pbnB1dFZhbCAmJiB0aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5KSB7CiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5pbnB1dFZhbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgbWV0aG9kczogewogICAgaGFuZGxlU2l6ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2l6ZUNoYW5nZShzaXplKSB7CiAgICAgIC8v5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0UGFnaW5hdGlvblNpemUiLCBzaXplKTsKICAgICAgdGhpcy5zZWFyY2goKTsKICAgIH0sCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlKGN1cnJlbnRQYWdlKSB7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIGlmICh0aGlzLnNlbGVjdE9yZ3MgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0T3Jncy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgdmFyIHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uY2hlY2tCb3hEYXRhQWxsLCByb3cpOwogICAgICAgICAgaWYgKHJlcyA9PSAtMSkgewogICAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHRoaXNfLnNlbGVjdE9yZ3MgPSB0aGlzXy5jaGVja0JveERhdGFBbGw7CiAgICAgIC8v54K55Ye756ys5Yeg6aG1CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0UGFnaW5hdGlvblBhZ2VOdW0iLCBjdXJyZW50UGFnZSk7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgY2hlY2tMaXN0OiBmdW5jdGlvbiBjaGVja0xpc3QoKSB7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzXy5zZWxlY3RPcmdzICE9IHVuZGVmaW5lZCAmJiB0aGlzXy5zZWxlY3RPcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmICh0aGlzXy5zZWxlY3RPcmdzID09IHVuZGVmaW5lZCB8fCB0aGlzXy5zZWxlY3RPcmdzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MgPSB0aGlzXy5jaGVja0JveERhdGFBbGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpc18uc2VsZWN0T3JncyAhPSB1bmRlZmluZWQgJiYgdGhpc18uc2VsZWN0T3Jncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uZGlhbG9nRGF0YSwgcm93KTsKICAgICAgICAgICAgICBpZiAocmVzICE9IC0xKSB7CiAgICAgICAgICAgICAgICB0aGlzXy4kcmVmcy5vcmdUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24odGhpc18uZGlhbG9nRGF0YVtyZXNdLCB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodGhpc18uc2hvd0RhdGEgIT0gdW5kZWZpbmVkICYmIHRoaXNfLnNob3dEYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdGhpc18uc2hvd0RhdGEuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7CiAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uZGlhbG9nRGF0YSwgcm93KTsKICAgICAgICAgICAgICBpZiAocmVzICE9IC0xKSB7CiAgICAgICAgICAgICAgICB0aGlzXy4kcmVmcy5vcmdUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24odGhpc18uZGlhbG9nRGF0YVtyZXNdLCB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwgMjUwKTsKICAgIH0sCiAgICBzaG93RGlhbG9nOiBmdW5jdGlvbiBzaG93RGlhbG9nKGl0ZW0pIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHZhciBzZWxlY3ROdW0gPSAtMTsKICAgICAgdmFyIHN1YlJlbGF0aW9uT2JqID0gJChpdGVtLnRhcmdldCkucGFyZW50cygiW3N1Yi1yZWxhdGlvbl0iKTsKICAgICAgaWYgKHN1YlJlbGF0aW9uT2JqLmxlbmd0aCA+IDAgJiYgJChzdWJSZWxhdGlvbk9ialswXSkuYXR0cigic3ViLXJlbGF0aW9uIikgPT0gIm9uZXRvb25lIikgewogICAgICAgIHNlbGVjdE51bSA9IDE7CiAgICAgIH0KICAgICAgdmFyIGFsaWFzID0gdGhpcy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cuYWxpYXM7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0QnlBbGlhcyIsIGFsaWFzKS50aGVuKGZ1bmN0aW9uIChjdXN0b21EaWFsb2cpIHsKICAgICAgICBpZiAoIWN1c3RvbURpYWxvZyB8fCAhY3VzdG9tRGlhbG9nLmFsaWFzKSB7CiAgICAgICAgICBNZXNzYWdlLmVycm9yKCLlr7nor53moYbliKvlkI3jgJAiICsgYWxpYXMgKyAi44CR5LiN5a2Y5Zyo77yBIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPSBzZWxlY3ROdW07CiAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgdmFyIHBhcmFtID0ge307CiAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChlbGUpIHsKICAgICAgICAgIGlmIChlbGUuZGVmYXVsdFR5cGUgPT0gIjQiKSB7CiAgICAgICAgICAgIHBhcmFtW2VsZS5maWVsZF0gPSBlbGUuY29tbWVudDsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBfdGhpczIuc3R5bGUgPSAiaGVpZ2h0OiIgKyBjdXN0b21EaWFsb2cuaGVpZ2h0ICsgInB4IjsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyYW0pID09ICJ7fSIpIHsKICAgICAgICAgIC8v5rKh5pyJ5Yqo5oCB5Lyg5YWl55qE5a2X5q61CiAgICAgICAgICBpZiAoY3VzdG9tRGlhbG9nLnN0eWxlID09IDApIHsKICAgICAgICAgICAgX3RoaXMyLmN1c3RvbURpYWxvZ1Nob3coewogICAgICAgICAgICAgIGFsaWFzOiBhbGlhcywKICAgICAgICAgICAgICBjdXN0b21EaWFsb2c6IGN1c3RvbURpYWxvZwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF90aGlzMi5jdXN0b21EaWFsb2dUcmVlU2hvdyh7CiAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLAogICAgICAgICAgICAgIGN1c3RvbURpYWxvZzogY3VzdG9tRGlhbG9nCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7fQogICAgICB9KTsKICAgIH0sCiAgICBpbmRleEFycmF5OiBmdW5jdGlvbiBpbmRleEFycmF5KGFycmF5LCBpdGVtKSB7CiAgICAgIHZhciBpZCA9ICIiOwogICAgICBpZiAoX3R5cGVvZihpdGVtKSA9PSAib2JqZWN0IikgewogICAgICAgIGlkID0gaXRlbS5pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZCA9IGl0ZW07CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChhcnJheVtpXS5pZCA9PSBpZCkgewogICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0sCiAgICBvblRhYmxlU2VsZWN0OiBmdW5jdGlvbiBvblRhYmxlU2VsZWN0KHJvd3MsIHJvdykgewogICAgICB2YXIgc2VsZWN0ZWQgPSByb3dzLmxlbmd0aCAmJiByb3dzLmluZGV4T2Yocm93KSAhPT0gLTE7CiAgICAgIGlmICghc2VsZWN0ZWQpIHsKICAgICAgICB2YXIgcmVzID0gdGhpcy5pbmRleEFycmF5KHRoaXMuY2hlY2tCb3hEYXRhQWxsLCByb3cpOwogICAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsLnNwbGljZShyZXMsIDEpOwogICAgICAgIGlmICh0aGlzLmNoZWNrQm94RGF0YUFsbC5sZW5ndGggPT0gMCkgewogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gW107CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgb3JnUm93Q2xpY2s6IGZ1bmN0aW9uIG9yZ1Jvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgJChldmVudC5jdXJyZW50VGFyZ2V0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdKS50cmlnZ2VyKCJjbGljayIpOwogICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtyb3ddOwogICAgICB9CiAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdyk7CiAgICB9LAogICAgb3JnVGFibGVTZWxlY3Rpb246IGZ1bmN0aW9uIG9yZ1RhYmxlU2VsZWN0aW9uKHNlbGVjdGlvbikgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtICE9IDEgJiYgc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gc2VsZWN0aW9uOwogICAgICB9CiAgICB9LAogICAgZGlhbG9nQ29uZmlybTogZnVuY3Rpb24gZGlhbG9nQ29uZmlybSgpIHsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gZmFsc2U7CiAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOwogICAgICB0aGlzLnN5bmNJbnB1dFZhbHVlKCk7CiAgICB9LAogICAgLy/ph43nva4KICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgdGhpcy5xdWVyeVBhcmFtID0gIiI7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgc2VhcmNoOiBmdW5jdGlvbiBzZWFyY2goKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICB2YXIgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2CiAgICAgIHZhciBxdWVyeUZpbHRlciA9IHt9OwogICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbgogICAgICB9OwogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICBpZiAodGhpcy5xdWVyeVBhcmFtICE9ICIiKSB7CiAgICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7CiAgICAgICAgY29uZGl0aW9uZmllbGQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uZGVmYXVsdFR5cGUgPT0gJzEnKSB7CiAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICBwcm9wZXJ0eTogaXRlbS5maWVsZCwKICAgICAgICAgICAgICB2YWx1ZTogX3RoaXMzLnF1ZXJ5UGFyYW0sCiAgICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgICBvcGVyYXRpb246IF90aGlzLm9wTWFwW2l0ZW0uY29uZGl0aW9uXSwKICAgICAgICAgICAgICByZWxhdGlvbjogIk9SIgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvL+WkhOeQhuWPguaVsOS8oOWFpQogICAgICB2YXIgY29uZGl0aW9ucyA9IHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLmNvbmRpdGlvbnM7CiAgICAgIHZhciBmb3JtSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZSh0aGlzKTsKICAgICAgaWYgKGNvbmRpdGlvbnMgJiYgY29uZGl0aW9ucy5sZW5ndGggPiAwICYmIGZvcm1JbnN0ICYmIGZvcm1JbnN0WydkYXRhJ10pIHsKICAgICAgICB2YXIgY3VyRGF0YSA9IGZvcm1JbnN0WydkYXRhJ107CiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5kZWZhdWx0VHlwZSA9PSAiMyIgJiYgaXRlbS5iaW5kKSB7CiAgICAgICAgICAgIHZhciBvYmogPSB7fTsKICAgICAgICAgICAgaXRlbS5maWVsZCA9IGl0ZW0uZmllbGQ7CiAgICAgICAgICAgIHZhciBiaW5kQXJyYXkgPSBpdGVtLmJpbmQuc3BsaXQoJy4nKTsKICAgICAgICAgICAgaWYgKGJpbmRBcnJheS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IGN1ckRhdGFbYmluZEFycmF5WzFdXVtiaW5kQXJyYXlbMl1dOwogICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgIHByb3BlcnR5OiBpdGVtLmZpZWxkLAogICAgICAgICAgICAgICAgdmFsdWU6IHRhcmdldFZhbHVlLAogICAgICAgICAgICAgICAgZ3JvdXA6ICJ0eXBlMyIsCiAgICAgICAgICAgICAgICBvcGVyYXRpb246IF90aGlzLm9wTWFwW2l0ZW0uY29uZGl0aW9uXSwKICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHF1ZXJ5cy5sZW5ndGggPiAwKSB7CiAgICAgICAgcXVlcnlGaWx0ZXIgPSB7CiAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLAogICAgICAgICAgcXVlcnlzOiBxdWVyeXMKICAgICAgICB9OwogICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnBhZ2VCZWFuID0gcXVlcnlGaWx0ZXI7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRsaXN0SnNvbiIsIHRoaXMuY3VzdG9tRGlhbG9nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5wYWdlQmVhbiA9IHBhZ2VCZWFuOwogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0bGlzdEpzb24iLCB0aGlzLmN1c3RvbURpYWxvZyk7CiAgICAgIH0KICAgICAgdGhpcy5jaGVja0xpc3QoKTsKICAgIH0sCiAgICBzZWFyY2hUcmVlOiBmdW5jdGlvbiBzZWFyY2hUcmVlKHJlcXVlc3RQYXJhbXMpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIGlmICh0aGlzLnByb3BzMS5sZW5ndGggPCAxKSB7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRUcmVlRGF0YSIsIHJlcXVlc3RQYXJhbXMpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgaWYgKF90aGlzNC5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkICYmIF90aGlzNC5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpIHsKICAgICAgICAgICAgdmFyIGRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UoX3RoaXM0LmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgICAgICBfdGhpczQuZGVmYXVsdFByb3BzLmxhYmVsID0gZGlzcGxheWZpZWxkLmRpc3BsYXlOYW1lOwogICAgICAgICAgICB2YXIgcmVzdWx0ZmllbGQgPSBKU09OLnBhcnNlKF90aGlzNC5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOwogICAgICAgICAgICBfdGhpczQucHJvcHMxID0gX3RoaXM0LnRvVHJlZURhdGEocmVzLCBkaXNwbGF5ZmllbGQuaWQsIGRpc3BsYXlmaWVsZC5waWQsIGRpc3BsYXlmaWVsZC5kaXNwbGF5TmFtZSwgZGlzcGxheWZpZWxkLnB2YWx1ZSA/IGRpc3BsYXlmaWVsZC5wdmFsdWUgOiAiMCIsIHJlc3VsdGZpZWxkKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8vIOWQjOatpemAieaLqee7k+aenAogICAgc3luY0lucHV0VmFsdWU6IGZ1bmN0aW9uIHN5bmNJbnB1dFZhbHVlKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdmFyIHJldHVyblN0ciA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOwogICAgICAvL+aLv+WIsOi/lOWbnueahOWtl+autQogICAgICB2YXIgZmllbGQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsKICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsKICAgICAgdmFyIHN0ciA9IFtdOwogICAgICB2YXIgaWRzID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0dXJuU3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZmllbGRbaV0gPSB0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiID8gcmV0dXJuU3RyW2ldLmZpZWxkLnRvVXBwZXJDYXNlKCkgOiByZXR1cm5TdHJbaV0uZmllbGQ7CiAgICAgICAgY29tbWVudFtpXSA9IHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyByZXR1cm5TdHJbaV0uY29tbWVudC50b1VwcGVyQ2FzZSgpIDogcmV0dXJuU3RyW2ldLmNvbW1lbnQ7CiAgICAgIH0KICAgICAgdmFyIHRoaXNfID0gdGhpczsKICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgIGlmICh0aGlzXy5jaGVja0JveERhdGFBbGwgfHwgdGhpc18uY2hlY2tCb3hEYXRhQWxsLmxlbmd0aCA8IDEpIHsKICAgICAgICAgIHRoaXNfLmNoZWNrQm94RGF0YUFsbC5wdXNoKHJvdyk7CiAgICAgICAgfSBlbHNlIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzXy5pbmRleEFycmF5KS5pbmRleE9mKEpTT04uc3RyaW5naWZ5KHJvdykpID09IC0xKSB7CiAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHZhciBzID0gdGhpcy5jaGVja0JveERhdGFBbGw7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB2YXIgdGVtcCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHZhID0gc1swXVtmaWVsZFtpXV07CiAgICAgICAgICB0eXBlb2YgdmEgPT0gJ3VuZGVmaW5lZCcgPyAnJyA6IHZhLCBfcmVhZE9ubHlFcnJvcigidmEiKTsKICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgdmEgKyAnIiwnOwogICAgICAgIH0KICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7CiAgICAgICAgfQogICAgICAgIHN0ci5wdXNoKHV0aWxzLnBhcnNlVG9Kc29uKHRlbXApKTsKICAgICAgICBpZHMucHVzaChzWzBdLmlkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciB0ZW1wID0gIiI7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbW1lbnQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdmFyIF92YSA9IHNbaV1bZmllbGRbal1dOwogICAgICAgICAgICB0eXBlb2YgX3ZhID09ICd1bmRlZmluZWQnID8gJycgOiBfdmEsIF9yZWFkT25seUVycm9yKCJ2YSIpOwogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbal0gKyAnIjoiJyArIF92YSArICciLCc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICAgIH0KICAgICAgICAgIHN0ci5wdXNoKHV0aWxzLnBhcnNlVG9Kc29uKHRlbXApKTsKICAgICAgICAgIGlkcy5wdXNoKHNbaV0uaWQpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgcmV0dXJuRGF0YSA9IHN0cjsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIGZvcm1JbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOwogICAgICB2YXIgaG90VGFibGVUYXJnZXQgPSAnJzsKICAgICAgcmV0dXJuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICB2YXIgdGFyZ2V0QXJyYXkgPSBudWxsOwogICAgICAgIHZhciBzdWJMaW5lRGF0YSA9IHt9OwogICAgICAgIF90aGlzNS5jdXN0ZGlhbG9nLmN1c3REaWFsb2cubWFwcGluZ0NvbmYuZm9yRWFjaChmdW5jdGlvbiAoY29uKSB7CiAgICAgICAgICBpZiAoY29uLnRhcmdldFswXSkgewogICAgICAgICAgICBob3RUYWJsZVRhcmdldCA9IGNvbi50YXJnZXRbMF07CiAgICAgICAgICAgIHRhcmdldEFycmF5ID0gY29uLnRhcmdldFswXS5zcGxpdCgiLiIpOwogICAgICAgICAgICB2YXIgZnJvbSA9ICIiOwogICAgICAgICAgICBpZiAoX3RoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAicmVzdGZ1bCIpIHsKICAgICAgICAgICAgICBmcm9tID0gY29uLmZyb207CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZnJvbSA9IGNvbi5mcm9tLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3ViTGluZURhdGFbdGFyZ2V0QXJyYXlbdGFyZ2V0QXJyYXkubGVuZ3RoIC0gMV1dID0gcm93W2Zyb21dOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh0YXJnZXRBcnJheSkgewogICAgICAgICAgdmFyIHN1YkJvID0gZm9ybUluc3RbImRhdGEiXVt0YXJnZXRBcnJheVswXV1bdGFyZ2V0QXJyYXlbMV1dOwogICAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT0gMSAmJiBzdWJCby5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHN1YkJvLnNoaWZ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICAvL+WtkOihqOWbnuWhqyDoh6rliqjmiorkuYvliY3mt7vliqDnmoTlrZfmrrXkuJTkuLrnqbrnmoTkuZ/lm57loasKICAgICAgICAgIC8vIGlmIChmb3JtSW5zdFsiZGF0YSJdW3RhcmdldEFycmF5WzBdXVt0YXJnZXRBcnJheVsxXV0pIHsKICAgICAgICAgIC8vICAgZm9ybUluc3RbImRhdGEiXVt0YXJnZXRBcnJheVswXV1bdGFyZ2V0QXJyYXlbMV1dLmZvckVhY2gob2JqID0+IHsKICAgICAgICAgIC8vICAgICBmb3IgKGxldCBpdGVtIGluIG9iaikgewogICAgICAgICAgLy8gICAgICAgaWYgKCFvYmpbaXRlbV0pIHsKICAgICAgICAgIC8vICAgICAgICAgZm9yIChsZXQgc3ViRGF0YSBpbiBzdWJMaW5lRGF0YSkgewogICAgICAgICAgLy8gICAgICAgICAgIG9ialtpdGVtXSA9IHN1YkxpbmVEYXRhW2l0ZW1dOwogICAgICAgICAgLy8gICAgICAgICB9CiAgICAgICAgICAvLyAgICAgICB9CiAgICAgICAgICAvLyAgICAgfQogICAgICAgICAgLy8gICB9KTsKICAgICAgICAgIC8vIH0KICAgICAgICAgIHN1YkJvLnB1c2goc3ViTGluZURhdGEpOwogICAgICAgICAgLy/miorlrZDooajlm57loavlgLzlrZjlnKjmjqfku7bnmoTniLbnu4Tku7bkuK0KICAgICAgICAgIGZvcm1JbnN0LnN1YkJhY2tmaWxsLnNldCgiZGF0YS4iICsgdGFyZ2V0QXJyYXlbMF0gKyAiLiIgKyB0YXJnZXRBcnJheVsxXSwgc3ViTGluZURhdGEpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChob3RUYWJsZVRhcmdldCkgewogICAgICAgIGZvcm1JbnN0LmhvdFRhYmxlRmlsbGJhY2sgPSBob3RUYWJsZVRhcmdldCArICdfdGltZXN0YW1wXycgKyBEYXRlLnBhcnNlKG5ldyBEYXRlKCkpOwogICAgICB9CiAgICB9LAogICAgZGlhbG9nQ2FuY2VsOiBmdW5jdGlvbiBkaWFsb2dDYW5jZWwoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuc2VsZWN0T3JncykgewogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoIV90aGlzNi5pbnB1dFZhbCB8fCBfdGhpczYuaW5wdXRWYWwuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHsKICAgICAgICAgICAgX3RoaXM2LiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfdGhpczYuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIHRoaXMuc2VsZWN0T3JncyA9IHRoaXMuaW5wdXRWYWwgPyB0aGlzLmlucHV0VmFsIDogbnVsbDsKICAgIH0sCiAgICBkaWFsb2dUcmVlQ29uZmlybTogZnVuY3Rpb24gZGlhbG9nVHJlZUNvbmZpcm0oKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7CiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsKICAgICAgdmFyIGZpZWxkID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBjb21tZW50ID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7CiAgICAgIHZhciBzdHIgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXR1cm5TdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICBmaWVsZFtpXSA9IHJldHVyblN0cltpXS5maWVsZDsKICAgICAgICBjb21tZW50W2ldID0gcmV0dXJuU3RyW2ldLmNvbW1lbnQ7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgewogICAgICAgIHZhciBub2RlcyA9IHRoaXMucHJvcHNEYXRhWzBdOwogICAgICAgIHZhciB0ZW1wID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgfQogICAgICAgIGlmICh0ZW1wICE9ICIiKSB7CiAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICB9CiAgICAgICAgc3RyLnB1c2godXRpbHMucGFyc2VUb0pzb24odGVtcCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBub2RlcyA9IHRoaXMucHJvcHNEYXRhOwogICAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGspIHsKICAgICAgICAgIHZhciB0ZW1wID0gIiI7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1tmaWVsZFtpXV0gKyAnIiwnOwogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2tdW2ZpZWxkW2ldXSArICciLCc7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgewogICAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsKICAgICAgICAgIH0KICAgICAgICAgIHN0ci5wdXNoKHV0aWxzLnBhcnNlVG9Kc29uKHRlbXApKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICB2YXIgcmV0dXJuRGF0YSA9IHN0cjsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIGZvcm1JbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOwogICAgICByZXR1cm5EYXRhLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewogICAgICAgIHZhciB0YXJnZXRBcnJheSA9IG51bGw7CiAgICAgICAgdmFyIHN1YkxpbmVEYXRhID0ge307CiAgICAgICAgX3RoaXM3LmN1c3RkaWFsb2cuY3VzdERpYWxvZy5tYXBwaW5nQ29uZi5mb3JFYWNoKGZ1bmN0aW9uIChjb24pIHsKICAgICAgICAgIHRhcmdldEFycmF5ID0gY29uLnRhcmdldFswXS5zcGxpdCgiLiIpOwogICAgICAgICAgdmFyIGZyb20gPSAiIjsKICAgICAgICAgIGlmIChfdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJyZXN0ZnVsIikgewogICAgICAgICAgICBmcm9tID0gY29uLmZyb207CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmcm9tID0gY29uLmZyb20udG9VcHBlckNhc2UoKTsKICAgICAgICAgIH0KICAgICAgICAgIHN1YkxpbmVEYXRhW3RhcmdldEFycmF5W3RhcmdldEFycmF5Lmxlbmd0aCAtIDFdXSA9IHJvd1tmcm9tXTsKICAgICAgICB9KTsKICAgICAgICBpZiAodGFyZ2V0QXJyYXkpIHsKICAgICAgICAgIHZhciBzdWJCbyA9IGZvcm1JbnN0WyJkYXRhIl1bdGFyZ2V0QXJyYXlbMF1dW3RhcmdldEFycmF5WzFdXTsKICAgICAgICAgIGlmIChfdGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09IDEgJiYgc3ViQm8ubGVuZ3RoID4gMCkgewogICAgICAgICAgICBzdWJCby5zaGlmdCgpOwogICAgICAgICAgfQogICAgICAgICAgc3ViQm8ucHVzaChzdWJMaW5lRGF0YSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgLy90aGlzLiRlbWl0KCJpbnB1dCIsIEpTT04uc3RyaW5naWZ5KHN0cikpOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dUcmVlID0gZmFsc2U7CiAgICB9LAogICAgZGlhbG9nQ2FuY2VsVHJlZTogZnVuY3Rpb24gZGlhbG9nQ2FuY2VsVHJlZSgpIHsKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOwogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dUcmVlID0gZmFsc2U7CiAgICB9LAogICAgZ2V0Q2hlY2tlZDogZnVuY3Rpb24gZ2V0Q2hlY2tlZChkYXRhLCBjaGVja2VkLCBpbmRldGVybWluYXRlKSB7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB0aGlzLnByb3BzRGF0YSA9IFtdOwogICAgICAgIHRoaXMucHJvcHNEYXRhLnB1c2goZGF0YSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSB0aGlzLiRyZWZzLnRyZWUuZ2V0Q2hlY2tlZE5vZGVzKCk7CiAgICAgIH0KICAgIH0sCiAgICB0cmVlQ2xpY2s6IGZ1bmN0aW9uIHRyZWVDbGljayhkYXRhLCBuLCBpKSB7CiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsKICAgICAgICB0aGlzLnByb3BzRGF0YSA9IFtdOwogICAgICAgIHRoaXMucHJvcHNEYXRhLnB1c2goZGF0YSk7CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckFsbFNlbGVjdE9yZ3M6IGZ1bmN0aW9uIGNsZWFyQWxsU2VsZWN0T3JncygpIHsKICAgICAgdGhpcy5zZWxlY3RPcmdzID0gbnVsbDsKICAgICAgdGhpcy4kcmVmcy5vcmdUYWJsZS5jbGVhclNlbGVjdGlvbigpOwogICAgfSwKICAgIHJlbW92ZVNlbGVjdE9yZ3M6IGZ1bmN0aW9uIHJlbW92ZVNlbGVjdE9yZ3MoKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICB2YXIgYXJ5ID0gdGhpcy4kcmVmcy5zZWxlY3RUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICBhcnkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIF90aGlzOC5zZWxlY3RPcmdzLnJlbW92ZShpdGVtKTsKICAgICAgICBfdGhpczguJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIGZhbHNlKTsKICAgICAgfSk7CiAgICB9LAogICAgcmVtb3ZlU2VsZWN0T3JnOiBmdW5jdGlvbiByZW1vdmVTZWxlY3RPcmcoaXRlbSkgewogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7CiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCAiIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5pbnB1dFZhbC5zcGxpY2UoaXRlbSwgMSk7CiAgICAgICAgdGhpcy5zaG93RGF0YS5zcGxpY2UoaXRlbSwgMSk7CiAgICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7CiAgICAgICAgdmFyIHZhbHVlID0gIiI7CiAgICAgICAgdGhpcy5pbnB1dFZhbC5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgIHZhbHVlICs9IHZhbC52YWx1ZSArICIsIjsKICAgICAgICB9KTsKICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkgewogICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUubGVuZ3RoIC0gMSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSAhPSAiIikgewogICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICJ8fCIgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnNob3dEYXRhKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0sCiAgICBjYWxhY0lucHV0U3VmZml4SGVpZ2h0OiBmdW5jdGlvbiBjYWxhY0lucHV0U3VmZml4SGVpZ2h0KCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCFfdGhpczkuJHJlZnMudGFnU3BhbnMpIHJldHVybjsKICAgICAgICBpZiAoX3RoaXM5LiRyZWZzLnRhZ1NwYW5zLm9mZnNldEhlaWdodCkgewogICAgICAgICAgX3RoaXM5LmlucHV0U3VmZml4SGVpZ2h0ID0gX3RoaXM5LiRyZWZzLnRhZ1NwYW5zLm9mZnNldEhlaWdodCArIDU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzOS5pbnB1dFN1ZmZpeEhlaWdodCA9IDMwOwogICAgICAgIH0KICAgICAgICAvLyDop6blj5Hpqozor4EKICAgICAgICBfdGhpczkuJHZhbGlkYXRvci52YWxpZGF0ZSgpOwogICAgICB9LCAwKTsKICAgIH0sCiAgICBjdXN0b21EaWFsb2dTaG93OiBmdW5jdGlvbiBjdXN0b21EaWFsb2dTaG93KHBhZ2VQYXJhbSkgewogICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSB0cnVlOwogICAgICB0aGlzLmN1c3RvbURpYWxvZyA9IHBhZ2VQYXJhbS5jdXN0b21EaWFsb2c7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnF1ZXJ5VXJsID0gdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIiA/ICIke2Zvcm19L2Zvcm0vY3VzdG9tRGlhbG9nL3YxL2dldExpc3REYXRhP2FsaWFzPSIgKyB0aGlzLmN1c3RvbURpYWxvZy5hbGlhcyArICImbWFwUGFyYW09IiArICh0aGlzLmN1c3RvbURpYWxvZy5tYXBQYXJhbSA/IHRoaXMuY3VzdG9tRGlhbG9nLm1hcFBhcmFtIDogIiIpIDogdGhpcy5jdXN0b21EaWFsb2cudXJsOwogICAgICB2YXIgY29uZGl0aW9uZmllbGQgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsKICAgICAgaWYgKCF0aGlzLmNvbW1lbnQgJiYgY29uZGl0aW9uZmllbGQubGVuZ3RoID4gMCkgewogICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtLmNvbnRyb2xsZXJUeXBlID09IDEgJiYgaXRlbS5kYlR5cGUgPT0gInZhcmNoYXIiKSB7CiAgICAgICAgICAgIF90aGlzMTAuY29tbWVudCArPSBpdGVtLmNvbW1lbnQgKyAiLCI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkgewogICAgICAgICAgdGhpcy5xdWVyeXNTaG93ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuY29tbWVudCA9ICLpgJrov4ciICsgdGhpcy5jb21tZW50LnN1YnN0cmluZygwLCB0aGlzLmNvbW1lbnQubGVuZ3RoIC0gMSkgKyAi5p+l6K+iIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5sZW5ndGggPCAxKSB7CiAgICAgICAgdGhpcy5zZWFyY2goKTsKICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UocGFnZVBhcmFtLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOwogICAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheWZpZWxkW2ldLmZpZWxkID0gdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQudG9VcHBlckNhc2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjdXN0b21EaWFsb2dUcmVlU2hvdzogZnVuY3Rpb24gY3VzdG9tRGlhbG9nVHJlZVNob3cocGFnZVBhcmFtKSB7CiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nID0gcGFnZVBhcmFtLmN1c3RvbURpYWxvZzsKICAgICAgdmFyIGN1c3RvbURpYWxvZyA9IHRoaXMuY3VzdG9tRGlhbG9nOwogICAgICB2YXIgbWFwUGFyYW0gPSAiIjsKICAgICAgaWYgKHBhZ2VQYXJhbS5wYXJhbSAhPSB1bmRlZmluZWQpIHsKICAgICAgICBtYXBQYXJhbSA9IEpTT04uc3RyaW5naWZ5KHBhZ2VQYXJhbS5wYXJhbSk7CiAgICAgICAgbWFwUGFyYW0gPSBtYXBQYXJhbS5zdWJzdHJpbmcoMSwgbWFwUGFyYW0ubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgICAgdmFyIHJlcXVlc3RUeXBlID0gY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIgPyAiR0VUIiA6IGN1c3RvbURpYWxvZy5yZXF1ZXN0VHlwZSA/IGN1c3RvbURpYWxvZy5yZXF1ZXN0VHlwZSA6ICJQT1NUIjsKICAgICAgdmFyIHVybCA9ICIke2Zvcm19L2Zvcm0vY3VzdG9tRGlhbG9nL3YxL2dldFRyZWVEYXRhP2FsaWFzPSIgKyBwYWdlUGFyYW0uYWxpYXMgKyAiJm1hcFBhcmFtPSIgKyBtYXBQYXJhbTsKICAgICAgdmFyIHBhcmFtc09iaiA9IHt9OwogICAgICBpZiAoY3VzdG9tRGlhbG9nLmRzVHlwZSAhPSAiZGF0YVNvdXJjZSIpIHsKICAgICAgICB1cmwgPSBjdXN0b21EaWFsb2cudXJsOwogICAgICAgIHZhciB0ZW1wbGF0ZVBhID0gY3VzdG9tRGlhbG9nLmRhdGFQYXJhbTsKICAgICAgICBpZiAoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKSB7CiAgICAgICAgICB2YXIgY29uZGl0aW9ucyA9IEpTT04ucGFyc2UoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY29uID0gY29uZGl0aW9uc1tpXTsKICAgICAgICAgICAgaWYgKHJlcXVlc3RUeXBlID09ICJQT1NUIikgewogICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxceyIgKyBjb24uZmllbGQgKyAiXFx9IiwgImciKSwgY29uLmRlZmF1bHRWYWx1ZSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBhcmFtc09ialtjb24uZmllbGRdID0gY29uLmRlZmF1bHRWYWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFyIGxqQ2hhciA9IHVybC5pbmRleE9mKCI/IikgPT0gLTEgPyAiPyIgOiAiJiI7CiAgICAgICAgICAgICAgdXJsID0gdXJsICsgbGpDaGFyICsgY29uLmZpZWxkICsgIj0iICsgY29uLmRlZmF1bHRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHRlbXBsYXRlUGEpIHsKICAgICAgICAgICAgcGFyYW1zT2JqID0gSlNPTi5wYXJzZSh0ZW1wbGF0ZVBhKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHJlcXVlc3RQYXJhbXMgPSB7fTsKICAgICAgcmVxdWVzdFBhcmFtcy5yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwogICAgICByZXF1ZXN0UGFyYW1zLnVybCA9IHVybDsKICAgICAgcmVxdWVzdFBhcmFtcy5wYXJhbXNPYmogPSBwYXJhbXNPYmo7CiAgICAgIHRoaXMuc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKTsKICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IHRydWU7CiAgICB9LAogICAgdG9UcmVlRGF0YTogZnVuY3Rpb24gdG9UcmVlRGF0YShkYXRhLCBpZCwgcGlkLCBuYW1lLCBwdmFsdWUsIHJldHVyblN0cikgewogICAgICAvLyDlu7rnq4vkuKrmoJHlvaLnu5PmnoQs6ZyA6KaB5a6a5LmJ5Liq5pyA6aG25bGC55qE54i26IqC54K577yMcHZhbHVl5pivMAogICAgICB2YXIgenRyZWUgPSB0cmFuc2xhdGVEYXRhVG9UcmVlKGRhdGEsIHBpZCwgaWQsIG5hbWUpOwogICAgICBmdW5jdGlvbiB0cmFuc2xhdGVEYXRhVG9UcmVlKGRhdGEsIHBpZCwgaWQsIG5hbWUpIHsKICAgICAgICB2YXIgcGFyZW50cyA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlW2lkXSA9PSB2YWx1ZVtwaWRdIHx8IHZhbHVlW3BpZF0gPT0gbnVsbCB8fCB2YWx1ZVtwaWRdID09IG51bGwgfHwgdmFsdWVbcGlkXSA9PSAwOwogICAgICAgIH0pOwogICAgICAgIHBhcmVudHMubGFiZWwgPSBwYXJlbnRzW25hbWVdOwogICAgICAgIHZhciBjaGlsZHJlbnMgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZVtwaWRdICE9PSAidW5kZWZpbmVkIiAmJiB2YWx1ZVtwaWRdICE9IG51bGwgJiYgdmFsdWVbaWRdICE9IHZhbHVlW3BpZF07CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHRyYW5zbGF0b3IgPSBmdW5jdGlvbiB0cmFuc2xhdG9yKHBhcmVudHMsIGNoaWxkcmVucykgewogICAgICAgICAgcGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHsKICAgICAgICAgICAgY2hpbGRyZW5zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnQsIGluZGV4KSB7CiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbcGlkXSA9PT0gcGFyZW50W2lkXSkgewogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkcmVucykpOwogICAgICAgICAgICAgICAgdGVtcC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgICAgICAgICAgdHJhbnNsYXRvcihbY3VycmVudF0sIHRlbXApOwogICAgICAgICAgICAgICAgY3VycmVudC5sYWJlbCA9IGN1cnJlbnRbbmFtZV07CiAgICAgICAgICAgICAgICB0eXBlb2YgcGFyZW50LmNoaWxkcmVucyAhPT0gInVuZGVmaW5lZCIgPyBwYXJlbnQuY2hpbGRyZW5zLnB1c2goY3VycmVudCkgOiBwYXJlbnQuY2hpbGRyZW5zID0gW2N1cnJlbnRdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIHRyYW5zbGF0b3IocGFyZW50cywgY2hpbGRyZW5zKTsKICAgICAgICByZXR1cm4gcGFyZW50czsKICAgICAgfQogICAgICByZXR1cm4genRyZWU7CiAgICB9CiAgfQp9Ow=="},null]}