sonamu 0.9.12 → 0.9.13
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/database/puri.d.ts +2 -0
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +9 -1
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +2 -1
- package/package.json +4 -4
- package/src/database/__tests__/puri.test.ts +35 -0
- package/src/database/puri.ts +10 -0
- package/src/database/puri.types.test-d.ts +21 -0
- package/src/testing/dev-vitest-manager.ts +2 -0
package/dist/database/puri.d.ts
CHANGED
|
@@ -139,6 +139,8 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
|
|
|
139
139
|
whereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
140
140
|
orWhereGroup(callback: (g: WhereGroup<TTables>) => void): this;
|
|
141
141
|
orderBy<TColumn extends ResultAvailableColumns<TTables, TResult>>(column: TColumn | SqlExpression<"number"> | SqlExpression<"string">, direction: "asc" | "desc"): this;
|
|
142
|
+
forUpdate(): this;
|
|
143
|
+
forShare(): this;
|
|
142
144
|
/**
|
|
143
145
|
* 벡터 유사도 검색 설정
|
|
144
146
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|
package/dist/database/puri.js
CHANGED
|
@@ -538,6 +538,14 @@ var init_puri = __esmMin((() => {
|
|
|
538
538
|
}
|
|
539
539
|
return this;
|
|
540
540
|
}
|
|
541
|
+
forUpdate() {
|
|
542
|
+
this.knexQuery.forUpdate();
|
|
543
|
+
return this;
|
|
544
|
+
}
|
|
545
|
+
forShare() {
|
|
546
|
+
this.knexQuery.forShare();
|
|
547
|
+
return this;
|
|
548
|
+
}
|
|
541
549
|
/**
|
|
542
550
|
* 벡터 유사도 검색 설정
|
|
543
551
|
*
|
|
@@ -1022,4 +1030,4 @@ var init_puri = __esmMin((() => {
|
|
|
1022
1030
|
//#endregion
|
|
1023
1031
|
init_puri();
|
|
1024
1032
|
export { JoinClauseGroup, Puri, ResolvedPuri, WhereGroup, init_puri };
|
|
1025
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS5qcyIsIm5hbWVzIjpbImtuZXg6IEtuZXgiLCJzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10iLCJmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IiwiYnVpbGRlcjogS25leC5RdWVyeUJ1aWxkZXIiLCJjYWxsYmFjazogS25leC5Kb2luQ2xhdXNlIiwia25leFF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlciIsIm1lcmdlT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL3B1cmkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC5cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZVNwZWMgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBDbGVhclN0YXRlbWVudHMgfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBdmFpbGFibGVDb2x1bW5zLFxuICB0eXBlIENvbHVtbktleXMsXG4gIHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICB0eXBlIEV4cGFuZCxcbiAgdHlwZSBFeHRyYWN0Q29sdW1uVHlwZSxcbiAgdHlwZSBGdWxsdGV4dENvbHVtbnMsXG4gIHR5cGUgRnV6enlPcGVyYXRvcixcbiAgdHlwZSBJbnNlcnREYXRhLFxuICB0eXBlIEluc2VydFJlc3VsdCxcbiAgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyLFxuICB0eXBlIExlZnRKb2luTWFya2VyRm9yLFxuICB0eXBlIE51bWVyaWNDb2x1bW5zLFxuICB0eXBlIE9uQ29uZmxpY3RBY3Rpb24sXG4gIHR5cGUgUGFyc2VTZWxlY3RPYmplY3QsXG4gIHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgdHlwZSBTZWxlY3RBbGxSZXN1bHQsXG4gIHR5cGUgU2VsZWN0T2JqZWN0LFxuICB0eXBlIFNpbmdsZVRhYmxlVmFsdWUsXG4gIHR5cGUgU3FsRXhwcmVzc2lvbixcbiAgdHlwZSBUc0hpZ2hsaWdodE9wdGlvbnMsXG4gIHR5cGUgVHNRdWVyeUNvbmZpZyxcbiAgdHlwZSBUc1F1ZXJ5T3B0aW9ucyxcbiAgdHlwZSBUc1JhbmtPcHRpb25zLFxuICB0eXBlIFZlY3RvckNvbHVtbnMsXG4gIHR5cGUgV2hlcmVDb25kaXRpb24sXG4gIHR5cGUgV2hlcmVPcGVyYXRvcixcbn0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgRlVaWllfT1BFUkFUT1JTIH0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuXG5mdW5jdGlvbiBub3JtYWxpemVGdXp6eU9wZXJhdG9yKG9wZXJhdG9yPzogc3RyaW5nKTogRnV6enlPcGVyYXRvciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcGVyYXRvcj8udHJpbSgpID8/IFwiPCVcIjtcbiAgY29uc3QgZnV6enlPcGVyYXRvciA9IEZVWlpZX09QRVJBVE9SUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gbm9ybWFsaXplZCk7XG5cbiAgaWYgKCFmdXp6eU9wZXJhdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZ1enp5IG9wZXJhdG9yOiAke29wZXJhdG9yID8/IFwiXCJ9YCk7XG4gIH1cblxuICByZXR1cm4gZnV6enlPcGVyYXRvcjtcbn1cblxuZXhwb3J0IGNsYXNzIFB1cmk8VFNjaGVtYSwgVFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFRSZXN1bHQ+IHtcbiAgcHJpdmF0ZSBrbmV4UXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyO1xuICBwcml2YXRlIHRhYmxlU3BlYzogVGFibGVTcGVjIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8g7IOd7ISx7J6QIOyLnOq3uOuLiOyymOuTpFxuICBjb25zdHJ1Y3RvcihrbmV4OiBLbmV4LCB0YWJsZU5hbWU6IHN0cmluZyk7XG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBQdXJpPFRTY2hlbWEsIGFueSwgYW55Pj4pO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga25leDogS25leCxcbiAgICB0YWJsZU5hbWVPclNvdXJjZTogYW55LFxuICApIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBDYXNlOiBuZXcgUHVyaShrbmV4LCBcInVzZXJzXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leCh0YWJsZU5hbWVPclNvdXJjZSkuZnJvbSh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgICB0aGlzLnRhYmxlU3BlYyA9IHRoaXMuc2FmZUdldFRhYmxlU3BlYyh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgc3BlYyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZW50cmllc1swXSk7XG4gICAgICBjb25zdCBbYWxpYXMsIHNvdXJjZV0gPSBlbnRyaWVzWzBdO1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXgoc291cmNlKS5mcm9tKHsgW2FsaWFzXTogc291cmNlIH0pO1xuICAgICAgICB0aGlzLnRhYmxlU3BlYyA9IHRoaXMuc2FmZUdldFRhYmxlU3BlYyhzb3VyY2UpO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIGNvbnN0IHN1YnF1ZXJ5QnVpbGRlciA9IHNvdXJjZS5yYXdRdWVyeSgpO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leC5mcm9tKHN1YnF1ZXJ5QnVpbGRlci5hcyhhbGlhcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgc2FmZUdldFRhYmxlU3BlYyh0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlU3BlYyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRW50aXR5TWFuYWdlci5nZXRUYWJsZVNwZWModGFibGVOYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpYyBTUUwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU0VMRUNUXG4gIHN0YXRpYyBjb3VudChjb2x1bW46IHN0cmluZyA9IFwiKlwiKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYENPVU5UKD8/KTo6aW50ZWdlcmAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBzdW0oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgU1VNKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBhdmcoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQVZHKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtYXgoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUFYKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtaW4oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUlOKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjb25jYXQoLi4uYXJnczogc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgQ09OQ0FUKCR7YXJncy5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgIF9wYXJhbXM6IGFyZ3MsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgdXBwZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBcIlVQUEVSKD8/KVwiLFxuICAgICAgX3BhcmFtczogW2NvbHVtbl0sXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbG93ZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBcIkxPV0VSKD8/KVwiLFxuICAgICAgX3BhcmFtczogW2NvbHVtbl0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB3b3JkU2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IFwid29yZF9zaW1pbGFyaXR5KD8sID8/KVwiLFxuICAgICAgICBfcGFyYW1zOiBbcXVlcnksIGNvbHVtbl0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGB3b3JkX3NpbWlsYXJpdHkoPywgJHtjb2x1bW4uX3NxbH0pYCxcbiAgICAgIF9wYXJhbXM6IFtxdWVyeSwgLi4uY29sdW1uLl9wYXJhbXNdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgc2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IFwic2ltaWxhcml0eSg/PywgPylcIixcbiAgICAgICAgX3BhcmFtczogW2NvbHVtbiwgcXVlcnldLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgc2ltaWxhcml0eSgke2NvbHVtbi5fc3FsfSwgPylgLFxuICAgICAgX3BhcmFtczogWy4uLmNvbHVtbi5fcGFyYW1zLCBxdWVyeV0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBzdHJpY3RXb3JkU2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IGBzdHJpY3Rfd29yZF9zaW1pbGFyaXR5KD8sID8/KWAsXG4gICAgICAgIF9wYXJhbXM6IFtxdWVyeSwgY29sdW1uXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYHN0cmljdF93b3JkX3NpbWlsYXJpdHkoPywgJHtjb2x1bW4uX3NxbH0pYCxcbiAgICAgIF9wYXJhbXM6IFtxdWVyeSwgLi4uY29sdW1uLl9wYXJhbXNdLFxuICAgIH07XG4gIH1cblxuICAvLyBSYXcgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIHJhd1N0cmluZyhzcWw6IHN0cmluZywgcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdcIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdTdHJpbmdBcnJheShzcWw6IHN0cmluZywgcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcInN0cmluZ1tdXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICBzdGF0aWMgcmF3TnVtYmVyKHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcIm51bWJlclwiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgc3RhdGljIHJhd0Jvb2xlYW4oc3FsOiBzdHJpbmcsIHBhcmFtczogS25leC5SYXdCaW5kaW5nW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJib29sZWFuXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImJvb2xlYW5cIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdEYXRlKHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwiZGF0ZVwiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJkYXRlXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogRlRTIOqygOyDieyWtCDtlZjsnbTrnbzsnbTtjIVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgdGl0bGU6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMudGl0bGVcIiwgc2VhcmNoKSxcbiAgICogICBjb250ZW50OiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLmNvbnRlbnRcIiwgc2VhcmNoLCB7XG4gICAqICAgICBzdGFydFNlbDogXCI8bWFyaz5cIixcbiAgICogICAgIHN0b3BTZWw6IFwiPC9tYXJrPlwiLFxuICAgKiAgICAgbWF4RnJhZ21lbnRzOiAzLFxuICAgKiAgIH0pLFxuICAgKiB9KVxuICAgKi9cbiAgc3RhdGljIHRzSGlnaGxpZ2h0KFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgX29wdGlvbnM/OiBUc0hpZ2hsaWdodE9wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIGNvbnN0IHsgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLCBjb25maWcgPSBcInNpbXBsZVwiLCAuLi5vcHRpb25zIH0gPSBfb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IGhsT3B0aW9uUGFydHMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGAke2luZmxlY3Rpb24uY2FtZWxpemUoa2V5KX09JHt2YWx1ZX1gO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGxPcHRpb25zID0gaGxPcHRpb25QYXJ0cy5sZW5ndGggPiAwID8gYCwgJyR7aGxPcHRpb25QYXJ0cy5qb2luKFwiLCBcIil9J2AgOiBcIlwiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInN0cmluZ1wiLFxuICAgICAgX3NxbDogYHRzX2hlYWRsaW5lKD8sID8/LCAke3BhcnNlcn0oPywgPykke2hsT3B0aW9uc30pYCxcbiAgICAgIF9wYXJhbXM6IFtjb25maWcsIGNvbHVtbiwgY29uZmlnLCBxdWVyeV0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRzX3JhbmtcbiAgc3RhdGljIHRzUmFuayhcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5fdHNSYW5rKFwidHNfcmFua1wiLCBjb2x1bW4sIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIHRzX3JhbmtfY2RcbiAgc3RhdGljIHRzUmFua0NkKFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInRzdmVjdG9yXCI+LFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUmFua09wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLl90c1JhbmsoXCJ0c19yYW5rX2NkXCIsIGNvbHVtbiwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIHRvVHNWZWN0b3IoY29sdW1uOiBzdHJpbmcsIGNvbmZpZzogc3RyaW5nID0gXCJzaW1wbGVcIik6IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInRzdmVjdG9yXCIsXG4gICAgICBfc3FsOiBgdG9fdHN2ZWN0b3IoPywgPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb25maWcsIGNvbHVtbl0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBfdHNSYW5rKFxuICAgIHR5cGU6IFwidHNfcmFua1wiIHwgXCJ0c19yYW5rX2NkXCIsXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwidHN2ZWN0b3JcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLFxuICAgICAgY29uZmlnID0gXCJzaW1wbGVcIixcbiAgICAgIG5vcm1hbGl6YXRpb24sXG4gICAgICB3ZWlnaHRzLFxuICAgIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgbGV0IHNxbFRlbXBsYXRlID0gYCR7dHlwZX0oYDtcblxuICAgIGlmICh3ZWlnaHRzKSB7XG4gICAgICBzcWxUZW1wbGF0ZSArPSBgQVJSQVlbJHt3ZWlnaHRzLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfV06OmZsb2F0NFtdLCBgO1xuICAgICAgcGFyYW1zLnB1c2goLi4ud2VpZ2h0cyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IGA/PywgJHtwYXJzZXJ9KD8sID8pYDtcbiAgICAgIHBhcmFtcy5wdXNoKGNvbHVtbiwgY29uZmlnLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IGAke2NvbHVtbi5fc3FsfSwgJHtwYXJzZXJ9KD8sID8pYDtcbiAgICAgIHBhcmFtcy5wdXNoKC4uLmNvbHVtbi5fcGFyYW1zLCBjb25maWcsIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXphdGlvbikge1xuICAgICAgc3FsVGVtcGxhdGUgKz0gXCIsID9cIjtcbiAgICAgIHBhcmFtcy5wdXNoKG5vcm1hbGl6YXRpb24pO1xuICAgIH1cblxuICAgIHNxbFRlbXBsYXRlICs9IFwiKVwiO1xuXG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJudW1iZXJcIiwgX3NxbDogc3FsVGVtcGxhdGUsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7KCQ7IiYXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHNjb3JlOiBQdXJpLnNjb3JlKCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgc2NvcmUoKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkucmF3TnVtYmVyKFwicGdyb29uZ2Ffc2NvcmUodGFibGVvaWQsIGN0aWQpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbjogc3RyaW5nLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+O1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbnM6IHN0cmluZ1tdLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj47XG5cbiAgc3RhdGljIGhpZ2hsaWdodChcbiAgICBjb2x1bW5PckNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPiB7XG4gICAgY29uc3QgcXVlcnlBcnIgPSBBcnJheS5pc0FycmF5KHF1ZXJ5KSA/IHF1ZXJ5IDogW3F1ZXJ5XTtcbiAgICBjb25zdCBxdWVyeUNsYXVzZSA9IGBBUlJBWVske3F1ZXJ5QXJyLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfV1gO1xuXG4gICAgLy8g64uo7J28IOy7rOufvOyduCDqsr3smrBcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29sdW1ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nKGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbCg/PywgJHtxdWVyeUNsYXVzZX0pYCwgW1xuICAgICAgICBjb2x1bW5PckNvbHVtbnMsXG4gICAgICAgIC4uLnF1ZXJ5QXJyLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8g7Lus65+8IOuwsOyXtOyduCDqsr3smrBcbiAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmdBcnJheShcbiAgICAgIGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbChBUlJBWVske2NvbHVtbk9yQ29sdW1ucy5tYXAoKCkgPT4gXCI/P1wiKS5qb2luKFwiLCBcIil9XSwgJHtxdWVyeUNsYXVzZX0pYCxcbiAgICAgIFsuLi5jb2x1bW5PckNvbHVtbnMsIC4uLnF1ZXJ5QXJyXSxcbiAgICApO1xuICB9XG5cbiAgLy8gU0VMRUNUIChvdmVyd3JpdGUpXG4gIHNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgUGFyc2VTZWxlY3RPYmplY3Q8VFRhYmxlcywgVFNlbGVjdD4+IHtcbiAgICAvLyDspJHssqkg6rCd7LK066W8IGZsYXTtlZjqsowg67OA7ZmYXG4gICAgY29uc3QgZmxhdFNlbGVjdCA9IHRoaXMuZmxhdHRlblNlbGVjdChzZWxlY3RPYmopO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhdXNlczogKHN0cmluZyB8IEtuZXguUmF3KVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29sdW1uT3JGdW5jdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmxhdFNlbGVjdCkpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uT3JGdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW5PckZ1bmN0aW9uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgICAgLy8gU1FMIO2VqOyImOyduCDqsr3smrBcbiAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKFxuICAgICAgICAgIHRoaXMua25leC5yYXcoYCR7Y29sdW1uT3JGdW5jdGlvbi5fc3FsfSBBUyBcIiR7YWxpYXN9XCJgLCBjb2x1bW5PckZ1bmN0aW9uLl9wYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOy7rOufvOyduCDqsr3smrBcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICAvLyBhbGlhc+yZgCDsu6zrn7zrqoXsnbQg6rCZ7Jy866m0IGFsaWFzIOyDneuetVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbGlhcyDsp4DsoJVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gQVMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIOqwneyytOulvCBmbGF0IOqwneyytOuhnCDrs4DtmZhcbiAgICog7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuICAgKiAgIOKGkiB7IHBhcmVudF9faWQ6IFwicGFyZW50LmlkXCIsIHBhcmVudF9fbmFtZTogXCJwYXJlbnQubmFtZVwiIH1cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlblNlbGVjdChzZWxlY3RPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWZpeCA9IFwiXCIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZWxlY3RPYmopKSB7XG4gICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fV9fJHtrZXl9YCA6IGtleTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhKFwiX3R5cGVcIiBpbiB2YWx1ZSkpIHtcbiAgICAgICAgLy8g7KSR7LKpIOqwneyytOyduCDqsr3smrAgLSDsnqzqt4Ag7LKY66asXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMuZmxhdHRlblNlbGVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmxhdFNlbGVjdCwgbmVzdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDqsJLsnbgg6rK97JqwICjsu6zrn7wg6rK966GcIOuYkOuKlCBTcWxFeHByZXNzaW9uKVxuICAgICAgICBmbGF0U2VsZWN0W2Z1bGxLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRTZWxlY3Q7XG4gIH1cblxuICAvLyBTRUxFQ1QgKHNlbGVjdOuKlCBvdmVyd3JpdGUsIGFwcGVuZFNlbGVjdOuKlCBhcHBlbmQpXG4gIGFwcGVuZFNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIFBhcnNlU2VsZWN0T2JqZWN0PFRUYWJsZXMsIFRTZWxlY3Q+PiB7XG4gICAgLy8g7KSR7LKpIOqwneyytOulvCBmbGF07ZWY6rKMIOuzgO2ZmFxuICAgIGNvbnN0IGZsYXRTZWxlY3QgPSB0aGlzLmZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqKTtcblxuICAgIGNvbnN0IHNlbGVjdENsYXVzZXM6IChzdHJpbmcgfCBLbmV4LlJhdylbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbHVtbk9yRnVuY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRTZWxlY3QpKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbk9yRnVuY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uT3JGdW5jdGlvbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChcbiAgICAgICAgICB0aGlzLmtuZXgucmF3KGAke2NvbHVtbk9yRnVuY3Rpb24uX3NxbH0gQVMgJHthbGlhc31gLCBjb2x1bW5PckZ1bmN0aW9uLl9wYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goY29sdW1uUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKHRoaXMua25leC5yZWYoY29sdW1uUGF0aCkuYXMoYWxpYXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKlxuICBzZWxlY3RBbGwoKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoXCIqXCIpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIERJU1RJTkNUXG4gIGRpc3RpbmN0PFRDb2x1bW5zIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oLi4uY29sdW1uczogVENvbHVtbnNbXSk6IHRoaXM7XG4gIGRpc3RpbmN0KC4uLmNvbHVtbnM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGlzdGluY3QoLi4uY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBDTEVBUlxuICBjbGVhcihzdGF0ZW1lbnQ6IENsZWFyU3RhdGVtZW50cyk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBrbmV47JeQIOyXhuyWtOyEnCDsp4HsoJEg6rWs7ZiE7ZWoXG4gIGNsZWFySm9pbihhbGlhczogc3RyaW5nKTogdGhpcyB7XG4gICAgKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cy5maWx0ZXIoKHM6IGFueSkgPT4ge1xuICAgICAgaWYgKFwiam9pblR5cGVcIiBpbiBzKSB7XG4gICAgICAgIGNvbnN0IFtfYWxpYXMsIF90YWJsZV0gPSBPYmplY3QuZW50cmllcyhzLnRhYmxlKVswXTtcbiAgICAgICAgcmV0dXJuIF9hbGlhcyAhPT0gYWxpYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIFRUYWJsZXMg7ZmV7J6lIVxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIO2FjOydtOu4lOuqheydtCDtgqRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBqb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwiam9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjsgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICAvLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw6528IOyekOuPmeycvOuhnCBMZWZ0Sm9pbmVkTWFya2VyIOqysOyglVxuICBsZWZ0Sm9pbjxcbiAgICBUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSxcbiAgICBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoVcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBsZWZ0Sm9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICBfX2NvbW1vbkpvaW4oam9pblR5cGU6IFwiam9pblwiIHwgXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gQ2FzZSAxOiBqb2luKFwicG9zdHNcIiwgLi4uKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVOYW1lT3JTcGVjO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgY2FsbGJhY2spXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgbGVmdCwgcmlnaHQpXG4gICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCBsZWZ0LCByaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBDYXNlIDI6IGpvaW4oeyBhbGlhczogXCJ0YWJsZVwiIH0sIC4uLikgb3Igam9pbih7IGFsaWFzOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGFibGVOYW1lT3JTcGVjKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFtbYWxpYXMsIHNwZWNdXSA9IGVudHJpZXM7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyDthYzsnbTruJQ6IGpvaW4oeyBwOiBcInBvc3RzXCIgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNwZWMgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIC8vIOyEnOu4jOy/vOumrDogam9pbih7IHNxOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkU6IOqwneyytCAtIOyCrOyaqTogLndoZXJlKHsgXCJ1LmlkXCI6IDEsIFwidS5zdGF0dXNcIjogXCJhY3RpdmVcIiB9KVxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgMSksIC53aGVyZShcInUuaWRcIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgXCI+XCIsIDEwKSwgLndoZXJlKFwidS5pZFwiLCBcIiE9XCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KGNvbHVtbjogVENvbHVtbiwgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZSguLi5hcmdzOiBbY29sdW1uT3JDb25kaXRpb25zOiBhbnksIG9wZXJhdG9yT3JWYWx1ZT86IGFueSwgdmFsdWU/OiBhbnldKTogdGhpcyB7XG4gICAgY29uc3QgW2NvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZV0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb25kaXRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiIT1cIikge1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gXCI9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zLCBvcGVyYXRvck9yVmFsdWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBJTlxuICB3aGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZUluKGNvbHVtbiwgdmFsdWVzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBXSEVSRSBOT1QgSU5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOb3RJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgTUFUQ0ggKCR7U3RyaW5nKGNvbHVtbil9KSBBR0FJTlNUICg/KWAsIFt2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4lcbiAgICogLSDsgqzsmqntlaAgUEdyb29uZ2Eg7J24642x7Iqk7JmAIOuPmeydvO2VnCDsu6zrn7wg6rWs7ISx7Jy866GcIOqygOyDie2VtOyVvCDsnbjrjbHsiqTqsIAg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiDri6jsnbwg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIG5hbWUgJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKlxuICAgKiDrs7Xtlakg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIEFSUkFZW25hbWU6OnRleHQsIGRlc2NyaXB0aW9uOjp0ZXh0XSAmQH4gJ3NlYXJjaCdcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHsgd2VpZ2h0cyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gQXJyYXkuaXNBcnJheShjb2x1bW4pXG4gICAgICA/IGBBUlJBWVske2NvbHVtbi5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogY29sdW1uO1xuICAgIGNvbnN0IHBncm9vbmdhQ29uZGl0aW9uID0gYHBncm9vbmdhX2NvbmRpdGlvbig/JHt3ZWlnaHRzPy5sZW5ndGggPyBgLCB3ZWlnaHRzID0+IEFSUkFZWyR7d2VpZ2h0cy5qb2luKFwiLFwiKX1dYCA6IFwiXCJ9KWA7XG5cbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSAmQH4gJHtwZ3Jvb25nYUNvbmRpdGlvbn1gLCBbdmFsdWVdKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgRlVMTFRFWFRcbiAgd2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IG9wdGlvbnMgfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAob3B0aW9ucyA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgPyBjb2x1bW4uX3NxbFxuICAgICAgICA6IFN0cmluZyhjb2x1bW4pO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gQEAgJHtwYXJzZXJ9KD8sID8pYCwgW2NvbmZpZywgdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9ybWFsaXplRnV6enlPcGVyYXRvcihvcHRpb25zPy5vcGVyYXRvcik7XG5cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiJVwiKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW4uX3NxbH0gJHtvcGVyYXRvcn0gP2AsIFsuLi5jb2x1bW4uX3BhcmFtcywgdmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGA/PyAke29wZXJhdG9yfSA/YCwgW2NvbHVtbiwgdmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPyAke29wZXJhdG9yfSAke2NvbHVtbi5fc3FsfWAsIFt2YWx1ZSwgLi4uY29sdW1uLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbdmFsdWUsIGNvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFJBV1xuICB3aGVyZVJhdyhzcWw6IHN0cmluZywgYmluZGluZ3M/OiByZWFkb25seSBLbmV4LlJhd0JpbmRpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KHNxbCwgYmluZGluZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUg6rSE7Zi4IOq3uOujue2VkVxuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9yV2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5vcldoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT1JERVIgQlkgKFNxbEV4cHJlc3Npb27snLzroZzrj4Qg7ZWgIOyImCDsnojslrTslbwg7ZWoKVxuICBvcmRlckJ5PFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4gfCBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgKTogdGhpcztcbiAgb3JkZXJCeShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+LFxuICAgIGRpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiID0gXCJhc2NcIixcbiAgKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYCR7Y29sdW1uLl9zcWx9ICR7ZGlyZWN0aW9ufWAsIGNvbHVtbi5fcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIOuyoe2EsCDsnKDsgqzrj4Qg6rKA7IOJIOyEpOyglVxuICAgKlxuICAgKiAtIFNFTEVDVOyXkCBzaW1pbGFyaXR5IOy7rOufvCDstpTqsIBcbiAgICogLSBXSEVSRSBjb2wgSVMgTk9UIE5VTEwg7LaU6rCAXG4gICAqIC0gdGhyZXNob2xk6rCAIOyeiOycvOuptCBXSEVSRSDsobDqsbQg7LaU6rCAXG4gICAqIC0g6riw7KG0IE9SREVSIEJZ66W8IGNsZWFy7ZWY6rOgIOybkOyLnCDsl7DsgrDsnpDroZwg7KCV66CsIChITlNXIOyduOuNseyKpCDstZzsoIHtmZQpXG4gICAqXG4gICAqIEBwYXJhbSBjb2x1bW4g67Kh7YSwIOy7rOufvCDqsr3roZxcbiAgICogQHBhcmFtIGVtYmVkZGluZyDsv7zrpqwg7J6E67Kg65SpIOuyoe2EsFxuICAgKiBAcGFyYW0gb3B0aW9ucyBtZXRob2QsIHRocmVzaG9sZCwgYXMg65OxIOyYteyFmFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIGNvc2luZSBzaW1pbGFyaXR5ICjquLDrs7jqsJIpXG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImNvc2luZVwiLFxuICAgKiAgIHRocmVzaG9sZDogMC41XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBMMiBkaXN0YW5jZVxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJsMlwiLFxuICAgKiAgIHRocmVzaG9sZDogMS41ICAvLyDqsbDrpqzqsIAgMS41IOydtO2VmOyduCDqsrDqs7zrp4xcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIElubmVyIHByb2R1Y3RcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwiaW5uZXJfcHJvZHVjdFwiLFxuICAgKiAgIHRocmVzaG9sZDogMC43XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHZlY3RvclNpbWlsYXJpdHkoXG4gICAgY29sdW1uOiBWZWN0b3JDb2x1bW5zPFRUYWJsZXM+LFxuICAgIGVtYmVkZGluZzogbnVtYmVyW10sXG4gICAgb3B0aW9uczoge1xuICAgICAgbWV0aG9kPzogXCJjb3NpbmVcIiB8IFwibDJcIiB8IFwiaW5uZXJfcHJvZHVjdFwiO1xuICAgICAgdGhyZXNob2xkPzogbnVtYmVyO1xuICAgICAgZGlzdGluY3RPbj86IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz47XG4gICAgfSA9IHt9LFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQgJiB7IHNpbWlsYXJpdHk6IG51bWJlciB9PiB7XG4gICAgY29uc3QgeyBtZXRob2QgPSBcImNvc2luZVwiLCB0aHJlc2hvbGQsIGRpc3RpbmN0T24gfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoXG4gICAgICAhQXJyYXkuaXNBcnJheShlbWJlZGRpbmcpIHx8XG4gICAgICBlbWJlZGRpbmcubGVuZ3RoID09PSAwIHx8XG4gICAgICBlbWJlZGRpbmcuc29tZSgodikgPT4gIU51bWJlci5pc0Zpbml0ZSh2KSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZW1iZWRkaW5nIHZlY3RvcjogZXhwZWN0ZWQgYSBub24tZW1wdHkgYXJyYXkgb2YgZmluaXRlIG51bWJlcnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdmVjdG9yTGl0ZXJhbCA9IEpTT04uc3RyaW5naWZ5KGVtYmVkZGluZy5tYXAoKHYpID0+IE51bWJlcih2KSkpO1xuICAgIGNvbnN0IG9wZXJhdG9yID0geyBjb3NpbmU6IFwiPD0+XCIsIGwyOiBcIjwtPlwiLCBpbm5lcl9wcm9kdWN0OiBcIjwjPlwiIH1bbWV0aG9kXTtcblxuICAgIC8vIG1ldGhvZOuzhCDsl7DsgrDsnpAg67CPIHNpbWlsYXJpdHkg6rOE7IKw7IudXG4gICAgLy8gLSBjb3NpbmU6IDw9PiAoY29zaW5lIGRpc3RhbmNlLCAwfjIpLCBzaW1pbGFyaXR5ID0gMSAtIGRpc3RhbmNlXG4gICAgLy8gLSBsMjogPC0+IChldWNsaWRlYW4gZGlzdGFuY2UpLCBzaW1pbGFyaXR5ID0gZGlzdGFuY2UgKOuCruydhOyImOuhnSDsnKDsgqwpXG4gICAgLy8gLSBpbm5lcl9wcm9kdWN0OiA8Iz4gKG5lZ2F0aXZlIGlubmVyIHByb2R1Y3QpLCBzaW1pbGFyaXR5ID0gLWRpc3RhbmNlICjrhpLsnYTsiJjroZ0g7Jyg7IKsKVxuICAgIGNvbnN0IHNpbWlsYXJpdHlFeHByID1cbiAgICAgIG1ldGhvZCA9PT0gXCJjb3NpbmVcIlxuICAgICAgICA/IHRoaXMua25leC5yYXcoYDEgLSAoPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yKSBhcyBzaW1pbGFyaXR5YCwgW2NvbHVtbiwgdmVjdG9yTGl0ZXJhbF0pXG4gICAgICAgIDogbWV0aG9kID09PSBcImwyXCJcbiAgICAgICAgICA/IHRoaXMua25leC5yYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvciBhcyBzaW1pbGFyaXR5YCwgW2NvbHVtbiwgdmVjdG9yTGl0ZXJhbF0pXG4gICAgICAgICAgOiB0aGlzLmtuZXgucmF3KGAtKD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcikgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKTtcblxuICAgIC8vIFdIRVJFIE5PVCBOVUxMXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOb3ROdWxsKGNvbHVtbik7XG5cbiAgICAvLyDquLDsobQgT1JERVIgQlkgY2xlYXJcbiAgICB0aGlzLmtuZXhRdWVyeS5jbGVhcihcIm9yZGVyXCIpO1xuICAgIGlmIChkaXN0aW5jdE9uKSB7XG4gICAgICAvLyBESVNUSU5DVCBPTuydgCBTRUxFQ1Qg7KCI7J2YIOunqCDslZ7sl5Ag7JmA7JW8IO2VmOuvgOuhnCwg6riw7KG0IHNlbGVjdChzdWJzZXQg7ZWE65Oc65OkKeulvCDrs7TsobQg7ZuEIGNsZWFy7ZWY6rOgIOuLpOyLnCDstpTqsIBcbiAgICAgIGNvbnN0IGV4aXN0aW5nU3Vic2V0Q29scyA9ICh0aGlzLmtuZXhRdWVyeSBhcyBhbnkpLl9zdGF0ZW1lbnRzXG4gICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gcy5ncm91cGluZyA9PT0gXCJjb2x1bW5zXCIpXG4gICAgICAgIC5mbGF0TWFwKChzOiBhbnkpID0+IHMudmFsdWUpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoXCJzZWxlY3RcIik7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3QodGhpcy5rbmV4LnJhdyhgRElTVElOQ1QgT04gKD8/KSA/P2AsIFtkaXN0aW5jdE9uLCBkaXN0aW5jdE9uXSkpO1xuICAgICAgZXhpc3RpbmdTdWJzZXRDb2xzLm1hcCgoY29sOiBhbnkpID0+IHRoaXMua25leFF1ZXJ5LnNlbGVjdChjb2wpKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzaW1pbGFyaXR5RXhwcik7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5UmF3KGA/PywgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yYCwgW1xuICAgICAgICBkaXN0aW5jdE9uLFxuICAgICAgICBjb2x1bW4sXG4gICAgICAgIHZlY3RvckxpdGVyYWwsXG4gICAgICBdKTtcblxuICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXhcbiAgICAgICAgLmZyb20odGhpcy5rbmV4UXVlcnkuYXMoXCJkaXN0aW5jdF92ZWN0b3JzXCIpKVxuICAgICAgICAuc2VsZWN0KFwiKlwiKVxuICAgICAgICAub3JkZXJCeShcInNpbWlsYXJpdHlcIiwgXCJkZXNjXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2ltaWxhcml0eUV4cHIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeVJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yYCwgW2NvbHVtbiwgdmVjdG9yTGl0ZXJhbF0pO1xuICAgIH1cblxuICAgIC8vIHRocmVzaG9sZFxuICAgIGlmICh0eXBlb2YgdGhyZXNob2xkID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aHJlc2hvbGQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2ZWN0b3JTaW1pbGFyaXR5IHRocmVzaG9sZDogJHt0aHJlc2hvbGR9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXN0aW5jdE9uKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZE9wID0gbWV0aG9kID09PSBcImwyXCIgPyBcIjw9XCIgOiBcIj49XCI7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKFwic2ltaWxhcml0eVwiLCB0aHJlc2hvbGRPcCwgdGhyZXNob2xkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZFZhbHVlID1cbiAgICAgICAgICBtZXRob2QgPT09IFwiY29zaW5lXCIgPyAxIC0gdGhyZXNob2xkIDogbWV0aG9kID09PSBcImlubmVyX3Byb2R1Y3RcIiA/IC10aHJlc2hvbGQgOiB0aHJlc2hvbGQ7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IgPD0gP2AsIFtcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgdmVjdG9yTGl0ZXJhbCxcbiAgICAgICAgICB0aHJlc2hvbGRWYWx1ZSxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8g6riw67O4IOy/vOumrCDrqZTshJzrk5zrk6RcbiAgbGltaXQoY291bnQ6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGltaXQ6IG11c3QgYmUgPj0gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkubGltaXQoY291bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb2Zmc2V0KGNvdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9mZnNldDogbXVzdCBiZSA+PSAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5vZmZzZXQoY291bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gR1JPVVAgQllcbiAgZ3JvdXBCeTxUQ29sdW1ucyBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KC4uLmNvbHVtbnM6IFRDb2x1bW5zW10pOiB0aGlzO1xuICBncm91cEJ5KC4uLmNvbHVtbnM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZ3JvdXBCeSguLi5jb2x1bW5zKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEhBVklOR1xuICBoYXZpbmcoY29uZGl0aW9uOiBzdHJpbmcpOiB0aGlzO1xuICBoYXZpbmc8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHRoaXM7XG4gIC8vIEhBVklORyDqtaztmIRcbiAgaGF2aW5nKC4uLmNvbmRpdGlvbnM6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKGNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBoYXZpbmcoXCJDT1VOVCgqKSA+IDEwXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeS5oYXZpbmcodGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gaGF2aW5nKFwiY291bnRcIiwgXCI+XCIsIDEwKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMF0pLFxuICAgICAgICBjb25kaXRpb25zWzFdLFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMl0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoYXZpbmcgYXJndW1lbnRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOyLpO2WiSDrqZTshJzrk5zrk6QgLSB0aGVuYWJsZSDqtaztmIRcbiAgdGhlbjxUUmVzdWx0MSA9IEV4cGFuZDxUUmVzdWx0PltdLCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IEV4cGFuZDxUUmVzdWx0PltdKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICBOYWl0ZS50KFwicHVyaTpleGVjdXRlZC1xdWVyeVwiLCB0aGlzLnRvUXVlcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRoZW4ob25mdWxmaWxsZWQgYXMgYW55LCBvbnJlamVjdGVkKTtcbiAgfVxuICBjYXRjaDxUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0IHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxuXG4gIC8vIO2VmOuCmOunjCDsv7zrpqxcbiAgZmlyc3QoKTogUmVzb2x2ZWRQdXJpPEV4cGFuZDxUUmVzdWx0PiwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5maXJzdCgpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8g7L+866as7ZWcIOugiOy9lOuTnOyXkOyEnCDtirnsoJUg7Lus65+866eMIOy2lOy2nO2VnCDrsLDsl7Qg66as7YS0XG4gIHBsdWNrPFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0IHwgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICApOiBSZXNvbHZlZFB1cmk8XG4gICAgVENvbHVtbiBleHRlbmRzIGtleW9mIFRSZXN1bHRcbiAgICAgID8gVFJlc3VsdFtUQ29sdW1uXVtdXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICAgbmV2ZXJcbiAgPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucGx1Y2soY29sdW1uIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBJTlNFUlQgOiDri6jsnbwg6rCd7LK0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+LFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PjtcbiAgLy8gSU5TRVJUOiDrsLDsl7RcbiAgaW5zZXJ0KFxuICAgIGRhdGE6IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVCDsi6TsoJwg6rWs7ZiEXG4gIGluc2VydChcbiAgICByYXdEYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHwgSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PltdLFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5zZXJ0KHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIFVQREFURVxuICB1cGRhdGUocmF3RGF0YTogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkudXBkYXRlKHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKU09OIOy7rOufvOyXkCDrjIDtlbQgc3RyaW5naWZ5IOyymOumrOulvCDsiJjtlontlZjripQg64K067aAIOuplOyEnOuTnOyeheuLiOuLpC5cbiAgICogb2JqZWN0IOuYkOuKlCBvYmplY3Qg67Cw7Je07J2EIOuwm+qzoCwgSlNPTiDsu6zrn7zsnbQg7J6I7Jy866m0IOyngeugrO2ZlO2VmOyXrCDrsJjtmZjtlanri4jri6QuXG4gICAqIOyngeygkSDqsJLsnYQg67OA6rK97ZWY66+A66GcIHNpZGUgZWZmZWN06rCAIOyeiOyKteuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgcmVmaW5lSnNvbkNvbHVtbnMoXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICApOiB0eXBlb2YgZGF0YSB7XG4gICAgLy8gdGFibGVTcGVj7J2064KYIGpzb25Db2x1bW5zIOyXhuuKlCDqsr3smrAg67CU66GcIOuwmO2ZmFxuICAgIGlmICghdGhpcy50YWJsZVNwZWMgfHwgIXRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLy8g65Ox66Gd65CcIFRhYmxlU3BlY+ydhCDthrXtlbQgSlNPTuy7rOufvCDrqqnroZ3snYQg6rCA7KC47JmAIEpTT04uc3RyaW5naWZ5IOyymOumrFxuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gdGhpcy50YWJsZVNwZWMuanNvbkNvbHVtbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl07XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YganNvbkNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2NvbHVtbl07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgZGF0YVtjb2x1bW5dID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLy8gSW5jcmVtZW50XG4gIGluY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5pbmNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cbiAgLy8gRGVjcmVtZW50XG4gIGRlY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5kZWNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBERUxFVEVcbiAgZGVsZXRlKCk6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5kZWxldGUoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIO2ZleyduCDsv7zrpqwg66as7YS0XG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgLy8g7L+866asIOuUlOuyhOq5hSDroZzqt7gg7Lac66ClXG4gIGRlYnVnKCk6IHRoaXMge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmN5YW4oXCJbUHVyaSBEZWJ1Z11cIil9ICR7Y2hhbGsueWVsbG93KHRoaXMudG9RdWVyeSgpKX1gKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNsb25lKCk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIC8vICdkdWFsJ+ydgCDrjZTrr7gg7YWM7J2067iU7J2066mwLCDrsJTroZwg7JWE656YIOykhOyXkOyEnCBrbmV4UXVlcnnqsIAg642u7Ja07JSM7JuM7KeR64uI64ukLlxuICAgIGNvbnN0IG5ld1B1cmkgPSBuZXcgUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0Pih0aGlzLmtuZXgsIFwiZHVhbFwiKTtcbiAgICBuZXdQdXJpLmtuZXhRdWVyeSA9IHRoaXMua25leFF1ZXJ5LmNsb25lKCk7XG4gICAgcmV0dXJuIG5ld1B1cmk7XG4gIH1cblxuICBmb3JtYXRTUUwodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU1FMIOyYiOyVveyWtCDrqqnroZ1cbiAgICBjb25zdCBrZXl3b3JkcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiSU5TRVJUXCIsXG4gICAgICBcIklOVE9cIixcbiAgICAgIFwiVkFMVUVTXCIsXG4gICAgICBcIlVQREFURVwiLFxuICAgICAgXCJERUxFVEVcIixcbiAgICAgIFwiQ1JFQVRFXCIsXG4gICAgICBcIlRBQkxFXCIsXG4gICAgICBcIkFMVEVSXCIsXG4gICAgICBcIkRST1BcIixcbiAgICAgIFwiSk9JTlwiLFxuICAgICAgXCJPTlwiLFxuICAgICAgXCJJTk5FUlwiLFxuICAgICAgXCJMRUZUXCIsXG4gICAgICBcIlJJR0hUXCIsXG4gICAgICBcIkZVTExcIixcbiAgICAgIFwiT1VURVJcIixcbiAgICAgIFwiR1JPVVBcIixcbiAgICAgIFwiQllcIixcbiAgICAgIFwiT1JERVJcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkRJU1RJTkNUXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIk9GRlNFVFwiLFxuICAgICAgXCJBU1wiLFxuICAgICAgXCJBTkRcIixcbiAgICAgIFwiT1JcIixcbiAgICAgIFwiTk9UXCIsXG4gICAgICBcIklOXCIsXG4gICAgICBcIkxJS0VcIixcbiAgICAgIFwiSVNcIixcbiAgICAgIFwiTlVMTFwiLFxuICAgICAgXCJDQVNFXCIsXG4gICAgICBcIldIRU5cIixcbiAgICAgIFwiVEhFTlwiLFxuICAgICAgXCJFTFNFXCIsXG4gICAgICBcIkVORFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgICAgXCJBTExcIixcbiAgICAgIFwiRVhJU1RTXCIsXG4gICAgICBcIkJFVFdFRU5cIixcbiAgICBdO1xuXG4gICAgbGV0IGZvcm1hdHRlZCA9IHVuZm9ybWF0dGVkO1xuXG4gICAgLy8g7JiI7JW97Ja066W8IOuMgOusuOyekOuhnCDrs4DtmZhcbiAgICBrZXl3b3Jkcy5mb3JFYWNoKChrZXl3b3JkKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtrZXl3b3JkfVxcXFxiYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBrZXl3b3JkLnRvVXBwZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8g7KO87JqUIOygiCDslZ7sl5Ag7KSE67CU6r+IIOy2lOqwgFxuICAgIGNvbnN0IG1ham9yQ2xhdXNlcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiR1JPVVAgQllcIixcbiAgICAgIFwiT1JERVIgQllcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIlVOSU9OXCIsXG4gICAgXTtcbiAgICBtYWpvckNsYXVzZXMuZm9yRWFjaCgoY2xhdXNlKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKygke2NsYXVzZX0pXFxcXHMrYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBgXFxuJHtjbGF1c2UudG9VcHBlckNhc2UoKX0gYCk7XG4gICAgfSk7XG5cbiAgICAvLyBKT0lOIOygiCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKygoPzpJTk5FUnxMRUZUfFJJR0hUfEZVTEwgT1VURVIpXFxzKyk/Sk9JTlxccysvZ2ksIFwiXFxuJDFKT0lOIFwiKTtcblxuICAgIC8vIEFORCwgT1Ig7KGw6rG0IOyymOumrFxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9cXHMrKEFORHxPUilcXHMrL2dpLCBcIlxcbiAgJDEgXCIpO1xuXG4gICAgLy8g6rSE7Zi4IOyymOumrCDrsI8g65Ok7Jes7JOw6riwXG4gICAgY29uc3QgbGluZXMgPSBmb3JtYXR0ZWQuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3QgaW5kZW50ZWRMaW5lcyA9IFtdO1xuICAgIGxldCBpbmRlbnRMZXZlbCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgICBpZiAoIXRyaW1tZWRMaW5lKSBjb250aW51ZTtcblxuICAgICAgLy8g64ur64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDqsJDshoxcbiAgICAgIGNvbnN0IGNsb3NpbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgb3BlbmluZ1BhcmVucyA9ICh0cmltbWVkTGluZS5tYXRjaCgvXFwoL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgIGlmIChjbG9zaW5nUGFyZW5zID4gMCAmJiBvcGVuaW5nUGFyZW5zID09PSAwKSB7XG4gICAgICAgIGluZGVudExldmVsID0gTWF0aC5tYXgoMCwgaW5kZW50TGV2ZWwgLSBjbG9zaW5nUGFyZW5zKTtcbiAgICAgIH1cblxuICAgICAgLy8g7ZiE7J6sIOuTpOyXrOyTsOq4sCDsoIHsmqlcbiAgICAgIGNvbnN0IGluZGVudCA9IFwiICBcIi5yZXBlYXQoaW5kZW50TGV2ZWwpO1xuICAgICAgaW5kZW50ZWRMaW5lcy5wdXNoKGluZGVudCArIHRyaW1tZWRMaW5lKTtcblxuICAgICAgLy8g7Jes64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDspp3qsIBcbiAgICAgIGlmIChvcGVuaW5nUGFyZW5zID4gY2xvc2luZ1BhcmVucykge1xuICAgICAgICBpbmRlbnRMZXZlbCArPSBvcGVuaW5nUGFyZW5zIC0gY2xvc2luZ1BhcmVucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZW50ZWRMaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbiAgfVxuXG4gIHJhdyhzcWw6IHN0cmluZyk6IEtuZXguUmF3IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LnJhdyhzcWwpO1xuICB9XG5cbiAgLy8gS25leCDsv7zrpqwg67mM642UIOyngeygkSDsoJHqt7xcbiAgcmF3UXVlcnkoKTogS25leC5RdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hlcmVHcm91cDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IEtuZXguUXVlcnlCdWlsZGVyKSB7fVxuXG4gIC8vIHdoZXJlIOuplOyEnOuTnOuTpFxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3aGVyZUluIC8gd2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVOb3RJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gb3JXaGVyZSDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZShhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmVJbiAvIG9yV2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZU5vdEluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzO1xuICB3aGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGBNQVRDSCAoJHtTdHJpbmcoYXJnc1swXSl9KSBBR0FJTlNUICg/KWAsIFthcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcldoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgb3JXaGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhhcmdzWzBdKX0pIEFHQUlOU1QgKD8pYCwgW2FyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFNFQVJDSFxuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3QgeyB3ZWlnaHRzIH0gPSBhcmdzWzJdID8/IHt9O1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pXG4gICAgICA/IGBBUlJBWVske2FyZ3NbMF0ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGFyZ3NbMF07XG4gICAgY29uc3QgcGdyb29uZ2FDb25kaXRpb24gPSBgcGdyb29uZ2FfY29uZGl0aW9uKD8ke3dlaWdodHM/Lmxlbmd0aCA/IGAsIHdlaWdodHMgPT4gQVJSQVlbJHt3ZWlnaHRzLmpvaW4oXCIsXCIpfV1gIDogXCJcIn0pYDtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gJkB+ICR7cGdyb29uZ2FDb25kaXRpb259YCwgW2FyZ3NbMV1dKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVTZWFyY2goLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCB7IHdlaWdodHMgfSA9IGFyZ3NbMl0gPz8ge307XG4gICAgY29uc3QgY29sdW1uRXhwciA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSlcbiAgICAgID8gYEFSUkFZWyR7YXJnc1swXS5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogYXJnc1swXTtcbiAgICBjb25zdCBwZ3Jvb25nYUNvbmRpdGlvbiA9IGBwZ3Jvb25nYV9jb25kaXRpb24oPyR7d2VpZ2h0cz8ubGVuZ3RoID8gYCwgd2VpZ2h0cyA9PiBBUlJBWVske3dlaWdodHMuam9pbihcIixcIil9XWAgOiBcIlwifSlgO1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9ICZAfiAke3Bncm9vbmdhQ29uZGl0aW9ufWAsIFthcmdzWzFdXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzO1xuICB3aGVyZVRzU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3B0cyA9XG4gICAgICB0eXBlb2YgYXJnc1syXSA9PT0gXCJzdHJpbmdcIiA/ICh7IGNvbmZpZzogYXJnc1syXSB9IGFzIFRzUXVlcnlPcHRpb25zKSA6IChhcmdzWzJdID8/IHt9KTtcblxuICAgIGNvbnN0IHBhcnNlciA9IG9wdHMucGFyc2VyID8/IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIjtcbiAgICBjb25zdCBjb25maWcgPSBvcHRzLmNvbmZpZyA/PyBcInNpbXBsZVwiO1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPVxuICAgICAgdHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIgJiYgYXJnc1swXS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgID8gYXJnc1swXS5fc3FsXG4gICAgICAgIDogU3RyaW5nKGFyZ3NbMF0pO1xuXG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVUc1NlYXJjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIGFyZ3NbMl0gPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IGFyZ3NbMl0gfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAoYXJnc1syXSA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiICYmIGFyZ3NbMF0uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICA/IGFyZ3NbMF0uX3NxbFxuICAgICAgICA6IFN0cmluZyhhcmdzWzBdKTtcblxuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlRnV6enkoLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IoYXJnc1syXT8ub3BlcmF0b3IpO1xuXG4gICAgaWYgKG9wZXJhdG9yID09PSBcIiVcIikge1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuYnVpbGRlci53aGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID9gLCBbYXJnc1swXSwgYXJnc1sxXV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gJHthcmdzWzBdLl9zcWx9YCwgW2FyZ3NbMV0sIC4uLmFyZ3NbMF0uX3BhcmFtc10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVGdXp6eTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBvcGVyYXRvcj86IEZ1enp5T3BlcmF0b3I7XG4gICAgfSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUZ1enp5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub3JtYWxpemVGdXp6eU9wZXJhdG9yKGFyZ3NbMl0/Lm9wZXJhdG9yKTtcblxuICAgIGlmIChvcGVyYXRvciA9PT0gXCIlXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gP2AsIFthcmdzWzBdLCBhcmdzWzFdXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ICR7YXJnc1swXS5fc3FsfWAsIFthcmdzWzFdLCAuLi5hcmdzWzBdLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT04gVkFMKEFORCk6IOy7rOufvCA9IOqwkiAo6rCS7J2EIOy7rOufvCDssLjsobDqsIAg7JWE64uMIO2MjOudvOuvuO2EsOuhnCDrsJTsnbjrlKkpXG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEFORCBPTiBWQUw6IG9uVmFs7J2YIOuqheyLnOyggSBhbGlhcyAoS25leCDtmLjtmZgpXG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5hbmRPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SIE9OIFZBTDogT1Ig7KGw6rG07Jy866GcIOqwkiDrsJTsnbjrlKlcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vck9uVmFsKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IGltcGxlbWVudHMgUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9IFwiUHJvbWlzZVwiO1xuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlPFRSZXNvbHZlZD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyBPTiBDT05GTElDVCAtIOy7rOufvCDquLDrsJhcbiAgb25Db25mbGljdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGFjdGlvbj86IE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcz4sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuXG4gICAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIm5vdGhpbmdcIikge1xuICAgICAgLy8gRE8gTk9USElOR1xuICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLmlnbm9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBETyBVUERBVEVcbiAgICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIGFjdGlvbi51cGRhdGUg67Cw7Je0IO2Yle2DnCA6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlKSkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UodXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFjdGlvbi51cGRhdGUg6rCd7LK0IO2Yle2DnDogeyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IHJhdyguLi4pIH1cbiAgICAgICAgY29uc3QgbWVyZ2VPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgXCJfdHlwZVwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB2YWx1ZS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTcWxFeHByZXNzaW9uIOKGkiBrbmV4LnJhdygp66GcIOuzgO2ZmFxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHRoaXMua25leC5yYXcoKHZhbHVlIGFzIFNxbEV4cHJlc3Npb248YW55PikuX3NxbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOydvOuwmCDqsJJcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UobWVyZ2VPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gUkVUVVJOSU5HOiBcIipcIiAtIOyghOyytCDsu6zrn7xcbiAgcmV0dXJuaW5nKGNvbHVtbjogXCIqXCIpOiBSZXNvbHZlZFB1cmk8VFJldHVybmluZ1tdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog64uo7J28IOy7rOufvFxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuzteyImCDsu6zrn7wgKOuwsOyXtClcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBUQ29sdW1uW10sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HIOq1rO2YhFxuICByZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc29sdmVkUHVyaTxhbnlbXSwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5yZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUEwQ0EsU0FBUyx1QkFBdUIsVUFBa0M7Q0FDaEUsTUFBTSxhQUFhLFVBQVUsTUFBTSxJQUFJO0NBQ3ZDLE1BQU0sZ0JBQWdCLGdCQUFnQixNQUFNLGNBQWMsY0FBYyxXQUFXO0FBRW5GLEtBQUksQ0FBQyxlQUFlO0FBQ2xCLFFBQU0sSUFBSSxNQUFNLDJCQUEyQixZQUFZLEtBQUs7O0FBRzlELFFBQU87Ozs7c0JBMUNnRDthQUVsQjtrQkE4QlE7Q0FhbEMsT0FBYixNQUFhLEtBQTREO0VBQ3ZFLEFBQVE7RUFDUixBQUFRLFlBQThCO0VBS3RDLFlBQ0UsQUFBT0EsTUFDUCxtQkFDQTtHQUZPO0FBR1AsT0FBSSxPQUFPLHNCQUFzQixVQUFVO0FBRXpDLFNBQUssWUFBWSxLQUFLLEtBQUssa0JBQWtCLENBQUMsS0FBSyxrQkFBa0I7QUFDckUsU0FBSyxZQUFZLEtBQUssaUJBQWlCLGtCQUFrQjtjQUNoRCxPQUFPLHNCQUFzQixVQUFVO0lBQ2hELE1BQU0sVUFBVSxPQUFPLFFBQVEsa0JBQWtCO0FBQ2pELFFBQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsV0FBTSxJQUFJLE1BQU0seUNBQXlDOztBQUUzRCxXQUFPLFFBQVEsR0FBRztJQUNsQixNQUFNLENBQUMsT0FBTyxVQUFVLFFBQVE7QUFDaEMsUUFBSSxPQUFPLFdBQVcsVUFBVTtBQUM5QixVQUFLLFlBQVksS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxR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
|
|
1033
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS5qcyIsIm5hbWVzIjpbImtuZXg6IEtuZXgiLCJzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10iLCJmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IiwiYnVpbGRlcjogS25leC5RdWVyeUJ1aWxkZXIiLCJjYWxsYmFjazogS25leC5Kb2luQ2xhdXNlIiwia25leFF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlciIsIm1lcmdlT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL3B1cmkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC5cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUYWJsZVNwZWMgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBDbGVhclN0YXRlbWVudHMgfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBdmFpbGFibGVDb2x1bW5zLFxuICB0eXBlIENvbHVtbktleXMsXG4gIHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICB0eXBlIEV4cGFuZCxcbiAgdHlwZSBFeHRyYWN0Q29sdW1uVHlwZSxcbiAgdHlwZSBGdWxsdGV4dENvbHVtbnMsXG4gIHR5cGUgRnV6enlPcGVyYXRvcixcbiAgdHlwZSBJbnNlcnREYXRhLFxuICB0eXBlIEluc2VydFJlc3VsdCxcbiAgdHlwZSBMZWZ0Sm9pbmVkTWFya2VyLFxuICB0eXBlIExlZnRKb2luTWFya2VyRm9yLFxuICB0eXBlIE51bWVyaWNDb2x1bW5zLFxuICB0eXBlIE9uQ29uZmxpY3RBY3Rpb24sXG4gIHR5cGUgUGFyc2VTZWxlY3RPYmplY3QsXG4gIHR5cGUgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgdHlwZSBTZWxlY3RBbGxSZXN1bHQsXG4gIHR5cGUgU2VsZWN0T2JqZWN0LFxuICB0eXBlIFNpbmdsZVRhYmxlVmFsdWUsXG4gIHR5cGUgU3FsRXhwcmVzc2lvbixcbiAgdHlwZSBUc0hpZ2hsaWdodE9wdGlvbnMsXG4gIHR5cGUgVHNRdWVyeUNvbmZpZyxcbiAgdHlwZSBUc1F1ZXJ5T3B0aW9ucyxcbiAgdHlwZSBUc1JhbmtPcHRpb25zLFxuICB0eXBlIFZlY3RvckNvbHVtbnMsXG4gIHR5cGUgV2hlcmVDb25kaXRpb24sXG4gIHR5cGUgV2hlcmVPcGVyYXRvcixcbn0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgRlVaWllfT1BFUkFUT1JTIH0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuXG5mdW5jdGlvbiBub3JtYWxpemVGdXp6eU9wZXJhdG9yKG9wZXJhdG9yPzogc3RyaW5nKTogRnV6enlPcGVyYXRvciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcGVyYXRvcj8udHJpbSgpID8/IFwiPCVcIjtcbiAgY29uc3QgZnV6enlPcGVyYXRvciA9IEZVWlpZX09QRVJBVE9SUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gbm9ybWFsaXplZCk7XG5cbiAgaWYgKCFmdXp6eU9wZXJhdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZ1enp5IG9wZXJhdG9yOiAke29wZXJhdG9yID8/IFwiXCJ9YCk7XG4gIH1cblxuICByZXR1cm4gZnV6enlPcGVyYXRvcjtcbn1cblxuZXhwb3J0IGNsYXNzIFB1cmk8VFNjaGVtYSwgVFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFRSZXN1bHQ+IHtcbiAgcHJpdmF0ZSBrbmV4UXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyO1xuICBwcml2YXRlIHRhYmxlU3BlYzogVGFibGVTcGVjIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8g7IOd7ISx7J6QIOyLnOq3uOuLiOyymOuTpFxuICBjb25zdHJ1Y3RvcihrbmV4OiBLbmV4LCB0YWJsZU5hbWU6IHN0cmluZyk7XG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBQdXJpPFRTY2hlbWEsIGFueSwgYW55Pj4pO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga25leDogS25leCxcbiAgICB0YWJsZU5hbWVPclNvdXJjZTogYW55LFxuICApIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBDYXNlOiBuZXcgUHVyaShrbmV4LCBcInVzZXJzXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leCh0YWJsZU5hbWVPclNvdXJjZSkuZnJvbSh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgICB0aGlzLnRhYmxlU3BlYyA9IHRoaXMuc2FmZUdldFRhYmxlU3BlYyh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZU5hbWVPclNvdXJjZSk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgc3BlYyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZW50cmllc1swXSk7XG4gICAgICBjb25zdCBbYWxpYXMsIHNvdXJjZV0gPSBlbnRyaWVzWzBdO1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXgoc291cmNlKS5mcm9tKHsgW2FsaWFzXTogc291cmNlIH0pO1xuICAgICAgICB0aGlzLnRhYmxlU3BlYyA9IHRoaXMuc2FmZUdldFRhYmxlU3BlYyhzb3VyY2UpO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIGNvbnN0IHN1YnF1ZXJ5QnVpbGRlciA9IHNvdXJjZS5yYXdRdWVyeSgpO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leC5mcm9tKHN1YnF1ZXJ5QnVpbGRlci5hcyhhbGlhcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgc2FmZUdldFRhYmxlU3BlYyh0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlU3BlYyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRW50aXR5TWFuYWdlci5nZXRUYWJsZVNwZWModGFibGVOYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpYyBTUUwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU0VMRUNUXG4gIHN0YXRpYyBjb3VudChjb2x1bW46IHN0cmluZyA9IFwiKlwiKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYENPVU5UKD8/KTo6aW50ZWdlcmAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBzdW0oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgU1VNKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBhdmcoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQVZHKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtYXgoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUFYKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtaW4oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUlOKD8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjb25jYXQoLi4uYXJnczogc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgQ09OQ0FUKCR7YXJncy5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgIF9wYXJhbXM6IGFyZ3MsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgdXBwZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBcIlVQUEVSKD8/KVwiLFxuICAgICAgX3BhcmFtczogW2NvbHVtbl0sXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbG93ZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBcIkxPV0VSKD8/KVwiLFxuICAgICAgX3BhcmFtczogW2NvbHVtbl0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB3b3JkU2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IFwid29yZF9zaW1pbGFyaXR5KD8sID8/KVwiLFxuICAgICAgICBfcGFyYW1zOiBbcXVlcnksIGNvbHVtbl0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGB3b3JkX3NpbWlsYXJpdHkoPywgJHtjb2x1bW4uX3NxbH0pYCxcbiAgICAgIF9wYXJhbXM6IFtxdWVyeSwgLi4uY29sdW1uLl9wYXJhbXNdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgc2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IFwic2ltaWxhcml0eSg/PywgPylcIixcbiAgICAgICAgX3BhcmFtczogW2NvbHVtbiwgcXVlcnldLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgc2ltaWxhcml0eSgke2NvbHVtbi5fc3FsfSwgPylgLFxuICAgICAgX3BhcmFtczogWy4uLmNvbHVtbi5fcGFyYW1zLCBxdWVyeV0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBzdHJpY3RXb3JkU2ltaWxhcml0eShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICAgIF9zcWw6IGBzdHJpY3Rfd29yZF9zaW1pbGFyaXR5KD8sID8/KWAsXG4gICAgICAgIF9wYXJhbXM6IFtxdWVyeSwgY29sdW1uXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYHN0cmljdF93b3JkX3NpbWlsYXJpdHkoPywgJHtjb2x1bW4uX3NxbH0pYCxcbiAgICAgIF9wYXJhbXM6IFtxdWVyeSwgLi4uY29sdW1uLl9wYXJhbXNdLFxuICAgIH07XG4gIH1cblxuICAvLyBSYXcgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIHJhd1N0cmluZyhzcWw6IHN0cmluZywgcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdcIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdTdHJpbmdBcnJheShzcWw6IHN0cmluZywgcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcInN0cmluZ1tdXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICBzdGF0aWMgcmF3TnVtYmVyKHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcIm51bWJlclwiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgc3RhdGljIHJhd0Jvb2xlYW4oc3FsOiBzdHJpbmcsIHBhcmFtczogS25leC5SYXdCaW5kaW5nW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJib29sZWFuXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImJvb2xlYW5cIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdEYXRlKHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwiZGF0ZVwiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJkYXRlXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogRlRTIOqygOyDieyWtCDtlZjsnbTrnbzsnbTtjIVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgdGl0bGU6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMudGl0bGVcIiwgc2VhcmNoKSxcbiAgICogICBjb250ZW50OiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLmNvbnRlbnRcIiwgc2VhcmNoLCB7XG4gICAqICAgICBzdGFydFNlbDogXCI8bWFyaz5cIixcbiAgICogICAgIHN0b3BTZWw6IFwiPC9tYXJrPlwiLFxuICAgKiAgICAgbWF4RnJhZ21lbnRzOiAzLFxuICAgKiAgIH0pLFxuICAgKiB9KVxuICAgKi9cbiAgc3RhdGljIHRzSGlnaGxpZ2h0KFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgX29wdGlvbnM/OiBUc0hpZ2hsaWdodE9wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIGNvbnN0IHsgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLCBjb25maWcgPSBcInNpbXBsZVwiLCAuLi5vcHRpb25zIH0gPSBfb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IGhsT3B0aW9uUGFydHMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGAke2luZmxlY3Rpb24uY2FtZWxpemUoa2V5KX09JHt2YWx1ZX1gO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGxPcHRpb25zID0gaGxPcHRpb25QYXJ0cy5sZW5ndGggPiAwID8gYCwgJyR7aGxPcHRpb25QYXJ0cy5qb2luKFwiLCBcIil9J2AgOiBcIlwiO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInN0cmluZ1wiLFxuICAgICAgX3NxbDogYHRzX2hlYWRsaW5lKD8sID8/LCAke3BhcnNlcn0oPywgPykke2hsT3B0aW9uc30pYCxcbiAgICAgIF9wYXJhbXM6IFtjb25maWcsIGNvbHVtbiwgY29uZmlnLCBxdWVyeV0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRzX3JhbmtcbiAgc3RhdGljIHRzUmFuayhcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5fdHNSYW5rKFwidHNfcmFua1wiLCBjb2x1bW4sIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIHRzX3JhbmtfY2RcbiAgc3RhdGljIHRzUmFua0NkKFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInRzdmVjdG9yXCI+LFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUmFua09wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLl90c1JhbmsoXCJ0c19yYW5rX2NkXCIsIGNvbHVtbiwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIHRvVHNWZWN0b3IoY29sdW1uOiBzdHJpbmcsIGNvbmZpZzogc3RyaW5nID0gXCJzaW1wbGVcIik6IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcInRzdmVjdG9yXCIsXG4gICAgICBfc3FsOiBgdG9fdHN2ZWN0b3IoPywgPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb25maWcsIGNvbHVtbl0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBfdHNSYW5rKFxuICAgIHR5cGU6IFwidHNfcmFua1wiIHwgXCJ0c19yYW5rX2NkXCIsXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwidHN2ZWN0b3JcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLFxuICAgICAgY29uZmlnID0gXCJzaW1wbGVcIixcbiAgICAgIG5vcm1hbGl6YXRpb24sXG4gICAgICB3ZWlnaHRzLFxuICAgIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgbGV0IHNxbFRlbXBsYXRlID0gYCR7dHlwZX0oYDtcblxuICAgIGlmICh3ZWlnaHRzKSB7XG4gICAgICBzcWxUZW1wbGF0ZSArPSBgQVJSQVlbJHt3ZWlnaHRzLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfV06OmZsb2F0NFtdLCBgO1xuICAgICAgcGFyYW1zLnB1c2goLi4ud2VpZ2h0cyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IGA/PywgJHtwYXJzZXJ9KD8sID8pYDtcbiAgICAgIHBhcmFtcy5wdXNoKGNvbHVtbiwgY29uZmlnLCBxdWVyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IGAke2NvbHVtbi5fc3FsfSwgJHtwYXJzZXJ9KD8sID8pYDtcbiAgICAgIHBhcmFtcy5wdXNoKC4uLmNvbHVtbi5fcGFyYW1zLCBjb25maWcsIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBpZiAobm9ybWFsaXphdGlvbikge1xuICAgICAgc3FsVGVtcGxhdGUgKz0gXCIsID9cIjtcbiAgICAgIHBhcmFtcy5wdXNoKG5vcm1hbGl6YXRpb24pO1xuICAgIH1cblxuICAgIHNxbFRlbXBsYXRlICs9IFwiKVwiO1xuXG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJudW1iZXJcIiwgX3NxbDogc3FsVGVtcGxhdGUsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7KCQ7IiYXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHNjb3JlOiBQdXJpLnNjb3JlKCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgc2NvcmUoKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkucmF3TnVtYmVyKFwicGdyb29uZ2Ffc2NvcmUodGFibGVvaWQsIGN0aWQpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbjogc3RyaW5nLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+O1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbnM6IHN0cmluZ1tdLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj47XG5cbiAgc3RhdGljIGhpZ2hsaWdodChcbiAgICBjb2x1bW5PckNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPiB7XG4gICAgY29uc3QgcXVlcnlBcnIgPSBBcnJheS5pc0FycmF5KHF1ZXJ5KSA/IHF1ZXJ5IDogW3F1ZXJ5XTtcbiAgICBjb25zdCBxdWVyeUNsYXVzZSA9IGBBUlJBWVske3F1ZXJ5QXJyLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfV1gO1xuXG4gICAgLy8g64uo7J28IOy7rOufvOyduCDqsr3smrBcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29sdW1ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nKGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbCg/PywgJHtxdWVyeUNsYXVzZX0pYCwgW1xuICAgICAgICBjb2x1bW5PckNvbHVtbnMsXG4gICAgICAgIC4uLnF1ZXJ5QXJyLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8g7Lus65+8IOuwsOyXtOyduCDqsr3smrBcbiAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmdBcnJheShcbiAgICAgIGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbChBUlJBWVske2NvbHVtbk9yQ29sdW1ucy5tYXAoKCkgPT4gXCI/P1wiKS5qb2luKFwiLCBcIil9XSwgJHtxdWVyeUNsYXVzZX0pYCxcbiAgICAgIFsuLi5jb2x1bW5PckNvbHVtbnMsIC4uLnF1ZXJ5QXJyXSxcbiAgICApO1xuICB9XG5cbiAgLy8gU0VMRUNUIChvdmVyd3JpdGUpXG4gIHNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgUGFyc2VTZWxlY3RPYmplY3Q8VFRhYmxlcywgVFNlbGVjdD4+IHtcbiAgICAvLyDspJHssqkg6rCd7LK066W8IGZsYXTtlZjqsowg67OA7ZmYXG4gICAgY29uc3QgZmxhdFNlbGVjdCA9IHRoaXMuZmxhdHRlblNlbGVjdChzZWxlY3RPYmopO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhdXNlczogKHN0cmluZyB8IEtuZXguUmF3KVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29sdW1uT3JGdW5jdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmxhdFNlbGVjdCkpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uT3JGdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW5PckZ1bmN0aW9uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgICAgLy8gU1FMIO2VqOyImOyduCDqsr3smrBcbiAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKFxuICAgICAgICAgIHRoaXMua25leC5yYXcoYCR7Y29sdW1uT3JGdW5jdGlvbi5fc3FsfSBBUyBcIiR7YWxpYXN9XCJgLCBjb2x1bW5PckZ1bmN0aW9uLl9wYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOy7rOufvOyduCDqsr3smrBcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICAvLyBhbGlhc+yZgCDsu6zrn7zrqoXsnbQg6rCZ7Jy866m0IGFsaWFzIOyDneuetVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhbGlhcyDsp4DsoJVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goYCR7Y29sdW1uUGF0aH0gQVMgJHthbGlhc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIOqwneyytOulvCBmbGF0IOqwneyytOuhnCDrs4DtmZhcbiAgICog7JiIOiB7IHBhcmVudDogeyBpZDogXCJwYXJlbnQuaWRcIiwgbmFtZTogXCJwYXJlbnQubmFtZVwiIH0gfVxuICAgKiAgIOKGkiB7IHBhcmVudF9faWQ6IFwicGFyZW50LmlkXCIsIHBhcmVudF9fbmFtZTogXCJwYXJlbnQubmFtZVwiIH1cbiAgICovXG4gIHByaXZhdGUgZmxhdHRlblNlbGVjdChzZWxlY3RPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWZpeCA9IFwiXCIpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBmbGF0U2VsZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZWxlY3RPYmopKSB7XG4gICAgICBjb25zdCBmdWxsS2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fV9fJHtrZXl9YCA6IGtleTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhKFwiX3R5cGVcIiBpbiB2YWx1ZSkpIHtcbiAgICAgICAgLy8g7KSR7LKpIOqwneyytOyduCDqsr3smrAgLSDsnqzqt4Ag7LKY66asXG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHRoaXMuZmxhdHRlblNlbGVjdCh2YWx1ZSwgZnVsbEtleSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmxhdFNlbGVjdCwgbmVzdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDqsJLsnbgg6rK97JqwICjsu6zrn7wg6rK966GcIOuYkOuKlCBTcWxFeHByZXNzaW9uKVxuICAgICAgICBmbGF0U2VsZWN0W2Z1bGxLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRTZWxlY3Q7XG4gIH1cblxuICAvLyBTRUxFQ1QgKHNlbGVjdOuKlCBvdmVyd3JpdGUsIGFwcGVuZFNlbGVjdOuKlCBhcHBlbmQpXG4gIGFwcGVuZFNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIFBhcnNlU2VsZWN0T2JqZWN0PFRUYWJsZXMsIFRTZWxlY3Q+PiB7XG4gICAgLy8g7KSR7LKpIOqwneyytOulvCBmbGF07ZWY6rKMIOuzgO2ZmFxuICAgIGNvbnN0IGZsYXRTZWxlY3QgPSB0aGlzLmZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqKTtcblxuICAgIGNvbnN0IHNlbGVjdENsYXVzZXM6IChzdHJpbmcgfCBLbmV4LlJhdylbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbHVtbk9yRnVuY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRTZWxlY3QpKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbk9yRnVuY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uT3JGdW5jdGlvbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChcbiAgICAgICAgICB0aGlzLmtuZXgucmF3KGAke2NvbHVtbk9yRnVuY3Rpb24uX3NxbH0gQVMgJHthbGlhc31gLCBjb2x1bW5PckZ1bmN0aW9uLl9wYXJhbXMpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goY29sdW1uUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKHRoaXMua25leC5yZWYoY29sdW1uUGF0aCkuYXMoYWxpYXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzZWxlY3RDbGF1c2VzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKlxuICBzZWxlY3RBbGwoKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBTZWxlY3RBbGxSZXN1bHQ8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoXCIqXCIpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIERJU1RJTkNUXG4gIGRpc3RpbmN0PFRDb2x1bW5zIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oLi4uY29sdW1uczogVENvbHVtbnNbXSk6IHRoaXM7XG4gIGRpc3RpbmN0KC4uLmNvbHVtbnM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGlzdGluY3QoLi4uY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBDTEVBUlxuICBjbGVhcihzdGF0ZW1lbnQ6IENsZWFyU3RhdGVtZW50cyk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBrbmV47JeQIOyXhuyWtOyEnCDsp4HsoJEg6rWs7ZiE7ZWoXG4gIGNsZWFySm9pbihhbGlhczogc3RyaW5nKTogdGhpcyB7XG4gICAgKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cy5maWx0ZXIoKHM6IGFueSkgPT4ge1xuICAgICAgaWYgKFwiam9pblR5cGVcIiBpbiBzKSB7XG4gICAgICAgIGNvbnN0IFtfYWxpYXMsIF90YWJsZV0gPSBPYmplY3QuZW50cmllcyhzLnRhYmxlKVswXTtcbiAgICAgICAgcmV0dXJuIF9hbGlhcyAhPT0gYWxpYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIFRUYWJsZXMg7ZmV7J6lIVxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIO2FjOydtOu4lOuqheydtCDtgqRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBqb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwiam9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjsgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICAvLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw6528IOyekOuPmeycvOuhnCBMZWZ0Sm9pbmVkTWFya2VyIOqysOyglVxuICBsZWZ0Sm9pbjxcbiAgICBUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSxcbiAgICBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoVcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBsZWZ0Sm9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICBfX2NvbW1vbkpvaW4oam9pblR5cGU6IFwiam9pblwiIHwgXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gQ2FzZSAxOiBqb2luKFwicG9zdHNcIiwgLi4uKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVOYW1lT3JTcGVjO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgY2FsbGJhY2spXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgbGVmdCwgcmlnaHQpXG4gICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCBsZWZ0LCByaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBDYXNlIDI6IGpvaW4oeyBhbGlhczogXCJ0YWJsZVwiIH0sIC4uLikgb3Igam9pbih7IGFsaWFzOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGFibGVOYW1lT3JTcGVjKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFtbYWxpYXMsIHNwZWNdXSA9IGVudHJpZXM7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyDthYzsnbTruJQ6IGpvaW4oeyBwOiBcInBvc3RzXCIgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNwZWMgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIC8vIOyEnOu4jOy/vOumrDogam9pbih7IHNxOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkU6IOqwneyytCAtIOyCrOyaqTogLndoZXJlKHsgXCJ1LmlkXCI6IDEsIFwidS5zdGF0dXNcIjogXCJhY3RpdmVcIiB9KVxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgMSksIC53aGVyZShcInUuaWRcIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgXCI+XCIsIDEwKSwgLndoZXJlKFwidS5pZFwiLCBcIiE9XCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KGNvbHVtbjogVENvbHVtbiwgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZSguLi5hcmdzOiBbY29sdW1uT3JDb25kaXRpb25zOiBhbnksIG9wZXJhdG9yT3JWYWx1ZT86IGFueSwgdmFsdWU/OiBhbnldKTogdGhpcyB7XG4gICAgY29uc3QgW2NvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZV0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb25kaXRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiIT1cIikge1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gXCI9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zLCBvcGVyYXRvck9yVmFsdWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBJTlxuICB3aGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZUluKGNvbHVtbiwgdmFsdWVzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBXSEVSRSBOT1QgSU5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOb3RJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgTUFUQ0ggKCR7U3RyaW5nKGNvbHVtbil9KSBBR0FJTlNUICg/KWAsIFt2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4lcbiAgICogLSDsgqzsmqntlaAgUEdyb29uZ2Eg7J24642x7Iqk7JmAIOuPmeydvO2VnCDsu6zrn7wg6rWs7ISx7Jy866GcIOqygOyDie2VtOyVvCDsnbjrjbHsiqTqsIAg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiDri6jsnbwg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIG5hbWUgJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKlxuICAgKiDrs7Xtlakg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIEFSUkFZW25hbWU6OnRleHQsIGRlc2NyaXB0aW9uOjp0ZXh0XSAmQH4gJ3NlYXJjaCdcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHsgd2VpZ2h0cyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gQXJyYXkuaXNBcnJheShjb2x1bW4pXG4gICAgICA/IGBBUlJBWVske2NvbHVtbi5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogY29sdW1uO1xuICAgIGNvbnN0IHBncm9vbmdhQ29uZGl0aW9uID0gYHBncm9vbmdhX2NvbmRpdGlvbig/JHt3ZWlnaHRzPy5sZW5ndGggPyBgLCB3ZWlnaHRzID0+IEFSUkFZWyR7d2VpZ2h0cy5qb2luKFwiLFwiKX1dYCA6IFwiXCJ9KWA7XG5cbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSAmQH4gJHtwZ3Jvb25nYUNvbmRpdGlvbn1gLCBbdmFsdWVdKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgRlVMTFRFWFRcbiAgd2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IG9wdGlvbnMgfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAob3B0aW9ucyA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgPyBjb2x1bW4uX3NxbFxuICAgICAgICA6IFN0cmluZyhjb2x1bW4pO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gQEAgJHtwYXJzZXJ9KD8sID8pYCwgW2NvbmZpZywgdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9ybWFsaXplRnV6enlPcGVyYXRvcihvcHRpb25zPy5vcGVyYXRvcik7XG5cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiJVwiKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW4uX3NxbH0gJHtvcGVyYXRvcn0gP2AsIFsuLi5jb2x1bW4uX3BhcmFtcywgdmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGA/PyAke29wZXJhdG9yfSA/YCwgW2NvbHVtbiwgdmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPyAke29wZXJhdG9yfSAke2NvbHVtbi5fc3FsfWAsIFt2YWx1ZSwgLi4uY29sdW1uLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbdmFsdWUsIGNvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFJBV1xuICB3aGVyZVJhdyhzcWw6IHN0cmluZywgYmluZGluZ3M/OiByZWFkb25seSBLbmV4LlJhd0JpbmRpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KHNxbCwgYmluZGluZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUg6rSE7Zi4IOq3uOujue2VkVxuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIG9yV2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5vcldoZXJlKChidWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KGJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soZ3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT1JERVIgQlkgKFNxbEV4cHJlc3Npb27snLzroZzrj4Qg7ZWgIOyImCDsnojslrTslbwg7ZWoKVxuICBvcmRlckJ5PFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4gfCBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgKTogdGhpcztcbiAgb3JkZXJCeShcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+LFxuICAgIGRpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiID0gXCJhc2NcIixcbiAgKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYCR7Y29sdW1uLl9zcWx9ICR7ZGlyZWN0aW9ufWAsIGNvbHVtbi5fcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9yVXBkYXRlKCk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmZvclVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9yU2hhcmUoKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZm9yU2hhcmUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiDrsqHthLAg7Jyg7IKs64+EIOqygOyDiSDshKTsoJVcbiAgICpcbiAgICogLSBTRUxFQ1Tsl5Agc2ltaWxhcml0eSDsu6zrn7wg7LaU6rCAXG4gICAqIC0gV0hFUkUgY29sIElTIE5PVCBOVUxMIOy2lOqwgFxuICAgKiAtIHRocmVzaG9sZOqwgCDsnojsnLzrqbQgV0hFUkUg7KGw6rG0IOy2lOqwgFxuICAgKiAtIOq4sOyhtCBPUkRFUiBCWeulvCBjbGVhcu2VmOqzoCDsm5Dsi5wg7Jew7IKw7J6Q66GcIOygleugrCAoSE5TVyDsnbjrjbHsiqQg7LWc7KCB7ZmUKVxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIOuyoe2EsCDsu6zrn7wg6rK966GcXG4gICAqIEBwYXJhbSBlbWJlZGRpbmcg7L+866asIOyehOuyoOuUqSDrsqHthLBcbiAgICogQHBhcmFtIG9wdGlvbnMgbWV0aG9kLCB0aHJlc2hvbGQsIGFzIOuTsSDsmLXshZhcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBjb3NpbmUgc2ltaWxhcml0eSAo6riw67O46rCSKVxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJjb3NpbmVcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuNVxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gTDIgZGlzdGFuY2VcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwibDJcIixcbiAgICogICB0aHJlc2hvbGQ6IDEuNSAgLy8g6rGw66as6rCAIDEuNSDsnbTtlZjsnbgg6rKw6rO866eMXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBJbm5lciBwcm9kdWN0XG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImlubmVyX3Byb2R1Y3RcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuN1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICB2ZWN0b3JTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogVmVjdG9yQ29sdW1uczxUVGFibGVzPixcbiAgICBlbWJlZGRpbmc6IG51bWJlcltdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IFwiY29zaW5lXCIgfCBcImwyXCIgfCBcImlubmVyX3Byb2R1Y3RcIjtcbiAgICAgIHRocmVzaG9sZD86IG51bWJlcjtcbiAgICAgIGRpc3RpbmN0T24/OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+O1xuICAgIH0gPSB7fSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0ICYgeyBzaW1pbGFyaXR5OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kID0gXCJjb3NpbmVcIiwgdGhyZXNob2xkLCBkaXN0aW5jdE9uIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKFxuICAgICAgIUFycmF5LmlzQXJyYXkoZW1iZWRkaW5nKSB8fFxuICAgICAgZW1iZWRkaW5nLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgZW1iZWRkaW5nLnNvbWUoKHYpID0+ICFOdW1iZXIuaXNGaW5pdGUodikpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVtYmVkZGluZyB2ZWN0b3I6IGV4cGVjdGVkIGEgbm9uLWVtcHR5IGFycmF5IG9mIGZpbml0ZSBudW1iZXJzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHZlY3RvckxpdGVyYWwgPSBKU09OLnN0cmluZ2lmeShlbWJlZGRpbmcubWFwKCh2KSA9PiBOdW1iZXIodikpKTtcbiAgICBjb25zdCBvcGVyYXRvciA9IHsgY29zaW5lOiBcIjw9PlwiLCBsMjogXCI8LT5cIiwgaW5uZXJfcHJvZHVjdDogXCI8Iz5cIiB9W21ldGhvZF07XG5cbiAgICAvLyBtZXRob2Trs4Qg7Jew7IKw7J6QIOuwjyBzaW1pbGFyaXR5IOqzhOyCsOyLnVxuICAgIC8vIC0gY29zaW5lOiA8PT4gKGNvc2luZSBkaXN0YW5jZSwgMH4yKSwgc2ltaWxhcml0eSA9IDEgLSBkaXN0YW5jZVxuICAgIC8vIC0gbDI6IDwtPiAoZXVjbGlkZWFuIGRpc3RhbmNlKSwgc2ltaWxhcml0eSA9IGRpc3RhbmNlICjrgq7snYTsiJjroZ0g7Jyg7IKsKVxuICAgIC8vIC0gaW5uZXJfcHJvZHVjdDogPCM+IChuZWdhdGl2ZSBpbm5lciBwcm9kdWN0KSwgc2ltaWxhcml0eSA9IC1kaXN0YW5jZSAo64aS7J2E7IiY66GdIOycoOyCrClcbiAgICBjb25zdCBzaW1pbGFyaXR5RXhwciA9XG4gICAgICBtZXRob2QgPT09IFwiY29zaW5lXCJcbiAgICAgICAgPyB0aGlzLmtuZXgucmF3KGAxIC0gKD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcikgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICA6IG1ldGhvZCA9PT0gXCJsMlwiXG4gICAgICAgICAgPyB0aGlzLmtuZXgucmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICAgIDogdGhpcy5rbmV4LnJhdyhgLSg/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IpIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSk7XG5cbiAgICAvLyBXSEVSRSBOT1QgTlVMTFxuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW4pO1xuXG4gICAgLy8g6riw7KG0IE9SREVSIEJZIGNsZWFyXG4gICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoXCJvcmRlclwiKTtcbiAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgLy8gRElTVElOQ1QgT07snYAgU0VMRUNUIOygiOydmCDrp6gg7JWe7JeQIOyZgOyVvCDtlZjrr4DroZwsIOq4sOyhtCBzZWxlY3Qoc3Vic2V0IO2VhOuTnOuTpCnrpbwg67O07KG0IO2bhCBjbGVhcu2VmOqzoCDri6Tsi5wg7LaU6rCAXG4gICAgICBjb25zdCBleGlzdGluZ1N1YnNldENvbHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50c1xuICAgICAgICAuZmlsdGVyKChzOiBhbnkpID0+IHMuZ3JvdXBpbmcgPT09IFwiY29sdW1uc1wiKVxuICAgICAgICAuZmxhdE1hcCgoczogYW55KSA9PiBzLnZhbHVlKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKFwic2VsZWN0XCIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHRoaXMua25leC5yYXcoYERJU1RJTkNUIE9OICg/PykgPz9gLCBbZGlzdGluY3RPbiwgZGlzdGluY3RPbl0pKTtcbiAgICAgIGV4aXN0aW5nU3Vic2V0Q29scy5tYXAoKGNvbDogYW55KSA9PiB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoY29sKSk7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2ltaWxhcml0eUV4cHIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeVJhdyhgPz8sID8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtcbiAgICAgICAgZGlzdGluY3RPbixcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB2ZWN0b3JMaXRlcmFsLFxuICAgICAgXSk7XG5cbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4XG4gICAgICAgIC5mcm9tKHRoaXMua25leFF1ZXJ5LmFzKFwiZGlzdGluY3RfdmVjdG9yc1wiKSlcbiAgICAgICAgLnNlbGVjdChcIipcIilcbiAgICAgICAgLm9yZGVyQnkoXCJzaW1pbGFyaXR5XCIsIFwiZGVzY1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNpbWlsYXJpdHlFeHByKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKTtcbiAgICB9XG5cbiAgICAvLyB0aHJlc2hvbGRcbiAgICBpZiAodHlwZW9mIHRocmVzaG9sZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhyZXNob2xkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVjdG9yU2ltaWxhcml0eSB0aHJlc2hvbGQ6ICR7dGhyZXNob2xkfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRPcCA9IG1ldGhvZCA9PT0gXCJsMlwiID8gXCI8PVwiIDogXCI+PVwiO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShcInNpbWlsYXJpdHlcIiwgdGhyZXNob2xkT3AsIHRocmVzaG9sZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRWYWx1ZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImNvc2luZVwiID8gMSAtIHRocmVzaG9sZCA6IG1ldGhvZCA9PT0gXCJpbm5lcl9wcm9kdWN0XCIgPyAtdGhyZXNob2xkIDogdGhyZXNob2xkO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yIDw9ID9gLCBbXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHZlY3RvckxpdGVyYWwsXG4gICAgICAgICAgdGhyZXNob2xkVmFsdWUsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIOq4sOuzuCDsv7zrpqwg66mU7ISc65Oc65OkXG4gIGxpbWl0KGNvdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxpbWl0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmxpbWl0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9mZnNldChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZzZXQ6IG11c3QgYmUgPj0gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkub2Zmc2V0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEdST1VQIEJZXG4gIGdyb3VwQnk8VENvbHVtbnMgZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZ3JvdXBCeSguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5Lmdyb3VwQnkoLi4uY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBIQVZJTkdcbiAgaGF2aW5nKGNvbmRpdGlvbjogc3RyaW5nKTogdGhpcztcbiAgaGF2aW5nPFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICB2YWx1ZTogYW55LFxuICApOiB0aGlzO1xuICAvLyBIQVZJTkcg6rWs7ZiEXG4gIGhhdmluZyguLi5jb25kaXRpb25zOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gaGF2aW5nKFwiQ09VTlQoKikgPiAxMFwiKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKHRoaXMua25leC5yYXcoY29uZGl0aW9uc1swXSkpO1xuICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIGhhdmluZyhcImNvdW50XCIsIFwiPlwiLCAxMClcbiAgICAgIHRoaXMua25leFF1ZXJ5LmhhdmluZyhcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSxcbiAgICAgICAgY29uZGl0aW9uc1sxXSxcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzJdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGF2aW5nIGFyZ3VtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDsi6Ttlokg66mU7ISc65Oc65OkIC0gdGhlbmFibGUg6rWs7ZiEXG4gIHRoZW48VFJlc3VsdDEgPSBFeHBhbmQ8VFJlc3VsdD5bXSwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBFeHBhbmQ8VFJlc3VsdD5bXSkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgTmFpdGUudChcInB1cmk6ZXhlY3V0ZWQtcXVlcnlcIiwgdGhpcy50b1F1ZXJ5KCkpO1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50aGVuKG9uZnVsZmlsbGVkIGFzIGFueSwgb25yZWplY3RlZCk7XG4gIH1cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG4gIGZpbmFsbHkob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyDtlZjrgpjrp4wg7L+866asXG4gIGZpcnN0KCk6IFJlc29sdmVkUHVyaTxFeHBhbmQ8VFJlc3VsdD4sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZmlyc3QoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIOy/vOumrO2VnCDroIjsvZTrk5zsl5DshJwg7Yq57KCVIOy7rOufvOunjCDstpTstpztlZwg67Cw7Je0IOumrO2EtFxuICBwbHVjazxUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFJlc3VsdCB8IFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFxuICAgIFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0XG4gICAgICA/IFRSZXN1bHRbVENvbHVtbl1bXVxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICAgIG5ldmVyXG4gID4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnBsdWNrKGNvbHVtbiBhcyBzdHJpbmcpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gSU5TRVJUIDog64uo7J28IOqwneyytFxuICBpbnNlcnQoXG4gICAgZGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PixcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVDog67Cw7Je0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+W10sXG4gICk6IFJlc29sdmVkUHVyaTxJbnNlcnRSZXN1bHQsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+O1xuICAvLyBJTlNFUlQg7Iuk7KCcIOq1rO2YhFxuICBpbnNlcnQoXG4gICAgcmF3RGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB8IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5Lmluc2VydChyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBVUERBVEVcbiAgdXBkYXRlKHJhd0RhdGE6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5LnVwZGF0ZShyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvKipcbiAgICogSlNPTiDsu6zrn7zsl5Ag64yA7ZW0IHN0cmluZ2lmeSDsspjrpqzrpbwg7IiY7ZaJ7ZWY64qUIOuCtOu2gCDrqZTshJzrk5zsnoXri4jri6QuXG4gICAqIG9iamVjdCDrmJDripQgb2JqZWN0IOuwsOyXtOydhCDrsJvqs6AsIEpTT04g7Lus65+87J20IOyeiOycvOuptCDsp4HroKztmZTtlZjsl6wg67CY7ZmY7ZWp64uI64ukLlxuICAgKiDsp4HsoJEg6rCS7J2EIOuzgOqyve2VmOuvgOuhnCBzaWRlIGVmZmVjdOqwgCDsnojsirXri4jri6QuXG4gICAqL1xuICBwcml2YXRlIHJlZmluZUpzb25Db2x1bW5zKFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgKTogdHlwZW9mIGRhdGEge1xuICAgIC8vIHRhYmxlU3BlY+ydtOuCmCBqc29uQ29sdW1ucyDsl4bripQg6rK97JqwIOuwlOuhnCDrsJjtmZhcbiAgICBpZiAoIXRoaXMudGFibGVTcGVjIHx8ICF0aGlzLnRhYmxlU3BlYy5qc29uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIOuTseuhneuQnCBUYWJsZVNwZWPsnYQg7Ya17ZW0IEpTT07su6zrn7wg66qp66Gd7J2EIOqwgOyguOyZgCBKU09OLnN0cmluZ2lmeSDsspjrpqxcbiAgICBjb25zdCBqc29uQ29sdW1ucyA9IHRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBqc29uQ29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtW2NvbHVtbl0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtjb2x1bW5dO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGRhdGFbY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8vIEluY3JlbWVudFxuICBpbmNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5jcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG4gIC8vIERlY3JlbWVudFxuICBkZWNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVjcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gREVMRVRFXG4gIGRlbGV0ZSgpOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVsZXRlKCk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyDtmZXsnbgg7L+866asIOumrO2EtFxuICB0b1F1ZXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRvUXVlcnkoKTtcbiAgfVxuXG4gIC8vIOy/vOumrCDrlJTrsoTquYUg66Gc6re4IOy2nOugpVxuICBkZWJ1ZygpOiB0aGlzIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKFwiW1B1cmkgRGVidWddXCIpfSAke2NoYWxrLnllbGxvdyh0aGlzLnRvUXVlcnkoKSl9YCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbG9uZSgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICAvLyAnZHVhbCfsnYAg642U66+4IO2FjOydtOu4lOydtOupsCwg67CU66GcIOyVhOuemCDspITsl5DshJwga25leFF1ZXJ56rCAIOuNruyWtOyUjOybjOynkeuLiOuLpC5cbiAgICBjb25zdCBuZXdQdXJpID0gbmV3IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4odGhpcy5rbmV4LCBcImR1YWxcIik7XG4gICAgbmV3UHVyaS5rbmV4UXVlcnkgPSB0aGlzLmtuZXhRdWVyeS5jbG9uZSgpO1xuICAgIHJldHVybiBuZXdQdXJpO1xuICB9XG5cbiAgZm9ybWF0U1FMKHVuZm9ybWF0dGVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNRTCDsmIjslb3slrQg66qp66GdXG4gICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIklOU0VSVFwiLFxuICAgICAgXCJJTlRPXCIsXG4gICAgICBcIlZBTFVFU1wiLFxuICAgICAgXCJVUERBVEVcIixcbiAgICAgIFwiREVMRVRFXCIsXG4gICAgICBcIkNSRUFURVwiLFxuICAgICAgXCJUQUJMRVwiLFxuICAgICAgXCJBTFRFUlwiLFxuICAgICAgXCJEUk9QXCIsXG4gICAgICBcIkpPSU5cIixcbiAgICAgIFwiT05cIixcbiAgICAgIFwiSU5ORVJcIixcbiAgICAgIFwiTEVGVFwiLFxuICAgICAgXCJSSUdIVFwiLFxuICAgICAgXCJGVUxMXCIsXG4gICAgICBcIk9VVEVSXCIsXG4gICAgICBcIkdST1VQXCIsXG4gICAgICBcIkJZXCIsXG4gICAgICBcIk9SREVSXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJESVNUSU5DVFwiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJPRkZTRVRcIixcbiAgICAgIFwiQVNcIixcbiAgICAgIFwiQU5EXCIsXG4gICAgICBcIk9SXCIsXG4gICAgICBcIk5PVFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJMSUtFXCIsXG4gICAgICBcIklTXCIsXG4gICAgICBcIk5VTExcIixcbiAgICAgIFwiQ0FTRVwiLFxuICAgICAgXCJXSEVOXCIsXG4gICAgICBcIlRIRU5cIixcbiAgICAgIFwiRUxTRVwiLFxuICAgICAgXCJFTkRcIixcbiAgICAgIFwiVU5JT05cIixcbiAgICAgIFwiQUxMXCIsXG4gICAgICBcIkVYSVNUU1wiLFxuICAgICAgXCJCRVRXRUVOXCIsXG4gICAgXTtcblxuICAgIGxldCBmb3JtYXR0ZWQgPSB1bmZvcm1hdHRlZDtcblxuICAgIC8vIOyYiOyVveyWtOulvCDrjIDrrLjsnpDroZwg67OA7ZmYXG4gICAga2V5d29yZHMuZm9yRWFjaCgoa2V5d29yZCkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7a2V5d29yZH1cXFxcYmAsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwga2V5d29yZC50b1VwcGVyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIC8vIOyjvOyalCDsoIgg7JWe7JeQIOykhOuwlOq/iCDstpTqsIBcbiAgICBjb25zdCBtYWpvckNsYXVzZXMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBcIk9SREVSIEJZXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgIF07XG4gICAgbWFqb3JDbGF1c2VzLmZvckVhY2goKGNsYXVzZSkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxccysoJHtjbGF1c2V9KVxcXFxzK2AsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwgYFxcbiR7Y2xhdXNlLnRvVXBwZXJDYXNlKCl9IGApO1xuICAgIH0pO1xuXG4gICAgLy8gSk9JTiDsoIgg7LKY66asXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xccysoKD86SU5ORVJ8TEVGVHxSSUdIVHxGVUxMIE9VVEVSKVxccyspP0pPSU5cXHMrL2dpLCBcIlxcbiQxSk9JTiBcIik7XG5cbiAgICAvLyBBTkQsIE9SIOyhsOqxtCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKyhBTkR8T1IpXFxzKy9naSwgXCJcXG4gICQxIFwiKTtcblxuICAgIC8vIOq0hO2YuCDsspjrpqwg67CPIOuTpOyXrOyTsOq4sFxuICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGluZGVudGVkTGluZXMgPSBbXTtcbiAgICBsZXQgaW5kZW50TGV2ZWwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkTGluZSkgY29udGludWU7XG5cbiAgICAgIC8vIOuLq+uKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg6rCQ7IaMXG4gICAgICBjb25zdCBjbG9zaW5nUGFyZW5zID0gKHRyaW1tZWRMaW5lLm1hdGNoKC9cXCkvZykgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IG9wZW5pbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICBpZiAoY2xvc2luZ1BhcmVucyA+IDAgJiYgb3BlbmluZ1BhcmVucyA9PT0gMCkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IE1hdGgubWF4KDAsIGluZGVudExldmVsIC0gY2xvc2luZ1BhcmVucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIO2YhOyerCDrk6Tsl6zsk7DquLAg7KCB7JqpXG4gICAgICBjb25zdCBpbmRlbnQgPSBcIiAgXCIucmVwZWF0KGluZGVudExldmVsKTtcbiAgICAgIGluZGVudGVkTGluZXMucHVzaChpbmRlbnQgKyB0cmltbWVkTGluZSk7XG5cbiAgICAgIC8vIOyXrOuKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg7Kad6rCAXG4gICAgICBpZiAob3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgKz0gb3BlbmluZ1BhcmVucyAtIGNsb3NpbmdQYXJlbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGVudGVkTGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG4gIH1cblxuICByYXcoc3FsOiBzdHJpbmcpOiBLbmV4LlJhdyB7XG4gICAgcmV0dXJuIHRoaXMua25leC5yYXcoc3FsKTtcbiAgfVxuXG4gIC8vIEtuZXgg7L+866asIOu5jOuNlCDsp4HsoJEg7KCR6re8XG4gIHJhd1F1ZXJ5KCk6IEtuZXguUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdoZXJlR3JvdXA8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyOiBLbmV4LlF1ZXJ5QnVpbGRlcikge31cblxuICAvLyB3aGVyZSDrqZTshJzrk5zrk6RcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIHdoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gd2hlcmVJbiAvIHdoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIHdoZXJlSW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmUg66mU7ISc65Oc65OkXG4gIG9yV2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBvcldoZXJlSW4gLyBvcldoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIG9yV2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZU5vdEluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIE1BVENIXG4gIHdoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgd2hlcmVNYXRjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZVJhdyhgTUFUQ0ggKCR7U3RyaW5nKGFyZ3NbMF0pfSkgQUdBSU5TVCAoPylgLCBbYXJnc1sxXV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZU1hdGNoPFRDb2x1bW4gZXh0ZW5kcyBGdWxsdGV4dENvbHVtbnM8VFRhYmxlcz4+KGNvbHVtbjogVENvbHVtbiwgdmFsdWU6IHN0cmluZyk6IHRoaXM7XG4gIG9yV2hlcmVNYXRjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGBNQVRDSCAoJHtTdHJpbmcoYXJnc1swXSl9KSBBR0FJTlNUICg/KWAsIFthcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBTRUFSQ0hcbiAgd2hlcmVTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbiB8IFRDb2x1bW5bXSxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICB3ZWlnaHRzPzogbnVtYmVyW107IC8vIOygleyImCDrsLDsl7RcbiAgICB9LFxuICApOiB0aGlzO1xuICB3aGVyZVNlYXJjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IHsgd2VpZ2h0cyB9ID0gYXJnc1syXSA/PyB7fTtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gQXJyYXkuaXNBcnJheShhcmdzWzBdKVxuICAgICAgPyBgQVJSQVlbJHthcmdzWzBdLm1hcCgoYykgPT4gYCR7Y306OnRleHRgKS5qb2luKFwiLFwiKX1dYFxuICAgICAgOiBhcmdzWzBdO1xuICAgIGNvbnN0IHBncm9vbmdhQ29uZGl0aW9uID0gYHBncm9vbmdhX2NvbmRpdGlvbig/JHt3ZWlnaHRzPy5sZW5ndGggPyBgLCB3ZWlnaHRzID0+IEFSUkFZWyR7d2VpZ2h0cy5qb2luKFwiLFwiKX1dYCA6IFwiXCJ9KWA7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9ICZAfiAke3Bncm9vbmdhQ29uZGl0aW9ufWAsIFthcmdzWzFdXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbiB8IFRDb2x1bW5bXSxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICB3ZWlnaHRzPzogbnVtYmVyW107IC8vIOygleyImCDrsLDsl7RcbiAgICB9LFxuICApOiB0aGlzO1xuICBvcldoZXJlU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3QgeyB3ZWlnaHRzIH0gPSBhcmdzWzJdID8/IHt9O1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pXG4gICAgICA/IGBBUlJBWVske2FyZ3NbMF0ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGFyZ3NbMF07XG4gICAgY29uc3QgcGdyb29uZ2FDb25kaXRpb24gPSBgcGdyb29uZ2FfY29uZGl0aW9uKD8ke3dlaWdodHM/Lmxlbmd0aCA/IGAsIHdlaWdodHMgPT4gQVJSQVlbJHt3ZWlnaHRzLmpvaW4oXCIsXCIpfV1gIDogXCJcIn0pYDtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgJHtjb2x1bW5FeHByfSAmQH4gJHtwZ3Jvb25nYUNvbmRpdGlvbn1gLCBbYXJnc1sxXV0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBGVUxMVEVYVFxuICB3aGVyZVRzU2VhcmNoPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUXVlcnlPcHRpb25zIHwgVHNRdWVyeUNvbmZpZyxcbiAgKTogdGhpcztcbiAgd2hlcmVUc1NlYXJjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIGFyZ3NbMl0gPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IGFyZ3NbMl0gfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAoYXJnc1syXSA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiICYmIGFyZ3NbMF0uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICA/IGFyZ3NbMF0uX3NxbFxuICAgICAgICA6IFN0cmluZyhhcmdzWzBdKTtcblxuICAgIHRoaXMuYnVpbGRlci53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSBAQCAke3BhcnNlcn0oPywgPylgLCBbY29uZmlnLCBhcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcldoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzO1xuICBvcldoZXJlVHNTZWFyY2goLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCBvcHRzID1cbiAgICAgIHR5cGVvZiBhcmdzWzJdID09PSBcInN0cmluZ1wiID8gKHsgY29uZmlnOiBhcmdzWzJdIH0gYXMgVHNRdWVyeU9wdGlvbnMpIDogKGFyZ3NbMl0gPz8ge30pO1xuXG4gICAgY29uc3QgcGFyc2VyID0gb3B0cy5wYXJzZXIgPz8gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuICAgIGNvbnN0IGNvbmZpZyA9IG9wdHMuY29uZmlnID8/IFwic2ltcGxlXCI7XG4gICAgY29uc3QgY29sdW1uRXhwciA9XG4gICAgICB0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIiAmJiBhcmdzWzBdLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgPyBhcmdzWzBdLl9zcWxcbiAgICAgICAgOiBTdHJpbmcoYXJnc1swXSk7XG5cbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgJHtjb2x1bW5FeHByfSBAQCAke3BhcnNlcn0oPywgPylgLCBbY29uZmlnLCBhcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aGVyZUZ1enp5PFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIG9wZXJhdG9yPzogRnV6enlPcGVyYXRvcjtcbiAgICB9LFxuICApOiB0aGlzO1xuICB3aGVyZUZ1enp5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub3JtYWxpemVGdXp6eU9wZXJhdG9yKGFyZ3NbMl0/Lm9wZXJhdG9yKTtcblxuICAgIGlmIChvcGVyYXRvciA9PT0gXCIlXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYCR7YXJnc1swXS5fc3FsfSAke29wZXJhdG9yfSA/YCwgWy4uLmFyZ3NbMF0uX3BhcmFtcywgYXJnc1sxXV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGA/PyAke29wZXJhdG9yfSA/YCwgW2FyZ3NbMF0sIGFyZ3NbMV1dKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ICR7YXJnc1swXS5fc3FsfWAsIFthcmdzWzFdLCAuLi5hcmdzWzBdLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ID8/YCwgW2FyZ3NbMV0sIGFyZ3NbMF1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcldoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVGdXp6eSguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9ybWFsaXplRnV6enlPcGVyYXRvcihhcmdzWzJdPy5vcGVyYXRvcik7XG5cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiJVwiKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYCR7YXJnc1swXS5fc3FsfSAke29wZXJhdG9yfSA/YCwgWy4uLmFyZ3NbMF0uX3BhcmFtcywgYXJnc1sxXV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID9gLCBbYXJnc1swXSwgYXJnc1sxXV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgPyAke29wZXJhdG9yfSAke2FyZ3NbMF0uX3NxbH1gLCBbYXJnc1sxXSwgLi4uYXJnc1swXS5fcGFyYW1zXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ID8/YCwgW2FyZ3NbMV0sIGFyZ3NbMF1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDspJHssqkg6re466O5XG4gIHdoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmUoKHN1YkJ1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IHN1Ykdyb3VwID0gbmV3IFdoZXJlR3JvdXA8VFRhYmxlcz4oc3ViQnVpbGRlcik7XG4gICAgICBjYWxsYmFjayhzdWJHcm91cCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IHRoaXM7XG4gIG9yV2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vLyBKT0lOIOygiCDqt7jro7nsl5DripQgTGVmdOyZgCBSaWdodOyXkCDrjIDtlZwg7Iic7ISc6rCAIO2VhOyalO2VmOyngCDslYrsnLzrr4DroZwsIOuqqOuToCDqsr3smrDsnZgg7IiY66W8IOqzhOyCsO2VtOyVvO2VqC5cbmV4cG9ydCBjbGFzcyBKb2luQ2xhdXNlR3JvdXA8XG4gIFRMZWZ0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgVFJpZ2h0IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pixcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGxiYWNrOiBLbmV4LkpvaW5DbGF1c2UpIHt9XG5cbiAgLy8gT04oQU5EKTog7Lus65+8ID0g7Lus65+8XG4gIG9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+KTogdGhpcztcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4pOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICApOiB0aGlzO1xuICAvLyBPTihBTkQpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy9nOuwsVxuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRMZWZ0LCBUUmlnaHQ+KSA9PiB2b2lkKTogdGhpcztcbiAgb24oY2FsbGJhY2s6IChuZXN0ZWQ6IEpvaW5DbGF1c2VHcm91cDxUUmlnaHQsIFRMZWZ0PikgPT4gdm9pZCk6IHRoaXM7XG4gIC8vIE9OKEFORCkg6rWs7ZiEXG4gIG9uKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5jYWxsYmFjay5vbiguLi4oYXJncyBhcyBbc3RyaW5nLCBzdHJpbmddKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBPTihPUik6IOy7rOufvCA9IOy7rOufvFxuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+KTogdGhpcztcbiAgb3JPbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ID0g6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ICjsl7DsgrDsnpApIOy7rOufvFxuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKE9SKTog7Lus65+8ICjsl7DsgrDsnpApIOqwklxuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRMZWZ0LCBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsvZzrsLFcbiAgb3JPbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRMZWZ0LCBUUmlnaHQ+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JPbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oT1IpIOq1rO2YhFxuICBvck9uKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5jYWxsYmFjay5vck9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OIFZBTChBTkQpOiDsu6zrn7wgPSDqsJIgKOqwkuydhCDsu6zrn7wg7LC47KGw6rCAIOyVhOuLjCDtjIzrnbzrr7jthLDroZwg67CU7J2465SpKVxuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLCB2YWx1ZTogYW55KTogdGhpcztcbiAgb25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICh0aGlzLmNhbGxiYWNrIGFzIGFueSkub25WYWwoLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBBTkQgT04gVkFMOiBvblZhbOydmCDrqoXsi5zsoIEgYWxpYXMgKEtuZXgg7Zi47ZmYKVxuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgYW5kT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLCB2YWx1ZTogYW55KTogdGhpcztcbiAgYW5kT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICh0aGlzLmNhbGxiYWNrIGFzIGFueSkuYW5kT25WYWwoLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBPUiBPTiBWQUw6IE9SIOyhsOqxtOycvOuhnCDqsJIg67CU7J2465SpXG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LCBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICh0aGlzLmNhbGxiYWNrIGFzIGFueSkub3JPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKlxuICBUUmVzb2x2ZWQ6IOy/vOumrCDsi6Ttlokg7ZuEIOuwmO2ZmOuQoCDqsrDqs7wg7YOA7J6FXG4gIFRSZXR1cm5pbmc6IFJFVFVSTklORyDsoIjsl5Ag7IKs7Jqp65CgIO2DgOyehVxuKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlZFB1cmk8VFJlc29sdmVkLCBUUmV0dXJuaW5nPiBpbXBsZW1lbnRzIFByb21pc2U8VFJlc29sdmVkPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrbmV4UXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyLFxuICAgIHByaXZhdGUga25leDogS25leCxcbiAgKSB7fVxuXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiBzdHJpbmcgPSBcIlByb21pc2VcIjtcblxuICB0b1F1ZXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRvUXVlcnkoKTtcbiAgfVxuXG4gIGRlYnVnKCk6IHRoaXMge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmN5YW4oXCJbUHVyaSBEZWJ1Z11cIil9ICR7Y2hhbGsueWVsbG93KHRoaXMudG9RdWVyeSgpKX1gKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoZW48VFJlc3VsdDEgPSBUUmVzb2x2ZWQsIFRSZXN1bHQyID0gbmV2ZXI+KFxuICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVFJlc29sdmVkKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICBOYWl0ZS50KFwicHVyaTpleGVjdXRlZC1xdWVyeVwiLCB0aGlzLnRvUXVlcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRoZW4ob25mdWxmaWxsZWQgYXMgYW55LCBvbnJlamVjdGVkKTtcbiAgfVxuXG4gIGNhdGNoPFRSZXN1bHQyID0gbmV2ZXI+KFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXNvbHZlZCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuZmluYWxseShvbmZpbmFsbHkpO1xuICB9XG5cbiAgLy8gT04gQ09ORkxJQ1QgLSDsu6zrn7wg6riw67CYXG4gIG9uQ29uZmxpY3Q8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBhY3Rpb24/OiBPbkNvbmZsaWN0QWN0aW9uPFRUYWJsZXM+LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCB0YXJnZXQgPSBBcnJheS5pc0FycmF5KGNvbHVtbnMpID8gY29sdW1ucyA6IFtjb2x1bW5zXTtcblxuICAgIGlmICghYWN0aW9uIHx8IGFjdGlvbiA9PT0gXCJub3RoaW5nXCIpIHtcbiAgICAgIC8vIERPIE5PVEhJTkdcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9uQ29uZmxpY3QodGFyZ2V0KS5pZ25vcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRE8gVVBEQVRFXG4gICAgICBjb25zdCB7IHVwZGF0ZSB9ID0gYWN0aW9uO1xuXG4gICAgICAvLyBhY3Rpb24udXBkYXRlIOuwsOyXtCDtmJXtg5wgOiBbXCJuYW1lXCIsIFwiZW1haWxcIl1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZSkpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLm1lcmdlKHVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhY3Rpb24udXBkYXRlIOqwneyytCDtmJXtg5w6IHsgbmFtZTogXCJKb2huXCIsIGNvdW50OiByYXcoLi4uKSB9XG4gICAgICAgIGNvbnN0IG1lcmdlT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIFwiX3R5cGVcIiBpbiB2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUuX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU3FsRXhwcmVzc2lvbiDihpIga25leC5yYXcoKeuhnCDrs4DtmZhcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB0aGlzLmtuZXgucmF3KCh2YWx1ZSBhcyBTcWxFeHByZXNzaW9uPGFueT4pLl9zcWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDsnbzrsJgg6rCSXG4gICAgICAgICAgICBtZXJnZU9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLm1lcmdlKG1lcmdlT2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFJFVFVSTklORzogXCIqXCIgLSDsoITssrQg7Lus65+8XG4gIHJldHVybmluZyhjb2x1bW46IFwiKlwiKTogUmVzb2x2ZWRQdXJpPFRSZXR1cm5pbmdbXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuLqOydvCDsu6zrn7xcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HOiDrs7XsiJgg7Lus65+8ICjrsLDsl7QpXG4gIHJldHVybmluZzxUQ29sdW1uIGV4dGVuZHMgQ29sdW1uS2V5czxUUmV0dXJuaW5nPj4oXG4gICAgY29sdW1uczogVENvbHVtbltdLFxuICApOiBSZXNvbHZlZFB1cmk8UGljazxUUmV0dXJuaW5nLCBUQ29sdW1uPltdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORyDqtaztmIRcbiAgcmV0dXJuaW5nKGNvbHVtbk9yQ29sdW1uczogc3RyaW5nIHwgc3RyaW5nW10pOiBSZXNvbHZlZFB1cmk8YW55W10sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucmV0dXJuaW5nKGNvbHVtbk9yQ29sdW1ucyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBMENBLFNBQVMsdUJBQXVCLFVBQWtDO0NBQ2hFLE1BQU0sYUFBYSxVQUFVLE1BQU0sSUFBSTtDQUN2QyxNQUFNLGdCQUFnQixnQkFBZ0IsTUFBTSxjQUFjLGNBQWMsV0FBVztBQUVuRixLQUFJLENBQUMsZUFBZTtBQUNsQixRQUFNLElBQUksTUFBTSwyQkFBMkIsWUFBWSxLQUFLOztBQUc5RCxRQUFPOzs7O3NCQTFDZ0Q7YUFFbEI7a0JBOEJRO0NBYWxDLE9BQWIsTUFBYSxLQUE0RDtFQUN2RSxBQUFRO0VBQ1IsQUFBUSxZQUE4QjtFQUt0QyxZQUNFLEFBQU9BLE1BQ1AsbUJBQ0E7R0FGTztBQUdQLE9BQUksT0FBTyxzQkFBc0IsVUFBVTtBQUV6QyxTQUFLLFlBQVksS0FBSyxLQUFLLGtCQUFrQixDQUFDLEtBQUssa0JBQWtCO0FBQ3JFLFNBQUssWUFBWSxLQUFLLGlCQUFpQixrQkFBa0I7Y0FDaEQsT0FBTyxzQkFBc0IsVUFBVTtJQUNoRCxNQUFNLFVBQVUsT0FBTyxRQUFRLGtCQUFrQjtBQUNqRCxRQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU0sSUFBSSxNQUFNLHlDQUF5Qzs7QUFFM0QsV0FBTyxRQUFRLEdBQUc7SUFDbEIsTUFBTSxDQUFDLE9BQU8sVUFBVSxRQUFRO0FBQ2hDLFFBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsVUFBSyxZQUFZLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsUUFBUSxDQUFDO0FBQzVELFVBQUssWUFBWSxLQUFLLGlCQUFpQixPQUFPO2VBQ3JDLGtCQUFrQixNQUFNO0tBQ2pDLE1BQU0sa0JBQWtCLE9BQU8sVUFBVTtBQUN6QyxVQUFLLFlBQVksS0FBSyxLQUFLLEtBQUssZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1dBQ3JEO0FBQ0wsV0FBTSxJQUFJLE1BQU0sOEJBQThCOztVQUUzQztBQUNMLFVBQU0sSUFBSSxNQUFNLDhCQUE4Qjs7O0VBSWxELGlCQUFpQixXQUFxQztBQUNwRCxPQUFJO0FBQ0YsV0FBTyxjQUFjLGFBQWEsVUFBVTtXQUN0QztBQUNOLFdBQU87OztFQUtYLE9BQU8sTUFBTSxTQUFpQixLQUE4QjtBQUMxRCxVQUFPO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sU0FBUyxDQUFDLE9BQU87SUFDbEI7O0VBRUgsT0FBTyxJQUFJLFFBQXlDO0FBQ2xELFVBQU87SUFDTCxPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixTQUFTLENBQUMsT0FBTztJQUNsQjs7RUFFSCxPQUFPLElBQUksUUFBeUM7QUFDbEQsVUFBTztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLFNBQVMsQ0FBQyxPQUFPO0lBQ2xCOztFQUVILE9BQU8sSUFBSSxRQUF5QztBQUNsRCxVQUFPO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sU0FBUyxDQUFDLE9BQU87SUFDbEI7O0VBRUgsT0FBTyxJQUFJLFFBQXlDO0FBQ2xELFVBQU87SUFDTCxPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixTQUFTLENBQUMsT0FBTztJQUNsQjs7RUFFSCxPQUFPLE9BQU8sR0FBRyxNQUF5QztBQUN4RCxVQUFPO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNLFVBQVUsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUMvQyxTQUFTO0lBQ1Y7O0VBRUgsT0FBTyxNQUFNLFFBQXlDO0FBQ3BELFVBQU87SUFDTCxPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixTQUFTLENBQUMsT0FBTztJQUNsQjs7RUFFSCxPQUFPLE1BQU0sUUFBeUM7QUFDcEQsVUFBTztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLFNBQVMsQ0FBQyxPQUFPO0lBQ2xCOztFQUdILE9BQU8sZUFDTCxRQUNBLE9BQ3lCO0FBQ3pCLE9BQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsV0FBTztLQUNMLE9BQU87S0FDUCxTQUFTO0tBQ1QsTUFBTTtLQUNOLFNBQVMsQ0FBQyxPQUFPLE9BQU87S0FDekI7O0FBR0gsVUFBTztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTSxzQkFBc0IsT0FBTyxLQUFLO0lBQ3hDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxRQUFRO0lBQ3BDOztFQUdILE9BQU8sV0FDTCxRQUNBLE9BQ3lCO0FBQ3pCLE9BQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsV0FBTztLQUNMLE9BQU87S0FDUCxTQUFTO0tBQ1QsTUFBTTtLQUNOLFNBQVMsQ0FBQyxRQUFRLE1BQU07S0FDekI7O0FBR0gsVUFBTztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTSxjQUFjLE9BQU8sS0FBSztJQUNoQyxTQUFTLENBQUMsR0FBRyxPQUFPLFNBQVMsTUFBTTtJQUNwQzs7RUFHSCxPQUFPLHFCQUNMLFFBQ0EsT0FDeUI7QUFDekIsT0FBSSxPQUFPLFdBQVcsVUFBVTtBQUM5QixXQUFPO0tBQ0wsT0FBTztLQUNQLFNBQVM7S0FDVCxNQUFNO0tBQ04sU0FBUyxDQUFDLE9BQU8sT0FBTztLQUN6Qjs7QUFHSCxVQUFPO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNLDZCQUE2QixPQUFPLEtBQUs7SUFDL0MsU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFPLFFBQVE7SUFDcEM7O0VBSUgsT0FBTyxVQUFVLEtBQWEsU0FBNEIsRUFBRSxFQUEyQjtBQUNyRixVQUFPO0lBQUUsT0FBTztJQUFrQixTQUFTO0lBQVUsTUFBTTtJQUFLLFNBQVM7SUFBUTs7RUFHbkYsT0FBTyxlQUFlLEtBQWEsU0FBNEIsRUFBRSxFQUE2QjtBQUM1RixVQUFPO0lBQUUsT0FBTztJQUFrQixTQUFTO0lBQVksTUFBTTtJQUFLLFNBQVM7SUFBUTs7RUFHckYsT0FBTyxVQUFVLEtBQWEsU0FBNEIsRUFBRSxFQUEyQjtBQUNyRixVQUFPO0lBQUUsT0FBTztJQUFrQixTQUFTO0lBQVUsTUFBTTtJQUFLLFNBQVM7SUFBUTs7RUFHbkYsT0FBTyxXQUFXLEtBQWEsU0FBNEIsRUFBRSxFQUE0QjtBQUN2RixVQUFPO0lBQUUsT0FBTztJQUFrQixTQUFTO0lBQVcsTUFBTTtJQUFLLFNBQVM7SUFBUTs7RUFHcEYsT0FBTyxRQUFRLEtBQWEsU0FBNEIsRUFBRSxFQUF5QjtBQUNqRixVQUFPO0lBQUUsT0FBTztJQUFrQixTQUFTO0lBQVEsTUFBTTtJQUFLLFNBQVM7SUFBUTs7Ozs7Ozs7Ozs7Ozs7O0VBZ0JqRixPQUFPLFlBQ0wsUUFDQSxPQUNBLFVBQ3lCO0dBQ3pCLE1BQU0sRUFBRSxTQUFTLHdCQUF3QixTQUFTLFVBQVUsR0FBRyxZQUFZLFlBQVksRUFBRTtHQUV6RixNQUFNLGdCQUFnQixPQUFPLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVc7QUFDbEUsV0FBTyxHQUFHLFdBQVcsU0FBUyxJQUFJLENBQUMsR0FBRztLQUN0QztHQUVGLE1BQU0sWUFBWSxjQUFjLFNBQVMsSUFBSSxNQUFNLGNBQWMsS0FBSyxLQUFLLENBQUMsS0FBSztBQUVqRixVQUFPO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNLHNCQUFzQixPQUFPLFFBQVEsVUFBVTtJQUNyRCxTQUFTO0tBQUM7S0FBUTtLQUFRO0tBQVE7S0FBTTtJQUN6Qzs7RUFJSCxPQUFPLE9BQ0wsUUFDQSxPQUNBLFNBQ3lCO0FBQ3pCLFVBQU8sS0FBSyxRQUFRLFdBQVcsUUFBUSxPQUFPLFFBQVE7O0VBSXhELE9BQU8sU0FDTCxRQUNBLE9BQ0EsU0FDeUI7QUFDekIsVUFBTyxLQUFLLFFBQVEsY0FBYyxRQUFRLE9BQU8sUUFBUTs7RUFHM0QsT0FBTyxXQUFXLFFBQWdCLFNBQWlCLFVBQXFDO0FBQ3RGLFVBQU87SUFDTCxPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixTQUFTLENBQUMsUUFBUSxPQUFPO0lBQzFCOztFQUdILE9BQU8sUUFDTCxNQUNBLFFBQ0EsT0FDQSxTQUN5QjtHQUN6QixNQUFNLEVBQ0osU0FBUyx3QkFDVCxTQUFTLFVBQ1QsZUFDQSxZQUNFLFdBQVcsRUFBRTtHQUVqQixNQUFNLFNBQVMsRUFBRTtHQUNqQixJQUFJLGNBQWMsR0FBRyxLQUFLO0FBRTFCLE9BQUksU0FBUztBQUNYLG1CQUFlLFNBQVMsUUFBUSxVQUFVLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUMxRCxXQUFPLEtBQUssR0FBRyxRQUFROztBQUd6QixPQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLG1CQUFlLE9BQU8sT0FBTztBQUM3QixXQUFPLEtBQUssUUFBUSxRQUFRLE1BQU07VUFDN0I7QUFDTCxtQkFBZSxHQUFHLE9BQU8sS0FBSyxJQUFJLE9BQU87QUFDekMsV0FBTyxLQUFLLEdBQUcsT0FBTyxTQUFTLFFBQVEsTUFBTTs7QUFHL0MsT0FBSSxlQUFlO0FBQ2pCLG1CQUFlO0FBQ2YsV0FBTyxLQUFLLGNBQWM7O0FBRzVCLGtCQUFlO0FBRWYsVUFBTztJQUFFLE9BQU87SUFBa0IsU0FBUztJQUFVLE1BQU07SUFBYSxTQUFTO0lBQVE7Ozs7Ozs7Ozs7RUFXM0YsT0FBTyxRQUFpQztBQUN0QyxVQUFPLEtBQUssVUFBVSxpQ0FBaUM7O0VBY3pELE9BQU8sVUFDTCxpQkFDQSxPQUNxRDtHQUNyRCxNQUFNLFdBQVcsTUFBTSxRQUFRLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTTtHQUN2RCxNQUFNLGNBQWMsU0FBUyxTQUFTLFVBQVUsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDO0FBR2hFLE9BQUksT0FBTyxvQkFBb0IsVUFBVTtBQUN2QyxXQUFPLEtBQUssVUFBVSwrQkFBK0IsWUFBWSxJQUFJLENBQ25FLGlCQUNBLEdBQUcsU0FDSixDQUFDOztBQUlKLFVBQU8sS0FBSyxlQUNWLGlDQUFpQyxnQkFBZ0IsVUFBVSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxZQUFZLElBQzdGLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxTQUFTLENBQ2xDOztFQUlILE9BQ0UsV0FDNkQ7R0FFN0QsTUFBTSxhQUFhLEtBQUssY0FBYyxVQUFVO0dBRWhELE1BQU1DLGdCQUF1QyxFQUFFO0FBRS9DLFFBQUssTUFBTSxDQUFDLE9BQU8scUJBQXFCLE9BQU8sUUFBUSxXQUFXLEVBQUU7QUFDbEUsUUFBSSxPQUFPLHFCQUFxQixZQUFZLGlCQUFpQixVQUFVLGtCQUFrQjtBQUV2RixtQkFBYyxLQUNaLEtBQUssS0FBSyxJQUFJLEdBQUcsaUJBQWlCLEtBQUssT0FBTyxNQUFNLElBQUksaUJBQWlCLFFBQVEsQ0FDbEY7V0FDSTtLQUVMLE1BQU0sYUFBYTtBQUNuQixTQUFJLFVBQVUsWUFBWTtBQUV4QixvQkFBYyxLQUFLLFdBQVc7WUFDekI7QUFFTCxvQkFBYyxLQUFLLEdBQUcsV0FBVyxNQUFNLFFBQVE7Ozs7QUFLckQsUUFBSyxVQUFVLE9BQU8sY0FBYztBQUNwQyxVQUFPOzs7Ozs7O0VBUVQsQUFBUSxjQUFjLFdBQWdDLFNBQVMsSUFBeUI7R0FDdEYsTUFBTUMsYUFBa0MsRUFBRTtBQUUxQyxRQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLFVBQVUsRUFBRTtJQUNwRCxNQUFNLFVBQVUsU0FBUyxHQUFHLE9BQU8sSUFBSSxRQUFRO0FBRS9DLFFBQUksT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLEVBQUUsV0FBVyxRQUFRO0tBRXRFLE1BQU0sU0FBUyxLQUFLLGNBQWMsT0FBTyxRQUFRO0FBQ2pELFlBQU8sT0FBTyxZQUFZLE9BQU87V0FDNUI7QUFFTCxnQkFBVyxXQUFXOzs7QUFJMUIsVUFBTzs7RUFJVCxhQUNFLFdBQ3VFO0dBRXZFLE1BQU0sYUFBYSxLQUFLLGNBQWMsVUFBVTtHQUVoRCxNQUFNRCxnQkFBdUMsRUFBRTtBQUUvQyxRQUFLLE1BQU0sQ0FBQyxPQUFPLHFCQUFxQixPQUFPLFFBQVEsV0FBVyxFQUFFO0FBQ2xFLFFBQUksT0FBTyxxQkFBcUIsWUFBWSxpQkFBaUIsVUFBVSxrQkFBa0I7QUFDdkYsbUJBQWMsS0FDWixLQUFLLEtBQUssSUFBSSxHQUFHLGlCQUFpQixLQUFLLE1BQU0sU0FBUyxpQkFBaUIsUUFBUSxDQUNoRjtXQUNJO0tBQ0wsTUFBTSxhQUFhO0FBQ25CLFNBQUksVUFBVSxZQUFZO0FBQ3hCLG9CQUFjLEtBQUssV0FBVztZQUN6QjtBQUNMLG9CQUFjLEtBQUssS0FBSyxLQUFLLElBQUksV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDOzs7O0FBSzdELFFBQUssVUFBVSxPQUFPLGNBQWM7QUFDcEMsVUFBTzs7RUFJVCxZQUE4RDtBQUM1RCxRQUFLLFVBQVUsT0FBTyxJQUFJO0FBQzFCLFVBQU87O0VBS1QsU0FBUyxHQUFHLFNBQXlCO0FBQ25DLFFBQUssVUFBVSxTQUFTLEdBQUcsUUFBUTtBQUNuQyxVQUFPOztFQUlULE1BQU0sV0FBa0M7QUFDdEMsUUFBSyxVQUFVLE1BQU0sVUFBVTtBQUMvQixVQUFPOztFQUlULFVBQVUsT0FBcUI7QUFDN0IsR0FBQyxLQUFLLFVBQWtCLGNBQWUsS0FBSyxVQUFrQixZQUFZLFFBQVEsTUFBVztBQUMzRixRQUFJLGNBQWMsR0FBRztLQUNuQixNQUFNLENBQUMsUUFBUSxVQUFVLE9BQU8sUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUNqRCxZQUFPLFdBQVc7V0FDYjtBQUNMLFlBQU87O0tBRVQ7QUFDRixVQUFPOztFQWlEVCxLQUFLLGlCQUFzQixHQUFHLE1BQWtCO0FBQzlDLFVBQU8sS0FBSyxhQUFhLFFBQVEsaUJBQWlCLEdBQUcsS0FBSzs7RUFrRDVELFNBQVMsaUJBQXNCLEdBQUcsTUFBa0I7QUFDbEQsVUFBTyxLQUFLLGFBQWEsWUFBWSxpQkFBaUIsR0FBRyxLQUFLOztFQUdoRSxhQUFhLFVBQStCLGlCQUFzQixHQUFHLE1BQW1CO0FBQ3RGLE9BQUksT0FBTyxvQkFBb0IsVUFBVTtJQUV2QyxNQUFNLFlBQVk7QUFFbEIsUUFBSSxLQUFLLFdBQVcsS0FBSyxPQUFPLEtBQUssT0FBTyxZQUFZO0tBRXRELE1BQU0sV0FBVyxLQUFLO0FBQ3RCLFVBQUssVUFBVSxVQUFVLFlBQVksZUFBZTtBQUNsRCxlQUFTLElBQUksZ0JBQWdCLFdBQVcsQ0FBQztPQUN6QztXQUNHO0tBRUwsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUN0QixVQUFLLFVBQVUsVUFBVSxXQUFXLE1BQU0sTUFBTTs7Y0FFekMsT0FBTyxvQkFBb0IsVUFBVTtJQUU5QyxNQUFNLFVBQVUsT0FBTyxRQUFRLGdCQUFnQjtBQUMvQyxRQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3hCLFdBQU0sSUFBSSxNQUFNLHlDQUF5Qzs7QUFFM0QsV0FBTyxRQUFRLEdBQUc7SUFDbEIsTUFBTSxDQUFDLENBQUMsT0FBTyxTQUFTO0FBRXhCLFFBQUksT0FBTyxTQUFTLFVBQVU7QUFFNUIsU0FBSSxLQUFLLFdBQVcsS0FBSyxPQUFPLEtBQUssT0FBTyxZQUFZO01BRXRELE1BQU0sV0FBVyxLQUFLO0FBQ3RCLFdBQUssVUFBVSxVQUFVLEdBQUcsUUFBUSxNQUFNLEdBQUcsZUFBZTtBQUMxRCxnQkFBUyxJQUFJLGdCQUFnQixXQUFXLENBQUM7UUFDekM7WUFDRztNQUVMLE1BQU0sQ0FBQyxNQUFNLFNBQVM7QUFDdEIsV0FBSyxVQUFVLFVBQVUsR0FBRyxRQUFRLE1BQU0sRUFBRSxNQUFNLE1BQU07O2VBRWpELGdCQUFnQixNQUFNO0FBRS9CLFNBQUksS0FBSyxXQUFXLEtBQUssT0FBTyxLQUFLLE9BQU8sWUFBWTtNQUV0RCxNQUFNLFdBQVcsS0FBSztBQUN0QixXQUFLLFVBQVUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxlQUFlO0FBQ2xFLGdCQUFTLElBQUksZ0JBQWdCLFdBQVcsQ0FBQztRQUN6QztZQUNHO01BRUwsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUN0QixXQUFLLFVBQVUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLE1BQU07O1dBRTdEO0FBQ0wsV0FBTSxJQUFJLE1BQU0sOEJBQThCOztVQUUzQztBQUNMLFVBQU0sSUFBSSxNQUFNLG9CQUFvQjs7QUFHdEMsVUFBTzs7RUFtQlQsTUFBTSxHQUFHLE1BQTJFO0dBQ2xGLE1BQU0sQ0FBQyxvQkFBb0IsaUJBQWlCLFNBQVM7QUFDckQsT0FBSSxPQUFPLHVCQUF1QixVQUFVO0FBQzFDLFNBQUssVUFBVSxNQUFNLG1CQUFtQjtjQUMvQixPQUFPLFVBQVUsYUFBYTtBQUN2QyxRQUFJLG9CQUFvQixNQUFNO0FBQzVCLFVBQUssVUFBVSxVQUFVLG1CQUFtQjtBQUM1QyxZQUFPOztBQUVULFNBQUssVUFBVSxNQUFNLG9CQUFvQixnQkFBZ0I7Y0FDaEQsT0FBTyxVQUFVLGFBQWE7QUFDdkMsUUFBSSxVQUFVLE1BQU07QUFDbEIsU0FBSSxvQkFBb0IsTUFBTTtBQUM1QixXQUFLLFVBQVUsYUFBYSxtQkFBbUI7QUFDL0MsYUFBTztnQkFDRSxvQkFBb0IsS0FBSztBQUNsQyxXQUFLLFVBQVUsVUFBVSxtQkFBbUI7QUFDNUMsYUFBTzs7O0FBR1gsU0FBSyxVQUFVLE1BQU0sb0JBQW9CLGlCQUFpQixNQUFNO1VBQzNEO0FBQ0wsU0FBSyxVQUFVLE1BQU0sbUJBQW1COztBQUUxQyxVQUFPOztFQUlULFFBQ0UsUUFDQSxRQUNpQztBQUNqQyxRQUFLLFVBQVUsUUFBUSxRQUFRLE9BQU87QUFDdEMsVUFBTzs7RUFJVCxXQUNFLFFBQ0EsUUFDaUM7QUFDakMsUUFBSyxVQUFVLFdBQVcsUUFBUSxPQUFPO0FBQ3pDLFVBQU87O0VBSVQsV0FBcUQsUUFBaUIsT0FBcUI7QUFDekYsUUFBSyxVQUFVLFNBQVMsVUFBVSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDekUsVUFBTzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCVCxZQUNFLFFBQ0EsT0FDQSxTQUdNO0dBQ04sTUFBTSxFQUFFLFlBQVksV0FBVyxFQUFFO0dBQ2pDLE1BQU0sYUFBYSxNQUFNLFFBQVEsT0FBTyxHQUNwQyxTQUFTLE9BQU8sS0FBSyxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsS0FDbkQ7R0FDSixNQUFNLG9CQUFvQix1QkFBdUIsU0FBUyxTQUFTLHNCQUFzQixRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUVuSCxRQUFLLFVBQVUsU0FBUyxHQUFHLFdBQVcsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7QUFFMUUsVUFBTzs7RUFJVCxjQUNFLFFBQ0EsT0FDQSxTQUNNO0dBQ04sTUFBTSxPQUNKLE9BQU8sWUFBWSxXQUFZLEVBQUUsUUFBUSxTQUFTLEdBQXVCLFdBQVcsRUFBRTtHQUV4RixNQUFNLFNBQVMsS0FBSyxVQUFVO0dBQzlCLE1BQU0sU0FBUyxLQUFLLFVBQVU7R0FDOUIsTUFBTSxhQUNKLE9BQU8sV0FBVyxZQUFZLE9BQU8sVUFBVSxtQkFDM0MsT0FBTyxPQUNQLE9BQU8sT0FBTztBQUVwQixRQUFLLFVBQVUsU0FBUyxHQUFHLFdBQVcsTUFBTSxPQUFPLFNBQVMsQ0FBQyxRQUFRLE1BQU0sQ0FBQztBQUM1RSxVQUFPOztFQUdULFdBQ0UsUUFDQSxPQUNBLFNBR007R0FDTixNQUFNLFdBQVcsdUJBQXVCLFNBQVMsU0FBUztBQUUxRCxPQUFJLGFBQWEsS0FBSztBQUNwQixRQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLFVBQUssVUFBVSxTQUFTLEdBQUcsT0FBTyxLQUFLLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxPQUFPLFNBQVMsTUFBTSxDQUFDO1dBQzlFO0FBQ0wsVUFBSyxVQUFVLFNBQVMsTUFBTSxTQUFTLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQzs7QUFFOUQsV0FBTzs7QUFHVCxPQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLFNBQUssVUFBVSxTQUFTLEtBQUssU0FBUyxHQUFHLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLFFBQVEsQ0FBQztVQUM5RTtBQUNMLFNBQUssVUFBVSxTQUFTLEtBQUssU0FBUyxNQUFNLENBQUMsT0FBTyxPQUFPLENBQUM7O0FBRTlELFVBQU87O0VBSVQsU0FBUyxLQUFhLFVBQTZDO0FBQ2pFLFFBQUssVUFBVSxTQUFTLEtBQUssU0FBUztBQUN0QyxVQUFPOztFQUlULFdBQVcsVUFBa0Q7QUFDM0QsUUFBSyxVQUFVLE9BQU8sWUFBWTtJQUNoQyxNQUFNLFFBQVEsSUFBSSxXQUFvQixRQUFRO0FBQzlDLGFBQVMsTUFBTTtLQUNmO0FBQ0YsVUFBTzs7RUFFVCxhQUFhLFVBQWtEO0FBQzdELFFBQUssVUFBVSxTQUFTLFlBQVk7SUFDbEMsTUFBTSxRQUFRLElBQUksV0FBb0IsUUFBUTtBQUM5QyxhQUFTLE1BQU07S0FDZjtBQUNGLFVBQU87O0VBUVQsUUFDRSxRQUNBLFlBQTRCLE9BQ3RCO0FBQ04sT0FBSSxPQUFPLFdBQVcsVUFBVTtBQUM5QixTQUFLLFVBQVUsV0FBVyxHQUFHLE9BQU8sS0FBSyxHQUFHLGFBQWEsT0FBTyxRQUFRO1VBQ25FO0FBQ0wsU0FBSyxVQUFVLFFBQVEsUUFBUSxVQUFVOztBQUUzQyxVQUFPOztFQUdULFlBQWtCO0FBQ2hCLFFBQUssVUFBVSxXQUFXO0FBQzFCLFVBQU87O0VBR1QsV0FBaUI7QUFDZixRQUFLLFVBQVUsVUFBVTtBQUN6QixVQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9DVCxpQkFDRSxRQUNBLFdBQ0EsVUFJSSxFQUFFLEVBQ29EO0dBQzFELE1BQU0sRUFBRSxTQUFTLFVBQVUsV0FBVyxlQUFlO0FBRXJELE9BQ0UsQ0FBQyxNQUFNLFFBQVEsVUFBVSxJQUN6QixVQUFVLFdBQVcsS0FDckIsVUFBVSxNQUFNLE1BQU0sQ0FBQyxPQUFPLFNBQVMsRUFBRSxDQUFDLEVBQzFDO0FBQ0EsVUFBTSxJQUFJLE1BQU0seUVBQXlFOztHQUczRixNQUFNLGdCQUFnQixLQUFLLFVBQVUsVUFBVSxLQUFLLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQztHQUNyRSxNQUFNLFdBQVc7SUFBRSxRQUFRO0lBQU8sSUFBSTtJQUFPLGVBQWU7SUFBTyxDQUFDO0dBTXBFLE1BQU0saUJBQ0osV0FBVyxXQUNQLEtBQUssS0FBSyxJQUFJLFdBQVcsU0FBUyw0QkFBNEIsQ0FBQyxRQUFRLGNBQWMsQ0FBQyxHQUN0RixXQUFXLE9BQ1QsS0FBSyxLQUFLLElBQUksTUFBTSxTQUFTLDJCQUEyQixDQUFDLFFBQVEsY0FBYyxDQUFDLEdBQ2hGLEtBQUssS0FBSyxJQUFJLFFBQVEsU0FBUyw0QkFBNEIsQ0FBQyxRQUFRLGNBQWMsQ0FBQztBQUczRixRQUFLLFVBQVUsYUFBYSxPQUFPO0FBR25DLFFBQUssVUFBVSxNQUFNLFFBQVE7QUFDN0IsT0FBSSxZQUFZO0lBRWQsTUFBTSxxQkFBc0IsS0FBSyxVQUFrQixZQUNoRCxRQUFRLE1BQVcsRUFBRSxhQUFhLFVBQVUsQ0FDNUMsU0FBUyxNQUFXLEVBQUUsTUFBTTtBQUMvQixTQUFLLFVBQVUsTUFBTSxTQUFTO0FBQzlCLFNBQUssVUFBVSxPQUFPLEtBQUssS0FBSyxJQUFJLHVCQUF1QixDQUFDLFlBQVksV0FBVyxDQUFDLENBQUM7QUFDckYsdUJBQW1CLEtBQUssUUFBYSxLQUFLLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDaEUsU0FBSyxVQUFVLE9BQU8sZUFBZTtBQUNyQyxTQUFLLFVBQVUsV0FBVyxVQUFVLFNBQVMsYUFBYTtLQUN4RDtLQUNBO0tBQ0E7S0FDRCxDQUFDO0FBRUYsU0FBSyxZQUFZLEtBQUssS0FDbkIsS0FBSyxLQUFLLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxDQUMzQyxPQUFPLElBQUksQ0FDWCxRQUFRLGNBQWMsT0FBTztVQUMzQjtBQUNMLFNBQUssVUFBVSxPQUFPLGVBQWU7QUFDckMsU0FBSyxVQUFVLFdBQVcsTUFBTSxTQUFTLGFBQWEsQ0FBQyxRQUFRLGNBQWMsQ0FBQzs7QUFJaEYsT0FBSSxPQUFPLGNBQWMsVUFBVTtBQUNqQyxRQUFJLENBQUMsT0FBTyxTQUFTLFVBQVUsRUFBRTtBQUMvQixXQUFNLElBQUksTUFBTSx1Q0FBdUMsWUFBWTs7QUFHckUsUUFBSSxZQUFZO0tBQ2QsTUFBTSxjQUFjLFdBQVcsT0FBTyxPQUFPO0FBQzdDLFVBQUssVUFBVSxNQUFNLGNBQWMsYUFBYSxVQUFVO1dBQ3JEO0tBQ0wsTUFBTSxpQkFDSixXQUFXLFdBQVcsSUFBSSxZQUFZLFdBQVcsa0JBQWtCLENBQUMsWUFBWTtBQUNsRixVQUFLLFVBQVUsU0FBUyxNQUFNLFNBQVMsa0JBQWtCO01BQ3ZEO01BQ0E7TUFDQTtNQUNELENBQUM7OztBQUlOLFVBQU87O0VBSVQsTUFBTSxPQUFxQjtBQUN6QixPQUFJLFFBQVEsR0FBRztBQUNiLFVBQU0sSUFBSSxNQUFNLDhCQUE4Qjs7QUFFaEQsUUFBSyxVQUFVLE1BQU0sTUFBTTtBQUMzQixVQUFPOztFQUdULE9BQU8sT0FBcUI7QUFDMUIsT0FBSSxRQUFRLEdBQUc7QUFDYixVQUFNLElBQUksTUFBTSwrQkFBK0I7O0FBRWpELFFBQUssVUFBVSxPQUFPLE1BQU07QUFDNUIsVUFBTzs7RUFLVCxRQUFRLEdBQUcsU0FBeUI7QUFDbEMsUUFBSyxVQUFVLFFBQVEsR0FBRyxRQUFRO0FBQ2xDLFVBQU87O0VBV1QsT0FBTyxHQUFHLFlBQXlCO0FBQ2pDLE9BQUksV0FBVyxXQUFXLEdBQUc7QUFFM0IsU0FBSyxVQUFVLE9BQU8sS0FBSyxLQUFLLElBQUksV0FBVyxHQUFHLENBQUM7Y0FDMUMsV0FBVyxXQUFXLEdBQUc7QUFFbEMsU0FBSyxVQUFVLE9BQ2IsS0FBSyxLQUFLLElBQUksV0FBVyxHQUFHLEVBQzVCLFdBQVcsSUFDWCxLQUFLLEtBQUssSUFBSSxXQUFXLEdBQUcsQ0FDN0I7VUFDSTtBQUNMLFVBQU0sSUFBSSxNQUFNLDJCQUEyQjs7QUFFN0MsVUFBTzs7RUFJVCxLQUNFLGFBQ0EsWUFDOEI7QUFDOUIsU0FBTSxFQUFFLHVCQUF1QixLQUFLLFNBQVMsQ0FBQztBQUM5QyxVQUFPLEtBQUssVUFBVSxLQUFLLGFBQW9CLFdBQVc7O0VBRTVELE1BQ0UsWUFDNkI7QUFDN0IsVUFBTyxLQUFLLFVBQVUsTUFBTSxXQUFXOztFQUV6QyxRQUFRLFdBQW1EO0FBQ3pELFVBQU8sS0FBSyxVQUFVLFFBQVEsVUFBVTs7RUFJMUMsUUFBOEM7QUFDNUMsUUFBSyxVQUFVLE9BQU87QUFDdEIsVUFBTyxJQUFJLGFBQWEsS0FBSyxXQUFXLEtBQUssS0FBSzs7RUFJcEQsTUFDRSxRQU1BO0FBQ0EsUUFBSyxVQUFVLE1BQU0sT0FBaUI7QUFDdEMsVUFBTyxJQUFJLGFBQWEsS0FBSyxXQUFXLEtBQUssS0FBSzs7RUFZcEQsT0FDRSxTQUN1RDtHQUV2RCxNQUFNLGNBQWMsS0FBSyxrQkFBa0IsUUFBUTtBQUNuRCxRQUFLLFVBQVUsT0FBTyxZQUFZO0FBQ2xDLFVBQU8sSUFBSSxhQUFhLEtBQUssV0FBVyxLQUFLLEtBQUs7O0VBSXBELE9BQU8sU0FBbUY7R0FFeEYsTUFBTSxjQUFjLEtBQUssa0JBQWtCLFFBQVE7QUFDbkQsUUFBSyxVQUFVLE9BQU8sWUFBWTtBQUNsQyxVQUFPLElBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxLQUFLOzs7Ozs7O0VBUXBELEFBQVEsa0JBQ04sTUFDYTtBQUViLE9BQUksQ0FBQyxLQUFLLGFBQWEsQ0FBQyxLQUFLLFVBQVUsWUFBWSxRQUFRO0FBQ3pELFdBQU87O0dBSVQsTUFBTSxjQUFjLEtBQUssVUFBVTtBQUNuQyxPQUFJLE1BQU0sUUFBUSxLQUFLLEVBQUU7QUFDdkIsU0FBSyxNQUFNLFFBQVEsTUFBTTtBQUN2QixVQUFLLE1BQU0sVUFBVSxhQUFhO01BQ2hDLE1BQU0sUUFBUSxLQUFLO0FBQ25CLFVBQUksVUFBVSxhQUFhLFVBQVUsTUFBTTtBQUN6QyxZQUFLLFVBQVUsS0FBSyxVQUFVLE1BQU07Ozs7VUFJckM7QUFDTCxTQUFLLE1BQU0sVUFBVSxhQUFhO0tBQ2hDLE1BQU0sUUFBUSxLQUFLO0FBQ25CLFNBQUksVUFBVSxhQUFhLFVBQVUsTUFBTTtBQUN6QyxXQUFLLFVBQVUsS0FBSyxVQUFVLE1BQU07Ozs7QUFJMUMsVUFBTzs7RUFJVCxVQUNFLFFBQ0EsT0FDaUQ7QUFDakQsT0FBSSxTQUFTLEdBQUc7QUFDZCxVQUFNLElBQUksTUFBTSx5Q0FBeUM7O0FBRTNELFFBQUssVUFBVSxVQUFVLFFBQVEsTUFBTTtBQUN2QyxVQUFPLElBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxLQUFLOztFQUdwRCxVQUNFLFFBQ0EsT0FDaUQ7QUFDakQsT0FBSSxTQUFTLEdBQUc7QUFDZCxVQUFNLElBQUksTUFBTSx5Q0FBeUM7O0FBRTNELFFBQUssVUFBVSxVQUFVLFFBQVEsTUFBTTtBQUN2QyxVQUFPLElBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxLQUFLOztFQUlwRCxTQUEwRDtBQUN4RCxRQUFLLFVBQVUsUUFBUTtBQUN2QixVQUFPLElBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxLQUFLOztFQUlwRCxVQUFrQjtBQUNoQixVQUFPLEtBQUssVUFBVSxTQUFTOztFQUlqQyxRQUFjO0FBQ1osV0FBUSxJQUFJLEdBQUcsTUFBTSxLQUFLLGVBQWUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxLQUFLLFNBQVMsQ0FBQyxHQUFHO0FBQzVFLFVBQU87O0VBR1QsUUFBeUM7R0FFdkMsTUFBTSxVQUFVLElBQUksS0FBZ0MsS0FBSyxNQUFNLE9BQU87QUFDdEUsV0FBUSxZQUFZLEtBQUssVUFBVSxPQUFPO0FBQzFDLFVBQU87O0VBR1QsVUFBVSxhQUE2QjtHQUVyQyxNQUFNLFdBQVc7SUFDZjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBRUQsSUFBSSxZQUFZO0FBR2hCLFlBQVMsU0FBUyxZQUFZO0lBQzVCLE1BQU0sUUFBUSxJQUFJLE9BQU8sTUFBTSxRQUFRLE1BQU0sS0FBSztBQUNsRCxnQkFBWSxVQUFVLFFBQVEsT0FBTyxRQUFRLGFBQWEsQ0FBQztLQUMzRDtHQUdGLE1BQU0sZUFBZTtJQUNuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7QUFDRCxnQkFBYSxTQUFTLFdBQVc7SUFDL0IsTUFBTSxRQUFRLElBQUksT0FBTyxRQUFRLE9BQU8sUUFBUSxLQUFLO0FBQ3JELGdCQUFZLFVBQVUsUUFBUSxPQUFPLEtBQUssT0FBTyxhQUFhLENBQUMsR0FBRztLQUNsRTtBQUdGLGVBQVksVUFBVSxRQUFRLHFEQUFxRCxZQUFZO0FBRy9GLGVBQVksVUFBVSxRQUFRLG9CQUFvQixVQUFVO0dBRzVELE1BQU0sUUFBUSxVQUFVLE1BQU0sS0FBSztHQUNuQyxNQUFNLGdCQUFnQixFQUFFO0dBQ3hCLElBQUksY0FBYztBQUVsQixRQUFLLE1BQU0sUUFBUSxPQUFPO0lBQ3hCLE1BQU0sY0FBYyxLQUFLLE1BQU07QUFDL0IsUUFBSSxDQUFDLFlBQWE7SUFHbEIsTUFBTSxpQkFBaUIsWUFBWSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxpQkFBaUIsWUFBWSxNQUFNLE1BQU0sSUFBSSxFQUFFLEVBQUU7QUFFdkQsUUFBSSxnQkFBZ0IsS0FBSyxrQkFBa0IsR0FBRztBQUM1QyxtQkFBYyxLQUFLLElBQUksR0FBRyxjQUFjLGNBQWM7O0lBSXhELE1BQU0sU0FBUyxLQUFLLE9BQU8sWUFBWTtBQUN2QyxrQkFBYyxLQUFLLFNBQVMsWUFBWTtBQUd4QyxRQUFJLGdCQUFnQixlQUFlO0FBQ2pDLG9CQUFlLGdCQUFnQjs7O0FBSW5DLFVBQU8sY0FBYyxLQUFLLEtBQUssQ0FBQyxNQUFNOztFQUd4QyxJQUFJLEtBQXVCO0FBQ3pCLFVBQU8sS0FBSyxLQUFLLElBQUksSUFBSTs7RUFJM0IsV0FBOEI7QUFDNUIsVUFBTyxLQUFLOzs7Q0FJSCxhQUFiLE1BQWEsV0FBZ0Q7RUFDM0QsWUFBWSxBQUFRRSxTQUE0QjtHQUE1Qjs7RUFhcEIsTUFBTSxHQUFHLE1BQWtDO0FBQ3pDLFFBQUssUUFBUSxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7QUFDN0MsVUFBTzs7RUFRVCxRQUFRLEdBQUcsTUFBa0M7QUFDM0MsUUFBSyxRQUFRLFFBQVEsS0FBSyxJQUFJLEtBQUssR0FBRztBQUN0QyxVQUFPOztFQU9ULFdBQVcsR0FBRyxNQUFrQztBQUM5QyxRQUFLLFFBQVEsV0FBVyxLQUFLLElBQUksS0FBSyxHQUFHO0FBQ3pDLFVBQU87O0VBY1QsUUFBUSxHQUFHLE1BQWtDO0FBQzNDLFFBQUssUUFBUSxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7QUFDL0MsVUFBTzs7RUFRVCxVQUFVLEdBQUcsTUFBa0M7QUFDN0MsUUFBSyxRQUFRLFVBQVUsS0FBSyxJQUFJLEtBQUssR0FBRztBQUN4QyxVQUFPOztFQU9ULGFBQWEsR0FBRyxNQUFrQztBQUNoRCxRQUFLLFFBQVEsYUFBYSxLQUFLLElBQUksS0FBSyxHQUFHO0FBQzNDLFVBQU87O0VBS1QsV0FBVyxHQUFHLE1BQW1CO0FBQy9CLFFBQUssUUFBUSxTQUFTLFVBQVUsT0FBTyxLQUFLLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUMxRSxVQUFPOztFQUlULGFBQWEsR0FBRyxNQUFtQjtBQUNqQyxRQUFLLFFBQVEsV0FBVyxVQUFVLE9BQU8sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDNUUsVUFBTzs7RUFXVCxZQUFZLEdBQUcsTUFBbUI7R0FDaEMsTUFBTSxFQUFFLFlBQVksS0FBSyxNQUFNLEVBQUU7R0FDakMsTUFBTSxhQUFhLE1BQU0sUUFBUSxLQUFLLEdBQUcsR0FDckMsU0FBUyxLQUFLLEdBQUcsS0FBSyxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsS0FDcEQsS0FBSztHQUNULE1BQU0sb0JBQW9CLHVCQUF1QixTQUFTLFNBQVMsc0JBQXNCLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFHO0FBQ25ILFFBQUssUUFBUSxTQUFTLEdBQUcsV0FBVyxPQUFPLHFCQUFxQixDQUFDLEtBQUssR0FBRyxDQUFDO0FBRTFFLFVBQU87O0VBVVQsY0FBYyxHQUFHLE1BQW1CO0dBQ2xDLE1BQU0sRUFBRSxZQUFZLEtBQUssTUFBTSxFQUFFO0dBQ2pDLE1BQU0sYUFBYSxNQUFNLFFBQVEsS0FBSyxHQUFHLEdBQ3JDLFNBQVMsS0FBSyxHQUFHLEtBQUssTUFBTSxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQ3BELEtBQUs7R0FDVCxNQUFNLG9CQUFvQix1QkFBdUIsU0FBUyxTQUFTLHNCQUFzQixRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUNuSCxRQUFLLFFBQVEsV0FBVyxHQUFHLFdBQVcsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUU1RSxVQUFPOztFQVNULGNBQWMsR0FBRyxNQUFtQjtHQUNsQyxNQUFNLE9BQ0osT0FBTyxLQUFLLE9BQU8sV0FBWSxFQUFFLFFBQVEsS0FBSyxJQUFJLEdBQXVCLEtBQUssTUFBTSxFQUFFO0dBRXhGLE1BQU0sU0FBUyxLQUFLLFVBQVU7R0FDOUIsTUFBTSxTQUFTLEtBQUssVUFBVTtHQUM5QixNQUFNLGFBQ0osT0FBTyxLQUFLLE9BQU8sWUFBWSxLQUFLLEdBQUcsVUFBVSxtQkFDN0MsS0FBSyxHQUFHLE9BQ1IsT0FBTyxLQUFLLEdBQUc7QUFFckIsUUFBSyxRQUFRLFNBQVMsR0FBRyxXQUFXLE1BQU0sT0FBTyxTQUFTLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQztBQUM1RSxVQUFPOztFQVFULGdCQUFnQixHQUFHLE1BQW1CO0dBQ3BDLE1BQU0sT0FDSixPQUFPLEtBQUssT0FBTyxXQUFZLEVBQUUsUUFBUSxLQUFLLElBQUksR0FBdUIsS0FBSyxNQUFNLEVBQUU7R0FFeEYsTUFBTSxTQUFTLEtBQUssVUFBVTtHQUM5QixNQUFNLFNBQVMsS0FBSyxVQUFVO0dBQzlCLE1BQU0sYUFDSixPQUFPLEtBQUssT0FBTyxZQUFZLEtBQUssR0FBRyxVQUFVLG1CQUM3QyxLQUFLLEdBQUcsT0FDUixPQUFPLEtBQUssR0FBRztBQUVyQixRQUFLLFFBQVEsV0FBVyxHQUFHLFdBQVcsTUFBTSxPQUFPLFNBQVMsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQzlFLFVBQU87O0VBVVQsV0FBVyxHQUFHLE1BQW1CO0dBQy9CLE1BQU0sV0FBVyx1QkFBdUIsS0FBSyxJQUFJLFNBQVM7QUFFMUQsT0FBSSxhQUFhLEtBQUs7QUFDcEIsUUFBSSxPQUFPLEtBQUssT0FBTyxVQUFVO0FBQy9CLFVBQUssUUFBUSxTQUFTLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxTQUFTLEtBQUssR0FBRyxDQUFDO1dBQ2hGO0FBQ0wsVUFBSyxRQUFRLFNBQVMsTUFBTSxTQUFTLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUM7O0FBRS9ELFdBQU87O0FBR1QsT0FBSSxPQUFPLEtBQUssT0FBTyxVQUFVO0FBQy9CLFNBQUssUUFBUSxTQUFTLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQztVQUNoRjtBQUNMLFNBQUssUUFBUSxTQUFTLEtBQUssU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDOztBQUUvRCxVQUFPOztFQVVULGFBQWEsR0FBRyxNQUFtQjtHQUNqQyxNQUFNLFdBQVcsdUJBQXVCLEtBQUssSUFBSSxTQUFTO0FBRTFELE9BQUksYUFBYSxLQUFLO0FBQ3BCLFFBQUksT0FBTyxLQUFLLE9BQU8sVUFBVTtBQUMvQixVQUFLLFFBQVEsV0FBVyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsU0FBUyxLQUFLLEdBQUcsQ0FBQztXQUNsRjtBQUNMLFVBQUssUUFBUSxXQUFXLE1BQU0sU0FBUyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDOztBQUVqRSxXQUFPOztBQUdULE9BQUksT0FBTyxLQUFLLE9BQU8sVUFBVTtBQUMvQixTQUFLLFFBQVEsV0FBVyxLQUFLLFNBQVMsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7VUFDbEY7QUFDTCxTQUFLLFFBQVEsV0FBVyxLQUFLLFNBQVMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQzs7QUFFakUsVUFBTzs7RUFLVCxXQUFXLFVBQWlFO0FBQzFFLFFBQUssUUFBUSxPQUFPLGVBQWU7SUFDakMsTUFBTSxXQUFXLElBQUksV0FBb0IsV0FBVztBQUNwRCxhQUFTLFNBQVM7S0FDbEI7QUFDRixVQUFPOztFQUdULGFBQWEsVUFBaUU7QUFDNUUsUUFBSyxRQUFRLFNBQVMsZUFBZTtJQUNuQyxNQUFNLFdBQVcsSUFBSSxXQUFvQixXQUFXO0FBQ3BELGFBQVMsU0FBUztLQUNsQjtBQUNGLFVBQU87OztDQUtFLGtCQUFiLE1BR0U7RUFDQSxZQUFZLEFBQVFDLFVBQTJCO0dBQTNCOztFQXdDcEIsR0FBRyxHQUFHLE1BQW1CO0FBQ3ZCLFFBQUssU0FBUyxHQUFHLEdBQUksS0FBMEI7QUFDL0MsVUFBTzs7RUF5Q1QsS0FBSyxHQUFHLE1BQW1CO0FBQ3pCLFFBQUssU0FBUyxLQUFLLEdBQUksS0FBMEI7QUFDakQsVUFBTzs7RUFRVCxNQUFNLEdBQUcsTUFBbUI7QUFDMUIsR0FBQyxLQUFLLFNBQWlCLE1BQU0sR0FBRyxLQUFLO0FBQ3JDLFVBQU87O0VBUVQsU0FBUyxHQUFHLE1BQW1CO0FBQzdCLEdBQUMsS0FBSyxTQUFpQixTQUFTLEdBQUcsS0FBSztBQUN4QyxVQUFPOztFQVFULFFBQVEsR0FBRyxNQUFtQjtBQUM1QixHQUFDLEtBQUssU0FBaUIsUUFBUSxHQUFHLEtBQUs7QUFDdkMsVUFBTzs7O0NBUUUsZUFBYixNQUFhLGFBQWtFO0VBQzdFLFlBQ0UsQUFBT0MsV0FDUCxBQUFRTCxNQUNSO0dBRk87R0FDQzs7RUFHVixDQUFDLE9BQU8sZUFBdUI7RUFFL0IsVUFBa0I7QUFDaEIsVUFBTyxLQUFLLFVBQVUsU0FBUzs7RUFHakMsUUFBYztBQUNaLFdBQVEsSUFBSSxHQUFHLE1BQU0sS0FBSyxlQUFlLENBQUMsR0FBRyxNQUFNLE9BQU8sS0FBSyxTQUFTLENBQUMsR0FBRztBQUM1RSxVQUFPOztFQUdULEtBQ0UsYUFDQSxZQUM4QjtBQUM5QixTQUFNLEVBQUUsdUJBQXVCLEtBQUssU0FBUyxDQUFDO0FBQzlDLFVBQU8sS0FBSyxVQUFVLEtBQUssYUFBb0IsV0FBVzs7RUFHNUQsTUFDRSxZQUMrQjtBQUMvQixVQUFPLEtBQUssVUFBVSxNQUFNLFdBQVc7O0VBR3pDLFFBQVEsV0FBcUQ7QUFDM0QsVUFBTyxLQUFLLFVBQVUsUUFBUSxVQUFVOztFQUkxQyxXQUNFLFNBQ0EsUUFDTTtHQUNOLE1BQU0sU0FBUyxNQUFNLFFBQVEsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRO0FBRTNELE9BQUksQ0FBQyxVQUFVLFdBQVcsV0FBVztBQUVuQyxTQUFLLFVBQVUsV0FBVyxPQUFPLENBQUMsUUFBUTtVQUNyQztJQUVMLE1BQU0sRUFBRSxXQUFXO0FBR25CLFFBQUksTUFBTSxRQUFRLE9BQU8sRUFBRTtBQUN6QixVQUFLLFVBQVUsV0FBVyxPQUFPLENBQUMsTUFBTSxPQUFPO1dBQzFDO0tBRUwsTUFBTU0sV0FBZ0MsRUFBRTtBQUV4QyxVQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLE9BQU8sRUFBRTtBQUNqRCxVQUNFLFNBQ0EsT0FBTyxVQUFVLFlBQ2pCLFdBQVcsU0FDWCxNQUFNLFVBQVUsa0JBQ2hCO0FBRUEsZ0JBQVMsT0FBTyxLQUFLLEtBQUssSUFBSyxNQUE2QixLQUFLO2FBQzVEO0FBRUwsZ0JBQVMsT0FBTzs7O0FBSXBCLFVBQUssVUFBVSxXQUFXLE9BQU8sQ0FBQyxNQUFNLFNBQVM7OztBQUlyRCxVQUFPOztFQWNULFVBQVUsaUJBQWdFO0FBQ3hFLFFBQUssVUFBVSxVQUFVLGdCQUFnQjtBQUN6QyxVQUFPLElBQUksYUFBYSxLQUFLLFdBQVcsS0FBSyxLQUFLIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-vitest-manager.d.ts","sourceRoot":"","sources":["../../src/testing/dev-vitest-manager.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AASvE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,iBAAiB,CAIT;IAEhB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAInD,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAItD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAMvC,KAAK,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD/C,GAAG,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAe1F,SAAS,IAAI,aAAa;IAQ1B;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IASpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-vitest-manager.d.ts","sourceRoot":"","sources":["../../src/testing/dev-vitest-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -213,6 +213,7 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
213
213
|
entry.reject(new Error("DevVitestManager is being shut down"));
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
|
+
this.eventListeners.clear();
|
|
216
217
|
if (this.vitest) {
|
|
217
218
|
await this.vitest.close();
|
|
218
219
|
this.vitest = null;
|
|
@@ -526,4 +527,4 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
526
527
|
//#endregion
|
|
527
528
|
init_dev_vitest_manager();
|
|
528
529
|
export { DevVitestManager, init_dev_vitest_manager };
|
|
529
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOlsidml0ZU92ZXJyaWRlczogVml0ZVVzZXJDb25maWciLCJjbGlPcHRpb25zOiBDbGlPcHRpb25zIiwic3BlY3M6IFRlc3RTcGVjaWZpY2F0aW9uW10iLCJydW5SZXN1bHQ6IFRlc3RSdW5SZXN1bHQiLCJyZXN1bHQ6IFRlc3RDYXNlUmVzdWx0W10iLCJlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsIiwidHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcblxuLy8g7YWM7Iqk7Yq4IO2VnCDqsbTsnZggdHJhY2Ug66qo7J2MXG5leHBvcnQgdHlwZSBUZXN0Tm9kZUtpbmQgPSBcImZpbGVcIiB8IFwic3VpdGVcIiB8IFwidGVzdFwiO1xuZXhwb3J0IHR5cGUgVGVzdFN0YXRlID0gXCJwYXNzZWRcIiB8IFwiZmFpbGVkXCIgfCBcInNraXBwZWRcIiB8IFwidG9kb1wiIHwgXCJydW5uaW5nXCIgfCBcInVua25vd25cIjtcblxuZXhwb3J0IHR5cGUgVGVzdENhc2VSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiBUZXN0U3RhdGU7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IG51bGw7XG4gIGNvdW50czogeyB0b3RhbDogbnVtYmVyOyBwYXNzZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IHNraXBwZWQ6IG51bWJlciB9O1xuICBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsO1xuICB0cmFjZXM6IFNlcmlhbGl6ZWRUcmFjZVtdO1xuICBjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blJlc3VsdCA9IHtcbiAgb2s6IGJvb2xlYW47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIH07XG4gIHJlc3VsdHM6IFRlc3RDYXNlUmVzdWx0W107XG59O1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VyU3RhdHVzID0ge1xuICByZWFkeTogYm9vbGVhbjtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBWaXRlc3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzID0gbmV3IFNldDxUZXN0RXZlbnRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UnVuQ29udGV4dDoge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gICAgc3BlY01vZHVsZUlkczogU2V0PHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZVZpdGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSByYXcuZmlsdGVyKGlzU2VyaWFsaXplZFRyYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgXCJwYXNzZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDEsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMSwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBydW5uaW5nL3Vua25vd24g7IOB7YOc64+EIHRvdGFs7JeQIO2PrO2VqO2VmOyXrCDtjIzsnbwg64W465OcIGNvdW50cy50b3RhbOydtCDtlZjsnIQg7ZWp6rOE7JmAIOydvOy5mO2VmOuPhOuhnSDtlahcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUNvdW50cyhjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgbGV0IHBhc3NlZCA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuICBsZXQgc2tpcHBlZCA9IDA7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICB0b3RhbCArPSBjaGlsZC5jb3VudHMudG90YWw7XG4gICAgcGFzc2VkICs9IGNoaWxkLmNvdW50cy5wYXNzZWQ7XG4gICAgZmFpbGVkICs9IGNoaWxkLmNvdW50cy5mYWlsZWQ7XG4gICAgc2tpcHBlZCArPSBjaGlsZC5jb3VudHMuc2tpcHBlZDtcbiAgfVxuICByZXR1cm4geyB0b3RhbCwgcGFzc2VkLCBmYWlsZWQsIHNraXBwZWQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0Q29tcGxldGVuZXNzU2NvcmUobm9kZTogVGVzdENhc2VSZXN1bHQpOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSAwO1xuICAvLyDthYzsiqTtirgg7IiY6rCAIOuNlCDrp47snYAg6rKw6rO866W8IOyasOyEoO2VmOyXrCDspJHrs7Ug7YyM7J28IOuzke2VqSDsi5wg7KCV67O0IOyGkOyLpOydhCDspITsnoXri4jri6QuXG4gIHNjb3JlICs9IG5vZGUuY291bnRzLnRvdGFsICogMTAwMDtcbiAgc2NvcmUgKz0gbm9kZS5jaGlsZHJlbi5sZW5ndGggKiAxMDA7XG4gIGlmIChub2RlLmR1cmF0aW9uTXMgIT09IG51bGwpIHNjb3JlICs9IDEwO1xuXG4gIHN3aXRjaCAobm9kZS5zdGF0ZSkge1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHNjb3JlICs9IDU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICBzY29yZSArPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHNjb3JlICs9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgc2NvcmUgKz0gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICBzY29yZSArPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemVkVHJhY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemVkVHJhY2Uge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdi5rZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2Ygdi5maWxlUGF0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2LmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5hdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFwidmFsdWVcIiBpbiB2XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQWtqQkEsU0FBUyxlQUFlLE9BQTBFO0FBQ2hHLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUs7RUFDTCxLQUFLLFNBQ0gsUUFBTztFQUNULFFBQ0UsUUFBTzs7O0FBSWIsU0FBUyxjQUFjLE9BQStEO0FBQ3BGLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixTQUFTLGNBQ1AsUUFDQSxNQUNXO0FBQ1gsU0FBUSxPQUFPLE9BQWY7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU8sU0FBUyxTQUFTLFNBQVM7RUFDcEMsS0FBSyxVQUNILFFBQU87RUFDVCxRQUNFLFFBQU87OztBQUliLFNBQVMs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
|
|
530
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOlsidml0ZU92ZXJyaWRlczogVml0ZVVzZXJDb25maWciLCJjbGlPcHRpb25zOiBDbGlPcHRpb25zIiwic3BlY3M6IFRlc3RTcGVjaWZpY2F0aW9uW10iLCJydW5SZXN1bHQ6IFRlc3RSdW5SZXN1bHQiLCJyZXN1bHQ6IFRlc3RDYXNlUmVzdWx0W10iLCJlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsIiwidHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcblxuLy8g7YWM7Iqk7Yq4IO2VnCDqsbTsnZggdHJhY2Ug66qo7J2MXG5leHBvcnQgdHlwZSBUZXN0Tm9kZUtpbmQgPSBcImZpbGVcIiB8IFwic3VpdGVcIiB8IFwidGVzdFwiO1xuZXhwb3J0IHR5cGUgVGVzdFN0YXRlID0gXCJwYXNzZWRcIiB8IFwiZmFpbGVkXCIgfCBcInNraXBwZWRcIiB8IFwidG9kb1wiIHwgXCJydW5uaW5nXCIgfCBcInVua25vd25cIjtcblxuZXhwb3J0IHR5cGUgVGVzdENhc2VSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiBUZXN0U3RhdGU7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IG51bGw7XG4gIGNvdW50czogeyB0b3RhbDogbnVtYmVyOyBwYXNzZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IHNraXBwZWQ6IG51bWJlciB9O1xuICBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsO1xuICB0cmFjZXM6IFNlcmlhbGl6ZWRUcmFjZVtdO1xuICBjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blJlc3VsdCA9IHtcbiAgb2s6IGJvb2xlYW47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIH07XG4gIHJlc3VsdHM6IFRlc3RDYXNlUmVzdWx0W107XG59O1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VyU3RhdHVzID0ge1xuICByZWFkeTogYm9vbGVhbjtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBWaXRlc3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzID0gbmV3IFNldDxUZXN0RXZlbnRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UnVuQ29udGV4dDoge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gICAgc3BlY01vZHVsZUlkczogU2V0PHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZVZpdGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSByYXcuZmlsdGVyKGlzU2VyaWFsaXplZFRyYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgXCJwYXNzZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDEsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMSwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBydW5uaW5nL3Vua25vd24g7IOB7YOc64+EIHRvdGFs7JeQIO2PrO2VqO2VmOyXrCDtjIzsnbwg64W465OcIGNvdW50cy50b3RhbOydtCDtlZjsnIQg7ZWp6rOE7JmAIOydvOy5mO2VmOuPhOuhnSDtlahcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUNvdW50cyhjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgbGV0IHBhc3NlZCA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuICBsZXQgc2tpcHBlZCA9IDA7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICB0b3RhbCArPSBjaGlsZC5jb3VudHMudG90YWw7XG4gICAgcGFzc2VkICs9IGNoaWxkLmNvdW50cy5wYXNzZWQ7XG4gICAgZmFpbGVkICs9IGNoaWxkLmNvdW50cy5mYWlsZWQ7XG4gICAgc2tpcHBlZCArPSBjaGlsZC5jb3VudHMuc2tpcHBlZDtcbiAgfVxuICByZXR1cm4geyB0b3RhbCwgcGFzc2VkLCBmYWlsZWQsIHNraXBwZWQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0Q29tcGxldGVuZXNzU2NvcmUobm9kZTogVGVzdENhc2VSZXN1bHQpOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSAwO1xuICAvLyDthYzsiqTtirgg7IiY6rCAIOuNlCDrp47snYAg6rKw6rO866W8IOyasOyEoO2VmOyXrCDspJHrs7Ug7YyM7J28IOuzke2VqSDsi5wg7KCV67O0IOyGkOyLpOydhCDspITsnoXri4jri6QuXG4gIHNjb3JlICs9IG5vZGUuY291bnRzLnRvdGFsICogMTAwMDtcbiAgc2NvcmUgKz0gbm9kZS5jaGlsZHJlbi5sZW5ndGggKiAxMDA7XG4gIGlmIChub2RlLmR1cmF0aW9uTXMgIT09IG51bGwpIHNjb3JlICs9IDEwO1xuXG4gIHN3aXRjaCAobm9kZS5zdGF0ZSkge1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHNjb3JlICs9IDU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICBzY29yZSArPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHNjb3JlICs9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgc2NvcmUgKz0gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICBzY29yZSArPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemVkVHJhY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemVkVHJhY2Uge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdi5rZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2Ygdi5maWxlUGF0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2LmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5hdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFwidmFsdWVcIiBpbiB2XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQW9qQkEsU0FBUyxlQUFlLE9BQTBFO0FBQ2hHLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUs7RUFDTCxLQUFLLFNBQ0gsUUFBTztFQUNULFFBQ0UsUUFBTzs7O0FBSWIsU0FBUyxjQUFjLE9BQStEO0FBQ3BGLFNBQVEsT0FBUjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixTQUFTLGNBQ1AsUUFDQSxNQUNXO0FBQ1gsU0FBUSxPQUFPLE9BQWY7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU8sU0FBUyxTQUFTLFNBQVM7RUFDcEMsS0FBSyxV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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -129,10 +129,10 @@
|
|
|
129
129
|
"tsicli": "^1.0.5",
|
|
130
130
|
"vite": "8.0.5",
|
|
131
131
|
"vitest": "^4.1.2",
|
|
132
|
-
"@sonamu-kit/
|
|
133
|
-
"@sonamu-kit/tasks": "^0.3.0",
|
|
132
|
+
"@sonamu-kit/ts-loader": "^2.2.0",
|
|
134
133
|
"@sonamu-kit/hmr-runner": "^0.2.0",
|
|
135
|
-
"@sonamu-kit/
|
|
134
|
+
"@sonamu-kit/hmr-hook": "^0.5.1",
|
|
135
|
+
"@sonamu-kit/tasks": "^0.3.0"
|
|
136
136
|
},
|
|
137
137
|
"devDependencies": {
|
|
138
138
|
"@types/bcrypt": "^6",
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { knex } from "knex";
|
|
2
|
+
import { afterAll, describe, expect, it } from "vitest";
|
|
3
|
+
|
|
4
|
+
import { Puri } from "../puri";
|
|
5
|
+
|
|
6
|
+
type TestSchema = {
|
|
7
|
+
users: {
|
|
8
|
+
id: number;
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const db = knex({ client: "pg" });
|
|
14
|
+
|
|
15
|
+
function usersQuery(): Puri<TestSchema, { users: TestSchema["users"] }, TestSchema["users"]> {
|
|
16
|
+
return new Puri(db, "users");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
afterAll(async () => {
|
|
20
|
+
await db.destroy();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe("Puri locking methods", () => {
|
|
24
|
+
it("adds FOR UPDATE to select queries", () => {
|
|
25
|
+
const query = usersQuery().where("id", 1).forUpdate().first().toQuery();
|
|
26
|
+
|
|
27
|
+
expect(query).toBe('select * from "users" where "id" = 1 limit 1 for update');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("adds FOR SHARE to select queries", () => {
|
|
31
|
+
const query = usersQuery().where("id", 1).forShare().first().toQuery();
|
|
32
|
+
|
|
33
|
+
expect(query).toBe('select * from "users" where "id" = 1 limit 1 for share');
|
|
34
|
+
});
|
|
35
|
+
});
|
package/src/database/puri.ts
CHANGED
|
@@ -852,6 +852,16 @@ export class Puri<TSchema, TTables extends Record<string, any>, TResult> {
|
|
|
852
852
|
return this;
|
|
853
853
|
}
|
|
854
854
|
|
|
855
|
+
forUpdate(): this {
|
|
856
|
+
this.knexQuery.forUpdate();
|
|
857
|
+
return this;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
forShare(): this {
|
|
861
|
+
this.knexQuery.forShare();
|
|
862
|
+
return this;
|
|
863
|
+
}
|
|
864
|
+
|
|
855
865
|
/**
|
|
856
866
|
* 벡터 유사도 검색 설정
|
|
857
867
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expectTypeOf, it } from "vitest";
|
|
2
2
|
|
|
3
|
+
import { type Puri } from "./puri";
|
|
3
4
|
import {
|
|
4
5
|
type AvailableColumns,
|
|
5
6
|
type ExtractColumnType,
|
|
@@ -456,3 +457,23 @@ describe("AvailableColumns", () => {
|
|
|
456
457
|
expectTypeOf(valid2).toExtend<Result>();
|
|
457
458
|
});
|
|
458
459
|
});
|
|
460
|
+
|
|
461
|
+
describe("Puri locking methods", () => {
|
|
462
|
+
it("forUpdate 체이닝 후 first 결과 타입을 유지한다", () => {
|
|
463
|
+
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
464
|
+
const query = {} as Query;
|
|
465
|
+
|
|
466
|
+
const result = query.where("id", 1).forUpdate().first();
|
|
467
|
+
|
|
468
|
+
expectTypeOf(result).resolves.toEqualTypeOf<MockSchema["users"]>();
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
it("forShare 체이닝 후 first 결과 타입을 유지한다", () => {
|
|
472
|
+
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
473
|
+
const query = {} as Query;
|
|
474
|
+
|
|
475
|
+
const result = query.where("id", 1).forShare().first();
|
|
476
|
+
|
|
477
|
+
expectTypeOf(result).resolves.toEqualTypeOf<MockSchema["users"]>();
|
|
478
|
+
});
|
|
479
|
+
});
|