ccgf-game-tool 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +5 -2
- package/dist/registry.js +18 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -162,7 +162,10 @@ function querySharedState(forceRegistry = false) {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
const registry = queryRegistry(forceRegistry);
|
|
165
|
-
|
|
165
|
+
// 框架与扩展不是公共模块,虽然它们也装着、也在 KNOWN_PACKAGES 里 —— 两处都要滤掉,
|
|
166
|
+
// 否则使用者的"公共模块"列表里会冒出框架和编辑器扩展。
|
|
167
|
+
const sharedOnly = (e) => (0, registry_1.isSharedModulePackage)(e.name);
|
|
168
|
+
const catalog = (0, shared_1.mergeCatalog)((0, shared_1.mergeCatalog)(local, registry.entries.filter(sharedOnly)), installedShared.filter(sharedOnly));
|
|
166
169
|
// "可更新"要靠远程的最新版本号,而 mergeCatalog 让本地项优先(同名的远程项会被盖掉),
|
|
167
170
|
// 所以这里单独留一份包名 -> 远程最新版本。
|
|
168
171
|
const registryVersions = {};
|
|
@@ -795,4 +798,4 @@ function load() { }
|
|
|
795
798
|
* @zh 卸载扩展时触发的方法
|
|
796
799
|
*/
|
|
797
800
|
function unload() { }
|
|
798
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTI2QkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQWo3QjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQTBDO0FBQzFDLHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUlvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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LHlCQUFhLFFBQVEsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsd0JBQVksQ0FBQyxDQUFDLENBQUM7UUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsd0VBQXdFO0lBRXhFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFlO1FBQ3BDLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBbUI7UUFDekMsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFdBQW1CO1FBQzNDLE9BQU8sZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0osQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLElBQUksS0FBSyxDQUFDO0FBRTFCOzs7R0FHRztBQUNILFNBQWdCLE1BQU0sS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGNvcHlTeW5jLCBleGlzdHNTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCByZW1vdmVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQge1xyXG4gICAgR0FNRVBMQVlfRElSLFxyXG4gICAgTEFZRVJTLFxyXG4gICAgTUFOQUdFUl9ESVIsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVTLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFX0xBQkVMUyxcclxuICAgIFJFR0lTVFJZX0NBQ0hFX01TLFxyXG4gICAgUkVTT1VSQ0VTX0RJUixcclxuICAgIFRQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFZJRVdTX1NVQkRJUixcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGJ1aWxkT3JkZXJQbGFuLCBsaXN0TWFuYWdlcnMsIGxpc3RNb2R1bGVzLCBsaXN0Vmlld3MsIHJ1bkRvY3RvciB9IGZyb20gJy4vZG9jdG9yJztcclxuaW1wb3J0IHtcclxuICAgIElERU5USUZJRVJfUkUsXHJcbiAgICBub3JtYWxpemVNYW5hZ2VyTmFtZSxcclxuICAgIG5vcm1hbGl6ZU1vZHVsZSxcclxuICAgIG5vcm1hbGl6ZVZpZXdOYW1lLFxyXG4gICAgdmlld1ByZWZhYlBhdGgsXHJcbn0gZnJvbSAnLi9uYW1pbmcnO1xyXG5pbXBvcnQge1xyXG4gICAgY29sbGVjdFNuYXBzaG90LFxyXG4gICAgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyLFxyXG4gICAgbGlzdExvY2FsQ2F0YWxvZyxcclxuICAgIHJlYWRJbnN0YWxsZWRQYWNrYWdlLFxyXG4gICAgcmVhZFByb2plY3RNYW5pZmVzdCxcclxufSBmcm9tICcuL3Byb2plY3QnO1xyXG5pbXBvcnQge1xyXG4gICAgS05PV05fUEFDS0FHRVMsXHJcbiAgICBwYXJzZVZpZXdSZXN1bHQsXHJcbiAgICB2aWV3QXJndixcclxufSBmcm9tICcuL3JlZ2lzdHJ5JztcclxuaW1wb3J0IHtcclxuICAgIE5QTV9USU1FT1VUX01TLFxyXG4gICAgYnVpbGROcG1SZXN1bHQsXHJcbiAgICBidWlsZFNoYXJlZFN0YXR1cyxcclxuICAgIGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQsXHJcbiAgICBjb2xsZWN0SW5zdGFsbFNwZWNzLFxyXG4gICAgZGVjb2RlUHJvY2Vzc091dHB1dCxcclxuICAgIGZpbmRQYWNrYWdlUmVmcyxcclxuICAgIGZvcm1hdE5wbUNvbW1hbmQsXHJcbiAgICBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0LFxyXG4gICAgbWVyZ2VDYXRhbG9nLFxyXG4gICAgbnBtU3Bhd25TcGVjLFxyXG4gICAgc3Bhd25TcGVjRm9yLFxyXG4gICAgc3VtbWFyaXplTnBtRmFpbHVyZSxcclxufSBmcm9tICcuL3NoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgICBidWlsZE1hbmFnZXJTY3JpcHQsXHJcbiAgICBidWlsZEV2ZW50c1NjcmlwdCxcclxuICAgIGJ1aWxkTW9kZWxTY3JpcHQsXHJcbiAgICBidWlsZE1vZHVsZVNjcmlwdCxcclxuICAgIGJ1aWxkVmlld1ByZWZhYixcclxuICAgIGJ1aWxkVmlld1NjcmlwdCxcclxuICAgIGlzUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBURnJhbWV3b3JrSW1wb3J0LH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xyXG5pbXBvcnQgeyBJRmluZGluZywgSU5wbVJ1blJlc3VsdCwgSUluc3RhbGxlZFBhY2thZ2VWaWV3LCBJUHJvamVjdFNuYXBzaG90LCBJU2hhcmVkQ2F0YWxvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWh+ahiCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICog5omp5bGV6Ieq5bim55qE5Lit5paH5paH5qGI6KGo44CCXHJcbiAqIOWug+aXouaYr+OAjGtleSDlhajpm4bjgI3nmoTmnaXmupDvvIzkuZ/mmK/nvJbovpHlmaggaTE4biDmi7/kuI3liLDml7bnmoTlhZzlupXjgIJcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbmNvbnN0IFpIX1NUUklOR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSByZXF1aXJlKCcuLi9pMThuL3poLmpzJyk7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWwj+W3peWFtyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKiog5bel56iL5qC555uu5b2VICovXHJcbmZ1bmN0aW9uIHByb2plY3RQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlByb2plY3QucGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi/meS4quW3peeoi+W8leeUqOahhuaetuivpeeUqOWTquenjeWGmeazlTpcclxuICogLSDlvIDlj5Hlt6XkvZzljLoo5LuT5bqT6YeMLOahhuaetua6kOeggeWcqCBhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsg5LiLKSAtPiDnm7jlr7not6/lvoRcclxuICogLSDoo4XmiJAgbnBtIOWMheeahOaWsOW3peeoiyAtPiDljIXlkI0gQGNjZ2YvZnJhbWV3b3JrXHJcbiAqXHJcbiAqIOWIpOaNruaYr1wi5qGG5p625rqQ56CB5Zyo5LiN5ZyoXCIs5LiOIGNvbnN0YW50cy50cyDnmoQgRlJBTUVXT1JLX0RFVl9ESVIg5ZCM5LiA5Liq5YC844CCXHJcbiAqL1xyXG5mdW5jdGlvbiBmcmFtZXdvcmtJbXBvcnRNb2RlKCk6IFRGcmFtZXdvcmtJbXBvcnQge1xyXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0UGF0aCgpLCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpID8gJ3dvcmtzcGFjZScgOiAncGFja2FnZSc7XHJcbn1cclxuXHJcbi8qKiDnm7jlr7not6/lvoQgLT4gZGI6Ly8g6LWE5rqQIHVybCAqL1xyXG5mdW5jdGlvbiBkYlVybChyZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ2RiOi8vJyArIHJlbC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn1cclxuXHJcbi8qKiB1dWlkIC0+IOmihOWItuS9k+mHjOiEmuacrOe7hOS7tueahCBfX3R5cGVfXyAqL1xyXG5mdW5jdGlvbiBjb21wcmVzc1V1aWQodXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuVXRpbHMuVVVJRC5jb21wcmVzc1VVSUQodXVpZCwgZmFsc2UpO1xyXG59XHJcblxyXG4vKiog5Y+W5LiA5Lu95bel56iL5b+r54Wn77yI5L2T5qOA44CB5YiX6KGo6YO95Z+65LqO5a6D77yM5L+d6K+B6Z2i5p2/55yL5Yiw55qE5ZKM5L2T5qOA55yL5Yiw55qE5piv5ZCM5LiA5Lu95pWw5o2u77yJICovXHJcbmZ1bmN0aW9uIHNuYXBzaG90KCk6IElQcm9qZWN0U25hcHNob3Qge1xyXG4gICAgcmV0dXJuIGNvbGxlY3RTbmFwc2hvdChwcm9qZWN0UGF0aCgpLCBjb21wcmVzc1V1aWQpO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIHJlZ2lzdHJ5IOaQnOe0oue7k+aenOeahOe8k+WtmOOAglxyXG4gKlxyXG4gKiDkuIDmrKHmkJzntKLlrp7mtYsgMX40IOenkiDigJTigJQg6ICM6Z2i5p2/5YiH6aG144CB6KOF5a6M5Yi35paw6YO95Lya6LCD55So5p+l6K+i77yM5LiN6IO95q+P5qyh6YO95Y675pCc44CCXHJcbiAqIOaYvuW8j+eCueOAjOWIt+aWsOOAjeaXtueUqCBgZm9yY2VgIOe7lei/h+Wug+OAglxyXG4gKi9cclxubGV0IHJlZ2lzdHJ5Q2FjaGU6IHsgYXQ6IG51bWJlcjsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogKirlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioqOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKlxyXG4gKiDov5znqIvkv6Hmga/nmoTmnaXmupA6KirpgJDkuKogYG5wbSB2aWV3IDxuYW1lPiAtLWpzb25gIOeyvuehruafpeivoioq44CCXHJcbiAqXHJcbiAqIOabvue7j+eUqCBgbnBtIHNlYXJjaGAgKyDlhbPplK7or40s5bey5bqf5byDIOKAlOKAlCDmkJzntKLlr7kgc2NvcGVkIOWMhShgQGNjZ2YvKmAp5b6I5LiN5Y+v6Z2gLFxyXG4gKiDluLjluLjmkJzkuI3liLAs5LqO5pivXCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIuWSjFwi5pyA5paw54mI5pysXCLpg73kvJrmmK/nqbrnmoQo5a6e5rWL6Lip6L+HKeOAglxyXG4gKiDku6Pku7c65YyF5ZCN6KaB57u05oqk5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4ws5paw5aKe5YyF5pe25Yqg5LiA6KGM44CCXHJcbiAqXHJcbiAqIOS5i+aJgOS7peeUqCBucG0g5ZG95Luk6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTIOivt+axgjpucG0g5Lya6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgXHJcbiAqICjnp4HmnInmupDjgIHplZzlg4/jgIHku6PnkIbnrYnphY3nva7pg73ot5/nnYDotbApLOS4jeeUqOaIkeS7rOmHjeWkjeWunueOsOS4gOmBjeOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlSZWdpc3RyeShmb3JjZTogYm9vbGVhbik6IHsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICBpZiAoIWZvcmNlICYmIHJlZ2lzdHJ5Q2FjaGUgJiYgbm93IC0gcmVnaXN0cnlDYWNoZS5hdCA8IFJFR0lTVFJZX0NBQ0hFX01TKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZS5lcnJvciB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOaWueahiCBCOumAkOS4qioq57K+56Gu5p+l6K+iKios5LiN5YaN55SoIG5wbSBzZWFyY2jjgIJcclxuICAgIC8vIOaQnOe0ouWvuSBzY29wZWQg5YyFKEBjY2dmLyop5b6I5LiN5Y+v6Z2gLOW4uOW4uOaQnOS4jeWIsCDigJTigJQg6YKj5qC3XCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIlxyXG4gICAgLy8g5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahOOAguWQjeWNleWcqCByZWdpc3RyeS50cyDnmoQgS05PV05fUEFDS0FHRVMg6YeM44CCXHJcbiAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBLTk9XTl9QQUNLQUdFUykge1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSAnbnBtIHZpZXcgJyArIG5hbWUgKyAnIC0tanNvbic7XHJcbiAgICAgICAgY29uc3Qgc3Bhd25TcGVjID0gc3Bhd25TcGVjRm9yKFxyXG4gICAgICAgICAgICBbcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICducG0uY21kJyA6ICducG0nLCAuLi52aWV3QXJndihuYW1lKV0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZG91dCA9ICcnO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IElOcG1SdW5SZXN1bHQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IE5QTV9USU1FT1VUX01TLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdGRvdXQgPSBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgICAgIHNwYXduRXJyb3I6IHNwYXduZWQuZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzcGF3bmVkLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgICAgICBzcGF3bkVycm9yOiB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWNleS4quWMheafpeS4jeWIsCjmsqHlj5HluIMgLyDnprvnur8p5LiN6K+l6K6p5pW05Lu95YiX6KGo5aSx6LSlLOWPquiusOS4i+adpVxyXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmFtZSArICc6JyArIChyZXN1bHQuaGludCA/PyAoJ+mAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbnRyeSA9IHBhcnNlVmlld1Jlc3VsdChzdGRvdXQpO1xyXG4gICAgICAgIGlmIChlbnRyeSkgZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICBlbHNlIGZhaWx1cmVzLnB1c2gobmFtZSArICc66L+U5Zue5YaF5a655LiN5piv6aKE5pyf55qEIEpTT04g5b2i54q2Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3IgPSBlbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiBmYWlsdXJlcy5sZW5ndGggPiAwID8gZmFpbHVyZXMuam9pbignOycpIDogbnVsbDtcclxuICAgIHJlZ2lzdHJ5Q2FjaGUgPSB7IGF0OiBub3csIGVudHJpZXMsIGVycm9yIH07XHJcbiAgICByZXR1cm4geyBlbnRyaWVzLCBlcnJvciB9O1xyXG59XHJcblxyXG4vKipcclxuICog57uE6KOF5YWs5YWx5qih5Z2X55qE5a6M5pW054q25oCB44CCXHJcbiAqXHJcbiAqIOS4ieS4quadpea6kOWQiOi1t+adpeaJjeaYr+WujOaVtOWIl+ihqO+8mlxyXG4gKiAxLiDmnKzmoYbmnrYqKuW8gOWPkeW3peS9nOWMuioq6YeM55qEIGBwYWNrYWdlcy9zaGFyZWQvKmDvvIjlj6rmnInmnKzku5PlupPmiY3orqTvvIzop4FcclxuICogICAgYGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcmDvvInigJTigJQg6IO957uZ5Ye6IGBmaWxlOmAg5a6J6KOF6K+05piO56ym77ybXHJcbiAqIDIuIGBub2RlX21vZHVsZXNgIOmHjOW3sue7j+ijheS6hueahO+8iOmdoOWMhea4heWNlemHjOeahOagh+iusOiupOWHuuadpe+8ie+8m1xyXG4gKiAzLiAqKui/nOeoiyByZWdpc3RyeSoq77yI5oyJ5Y+R546w5YWz6ZSu6K+N5pCc57Si77yJ4oCU4oCUIOimhuebllwi6L+Y5rKh6KOF44CB5L2G5Y+v5Lul6KOFXCLnmoTpgqPkupvjgIJcclxuICpcclxuICog5Yi75oSPKirkuI0qKumdoOWMheWQjeWMuemFjeadpeivhuWIq+WFrOWFseaooeWdl++8mnNjb3BlIOi/mOayoeWumu+8iOingSBST0FETUFQIOeahCBTMWHvvInvvIxcclxuICog5o2i5LiqIHNjb3BlIOWwseiupOS4jeWHuuadpeS6huOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlTaGFyZWRTdGF0ZShmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgY29uc3QgbWFuaWZlc3QgPSByZWFkUHJvamVjdE1hbmlmZXN0KHJvb3QpO1xyXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWREaXIgPSBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIocm9vdCk7XHJcbiAgICBjb25zdCBsb2NhbCA9IHNoYXJlZERpciA/IGxpc3RMb2NhbENhdGFsb2coc2hhcmVkRGlyLCByb290KSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbGxlZFNoYXJlZDogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocHJvamVjdERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpZiAocGtnLmluc3RhbGxlZCAmJiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkLnB1c2goY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZChuYW1lLCBwa2cubWFuaWZlc3QsIHBrZy52ZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgIGNvbnN0IGNhdGFsb2cgPSBtZXJnZUNhdGFsb2cobWVyZ2VDYXRhbG9nKGxvY2FsLCByZWdpc3RyeS5lbnRyaWVzKSwgaW5zdGFsbGVkU2hhcmVkKTtcclxuXHJcbiAgICAvLyBcIuWPr+abtOaWsFwi6KaB6Z2g6L+c56iL55qE5pyA5paw54mI5pys5Y+377yM6ICMIG1lcmdlQ2F0YWxvZyDorqnmnKzlnLDpobnkvJjlhYjvvIjlkIzlkI3nmoTov5znqIvpobnkvJrooqvnm5bmjonvvInvvIxcclxuICAgIC8vIOaJgOS7pei/memHjOWNleeLrOeVmeS4gOS7veWMheWQjSAtPiDov5znqIvmnIDmlrDniYjmnKzjgIJcclxuICAgIGNvbnN0IHJlZ2lzdHJ5VmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuZW50cmllcykge1xyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnNbZW50cnkubmFtZV0gPSBlbnRyeS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOimgeafpeWunuaXtueKtuaAgeeahOWMhSA9IOWIl+ihqOmHjOeahCArIOWug+S7rOWjsOaYjueahOS+nei1luOAglxyXG4gICAgLy8g5L6d6LWW5Y+v6IO95LiN5Zyo5YiX6KGo6YeM77yI5pmu6YCaIG5wbSDljIXvvInvvIzkvYblroPoo4XmsqHoo4XlkIzmoLfopoHmmL7npLrlh7rmnaXjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYXRhbG9nKSB7XHJcbiAgICAgICAgd2FudGVkLmFkZChlbnRyeS5uYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBPYmplY3Qua2V5cyhlbnRyeS5kZWNsYXJlZERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgICAgd2FudGVkLmFkZChkZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbGxlZFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBJSW5zdGFsbGVkUGFja2FnZVZpZXc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygd2FudGVkKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZDogcGtnLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGlzU2hhcmVkTW9kdWxlOiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgIGNvbnN0IHNvdXJjZXMgPSB7IC4uLnNuYXAuZ2FtZXBsYXlTb3VyY2VzLCAuLi5zbmFwLm1hbmFnZXJTb3VyY2VzIH07XHJcblxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGNhdGFsb2cubWFwKChlbnRyeSkgPT4gYnVpbGRTaGFyZWRTdGF0dXMoZW50cnksIHtcclxuICAgICAgICBwcm9qZWN0RGVwZW5kZW5jaWVzLFxyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzLFxyXG4gICAgICAgIHJlZmVyZW5jZXM6IHsgW2VudHJ5Lm5hbWVdOiBmaW5kUGFja2FnZVJlZnMoc291cmNlcywgZW50cnkubmFtZSkgfSxcclxuICAgICAgICBjYXRhbG9nLFxyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnMsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtb2R1bGVzLFxyXG4gICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDvvJsqKuWPquacieacrOahhuaetueahOW8gOWPkeS7k+W6k+mHjOaJjemdniBudWxsKirvvIjpnaLlkJHnlKjmiLfnmoTlt6XnqIvph4zmsLjov5zmmK8gbnVsbO+8iSAqL1xyXG4gICAgICAgIGxvY2FsU291cmNlOiBzaGFyZWREaXIsXHJcbiAgICAgICAgLyoqIOW3peeoi+acieWPr+ivu+eahCBwYWNrYWdlLmpzb24g5ZCXICovXHJcbiAgICAgICAgaGFzTWFuaWZlc3Q6IG1hbmlmZXN0ICE9PSBudWxsLFxyXG4gICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvJvkuLogbnVsbCDooajnpLrov5nmrKHmmK/miJDlip/nmoTvvIjmiJbnlKjkuobnvJPlrZjvvIkgKi9cclxuICAgICAgICByZWdpc3RyeUVycm9yOiByZWdpc3RyeS5lcnJvcixcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOWFqOeoiyoq5LiN5oqb5byC5bi4KirvvJrpgIDlh7rnoIHjgIFzdGRvdXTjgIFzdGRlcnLjgIHku6Xlj4ogc3Bhd24g6Ieq6Lqr55qE5aSx6LSl6YO95pS26L+bIElOcG1SdW5SZXN1bHRcclxuICog5Zue5Lyg57uZ6Z2i5p2/IOKAlOKAlCDnlKjmiLfopoHnnIvnmoTmmK8gbnBtIOiHquW3seivtOeahOivne+8jOiAjOS4jeaYr+S4gOWPpei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCLjgIJcclxuICovXHJcbmZ1bmN0aW9uIHJ1bk5wbShhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBzcGVjczogc3RyaW5nW10pOiBJTnBtUnVuUmVzdWx0IHtcclxuICAgIGNvbnN0IHNwYXduU3BlYyA9IG5wbVNwYXduU3BlYyhhY3Rpb24sIHNwZWNzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gMS4gKirkuI3mjIflrpogZW5jb2RpbmcqKu+8muaLv+WIsOWOn+WniyBCdWZmZXIg6Ieq5bex6Kej56CB77yM5ZCm5YiZIGNtZCDnmoQgR0JLIOa2iOaBr+S8muWPmOS5seegge+8m1xyXG4gICAgICAgIC8vIDIuICoqd2luZG93c1ZlcmJhdGltQXJndW1lbnRzIOW/hemhu+adpeiHqiBzcGF3blNwZWMqKu+8muWwkeS6huWug++8jE5vZGUg5Lya5oqK5oiR5Yqg5aW955qEXHJcbiAgICAgICAgLy8gICAg5byV5Y+35YaN6L2s5LmJ5LiA6YGN77yMY21kIOaUtuWIsCBgXFxcIm5wbS5jbWQgaW5zdGFsbCAuLi5cXFwiYO+8jOS6juaYr+aVtOihjOiiq+W9k+aIkOWRveS7pOWQjVxyXG4gICAgICAgIC8vICAgIO+8iOaKpVwiJ25wbS5jbWQgaW5zdGFsbCAuLi4nIOS4jeaYr+WGhemDqOaIluWklumDqOWRveS7pFwi77yMbnBtIOagueacrOayoeiiq+WQr+WKqO+8ieOAglxyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDE2ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogdHlwZW9mIHNwYXduZWQuc3RhdHVzID09PSAnbnVtYmVyJyA/IHNwYXduZWQuc3RhdHVzIDogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KSxcclxuICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDku6Pot5EgbnBtIOijhSAvIOWNuOS4gOS4quWFrOWFseaooeWdl++8jOeEtuWQjuWbnuS4gOS7veWIt+aWsOi/h+eahOeKtuaAgeOAglxyXG4gKlxyXG4gKiDlj6rmjqXlj5cgY2F0YWxvZyDph4zlrZjlnKjnmoTljIXlkI0g4oCU4oCUIOS4jeaKiuaJqeWxleWPmOaIkFwi5Lu75oSPIG5wbSDlkb3ku6TmiafooYzlmahcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghcGFja2FnZU5hbWUgfHwgdHlwZW9mIHBhY2thZ2VOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5YyF5ZCNJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmVmb3JlID0gcXVlcnlTaGFyZWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgZW50cnkgPSBiZWZvcmUubW9kdWxlcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3BhY2thZ2VOYW1lfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCBwYWNrYWdlTmFtZSwgcmVzdWx0KSxcclxuICAgICAgICAvLyDoo4Xlroznq4vliLvlm57kuIDku73mlrDnirbmgIHvvIzpnaLmnb/kuI3nlKjlho3ot5HkuIDmrKHmn6Xor6JcclxuICAgICAgICAuLi5xdWVyeVNoYXJlZFN0YXRlKCksXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog6LWE5rqQ5piv5ZCm5a2Y5ZyoICovXHJcbmZ1bmN0aW9uIGFzc2V0RXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCkudGhlbigoaW5mbzogdW5rbm93bikgPT4gISFpbmZvKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOehruS/neebruW9leWtmOWcqO+8jOS4jeWtmOWcqOWImeWIm+W7ulxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIGRpclVybCk7XHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBkaXJVcmwsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog55uu5b2V5LiN5a2Y5Zyo5YiZ5bu677yM56m655uu5b2V5YiZ5Yig5o6J77yI55Sf5oiQL+WIoOmZpOWQjua4heeQhueUqO+8iSAqL1xyXG5hc3luYyBmdW5jdGlvbiBwcnVuZUVtcHR5RGlyKGFic0Rpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChzdGF0U3luYyhhYnNEaXIpLmlzRGlyZWN0b3J5KCkgJiYgcmVhZGRpclN5bmMoYWJzRGlyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3luYyhhYnNEaXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvKiDkuI3lrZjlnKjlsLHnrpfkuoYgKi9cclxuICAgIH1cclxufVxyXG5cclxuLyoqIOaJvuWHuuW8leeUqOS6huaMh+WumiBjaWQg6ZuG5ZCI55qE5bey5bqP5YiX5YyW6LWE5rqQICovXHJcbmZ1bmN0aW9uIGZpbmRBc3NldFJlZnMoc25hcDogSVByb2plY3RTbmFwc2hvdCwgY2lkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBoaXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKCFjaWRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBoaXRzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWwgb2YgT2JqZWN0LmtleXMoc25hcC5zZXJpYWxpemVkKSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBzbmFwLnNlcmlhbGl6ZWRbcmVsXTtcclxuICAgICAgICBpZiAoY2lkcy5zb21lKChjaWQpID0+IHRleHQuaW5jbHVkZXMoY2lkKSkpIHtcclxuICAgICAgICAgICAgaGl0cy5wdXNoKHJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpdHM7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWueazlSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGhvZHM6IHsgW2tleTogc3RyaW5nXTogKC4uLmFueTogYW55KSA9PiBhbnkgfSA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5qGG5p625LiO5omp5bGV5ZCE6Ieq55qE54mI5pys5L+h5oGvKOacrOWcsCArIG5wbSDmnIDmlrAp44CCXHJcbiAgICAgKlxyXG4gICAgICog5omp5bGV6Ieq6Lqr54mI5pys6K+75a6D6Ieq5bex55qEIHBhY2thZ2UuanNvbjvmoYbmnrbniYjmnKzor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOeahOmCo+S7vSDigJTigJRcclxuICAgICAqIOS4pOiAhemDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCLnmoTkuovlrp4s5LiN5piv6YWN572u6YeM5YaZ5LqG5LuA5LmI44CCXHJcbiAgICAgKiDmnInmsqHmnInmlrDniYjkuqTnu5npnaLmnb/mr5TovoMgdmVyc2lvbiDkuI4gbGF0ZXN0LOi/memHjOS4jeabv+Wug+WIpOaWrSjlhY3lvpfkuKTovrnlkITlhpnkuIDlpZcp44CCXHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICog5oqKIG5vZGVfbW9kdWxlcyDph4znmoTmianlsZXmi7fov5sgZXh0ZW5zaW9ucy/jgIJcclxuICAgICAqXHJcbiAgICAgKiDnvJbovpHlmagqKuWPquS7juW3peeoi+eahCBleHRlbnNpb25zLyDliqDovb3mianlsZUqKizmiYDku6UgbnBtIGluc3RhbGwg5a6M5b+F6aG76JC96L+Z5LiA55uYLFxyXG4gICAgICog5ZCm5YiZXCLmm7TmlrDmiJDlip9cIuWPquWPkeeUn+WcqCBub2RlX21vZHVsZXMg6YeMLOe8lui+keWZqOmHjOS4gOeCueWPmOWMlumDveayoeacieOAglxyXG4gICAgICog6JC955uY5LmL5ZCO6ZyA6KaB6YeN5ZCv57yW6L6R5Zmo5omN55Sf5pWIIOKAlOKAlCDov5nkuIDngrnnlLHpnaLmnb/mlofmoYjlkYrnn6Us6L+Z6YeM5LiN5YGH6KOF54Ot5pu05paw44CCXHJcbiAgICAgKi9cclxuICAgIHN5bmNFeHRlbnNpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGZyb20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogXCJub2RlX21vZHVsZXMg6YeM5rKh5pyJIFwiICsgbmFtZSArIFwiLOWFiOWuieijheWGjeiQveebmFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gam9pbihyb290LCBcImV4dGVuc2lvbnNcIiwgbmFtZS5zcGxpdChcIi9cIikucG9wKCkgYXMgc3RyaW5nKTtcclxuICAgICAgICByZW1vdmVTeW5jKHRvKTtcclxuICAgICAgICBjb3B5U3luYyhmcm9tLCB0byk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ2luc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cclxuIl19
|
|
801
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWs3QkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXg3QjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQTBDO0FBQzFDLHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxZQUFZO1lBQ2hCLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLFFBQVEseUJBQWEsUUFBUSxDQUFDLENBQUM7UUFDekYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyx3QkFBWSxDQUFDLENBQUMsQ0FBQztRQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWU7UUFDcEMsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFtQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUI7UUFDM0MsT0FBTyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSSxLQUFLLENBQUM7QUFFMUI7OztHQUdHO0FBQ0gsU0FBZ0IsTUFBTSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXHJcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgY29weVN5bmMsIGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHJlbW92ZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7XHJcbiAgICBHQU1FUExBWV9ESVIsXHJcbiAgICBMQVlFUlMsXHJcbiAgICBNQU5BR0VSX0RJUixcclxuICAgIFBSRUZBQl9URU1QTEFURVMsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVfTEFCRUxTLFxyXG4gICAgUkVHSVNUUllfQ0FDSEVfTVMsXHJcbiAgICBSRVNPVVJDRVNfRElSLFxyXG4gICAgVFByZWZhYlRlbXBsYXRlLFxyXG4gICAgVklFV1NfU1VCRElSLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgYnVpbGRPcmRlclBsYW4sIGxpc3RNYW5hZ2VycywgbGlzdE1vZHVsZXMsIGxpc3RWaWV3cywgcnVuRG9jdG9yIH0gZnJvbSAnLi9kb2N0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgSURFTlRJRklFUl9SRSxcclxuICAgIG5vcm1hbGl6ZU1hbmFnZXJOYW1lLFxyXG4gICAgbm9ybWFsaXplTW9kdWxlLFxyXG4gICAgbm9ybWFsaXplVmlld05hbWUsXHJcbiAgICB2aWV3UHJlZmFiUGF0aCxcclxufSBmcm9tICcuL25hbWluZyc7XHJcbmltcG9ydCB7XHJcbiAgICBjb2xsZWN0U25hcHNob3QsXHJcbiAgICBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIsXHJcbiAgICBsaXN0TG9jYWxDYXRhbG9nLFxyXG4gICAgcmVhZEluc3RhbGxlZFBhY2thZ2UsXHJcbiAgICByZWFkUHJvamVjdE1hbmlmZXN0LFxyXG59IGZyb20gJy4vcHJvamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgICBpc1NoYXJlZE1vZHVsZVBhY2thZ2UsXHJcbiAgICBLTk9XTl9QQUNLQUdFUyxcclxuICAgIHBhcnNlVmlld1Jlc3VsdCxcclxuICAgIHZpZXdBcmd2LFxyXG59IGZyb20gJy4vcmVnaXN0cnknO1xyXG5pbXBvcnQge1xyXG4gICAgTlBNX1RJTUVPVVRfTVMsXHJcbiAgICBidWlsZE5wbVJlc3VsdCxcclxuICAgIGJ1aWxkU2hhcmVkU3RhdHVzLFxyXG4gICAgY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZCxcclxuICAgIGNvbGxlY3RJbnN0YWxsU3BlY3MsXHJcbiAgICBkZWNvZGVQcm9jZXNzT3V0cHV0LFxyXG4gICAgZmluZFBhY2thZ2VSZWZzLFxyXG4gICAgZm9ybWF0TnBtQ29tbWFuZCxcclxuICAgIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QsXHJcbiAgICBtZXJnZUNhdGFsb2csXHJcbiAgICBucG1TcGF3blNwZWMsXHJcbiAgICBzcGF3blNwZWNGb3IsXHJcbiAgICBzdW1tYXJpemVOcG1GYWlsdXJlLFxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICAgIGJ1aWxkTWFuYWdlclNjcmlwdCxcclxuICAgIGJ1aWxkRXZlbnRzU2NyaXB0LFxyXG4gICAgYnVpbGRNb2RlbFNjcmlwdCxcclxuICAgIGJ1aWxkTW9kdWxlU2NyaXB0LFxyXG4gICAgYnVpbGRWaWV3UHJlZmFiLFxyXG4gICAgYnVpbGRWaWV3U2NyaXB0LFxyXG4gICAgaXNQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFRGcmFtZXdvcmtJbXBvcnQsfSBmcm9tICcuL3RlbXBsYXRlcyc7XHJcbmltcG9ydCB7IElGaW5kaW5nLCBJTnBtUnVuUmVzdWx0LCBJSW5zdGFsbGVkUGFja2FnZVZpZXcsIElQcm9qZWN0U25hcHNob3QsIElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5paH5qGIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiDmianlsZXoh6rluKbnmoTkuK3mlofmlofmoYjooajjgIJcclxuICog5a6D5pei5piv44CMa2V5IOWFqOmbhuOAjeeahOadpea6kO+8jOS5n+aYr+e8lui+keWZqCBpMThuIOaLv+S4jeWIsOaXtueahOWFnOW6leOAglxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuY29uc3QgWkhfU1RSSU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHJlcXVpcmUoJy4uL2kxOG4vemguanMnKTtcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5bCP5bel5YW3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKiDlt6XnqIvmoLnnm67lvZUgKi9cclxuZnVuY3Rpb24gcHJvamVjdFBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG59XHJcblxyXG4vKipcclxuICog6L+Z5Liq5bel56iL5byV55So5qGG5p626K+l55So5ZOq56eN5YaZ5rOVOlxyXG4gKiAtIOW8gOWPkeW3peS9nOWMuijku5PlupPph4ws5qGG5p625rqQ56CB5ZyoIGFzc2V0cy9zY3JpcHRzL2ZyYW1ld29yayDkuIspIC0+IOebuOWvuei3r+W+hFxyXG4gKiAtIOijheaIkCBucG0g5YyF55qE5paw5bel56iLIC0+IOWMheWQjSBAY2NnZi9mcmFtZXdvcmtcclxuICpcclxuICog5Yik5o2u5pivXCLmoYbmnrbmupDnoIHlnKjkuI3lnKhcIizkuI4gY29uc3RhbnRzLnRzIOeahCBGUkFNRVdPUktfREVWX0RJUiDlkIzkuIDkuKrlgLzjgIJcclxuICovXHJcbmZ1bmN0aW9uIGZyYW1ld29ya0ltcG9ydE1vZGUoKTogVEZyYW1ld29ya0ltcG9ydCB7XHJcbiAgICByZXR1cm4gZXhpc3RzU3luYyhqb2luKHByb2plY3RQYXRoKCksICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSkgPyAnd29ya3NwYWNlJyA6ICdwYWNrYWdlJztcclxufVxyXG5cclxuLyoqIOebuOWvuei3r+W+hCAtPiBkYjovLyDotYTmupAgdXJsICovXHJcbmZ1bmN0aW9uIGRiVXJsKHJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGI6Ly8nICsgcmVsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxufVxyXG5cclxuLyoqIHV1aWQgLT4g6aKE5Yi25L2T6YeM6ISa5pys57uE5Lu255qEIF9fdHlwZV9fICovXHJcbmZ1bmN0aW9uIGNvbXByZXNzVXVpZCh1dWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5VdGlscy5VVUlELmNvbXByZXNzVVVJRCh1dWlkLCBmYWxzZSk7XHJcbn1cclxuXHJcbi8qKiDlj5bkuIDku73lt6XnqIvlv6vnhafvvIjkvZPmo4DjgIHliJfooajpg73ln7rkuo7lroPvvIzkv53or4HpnaLmnb/nnIvliLDnmoTlkozkvZPmo4DnnIvliLDnmoTmmK/lkIzkuIDku73mlbDmja7vvIkgKi9cclxuZnVuY3Rpb24gc25hcHNob3QoKTogSVByb2plY3RTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gY29sbGVjdFNuYXBzaG90KHByb2plY3RQYXRoKCksIGNvbXByZXNzVXVpZCk7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogcmVnaXN0cnkg5pCc57Si57uT5p6c55qE57yT5a2Y44CCXHJcbiAqXHJcbiAqIOS4gOasoeaQnOe0ouWunua1iyAxfjQg56eSIOKAlOKAlCDogIzpnaLmnb/liIfpobXjgIHoo4XlrozliLfmlrDpg73kvJrosIPnlKjmn6Xor6LvvIzkuI3og73mr4/mrKHpg73ljrvmkJzjgIJcclxuICog5pi+5byP54K544CM5Yi35paw44CN5pe255SoIGBmb3JjZWAg57uV6L+H5a6D44CCXHJcbiAqL1xyXG5sZXQgcmVnaXN0cnlDYWNoZTogeyBhdDogbnVtYmVyOyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiAqKuWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiKio65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqXHJcbiAqIOi/nOeoi+S/oeaBr+eahOadpea6kDoqKumAkOS4qiBgbnBtIHZpZXcgPG5hbWU+IC0tanNvbmAg57K+56Gu5p+l6K+iKirjgIJcclxuICpcclxuICog5pu+57uP55SoIGBucG0gc2VhcmNoYCArIOWFs+mUruivjSzlt7Llup/lvIMg4oCU4oCUIOaQnOe0ouWvuSBzY29wZWQg5YyFKGBAY2NnZi8qYCnlvojkuI3lj6/pnaAsXHJcbiAqIOW4uOW4uOaQnOS4jeWIsCzkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahCjlrp7mtYvouKnov4cp44CCXHJcbiAqIOS7o+S7tzrljIXlkI3opoHnu7TmiqTlnKggcmVnaXN0cnkudHMg55qEIEtOT1dOX1BBQ0tBR0VTIOmHjCzmlrDlop7ljIXml7bliqDkuIDooYzjgIJcclxuICpcclxuICog5LmL5omA5Lul55SoIG5wbSDlkb3ku6TogIzkuI3mmK/oh6rlt7Hlj5EgSFRUUFMg6K+35rGCOm5wbSDkvJroh6rliqjluKbkuIrlt6XnqIvnmoQgYC5ucG1yY2BcclxuICogKOengeaciea6kOOAgemVnOWDj+OAgeS7o+eQhuetiemFjee9rumDvei3n+edgOi1sCks5LiN55So5oiR5Lus6YeN5aSN5a6e546w5LiA6YGN44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVJlZ2lzdHJ5KGZvcmNlOiBib29sZWFuKTogeyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgIGlmICghZm9yY2UgJiYgcmVnaXN0cnlDYWNoZSAmJiBub3cgLSByZWdpc3RyeUNhY2hlLmF0IDwgUkVHSVNUUllfQ0FDSEVfTVMpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlLmVycm9yIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pa55qGIIEI66YCQ5LiqKirnsr7noa7mn6Xor6IqKizkuI3lho3nlKggbnBtIHNlYXJjaOOAglxyXG4gICAgLy8g5pCc57Si5a+5IHNjb3BlZCDljIUoQGNjZ2YvKinlvojkuI3lj6/pnaAs5bi45bi45pCc5LiN5YiwIOKAlOKAlCDpgqPmoLdcIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwiXHJcbiAgICAvLyDlkoxcIuacgOaWsOeJiOacrFwi6YO95Lya5piv56m655qE44CC5ZCN5Y2V5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4zjgIJcclxuICAgIGNvbnN0IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEtOT1dOX1BBQ0tBR0VTKSB7XHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9ICducG0gdmlldyAnICsgbmFtZSArICcgLS1qc29uJztcclxuICAgICAgICBjb25zdCBzcGF3blNwZWMgPSBzcGF3blNwZWNGb3IoXHJcbiAgICAgICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLnZpZXdBcmd2KG5hbWUpXSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogSU5wbVJ1blJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGF3bmVkID0gc3Bhd25TeW5jKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHN0ZG91dCA9IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IHR5cGVvZiBzcGF3bmVkLnN0YXR1cyA9PT0gJ251bWJlcicgPyBzcGF3bmVkLnN0YXR1cyA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5Y2V5Liq5YyF5p+l5LiN5YiwKOayoeWPkeW4gyAvIOemu+e6vynkuI3or6XorqnmlbTku73liJfooajlpLHotKUs5Y+q6K6w5LiL5p2lXHJcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuYW1lICsgJzonICsgKHJlc3VsdC5oaW50ID8/ICgn6YCA5Ye656CBICcgKyAocmVzdWx0LmV4aXRDb2RlID8/ICfmnKrnn6UnKSkpKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcGFyc2VWaWV3UmVzdWx0KHN0ZG91dCk7XHJcbiAgICAgICAgaWYgKGVudHJ5KSBlbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgIGVsc2UgZmFpbHVyZXMucHVzaChuYW1lICsgJzrov5Tlm57lhoXlrrnkuI3mmK/pooTmnJ/nmoQgSlNPTiDlvaLnirYnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvciA9IGVudHJpZXMubGVuZ3RoID09PSAwICYmIGZhaWx1cmVzLmxlbmd0aCA+IDAgPyBmYWlsdXJlcy5qb2luKCc7JykgOiBudWxsO1xyXG4gICAgcmVnaXN0cnlDYWNoZSA9IHsgYXQ6IG5vdywgZW50cmllcywgZXJyb3IgfTtcclxuICAgIHJldHVybiB7IGVudHJpZXMsIGVycm9yIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnu4Too4XlhazlhbHmqKHlnZfnmoTlrozmlbTnirbmgIHjgIJcclxuICpcclxuICog5LiJ5Liq5p2l5rqQ5ZCI6LW35p2l5omN5piv5a6M5pW05YiX6KGo77yaXHJcbiAqIDEuIOacrOahhuaetioq5byA5Y+R5bel5L2c5Yy6Kirph4znmoQgYHBhY2thZ2VzL3NoYXJlZC8qYO+8iOWPquacieacrOS7k+W6k+aJjeiupO+8jOingVxyXG4gKiAgICBgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyYO+8ieKAlOKAlCDog73nu5nlh7ogYGZpbGU6YCDlronoo4Xor7TmmI7nrKbvvJtcclxuICogMi4gYG5vZGVfbW9kdWxlc2Ag6YeM5bey57uP6KOF5LqG55qE77yI6Z2g5YyF5riF5Y2V6YeM55qE5qCH6K6w6K6k5Ye65p2l77yJ77ybXHJcbiAqIDMuICoq6L+c56iLIHJlZ2lzdHJ5KirvvIjmjInlj5HnjrDlhbPplK7or43mkJzntKLvvInigJTigJQg6KaG55uWXCLov5jmsqHoo4XjgIHkvYblj6/ku6Xoo4VcIueahOmCo+S6m+OAglxyXG4gKlxyXG4gKiDliLvmhI8qKuS4jSoq6Z2g5YyF5ZCN5Yy56YWN5p2l6K+G5Yir5YWs5YWx5qih5Z2X77yac2NvcGUg6L+Y5rKh5a6a77yI6KeBIFJPQURNQVAg55qEIFMxYe+8ie+8jFxyXG4gKiDmjaLkuKogc2NvcGUg5bCx6K6k5LiN5Ye65p2l5LqG44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRQcm9qZWN0TWFuaWZlc3Qocm9vdCk7XHJcbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRldkRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZERpciA9IGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0Rpcihyb290KTtcclxuICAgIGNvbnN0IGxvY2FsID0gc2hhcmVkRGlyID8gbGlzdExvY2FsQ2F0YWxvZyhzaGFyZWREaXIsIHJvb3QpIDogW107XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkU2hhcmVkOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhwcm9qZWN0RGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGlmIChwa2cuaW5zdGFsbGVkICYmIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWRTaGFyZWQucHVzaChjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkKG5hbWUsIHBrZy5tYW5pZmVzdCwgcGtnLnZlcnNpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgLy8g5qGG5p625LiO5omp5bGV5LiN5piv5YWs5YWx5qih5Z2XLOiZveeEtuWug+S7rOS5n+ijheedgOOAgeS5n+WcqCBLTk9XTl9QQUNLQUdFUyDph4wg4oCU4oCUIOS4pOWkhOmDveimgea7pOaOiSxcclxuICAgIC8vIOWQpuWImeS9v+eUqOiAheeahFwi5YWs5YWx5qih5Z2XXCLliJfooajph4zkvJrlhpLlh7rmoYbmnrblkoznvJbovpHlmajmianlsZXjgIJcclxuICAgIGNvbnN0IHNoYXJlZE9ubHkgPSAoZTogSVNoYXJlZENhdGFsb2dFbnRyeSkgPT4gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKGUubmFtZSk7XHJcbiAgICBjb25zdCBjYXRhbG9nID0gbWVyZ2VDYXRhbG9nKFxyXG4gICAgICAgIG1lcmdlQ2F0YWxvZyhsb2NhbCwgcmVnaXN0cnkuZW50cmllcy5maWx0ZXIoc2hhcmVkT25seSkpLFxyXG4gICAgICAgIGluc3RhbGxlZFNoYXJlZC5maWx0ZXIoc2hhcmVkT25seSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFwi5Y+v5pu05pawXCLopoHpnaDov5znqIvnmoTmnIDmlrDniYjmnKzlj7fvvIzogIwgbWVyZ2VDYXRhbG9nIOiuqeacrOWcsOmhueS8mOWFiO+8iOWQjOWQjeeahOi/nOeoi+mhueS8muiiq+ebluaOie+8ie+8jFxyXG4gICAgLy8g5omA5Lul6L+Z6YeM5Y2V54us55WZ5LiA5Lu95YyF5ZCNIC0+IOi/nOeoi+acgOaWsOeJiOacrOOAglxyXG4gICAgY29uc3QgcmVnaXN0cnlWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5lbnRyaWVzKSB7XHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9uc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZlcnNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6KaB5p+l5a6e5pe254q25oCB55qE5YyFID0g5YiX6KGo6YeM55qEICsg5a6D5Lus5aOw5piO55qE5L6d6LWW44CCXHJcbiAgICAvLyDkvp3otZblj6/og73kuI3lnKjliJfooajph4zvvIjmma7pgJogbnBtIOWMhe+8ie+8jOS9huWug+ijheayoeijheWQjOagt+imgeaYvuekuuWHuuadpeOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhdGFsb2cpIHtcclxuICAgICAgICB3YW50ZWQuYWRkKGVudHJ5Lm5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKGVudHJ5LmRlY2xhcmVkRGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgICAgICB3YW50ZWQuYWRkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFsbGVkUGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIElJbnN0YWxsZWRQYWNrYWdlVmlldz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB3YW50ZWQpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkOiBwa2cuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcclxuICAgICAgICAgICAgaXNTaGFyZWRNb2R1bGU6IGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IHsgLi4uc25hcC5nYW1lcGxheVNvdXJjZXMsIC4uLnNuYXAubWFuYWdlclNvdXJjZXMgfTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gY2F0YWxvZy5tYXAoKGVudHJ5KSA9PiBidWlsZFNoYXJlZFN0YXR1cyhlbnRyeSwge1xyXG4gICAgICAgIHByb2plY3REZXBlbmRlbmNpZXMsXHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXMsXHJcbiAgICAgICAgcmVmZXJlbmNlczogeyBbZW50cnkubmFtZV06IGZpbmRQYWNrYWdlUmVmcyhzb3VyY2VzLCBlbnRyeS5uYW1lKSB9LFxyXG4gICAgICAgIGNhdGFsb2csXHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9ucyxcclxuICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZHVsZXMsXHJcbiAgICAgICAgLyoqIOacrOWcsOWuieijhea6kO+8myoq5Y+q5pyJ5pys5qGG5p6255qE5byA5Y+R5LuT5bqT6YeM5omN6Z2eIG51bGwqKu+8iOmdouWQkeeUqOaIt+eahOW3peeoi+mHjOawuOi/nOaYryBudWxs77yJICovXHJcbiAgICAgICAgbG9jYWxTb3VyY2U6IHNoYXJlZERpcixcclxuICAgICAgICAvKiog5bel56iL5pyJ5Y+v6K+755qEIHBhY2thZ2UuanNvbiDlkJcgKi9cclxuICAgICAgICBoYXNNYW5pZmVzdDogbWFuaWZlc3QgIT09IG51bGwsXHJcbiAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8m+S4uiBudWxsIOihqOekuui/measoeaYr+aIkOWKn+eahO+8iOaIlueUqOS6hue8k+WtmO+8iSAqL1xyXG4gICAgICAgIHJlZ2lzdHJ5RXJyb3I6IHJlZ2lzdHJ5LmVycm9yLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5YWo56iLKirkuI3mipvlvILluLgqKu+8mumAgOWHuueggeOAgXN0ZG91dOOAgXN0ZGVycuOAgeS7peWPiiBzcGF3biDoh6rouqvnmoTlpLHotKXpg73mlLbov5sgSU5wbVJ1blJlc3VsdFxyXG4gKiDlm57kvKDnu5npnaLmnb8g4oCU4oCUIOeUqOaIt+imgeeci+eahOaYryBucG0g6Ieq5bex6K+055qE6K+d77yM6ICM5LiN5piv5LiA5Y+l6L2s6L+w55qEXCLlronoo4XlpLHotKVcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuTnBtKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHNwZWNzOiBzdHJpbmdbXSk6IElOcG1SdW5SZXN1bHQge1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKGFjdGlvbiwgc3BlY3MpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyAxLiAqKuS4jeaMh+WumiBlbmNvZGluZyoq77ya5ou/5Yiw5Y6f5aeLIEJ1ZmZlciDoh6rlt7Hop6PnoIHvvIzlkKbliJkgY21kIOeahCBHQksg5raI5oGv5Lya5Y+Y5Lmx56CB77ybXHJcbiAgICAgICAgLy8gMi4gKip3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMg5b+F6aG75p2l6IeqIHNwYXduU3BlYyoq77ya5bCR5LqG5a6D77yMTm9kZSDkvJrmiormiJHliqDlpb3nmoRcclxuICAgICAgICAvLyAgICDlvJXlj7flho3ovazkuYnkuIDpgY3vvIxjbWQg5pS25YiwIGBcXFwibnBtLmNtZCBpbnN0YWxsIC4uLlxcXCJg77yM5LqO5piv5pW06KGM6KKr5b2T5oiQ5ZG95Luk5ZCNXHJcbiAgICAgICAgLy8gICAg77yI5oqlXCInbnBtLmNtZCBpbnN0YWxsIC4uLicg5LiN5piv5YaF6YOo5oiW5aSW6YOo5ZG95LukXCLvvIxucG0g5qC55pys5rKh6KKr5ZCv5Yqo77yJ44CCXHJcbiAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBOUE1fVElNRU9VVF9NUyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTYgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpLFxyXG4gICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiBzcGF3bmVkLmVycm9yXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Bhd25lZC5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7o+i3kSBucG0g6KOFIC8g5Y245LiA5Liq5YWs5YWx5qih5Z2X77yM54S25ZCO5Zue5LiA5Lu95Yi35paw6L+H55qE54q25oCB44CCXHJcbiAqXHJcbiAqIOWPquaOpeWPlyBjYXRhbG9nIOmHjOWtmOWcqOeahOWMheWQjSDigJTigJQg5LiN5oqK5omp5bGV5Y+Y5oiQXCLku7vmhI8gbnBtIOWRveS7pOaJp+ihjOWZqFwi44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBydW5TaGFyZWRBY3Rpb24oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgcGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCFwYWNrYWdlTmFtZSB8fCB0eXBlb2YgcGFja2FnZU5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfnvLrlsJHljIXlkI0nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiZWZvcmUgPSBxdWVyeVNoYXJlZFN0YXRlKCk7XHJcbiAgICBjb25zdCBlbnRyeSA9IGJlZm9yZS5tb2R1bGVzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gcGFja2FnZU5hbWUpO1xyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgIGNvbnN0IGtub3duID0gYmVmb3JlLm1vZHVsZXMubWFwKChtKSA9PiBtLm5hbWUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYOS4jeWcqOWPr+WuieijheWIl+ihqOmHjOeahOWMhe+8miR7cGFja2FnZU5hbWV9YFxyXG4gICAgICAgICAgICArIChrbm93bi5sZW5ndGggPyBg77yI5b2T5YmN5YiX6KGo77yaJHtrbm93bi5qb2luKCcsICcpfe+8iWAgOiAn77yI5b2T5YmN5YiX6KGo5Li656m677yJJyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlronoo4XopoHmiooqKuacrOWcsOiDveino+aekOWIsOeahOS+nei1luS4gOi1t+W4puS4iioq77ya5Y+q6KOF5a6D5LiA5Liq55qE6K+d77yMbnBtIOS8muWOuyByZWdpc3RyeSDmib7kvp3otZbvvIxcclxuICAgIC8vIOiAjOacrOWcsOa6kOmHjOeahOS+nei1luW5tuayoeacieWPkeW4gyDigJTigJQg5b+F54S2IEU0MDTvvIjlrp7mtYvov4fvvInjgIJcclxuICAgIC8vIOWNuOi9veaMiSoq5YyF5ZCNKirvvIhucG0g6K6k5YyF5ZCN77yM5LiN6K6kIGZpbGU6IOivtOaYjuespu+8ieOAglxyXG4gICAgY29uc3Qgc3BlY3MgPSBhY3Rpb24gPT09ICd1bmluc3RhbGwnXHJcbiAgICAgICAgPyBbZW50cnkubmFtZV1cclxuICAgICAgICA6IGNvbGxlY3RJbnN0YWxsU3BlY3MoZW50cnksIGJlZm9yZS5tb2R1bGVzKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJ1bk5wbShhY3Rpb24sIHNwZWNzKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0pSoq5LiN5oqb5byC5bi4KirvvJrpnaLmnb/pnIDopoHmi7/liLDnu5PmnoTljJbnmoTnu5PmnpzvvIjlkb3ku6TjgIHpgIDlh7rnoIHjgIHljp/lp4vovpPlh7rvvInvvIxcclxuICAgICAgICAgKiDmiY3og73lnKjlvLnnqpfph4zljp/moLflsZXnpLogbnBtIOiHquW3seivtOeahOivneOAgumdnuazlei+k+WFpeS7jeeEtuaKmyDigJTigJQg6YKj5piv6LCD55So5pa55YaZ6ZSZ5LqG44CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb2s6IHJlc3VsdC5vayxcclxuICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog5aSx6LSl5pe25LiA5Y+lKirljZXooYwqKuaRmOimge+8iOmdouadv+a2iOaBr+WMuueUqO+8ieOAguWujOaVtOi+k+WHuuWcqCBgcmVzdWx0YCDph4zvvIznlLHlvLnnqpflsZXnpLog4oCU4oCUXHJcbiAgICAgICAgICog5LmL5YmN5oqK5pW05q61IG5wbSDovpPlh7rloZ7ov5vmtojmga/ljLrvvIzkvJrmiorlj7PmoI/mjKTlj5jlvaLlubblkozmtojmga/lj6DlnKjkuIDotbfjgIJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXNzYWdlOiByZXN1bHQub2sgPyBudWxsIDogc3VtbWFyaXplTnBtRmFpbHVyZShhY3Rpb24sIHBhY2thZ2VOYW1lLCByZXN1bHQpLFxyXG4gICAgICAgIC8vIOijheWujOeri+WIu+WbnuS4gOS7veaWsOeKtuaAge+8jOmdouadv+S4jeeUqOWGjei3keS4gOasoeafpeivolxyXG4gICAgICAgIC4uLnF1ZXJ5U2hhcmVkU3RhdGUoKSxcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiDotYTmupDmmK/lkKblrZjlnKggKi9cclxuZnVuY3Rpb24gYXNzZXRFeGlzdHModXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKS50aGVuKChpbmZvOiB1bmtub3duKSA9PiAhIWluZm8pO1xyXG59XHJcblxyXG4vKipcclxuICog56Gu5L+d55uu5b2V5a2Y5Zyo77yM5LiN5a2Y5Zyo5YiZ5Yib5bu6XHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVEaXIoZGlyVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgZGlyVXJsKTtcclxuICAgIGlmICghaW5mbykge1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIGRpclVybCwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDnm67lvZXkuI3lrZjlnKjliJnlu7rvvIznqbrnm67lvZXliJnliKDmjonvvIjnlJ/miJAv5Yig6Zmk5ZCO5riF55CG55So77yJICovXHJcbmFzeW5jIGZ1bmN0aW9uIHBydW5lRW1wdHlEaXIoYWJzRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHN0YXRTeW5jKGFic0RpcikuaXNEaXJlY3RvcnkoKSAmJiByZWFkZGlyU3luYyhhYnNEaXIpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZW1vdmVTeW5jKGFic0Rpcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8qIOS4jeWtmOWcqOWwseeul+S6hiAqL1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog5om+5Ye65byV55So5LqG5oyH5a6aIGNpZCDpm4blkIjnmoTlt7Lluo/liJfljJbotYTmupAgKi9cclxuZnVuY3Rpb24gZmluZEFzc2V0UmVmcyhzbmFwOiBJUHJvamVjdFNuYXBzaG90LCBjaWRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGhpdHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoIWNpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGhpdHM7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHJlbCBvZiBPYmplY3Qua2V5cyhzbmFwLnNlcmlhbGl6ZWQpKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHNuYXAuc2VyaWFsaXplZFtyZWxdO1xyXG4gICAgICAgIGlmIChjaWRzLnNvbWUoKGNpZCkgPT4gdGV4dC5pbmNsdWRlcyhjaWQpKSkge1xyXG4gICAgICAgICAgICBoaXRzLnB1c2gocmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGl0cztcclxufVxyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5pa55rOVIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5leHBvcnQgY29uc3QgbWV0aG9kczogeyBba2V5OiBzdHJpbmddOiAoLi4uYW55OiBhbnkpID0+IGFueSB9ID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiDmoYbmnrbkuI7mianlsZXlkIToh6rnmoTniYjmnKzkv6Hmga8o5pys5ZywICsgbnBtIOacgOaWsCnjgIJcclxuICAgICAqXHJcbiAgICAgKiDmianlsZXoh6rouqvniYjmnKzor7vlroPoh6rlt7HnmoQgcGFja2FnZS5qc29uO+ahhuaetueJiOacrOivu+W3peeoiyBub2RlX21vZHVsZXMg6YeM55qE6YKj5Lu9IOKAlOKAlFxyXG4gICAgICog5Lik6ICF6YO95pivXCLlrp7pmYXoo4Xkuobku4DkuYhcIueahOS6i+WunizkuI3mmK/phY3nva7ph4zlhpnkuobku4DkuYjjgIJcclxuICAgICAqIOacieayoeacieaWsOeJiOS6pOe7memdouadv+avlOi+gyB2ZXJzaW9uIOS4jiBsYXRlc3Qs6L+Z6YeM5LiN5pu/5a6D5Yik5patKOWFjeW+l+S4pOi+ueWQhOWGmeS4gOWllynjgIJcclxuICAgICAqL1xyXG4gICAgLyoqXHJcbiAgICAgKiDmioogbm9kZV9tb2R1bGVzIOmHjOeahOaJqeWxleaLt+i/myBleHRlbnNpb25zL+OAglxyXG4gICAgICpcclxuICAgICAqIOe8lui+keWZqCoq5Y+q5LuO5bel56iL55qEIGV4dGVuc2lvbnMvIOWKoOi9veaJqeWxlSoqLOaJgOS7pSBucG0gaW5zdGFsbCDlrozlv4XpobvokL3ov5nkuIDnm5gsXHJcbiAgICAgKiDlkKbliJlcIuabtOaWsOaIkOWKn1wi5Y+q5Y+R55Sf5ZyoIG5vZGVfbW9kdWxlcyDph4ws57yW6L6R5Zmo6YeM5LiA54K55Y+Y5YyW6YO95rKh5pyJ44CCXHJcbiAgICAgKiDokL3nm5jkuYvlkI7pnIDopoHph43lkK/nvJbovpHlmajmiY3nlJ/mlYgg4oCU4oCUIOi/meS4gOeCueeUsemdouadv+aWh+ahiOWRiuefpSzov5nph4zkuI3lgYfoo4Xng63mm7TmlrDjgIJcclxuICAgICAqL1xyXG4gICAgc3luY0V4dGVuc2lvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKTtcclxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZnJvbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBtZXNzYWdlOiBcIm5vZGVfbW9kdWxlcyDph4zmsqHmnIkgXCIgKyBuYW1lICsgXCIs5YWI5a6J6KOF5YaN6JC955uYXCIgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG8gPSBqb2luKHJvb3QsIFwiZXh0ZW5zaW9uc1wiLCBuYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHJlbW92ZVN5bmModG8pO1xyXG4gICAgICAgIGNvcHlTeW5jKGZyb20sIHRvKTtcclxuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgcGF0aDogdG8gfTtcclxuICAgIH0sXHJcblxyXG4gICAgcXVlcnlWZXJzaW9ucyhmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHF1ZXJ5UmVnaXN0cnkoZm9yY2VSZWdpc3RyeSk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T2YgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHJlZ2lzdHJ5LmVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaGl0ID8gaGl0LnZlcnNpb24gOiBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYW1ld29ya05hbWUgPSAnQGNjZ2YvZnJhbWV3b3JrJztcclxuICAgICAgICBjb25zdCBmcmFtZXdvcmsgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBmcmFtZXdvcmtOYW1lKTtcclxuXHJcbiAgICAgICAgLyoqIOacrOS7k+W6k+eahOW8gOWPkeW3peS9nOWMujrmoYbmnrbmmK/mupDnoIHjgIHmianlsZXlsLHmmK/ov5nkuIDku70g4oCU4oCUIOmdouadv+aNruatpOaUueensOWRvOW5tuemgeeUqOabtOaWsCAqL1xyXG4gICAgICAgIGNvbnN0IGluV29ya3NwYWNlID0gZXhpc3RzU3luYyhqb2luKHJvb3QsICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZyYW1ld29yazoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZnJhbWV3b3JrTmFtZSxcclxuICAgICAgICAgICAgICAgIGluc3RhbGxlZDogZnJhbWV3b3JrLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZTogaW5Xb3Jrc3BhY2UsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBmcmFtZXdvcmsudmVyc2lvbixcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YoZnJhbWV3b3JrTmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcGFja2FnZUpTT04ubmFtZSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBhY2thZ2VKU09OLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgbGF0ZXN0OiBsYXRlc3RPZihwYWNrYWdlSlNPTi5uYW1lKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG9wZW5Xb3JrYmVuY2goKSB7XHJcbiAgICAgICAgRWRpdG9yLlBhbmVsLm9wZW4oYCR7cGFja2FnZUpTT04ubmFtZX0ud29ya2JlbmNoYCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpnaLmnb/nmoTlsYLnuqfkuIvmi4nnlLHkuLvov5vnqIvkuIvlj5HvvIzpgb/lhY3mianlsZXph4zlh7rnjrDnrKzkuozku73lsYLnuqfliJfooaggKi9cclxuICAgIHF1ZXJ5TGF5ZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWy4uLkxBWUVSU107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6Z2i5p2/5paH5qGI77ya5LulIGkxOG4vemguanMg55qEIGtleSDlhajpm4bkuLrlh4bvvIzpgJDkuKrkuqTnu5nnvJbovpHlmaggaTE4biDop6PmnpDlvZPliY3or63oqIDjgIJcclxuICAgICAqIOi/meagt+mdouadv+S+p+S4jemcgOimgeWIpOaWreivreiogO+8jOS5n+S4jeS+nei1liBFZGl0b3IuSTE4biDmmK/lkKblrZjlnKjkuo7pnaLmnb/kuIrkuIvmlofph4zjgIJcclxuICAgICAqL1xyXG4gICAgcXVlcnlJMThuKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoWkhfU1RSSU5HUykpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbCA9IGAke3BhY2thZ2VKU09OLm5hbWV9LiR7a2V5fWA7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gWkhfU1RSSU5HU1trZXldO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGl0ID0gRWRpdG9yLkkxOG4udChmdWxsKTtcclxuICAgICAgICAgICAgICAgIGlmIChoaXQgJiYgaGl0ICE9PSBmdWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhpdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLyog57yW6L6R5ZmoIGkxOG4g5LiN5Y+v55So5bCx5L+d55WZ5Lit5paHICovXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFibGVba2V5XSA9IHRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOmihOWItuS9k+aooeadv+WIl+ihqO+8iOS+m+mdouadv+S4i+aLie+8iSAqL1xyXG4gICAgcXVlcnlUZW1wbGF0ZXMoKTogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHtcclxuICAgICAgICByZXR1cm4gUFJFRkFCX1RFTVBMQVRFUy5tYXAoKGlkKSA9PiAoeyBpZCwgbGFiZWw6IFBSRUZBQl9URU1QTEFURV9MQUJFTFNbaWRdIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6IgZ2FtZXBsYXkg5LiL5bey5pyJ55qE5qih5Z2X5YiX6KGo77yI5ZCrIG9yZGVy77yJ44CCXHJcbiAgICAgKiDkuI7kvZPmo4DlhbHnlKggZG9jdG9yLmxpc3RNb2R1bGVz77yM5L+d6K+B6Z2i5p2/5pi+56S65ZKM5L2T5qOA5Yik5a6a5LiA6Ie044CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TW9kdWxlcygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdE1vZHVsZXMoc25hcCkubWFwKChtKSA9PiAoe1xyXG4gICAgICAgICAgICBuYW1lOiBtLmRpcixcclxuICAgICAgICAgICAgb3JkZXI6IG0ub3JkZXIgPz8gMCxcclxuICAgICAgICAgICAgaGFzTW9kZWw6IG0ubW9kZWxGaWxlICE9PSBudWxsLFxyXG4gICAgICAgICAgICBoYXNNb2R1bGU6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIOmdouadv+eUqOi/meS4ieS4qui3r+W+hOWBmuOAjOS4gOmUruaJk+W8gOiEmuacrOOAje+8m2V2ZW50c0ZpbGUg5Y+v6IO95Li6IG51bGzvvIjogIHmqKHlnZfvvIlcclxuICAgICAgICAgICAgbW9kdWxlRmlsZTogbS5tb2R1bGVGaWxlLFxyXG4gICAgICAgICAgICBtb2RlbEZpbGU6IG0ubW9kZWxGaWxlLFxyXG4gICAgICAgICAgICBldmVudHNGaWxlOiBtLmV2ZW50c0ZpbGUsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5ZCv5Yqo6aG65bqP6aKE6KeIICsg5bGC57qn5Y2g55So77yI5byA5Y+R6L6F5Yqp77yJICovXHJcbiAgICBhc3luYyBxdWVyeU92ZXJ2aWV3KCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApO1xyXG4gICAgICAgIGNvbnN0IHVzYWdlID0gTEFZRVJTLm1hcCgobGF5ZXIpID0+ICh7XHJcbiAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICB2aWV3czogdmlld3MuZmlsdGVyKCh2KSA9PiB2LnJlZ2lzdGVyZWRMYXllciA9PT0gbGF5ZXIpLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gbGlzdE1vZHVsZXMoc25hcCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3JkZXI6IGJ1aWxkT3JkZXJQbGFuKHNuYXApLFxyXG4gICAgICAgICAgICBsYXllcnM6IHVzYWdlLFxyXG4gICAgICAgICAgICBtb2R1bGVDb3VudDogbW9kdWxlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIG1hbmFnZXJDb3VudDogbGlzdE1hbmFnZXJzKHNuYXApLmxlbmd0aCxcclxuICAgICAgICAgICAgdmlld0NvdW50OiB2aWV3cy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOS4gOmUruS9k+ajgCAqL1xyXG4gICAgYXN5bmMgcnVuRG9jdG9yKCk6IFByb21pc2U8eyBmaW5kaW5nczogSUZpbmRpbmdbXTsgc3VtbWFyeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB9PiB7XHJcbiAgICAgICAgY29uc3QgZmluZGluZ3MgPSBydW5Eb2N0b3Ioc25hcHNob3QoKSwgTEFZRVJTKTtcclxuICAgICAgICBjb25zdCBzdW1tYXJ5ID0geyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xyXG4gICAgICAgICAgICBzdW1tYXJ5W2Yuc2V2ZXJpdHldID0gKHN1bW1hcnlbZi5zZXZlcml0eV0gPz8gMCkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBmaW5kaW5ncywgc3VtbWFyeSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivouafkOaooeWdl+eahCBWaWV3IOWIl+ihqOOAglxyXG4gICAgICog5q+U5pen5a6e546w5aSa5LqGIHByZWZhYkV4aXN0cyDigJTigJQg5pen54mI5oyJ57qm5a6a5ou8IFVSTCDljbTku47kuI3mn6Xnm5jvvIxcclxuICAgICAqIOS6juaYr+KAnOiEmuacrOWcqOOAgemihOWItuS9k+S4ouS6huKAneeahCBWaWV3IOS5n+S8muiiq+WIl+WHuuadpe+8jOeCueS6huaJjeWksei0peOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeVZpZXdzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIHJldHVybiBsaXN0Vmlld3Moc25hcClcclxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcilcclxuICAgICAgICAgICAgLm1hcCgodikgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHYuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgc2NyaXB0VXJsOiBkYlVybCh2LnNjcmlwdEZpbGUpLFxyXG4gICAgICAgICAgICAgICAgcHJlZmFiVXJsOiB2LnJlZ2lzdGVyZWRQYXRoID8gZGJVcmwoYCR7UkVTT1VSQ0VTX0RJUn0vJHt2LnJlZ2lzdGVyZWRQYXRofS5wcmVmYWJgKSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgcHJlZmFiRXhpc3RzOiB2LnJlZ2lzdGVyZWRQYXRoID8gc25hcC5wcmVmYWJzQnlSZXNvdXJjZVBhdGhbdi5yZWdpc3RlcmVkUGF0aF0gIT09IHVuZGVmaW5lZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXI6IHYucmVnaXN0ZXJlZExheWVyID8/ICcnLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgIC8qKiBtYW5hZ2VyIOWIl+ihqO+8iGFzc2V0cy9zY3JpcHRzL21hbmFnZXIg5LiL55u05bGe55qEICpNYW5hZ2VyLnRz77yJICovXHJcbiAgICBhc3luYyBxdWVyeU1hbmFnZXJzKCkge1xyXG4gICAgICAgIHJldHVybiBsaXN0TWFuYWdlcnMoc25hcHNob3QoKSkubWFwKChtKSA9PiAoe1xyXG4gICAgICAgICAgICBuYW1lOiBtLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgZmlsZTogbS5zY3JpcHRGaWxlLFxyXG4gICAgICAgICAgICBleHRlbmRzU2luZ2xldG9uOiBtLmV4dGVuZHNTaW5nbGV0b24sXHJcbiAgICAgICAgICAgIGJhc2VDbGFzczogbS5iYXNlQ2xhc3MsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uiBtYW5hZ2Vy77ya55Sf5oiQ5LiA5Liq57un5om/5qGG5p62IEFTaW5nbGV0b24g55qE5YWo5bGA5Y2V5L6L6ISa5pys44CCXHJcbiAgICAgKiBAcGFyYW0gbWFuYWdlck5hbWUg5ZCN5a2X77yM5aaCIFwiY29uZmlnXCIgLyBcIkNvbmZpZ1wiIC8gXCJDb25maWdNYW5hZ2VyXCJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlTWFuYWdlcihtYW5hZ2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtYW5hZ2VyTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1hbmFnZXJOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBtYW5hZ2VyIOWQjTogXCIke21hbmFnZXJOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZU1hbmFnZXJOYW1lKG1hbmFnZXJOYW1lKTtcclxuICAgICAgICBjb25zdCBkaXJVcmwgPSBgZGI6Ly8ke01BTkFHRVJfRElSfWA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke2RpclVybH0vJHtjbGFzc05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoc2NyaXB0VXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1hbmFnZXIg5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk5a6D77yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBzY3JpcHRVcmwsIGJ1aWxkTWFuYWdlclNjcmlwdChjbGFzc05hbWUsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uiBtYW5hZ2VyIOWksei0pTogJHtzY3JpcHRVcmx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGlyVXJsKTtcclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIHNjcmlwdFVybCwgZmlsZTogYCR7TUFOQUdFUl9ESVJ9LyR7Y2xhc3NOYW1lfS50c2AgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWIoOmZpCBtYW5hZ2VyIOiEmuacrCAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTWFuYWdlcihtYW5hZ2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtYW5hZ2VyTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1hbmFnZXJOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBtYW5hZ2VyIOWQjTogXCIke21hbmFnZXJOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZU1hbmFnZXJOYW1lKG1hbmFnZXJOYW1lKTtcclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgZGI6Ly8ke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHNjcmlwdFVybCk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5YiwIG1hbmFnZXIg6ISa5pys77yaJHtjbGFzc05hbWV9LnRzYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7TUFOQUdFUl9ESVJ9YCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCByZW1vdmVkOiBzY3JpcHRVcmwgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaTmqKHlnZfliY3nmoTlvJXnlKjmo4Dmn6XvvJrlk6rkupvotYTmupDlvJXnlKjkuobor6XmqKHlnZfnmoTohJrmnKzjgIJcclxuICAgICAqIOmdouadv+WcqOehruiupOahhumHjOWxleekuu+8jOmBv+WFjeWIoOWujOeVmeS4i+aCrOepuuW8leeUqOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZVJlZnMobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3Qgdmlld3MgPSBsaXN0Vmlld3Moc25hcCkuZmlsdGVyKCh2KSA9PiB2Lm1vZHVsZURpciA9PT0gbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBjaWRzID0gdmlld3MubWFwKCh2KSA9PiBzbmFwLnNjcmlwdENpZHNbdi5zY3JpcHRGaWxlXSkuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZUNpZCA9IHNuYXAuc2NyaXB0Q2lkc1tgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke25vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5tb2R1bGVDbGFzc30udHNgXTtcclxuICAgICAgICBjb25zdCBhbGxDaWRzID0gbW9kdWxlQ2lkID8gY2lkcy5jb25jYXQoW21vZHVsZUNpZF0pIDogY2lkcztcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2aWV3czogdmlld3MubWFwKCh2KSA9PiB2LmNsYXNzTmFtZSksXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZWRCeTogZmluZEFzc2V0UmVmcyhzbmFwLCBhbGxDaWRzKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Zyo57yW6L6R5Zmo6YeM5omT5byA5p+Q5Liq5bel56iL5YaF5paH5Lu277yI5L2T5qOA57uT5p6cL+amguiniOeCueWHu+WumuS9jeeUqO+8iSAqL1xyXG4gICAgYXN5bmMgb3BlblNvdXJjZShyZWxQYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXJlbFBhdGggfHwgcmVsUGF0aC5pbmNsdWRlcygnLi4nKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOi3r+W+hDogXCIke3JlbFBhdGh9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXJsID0gZGJVcmwocmVsUGF0aCk7XHJcbiAgICAgICAgLy8g5YWI56Gu6K6k6LWE5rqQ5a2Y5Zyo5LiU5bey6KKr57yW6L6R5Zmo5a+85YWl77yM5YaN6LCI5omT5byA77yb5ZCm5YiZ57uZ5Ye65piO56Gu5Y6f5ZugXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOi1hOa6kOS4jeWtmOWcqOaIluacquiiq+e8lui+keWZqOWvvOWFpTogJHtyZWxQYXRofWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdvcGVuLWFzc2V0JywgdXJsKTtcclxuICAgICAgICByZXR1cm4geyB1cmwgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7rmqKHlnZfvvJrnlJ/miJAgTW9kdWxlICsgTW9kZWwgKyDkuovku7blo7DmmI4g5LiJ5Liq6ISa5pys44CCXHJcbiAgICAgKiBAcGFyYW0gbW9kdWxlTmFtZSDmqKHlnZflkI3vvIzlpoIgXCJiYWdcIiAvIFwiQmFnXCIgLyBcIkJhZ01vZHVsZVwiXHJcbiAgICAgKiBAcGFyYW0gb3JkZXIgICAgICDmqKHlnZflkK/liqjpobrluo9cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZywgb3JkZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKG9yZGVyKSB8fCBvcmRlciA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuYW1pbmcgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bmFtaW5nLmRpcn1gO1xyXG5cclxuICAgICAgICAvLyDlhYjmn6XlrZjlnKjmgKfvvIznu5nlh7rmmI7noa7ljp/lm6DvvIjml6fniYjlj6rlnKggY3JlYXRlLWFzc2V0IOi/lOWbnuepuuaXtuivtOKAnOWPr+iDveW3suWtmOWcqOKAne+8iVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZVVybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcubW9kdWxlQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBtb2RlbFVybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcubW9kZWxDbGFzc30udHNgO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50c1VybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcuZXZlbnRzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhtb2R1bGVVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z2X5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kdWxlQ2xhc3N9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhtb2RlbFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnovlt7LlrZjlnKjvvJoke25hbWluZy5tb2RlbENsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoZXZlbnRzVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOS6i+S7tuWjsOaYjuW3suWtmOWcqO+8miR7bmFtaW5nLmV2ZW50c05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIobW9kdWxlRGlyVXJsKTtcclxuXHJcbiAgICAgICAgLyoqIOW3suWIm+W7uuaIkOWKn+eahOi1hOa6kO+8m+S7u+S4gOatpeWksei0peaXtuaMiemAhuW6j+Wbnua7mu+8jOmBv+WFjeeVmeS4i+WNiuaIkOWTgSAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgY29uc3QgY3JlYXRlT3JSb2xsYmFjayA9IGFzeW5jICh1cmw6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCB1cmwsIGNvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGNyZWF0ZWQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb25lIG9mIGNyZWF0ZWQucmV2ZXJzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0JywgZG9uZSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBtb2R1bGVEaXJVcmwpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGDliJvlu7oke2xhYmVsfeWksei0pTogJHt1cmx9JHtjb3VudCA+IDAgPyBg77yI5bey5Zue5ruaICR7Y291bnR9IOS4quaWh+S7tu+8iWAgOiAnJ31gLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVkLnB1c2godXJsKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKFxyXG4gICAgICAgICAgICBtb2R1bGVVcmwsIGJ1aWxkTW9kdWxlU2NyaXB0KG5hbWluZy5tb2R1bGVDbGFzcywgbmFtaW5nLm1vZGVsQ2xhc3MsIG9yZGVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z2XJyxcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2sobW9kZWxVcmwsIGJ1aWxkTW9kZWxTY3JpcHQobmFtaW5nLm1vZGVsQ2xhc3MsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksICfmqKHlnosnKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKGV2ZW50c1VybCwgYnVpbGRFdmVudHNTY3JpcHQobmFtaW5nLmRpciwgbmFtaW5nLm1vZHVsZUNsYXNzKSwgJ+S6i+S7tuWjsOaYjicpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGlyTmFtZTogbmFtaW5nLmRpcixcclxuICAgICAgICAgICAgcHJlZml4OiBuYW1pbmcucHJlZml4LFxyXG4gICAgICAgICAgICBtb2R1bGVVcmwsXHJcbiAgICAgICAgICAgIG1vZGVsVXJsLFxyXG4gICAgICAgICAgICBldmVudHNVcmwsXHJcbiAgICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5pu05paw5qih5Z2X55qEIG9yZGVy77ya5YaZ5ZueIE1vZHVsZSDohJrmnKznmoQgQFJlZ2lzdGVyTW9kdWxlKHtvcmRlcn0p44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU1vZHVsZU9yZGVyKG1vZHVsZU5hbWU6IHN0cmluZywgb3JkZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKG9yZGVyKSB8fCBvcmRlciA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gcmVhZGRpclN5bmMobW9kdWxlRGlyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+ebruW9lTogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZUZpbGUgPSBmaWxlcy5maW5kKChmKSA9PiBmLmVuZHNXaXRoKCdNb2R1bGUudHMnKSk7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVGaWxlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5Yiw5qih5Z2X6ISa5pysOiAke21vZHVsZURpcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihtb2R1bGVEaXJQYXRoLCBtb2R1bGVGaWxlKTtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKTtcclxuICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9vcmRlclxccyo6XFxzKlxcZCsvLCBgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmnKrlnKggJHttb2R1bGVGaWxlfSDkuK3mib7liLAgb3JkZXIg5a2X5q61YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIG5ld0NvbnRlbnQpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IG1vZHVsZU5hbWU6IG1vZHVsZURpciwgb3JkZXIgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogVmlld++8muWcqOaMh+WumuaooeWdl+S4i+eUn+aIkOiEmuacrCArIOmihOWItuS9k++8jOW5tuaKiuiEmuacrOaMgui9veWIsOmihOWItuS9k+agueiKgueCueOAglxyXG4gICAgICogQHBhcmFtIHRlbXBsYXRlIOmihOWItuS9k+aooeadv++8jOingSBjb25zdGFudHMuUFJFRkFCX1RFTVBMQVRFU1xyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVWaWV3KG1vZHVsZU5hbWU6IHN0cmluZywgdmlld05hbWU6IHN0cmluZywgbGF5ZXI6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZyA9ICdlbXB0eScpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2aWV3TmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KHZpZXdOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOinhuWbvuWQjTogXCIke3ZpZXdOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghTEFZRVJTLmluY2x1ZGVzKGxheWVyIGFzIGFueSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTlsYLnuqc6IFwiJHtsYXllcn1cIu+8iOWQiOazleWAvO+8miR7TEFZRVJTLmpvaW4oJywgJyl977yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNQcmVmYWJUZW1wbGF0ZSh0ZW1wbGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTpooTliLbkvZPmqKHmnb86IFwiJHt0ZW1wbGF0ZX1cIu+8iOWQiOazleWAvO+8miR7UFJFRkFCX1RFTVBMQVRFUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiUGF0aCA9IHZpZXdQcmVmYWJQYXRoKG1vZHVsZURpciwgY2xhc3NOYW1lKTtcclxuXHJcbiAgICAgICAgLy8g6Leo5qih5Z2X6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yIVmlld01hbmFnZXIg5oyJ57G75ZCN5YWo5bGA5p+l5om+77yJ77yM5o+Q5YmN5oyh5L2PXHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3QgY2xhc2ggPSBsaXN0Vmlld3Moc25hcCkuZmluZChcclxuICAgICAgICAgICAgKHYpID0+IHYuY2xhc3NOYW1lID09PSBjbGFzc05hbWUgJiYgdi5tb2R1bGVEaXIgIT09IG1vZHVsZURpcixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjbGFzaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgVmlldyDlkI3lrZcgXCIke2NsYXNzTmFtZX1cIiDlt7LooqvmqKHlnZcgXCIke2NsYXNoLm1vZHVsZURpcn1cIiDljaDnlKjvvJtgICtcclxuICAgICAgICAgICAgICAgIGDmoYbmnrbmjInnsbvlkI3lhajlsYDmn6Xmib7vvIzph43lkI3kvJrliqDovb3plJnpooTliLbkvZPvvIzor7fmjaLkuKrlkI3lrZdgLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgdmlld3NEaXJVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfWA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7dmlld3NEaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWV3IOiEmuacrOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRWaWV3U2NyaXB0KGNsYXNzTmFtZSwgcHJlZmFiUGF0aCwgbGF5ZXIsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0QXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBzY3JpcHRDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghc2NyaXB0QXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rohJrmnKzlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJlZmFiRGlyVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn1gO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlVybCA9IGAke3ByZWZhYkRpclVybH0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKHByZWZhYkRpclVybCk7XHJcblxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhwcmVmYWJVcmwpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpooTliLbkvZPlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0ucHJlZmFi77yI5bey5Zue5rua6ISa5pys77yM5aaC6ZyA6YeN5bu66K+35YWI5Yig6Zmk6K+lIFZpZXfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRVdWlkID0gY29tcHJlc3NVdWlkKHNjcmlwdEFzc2V0LnV1aWQpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoYnVpbGRWaWV3UHJlZmFiKGNsYXNzTmFtZSwgY29tcHJlc3NlZFV1aWQsIHRlbXBsYXRlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZhYkFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBwcmVmYWJVcmwsIHByZWZhYkNvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIXByZWZhYkFzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uumihOWItuS9k+Wksei0pTogJHtwcmVmYWJVcmx9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIOWbnua7muiEmuacrO+8jOmBv+WFjeeVmeS4i+KAnOacieiEmuacrOayoemihOWItuS9k+KAneeahOWNiuaIkOWTgVxyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCB2aWV3c0RpclVybCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgcHJlZmFiRGlyVXJsKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIG1vZHVsZURpciwgc2NyaXB0VXJsLCBwcmVmYWJVcmwsIHByZWZhYlBhdGgsIGxheWVyLCB0ZW1wbGF0ZSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpCB2aWV377ya5Y+q5Yig6Ieq6Lqr77yI6ISa5pysICsg6aKE5Yi25L2TICsg5ZCE6IeqIG1ldGHvvInvvIzkuI3norDlhbbku5botYTmupDjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2aWV3TmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KHZpZXdOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOinhuWbvuWQjTogXCIke3ZpZXdOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZVZpZXdOYW1lKHZpZXdOYW1lKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfS8ke2NsYXNzTmFtZX0ucHJlZmFiYDtcclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfS8ke2NsYXNzTmFtZX0udHNgO1xyXG5cclxuICAgICAgICBjb25zdCBkZWxldGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIFtwcmVmYWJVcmwsIHNjcmlwdFVybF0pIHtcclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpO1xyXG4gICAgICAgICAgICBpZiAoaW5mbykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0JywgdXJsKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWQucHVzaCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmuIXnkIbnqbrnm67lvZXvvIjml6fniYjkvJrnlZnkuIsgcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+IOi/meenjeepuuWjs++8iVxyXG4gICAgICAgIGF3YWl0IHBydW5lRW1wdHlEaXIoam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfWApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIGRlbGV0ZWQgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaTmqKHlnZfvvJrliKAgZ2FtZXBsYXkvPOaooeWdlz4vIOS4jiByZXNvdXJjZXMvdmlld3MvPOaooeWdlz4vIOS4pOS4quebruW9le+8iOi/nuWQjCBtZXRh77yJ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgR0FNRVBMQVlfRElSLCBtb2R1bGVEaXIpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIFJFU09VUkNFU19ESVIsICd2aWV3cycsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIFtwcmVmYWJEaXJQYXRoLCBtb2R1bGVEaXJQYXRoXSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVTeW5jKHApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLyog5LiN5a2Y5Zyo5YiZ6Lez6L+HICovXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzYCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKEdBTUVQTEFZX0RJUikpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVEaXIsIHJlbW92ZWQgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivouWFrOWFseaooeWdl++8muacrOWcsOW3peS9nOWMuiArIOW3suWuieijhSArIOi/nOeoiyByZWdpc3RyeeOAglxyXG4gICAgICogQHBhcmFtIGZvcmNlIOW8uuWItumHjeaWsOaLieWPlui/nOeoi+WIl+ihqO+8iOmdouadv+eahOOAjOWIt+aWsOOAjeeUqO+8iVxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeVNoYXJlZE1vZHVsZXMoZm9yY2U/OiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXJ5U2hhcmVkU3RhdGUoZm9yY2UgPT09IHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWuieijheS4gOS4quWFrOWFseaooeWdl++8mioq55u05o6l5Luj6LeRIGBucG0gaW5zdGFsbGAqKuOAglxyXG4gICAgICog5aSx6LSl5pe25oqb5Ye655qE6ZSZ6K+v6YeM5bim552AIG5wbSDnmoTljp/lp4vovpPlh7rvvIzpnaLmnb/kvJrljp/moLflsZXnpLrjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5zdGFsbFNoYXJlZE1vZHVsZShwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1blNoYXJlZEFjdGlvbignaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWNuOi9veS4gOS4quWFrOWFseaooeWdl++8muebtOaOpeS7o+i3kSBgbnBtIHVuaW5zdGFsbGAgKi9cclxuICAgIGFzeW5jIHVuaW5zdGFsbFNoYXJlZE1vZHVsZShwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1blNoYXJlZEFjdGlvbigndW5pbnN0YWxsJywgcGFja2FnZU5hbWUpO1xyXG4gICAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIFRyaWdnZXJlZCBvbiBFeHRlbnNpb24gU3RhcnR1cFxyXG4gKiBAemgg5omp5bGV5ZCv5Yqo5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZCgpIHsgfVxyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgdHJpZ2dlcmVkIHdoZW4gdW5pbnN0YWxsaW5nIHRoZSBleHRlbnNpb25cclxuICogQHpoIOWNuOi9veaJqeWxleaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVubG9hZCgpIHsgfVxyXG4iXX0=
|
package/dist/registry.js
CHANGED
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
* | 一次大约 1~4 秒 | 调用方必须缓存,不能每次刷新面板都去搜 |
|
|
19
19
|
*/
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.KNOWN_PACKAGES = exports.REGISTRY_SEARCH_LIMIT = void 0;
|
|
21
|
+
exports.KNOWN_PACKAGES = exports.NON_SHARED_PACKAGES = exports.REGISTRY_SEARCH_LIMIT = void 0;
|
|
22
22
|
exports.npmSearchArgv = npmSearchArgv;
|
|
23
23
|
exports.formatNpmSearchCommand = formatNpmSearchCommand;
|
|
24
24
|
exports.parseSearchResults = parseSearchResults;
|
|
25
|
+
exports.isSharedModulePackage = isSharedModulePackage;
|
|
25
26
|
exports.viewArgv = viewArgv;
|
|
26
27
|
exports.parseViewResult = parseViewResult;
|
|
27
28
|
const constants_1 = require("./constants");
|
|
@@ -104,6 +105,21 @@ function parseSearchResults(raw, keyword = constants_1.DISCOVERY_KEYWORD) {
|
|
|
104
105
|
* 于是"公共模块远程列表"和使用者看到的"最新版本"都会是空的。
|
|
105
106
|
* 代价是新增一个包时要在这里加一行 —— 这是明知并接受的。
|
|
106
107
|
*/
|
|
108
|
+
/**
|
|
109
|
+
* 这些**不是**公共模块,虽然也是我们自己发的:
|
|
110
|
+
*
|
|
111
|
+
* 框架是"框架本身",扩展是"编辑器工具" —— 使用者的公共模块列表里不该出现它们。
|
|
112
|
+
* 它们在工程里确实装着(都是依赖),所以 `isSharedModuleManifest` 那条路也会把它们
|
|
113
|
+
* 当"已安装"算进来 —— 因此过滤要同时作用在"远程列表"和"已安装列表"上。
|
|
114
|
+
*/
|
|
115
|
+
exports.NON_SHARED_PACKAGES = [
|
|
116
|
+
'@ccgf/framework',
|
|
117
|
+
'ccgf-game-tool',
|
|
118
|
+
];
|
|
119
|
+
/** 远程列表里只保留真正的公共模块 */
|
|
120
|
+
function isSharedModulePackage(name) {
|
|
121
|
+
return exports.NON_SHARED_PACKAGES.indexOf(name) < 0;
|
|
122
|
+
}
|
|
107
123
|
exports.KNOWN_PACKAGES = [
|
|
108
124
|
'@ccgf/framework',
|
|
109
125
|
'@ccgf/pathfinding',
|
|
@@ -160,4 +176,4 @@ function parseViewResult(text) {
|
|
|
160
176
|
: {},
|
|
161
177
|
};
|
|
162
178
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRzs7O0FBU0gsc0NBU0M7QUFHRCx3REFFQztBQXNCRCxnREFrREM7QUFrQkQsNEJBRUM7QUFTRCwwQ0FnQ0M7QUExSkQsMkNBQWdEO0FBR2hELGlCQUFpQjtBQUNKLFFBQUEscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRXpDLDBCQUEwQjtBQUMxQixTQUFnQixhQUFhLENBQUMsVUFBa0IsNkJBQWlCO0lBQzdELE9BQU87UUFDSCxRQUFRO1FBQ1IsWUFBWSxPQUFPLEVBQUU7UUFDckIsUUFBUTtRQUNSLGlCQUFpQiw2QkFBcUIsRUFBRTtRQUN4QyxZQUFZO1FBQ1osV0FBVztLQUNkLENBQUM7QUFDTixDQUFDO0FBRUQsd0JBQXdCO0FBQ3hCLFNBQWdCLHNCQUFzQixDQUFDLFVBQWtCLDZCQUFpQjtJQUN0RSxPQUFPLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFZRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDOUIsR0FBVyxFQUNYLFVBQWtCLDZCQUFpQjtJQUVuQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsYUFBSCxHQUFHLGNBQUgsR0FBRyxHQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE1BQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5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QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDku44gbnBtIHJlZ2lzdHJ5IOWPkeeOsOWFrOWFseaooeWdlyDigJTigJQgKirnuq/pgLvovpEqKu+8jOS4jeeisOe9kee7nO+8jOS5n+S4jei1t+i/m+eoi+OAglxuICpcbiAqICMjIOS4uuS7gOS5iOi1sCBgbnBtIHNlYXJjaGAg6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTXG4gKlxuICogbnBtIOS8mioq6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgKirvvIhyZWdpc3RyeeOAgeS7o+eQhuOAgeiupOivgeOAgWNhZmlsZe+8ieKAlOKAlFxuICog6Ieq5bex5Y+R6K+35rGC5bCx5b6X5oqK6L+Z5Lqb5YWo6YOo6YeN5paw5a6e546w5LiA6YGN77yM6ICM56eB5pyJIHJlZ2lzdHJ5IOaBsOaBsOS+nei1luWug+S7rOOAglxuICog5Y+m5aSW6L+Z5Y+w5py65Zmo5LiKIGBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTBgIOaYryBNYWNoaW5lIOe6p+iuvue9ru+8jFxuICog5Lqk57uZIG5wbSDoh7PlsJHog73lkoznlKjmiLflhbblroMgbnBtIOaTjeS9nOS/neaMgeWQjOS4gOWll+ihjOS4uuOAglxuICpcbiAqICMjIOWunua1i+e7k+iuuu+8iOWGs+WumuS6huS4i+mdoui/meWHoOS4que7huiKgu+8iVxuICpcbiAqIHwg5LqL5a6eIHwg5b2x5ZONIHxcbiAqIHwgLS0tIHwgLS0tIHxcbiAqIHwgYGtleXdvcmRzOmAg5pivKirnsr7noa4qKuWMuemFje+8jOe6r+aWh+acrOaYr+aooeeziuWMuemFjSB8IOW/hemhu+W4pumZkOWumuespiDigJTigJQg5ZCm5YiZ5pCcIGBjY2dmLXNoYXJlZGAg5Lya5pCc5Ye6IGBpcy1zaGFyZWQtYXJyYXktYnVmZmVyYCDov5nnp43ml6DlhbPljIUgfFxuICogfCDmsqHmnInnu5Pmnpzml7Ygc3Rkb3V0IOaYr+W5suWHgOeahCBgW11g77yM6YCA5Ye656CBIDAgfCBcIuayoeaQnOWIsFwi5LiOXCLmkJzlpLHotKVcIuW/hemhu+WIhuW8gOWkhOeQhiB8XG4gKiB8IOS4gOasoeWkp+e6piAxfjQg56eSIHwg6LCD55So5pa55b+F6aG757yT5a2Y77yM5LiN6IO95q+P5qyh5Yi35paw6Z2i5p2/6YO95Y675pCcIHxcbiAqL1xuXG5pbXBvcnQgeyBESVNDT1ZFUllfS0VZV09SRCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIOS4gOasoeaQnOe0ouacgOWkmuimgeWkmuWwkeadoSAqL1xuZXhwb3J0IGNvbnN0IFJFR0lTVFJZX1NFQVJDSF9MSU1JVCA9IDI1MDtcblxuLyoqIOe7hOijhSBgbnBtIHNlYXJjaGAg55qE5Y+C5pWwICovXG5leHBvcnQgZnVuY3Rpb24gbnBtU2VhcmNoQXJndihrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnc2VhcmNoJyxcbiAgICAgICAgYGtleXdvcmRzOiR7a2V5d29yZH1gLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgYC0tc2VhcmNobGltaXQ9JHtSRUdJU1RSWV9TRUFSQ0hfTElNSVR9YCxcbiAgICAgICAgJy0tbm8tYXVkaXQnLFxuICAgICAgICAnLS1uby1mdW5kJyxcbiAgICBdO1xufVxuXG4vKiog5bGV56S655So55qE5ZG95Luk6KGM77yI5LiO55yf5q2j5omn6KGM55qE5LiA6Ie077yJICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnBtU2VhcmNoQ29tbWFuZChrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBucG0gJHtucG1TZWFyY2hBcmd2KGtleXdvcmQpLmpvaW4oJyAnKX1gO1xufVxuXG4vKiog6Kej5p6Q57uT5p6cICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpc3RyeVBhcnNlUmVzdWx0IHtcbiAgICBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107XG4gICAgLyoqXG4gICAgICog6L6T5Ye65LiN5piv5oiR5Lus6K6k6K+G55qE5b2i54q244CCXG4gICAgICog6L+ZKirkuI3nrYnkuo5cIuayoeacieaooeWdl1wiKiog4oCU4oCUIOiwg+eUqOaWueimgeaKiuWug+W9k+aIkOWksei0peadpeaPkOekuu+8jOWQpuWImeeUqOaIt+S8muS7peS4uuS7k+W6k+aYr+epuueahOOAglxuICAgICAqL1xuICAgIG1hbGZvcm1lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDop6PmnpAgYG5wbSBzZWFyY2ggLS1qc29uYCDnmoTovpPlh7rjgIJcbiAqXG4gKiDlrrnplJnmmK/liLvmhI/nmoTvvJrov5nkuKrovpPlh7rmnaXoh6rlpJbpg6ggcmVnaXN0cnnvvIzlvaLnirbkuI3lj5fmiJHku6zmjqfliLbvvIjlrZfmrrXnvLrlpLHjgIHmoLnmnKzkuI3mmK8gSlNPTuOAgVxuICog55Sa6Iez5LiN5piv5pWw57uE77yJ44CCKirnu53kuI3mipvlvILluLgqKu+8jOS4gOW+i+mZjee6p+aIkFwi5rKh5pyJ5p2h55uuXCLmiJYgYG1hbGZvcm1lZGDjgIJcbiAqXG4gKiBAcGFyYW0ga2V5d29yZCDmnJ/mnJvmr4/mnaHnu5Pmnpzpg73lo7DmmI7nmoTlhbPplK7or43vvIjpu5jorqTlsLHmmK/lj5HnjrDlhbPplK7or43vvInjgIJcbiAqICAgICAgICDnlKjlroPmmK/kuLrkuoblhZzkvY9cInJlZ2lzdHJ5IOW/veeVpeS6hiBga2V5d29yZHM6YCDpmZDlrprnrKblgZrkuobmqKHns4rljLnphY1cIui/meenjeaDheWGte+8m1xuICogICAgICAgIOWunua1i+e6r+aWh+acrOaQnOe0oiBgY2NnZi1zaGFyZWRgIOS8muaKiiBgaXMtc2hhcmVkLWFycmF5LWJ1ZmZlcmAg5pCc5Ye65p2l44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlYXJjaFJlc3VsdHMoXG4gICAgcmF3OiBzdHJpbmcsXG4gICAga2V5d29yZDogc3RyaW5nID0gRElTQ09WRVJZX0tFWVdPUkQsXG4pOiBJUmVnaXN0cnlQYXJzZVJlc3VsdCB7XG4gICAgY29uc3QgdGV4dCA9IChyYXcgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogW10sIG1hbGZvcm1lZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSwgbWFsZm9ybWVkOiB0cnVlIH07XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IFtdLCBtYWxmb3JtZWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyc2VkKSB7XG4gICAgICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgcmVjb3JkLm5hbWUgPT09ICdzdHJpbmcnID8gcmVjb3JkLm5hbWUgOiAnJztcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShyZWNvcmQua2V5d29yZHMpID8gcmVjb3JkLmtleXdvcmRzIDogW107XG4gICAgICAgIGlmICgha2V5d29yZHMuaW5jbHVkZXMoa2V5d29yZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0eXBlb2YgcmVjb3JkLnZlcnNpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLnZlcnNpb24gOiAnMC4wLjAnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiByZWNvcmQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgICAgICBzb3VyY2U6ICdyZWdpc3RyeScsXG4gICAgICAgICAgICAvLyDmjInljIXlkI3oo4XvvIhucG0g5Lya5Y+W5pyA5paw54mI77yJ77yb5pCc57Si57uT5p6c6YeM5rKh5pyJ5L6d6LWW5L+h5oGv77yM5a6J6KOF5ZCO5YaN5pi+56S6XG4gICAgICAgICAgICBzcGVjOiBuYW1lLFxuICAgICAgICAgICAgbG9jYWxQYXRoOiBudWxsLFxuICAgICAgICAgICAgZGVjbGFyZWREZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgLy8g5pCc57Si57uT5p6c6YeMKirmsqHmnIkqKuS+nei1luS/oeaBryDigJTigJQg55WM6Z2i5b+F6aG75o2u5q2k6K+0XCLlronoo4XlkI7lj6/mn6XnnItcIu+8jOiAjOS4jeaYr1wi5rKh5pyJ5L6d6LWWXCJcbiAgICAgICAgICAgIGRlcGVuZGVuY2llc0tub3duOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZW50cmllcywgbWFsZm9ybWVkOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIOW3suefpeeahOOAgeaIkeS7rOiHquW3seWPkeW4g+eahOWMheOAglxuICpcbiAqICoq6L+Z6YeM5piv5omL5bel57u05oqk55qE5ZCN5Y2VKiog4oCU4oCUIOaWueahiCBCOuS4jeWGjeS+nei1liBgbnBtIHNlYXJjaGDjgIJcbiAqIOWOn+WboDpucG0g5pCc57Si5a+5IHNjb3BlZCDljIUoYEBjY2dmLypgKeW+iOS4jeWPr+mdoCzluLjluLjmkJzkuI3liLAsXG4gKiDkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKM5L2/55So6ICF55yL5Yiw55qEXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahOOAglxuICog5Luj5Lu35piv5paw5aKe5LiA5Liq5YyF5pe26KaB5Zyo6L+Z6YeM5Yqg5LiA6KGMIOKAlOKAlCDov5nmmK/mmI7nn6XlubbmjqXlj5fnmoTjgIJcbiAqL1xuZXhwb3J0IGNvbnN0IEtOT1dOX1BBQ0tBR0VTID0gW1xuICAgICdAY2NnZi9mcmFtZXdvcmsnLFxuICAgICdAY2NnZi9wYXRoZmluZGluZycsXG4gICAgJ0BjY2dmL2Zsb3ctZmllbGQnLFxuICAgICdjY2dmLWdhbWUtdG9vbCcsXG5dO1xuXG4vKiog57K+56Gu5p+l5LiA5Liq5YyFOmBucG0gdmlldyA8bmFtZT4gLS1qc29uYCjlr7nmr5QgbnBtU2VhcmNoQXJndiDnmoTmqKHns4rmkJzntKIpICovXG5leHBvcnQgZnVuY3Rpb24gdmlld0FyZ3YobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3ZpZXcnLCBuYW1lLCAnLS1qc29uJ107XG59XG5cbi8qKlxuICog6Kej5p6QIGBucG0gdmlldyA8bmFtZT4gLS1qc29uYCDnmoTnu5PmnpzjgIJcbiAqXG4gKiDlrp7mtYsgbnBtIOacieaXtue7mSoq5a+56LGhKioo5Y2V5LiqIG1hbmlmZXN0KSzmnInml7bnu5kqKuaVsOe7hCoqKOWkmuS4queJiOacrOmDveWMuemFjSnigJTigJRcbiAqIOaJgOS7peS4pOenjemDveimgeWQgzrmlbDnu4Tml7blj5YqKuacgOWQjuS4gOS4qioqKG5wbSDmjInniYjmnKzljYfluo/ov5Tlm54s5pyr5bC+5Y2z5pyA5pawKeOAglxuICog5b2i54q25LiN5a+55bCx6L+U5ZueIG51bGwsKirkuI3opoHoo4XkvZxcIuafpeWIsOS6hlwiKiog4oCU4oCUIOS4iuWxguaNruatpOaYvuekulwi5peg5rOV56Gu6K6kXCLjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmlld1Jlc3VsdCh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogSVNoYXJlZENhdGFsb2dFbnRyeSB8IG51bGwge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGRhdGE6IHVua25vd247XG4gICAgdHJ5IHsgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgbGV0IG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFuaWZlc3QgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtYW5pZmVzdCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIGlmICghbWFuaWZlc3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBtYW5pZmVzdC5uYW1lID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0Lm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0eXBlb2YgbWFuaWZlc3QudmVyc2lvbiA9PT0gJ3N0cmluZycgPyBtYW5pZmVzdC52ZXJzaW9uIDogbnVsbDtcbiAgICBpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgc291cmNlOiAncmVnaXN0cnknLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIG1hbmlmZXN0LmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0LmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgIGRlY2xhcmVkRGVwZW5kZW5jaWVzOiAobWFuaWZlc3QuZGVwZW5kZW5jaWVzICYmIHR5cGVvZiBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgPyBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgICAgICAgICAgOiB7fSxcbiAgICB9IGFzIElTaGFyZWRDYXRhbG9nRW50cnk7XG59XG4iXX0=
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zb3VyY2UvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRzs7O0FBU0gsc0NBU0M7QUFHRCx3REFFQztBQXNCRCxnREFrREM7QUF1QkQsc0RBRUM7QUFTRCw0QkFFQztBQVNELDBDQWdDQztBQTFLRCwyQ0FBZ0Q7QUFHaEQsaUJBQWlCO0FBQ0osUUFBQSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFekMsMEJBQTBCO0FBQzFCLFNBQWdCLGFBQWEsQ0FBQyxVQUFrQiw2QkFBaUI7SUFDN0QsT0FBTztRQUNILFFBQVE7UUFDUixZQUFZLE9BQU8sRUFBRTtRQUNyQixRQUFRO1FBQ1IsaUJBQWlCLDZCQUFxQixFQUFFO1FBQ3hDLFlBQVk7UUFDWixXQUFXO0tBQ2QsQ0FBQztBQUNOLENBQUM7QUFFRCx3QkFBd0I7QUFDeEIsU0FBZ0Isc0JBQXNCLENBQUMsVUFBa0IsNkJBQWlCO0lBQ3RFLE9BQU8sT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDckQsQ0FBQztBQVlEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGtCQUFrQixDQUM5QixHQUFXLEVBQ1gsVUFBa0IsNkJBQWlCO0lBRW5DLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDZCxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksTUFBZSxDQUFDO0lBQ3BCLElBQUksQ0FBQztRQUNELE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQTBCLEVBQUUsQ0FBQztJQUMxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsU0FBUztRQUNiLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUErQixDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixTQUFTO1FBQ2IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QixTQUFTO1FBQ2IsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJO1lBQ0osT0FBTyxFQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDdEUsV0FBVyxFQUFFLE9BQU8sTUFBTSxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0UsTUFBTSxFQUFFLFVBQVU7WUFDbEIscUNBQXFDO1lBQ3JDLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLElBQUk7WUFDZixvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLCtDQUErQztZQUMvQyxpQkFBaUIsRUFBRSxLQUFLO1NBQzNCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNIOzs7Ozs7R0FNRztBQUNVLFFBQUEsbUJBQW1CLEdBQUc7SUFDL0IsaUJBQWlCO0lBQ2pCLGdCQUFnQjtDQUNuQixDQUFDO0FBRUYsc0JBQXNCO0FBQ3RCLFNBQWdCLHFCQUFxQixDQUFDLElBQVk7SUFDOUMsT0FBTywyQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFDWSxRQUFBLGNBQWMsR0FBRztJQUMxQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixnQkFBZ0I7Q0FDbkIsQ0FBQztBQUVGLDhEQUE4RDtBQUM5RCxTQUFnQixRQUFRLENBQUMsSUFBWTtJQUNqQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLElBQStCO0lBQzNELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsSUFBSSxJQUFhLENBQUM7SUFDbEIsSUFBSSxDQUFDO1FBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQUMsT0FBTyxJQUFJLENBQUM7SUFBQyxDQUFDO0lBRXZELElBQUksUUFBUSxHQUFtQyxJQUFJLENBQUM7SUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFRLElBQWdDLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwRyxRQUFRLEdBQUcsSUFBK0IsQ0FBQztnQkFDM0MsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztTQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFDLFFBQVEsR0FBRyxJQUErQixDQUFDO0lBQy9DLENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTNCLE1BQU0sSUFBSSxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0UsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUVuQyxPQUFPO1FBQ0gsSUFBSTtRQUNKLE9BQU87UUFDUCxNQUFNLEVBQUUsVUFBVTtRQUNsQixXQUFXLEVBQUUsT0FBTyxRQUFRLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqRixvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQztZQUN0RixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQXNDO1lBQ2pELENBQUMsQ0FBQyxFQUFFO0tBQ1ksQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDku44gbnBtIHJlZ2lzdHJ5IOWPkeeOsOWFrOWFseaooeWdlyDigJTigJQgKirnuq/pgLvovpEqKu+8jOS4jeeisOe9kee7nO+8jOS5n+S4jei1t+i/m+eoi+OAglxuICpcbiAqICMjIOS4uuS7gOS5iOi1sCBgbnBtIHNlYXJjaGAg6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTXG4gKlxuICogbnBtIOS8mioq6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgKirvvIhyZWdpc3RyeeOAgeS7o+eQhuOAgeiupOivgeOAgWNhZmlsZe+8ieKAlOKAlFxuICog6Ieq5bex5Y+R6K+35rGC5bCx5b6X5oqK6L+Z5Lqb5YWo6YOo6YeN5paw5a6e546w5LiA6YGN77yM6ICM56eB5pyJIHJlZ2lzdHJ5IOaBsOaBsOS+nei1luWug+S7rOOAglxuICog5Y+m5aSW6L+Z5Y+w5py65Zmo5LiKIGBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTBgIOaYryBNYWNoaW5lIOe6p+iuvue9ru+8jFxuICog5Lqk57uZIG5wbSDoh7PlsJHog73lkoznlKjmiLflhbblroMgbnBtIOaTjeS9nOS/neaMgeWQjOS4gOWll+ihjOS4uuOAglxuICpcbiAqICMjIOWunua1i+e7k+iuuu+8iOWGs+WumuS6huS4i+mdoui/meWHoOS4que7huiKgu+8iVxuICpcbiAqIHwg5LqL5a6eIHwg5b2x5ZONIHxcbiAqIHwgLS0tIHwgLS0tIHxcbiAqIHwgYGtleXdvcmRzOmAg5pivKirnsr7noa4qKuWMuemFje+8jOe6r+aWh+acrOaYr+aooeeziuWMuemFjSB8IOW/hemhu+W4pumZkOWumuespiDigJTigJQg5ZCm5YiZ5pCcIGBjY2dmLXNoYXJlZGAg5Lya5pCc5Ye6IGBpcy1zaGFyZWQtYXJyYXktYnVmZmVyYCDov5nnp43ml6DlhbPljIUgfFxuICogfCDmsqHmnInnu5Pmnpzml7Ygc3Rkb3V0IOaYr+W5suWHgOeahCBgW11g77yM6YCA5Ye656CBIDAgfCBcIuayoeaQnOWIsFwi5LiOXCLmkJzlpLHotKVcIuW/hemhu+WIhuW8gOWkhOeQhiB8XG4gKiB8IOS4gOasoeWkp+e6piAxfjQg56eSIHwg6LCD55So5pa55b+F6aG757yT5a2Y77yM5LiN6IO95q+P5qyh5Yi35paw6Z2i5p2/6YO95Y675pCcIHxcbiAqL1xuXG5pbXBvcnQgeyBESVNDT1ZFUllfS0VZV09SRCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIOS4gOasoeaQnOe0ouacgOWkmuimgeWkmuWwkeadoSAqL1xuZXhwb3J0IGNvbnN0IFJFR0lTVFJZX1NFQVJDSF9MSU1JVCA9IDI1MDtcblxuLyoqIOe7hOijhSBgbnBtIHNlYXJjaGAg55qE5Y+C5pWwICovXG5leHBvcnQgZnVuY3Rpb24gbnBtU2VhcmNoQXJndihrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAnc2VhcmNoJyxcbiAgICAgICAgYGtleXdvcmRzOiR7a2V5d29yZH1gLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgYC0tc2VhcmNobGltaXQ9JHtSRUdJU1RSWV9TRUFSQ0hfTElNSVR9YCxcbiAgICAgICAgJy0tbm8tYXVkaXQnLFxuICAgICAgICAnLS1uby1mdW5kJyxcbiAgICBdO1xufVxuXG4vKiog5bGV56S655So55qE5ZG95Luk6KGM77yI5LiO55yf5q2j5omn6KGM55qE5LiA6Ie077yJICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnBtU2VhcmNoQ29tbWFuZChrZXl3b3JkOiBzdHJpbmcgPSBESVNDT1ZFUllfS0VZV09SRCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBucG0gJHtucG1TZWFyY2hBcmd2KGtleXdvcmQpLmpvaW4oJyAnKX1gO1xufVxuXG4vKiog6Kej5p6Q57uT5p6cICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpc3RyeVBhcnNlUmVzdWx0IHtcbiAgICBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107XG4gICAgLyoqXG4gICAgICog6L6T5Ye65LiN5piv5oiR5Lus6K6k6K+G55qE5b2i54q244CCXG4gICAgICog6L+ZKirkuI3nrYnkuo5cIuayoeacieaooeWdl1wiKiog4oCU4oCUIOiwg+eUqOaWueimgeaKiuWug+W9k+aIkOWksei0peadpeaPkOekuu+8jOWQpuWImeeUqOaIt+S8muS7peS4uuS7k+W6k+aYr+epuueahOOAglxuICAgICAqL1xuICAgIG1hbGZvcm1lZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDop6PmnpAgYG5wbSBzZWFyY2ggLS1qc29uYCDnmoTovpPlh7rjgIJcbiAqXG4gKiDlrrnplJnmmK/liLvmhI/nmoTvvJrov5nkuKrovpPlh7rmnaXoh6rlpJbpg6ggcmVnaXN0cnnvvIzlvaLnirbkuI3lj5fmiJHku6zmjqfliLbvvIjlrZfmrrXnvLrlpLHjgIHmoLnmnKzkuI3mmK8gSlNPTuOAgVxuICog55Sa6Iez5LiN5piv5pWw57uE77yJ44CCKirnu53kuI3mipvlvILluLgqKu+8jOS4gOW+i+mZjee6p+aIkFwi5rKh5pyJ5p2h55uuXCLmiJYgYG1hbGZvcm1lZGDjgIJcbiAqXG4gKiBAcGFyYW0ga2V5d29yZCDmnJ/mnJvmr4/mnaHnu5Pmnpzpg73lo7DmmI7nmoTlhbPplK7or43vvIjpu5jorqTlsLHmmK/lj5HnjrDlhbPplK7or43vvInjgIJcbiAqICAgICAgICDnlKjlroPmmK/kuLrkuoblhZzkvY9cInJlZ2lzdHJ5IOW/veeVpeS6hiBga2V5d29yZHM6YCDpmZDlrprnrKblgZrkuobmqKHns4rljLnphY1cIui/meenjeaDheWGte+8m1xuICogICAgICAgIOWunua1i+e6r+aWh+acrOaQnOe0oiBgY2NnZi1zaGFyZWRgIOS8muaKiiBgaXMtc2hhcmVkLWFycmF5LWJ1ZmZlcmAg5pCc5Ye65p2l44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlYXJjaFJlc3VsdHMoXG4gICAgcmF3OiBzdHJpbmcsXG4gICAga2V5d29yZDogc3RyaW5nID0gRElTQ09WRVJZX0tFWVdPUkQsXG4pOiBJUmVnaXN0cnlQYXJzZVJlc3VsdCB7XG4gICAgY29uc3QgdGV4dCA9IChyYXcgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogW10sIG1hbGZvcm1lZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiBbXSwgbWFsZm9ybWVkOiB0cnVlIH07XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IFtdLCBtYWxmb3JtZWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyc2VkKSB7XG4gICAgICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgcmVjb3JkLm5hbWUgPT09ICdzdHJpbmcnID8gcmVjb3JkLm5hbWUgOiAnJztcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gQXJyYXkuaXNBcnJheShyZWNvcmQua2V5d29yZHMpID8gcmVjb3JkLmtleXdvcmRzIDogW107XG4gICAgICAgIGlmICgha2V5d29yZHMuaW5jbHVkZXMoa2V5d29yZCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0eXBlb2YgcmVjb3JkLnZlcnNpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLnZlcnNpb24gOiAnMC4wLjAnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiByZWNvcmQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gcmVjb3JkLmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgICAgICBzb3VyY2U6ICdyZWdpc3RyeScsXG4gICAgICAgICAgICAvLyDmjInljIXlkI3oo4XvvIhucG0g5Lya5Y+W5pyA5paw54mI77yJ77yb5pCc57Si57uT5p6c6YeM5rKh5pyJ5L6d6LWW5L+h5oGv77yM5a6J6KOF5ZCO5YaN5pi+56S6XG4gICAgICAgICAgICBzcGVjOiBuYW1lLFxuICAgICAgICAgICAgbG9jYWxQYXRoOiBudWxsLFxuICAgICAgICAgICAgZGVjbGFyZWREZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgLy8g5pCc57Si57uT5p6c6YeMKirmsqHmnIkqKuS+nei1luS/oeaBryDigJTigJQg55WM6Z2i5b+F6aG75o2u5q2k6K+0XCLlronoo4XlkI7lj6/mn6XnnItcIu+8jOiAjOS4jeaYr1wi5rKh5pyJ5L6d6LWWXCJcbiAgICAgICAgICAgIGRlcGVuZGVuY2llc0tub3duOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZW50cmllcywgbWFsZm9ybWVkOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIOW3suefpeeahOOAgeaIkeS7rOiHquW3seWPkeW4g+eahOWMheOAglxuICpcbiAqICoq6L+Z6YeM5piv5omL5bel57u05oqk55qE5ZCN5Y2VKiog4oCU4oCUIOaWueahiCBCOuS4jeWGjeS+nei1liBgbnBtIHNlYXJjaGDjgIJcbiAqIOWOn+WboDpucG0g5pCc57Si5a+5IHNjb3BlZCDljIUoYEBjY2dmLypgKeW+iOS4jeWPr+mdoCzluLjluLjmkJzkuI3liLAsXG4gKiDkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKM5L2/55So6ICF55yL5Yiw55qEXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahOOAglxuICog5Luj5Lu35piv5paw5aKe5LiA5Liq5YyF5pe26KaB5Zyo6L+Z6YeM5Yqg5LiA6KGMIOKAlOKAlCDov5nmmK/mmI7nn6XlubbmjqXlj5fnmoTjgIJcbiAqL1xuLyoqXG4gKiDov5nkupsqKuS4jeaYryoq5YWs5YWx5qih5Z2XLOiZveeEtuS5n+aYr+aIkeS7rOiHquW3seWPkeeahDpcbiAqXG4gKiDmoYbmnrbmmK9cIuahhuaetuacrOi6q1wiLOaJqeWxleaYr1wi57yW6L6R5Zmo5bel5YW3XCIg4oCU4oCUIOS9v+eUqOiAheeahOWFrOWFseaooeWdl+WIl+ihqOmHjOS4jeivpeWHuueOsOWug+S7rOOAglxuICog5a6D5Lus5Zyo5bel56iL6YeM56Gu5a6e6KOF552AKOmDveaYr+S+nei1liks5omA5LulIGBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0YCDpgqPmnaHot6/kuZ/kvJrmiorlroPku6xcbiAqIOW9k1wi5bey5a6J6KOFXCLnrpfov5vmnaUg4oCU4oCUIOWboOatpOi/h+a7pOimgeWQjOaXtuS9nOeUqOWcqFwi6L+c56iL5YiX6KGoXCLlkoxcIuW3suWuieijheWIl+ihqFwi5LiK44CCXG4gKi9cbmV4cG9ydCBjb25zdCBOT05fU0hBUkVEX1BBQ0tBR0VTID0gW1xuICAgICdAY2NnZi9mcmFtZXdvcmsnLFxuICAgICdjY2dmLWdhbWUtdG9vbCcsXG5dO1xuXG4vKiog6L+c56iL5YiX6KGo6YeM5Y+q5L+d55WZ55yf5q2j55qE5YWs5YWx5qih5Z2XICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBOT05fU0hBUkVEX1BBQ0tBR0VTLmluZGV4T2YobmFtZSkgPCAwO1xufVxuZXhwb3J0IGNvbnN0IEtOT1dOX1BBQ0tBR0VTID0gW1xuICAgICdAY2NnZi9mcmFtZXdvcmsnLFxuICAgICdAY2NnZi9wYXRoZmluZGluZycsXG4gICAgJ0BjY2dmL2Zsb3ctZmllbGQnLFxuICAgICdjY2dmLWdhbWUtdG9vbCcsXG5dO1xuXG4vKiog57K+56Gu5p+l5LiA5Liq5YyFOmBucG0gdmlldyA8bmFtZT4gLS1qc29uYCjlr7nmr5QgbnBtU2VhcmNoQXJndiDnmoTmqKHns4rmkJzntKIpICovXG5leHBvcnQgZnVuY3Rpb24gdmlld0FyZ3YobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ3ZpZXcnLCBuYW1lLCAnLS1qc29uJ107XG59XG5cbi8qKlxuICog6Kej5p6QIGBucG0gdmlldyA8bmFtZT4gLS1qc29uYCDnmoTnu5PmnpzjgIJcbiAqXG4gKiDlrp7mtYsgbnBtIOacieaXtue7mSoq5a+56LGhKioo5Y2V5LiqIG1hbmlmZXN0KSzmnInml7bnu5kqKuaVsOe7hCoqKOWkmuS4queJiOacrOmDveWMuemFjSnigJTigJRcbiAqIOaJgOS7peS4pOenjemDveimgeWQgzrmlbDnu4Tml7blj5YqKuacgOWQjuS4gOS4qioqKG5wbSDmjInniYjmnKzljYfluo/ov5Tlm54s5pyr5bC+5Y2z5pyA5pawKeOAglxuICog5b2i54q25LiN5a+55bCx6L+U5ZueIG51bGwsKirkuI3opoHoo4XkvZxcIuafpeWIsOS6hlwiKiog4oCU4oCUIOS4iuWxguaNruatpOaYvuekulwi5peg5rOV56Gu6K6kXCLjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmlld1Jlc3VsdCh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogSVNoYXJlZENhdGFsb2dFbnRyeSB8IG51bGwge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGRhdGE6IHVua25vd247XG4gICAgdHJ5IHsgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgbGV0IG1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFuaWZlc3QgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtYW5pZmVzdCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIGlmICghbWFuaWZlc3QpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBtYW5pZmVzdC5uYW1lID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0Lm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHZlcnNpb24gPSB0eXBlb2YgbWFuaWZlc3QudmVyc2lvbiA9PT0gJ3N0cmluZycgPyBtYW5pZmVzdC52ZXJzaW9uIDogbnVsbDtcbiAgICBpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgc291cmNlOiAncmVnaXN0cnknLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIG1hbmlmZXN0LmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJyA/IG1hbmlmZXN0LmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgIGRlY2xhcmVkRGVwZW5kZW5jaWVzOiAobWFuaWZlc3QuZGVwZW5kZW5jaWVzICYmIHR5cGVvZiBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgPyBtYW5pZmVzdC5kZXBlbmRlbmNpZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgICAgICAgICAgOiB7fSxcbiAgICB9IGFzIElTaGFyZWRDYXRhbG9nRW50cnk7XG59XG4iXX0=
|