@milkio/stargate-worker 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/index.js +3 -3
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -109,7 +109,7 @@ async function createStargateWorker(stargateOptions) {
|
|
|
109
109
|
stargateOptions.onLog(level, parsedArgs);
|
|
110
110
|
} else {
|
|
111
111
|
const consoleFn = console[level] ?? console.log;
|
|
112
|
-
consoleFn(...parsedArgs);
|
|
112
|
+
consoleFn([...parsedArgs.slice(0, 5), ...parsedArgs.slice(5).map((v) => JSON.stringify(v))]);
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
115
|
stargateOptions.port.addEventListener("message", logHandler);
|
|
@@ -456,5 +456,5 @@ export {
|
|
|
456
456
|
createDefaultCacheStorage
|
|
457
457
|
};
|
|
458
458
|
|
|
459
|
-
//# debugId=
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbHMvY3JlYXRlLWlkLnRzIiwgIi4uL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElOR1swXTtcblxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gY3VycmVudCAlIGJhc2U7XG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEVOQ09ESU5HLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmICghKGNoYXIgaW4gY2hhck1hcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChjaGFyTWFwW2NoYXJdKTtcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XG59XG5cbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuL3V0aWxzL2NyZWF0ZS1pZC50c1wiO1xuXG5leHBvcnQgdHlwZSBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMgPSB7XG4gICAgcG9ydDoge1xuICAgICAgICBwb3N0TWVzc2FnZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBcIm1lc3NhZ2VcIiwgY2FsbGJhY2s6IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBcIm1lc3NhZ2VcIiwgY2FsbGJhY2s6IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICB9O1xuICAgIGNhY2hlU3RvcmFnZT86IENhY2hlU3RvcmFnZTtcbiAgICBjYWNoZUVuY3J5cHRpb24/OiBib29sZWFuO1xuICAgIG9uTG9nPzogKGxldmVsOiBzdHJpbmcsIGFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTWl4aW48VCwgVT4gPSBVICYgT21pdDxULCBrZXlvZiBVPjtcblxuZXhwb3J0IHR5cGUgQ2FjaGVTdHJhdGVneSA9ICdvZmYnIHwgJ2ZhbGxiYWNrJyB8ICd0aHJvdHRsZSc7XG5cbmV4cG9ydCB0eXBlIFJldHJ5U3RyYXRlZ3kgPSBib29sZWFuIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlU3RvcmFnZSB7XG4gICAgZ2V0OiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8eyBkYXRhOiBhbnk7IHRpbWVzdGFtcDogbnVtYmVyIH0gfCBudWxsPjtcbiAgICBzZXQ6IChrZXk6IHN0cmluZywgZGF0YTogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgdHlwZSBFeGVjdXRlT3B0aW9uczxUIGV4dGVuZHMgYW55ID0gYW55PiA9IHtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNhY2hlU3RyYXRlZ3k/OiBDYWNoZVN0cmF0ZWd5O1xuICAgIGNhY2hlVGhyb3R0bGVNcz86IG51bWJlcjtcbiAgICBvbkNhY2hlSGl0PzogKHJlc3VsdDogVCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcmV0cnlTdHJhdGVneT86IFJldHJ5U3RyYXRlZ3k7XG59O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdG9yR2VuZXJpYzxUPiA9IFQgZXh0ZW5kcyBBc3luY0dlbmVyYXRvcjxpbmZlciBJPiA/IEkgOiBuZXZlcjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVN0YXJnYXRlV29ya2VyPEdlbmVyYXRlZCBleHRlbmRzIHsgcm91dGVTY2hlbWE6IGFueTsgcmVqZWN0Q29kZTogYW55IH0+KHN0YXJnYXRlT3B0aW9uczogTWlsa2lvU3RhcmdhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgZXhlY3V0ZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGNvbm5lY3QgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gXCJQT05HXCIpIHJldHVybjtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoXCJQSU5HXCIpO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKSwgNDIpO1xuICAgIH0pO1xuICAgIGNvbnN0IGxvZ0hhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiIHx8ICFldmVudC5kYXRhLl9fbWlsa2lvX2xvZykgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGxldmVsLCBhcmdzIH0gPSBldmVudC5kYXRhLl9fbWlsa2lvX2xvZztcbiAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IEpTT04ucGFyc2UoYXJncyk7XG4gICAgICAgIGlmIChzdGFyZ2F0ZU9wdGlvbnMub25Mb2cpIHtcbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5vbkxvZyhsZXZlbCwgcGFyc2VkQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25zb2xlRm4gPSAoY29uc29sZSBhcyBhbnkpW2xldmVsXSA/PyBjb25zb2xlLmxvZztcbiAgICAgICAgICAgIGNvbnNvbGVGbiguLi5wYXJzZWRBcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbG9nSGFuZGxlcik7XG5cbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBsb2dIYW5kbGVyKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXhlY3V0ZUlkIG9mIGV4ZWN1dGVJZHMpIHtcbiAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShgQ0xPU0VfU1RSRUFNOiR7ZXhlY3V0ZUlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoXCJDTE9TRURcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcbiAgICAgICAgICAgIHBhdGg6IFBhdGgsXG4gICAgICAgICAgICBvcHRpb25zOiBNaXhpbjxcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9uczxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcz86IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJwYXJhbXNcIl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPixcbiAgICAgICAgKTogUHJvbWlzZTxcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxuICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXSwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxuICAgICAgICAgICAgW1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGwsIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXSB8IFtudWxsLCBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD4sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICA+IHtcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0O1xuXG4gICAgICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVTdHJhdGVneSA9IG9wdGlvbnM/LmNhY2hlU3RyYXRlZ3kgPz8gJ29mZic7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09IHRydWUgfHwgb3B0aW9ucz8ucmV0cnlTdHJhdGVneSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09ICdudW1iZXInICYmIG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50ID0gb3B0aW9ucz8ucmV0cnlTdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVRocm90dGxlTXMgPSBvcHRpb25zPy5jYWNoZVRocm90dGxlTXMgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBnZW5lcmF0ZUNhY2hlS2V5KHBhdGggYXMgc3RyaW5nLCBvcHRpb25zPy5wYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYWNoZVN0b3JhZ2UgPSBzdGFyZ2F0ZU9wdGlvbnMuY2FjaGVTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgIWNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVTdG9yYWdlID0gYXdhaXQgY3JlYXRlRGVmYXVsdENhY2hlU3RvcmFnZSh7IGVuY3J5cHRpb246IHN0YXJnYXRlT3B0aW9ucy5jYWNoZUVuY3J5cHRpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSAhPT0gJ29mZicgJiYgY2FjaGVTdG9yYWdlICYmIG9wdGlvbnM/Lm9uQ2FjaGVIaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9wdGlvbnMub25DYWNoZUhpdChjYWNoZWQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBvbkNhY2hlSGl0IGVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0cmF0ZWd5ID09PSAndGhyb3R0bGUnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gYXdhaXQgY2FjaGVTdG9yYWdlLmdldChjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wIDwgY2FjaGVUaHJvdHRsZU1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZXF1ZXN0ID0gKCk6IFByb21pc2U8W2FueSwgYW55LCBFeGVjdXRlUmVzdWx0c09wdGlvbl0+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVxUmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcUV4ZWN1dGVJZCA9IF9fY3JlYXRlSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmFkZChyZXFFeGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gcmVxRXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKHJlcUV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JbZXZlbnQuZGF0YS5lcnJvci5jb2RlXSA9IGV2ZW50LmRhdGEuZXJyb3IucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiByZXFFeGVjdXRlSWQgfV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxUmVzb2x2ZShbbnVsbCwgZXZlbnQuZGF0YS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVxRXhlY3V0ZUlkIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQ6IHJlcUV4ZWN1dGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgW2Vycm9yLCByZXN1bHQsIHJlc3VsdE9wdGlvbl0gPSBhd2FpdCBleGVjdXRlUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJldHJ5SW5kZXggPSAwOyByZXRyeUluZGV4IDwgcmV0cnlDb3VudCAmJiBlcnJvcjsgcmV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvciwgcmVzdWx0LCByZXN1bHRPcHRpb25dID0gYXdhaXQgZXhlY3V0ZVJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW251bGwsIGNhY2hlZC5kYXRhLCB7IGV4ZWN1dGVJZDogJ2NhY2hlZCcgfV0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShbZXJyb3IsIG51bGwsIHJlc3VsdE9wdGlvbl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FjaGVTdG9yYWdlLnNldChjYWNoZUtleSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW251bGwsIHJlc3VsdCwgcmVzdWx0T3B0aW9uXSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlSWQgPSBfX2NyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuYWRkKGV4ZWN1dGVJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsb3c6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUZsb3c+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gZXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZsb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93ID0gY3JlYXRlRmxvdyhzdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcltldmVudC5kYXRhLmVycm9yLmNvZGVdID0gZXZlbnQuZGF0YS5lcnJvci5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW2Vycm9yLCBudWxsLCB7IGV4ZWN1dGVJZCB9XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIHJlc29sdmUoW251bGwsIGZsb3csIHsgZXhlY3V0ZUlkIH1dIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIGZsb3cucmV0dXJuKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZmxvdy50aHJvdyhldmVudC5kYXRhLmRhdGE/LmF0KDApLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZHMuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3cudGhyb3coZXZlbnQuZGF0YS5kYXRhLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuc3VjY2VzcykgZmxvdy5lbWl0KGV2ZW50LmRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJHR5cGVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZCxcbiAgICAgICAgICAgIGVycm9yOiBHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdO1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgW1BhdGggaW4ga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1dOiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcIvCfpZtcIl0gZXh0ZW5kcyBib29sZWFuXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdXG4gICAgICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBzdGFyZ2F0ZTtcbn1cblxuZXhwb3J0IHR5cGUgTWlsa2lvRmxvdzxULCBUUmV0dXJuID0gYW55LCBUTmV4dCA9IGFueT4gPSB7XG4gICAgZW1pdDogKGZsb3c6IFQpID0+IHZvaWQ7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogKCkgPT4gTWlsa2lvRmxvdzxUPjtcbiAgICBuZXh0KC4uLlt2YWx1ZV06IFtdIHwgW1ROZXh0XSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHJldHVybihkYXRhOiB1bmRlZmluZWQsIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xuICAgIHRocm93KGVycm9yOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZsb3c8VD4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMsIGV4ZWN1dGVJZDogc3RyaW5nKTogTWlsa2lvRmxvdzxUPiB7XG4gICAgbGV0IHN0YXR1czogXCJwZW5kaW5nXCIgfCBcInJlc29sdmVkXCIgfCBcInJlamVjdGVkXCIgPSBcInBlbmRpbmdcIjtcbiAgICBjb25zdCBmbG93czogQXJyYXk8e1xuICAgICAgICBibGFuazogYm9vbGVhbjtcbiAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcbiAgICAgICAgcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xuICAgICAgICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gICAgfT4gPSBbXTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0ge1xuICAgICAgICBlbWl0OiAoZmxvdzogVCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZsb3dzLmF0KC0xKT8uYmxhbmsgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZmxvd3MuYXQoLTEpITtcbiAgICAgICAgICAgICAgICBpdGVtLmJsYW5rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbS5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gd2l0aFJlc29sdmVyczxUPigpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGZsb3cpO1xuICAgICAgICAgICAgICAgIGZsb3dzLnB1c2goeyAuLi5yZXNvbHZlcnMsIGJsYW5rOiBmYWxzZSB9IGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLih7XG4gICAgICAgICAgICBhc3luYyBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VD4+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSBcInBlbmRpbmdcIikgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcbiAgICAgICAgICAgICAgICBmbG93cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhc3luYyByZXR1cm4oXzogdW5kZWZpbmVkLCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gXCJyZXNvbHZlZFwiO1xuICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZVBvc3RDbG9zZU1lc3NhZ2UpIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKGBDTE9TRV9TVFJFQU06JHtleGVjdXRlSWR9YCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnksIGRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlPzogdHJ1ZSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICAgICAgaWYgKCFkaXNhYmxlUG9zdENsb3NlTWVzc2FnZSkgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoYENMT1NFX1NUUkVBTToke2V4ZWN1dGVJZH1gKTtcbiAgICAgICAgICAgICAgICBpZiAoZmxvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5ibGFuayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmbG93LnJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXG4gICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGl0ZXJhdG9yIGFzIE1pbGtpb0Zsb3c8VD47XG59XG5cbmZ1bmN0aW9uIHdpdGhSZXNvbHZlcnM8VCA9IGFueT4oKTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD4ge1xuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XG4gICAgbGV0IHJlamVjdDogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZWplY3RcIl07XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xufVxuXG5jb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcbiAgICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2YgKGpzb24gYXMgYW55KS5nZXRUaW1lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoanNvbiBhcyBhbnkpLnRvSVNPU3RyaW5nID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30gYXMgVCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKCc6JywgJycpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufVxuXG5jb25zdCBEQl9OQU1FID0gJ1N0YXJnYXRlV29ya2VyJztcbmNvbnN0IFNUT1JFX05BTUUgPSAnY2FjaGVzJztcbmxldCBkYkluc3RhbmNlOiBJREJEYXRhYmFzZSB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiBvcGVuREIoKTogUHJvbWlzZTxJREJEYXRhYmFzZT4ge1xuICAgIGlmIChkYkluc3RhbmNlKSByZXR1cm4gZGJJbnN0YW5jZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQl9OQU1FLCAxKTtcbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGRiSW5zdGFuY2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgIHJlc29sdmUoZGJJbnN0YW5jZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2FjaGVTdG9yYWdlKG9wdGlvbnM/OiB7IGVuY3J5cHRpb24/OiBib29sZWFuOyBlbmNyeXB0aW9uS2V5Pzogc3RyaW5nIH0pOiBQcm9taXNlPENhY2hlU3RvcmFnZT4ge1xuICAgIGF3YWl0IG9wZW5EQigpO1xuXG4gICAgbGV0IGVuY3J5cHRpb25LZXk6IENyeXB0b0tleSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG5cbiAgICBpZiAob3B0aW9ucz8uZW5jcnlwdGlvbikge1xuICAgICAgICBjb25zdCBrZXlTdHJpbmcgPSBvcHRpb25zLmVuY3J5cHRpb25LZXkgPz8gREJfTkFNRTtcbiAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGtleVN0cmluZykuZm9yRWFjaCgoYnl0ZSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPCAxNikgY291bnRlcltpXSA9IGJ5dGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3Qga2V5RGF0YSA9IGVuY29kZXIuZW5jb2RlKGtleVN0cmluZyk7XG4gICAgICAgIGNvbnN0IGltcG9ydGVkS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGtleURhdGEsIHsgbmFtZTogJ1BCS0RGMicgfSwgZmFsc2UsIFsnZGVyaXZlS2V5J10pO1xuXG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRlcml2ZUtleShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUEJLREYyJyxcbiAgICAgICAgICAgICAgICBzYWx0OiBlbmNvZGVyLmVuY29kZSgnbWlsa2lvLXN0YXJnYXRlLXdvcmtlci1jYWNoZScpLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAwMCxcbiAgICAgICAgICAgICAgICBoYXNoOiAnU0hBLTI1NicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgICAgICB7IG5hbWU6ICdBRVMtQ1RSJywgbGVuZ3RoOiAyNTYgfSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0RGF0YSA9IGFzeW5jIChkYXRhOiBhbnkpOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5KSByZXR1cm4gZGF0YTtcblxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgICAgY29uc3QgZGF0YUJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoanNvblN0cmluZyk7XG5cbiAgICAgICAgY29uc3QgZW5jcnlwdGVkQXJyYXlCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FFUy1DVFInLFxuICAgICAgICAgICAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiA2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5ISxcbiAgICAgICAgICAgIGRhdGFCeXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkQXJyYXlCdWZmZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWNyeXB0RGF0YSA9IGFzeW5jIChlbmNyeXB0ZWREYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIWVuY3J5cHRlZERhdGEpIHJldHVybiBlbmNyeXB0ZWREYXRhO1xuXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZW5jcnlwdGVkRGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyAoZW5jcnlwdGVkRGF0YS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpIDogZW5jcnlwdGVkRGF0YTtcblxuICAgICAgICBjb25zdCBkZWNyeXB0ZWRCeXRlcyA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUNUUicsXG4gICAgICAgICAgICAgICAgY291bnRlcjogY291bnRlcixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXkhLFxuICAgICAgICAgICAgYXJyYXlCdWZmZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gZGVjb2Rlci5kZWNvZGUoZGVjcnlwdGVkQnl0ZXMpO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoanNvblN0cmluZykpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHsgZGF0YTogYW55OyB0aW1lc3RhbXA6IG51bWJlciB9IHwgbnVsbD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihTVE9SRV9OQU1FLCAncmVhZG9ubHknKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5lbmNyeXB0aW9uICYmIChyZXN1bHQuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IHJlc3VsdC5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZERhdGEgPSBhd2FpdCBkZWNyeXB0RGF0YShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgZGF0YTogZGVjcnlwdGVkRGF0YSwgdGltZXN0YW1wOiByZXN1bHQudGltZXN0YW1wIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgPz8gbnVsbCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuREIoKTtcbiAgICAgICAgICAgIGxldCBkYXRhVG9TdG9yZTogYW55ID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICBkYXRhVG9TdG9yZSA9IGF3YWl0IGVuY3J5cHREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLnB1dCh7IGRhdGE6IGRhdGFUb1N0b3JlLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUNhY2hlS2V5KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRofToke0pTT04uc3RyaW5naWZ5KHBhcmFtcyA/PyB7fSl9YDtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFNQSxTQUFTLGlCQUFpQixDQUFDLFNBQTZCO0FBQUEsRUFDdEQsSUFBSSxDQUFDLFFBQVE7QUFBQSxJQUFRLFFBQVEsU0FBUztBQUFBLEVBQ3RDLElBQUksUUFBUSxTQUFTO0FBQUEsSUFBRyxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUN4RCxJQUFJLFFBQVEsU0FBUztBQUFBLElBQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDekQsSUFBSSxRQUFRLGFBQWEsUUFBUSxTQUFTO0FBQUEsSUFBRyxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUM3RSxJQUFJLFdBQVc7QUFBQSxFQUNmLElBQUksY0FBYztBQUFBLEVBQ2xCLE9BQU87QUFBQSxJQUNMLFFBQVEsR0FBRztBQUFBLE1BQ1QsSUFBSSxhQUFhLFFBQVE7QUFBQSxNQUN6QixNQUFNLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFDckIsSUFBSSxLQUFLO0FBQUEsTUFDVCxJQUFJLFFBQVEsV0FBVztBQUFBLFFBQ3JCLGNBQWM7QUFBQSxRQUNkLEtBQUssR0FBRyxLQUFLLGlCQUFpQixPQUFPLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQUEsTUFDNUQ7QUFBQSxNQUNBLElBQUksUUFBUSxjQUFjLGFBQWEsS0FBSztBQUFBLFFBQzFDLEtBQUssR0FBRyxLQUFLLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUFBLE1BQzlELEVBQU87QUFBQSxRQUNMLFdBQVc7QUFBQSxRQUNYLE1BQU0sTUFBTTtBQUFBLFFBQ1osTUFBTSxNQUFNLGNBQWMsT0FBTyxVQUFVLENBQUM7QUFBQSxRQUM1QyxjQUFjLHFCQUFxQixLQUFLLEdBQUc7QUFBQSxRQUMzQyxLQUFLLEdBQUcsS0FBSyxpQkFBaUIsV0FBVyxFQUFFLFNBQVMsWUFBWSxHQUFHO0FBQUE7QUFBQSxNQUVyRSxPQUFPO0FBQUE7QUFBQSxJQUVULGNBQWMsQ0FBQyxJQUFZO0FBQUEsTUFDekIsT0FBTyxRQUFRLFlBQVksT0FBTyxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJO0FBQUE7QUFBQSxFQUU5RjtBQUFBO0FBR0YsSUFBTSxXQUFXO0FBRWpCLFNBQVMsb0JBQW9CLENBQUMsS0FBYSxLQUFxQjtBQUFBLEVBQzlELElBQUksT0FBTztBQUFBLElBQUssTUFBTSxJQUFJLE1BQU0sZUFBZTtBQUFBLEVBRS9DLE1BQU0sUUFBUSxNQUFNLE1BQU07QUFBQSxFQUMxQixNQUFNLFlBQVksS0FBSyxLQUFLLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUN4RSxNQUFNLGVBQWUsSUFBSSxXQUFXLFNBQVM7QUFBQSxFQUU3QyxJQUFJO0FBQUEsRUFDSixHQUFHO0FBQUEsSUFDRCxPQUFPLGdCQUFnQixZQUFZO0FBQUEsSUFDbkMsY0FDRSxPQUNFLEtBQUssTUFBTSxLQUFLLFlBQVksRUFDekIsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQzFDLEtBQUssRUFBRSxHQUNaLElBQUk7QUFBQSxFQUNSLFNBQVMsY0FBYztBQUFBLEVBRXZCLE9BQU8sTUFBTTtBQUFBO0FBR2YsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF1QjtBQUFBLEVBQy9DLE1BQU0sT0FBTyxPQUFPLFNBQVMsTUFBTTtBQUFBLEVBQ25DLElBQUksU0FBUztBQUFBLEVBQ2IsSUFBSSxVQUFVO0FBQUEsRUFFZCxJQUFJLFlBQVk7QUFBQSxJQUFJLE9BQU8sU0FBUztBQUFBLEVBRXBDLE9BQU8sVUFBVSxJQUFJO0FBQUEsSUFDbkIsTUFBTSxZQUFZLFVBQVU7QUFBQSxJQUM1QixTQUFTLFNBQVMsT0FBTyxTQUFTLEtBQUs7QUFBQSxJQUN2QyxVQUFVLFVBQVU7QUFBQSxFQUN0QjtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR1QsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFxQjtBQUFBLEVBQzdDLE1BQU0sVUFBcUMsQ0FBQztBQUFBLEVBQzVDLFNBQVMsSUFBSSxFQUFHLElBQUksU0FBUyxRQUFRLEtBQUs7QUFBQSxJQUN4QyxRQUFRLFNBQVMsTUFBTTtBQUFBLEVBQ3pCO0FBQUEsRUFFQSxNQUFNLE9BQU8sT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNuQyxJQUFJLFNBQVM7QUFBQSxFQUViLFNBQVMsSUFBSSxFQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNuQyxNQUFNLE9BQU8sSUFBSTtBQUFBLElBQ2pCLElBQUksRUFBRSxRQUFRLFVBQVU7QUFBQSxNQUN0QixNQUFNLElBQUksTUFBTSxzQkFBc0IsdUJBQXVCO0FBQUEsSUFDL0Q7QUFBQSxJQUNBLE1BQU0sUUFBUSxPQUFPLFFBQVEsS0FBSztBQUFBLElBQ2xDLFNBQVMsU0FBUyxPQUFPO0FBQUEsRUFDM0I7QUFBQSxFQUVBLE9BQU87QUFBQTtBQUdULFNBQVMsYUFBYSxDQUFDLEdBQW1CO0FBQUEsRUFDeEMsT0FBTyxPQUFPLFNBQVMsTUFBTSxLQUFLLElBQUk7QUFBQTtBQUd4QyxJQUFNLGNBQWMsa0JBQWtCLEVBQUUsUUFBUSxJQUFJLFdBQVcsT0FBTyxZQUFZLE1BQU0sQ0FBQztBQUVsRixJQUFNLGFBQWEsWUFBWTs7O0FDbkV0QyxlQUFzQixvQkFBNkUsQ0FBQyxpQkFBd0M7QUFBQSxFQUN4SSxNQUFNLGFBQWEsSUFBSTtBQUFBLEVBQ3ZCLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQUEsSUFDckMsTUFBTSxVQUFVLENBQUMsVUFBeUI7QUFBQSxNQUN0QyxJQUFJLE1BQU0sU0FBUztBQUFBLFFBQVE7QUFBQSxNQUMzQixjQUFjLEtBQUs7QUFBQSxNQUNuQixnQkFBZ0IsS0FBSyxvQkFBb0IsV0FBVyxPQUFPO0FBQUEsTUFDM0QsUUFBUSxJQUFJO0FBQUE7QUFBQSxJQUVoQixnQkFBZ0IsS0FBSyxpQkFBaUIsV0FBVyxPQUFPO0FBQUEsSUFDeEQsZ0JBQWdCLEtBQUssWUFBWSxNQUFNO0FBQUEsSUFDdkMsTUFBTSxRQUFRLFlBQVksTUFBTSxnQkFBZ0IsS0FBSyxZQUFZLE1BQU0sR0FBRyxFQUFFO0FBQUEsR0FDL0U7QUFBQSxFQUNELE1BQU0sYUFBYSxDQUFDLFVBQXlCO0FBQUEsSUFDekMsSUFBSSxPQUFPLE1BQU0sU0FBUyxZQUFZLENBQUMsTUFBTSxLQUFLO0FBQUEsTUFBYztBQUFBLElBQ2hFLFFBQVEsT0FBTyxTQUFTLE1BQU0sS0FBSztBQUFBLElBQ25DLE1BQU0sYUFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ2xDLElBQUksZ0JBQWdCLE9BQU87QUFBQSxNQUN2QixnQkFBZ0IsTUFBTSxPQUFPLFVBQVU7QUFBQSxJQUMzQyxFQUFPO0FBQUEsTUFDSCxNQUFNLFlBQWEsUUFBZ0IsVUFBVSxRQUFRO0FBQUEsTUFDckQsVUFBVSxHQUFHLFVBQVU7QUFBQTtBQUFBO0FBQUEsRUFHL0IsZ0JBQWdCLEtBQUssaUJBQWlCLFdBQVcsVUFBVTtBQUFBLEVBRTNELE1BQU0sV0FBVztBQUFBLElBQ2IsS0FBSyxHQUFHO0FBQUEsTUFDSixnQkFBZ0IsS0FBSyxvQkFBb0IsV0FBVyxVQUFVO0FBQUEsTUFDOUQsV0FBVyxhQUFhLFlBQVk7QUFBQSxRQUNoQyxnQkFBZ0IsS0FBSyxZQUFZLGdCQUFnQixXQUFXO0FBQUEsTUFDaEU7QUFBQSxNQUNBLGdCQUFnQixLQUFLLFlBQVksUUFBUTtBQUFBO0FBQUEsU0FFdkMsUUFBb0QsQ0FDdEQsTUFDQSxTQVlGO0FBQUEsTUFFRSxPQUFPLElBQUksUUFBUSxPQUFPLFlBQVk7QUFBQSxRQUNsQyxNQUFNO0FBQUEsUUFFTixJQUFJLENBQUUsS0FBZ0IsU0FBUyxHQUFHLEdBQUc7QUFBQSxVQUVqQyxNQUFNLGdCQUFnQixTQUFTLGlCQUFpQjtBQUFBLFVBQ2hELElBQUksYUFBYTtBQUFBLFVBQ2pCLElBQUksU0FBUyxrQkFBa0IsUUFBUSxTQUFTLGtCQUFrQixHQUFHO0FBQUEsWUFDakUsYUFBYTtBQUFBLFVBQ2pCLEVBQU8sU0FBSSxPQUFPLFNBQVMsa0JBQWtCLFlBQVksU0FBUyxnQkFBZ0IsR0FBRztBQUFBLFlBQ2pGLGFBQWEsU0FBUztBQUFBLFVBQzFCO0FBQUEsVUFDQSxNQUFNLGtCQUFrQixTQUFTLG1CQUFtQjtBQUFBLFVBQ3BELE1BQU0sV0FBVyxpQkFBaUIsTUFBZ0IsU0FBUyxNQUFNO0FBQUEsVUFFakUsSUFBSSxlQUFlLGdCQUFnQjtBQUFBLFVBQ25DLElBQUksa0JBQWtCLFNBQVMsQ0FBQyxjQUFjO0FBQUEsWUFDMUMsZUFBZSxNQUFNLDBCQUEwQixFQUFFLFlBQVksZ0JBQWdCLGdCQUFnQixDQUFDO0FBQUEsVUFDbEc7QUFBQSxVQUVBLElBQUksa0JBQWtCLFNBQVMsZ0JBQWdCLFNBQVMsWUFBWTtBQUFBLFlBQ2hFLE1BQU0sU0FBUyxNQUFNLGFBQWEsSUFBSSxRQUFRO0FBQUEsWUFDOUMsSUFBSSxRQUFRO0FBQUEsY0FDUixJQUFJO0FBQUEsZ0JBQ0EsTUFBTSxRQUFRLFdBQVcsT0FBTyxJQUFJO0FBQUEsZ0JBQ3RDLE1BQU07QUFBQSxZQUdaO0FBQUEsVUFDSjtBQUFBLFVBRUEsSUFBSSxrQkFBa0IsY0FBYyxjQUFjO0FBQUEsWUFDOUMsTUFBTSxTQUFTLE1BQU0sYUFBYSxJQUFJLFFBQVE7QUFBQSxZQUM5QyxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxZQUFZLGlCQUFpQjtBQUFBLGNBQzNELE9BQU8sUUFBUSxDQUFDLE1BQU0sT0FBTyxNQUFNLEVBQUUsV0FBVyxTQUFTLENBQUMsQ0FBUTtBQUFBLFlBQ3RFO0FBQUEsVUFDSjtBQUFBLFVBRUEsTUFBTSxpQkFBaUIsTUFBaUQ7QUFBQSxZQUNwRSxPQUFPLElBQUksUUFBUSxDQUFDLGVBQWU7QUFBQSxjQUMvQixNQUFNLGVBQWUsV0FBVztBQUFBLGNBQ2hDLFdBQVcsSUFBSSxZQUFZO0FBQUEsY0FDM0IsTUFBTSxVQUFVLENBQUMsVUFBeUI7QUFBQSxnQkFDdEMsSUFBSSxPQUFPLE1BQU0sU0FBUztBQUFBLGtCQUFVO0FBQUEsZ0JBQ3BDLElBQUksTUFBTSxLQUFLLGNBQWM7QUFBQSxrQkFBYztBQUFBLGdCQUMzQyxXQUFXLE9BQU8sWUFBWTtBQUFBLGdCQUM5QixnQkFBZ0IsS0FBSyxvQkFBb0IsV0FBVyxPQUFPO0FBQUEsZ0JBQzNELElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUztBQUFBLGtCQUNyQixNQUFNLFNBQWEsQ0FBQztBQUFBLGtCQUNwQixPQUFNLE1BQU0sS0FBSyxNQUFNLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFBQSxrQkFDaEQsV0FBVyxDQUFDLFFBQU8sTUFBTSxFQUFFLFdBQVcsYUFBYSxDQUFDLENBQUM7QUFBQSxnQkFDekQsRUFBTztBQUFBLGtCQUNILFdBQVcsQ0FBQyxNQUFNLE1BQU0sS0FBSyxNQUFNLEVBQUUsV0FBVyxhQUFhLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQSxjQUd2RSxnQkFBZ0IsS0FBSyxpQkFBaUIsV0FBVyxPQUFPO0FBQUEsY0FDeEQsZ0JBQWdCLEtBQUssWUFBWTtBQUFBLGdCQUM3QixXQUFXO0FBQUEsZ0JBQ1g7QUFBQSxnQkFDQSxRQUFRLFNBQVM7QUFBQSxnQkFDakIsU0FBUyxTQUFTO0FBQUEsY0FDdEIsQ0FBQztBQUFBLGFBQ0o7QUFBQTtBQUFBLFVBR0wsS0FBSyxPQUFPLFFBQVEsZ0JBQWdCLE1BQU0sZUFBZTtBQUFBLFVBRXpELFNBQVMsYUFBYSxFQUFHLGFBQWEsY0FBYyxPQUFPLGNBQWM7QUFBQSxZQUNyRSxJQUFJLGFBQWEsR0FBRztBQUFBLGNBQ2hCLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQUEsWUFDL0M7QUFBQSxZQUNBLENBQUMsT0FBTyxRQUFRLFlBQVksSUFBSSxNQUFNLGVBQWU7QUFBQSxVQUN6RDtBQUFBLFVBRUEsSUFBSSxPQUFPO0FBQUEsWUFDUCxJQUFJLGtCQUFrQixTQUFTLGNBQWM7QUFBQSxjQUN6QyxNQUFNLFNBQVMsTUFBTSxhQUFhLElBQUksUUFBUTtBQUFBLGNBQzlDLElBQUksUUFBUTtBQUFBLGdCQUNSLE9BQU8sUUFBUSxDQUFDLE1BQU0sT0FBTyxNQUFNLEVBQUUsV0FBVyxTQUFTLENBQUMsQ0FBUTtBQUFBLGNBQ3RFO0FBQUEsWUFDSjtBQUFBLFlBQ0EsT0FBTyxRQUFRLENBQUMsT0FBTyxNQUFNLFlBQVksQ0FBQztBQUFBLFVBQzlDO0FBQUEsVUFFQSxJQUFJLGtCQUFrQixTQUFTLGNBQWM7QUFBQSxZQUN6QyxNQUFNLGFBQWEsSUFBSSxVQUFVLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBRUEsUUFBUSxDQUFDLE1BQU0sUUFBUSxZQUFZLENBQVE7QUFBQSxRQUMvQyxFQUFPO0FBQUEsVUFFSCxNQUFNLFlBQVksV0FBVztBQUFBLFVBQzdCLFdBQVcsSUFBSSxTQUFTO0FBQUEsVUFFeEIsSUFBSTtBQUFBLFVBQ0osTUFBTSxVQUFVLENBQUMsVUFBeUI7QUFBQSxZQUN0QyxJQUFJLE9BQU8sTUFBTSxTQUFTO0FBQUEsY0FBVTtBQUFBLFlBQ3BDLElBQUksTUFBTSxLQUFLLGNBQWM7QUFBQSxjQUFXO0FBQUEsWUFDeEMsSUFBSSxDQUFDLE1BQU07QUFBQSxjQUNQLE9BQU8sV0FBVyxpQkFBaUIsU0FBUztBQUFBLGNBQzVDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUztBQUFBLGdCQUNyQixNQUFNLFFBQWEsQ0FBQztBQUFBLGdCQUNwQixNQUFNLE1BQU0sS0FBSyxNQUFNLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFBQSxnQkFDaEQsUUFBUSxDQUFDLE9BQU8sTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQUEsY0FDeEM7QUFBQSxjQUNBLElBQUksTUFBTSxLQUFLO0FBQUEsZ0JBQVMsUUFBUSxDQUFDLE1BQU0sTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFRO0FBQUEsWUFDdEUsRUFBTztBQUFBLGNBQ0gsSUFBSSxNQUFNLEtBQUssTUFBTTtBQUFBLGdCQUNqQixnQkFBZ0IsS0FBSyxvQkFBb0IsV0FBVyxPQUFPO0FBQUEsZ0JBQzNELFdBQVcsT0FBTyxTQUFTO0FBQUEsZ0JBQzNCLElBQUksTUFBTSxLQUFLO0FBQUEsa0JBQVMsS0FBSyxPQUFPLFdBQVcsSUFBSTtBQUFBLGdCQUM5QztBQUFBLHVCQUFLLE1BQU0sTUFBTSxLQUFLLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUFBLGNBQ2hELEVBQU8sU0FBSSxDQUFDLE1BQU0sS0FBSyxTQUFTO0FBQUEsZ0JBQzVCLGdCQUFnQixLQUFLLG9CQUFvQixXQUFXLE9BQU87QUFBQSxnQkFDM0QsV0FBVyxPQUFPLFNBQVM7QUFBQSxnQkFDM0IsS0FBSyxNQUFNLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFBQSxjQUNwQyxFQUFPLFNBQUksTUFBTSxLQUFLO0FBQUEsZ0JBQVMsS0FBSyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUE7QUFBQTtBQUFBLFVBR2hFLGdCQUFnQixLQUFLLGlCQUFpQixXQUFXLE9BQU87QUFBQSxVQUN4RCxnQkFBZ0IsS0FBSyxZQUFZO0FBQUEsWUFDN0I7QUFBQSxZQUNBO0FBQUEsWUFDQSxRQUFRLFNBQVM7QUFBQSxZQUNqQixTQUFTLFNBQVM7QUFBQSxVQUN0QixDQUFDO0FBQUE7QUFBQSxPQUVSO0FBQUE7QUFBQSxJQUVMLFFBQVE7QUFBQSxFQWNaO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFXSixTQUFTLFVBQWEsQ0FBQyxpQkFBd0MsV0FBa0M7QUFBQSxFQUNwRyxJQUFJLFNBQThDO0FBQUEsRUFDbEQsTUFBTSxRQUtELENBQUM7QUFBQSxFQUVOLE1BQU0sV0FBVztBQUFBLElBQ2IsTUFBTSxDQUFDLFNBQVk7QUFBQSxNQUNmLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxVQUFVLE1BQU07QUFBQSxRQUM5QixNQUFNLE9BQU8sTUFBTSxHQUFHLEVBQUU7QUFBQSxRQUN4QixLQUFLLFFBQVE7QUFBQSxRQUNiLEtBQUssUUFBUSxJQUFJO0FBQUEsUUFDakI7QUFBQSxNQUNKLEVBQU87QUFBQSxRQUNILE1BQU0sWUFBWSxjQUFpQjtBQUFBLFFBQ25DLFVBQVUsUUFBUSxJQUFJO0FBQUEsUUFDdEIsTUFBTSxLQUFLLEtBQUssV0FBVyxPQUFPLE1BQU0sQ0FBUTtBQUFBO0FBQUE7QUFBQSxPQUdwRDtBQUFBLFdBQ00sS0FBSSxHQUErQjtBQUFBLFFBQ3JDLElBQUksV0FBVztBQUFBLFVBQVcsT0FBTyxFQUFFLE1BQU0sTUFBTSxPQUFPLEtBQUs7QUFBQSxRQUMzRCxJQUFJLE1BQU0sV0FBVyxHQUFHO0FBQUEsVUFDcEIsTUFBTSxZQUFZLGNBQWlCO0FBQUEsVUFDbkMsTUFBTSxLQUFLLEtBQUssV0FBVyxPQUFPLEtBQUssQ0FBUTtBQUFBLFFBQ25EO0FBQUEsUUFDQSxNQUFNLE9BQU8sTUFBTSxHQUFHLENBQUM7QUFBQSxRQUN2QixNQUFNLFNBQVMsTUFBTSxLQUFLO0FBQUEsUUFDMUIsTUFBTSxNQUFNO0FBQUEsUUFDWixPQUFPLEVBQUUsTUFBTSxXQUFXLFdBQVcsT0FBTyxPQUFPO0FBQUE7QUFBQSxXQUVqRCxPQUFNLENBQUMsR0FBYyx5QkFBK0Q7QUFBQSxRQUN0RixTQUFTO0FBQUEsUUFDVCxJQUFJLENBQUM7QUFBQSxVQUF5QixnQkFBZ0IsS0FBSyxZQUFZLGdCQUFnQixXQUFXO0FBQUEsUUFDMUYsV0FBVyxRQUFRLE9BQU87QUFBQSxVQUN0QixLQUFLLFFBQVE7QUFBQSxVQUNiLEtBQUssUUFBUSxTQUFTO0FBQUEsUUFDMUI7QUFBQSxRQUNBLE9BQU8sRUFBRSxNQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUE7QUFBQSxXQUUvQixNQUFLLENBQUMsS0FBVSx5QkFBK0Q7QUFBQSxRQUNqRixTQUFTO0FBQUEsUUFDVCxJQUFJLENBQUM7QUFBQSxVQUF5QixnQkFBZ0IsS0FBSyxZQUFZLGdCQUFnQixXQUFXO0FBQUEsUUFDMUYsSUFBSSxNQUFNLFdBQVcsR0FBRztBQUFBLFVBQ3BCLE1BQU0sWUFBWSxjQUFpQjtBQUFBLFVBQ25DLE1BQU0sS0FBSyxLQUFLLFdBQVcsT0FBTyxLQUFLLENBQVE7QUFBQSxRQUNuRDtBQUFBLFFBQ0EsV0FBVyxRQUFRLE9BQU87QUFBQSxVQUN0QixLQUFLLFFBQVE7QUFBQSxVQUNiLEtBQUssT0FBTyxHQUFHO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE9BQU8sRUFBRSxNQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUE7QUFBQSxJQUV6QztBQUFBLEtBQ0MsT0FBTyxjQUFjLEdBQUc7QUFBQSxNQUNyQixPQUFPO0FBQUE7QUFBQSxFQUVmO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFHWCxTQUFTLGFBQXNCLEdBQTRCO0FBQUEsRUFDdkQsSUFBSTtBQUFBLEVBQ0osSUFBSTtBQUFBLEVBQ0osTUFBTSxVQUFVLElBQUksUUFBVyxDQUFDLEtBQUssUUFBUTtBQUFBLElBQ3pDLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxHQUNaO0FBQUEsRUFDRCxPQUFPLEVBQUUsU0FBUyxTQUFtQixPQUFnQjtBQUFBO0FBR3pELElBQU0saUJBQWlCO0FBRWhCLFNBQVMsZUFBa0IsQ0FBQyxNQUFZO0FBQUEsRUFDM0MsSUFBSSxTQUFTLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUMzQyxJQUFJLGdCQUFnQixRQUFTLE9BQVEsS0FBYSxZQUFZLGNBQWMsT0FBUSxLQUFhLGdCQUFnQixZQUFhO0FBQUEsTUFDMUgsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLElBQUksTUFBTSxRQUFRLElBQUksR0FBRztBQUFBLE1BQ3JCLE9BQU8sS0FBSyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsSUFDbkQ7QUFBQSxJQUNBLE9BQU8sT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUN0RCxJQUFJLE9BQWtCLGdCQUFnQixLQUFLO0FBQUEsTUFDM0MsT0FBTztBQUFBLE9BQ1IsQ0FBQyxDQUFNO0FBQUEsRUFDZDtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsVUFBVTtBQUFBLElBQzFCLE1BQU0sUUFBUSxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3ZDLElBQUksT0FBTztBQUFBLE1BQ1AsTUFBTSx1QkFBdUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLE1BQU0sR0FBRyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTTtBQUFBLE1BQzdGLE9BQU8sSUFBSSxLQUFLLG9CQUFvQjtBQUFBLElBQ3hDO0FBQUEsRUFDSjtBQUFBLEVBQ0EsT0FBTztBQUFBO0FBR1gsSUFBTSxVQUFVO0FBQ2hCLElBQU0sYUFBYTtBQUNuQixJQUFJLGFBQWlDO0FBRXJDLGVBQWUsTUFBTSxHQUF5QjtBQUFBLEVBQzFDLElBQUk7QUFBQSxJQUFZLE9BQU87QUFBQSxFQUV2QixPQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUFBLElBQ3BDLE1BQU0sVUFBVSxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQUEsSUFDekMsUUFBUSxVQUFVLE1BQU0sT0FBTyxRQUFRLEtBQUs7QUFBQSxJQUM1QyxRQUFRLFlBQVksTUFBTTtBQUFBLE1BQ3RCLGFBQWEsUUFBUTtBQUFBLE1BQ3JCLFFBQVEsVUFBVTtBQUFBO0FBQUEsSUFFdEIsUUFBUSxrQkFBa0IsQ0FBQyxVQUFVO0FBQUEsTUFDakMsTUFBTSxLQUFNLE1BQU0sT0FBNEI7QUFBQSxNQUM5QyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsU0FBUyxVQUFVLEdBQUc7QUFBQSxRQUMzQyxHQUFHLGtCQUFrQixVQUFVO0FBQUEsTUFDbkM7QUFBQTtBQUFBLEdBRVA7QUFBQTtBQUdMLGVBQXNCLHlCQUF5QixDQUFDLFNBQW1GO0FBQUEsRUFDL0gsTUFBTSxPQUFPO0FBQUEsRUFFYixJQUFJLGdCQUFrQztBQUFBLEVBQ3RDLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtBQUFBLEVBRWpDLElBQUksU0FBUyxZQUFZO0FBQUEsSUFDckIsTUFBTSxZQUFZLFFBQVEsaUJBQWlCO0FBQUEsSUFDM0MsSUFBSSxZQUFZLEVBQUUsT0FBTyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sTUFBTTtBQUFBLE1BQ3JELElBQUksSUFBSTtBQUFBLFFBQUksUUFBUSxLQUFLO0FBQUEsS0FDNUI7QUFBQSxJQUVELE1BQU0sVUFBVSxJQUFJO0FBQUEsSUFDcEIsTUFBTSxVQUFVLFFBQVEsT0FBTyxTQUFTO0FBQUEsSUFDeEMsTUFBTSxjQUFjLE1BQU0sT0FBTyxPQUFPLFVBQVUsT0FBTyxTQUFTLEVBQUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUFBLElBRTFHLGdCQUFnQixNQUFNLE9BQU8sT0FBTyxVQUNoQztBQUFBLE1BQ0ksTUFBTTtBQUFBLE1BQ04sTUFBTSxRQUFRLE9BQU8sOEJBQThCO0FBQUEsTUFDbkQsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUFBLElBQ1YsR0FDQSxhQUNBLEVBQUUsTUFBTSxXQUFXLFFBQVEsSUFBSSxHQUMvQixPQUNBLENBQUMsV0FBVyxTQUFTLENBQ3pCO0FBQUEsRUFDSjtBQUFBLEVBRUEsTUFBTSxjQUFjLE9BQU8sU0FBbUM7QUFBQSxJQUMxRCxJQUFJLENBQUM7QUFBQSxNQUFlLE9BQU87QUFBQSxJQUUzQixNQUFNLGFBQWEsS0FBSyxVQUFVLElBQUk7QUFBQSxJQUN0QyxNQUFNLFVBQVUsSUFBSTtBQUFBLElBQ3BCLE1BQU0sWUFBWSxRQUFRLE9BQU8sVUFBVTtBQUFBLElBRTNDLE1BQU0sdUJBQXVCLE1BQU0sT0FBTyxPQUFPLFFBQzdDO0FBQUEsTUFDSSxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0EsUUFBUTtBQUFBLElBQ1osR0FDQSxlQUNBLFNBQ0o7QUFBQSxJQUVBLE9BQU8sSUFBSSxXQUFXLG9CQUFvQjtBQUFBO0FBQUEsRUFHOUMsTUFBTSxjQUFjLE9BQU8sa0JBQTBEO0FBQUEsSUFDakYsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0FBQUEsTUFBZSxPQUFPO0FBQUEsSUFFN0MsTUFBTSxjQUFjLHlCQUF5QixhQUFjLGNBQWMsU0FBeUI7QUFBQSxJQUVsRyxNQUFNLGlCQUFpQixNQUFNLE9BQU8sT0FBTyxRQUN2QztBQUFBLE1BQ0ksTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBLFFBQVE7QUFBQSxJQUNaLEdBQ0EsZUFDQSxXQUNKO0FBQUEsSUFFQSxNQUFNLFVBQVUsSUFBSTtBQUFBLElBQ3BCLE1BQU0sYUFBYSxRQUFRLE9BQU8sY0FBYztBQUFBLElBQ2hELE9BQU8sZ0JBQWdCLEtBQUssTUFBTSxVQUFVLENBQUM7QUFBQTtBQUFBLEVBR2pELE9BQU87QUFBQSxTQUNHLElBQUcsQ0FBQyxLQUErRDtBQUFBLE1BQ3JFLE1BQU0sS0FBSyxNQUFNLE9BQU87QUFBQSxNQUN4QixPQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUFBLFFBQ3BDLE1BQU0sY0FBYyxHQUFHLFlBQVksWUFBWSxVQUFVO0FBQUEsUUFDekQsTUFBTSxRQUFRLFlBQVksWUFBWSxVQUFVO0FBQUEsUUFDaEQsTUFBTSxVQUFVLE1BQU0sSUFBSSxHQUFHO0FBQUEsUUFDN0IsUUFBUSxVQUFVLE1BQU0sT0FBTyxRQUFRLEtBQUs7QUFBQSxRQUM1QyxRQUFRLFlBQVksWUFBWTtBQUFBLFVBQzVCLE1BQU0sU0FBUyxRQUFRO0FBQUEsVUFDdkIsSUFBSSxDQUFDLFFBQVE7QUFBQSxZQUNULFFBQVEsSUFBSTtBQUFBLFlBQ1o7QUFBQSxVQUNKO0FBQUEsVUFFQSxJQUFJLFNBQVMsZUFBZSxPQUFPLGdCQUFnQixlQUFlLE9BQU8sZ0JBQWdCLGFBQWE7QUFBQSxZQUNsRyxNQUFNLGdCQUFnQixNQUFNLFlBQVksT0FBTyxJQUFJO0FBQUEsWUFDbkQsUUFBUSxFQUFFLE1BQU0sZUFBZSxXQUFXLE9BQU8sVUFBVSxDQUFDO0FBQUEsWUFDNUQ7QUFBQSxVQUNKO0FBQUEsVUFFQSxRQUFRLFVBQVUsSUFBSTtBQUFBO0FBQUEsT0FFN0I7QUFBQTtBQUFBLFNBRUMsSUFBRyxDQUFDLEtBQWEsTUFBMEI7QUFBQSxNQUM3QyxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDeEIsSUFBSSxjQUFtQjtBQUFBLE1BRXZCLElBQUksU0FBUyxZQUFZO0FBQUEsUUFDckIsY0FBYyxNQUFNLFlBQVksSUFBSTtBQUFBLE1BQ3hDO0FBQUEsTUFFQSxPQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUFBLFFBQ3BDLE1BQU0sY0FBYyxHQUFHLFlBQVksWUFBWSxXQUFXO0FBQUEsUUFDMUQsTUFBTSxRQUFRLFlBQVksWUFBWSxVQUFVO0FBQUEsUUFDaEQsTUFBTSxVQUFVLE1BQU0sSUFBSSxFQUFFLE1BQU0sYUFBYSxXQUFXLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRztBQUFBLFFBQzNFLFFBQVEsVUFBVSxNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQUEsUUFDNUMsUUFBUSxZQUFZLE1BQU0sUUFBUTtBQUFBLE9BQ3JDO0FBQUE7QUFBQSxFQUVUO0FBQUE7QUFHSixTQUFTLGdCQUFnQixDQUFDLE1BQWMsUUFBcUI7QUFBQSxFQUN6RCxPQUFPLEdBQUcsUUFBUSxLQUFLLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTsiLAogICJkZWJ1Z0lkIjogIkE4QUU3Q0ZGRDQ5QTY0RDI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
459
|
+
//# debugId=E2DCF02A8DC9A70D64756E2164756E21
|
|
460
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbHMvY3JlYXRlLWlkLnRzIiwgIi4uL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElOR1swXTtcblxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gY3VycmVudCAlIGJhc2U7XG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEVOQ09ESU5HLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmICghKGNoYXIgaW4gY2hhck1hcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChjaGFyTWFwW2NoYXJdKTtcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XG59XG5cbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuL3V0aWxzL2NyZWF0ZS1pZC50c1wiO1xuXG5leHBvcnQgdHlwZSBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMgPSB7XG4gICAgcG9ydDoge1xuICAgICAgICBwb3N0TWVzc2FnZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBcIm1lc3NhZ2VcIiwgY2FsbGJhY2s6IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBcIm1lc3NhZ2VcIiwgY2FsbGJhY2s6IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICB9O1xuICAgIGNhY2hlU3RvcmFnZT86IENhY2hlU3RvcmFnZTtcbiAgICBjYWNoZUVuY3J5cHRpb24/OiBib29sZWFuO1xuICAgIG9uTG9nPzogKGxldmVsOiBzdHJpbmcsIGFyZ3M6IGFueVtdKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTWl4aW48VCwgVT4gPSBVICYgT21pdDxULCBrZXlvZiBVPjtcblxuZXhwb3J0IHR5cGUgQ2FjaGVTdHJhdGVneSA9ICdvZmYnIHwgJ2ZhbGxiYWNrJyB8ICd0aHJvdHRsZSc7XG5cbmV4cG9ydCB0eXBlIFJldHJ5U3RyYXRlZ3kgPSBib29sZWFuIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlU3RvcmFnZSB7XG4gICAgZ2V0OiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8eyBkYXRhOiBhbnk7IHRpbWVzdGFtcDogbnVtYmVyIH0gfCBudWxsPjtcbiAgICBzZXQ6IChrZXk6IHN0cmluZywgZGF0YTogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgdHlwZSBFeGVjdXRlT3B0aW9uczxUIGV4dGVuZHMgYW55ID0gYW55PiA9IHtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNhY2hlU3RyYXRlZ3k/OiBDYWNoZVN0cmF0ZWd5O1xuICAgIGNhY2hlVGhyb3R0bGVNcz86IG51bWJlcjtcbiAgICBvbkNhY2hlSGl0PzogKHJlc3VsdDogVCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcmV0cnlTdHJhdGVneT86IFJldHJ5U3RyYXRlZ3k7XG59O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdG9yR2VuZXJpYzxUPiA9IFQgZXh0ZW5kcyBBc3luY0dlbmVyYXRvcjxpbmZlciBJPiA/IEkgOiBuZXZlcjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVN0YXJnYXRlV29ya2VyPEdlbmVyYXRlZCBleHRlbmRzIHsgcm91dGVTY2hlbWE6IGFueTsgcmVqZWN0Q29kZTogYW55IH0+KHN0YXJnYXRlT3B0aW9uczogTWlsa2lvU3RhcmdhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgZXhlY3V0ZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGNvbm5lY3QgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSAhPT0gXCJQT05HXCIpIHJldHVybjtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoXCJQSU5HXCIpO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKSwgNDIpO1xuICAgIH0pO1xuICAgIGNvbnN0IGxvZ0hhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiIHx8ICFldmVudC5kYXRhLl9fbWlsa2lvX2xvZykgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGxldmVsLCBhcmdzIH0gPSBldmVudC5kYXRhLl9fbWlsa2lvX2xvZztcbiAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IEpTT04ucGFyc2UoYXJncyk7XG4gICAgICAgIGlmIChzdGFyZ2F0ZU9wdGlvbnMub25Mb2cpIHtcbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5vbkxvZyhsZXZlbCwgcGFyc2VkQXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25zb2xlRm4gPSAoY29uc29sZSBhcyBhbnkpW2xldmVsXSA/PyBjb25zb2xlLmxvZztcbiAgICAgICAgICAgIGNvbnNvbGVGbihbLi4ucGFyc2VkQXJncy5zbGljZSgwLCA1KSwgLi4ucGFyc2VkQXJncy5zbGljZSg1KS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGxvZ0hhbmRsZXIpO1xuXG4gICAgY29uc3Qgc3RhcmdhdGUgPSB7XG4gICAgICAgIGNsb3NlKCkge1xuICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgbG9nSGFuZGxlcik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4ZWN1dGVJZCBvZiBleGVjdXRlSWRzKSB7XG4gICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2UoYENMT1NFX1NUUkVBTToke2V4ZWN1dGVJZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiQ0xPU0VEXCIpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBleGVjdXRlPFBhdGggZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXT4oXG4gICAgICAgICAgICBwYXRoOiBQYXRoLFxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XG4gICAgICAgICAgICAgICAgRXhlY3V0ZU9wdGlvbnM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT4sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID4sXG4gICAgICAgICk6IFByb21pc2U8XG4gICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wi8J+lm1wiXSBleHRlbmRzIGJvb2xlYW5cbiAgICAgICAgICAgID8gLy8gYWN0aW9uXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICAgICAgOiAvLyBzdHJlYW1cbiAgICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgQXN5bmNHZW5lcmF0b3I8W1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGxdIHwgW251bGwsIEdlbmVyYXRvckdlbmVyaWM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT5dLCB1bmRlZmluZWQ+LCBFeGVjdXRlUmVzdWx0c09wdGlvbl1cbiAgICAgICAgPiB7XG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdDtcblxuICAgICAgICAgICAgICAgIGlmICghKHBhdGggYXMgc3RyaW5nKS5lbmRzV2l0aChcIn5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlU3RyYXRlZ3kgPSBvcHRpb25zPy5jYWNoZVN0cmF0ZWd5ID8/ICdvZmYnO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5yZXRyeVN0cmF0ZWd5ID09PSB0cnVlIHx8IG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3kgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgPSAyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zPy5yZXRyeVN0cmF0ZWd5ID09PSAnbnVtYmVyJyAmJiBvcHRpb25zPy5yZXRyeVN0cmF0ZWd5ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5U3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVUaHJvdHRsZU1zID0gb3B0aW9ucz8uY2FjaGVUaHJvdHRsZU1zID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gZ2VuZXJhdGVDYWNoZUtleShwYXRoIGFzIHN0cmluZywgb3B0aW9ucz8ucGFyYW1zKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FjaGVTdG9yYWdlID0gc3RhcmdhdGVPcHRpb25zLmNhY2hlU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmICFjYWNoZVN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlU3RvcmFnZSA9IGF3YWl0IGNyZWF0ZURlZmF1bHRDYWNoZVN0b3JhZ2UoeyBlbmNyeXB0aW9uOiBzdGFyZ2F0ZU9wdGlvbnMuY2FjaGVFbmNyeXB0aW9uIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RyYXRlZ3kgIT09ICdvZmYnICYmIGNhY2hlU3RvcmFnZSAmJiBvcHRpb25zPy5vbkNhY2hlSGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWQgPSBhd2FpdCBjYWNoZVN0b3JhZ2UuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvcHRpb25zLm9uQ2FjaGVIaXQoY2FjaGVkLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgb25DYWNoZUhpdCBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdHJhdGVneSA9PT0gJ3Rocm90dGxlJyAmJiBjYWNoZVN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IGNhY2hlU3RvcmFnZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBEYXRlLm5vdygpIC0gY2FjaGVkLnRpbWVzdGFtcCA8IGNhY2hlVGhyb3R0bGVNcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFtudWxsLCBjYWNoZWQuZGF0YSwgeyBleGVjdXRlSWQ6ICdjYWNoZWQnIH1dIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlUmVxdWVzdCA9ICgpOiBQcm9taXNlPFthbnksIGFueSwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dPiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcVJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXFFeGVjdXRlSWQgPSBfX2NyZWF0ZUlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkcy5hZGQocmVxRXhlY3V0ZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5leGVjdXRlSWQgIT09IHJlcUV4ZWN1dGVJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmRlbGV0ZShyZXFFeGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yW2V2ZW50LmRhdGEuZXJyb3IuY29kZV0gPSBldmVudC5kYXRhLmVycm9yLnJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcVJlc29sdmUoW2Vycm9yLCBudWxsLCB7IGV4ZWN1dGVJZDogcmVxRXhlY3V0ZUlkIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcVJlc29sdmUoW251bGwsIGV2ZW50LmRhdGEuZGF0YSwgeyBleGVjdXRlSWQ6IHJlcUV4ZWN1dGVJZCB9XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiByZXFFeGVjdXRlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogb3B0aW9ucz8ucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IFtlcnJvciwgcmVzdWx0LCByZXN1bHRPcHRpb25dID0gYXdhaXQgZXhlY3V0ZVJlcXVlc3QoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByZXRyeUluZGV4ID0gMDsgcmV0cnlJbmRleCA8IHJldHJ5Q291bnQgJiYgZXJyb3I7IHJldHJ5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5SW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3IsIHJlc3VsdCwgcmVzdWx0T3B0aW9uXSA9IGF3YWl0IGV4ZWN1dGVSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0cmF0ZWd5ICE9PSAnb2ZmJyAmJiBjYWNoZVN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWQgPSBhd2FpdCBjYWNoZVN0b3JhZ2UuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFtudWxsLCBjYWNoZWQuZGF0YSwgeyBleGVjdXRlSWQ6ICdjYWNoZWQnIH1dIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW2Vycm9yLCBudWxsLCByZXN1bHRPcHRpb25dKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0cmF0ZWd5ICE9PSAnb2ZmJyAmJiBjYWNoZVN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhY2hlU3RvcmFnZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtudWxsLCByZXN1bHQsIHJlc3VsdE9wdGlvbl0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdHJlYW1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZUlkID0gX19jcmVhdGVJZCgpO1xuICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmFkZChleGVjdXRlSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbG93OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVGbG93PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5leGVjdXRlSWQgIT09IGV4ZWN1dGVJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmbG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvdyA9IGNyZWF0ZUZsb3coc3RhcmdhdGVPcHRpb25zLCBleGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JbZXZlbnQuZGF0YS5lcnJvci5jb2RlXSA9IGV2ZW50LmRhdGEuZXJyb3IucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQgfV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdWNjZXNzKSByZXNvbHZlKFtudWxsLCBmbG93LCB7IGV4ZWN1dGVJZCB9XSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmRlbGV0ZShleGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdWNjZXNzKSBmbG93LnJldHVybih1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGZsb3cudGhyb3coZXZlbnQuZGF0YS5kYXRhPy5hdCgwKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZXZlbnQuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlSWRzLmRlbGV0ZShleGVjdXRlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93LnRocm93KGV2ZW50LmRhdGEuZGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhLnN1Y2Nlc3MpIGZsb3cuZW1pdChldmVudC5kYXRhLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcmdhdGVPcHRpb25zLnBvcnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogb3B0aW9ucz8ucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgICR0eXBlczogdW5kZWZpbmVkIGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWQsXG4gICAgICAgICAgICBlcnJvcjogR2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXTtcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIFtQYXRoIGluIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdXTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInBhcmFtc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VsdHM6IHtcbiAgICAgICAgICAgICAgICBbUGF0aCBpbiBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXV06IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxuICAgICAgICAgICAgICAgID8gLy8gYWN0aW9uXG4gICAgICAgICAgICAgICAgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXVxuICAgICAgICAgICAgICAgIDogLy8gc3RyZWFtXG4gICAgICAgICAgICAgICAgQXN5bmNHZW5lcmF0b3I8W1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGxdIHwgW251bGwsIEdlbmVyYXRvckdlbmVyaWM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT5dLCB1bmRlZmluZWQ+XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gc3RhcmdhdGU7XG59XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0Zsb3c8VCwgVFJldHVybiA9IGFueSwgVE5leHQgPSBhbnk+ID0ge1xuICAgIGVtaXQ6IChmbG93OiBUKSA9PiB2b2lkO1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+IE1pbGtpb0Zsb3c8VD47XG4gICAgbmV4dCguLi5bdmFsdWVdOiBbXSB8IFtUTmV4dF0pOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcbiAgICByZXR1cm4oZGF0YTogdW5kZWZpbmVkLCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcbiAgICB0aHJvdyhlcnJvcjogYW55LCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+Pjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93PFQ+KHN0YXJnYXRlT3B0aW9uczogTWlsa2lvU3RhcmdhdGVPcHRpb25zLCBleGVjdXRlSWQ6IHN0cmluZyk6IE1pbGtpb0Zsb3c8VD4ge1xuICAgIGxldCBzdGF0dXM6IFwicGVuZGluZ1wiIHwgXCJyZXNvbHZlZFwiIHwgXCJyZWplY3RlZFwiID0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgZmxvd3M6IEFycmF5PHtcbiAgICAgICAgYmxhbms6IGJvb2xlYW47XG4gICAgICAgIHByb21pc2U6IFByb21pc2U8VD47XG4gICAgICAgIHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcbiAgICAgICAgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICAgIH0+ID0gW107XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHtcbiAgICAgICAgZW1pdDogKGZsb3c6IFQpID0+IHtcbiAgICAgICAgICAgIGlmIChmbG93cy5hdCgtMSk/LmJsYW5rID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGZsb3dzLmF0KC0xKSE7XG4gICAgICAgICAgICAgICAgaXRlbS5ibGFuayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZShmbG93KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShmbG93KTtcbiAgICAgICAgICAgICAgICBmbG93cy5wdXNoKHsgLi4ucmVzb2x2ZXJzLCBibGFuazogZmFsc2UgfSBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi4oe1xuICAgICAgICAgICAgYXN5bmMgbmV4dCgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQ+PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIpIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XG4gICAgICAgICAgICAgICAgaWYgKGZsb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG4gICAgICAgICAgICAgICAgICAgIGZsb3dzLnB1c2goeyAuLi5yZXNvbHZlcnMsIGJsYW5rOiB0cnVlIH0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmxvdyA9IGZsb3dzLmF0KDApITtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbG93LnByb21pc2U7XG4gICAgICAgICAgICAgICAgZmxvd3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBzdGF0dXMgIT09IFwicGVuZGluZ1wiLCB2YWx1ZTogcmVzdWx0IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgcmV0dXJuKF86IHVuZGVmaW5lZCwgZGlzYWJsZVBvc3RDbG9zZU1lc3NhZ2U/OiB0cnVlKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9IFwicmVzb2x2ZWRcIjtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc2FibGVQb3N0Q2xvc2VNZXNzYWdlKSBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZShgQ0xPU0VfU1RSRUFNOiR7ZXhlY3V0ZUlkfWApO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgICAgICAgICAgICBmbG93LmJsYW5rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZsb3cucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIHRocm93KGVycjogYW55LCBkaXNhYmxlUG9zdENsb3NlTWVzc2FnZT86IHRydWUpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZVBvc3RDbG9zZU1lc3NhZ2UpIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKGBDTE9TRV9TVFJFQU06JHtleGVjdXRlSWR9YCk7XG4gICAgICAgICAgICAgICAgaWYgKGZsb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG4gICAgICAgICAgICAgICAgICAgIGZsb3dzLnB1c2goeyAuLi5yZXNvbHZlcnMsIGJsYW5rOiB0cnVlIH0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZmxvdy5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0gc2F0aXNmaWVzIEFzeW5jSXRlcmF0b3I8dW5rbm93bj4pLFxuICAgICAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBpdGVyYXRvciBhcyBNaWxraW9GbG93PFQ+O1xufVxuXG5mdW5jdGlvbiB3aXRoUmVzb2x2ZXJzPFQgPSBhbnk+KCk6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+IHtcbiAgICBsZXQgcmVzb2x2ZTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZXNvbHZlXCJdO1xuICAgIGxldCByZWplY3Q6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W1wicmVqZWN0XCJdO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcbiAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgIH0pO1xuICAgIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlc29sdmUhLCByZWplY3Q6IHJlamVjdCEgfTtcbn1cblxuY29uc3QgaXNvRGF0ZVBhdHRlcm4gPSAvXihcXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHsxLDN9KT8pKFp8WystXVxcZHsyfTo/XFxkezJ9KT8kLztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldml2ZUpTT05QYXJzZTxUPihqc29uOiBUKTogVCB7XG4gICAgaWYgKGpzb24gIT09IG51bGwgJiYgdHlwZW9mIGpzb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSB8fCAodHlwZW9mIChqc29uIGFzIGFueSkuZ2V0VGltZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgKGpzb24gYXMgYW55KS50b0lTT1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgICAgICByZXR1cm4ganNvbi5tYXAoKGl0ZW0pID0+IHJldml2ZUpTT05QYXJzZShpdGVtKSkgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9IGFzIFQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZSgnOicsICcnKX1gIDogYCR7bWF0Y2hbMV19WmA7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm9ybWFsaXplZERhdGVTdHJpbmcpIGFzIGFueTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbn1cblxuY29uc3QgREJfTkFNRSA9ICdTdGFyZ2F0ZVdvcmtlcic7XG5jb25zdCBTVE9SRV9OQU1FID0gJ2NhY2hlcyc7XG5sZXQgZGJJbnN0YW5jZTogSURCRGF0YWJhc2UgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gb3BlbkRCKCk6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgICBpZiAoZGJJbnN0YW5jZSkgcmV0dXJuIGRiSW5zdGFuY2U7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oREJfTkFNRSwgMSk7XG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBkYkluc3RhbmNlID0gcmVxdWVzdC5yZXN1bHQ7XG4gICAgICAgICAgICByZXNvbHZlKGRiSW5zdGFuY2UpO1xuICAgICAgICB9O1xuICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGIgPSAoZXZlbnQudGFyZ2V0IGFzIElEQk9wZW5EQlJlcXVlc3QpLnJlc3VsdDtcbiAgICAgICAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFX05BTUUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENhY2hlU3RvcmFnZShvcHRpb25zPzogeyBlbmNyeXB0aW9uPzogYm9vbGVhbjsgZW5jcnlwdGlvbktleT86IHN0cmluZyB9KTogUHJvbWlzZTxDYWNoZVN0b3JhZ2U+IHtcbiAgICBhd2FpdCBvcGVuREIoKTtcblxuICAgIGxldCBlbmNyeXB0aW9uS2V5OiBDcnlwdG9LZXkgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBjb3VudGVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmVuY3J5cHRpb24pIHtcbiAgICAgICAgY29uc3Qga2V5U3RyaW5nID0gb3B0aW9ucy5lbmNyeXB0aW9uS2V5ID8/IERCX05BTUU7XG4gICAgICAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShrZXlTdHJpbmcpLmZvckVhY2goKGJ5dGUsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpIDwgMTYpIGNvdW50ZXJbaV0gPSBieXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIGNvbnN0IGtleURhdGEgPSBlbmNvZGVyLmVuY29kZShrZXlTdHJpbmcpO1xuICAgICAgICBjb25zdCBpbXBvcnRlZEtleSA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCdyYXcnLCBrZXlEYXRhLCB7IG5hbWU6ICdQQktERjInIH0sIGZhbHNlLCBbJ2Rlcml2ZUtleSddKTtcblxuICAgICAgICBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kZXJpdmVLZXkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1BCS0RGMicsXG4gICAgICAgICAgICAgICAgc2FsdDogZW5jb2Rlci5lbmNvZGUoJ21pbGtpby1zdGFyZ2F0ZS13b3JrZXItY2FjaGUnKSxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgaGFzaDogJ1NIQS0yNTYnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICAgICAgeyBuYW1lOiAnQUVTLUNUUicsIGxlbmd0aDogMjU2IH0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIFsnZW5jcnlwdCcsICdkZWNyeXB0J10sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdERhdGEgPSBhc3luYyAoZGF0YTogYW55KTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICAgIGlmICghZW5jcnlwdGlvbktleSkgcmV0dXJuIGRhdGE7XG5cbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIGNvbnN0IGRhdGFCeXRlcyA9IGVuY29kZXIuZW5jb2RlKGpzb25TdHJpbmcpO1xuXG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZEFycmF5QnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBRVMtQ1RSJyxcbiAgICAgICAgICAgICAgICBjb3VudGVyOiBjb3VudGVyLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogNjQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleSEsXG4gICAgICAgICAgICBkYXRhQnl0ZXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuY3J5cHRlZEFycmF5QnVmZmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVjcnlwdERhdGEgPSBhc3luYyAoZW5jcnlwdGVkRGF0YTogQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5IHx8ICFlbmNyeXB0ZWREYXRhKSByZXR1cm4gZW5jcnlwdGVkRGF0YTtcblxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGVuY3J5cHRlZERhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gKGVuY3J5cHRlZERhdGEuYnVmZmVyIGFzIEFycmF5QnVmZmVyKSA6IGVuY3J5cHRlZERhdGE7XG5cbiAgICAgICAgY29uc3QgZGVjcnlwdGVkQnl0ZXMgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FFUy1DVFInLFxuICAgICAgICAgICAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiA2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5ISxcbiAgICAgICAgICAgIGFycmF5QnVmZmVyLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IGRlY29kZXIuZGVjb2RlKGRlY3J5cHRlZEJ5dGVzKTtcbiAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGpzb25TdHJpbmcpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTx7IGRhdGE6IGFueTsgdGltZXN0YW1wOiBudW1iZXIgfSB8IG51bGw+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRCKCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oU1RPUkVfTkFNRSwgJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShTVE9SRV9OQU1FKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gc3RvcmUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucz8uZW5jcnlwdGlvbiAmJiAocmVzdWx0LmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCByZXN1bHQuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWREYXRhID0gYXdhaXQgZGVjcnlwdERhdGEocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRhdGE6IGRlY3J5cHRlZERhdGEsIHRpbWVzdGFtcDogcmVzdWx0LnRpbWVzdGFtcCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0ID8/IG51bGwpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRCKCk7XG4gICAgICAgICAgICBsZXQgZGF0YVRvU3RvcmU6IGFueSA9IGRhdGE7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5lbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgZGF0YVRvU3RvcmUgPSBhd2FpdCBlbmNyeXB0RGF0YShkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFNUT1JFX05BTUUsICdyZWFkd3JpdGUnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzdG9yZS5wdXQoeyBkYXRhOiBkYXRhVG9TdG9yZSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH0sIGtleSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVDYWNoZUtleShwYXRoOiBzdHJpbmcsIHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cGF0aH06JHtKU09OLnN0cmluZ2lmeShwYXJhbXMgPz8ge30pfWA7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBTUEsU0FBUyxpQkFBaUIsQ0FBQyxTQUE2QjtBQUFBLEVBQ3RELElBQUksQ0FBQyxRQUFRO0FBQUEsSUFBUSxRQUFRLFNBQVM7QUFBQSxFQUN0QyxJQUFJLFFBQVEsU0FBUztBQUFBLElBQUcsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDeEQsSUFBSSxRQUFRLFNBQVM7QUFBQSxJQUFJLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQ3pELElBQUksUUFBUSxhQUFhLFFBQVEsU0FBUztBQUFBLElBQUcsTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDN0UsSUFBSSxXQUFXO0FBQUEsRUFDZixJQUFJLGNBQWM7QUFBQSxFQUNsQixPQUFPO0FBQUEsSUFDTCxRQUFRLEdBQUc7QUFBQSxNQUNULElBQUksYUFBYSxRQUFRO0FBQUEsTUFDekIsTUFBTSxNQUFNLEtBQUssSUFBSTtBQUFBLE1BQ3JCLElBQUksS0FBSztBQUFBLE1BQ1QsSUFBSSxRQUFRLFdBQVc7QUFBQSxRQUNyQixjQUFjO0FBQUEsUUFDZCxLQUFLLEdBQUcsS0FBSyxpQkFBaUIsT0FBTyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUFBLE1BQzVEO0FBQUEsTUFDQSxJQUFJLFFBQVEsY0FBYyxhQUFhLEtBQUs7QUFBQSxRQUMxQyxLQUFLLEdBQUcsS0FBSyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFBQSxNQUM5RCxFQUFPO0FBQUEs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QUEsVUFFQSxRQUFRLFVBQVUsSUFBSTtBQUFBO0FBQUEsT0FFN0I7QUFBQTtBQUFBLFNBRUMsSUFBRyxDQUFDLEtBQWEsTUFBMEI7QUFBQSxNQUM3QyxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDeEIsSUFBSSxjQUFtQjtBQUFBLE1BRXZCLElBQUksU0FBUyxZQUFZO0FBQUEsUUFDckIsY0FBYyxNQUFNLFlBQVksSUFBSTtBQUFBLE1BQ3hDO0FBQUEsTUFFQSxPQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUFBLFFBQ3BDLE1BQU0sY0FBYyxHQUFHLFlBQVksWUFBWSxXQUFXO0FBQUEsUUFDMUQsTUFBTSxRQUFRLFlBQVksWUFBWSxVQUFVO0FBQUEsUUFDaEQsTUFBTSxVQUFVLE1BQU0sSUFBSSxFQUFFLE1BQU0sYUFBYSxXQUFXLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRztBQUFBLFFBQzNFLFFBQVEsVUFBVSxNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQUEsUUFDNUMsUUFBUSxZQUFZLE1BQU0sUUFBUTtBQUFBLE9BQ3JDO0FBQUE7QUFBQSxFQUVUO0FBQUE7QUFHSixTQUFTLGdCQUFnQixDQUFDLE1BQWMsUUFBcUI7QUFBQSxFQUN6RCxPQUFPLEdBQUcsUUFBUSxLQUFLLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTsiLAogICJkZWJ1Z0lkIjogIkUyRENGMDJBOERDOUE3MEQ2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|