sonamu 0.10.8 → 0.10.10
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/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +5 -12
- package/dist/database/base-model.d.ts +1 -0
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +14 -8
- package/dist/database/db.d.ts +2 -1
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +13 -3
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +4 -11
- package/dist/database/transaction-context.d.ts +8 -3
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +12 -7
- package/dist/naite/naite-reporter.d.ts +8 -3
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +9 -4
- package/dist/template/implementations/services.template.js +3 -3
- package/package.json +2 -2
- package/src/api/decorators.ts +11 -22
- package/src/database/__tests__/transaction-scope.test.ts +227 -0
- package/src/database/base-model.ts +31 -6
- package/src/database/db.ts +17 -2
- package/src/database/puri-wrapper.ts +5 -22
- package/src/database/transaction-context.ts +14 -6
- package/src/naite/naite-reporter.ts +8 -3
- package/src/template/__tests__/services.template.mutation.test.ts +169 -0
- package/src/template/implementations/services.template.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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"}
|
package/dist/api/decorators.js
CHANGED
|
@@ -161,27 +161,20 @@ function transactional(options = {}) {
|
|
|
161
161
|
model: modelName,
|
|
162
162
|
method: methodName
|
|
163
163
|
});
|
|
164
|
-
const existingContext = DB.transactionStorage.getStore();
|
|
165
164
|
const startTransaction = async () => {
|
|
166
165
|
return this.getPuri(dbPreset).knex.transaction(async (trx) => {
|
|
167
166
|
this.logger.debug("new transaction context: {dbPreset}", { dbPreset });
|
|
168
167
|
const trxWrapper = new PuriTransactionWrapper(trx, new UpsertBuilder());
|
|
169
|
-
DB.
|
|
170
|
-
try {
|
|
171
|
-
return await originalMethod.apply(this, args);
|
|
172
|
-
} finally {
|
|
173
|
-
this.logger.debug("delete transaction context: {dbPreset}", { dbPreset });
|
|
174
|
-
DB.getTransactionContext().deleteTransaction(dbPreset);
|
|
175
|
-
}
|
|
168
|
+
return DB.runWithTransactionScope(dbPreset, trxWrapper, () => originalMethod.apply(this, args));
|
|
176
169
|
}, {
|
|
177
170
|
isolationLevel: isolation,
|
|
178
171
|
readOnly
|
|
179
172
|
});
|
|
180
173
|
};
|
|
181
|
-
|
|
182
|
-
if (
|
|
174
|
+
const existingTransaction = DB.transactionStorage.getStore()?.getTransaction(dbPreset);
|
|
175
|
+
if (existingTransaction) {
|
|
183
176
|
this.logger.debug("reuse transaction context: {dbPreset}", { dbPreset });
|
|
184
|
-
return originalMethod.apply(this, args);
|
|
177
|
+
return DB.runWithTransactionScope(dbPreset, existingTransaction, () => originalMethod.apply(this, args));
|
|
185
178
|
}
|
|
186
179
|
return startTransaction();
|
|
187
180
|
};
|
|
@@ -274,4 +267,4 @@ var init_decorators = __esmMin((() => {
|
|
|
274
267
|
init_decorators();
|
|
275
268
|
export { api, init_decorators, registeredApis, stream, transactional, upload, websocket };
|
|
276
269
|
|
|
277
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2RlY29yYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHR5cGUgRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbENvbmZpZyB9IGZyb20gXCIuLi9jYWNoZS1jb250cm9sL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXByZXNzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbXByZXNzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuLi9kYXRhYmFzZS9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4uL3N0b3JhZ2UvZHJpdmVyc1wiO1xuaW1wb3J0IHsgdHlwZSBLZXlHZW5lcmF0b3IgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBcGlQYXJhbSwgdHlwZSBBcGlQYXJhbVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUgfSBmcm9tIFwiLi4vdXRpbHMvY2xhc3MtbmFtZVwiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3VhcmRLZXlzIHtcbiAgcXVlcnk6IHRydWU7XG4gIGFkbWluOiB0cnVlO1xuICB1c2VyOiB0cnVlO1xufVxuZXhwb3J0IHR5cGUgR3VhcmRLZXkgPSBrZXlvZiBHdWFyZEtleXM7XG5leHBvcnQgdHlwZSBTZXJ2aWNlQ2xpZW50ID1cbiAgfCBcImF4aW9zXCJcbiAgfCBcImF4aW9zLW11bHRpcGFydFwiXG4gIHwgXCJ0YW5zdGFjay1xdWVyeVwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIlxuICB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogQVBJIOydkeuLteydmCBDYWNoZS1Db250cm9sIO2XpOuNlCDshKTsoJUuIOyEpOygle2VmOyngCDslYrsnLzrqbQgY2FjaGVDb250cm9sSGFuZGxlciDrmJDripQg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC4gKi9cbiAgY2FjaGVDb250cm9sPzogQ2FjaGVDb250cm9sQ29uZmlnO1xuICAvKiogQVBJIOydkeuLteydmCDslZXstpUg7ISk7KCVLiBmYWxzZeuhnCDshKTsoJXtlZjrqbQg7JWV7LaV7J2EIOu5hO2ZnOyEse2ZlO2VqeuLiOuLpC4gKi9cbiAgY29tcHJlc3M/OiBDb21wcmVzc0NvbmZpZztcbn07XG5leHBvcnQgdHlwZSBTdHJlYW1EZWNvcmF0b3JPcHRpb25zID0ge1xuICB0eXBlOiBcInNzZVwiO1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsnbTrsqTtirgg7YKk67OE66GcIOuEmOqyqOyjvOuKlCDqsJLsnbTrr4DroZwg7Ja065akIO2DgOyeheydtOuToCDsg4HqtIDsl4bsnYxcbiAgZXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSB7XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBvdXRFdmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBpbkV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGVhcnRiZWF0PzogbnVtYmVyO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zID0gV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyAmIHtcbiAgLy8gY29kZWdlbuydtCDtg4DsnoUg7J2066aE7J2EIOyerOyCrOyaqe2VoCDsiJgg7J6I64+E66GdIHN5bmNlcuqwgCBBU1Tsl5DshJwg67O06rCV7ZWY64qUIOuplO2DgOuNsOydtO2EsFxuICBvdXRFdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbiAgaW5FdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbn07XG5cbnR5cGUgQnVmZmVyVXBsb2FkT3B0aW9ucyA9IHtcbiAgY29uc3VtZT86IFwiYnVmZmVyXCI7XG59O1xudHlwZSBTdHJlYW1VcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lOiBcInN0cmVhbVwiO1xuICBkZXN0aW5hdGlvbjogRHJpdmVyS2V5O1xuICBrZXlHZW5lcmF0b3I/OiBLZXlHZW5lcmF0b3I7XG59O1xuZXhwb3J0IHR5cGUgVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxpbWl0cz86IEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9uc1tcImxpbWl0c1wiXTtcbn0gJiAoQnVmZmVyVXBsb2FkT3B0aW9ucyB8IFN0cmVhbVVwbG9hZE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgd2Vic29ja2V0T3B0aW9ucz86IFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbiAgV0VCU09DS0VUOiBTeW1ib2woXCJ3ZWJzb2NrZXRcIiksXG4gIFVQTE9BRDogU3ltYm9sKFwidXBsb2FkXCIpLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN5bWJvbCkge1xuICBjb25zdCBtZXRob2QgPSB0YXJnZXRbcHJvcGVydHlLZXkgYXMga2V5b2YgdHlwZW9mIHRhcmdldF0gYXMgeyBfX2RlY29yYXRvclR5cGU/OiBzeW1ib2wgfTtcbiAgaWYgKG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICYmIG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICE9PSBkZWNvcmF0b3JUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvclR5cGUuZGVzY3JpcHRpb24gPz8gU3RyaW5nKGRlY29yYXRvclR5cGUpfSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9LiBZb3UgY2FuIHVzZSBvbmx5IG9uZSBvZiBAYXBpLCBAc3RyZWFtLCBAd2Vic29ja2V0LCBvciBAdXBsb2FkIGRlY29yYXRvciBvbiB0aGUgc2FtZSBtZXRob2QuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZC5fX2RlY29yYXRvclR5cGUgPSBkZWNvcmF0b3JUeXBlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcGkob3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSB7XG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgY2xpZW50czogW1wiYXhpb3NcIl0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHN0cmVhbSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5TVFJFQU0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgLy8gc3RyZWFtIOyghOyaqSDtlYTrk5woZXZlbnRzLCB0eXBlKeuKlCBBcGlEZWNvcmF0b3JPcHRpb25z7JeQIOyGje2VmOyngCDslYrsnLzrr4DroZwg7KCc7Jm4XG4gICAgY29uc3QgeyBldmVudHM6IF8sIHR5cGU6IF90eXBlLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlTW9kZWxDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJzdHJlYW06IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vic29ja2V0KG9wdGlvbnM6IFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxOYW1lRnJvbUNsYXNzTmFtZSh0YXJnZXQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAd2Vic29ja2V0IGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuV0VCU09DS0VUKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IHsgb3V0RXZlbnRzOiBfb3V0RXZlbnRzLCBpbkV2ZW50czogX2luRXZlbnRzLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcIndlYnNvY2tldFwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICAgICAgICBcIndlYnNvY2tldFwiLFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICApO1xuICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgIH07XG5cbiAgICAgIGV4aXN0aW5nQXBpLndlYnNvY2tldE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgICB3ZWJzb2NrZXRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ3ZWJzb2NrZXQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsKG9wdGlvbnM6IFRyYW5zYWN0aW9uYWxPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBpc29sYXRpb24sIHJlYWRPbmx5LCBkYlByZXNldCA9IFwid1wiIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB0cmFuc2FjdGlvbmFsIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwidHJhbnNhY3Rpb25hbDoge21vZGVsfS57bWV0aG9kfVwiLCB7XG4gICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleGlzdGluZ0NvbnRleHQgPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKTtcblxuICAgICAgLy8gQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyXhuqxsOuCmCDtlbTri7kgcHJlc2V07J2YIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOI66GcIOyLnOyekVxuICAgICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHVyaSA9IHRoaXMuZ2V0UHVyaShkYlByZXNldCk7XG5cbiAgICAgICAgcmV0dXJuIHB1cmkua25leC50cmFuc2FjdGlvbihcbiAgICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5ldyB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICBjb25zdCB0cnhXcmFwcGVyID0gbmV3IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIodHJ4LCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcbiAgICAgICAgICAgIC8vIFRyYW5zYWN0aW9uQ29udGV4dOyXkCDtirjrnpzsnq3shZgg7KCA7J6lXG4gICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5zZXRUcmFuc2FjdGlvbihkYlByZXNldCwgdHJ4V3JhcHBlcik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIC8vIO2KuOuenOyereyFmCDsoJzqsbBcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJkZWxldGUgdHJhbnNhY3Rpb24gY29udGV4dDoge2RiUHJlc2V0fVwiLCB7IGRiUHJlc2V0IH0pO1xuICAgICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5kZWxldGVUcmFuc2FjdGlvbihkYlByZXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzb2xhdGlvbkxldmVsOiBpc29sYXRpb24sIHJlYWRPbmx5IH0sXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirjqsIAg7JeG7Jy866m0IOyDiOuhnCDsg53shLFcbiAgICAgIGlmICghZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBEQi5ydW5XaXRoVHJhbnNhY3Rpb24oc3RhcnRUcmFuc2FjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIOydtOuvuCBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirgg7JWI7JeQIOyeiOuKlOyngCDtmZXsnbgg7ZuEIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0Py5nZXRUcmFuc2FjdGlvbihkYlByZXNldCkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXVzZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgLy8g7Luo7YWN7Iqk7Yq464qUIOyeiOyngOunjCDsnbQgcHJlc2V07J2YIO2KuOuenOyereyFmOydgCDsl4bripQg6rK97JqwICjqsJnsnYAg7Luo7YWN7Iqk7Yq4IOuCtOyXkOyEnCDsi6TtlokpXG4gICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDtjIzsnbwg7JeF66Gc65OcIEFQSeulvCDsg53shLHtlbTspI3ri4jri6QuIChAYXBpIOuNsOy9lOugiOydtO2EsCDsl4bsnbQg64+F66a97KCB7Jy866GcIOyCrOyaqSlcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7IGNvbnN1bWU6IFwiYnVmZmVyXCIgfSkge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxOYW1lRnJvbUNsYXNzTmFtZSh0YXJnZXQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAdXBsb2FkIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLlVQTE9BRCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZSwgdHJ1ZSl9YDtcblxuICAgIC8vIHJlZ2lzdGVyZWRBcGlz7JeQ7IScIO2VtOuLuSBBUEkg7LC+7JWE7IScIHVwbG9hZE9wdGlvbnMg7LaU6rCAXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG5cbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOyerOuTseuhnSDsi5wg7JeF66Gc65OcIOyYteyFmOunjCDqsLHsi6BcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsg4jroZwg65Ox66GdXG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoOiBkZWZhdWx0UGF0aCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGNsaWVudHM6IFtcImF4aW9zLW11bHRpcGFydFwiLCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXSxcbiAgICAgICAgICBndWFyZHM6IG9wdGlvbnMuZ3VhcmRzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICB9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg96rCS7J20IOyeiOuNmCDsiqTtirjrp4HsnbQg64uk66W4IOqwkuydtCDsnojripQg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gKiBAcGFyYW0gZGVjb3JhdG9yTmFtZSDrjbDsvZTroIjsnbTthLAg7J2066aEXG4gKiBAcGFyYW0gbW9kZWxOYW1lIOuqqOuNuCDsnbTrpoRcbiAqIEBwYXJhbSBtZXRob2ROYW1lIOuplOyEnOuTnCDsnbTrpoRcbiAqIEBwYXJhbSBleGlzdGluZ1BhdGgg6riw7KG07J2YIHBhdGhcbiAqIEBwYXJhbSBuZXdQYXRoIOyDiOuhnOyatCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGV4aXN0aW5nUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4pIHtcbiAgaWYgKGV4aXN0aW5nUGF0aCAhPT0gXCJcIiAmJiBuZXdQYXRoICE9PSBcIlwiICYmIGV4aXN0aW5nUGF0aCAhPT0gbmV3UGF0aCkge1xuICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkucGF0aOqwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOqwgOuguSBAYXBpKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAvLyBAc3RyZWFtKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzL3N0cmVhbVwiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggcGF0aCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBwYXRoOiAke25ld1BhdGh9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcGF0aCgke2V4aXN0aW5nUGF0aH0pIHdpdGggdGhlIG5ldyBwYXRoKCR7bmV3UGF0aH0pLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdPcHRpb25zIOq4sOyhtOydmCDsmLXshZhcbiAqIEBwYXJhbSBuZXdPcHRpb25zIOyDiOuhnOyatCDsmLXshZhcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gIGRlY29yYXRvck5hbWU6IHN0cmluZyxcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSA87J2065+0IOuVjCDslYTri4jrqbQgYW55IOyWuOygnCDslIHri4jquYw+XG4gIG5ld09wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgT2JqZWN0LmtleXMobmV3T3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uc1trZXldICYmICFpc0VxdWFsKGV4aXN0aW5nT3B0aW9uc1trZXldLCBuZXdPcHRpb25zW2tleV0pKSB7XG4gICAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLm9wdGlvbnPqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOqwgOuguSBAYXBpKHsgcmVzb3VyY2VOYW1lOiBcIlVzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAgIC8vIEBzdHJlYW0oeyByZXNvdXJjZU5hbWU6IFwiUG9zdHNcIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggb3B0aW9ucyDsho0g6rCZ7J2AIO2VhOuTnOulvCDqsbTrk5zrpqzqsowg65CY66+A66GcLCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBvcHRpb25zOiAke2tleX0uIFRoZSBkZWNvcmF0b3IgaXMgdHJ5aW5nIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShleGlzdGluZ09wdGlvbnNba2V5XSl9KSB3aXRoIHRoZSBuZXcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkobmV3T3B0aW9uc1trZXldKX0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpSUEsU0FBUyxxQkFBcUIsUUFBeUIsYUFBcUIsZUFBdUI7Q0FDakcsTUFBTSxTQUFTLE9BQU87Q0FDdEIsSUFBSSxRQUFRLG1CQUFtQixRQUFRLG9CQUFvQixlQUN6RCxNQUFNLElBQUksTUFDUixJQUFJLGNBQWMsZUFBZSxPQUFPLGFBQWEsRUFBRSxzQ0FBc0MsT0FBTyxZQUFZLEtBQUssR0FBRyxZQUFZLDhGQUN0STtNQUVBLE9BQU8sa0JBQWtCO0FBRTdCO0FBRUEsU0FB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
|
|
270
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2RlY29yYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHR5cGUgRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbENvbmZpZyB9IGZyb20gXCIuLi9jYWNoZS1jb250cm9sL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXByZXNzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbXByZXNzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuLi9kYXRhYmFzZS9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4uL3N0b3JhZ2UvZHJpdmVyc1wiO1xuaW1wb3J0IHsgdHlwZSBLZXlHZW5lcmF0b3IgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBcGlQYXJhbSwgdHlwZSBBcGlQYXJhbVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUgfSBmcm9tIFwiLi4vdXRpbHMvY2xhc3MtbmFtZVwiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3VhcmRLZXlzIHtcbiAgcXVlcnk6IHRydWU7XG4gIGFkbWluOiB0cnVlO1xuICB1c2VyOiB0cnVlO1xufVxuZXhwb3J0IHR5cGUgR3VhcmRLZXkgPSBrZXlvZiBHdWFyZEtleXM7XG5leHBvcnQgdHlwZSBTZXJ2aWNlQ2xpZW50ID1cbiAgfCBcImF4aW9zXCJcbiAgfCBcImF4aW9zLW11bHRpcGFydFwiXG4gIHwgXCJ0YW5zdGFjay1xdWVyeVwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIlxuICB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogQVBJIOydkeuLteydmCBDYWNoZS1Db250cm9sIO2XpOuNlCDshKTsoJUuIOyEpOygle2VmOyngCDslYrsnLzrqbQgY2FjaGVDb250cm9sSGFuZGxlciDrmJDripQg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC4gKi9cbiAgY2FjaGVDb250cm9sPzogQ2FjaGVDb250cm9sQ29uZmlnO1xuICAvKiogQVBJIOydkeuLteydmCDslZXstpUg7ISk7KCVLiBmYWxzZeuhnCDshKTsoJXtlZjrqbQg7JWV7LaV7J2EIOu5hO2ZnOyEse2ZlO2VqeuLiOuLpC4gKi9cbiAgY29tcHJlc3M/OiBDb21wcmVzc0NvbmZpZztcbn07XG5leHBvcnQgdHlwZSBTdHJlYW1EZWNvcmF0b3JPcHRpb25zID0ge1xuICB0eXBlOiBcInNzZVwiO1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsnbTrsqTtirgg7YKk67OE66GcIOuEmOqyqOyjvOuKlCDqsJLsnbTrr4DroZwg7Ja065akIO2DgOyeheydtOuToCDsg4HqtIDsl4bsnYxcbiAgZXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSB7XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBvdXRFdmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBpbkV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGVhcnRiZWF0PzogbnVtYmVyO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zID0gV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyAmIHtcbiAgLy8gY29kZWdlbuydtCDtg4DsnoUg7J2066aE7J2EIOyerOyCrOyaqe2VoCDsiJgg7J6I64+E66GdIHN5bmNlcuqwgCBBU1Tsl5DshJwg67O06rCV7ZWY64qUIOuplO2DgOuNsOydtO2EsFxuICBvdXRFdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbiAgaW5FdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbn07XG5cbnR5cGUgQnVmZmVyVXBsb2FkT3B0aW9ucyA9IHtcbiAgY29uc3VtZT86IFwiYnVmZmVyXCI7XG59O1xudHlwZSBTdHJlYW1VcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lOiBcInN0cmVhbVwiO1xuICBkZXN0aW5hdGlvbjogRHJpdmVyS2V5O1xuICBrZXlHZW5lcmF0b3I/OiBLZXlHZW5lcmF0b3I7XG59O1xuZXhwb3J0IHR5cGUgVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxpbWl0cz86IEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9uc1tcImxpbWl0c1wiXTtcbn0gJiAoQnVmZmVyVXBsb2FkT3B0aW9ucyB8IFN0cmVhbVVwbG9hZE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgd2Vic29ja2V0T3B0aW9ucz86IFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbiAgV0VCU09DS0VUOiBTeW1ib2woXCJ3ZWJzb2NrZXRcIiksXG4gIFVQTE9BRDogU3ltYm9sKFwidXBsb2FkXCIpLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN5bWJvbCkge1xuICBjb25zdCBtZXRob2QgPSB0YXJnZXRbcHJvcGVydHlLZXkgYXMga2V5b2YgdHlwZW9mIHRhcmdldF0gYXMgeyBfX2RlY29yYXRvclR5cGU/OiBzeW1ib2wgfTtcbiAgaWYgKG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICYmIG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICE9PSBkZWNvcmF0b3JUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvclR5cGUuZGVzY3JpcHRpb24gPz8gU3RyaW5nKGRlY29yYXRvclR5cGUpfSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9LiBZb3UgY2FuIHVzZSBvbmx5IG9uZSBvZiBAYXBpLCBAc3RyZWFtLCBAd2Vic29ja2V0LCBvciBAdXBsb2FkIGRlY29yYXRvciBvbiB0aGUgc2FtZSBtZXRob2QuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZC5fX2RlY29yYXRvclR5cGUgPSBkZWNvcmF0b3JUeXBlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcGkob3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSB7XG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgY2xpZW50czogW1wiYXhpb3NcIl0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHN0cmVhbSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5TVFJFQU0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgLy8gc3RyZWFtIOyghOyaqSDtlYTrk5woZXZlbnRzLCB0eXBlKeuKlCBBcGlEZWNvcmF0b3JPcHRpb25z7JeQIOyGje2VmOyngCDslYrsnLzrr4DroZwg7KCc7Jm4XG4gICAgY29uc3QgeyBldmVudHM6IF8sIHR5cGU6IF90eXBlLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlTW9kZWxDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJzdHJlYW06IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Vic29ja2V0KG9wdGlvbnM6IFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxOYW1lRnJvbUNsYXNzTmFtZSh0YXJnZXQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAd2Vic29ja2V0IGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuV0VCU09DS0VUKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IHsgb3V0RXZlbnRzOiBfb3V0RXZlbnRzLCBpbkV2ZW50czogX2luRXZlbnRzLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcIndlYnNvY2tldFwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICAgICAgICBcIndlYnNvY2tldFwiLFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICApO1xuICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgIH07XG5cbiAgICAgIGV4aXN0aW5nQXBpLndlYnNvY2tldE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgICB3ZWJzb2NrZXRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ3ZWJzb2NrZXQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsKG9wdGlvbnM6IFRyYW5zYWN0aW9uYWxPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBpc29sYXRpb24sIHJlYWRPbmx5LCBkYlByZXNldCA9IFwid1wiIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB0cmFuc2FjdGlvbmFsIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwidHJhbnNhY3Rpb25hbDoge21vZGVsfS57bWV0aG9kfVwiLCB7XG4gICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyDtlbTri7kgcHJlc2V07J2YIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOIIO2KuOuenOyereyFmOqzvCBzY29wZeulvCDtlajqu5gg7Iuc7J6R7ZWc64ukLlxuICAgICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHVyaSA9IHRoaXMuZ2V0UHVyaShkYlByZXNldCk7XG5cbiAgICAgICAgcmV0dXJuIHB1cmkua25leC50cmFuc2FjdGlvbihcbiAgICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5ldyB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICBjb25zdCB0cnhXcmFwcGVyID0gbmV3IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIodHJ4LCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcblxuICAgICAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvblNjb3BlKGRiUHJlc2V0LCB0cnhXcmFwcGVyLCAoKSA9PlxuICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzb2xhdGlvbkxldmVsOiBpc29sYXRpb24sIHJlYWRPbmx5IH0sXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleGlzdGluZ1RyYW5zYWN0aW9uID0gREIudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCk/LmdldFRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgIGlmIChleGlzdGluZ1RyYW5zYWN0aW9uKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwicmV1c2UgdHJhbnNhY3Rpb24gY29udGV4dDoge2RiUHJlc2V0fVwiLCB7IGRiUHJlc2V0IH0pO1xuICAgICAgICAvLyDri6TrpbggcHJlc2V07J20IOyViOyqveyXkCDsnojslrTrj4Qg7J20IOuplOyEnOuTnOqwgCDsnqzsgqzsmqntlZwg7Yq4656c7J6t7IWY7J2EIO2YhOyerCBzY29wZeuhnCDtkZzsi5ztlZzri6QuXG4gICAgICAgIHJldHVybiBEQi5ydW5XaXRoVHJhbnNhY3Rpb25TY29wZShkYlByZXNldCwgZXhpc3RpbmdUcmFuc2FjdGlvbiwgKCkgPT5cbiAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbi8qKlxuICog7YyM7J28IOyXheuhnOuTnCBBUEnrpbwg7IOd7ISx7ZW07KSN64uI64ukLiAoQGFwaSDrjbDsvZTroIjsnbTthLAg7JeG7J20IOuPheumveyggeycvOuhnCDsgqzsmqkpXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZChvcHRpb25zOiBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0geyBjb25zdW1lOiBcImJ1ZmZlclwiIH0pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5VUExPQUQpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWUsIHRydWUpfWA7XG5cbiAgICAvLyByZWdpc3RlcmVkQXBpc+yXkOyEnCDtlbTri7kgQVBJIOywvuyVhOyEnCB1cGxvYWRPcHRpb25zIOy2lOqwgFxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDsnqzrk7HroZ0g7IucIOyXheuhnOuTnCDsmLXshZjrp4wg6rCx7IugXG4gICAgICBleGlzdGluZ0FwaS51cGxvYWRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7IOI66GcIOuTseuhnVxuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aDogZGVmYXVsdFBhdGgsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBjbGllbnRzOiBbXCJheGlvcy1tdWx0aXBhcnRcIiwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIl0sXG4gICAgICAgICAgZ3VhcmRzOiBvcHRpb25zLmd1YXJkcyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgdXBsb2FkT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ1cGxvYWQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIDzslYQg7Im96rKM7Im96rKMIOyigCDqsJHsi5zri6Q+XG4gIGV4aXN0aW5nT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gPOydtOuftCDrlYwg7JWE64uI66m0IGFueSDslrjsoJwg7JSB64uI6rmMPlxuICBuZXdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKSB7XG4gIE9iamVjdC5rZXlzKG5ld09wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChleGlzdGluZ09wdGlvbnNba2V5XSAmJiAhaXNFcXVhbChleGlzdGluZ09wdGlvbnNba2V5XSwgbmV3T3B0aW9uc1trZXldKSkge1xuICAgICAgLy8g7J206rKD7J20IOustOyKqCDsg4HtmansnbTrg5DrqbTsmpQsIGFwaS5vcHRpb25z6rCAIOuNruyWtOyUjOybjOyngOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDqsIDroLkgQGFwaSh7IHJlc291cmNlTmFtZTogXCJVc2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgICAvLyBAc3RyZWFtKHsgcmVzb3VyY2VOYW1lOiBcIlBvc3RzXCIgfSkg6rCZ7J2AIOqyg+ydtCDrtpnslrQg7J6I64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIG9wdGlvbnMg7IaNIOqwmeydgCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3Rpbmcgb3B0aW9uczogJHtrZXl9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkoZXhpc3RpbmdPcHRpb25zW2tleV0pfSkgd2l0aCB0aGUgbmV3IG9wdGlvbigke0pTT04uc3RyaW5naWZ5KG5ld09wdGlvbnNba2V5XSl9KS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBaUlBLFNBQVMscUJBQXFCLFFBQXlCLGFBQXFCLGVBQXVCO0NBQ2pHLE1BQU0sU0FBUyxPQUFPO0NBQ3RCLElBQUksUUFBUSxtQkFBbUIsUUFBUSxvQkFBb0IsZUFDekQsTUFBTSxJQUFJLE1BQ1IsSUFBSSxjQUFjLGVBQWUsT0FBTyxhQUFhLEVBQUUsc0NBQXNDLE9BQU8sWUFBWSxLQUFLLEdBQUcsWUFBWSw4RkFDdEk7TUFFQSxPQUFPLGtCQUFrQjtBQUU3QjtBQUVBLFNBQWdCLElBQUksVUFBK0IsQ0FBQyxHQUFHO0NBQ3JELFVBQVU7RUFDUixZQUFZO0VBQ1osYUFBYTtFQUNiLFNBQVMsQ0FBQyxPQUFPO0VBQ2pCLEdBQUc7Q0FDTDtDQUVBLFFBQVEsUUFBeUIsYUFBcUIsZUFBbUM7RUFDdkYsTUFBTSxZQUFZLDBCQUEwQixPQUFPLFlBQVksSUFBSTtFQUNuRSxPQUNFLFdBQ0EsOENBQThDLE9BQU8sWUFBWSxLQUFLLEdBQUcsYUFDM0U7RUFDQSxNQUFNLGFBQWE7RUFHbkIscUJBQXFCLFFBQVEsYUFBYSxnQkFBZ0IsR0FBRztFQUU3RCxNQUFNLGNBQWMsSUFBSSxXQUFXLFNBQ2pDLFVBQVUsUUFBUSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsVUFBVSxFQUFFLEdBQ3BELElBQ0YsRUFBRSxHQUFHLFdBQVcsU0FBUyxhQUFhLElBQUk7RUFDMUMsTUFBTSxPQUFPLFFBQVEsUUFBUTtFQUc3QixNQUFNLGNBQWMsZUFBZSxNQUNoQyxRQUFRLElBQUksY0FBYyxhQUFhLElBQUksZUFBZSxVQUM3RDtFQUNBLElBQUksYUFBYTtHQUVmLHdCQUF3QixPQUFPLFdBQVcsWUFBWSxZQUFZLE1BQU0sSUFBSTtHQUM1RSxZ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
|
|
@@ -26,6 +26,7 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
26
26
|
constructor(modelName?: string, subsetQueries?: TSubsetQueries | undefined, loaderQueries?: TLoaderQueries | undefined);
|
|
27
27
|
getDB(which: DBPreset): Knex;
|
|
28
28
|
getPuri(which: DBPreset): PuriWrapper;
|
|
29
|
+
private getSubsetQueryPuri;
|
|
29
30
|
destroy(): Promise<void>;
|
|
30
31
|
getInsertedIds(wdb: Knex, rows: UnknownDBRecord[], tableName: string, unqKeyFields: string[], chunkSize?: number): Promise<number[]>;
|
|
31
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C;;;;;;;GAOG;AACH,qBAAa,cAAc,CACzB,UAAU,SAAS,MAAM,GAAG,KAAK,EACjC,cAAc,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,EAClD,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,KAAK,EAC/D,cAAc,SAAS,iBAAiB,CAAC,UAAU,CAAC,GAAG,KAAK;aAK1C,SAAS,EAAE,MAAM;IACjC,SAAS,CAAC,aAAa,CAAC,EAAE,cAAc;IACxC,SAAS,CAAC,aAAa,CAAC,EAAE,cAAc;IAL1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGhB,SAAS,GAAE,MAA8B,EAC/C,aAAa,CAAC,EAAE,cAAc,YAAA,EAC9B,aAAa,CAAC,EAAE,cAAc,YAAA;IAK1C,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI5B,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW;
|
|
1
|
+
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,11 @@ var init_base_model = __esmMin((() => {
|
|
|
42
42
|
if (trx) return trx;
|
|
43
43
|
return new PuriWrapper(this.getDB(which), new UpsertBuilder());
|
|
44
44
|
}
|
|
45
|
+
getSubsetQueryPuri() {
|
|
46
|
+
const activeTransaction = DB.getTransactionContext().getActiveTransaction();
|
|
47
|
+
if (activeTransaction) return activeTransaction;
|
|
48
|
+
return new PuriWrapper(this.getDB("r"), new UpsertBuilder());
|
|
49
|
+
}
|
|
45
50
|
async destroy() {
|
|
46
51
|
return DB.destroy();
|
|
47
52
|
}
|
|
@@ -74,7 +79,7 @@ var init_base_model = __esmMin((() => {
|
|
|
74
79
|
*/
|
|
75
80
|
getSubsetQueries(subset) {
|
|
76
81
|
if (!this.subsetQueries) throw new Error("subsetQueries is not defined");
|
|
77
|
-
const puriWrapper =
|
|
82
|
+
const puriWrapper = this.getSubsetQueryPuri();
|
|
78
83
|
const qb = this.subsetQueries[subset]?.(puriWrapper);
|
|
79
84
|
return {
|
|
80
85
|
qb,
|
|
@@ -105,9 +110,10 @@ var init_base_model = __esmMin((() => {
|
|
|
105
110
|
this.applySonamuFilters(qb, normalizedFilter);
|
|
106
111
|
}
|
|
107
112
|
const { num, page } = queryParams;
|
|
113
|
+
const puriWrapper = new PuriWrapper(qb.knex, new UpsertBuilder());
|
|
108
114
|
const total = await this.executeCountQuery(qb, queryParams, debug, optimizeCountQuery);
|
|
109
115
|
if (queryParams?.queryMode === "count") return { total };
|
|
110
|
-
const computedRows = await this.executeListQuery(subset, qb, queryParams, num, page, debug);
|
|
116
|
+
const computedRows = await this.executeListQuery(subset, qb, queryParams, num, page, debug, puriWrapper);
|
|
111
117
|
const enhancer = params.enhancers?.[subset];
|
|
112
118
|
const enhancedRows = await Promise.all(computedRows.map((row) => enhancer?.(row) ?? row));
|
|
113
119
|
const internalFields = EntityManager.get(this.modelName).subsetsInternal[subset] ?? [];
|
|
@@ -247,7 +253,7 @@ var init_base_model = __esmMin((() => {
|
|
|
247
253
|
/**
|
|
248
254
|
* LIST 쿼리 실행 (내부 메서드)
|
|
249
255
|
*/
|
|
250
|
-
async executeListQuery(subset, qb, params, num, page, debug) {
|
|
256
|
+
async executeListQuery(subset, qb, params, num, page, debug, puriWrapper) {
|
|
251
257
|
if (params.queryMode === "count") return [];
|
|
252
258
|
let unloadedRows = await (() => {
|
|
253
259
|
if (num === 0) return qb;
|
|
@@ -255,19 +261,19 @@ var init_base_model = __esmMin((() => {
|
|
|
255
261
|
})();
|
|
256
262
|
if (debug) qb.debug();
|
|
257
263
|
const loaders = this.loaderQueries[subset];
|
|
258
|
-
if (loaders && Array.isArray(loaders)) unloadedRows = await this.processLoaders(unloadedRows, loaders, debug);
|
|
264
|
+
if (loaders && Array.isArray(loaders)) unloadedRows = await this.processLoaders(unloadedRows, loaders, debug, puriWrapper);
|
|
259
265
|
return this.hydrate(unloadedRows);
|
|
260
266
|
}
|
|
261
267
|
/**
|
|
262
268
|
* 재귀적 로더 처리
|
|
263
269
|
*/
|
|
264
|
-
async processLoaders(rows, loaders, debug) {
|
|
270
|
+
async processLoaders(rows, loaders, debug, puriWrapper) {
|
|
265
271
|
for (const resolveLoader of loaders) {
|
|
266
272
|
const { as, refId, qb: resolveLoaderQbFn, loaders: nestedLoaders } = resolveLoader;
|
|
267
|
-
const resolveLoaderQb = resolveLoaderQbFn(
|
|
273
|
+
const resolveLoaderQb = resolveLoaderQbFn(puriWrapper, rows.map((row) => row[refId]));
|
|
268
274
|
if (debug) resolveLoaderQb.debug();
|
|
269
275
|
let loadedRows = await resolveLoaderQb;
|
|
270
|
-
if (nestedLoaders && nestedLoaders.length > 0) loadedRows = await this.processLoaders(loadedRows, nestedLoaders, debug);
|
|
276
|
+
if (nestedLoaders && nestedLoaders.length > 0) loadedRows = await this.processLoaders(loadedRows, nestedLoaders, debug, puriWrapper);
|
|
271
277
|
const subRowGroups = group(loadedRows, (row) => row.refId);
|
|
272
278
|
rows = rows.map((row) => {
|
|
273
279
|
row[as] = (subRowGroups[row[refId]] ?? []).map((r) => omit(r, ["refId"]));
|
|
@@ -316,4 +322,4 @@ var init_base_model = __esmMin((() => {
|
|
|
316
322
|
init_base_model();
|
|
317
323
|
export { BaseModel, BaseModelClass, init_base_model };
|
|
318
324
|
|
|
319
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvYmFzZS1tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUHVyaeydmCDtg4DsnoXsnYAg6rCc67OEIOuqqOuNuOyXkOyEnCDtmZXsoJXrkJjrr4DroZwgQmFzZU1vZGVs7JeQ7ISc64qUIGFueeulvCDtl4jsmqntlaggKi9cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBjbHVzdGVyLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBGaWx0ZXJPcGVyYXRvciwgdHlwZSBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi4vZmlsdGVyL3V0aWxzXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIHR5cGUgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQgfSBmcm9tIFwiLi4vdXRpbHMvbW9kZWxcIjtcbmltcG9ydCB7IGdldEpvaW5UYWJsZXMsIGdldFRhYmxlTmFtZXNGcm9tV2hlcmUgfSBmcm9tIFwiLi4vdXRpbHMvc3FsLXBhcnNlclwiO1xuaW1wb3J0IHsgdHlwZSBFbmhhbmNlck1hcCwgdHlwZSBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJbmZlckFsbFN1YnNldHMsXG4gIHR5cGUgUHVyaUxvYWRlclF1ZXJpZXMsXG4gIHR5cGUgUHVyaVN1YnNldEZuLFxufSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuaW1wb3J0IHsgUHVyaVdyYXBwZXIgfSBmcm9tIFwiLi9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVW5pb25FeHRyYWN0ZWRUVGFibGVzIH0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2x1c3Rlcih1bnFLZXlzLCBjaHVua1NpemUpKSB7XG4gICAgICBjb25zdCBkYlJvd3MgPSBhd2FpdCB3ZGIodGFibGVOYW1lKVxuICAgICAgICAuc2VsZWN0KFwiaWRcIiwgd2RiLnJhdyhzZWxlY3RGaWVsZCkpXG4gICAgICAgIC53aGVyZUluKHdoZXJlSW5GaWVsZCBhcyBzdHJpbmcsIGl0ZW1zKTtcbiAgICAgIHJlc3VsdElkcyA9IHJlc3VsdElkcy5jb25jYXQoXG4gICAgICAgIGRiUm93cy5tYXAoKGRiUm93OiBVbmtub3duREJSZWNvcmQpID0+IHBhcnNlSW50KFN0cmluZyhkYlJvdy5pZCkpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiDtirnsoJUg7ISc67iM7IWL7JeQIOuMgO2VnCDsv7zrpqwg67mM642UIO2ajeuTnVxuICAgKlxuICAgKiBAcmV0dXJucyBxYiAtIOy/vOumrCDruYzrjZQgKOyhsOqxtCDstpTqsIDsmqkpXG4gICAqIEByZXR1cm5zIG9uU3Vic2V0IC0g7Yq57KCVIOyEnOu4jOyFiyDsoITsmqkg7YOA7J6F7J20IO2VhOyalO2VoCDrlYwg7IKs7JqpXG4gICAqL1xuICBnZXRTdWJzZXRRdWVyaWVzPFQgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFQpIHtcbiAgICBpZiAoIXRoaXMuc3Vic2V0UXVlcmllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3Vic2V0UXVlcmllcyBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwdXJpV3JhcHBlciA9IG5ldyBQdXJpV3JhcHBlcih0aGlzLmdldERCKFwiclwiKSwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gICAgY29uc3QgcWIgPSB0aGlzLnN1YnNldFF1ZXJpZXNbc3Vic2V0XT8uKHB1cmlXcmFwcGVyKTtcblxuICAgIC8vIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiDri6jsnbwg7YWM7J2067iUIOy7rOufvCDsoJHqt7wg67Cp7KeA7JqpIOuniOy7pFxuICAgIHR5cGUgUUJUYWJsZXMgPSBVbmlvbkV4dHJhY3RlZFRUYWJsZXM8VFN1YnNldEtleSwgVFN1YnNldFF1ZXJpZXM+ICYge1xuICAgICAgTm9uQWxsb3dlZEFzU2luZ2xlVGFibGU6IHsgX19mdWxsdGV4dF9fOiB0cnVlIH07XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBxYjogcWIgYXMgdW5rbm93biBhcyBQdXJpPERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBRQlRhYmxlcywge30+LFxuICAgICAgb25TdWJzZXQ6ICgoX3N1YnNldDogVFN1YnNldEtleSB8IHJlYWRvbmx5IFRTdWJzZXRLZXlbXSkgPT4gcWIpIGFzIHtcbiAgICAgICAgLy8g64uo7J28IO2CpFxuICAgICAgICA8UyBleHRlbmRzIFRTdWJzZXRLZXk+KHN1YnNldDogUyk6IFJldHVyblR5cGU8VFN1YnNldFF1ZXJpZXNbU10+O1xuICAgICAgICAvLyDtgqQg67Cw7Je0IC0+IOq1kOynke2VqSDrsJjtmZhcbiAgICAgICAgPEFyciBleHRlbmRzIHJlYWRvbmx5IFRTdWJzZXRLZXlbXT4oXG4gICAgICAgICAgc3Vic2V0czogWy4uLkFycl0sXG4gICAgICAgICk6IFJlc29sdmVTdWJzZXRJbnRlcnNlY3Rpb248QXJyLCBUU3Vic2V0UXVlcmllcz47XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXIg6rCd7LK0IOyDneyEsSDtl6ztjbxcbiAgICog7YOA7J6FIOqygOymnSDrsI8g7LaU66Gg7J2EIOuPhOyZgOykjFxuICAgKi9cbiAgY3JlYXRlRW5oYW5jZXJzPFQgZXh0ZW5kcyBUU3Vic2V0S2V5PihcbiAgICBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFxuICAgICAgVCxcbiAgICAgIEluZmVyQWxsU3Vic2V0czxUU3Vic2V0UXVlcmllcywgVExvYWRlclF1ZXJpZXM+LFxuICAgICAgVFN1YnNldE1hcHBpbmcsXG4gICAgICBUU3Vic2V0UXVlcmllc1xuICAgID4sXG4gICkge1xuICAgIHJldHVybiBlbmhhbmNlcnM7XG4gIH1cblxuICAvKipcbiAgICog7ISc67iM7IWLIOy/vOumrCDsi6TtlolcbiAgICpcbiAgICogMS4gU29uYW11IO2VhO2EsCDsoIHsmqkgKO2DgOyehSDrs4DtmZgg7Y+s7ZWoKVxuICAgKiAyLiDsv7zrpqwg7Iuk7ZaJIChwYWdpbmF0aW9uIOyggeyaqSlcbiAgICogMy4g66Gc642UIOyLpO2WiSAoMTpOLCBOOk0g6rSA6rOEIOuNsOydtO2EsCDroZzrlKkpXG4gICAqIDQuIEh5ZHJhdGUgKGZsYXQg4oaSIOykkeyyqSDqsJ3ssrQpXG4gICAqIDUuIEVuaGFuY2VyIOyggeyaqSAodmlydHVhbCDtlYTrk5wg6rOE7IKwKVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZVN1YnNldFF1ZXJ5PFxuICAgIFQgZXh0ZW5kcyBUU3Vic2V0S2V5LFxuICAgIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICBMUCBleHRlbmRzIHtcbiAgICAgIG51bT86IG51bWJlcjtcbiAgICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgICBxdWVyeU1vZGU/OiBTb25hbXVRdWVyeU1vZGU7XG4gICAgICBzb25hbXVGaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9LFxuICA+KFxuICAgIHBhcmFtczoge1xuICAgICAgc3Vic2V0OiBUO1xuICAgICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT47XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbnVtOiBudW1iZXI7XG4gICAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgICBzb25hbXVGaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIH07XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICBvcHRpbWl6ZUNvdW50UXVlcnk/OiBib29sZWFuO1xuICAgIH0gJiBFbmhhbmNlclBhcmFtPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4sXG4gICk6IFByb21pc2U8TGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgY29uc3QgeyBzdWJzZXQsIHFiLCBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBkZWJ1ZyA9IGZhbHNlLCBvcHRpbWl6ZUNvdW50UXVlcnkgPSBmYWxzZSB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlclF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImxvYWRlclF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgLy8gU29uYW11IEZpbHRlciDsoIHsmqlcbiAgICBpZiAocXVlcnlQYXJhbXMuc29uYW11RmlsdGVyKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsdGVyID0gbm9ybWFsaXplRmlsdGVyUXVlcnkocXVlcnlQYXJhbXMuc29uYW11RmlsdGVyKTtcbiAgICAgIHRoaXMuYXBwbHlTb25hbXVGaWx0ZXJzKHFiLCBub3JtYWxpemVkRmlsdGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG51bSwgcGFnZSB9ID0gcXVlcnlQYXJhbXM7XG5cbiAgICAvLyBDT1VOVCDsv7zrpqwg7Iuk7ZaJIChxdWVyeU1vZGU6IGxpc3Tsnbwg65WM64qUIDAg66as7YS0KVxuICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgdGhpcy5leGVjdXRlQ291bnRRdWVyeShxYiwgcXVlcnlQYXJhbXMsIGRlYnVnLCBvcHRpbWl6ZUNvdW50UXVlcnkpO1xuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zPy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIHsgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuXG4gICAgLy8gTElTVCDsv7zrpqwg7Iuk7ZaJXG4gICAgY29uc3QgY29tcHV0ZWRSb3dzID0gYXdhaXQgdGhpcy5leGVjdXRlTGlzdFF1ZXJ5KHN1YnNldCwgcWIsIHF1ZXJ5UGFyYW1zLCBudW0sIHBhZ2UsIGRlYnVnKTtcblxuICAgIC8vIEVuaGFuY2VyIOyggeyaqVxuICAgIGNvbnN0IGVuaGFuY2VyID0gKHBhcmFtcyBhcyBhbnkpLmVuaGFuY2Vycz8uW3N1YnNldF07XG4gICAgY29uc3QgZW5oYW5jZWRSb3dzID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29tcHV0ZWRSb3dzLm1hcCgocm93KSA9PiBlbmhhbmNlcj8uKHJvdykgPz8gcm93KSxcbiAgICApKSBhcyBUU3Vic2V0TWFwcGluZ1tUXVtdO1xuXG4gICAgLy8gSW50ZXJuYWwg7ZWE65OcIOygnOqxsFxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcbiAgICBjb25zdCBpbnRlcm5hbEZpZWxkcyA9IGVudGl0eS5zdWJzZXRzSW50ZXJuYWxbc3Vic2V0XSA/PyBbXTtcbiAgICBjb25zdCByb3dzID1cbiAgICAgIGludGVybmFsRmllbGRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBlbmhhbmNlZFJvd3MubWFwKChyb3cpID0+IHRoaXMub21pdEludGVybmFsRmllbGRzKHJvdywgaW50ZXJuYWxGaWVsZHMpKVxuICAgICAgICA6IGVuaGFuY2VkUm93cztcblxuICAgIGlmIChxdWVyeVBhcmFtcy5xdWVyeU1vZGUgPT09IFwibGlzdFwiKSB7XG4gICAgICAvLyDrpqzsiqTtirjrp4wg66as7YS0XG4gICAgICByZXR1cm4geyByb3dzIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDrkZjri6Qg66as7YS0XG4gICAgICByZXR1cm4geyByb3dzLCB0b3RhbCB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6rCd7LK07JeQ7IScIGludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICog7KSR7LKpIO2VhOuTnCjsmIg6IFwidXNlci5lbWFpbFwiKSDrsI8g67Cw7Je0KOyYiDogXCJlbXBsb3llZXMuc2FsYXJ5XCIp64+EIOyymOumrFxuICAgKi9cbiAgb21pdEludGVybmFsRmllbGRzPFQgZXh0ZW5kcyBvYmplY3Q+KHJvdzogVCwgZmllbGRzOiBzdHJpbmdbXSk6IFQge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNsb25lRGVlcChyb3cpO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKHJlc3VsdCwgZmllbGQuc3BsaXQoXCIuXCIpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJRdWVyeeulvCBQdXJpIFF1ZXJ5QnVpbGRlcuyXkCDsoIHsmqlcbiAgICpcbiAgICogQHBhcmFtIHFiIFB1cmkgUXVlcnlCdWlsZGVyIOyduOyKpO2EtOyKpFxuICAgKiBAcGFyYW0gZmlsdGVycyBGaWx0ZXJRdWVyeSDqsJ3ssrRcbiAgICovXG4gIHByb3RlY3RlZCBhcHBseVNvbmFtdUZpbHRlcnM8VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBmaWx0ZXJzPzogRmlsdGVyUXVlcnk8VEVudGl0eT4sXG4gICk6IHZvaWQge1xuICAgIGlmICghZmlsdGVycykgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQodGhpcy5tb2RlbE5hbWUpO1xuXG4gICAgLy8gMS4g7ZWE7YSwIOqygOymnSAoRW50aXR5IOq4sOuwmClcbiAgICB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMoZmlsdGVycywgZW50aXR5KTtcblxuICAgIC8vIDIuIOqygOymneuQnCDtlYTthLAg7KCB7JqpXG4gICAgY29uc3QgcHVyaSA9IHFiIGFzIGFueTtcblxuICAgIGZvciAoY29uc3QgW2ZpZWxkLCBjb25kaXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpKSB7XG4gICAgICBpZiAoY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHwgY29uZGl0aW9uID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgLy8g7YWM7J2067iU66qFLu2VhOuTnOuqhSDtmJXsi53snLzroZwg67OA7ZmYXG4gICAgICBjb25zdCBmdWxsRmllbGQgPSBlbnRpdHkuZ2V0RnVsbEZpZWxkTmFtZShmaWVsZCk7XG5cbiAgICAgIC8vIOyngeygkSDqsJIgKGVx7JmAIOuPmeydvClcbiAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICBwdXJpLndoZXJlKGZ1bGxGaWVsZCwgY29uZGl0aW9uKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIOyXsOyCsOyekCDqsJ3ssrRcbiAgICAgIGZvciAoY29uc3QgW29wZXJhdG9yLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZGl0aW9uKSkge1xuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0b3IocWIsIGZ1bGxGaWVsZCwgb3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog64uo7J28IOyXsOyCsOyekOulvCBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3BlcmF0b3IoXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IsXG4gICAgdmFsdWU6IHVua25vd24sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlIFwiZXFcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIm5lXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPlwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZ3RlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPj1cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0XCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibHRlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPD1cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImluXCI6XG4gICAgICAgIHB1cmkud2hlcmVJbihmaWVsZCwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIm5vdEluXCI6XG4gICAgICAgIHB1cmkud2hlcmVOb3RJbihmaWVsZCwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJSR7dmFsdWV9JWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInN0YXJ0c1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJlbmRzV2l0aFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImlzTnVsbFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBudWxsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc05vdE51bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCIhPVwiLCBudWxsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZWZvcmVcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI8XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJhZnRlclwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJldHdlZW5cIjoge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHZhbHVlO1xuICAgICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPj1cIiwgbWluKS53aGVyZShmaWVsZCwgXCI8PVwiLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIG9wZXJhdG9yOiAke29wZXJhdG9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDspJHssqkg7ZWE65OcIOyCreygnCAo67Cw7Je0IOuCtCDqsJ3ssrTrj4Qg7LKY66asKVxuICAgKi9cbiAgZGVsZXRlRmllbGQob2JqOiBhbnksIHBhcnRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtW3BhcnRzWzBdXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIG9ialtwYXJ0c1swXV07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IHBhcnRzO1xuICAgIGNvbnN0IG5leHQgPSBvYmpbZmlyc3RdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgIG5leHQubWFwKChpdGVtKSA9PiB0aGlzLmRlbGV0ZUZpZWxkKGl0ZW0sIHJlc3QpKTtcbiAgICB9IGVsc2UgaWYgKG5leHQgJiYgdHlwZW9mIG5leHQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuZGVsZXRlRmllbGQobmV4dCwgcmVzdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENPVU5UIOy/vOumrCDsi6TtlokgKOuCtOu2gCDrqZTshJzrk5wpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVDb3VudFF1ZXJ5KFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgZGVidWc6IGJvb2xlYW4sXG4gICAgb3B0aW1pemVDb3VudFF1ZXJ5OiBib29sZWFuLFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChwYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnRQdXJpID0gcWIuY2xvbmUoKS5jbGVhcihcIm9yZGVyXCIpLmNsZWFyKFwibGltaXRcIikuY2xlYXIoXCJvZmZzZXRcIik7XG5cbiAgICBpZiAob3B0aW1pemVDb3VudFF1ZXJ5KSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHQ6IFNxbFBhcnNlciB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZS1zcWwtcGFyc2VyXCIpO1xuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFNxbFBhcnNlci5QYXJzZXIoKTtcbiAgICAgIGNvbnN0IHBhcnNlZFF1ZXJ5ID0gcGFyc2VyLmFzdGlmeShjb3VudFB1cmkudG9RdWVyeSgpLCB7XG4gICAgICAgIGRhdGFiYXNlOiBTb25hbXUuY29uZmlnLmRhdGFiYXNlLmRhdGFiYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxlZnRKb2luVGFibGVzID0gZ2V0Sm9pblRhYmxlcyhwYXJzZWRRdWVyeSwgW1wiTEVGVCBKT0lOXCJdKTtcbiAgICAgIGNvbnN0IHdoZXJlVGFibGVzID0gZ2V0VGFibGVOYW1lc0Zyb21XaGVyZShwYXJzZWRRdWVyeSk7XG5cbiAgICAgIGNvbnN0IHRhYmxlc1RvUmVtb3ZlID0gbGVmdEpvaW5UYWJsZXMuZmlsdGVyKChqKSA9PiAhd2hlcmVUYWJsZXMuaW5jbHVkZXMoaikpO1xuICAgICAgdGFibGVzVG9SZW1vdmUuZm9yRWFjaCgodGFibGUpID0+IHtcbiAgICAgICAgY291bnRQdXJpLmNsZWFySm9pbih0YWJsZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDT1VOVCgqKeuhnCDsoITssrQg66CI7L2U65OcIOyImOulvCDqs4TsgrBcbiAgICAvLyBUT0RPOiBxYuydmCBESVNUSU5DVOqwgCDsnojripQg6rK97JqwIOyymOumrO2VtOyVvCDtlahcbiAgICBjb25zdCBjb3VudFJlc3VsdDogeyB0b3RhbD86IG51bWJlciB9ID0gYXdhaXQgY291bnRQdXJpXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC5zZWxlY3QoeyB0b3RhbDogUHVyaS5yYXdOdW1iZXIoYENPVU5UKCopOjppbnRlZ2VyYCkgfSlcbiAgICAgIC5maXJzdCgpO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICBjb3VudFB1cmkuZGVidWcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRSZXN1bHQ/LnRvdGFsID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogTElTVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTGlzdFF1ZXJ5PFQgZXh0ZW5kcyBUU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgcGFyYW1zOiB7IHF1ZXJ5TW9kZT86IFwibGlzdFwiIHwgXCJjb3VudFwiIHwgXCJib3RoXCIgfSxcbiAgICBudW06IG51bWJlcixcbiAgICBwYWdlOiBudW1iZXIsXG4gICAgZGVidWc6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJjb3VudFwiKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXRlZFFiID0gKCgpID0+IHtcbiAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHFiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHFiLmxpbWl0KG51bSkub2Zmc2V0KG51bSAqIChwYWdlIC0gMSkpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgbGV0IHVubG9hZGVkUm93cyA9IGF3YWl0IGxpbWl0ZWRRYjtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPiB9XG4gIDogeyBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfTtcblxudHlwZSBSZXF1aXJlZEVuaGFuY2VyS2V5czxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IHtcbiAgW0sgaW4gVFN1YnNldEtleV06IFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IG5ldmVyIDogSztcbn1bVFN1YnNldEtleV07XG5cbmV4cG9ydCBjb25zdCBCYXNlTW9kZWwgPSBuZXcgQmFzZU1vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OzthQU1zQztxQkFDa0I7WUFFcUI7ZUFDakI7aUJBR2U7U0FHbEQ7V0FDSTttQkFNZTtxQkFFSTtDQVluQyxpQkFBYixNQUtFO0VBSWtCO0VBQ047RUFDQTtFQUxaO0VBRUEsWUFDRSxZQUFvQyxLQUFLLFlBQVksTUFDckQsZUFDQSxlQUNBO0dBSGdCLEtBQUEsWUFBQTtHQUNOLEtBQUEsZ0JBQUE7R0FDQSxLQUFBLGdCQUFBO0dBRVYsS0FBSyxTQUFTLFVBQVUsd0JBQXdCLEtBQUssV0FBVyxPQUFPLENBQUM7RUFDMUU7RUFFQSxNQUFNLE9BQXVCO0dBQzNCLE9BQU8sR0FBRyxNQUFNLEtBQUs7RUFDdkI7RUFFQSxRQUFRLE9BQThCO0dBRXBDLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsZUFBZSxLQUFLO0dBQzNELElBQUksS0FDRixPQUFPO0dBS1QsT0FBTyxJQUFJLFlBREEsS0FBSyxNQUFNLEtBQ0MsR0FBSSxJQUFJLGNBQWMsQ0FBQztFQUNoRDtFQUVBLE1BQU0sVUFBVTtHQUNkLE9BQU8sR0FBRyxRQUFRO0VBQ3BCO0VBRUEsTUFBTSxlQUNKLEtBQ0EsTUFDQSxXQUNBLGNBQ0EsWUFBb0IsS0FDcEI7R0FDQSxJQUFJLENBQUMsS0FDSCxNQUFNLEtBQUssTUFBTSxHQUFHO0dBR3RCLElBQUk7R0FDSixJQUFJO0dBQ0osSUFBSTtHQUVKLElBQUksYUFBYSxTQUFTLEdBQUc7SUFDM0IsZUFBZSxJQUFJLElBQUksbUJBQW1CLGFBQWEsS0FB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
|
|
325
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tb2RlbC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvYmFzZS1tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUHVyaeydmCDtg4DsnoXsnYAg6rCc67OEIOuqqOuNuOyXkOyEnCDtmZXsoJXrkJjrr4DroZwgQmFzZU1vZGVs7JeQ7ISc64qUIGFueeulvCDtl4jsmqntlaggKi9cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBjbHVzdGVyLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBGaWx0ZXJPcGVyYXRvciwgdHlwZSBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi4vZmlsdGVyL3V0aWxzXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIHR5cGUgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQgfSBmcm9tIFwiLi4vdXRpbHMvbW9kZWxcIjtcbmltcG9ydCB7IGdldEpvaW5UYWJsZXMsIGdldFRhYmxlTmFtZXNGcm9tV2hlcmUgfSBmcm9tIFwiLi4vdXRpbHMvc3FsLXBhcnNlclwiO1xuaW1wb3J0IHsgdHlwZSBFbmhhbmNlck1hcCwgdHlwZSBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJbmZlckFsbFN1YnNldHMsXG4gIHR5cGUgUHVyaUxvYWRlclF1ZXJpZXMsXG4gIHR5cGUgUHVyaVN1YnNldEZuLFxufSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuaW1wb3J0IHsgUHVyaVdyYXBwZXIgfSBmcm9tIFwiLi9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVW5pb25FeHRyYWN0ZWRUVGFibGVzIH0gZnJvbSBcIi4vcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJzZXRRdWVyeVB1cmkoKTogUHVyaVdyYXBwZXIge1xuICAgIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gREIuZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCkuZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcbiAgICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBhY3RpdmVUcmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFB1cmlXcmFwcGVyKHRoaXMuZ2V0REIoXCJyXCIpLCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgcmV0dXJuIERCLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGFzeW5jIGdldEluc2VydGVkSWRzKFxuICAgIHdkYjogS25leCxcbiAgICByb3dzOiBVbmtub3duREJSZWNvcmRbXSxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICB1bnFLZXlGaWVsZHM6IHN0cmluZ1tdLFxuICAgIGNodW5rU2l6ZTogbnVtYmVyID0gNTAwLFxuICApIHtcbiAgICBpZiAoIXdkYikge1xuICAgICAgd2RiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgfVxuXG4gICAgbGV0IHVucUtleXM6IHN0cmluZ1tdO1xuICAgIGxldCB3aGVyZUluRmllbGQ6IHN0cmluZyB8IEtuZXguUmF3O1xuICAgIGxldCBzZWxlY3RGaWVsZDogc3RyaW5nO1xuXG4gICAgaWYgKHVucUtleUZpZWxkcy5sZW5ndGggPiAxKSB7XG4gICAgICB3aGVyZUluRmllbGQgPSB3ZGIucmF3KGBDT05DQVRfV1MoJ18nLCAnJHt1bnFLZXlGaWVsZHMuam9pbihcIixcIil9JylgKTtcbiAgICAgIHNlbGVjdEZpZWxkID0gYCR7d2hlcmVJbkZpZWxkfSBhcyB0bXBVaWRgO1xuICAgICAgdW5xS2V5cyA9IHJvd3MubWFwKChyb3cpID0+IHVucUtleUZpZWxkcy5tYXAoKGZpZWxkKSA9PiByb3dbZmllbGRdKS5qb2luKFwiX1wiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHVucUtleUZpZWxkc1swXTtcbiAgICAgIHNlbGVjdEZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgdW5xS2V5cyA9IHJvd3MubWFwKChyb3cpID0+IHJvd1t1bnFLZXlGaWVsZHNbMF1dIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdElkczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW1zIG9mIGNsdXN0ZXIodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSB0aGlzLmdldFN1YnNldFF1ZXJ5UHVyaSgpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuICAgIC8vIOuqqOuToCDroZzrjZTqsIAgcm9vdCBxdWVyeeyZgCDqsJnsnYAg7Jew6rKw7J2EIOyCrOyaqe2VmOuPhOuhnSDsi6Ttlokg7Iuc7KCQ7J2YIGtuZXjsl5DshJwg7ZWcIOuyiOunjCDtjIzsg53tlZzri6QuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIocWIua25leCwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG5cbiAgICAvLyBDT1VOVCDsv7zrpqwg7Iuk7ZaJIChxdWVyeU1vZGU6IGxpc3Tsnbwg65WM64qUIDAg66as7YS0KVxuICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgdGhpcy5leGVjdXRlQ291bnRRdWVyeShxYiwgcXVlcnlQYXJhbXMsIGRlYnVnLCBvcHRpbWl6ZUNvdW50UXVlcnkpO1xuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zPy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIHsgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuXG4gICAgLy8gTElTVCDsv7zrpqwg7Iuk7ZaJXG4gICAgY29uc3QgY29tcHV0ZWRSb3dzID0gYXdhaXQgdGhpcy5leGVjdXRlTGlzdFF1ZXJ5KFxuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIG51bSxcbiAgICAgIHBhZ2UsXG4gICAgICBkZWJ1ZyxcbiAgICAgIHB1cmlXcmFwcGVyLFxuICAgICk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIHB1cmlXcmFwcGVyOiBQdXJpV3JhcHBlcixcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmIChwYXJhbXMucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdGVkUWIgPSAoKCkgPT4ge1xuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcWI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcWIubGltaXQobnVtKS5vZmZzZXQobnVtICogKHBhZ2UgLSAxKSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBsZXQgdW5sb2FkZWRSb3dzID0gYXdhaXQgbGltaXRlZFFiO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICBxYi5kZWJ1ZygpO1xuICAgIH1cblxuICAgIC8vIOuhnOuNlCDsspjrpqxcbiAgICBjb25zdCBsb2FkZXJzID0gKHRoaXMubG9hZGVyUXVlcmllcyBhcyBhbnkpW3N1YnNldF07XG4gICAgaWYgKGxvYWRlcnMgJiYgQXJyYXkuaXNBcnJheShsb2FkZXJzKSkge1xuICAgICAgdW5sb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyh1bmxvYWRlZFJvd3MsIGxvYWRlcnMsIGRlYnVnLCBwdXJpV3JhcHBlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKFxuICAgIHJvd3M6IGFueVtdLFxuICAgIGxvYWRlcnM6IGFueVtdLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIHB1cmlXcmFwcGVyOiBQdXJpV3JhcHBlcixcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGZvciAoY29uc3QgcmVzb2x2ZUxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICBjb25zdCB7IGFzLCByZWZJZCwgcWI6IHJlc29sdmVMb2FkZXJRYkZuLCBsb2FkZXJzOiBuZXN0ZWRMb2FkZXJzIH0gPSByZXNvbHZlTG9hZGVyO1xuXG4gICAgICBjb25zdCByZXNvbHZlTG9hZGVyUWIgPSByZXNvbHZlTG9hZGVyUWJGbihcbiAgICAgICAgcHVyaVdyYXBwZXIsXG4gICAgICAgIHJvd3MubWFwKChyb3cpID0+IHJvd1tyZWZJZF0pLFxuICAgICAgKTtcblxuICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIHJlc29sdmVMb2FkZXJRYi5kZWJ1ZygpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbG9hZGVkUm93cyA9IChhd2FpdCByZXNvbHZlTG9hZGVyUWIpIGFzIGFueVtdO1xuXG4gICAgICAvLyDspJHssqkgbG9hZGVyc+qwgCDsnojsnLzrqbQg7J6s6reAIOyymOumrFxuICAgICAgaWYgKG5lc3RlZExvYWRlcnMgJiYgbmVzdGVkTG9hZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvYWRlZFJvd3MgPSBhd2FpdCB0aGlzLnByb2Nlc3NMb2FkZXJzKGxvYWRlZFJvd3MsIG5lc3RlZExvYWRlcnMsIGRlYnVnLCBwdXJpV3JhcHBlcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPiB9XG4gIDogeyBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfTtcblxudHlwZSBSZXF1aXJlZEVuaGFuY2VyS2V5czxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IHtcbiAgW0sgaW4gVFN1YnNldEtleV06IFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IG5ldmVyIDogSztcbn1bVFN1YnNldEtleV07XG5cbmV4cG9ydCBjb25zdCBCYXNlTW9kZWwgPSBuZXcgQmFzZU1vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OzthQU1zQztxQkFDa0I7WUFFcUI7ZUFDakI7aUJBR2U7U0FHbEQ7V0FDSTttQkFNZTtxQkFFSTtDQVluQyxpQkFBYixNQUtFO0VBSWtCO0VBQ047RUFDQTtFQUxaO0VBRUEsWUFDRSxZQUFvQyxLQUFLLFlBQVksTUFDckQsZUFDQSxlQUNBO0dBSGdCLEtBQUEsWUFBQTtHQUNOLEtBQUEsZ0JBQUE7R0FDQSxLQUFBLGdCQUFBO0dBRVYsS0FBSyxTQUFTLFVBQVUsd0JBQXdCLEtBQUssV0FBVyxPQUFPLENBQUM7RUFDMUU7RUFFQSxNQUFNLE9BQXVCO0dBQzNCLE9BQU8sR0FBRyxNQUFNLEtBQUs7RUFDdkI7RUFFQSxRQUFRLE9BQThCO0dBRXBDLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsZUFBZSxLQUFLO0dBQzNELElBQUksS0FDRixPQUFPO0dBS1QsT0FBTyxJQUFJLFlBREEsS0FBSyxNQUFNLEtBQ0MsR0FBSSxJQUFJLGNBQWMsQ0FBQztFQUNoRDtFQUVBLHFCQUEwQztHQUN4QyxNQUFNLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDLENBQUMscUJBQXFCO0dBQzFFLElBQUksbUJBQ0YsT0FBTztHQUdULE9BQU8sSUFBSSxZQUFZLEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxjQUFjLENBQUM7RUFDN0Q7RUFFQSxNQUFNLFVBQVU7R0FDZCxPQUFPLEdBQUcsUUFBUTtFQUNwQjtFQUVBLE1BQU0sZUFDSixLQUNBLE1BQ0EsV0FDQSxjQUNBLFlBQW9CLEtBQ3BCO0dBQ0EsSUFBSSxDQUFDLEtBQ0gsTUFBTSxLQUFLLE1BQU0sR0FBRztHQUd0QixJQUFJO0dBQ0osSUFBSTtHQUNKLElBQUk7R0FFSixJQUFJLGFBQWEsU0FBUyxHQUFHO0lBQzNCLGVBQWUsSUFBSSxJQUFJLG1CQUFtQixhQUFhLEtBQUssR0FBRyxFQUFFLEdBQUc7SUFDcEUsY0FBYyxHQUFHLGFBQWE7SUFDOUIsVUFBVSxLQUFLLEtBQUssUUFBUSxhQUFhLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0dBQy9FLE9BQU87SUFDTCxlQUFlLGFBQWE7SUFDNUIsY0FBYyxhQUFhO0lBQzNCLFVBQVUsS0FBSyxLQUFLLFFBQVEsSUFBSSxhQUFhLEdBQWE7R0FDNUQ7R0FFQSxJQUFJLFlBQXNCLENBQUM7R0FDM0IsS0FBSyxNQUFNLFNBQVMsUUFBUSxTQUFTLFNBQVMsR0FBRztJQUMvQyxNQUFNLFNBQVMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUNoQyxPQUFPLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQ2xDLFFBQVEsY0FBd0IsS0FBSztJQUN4QyxZQUFZLFVBQVUsT0FDcEIsT0FBTyxLQUFLLFVBQTJCLFNBQVMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQ25FO0dBQ0Y7R0FFQSxPQUFPO0VBQ1Q7Ozs7Ozs7RUFRQSxpQkFBdUMsUUFBVztHQUNoRCxJQUFJLENBQUMsS0FBSyxlQUNSLE1BQU0sSUFBSSxNQUFNLDhCQUE4QjtHQUdoRCxNQUFNLGNBQWMsS0FBSyxtQkFBbUI7R0FDNUMsTUFBTSxLQUFLLEtBQUssY0FBYyxPQUFPLEdBQUcsV0FBVztHQU9uRCxPQUFPO0lBQ0Q7SUFDSixZQUFZLFlBQWdEO0dBUTlEO0VBQ0Y7Ozs7O0VBTUEsZ0JBQ0UsV0FNQTtHQUNBLE9BQU87RUFDVDs7Ozs7Ozs7OztFQVdBLE1BQU0sbUJBVUosUUFZNEM7R0FDNUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxRQUFRLGFBQWEsUUFBUSxPQUFPLHFCQUFxQixVQUFVO0dBRXZGLElBQUksQ0FBQyxLQUFLLGVBQ1IsTUFBTSxJQUFJLE1BQU0sOEJBQThCO0dBSWhELElBQUksWUFBWSxjQUFjO0lBQzVCLE1BQU0sbUJBQW1CLHFCQUFxQixZQUFZLFlBQVk7SUFDdEUsS0FBSyxtQkFBbUIsSUFBSSxnQkFBZ0I7R0FDOUM7R0FFQSxNQUFNLEVBQUUsS0FBSyxTQUFTO0dBRXRCLE1BQU0sY0FBYyxJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksY0FBYyxDQUFDO0dBR2hFLE1BQU0sUUFBUSxNQUFNLEtBQUssa0JBQWtCLElBQUksYUFBYSxPQUFPLGtCQUFrQjtHQUVyRixJQUFJLGFBQWEsY0FBYyxTQUM3QixPQUFPLEVBQUUsTUFBTTtHQUlqQixNQUFNLGVBQWUsTUFBTSxLQUFLLGlCQUM5QixRQUNBLElBQ0EsYUFDQSxLQUNBLE1BQ0EsT0FDQSxXQUNGO0dBR0EsTUFBTSxXQUFZLE9BQWUsWUFBWTtHQUM3QyxNQUFNLGVBQWdCLE1BQU0sUUFBUSxJQUNsQyxhQUFhLEtBQUssUUFBUSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQ2xEO0dBSUEsTUFBTSxpQkFEUyxjQUFjLElBQUksS0FBSyxTQUNmLENBQUEsQ0FBTyxnQkFBZ0IsV0FBVyxDQUFDO0dBQzFELE1BQU0sT0FDSixlQUFlLFNBQVMsSUFDcEIsYUFBYSxLQUFLLFFBQVEsS0FBSyxtQkFBbUIsS0FBSyxjQUFjLENBQUMsSUFDdEU7R0FFTixJQUFJLFlBQVksY0FBYyxRQUU1QixPQUFPLEVBQUUsS0FBSztRQUdkLE9BQU87SUFBRTtJQUFNO0dBQU07RUFFekI7Ozs7O0VBTUEsbUJBQXFDLEtBQVEsUUFBcUI7R0FDaEUsTUFBTSxTQUFTLFVBQVUsR0FBRztHQUM1QixLQUFLLE1BQU0sU0FBUyxRQUNsQixLQUFLLFlBQVksUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDO0dBRTNDLE9BQU87RUFDVDs7Ozs7OztFQVFBLG1CQUNFLElBQ0EsU0FDTTtHQUNOLElBQUksQ0FBQyxTQUFTO0dBRWQsTUFBTSxTQUFTLGNBQWMsSUFBSSxLQUFLLFNBQVM7R0FHL0Msc0JBQXNCLFNBQVMsTUFBTTtHQUdyQyxNQUFNLE9BQU87R0FFYixLQUFLLE1BQU0sQ0FBQyxPQUFPLGNBQWMsT0FBTyxRQUFRLE9BQU8sR0FBRztJQUN4RCxJQUFJLGNBQWMsVUFBYSxjQUFjLE1BQU07SUFHbkQsTUFBTSxZQUFZLE9BQU8saUJBQWlCLEtBQUs7SUFHL0MsSUFBSSxPQUFPLGNBQWMsWUFBWSxNQUFNLFFBQVEsU0FBUyxHQUFHO0tBQzdELEtBQUssTUFBTSxXQUFXLFNBQVM7S0FDL0I7SUFDRjtJQUdBLEtBQUssTUFBTSxDQUFDLFVBQVUsVUFBVSxPQUFPLFFBQVEsU0FBUyxHQUN0RCxLQUFLLGNBQWMsSUFBSSxXQUFXLFVBQTRCLEtBQUs7R0FFdkU7RUFDRjs7OztFQUtBLGNBQ0UsSUFDQSxPQUNBLFVBQ0EsT0FDTTtHQUNOLE1BQU0sT0FBTztHQUViLFFBQVEsVUFBUjtJQUNFLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxLQUFLO0tBQ3ZCO0lBRUYsS0FBSztLQUNILEtBQUssTUFBTSxPQUFPLE1BQU0sS0FBSztLQUM3QjtJQUVGLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUs7S0FDNUI7SUFFRixLQUFLO0tBQ0gsS0FBSyxNQUFNLE9BQU8sTUFBTSxLQUFLO0tBQzdCO0lBRUYsS0FBSztLQUNILEtBQUssTUFBTSxPQUFPLEtBQUssS0FBSztLQUM1QjtJQUVGLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxNQUFNLEtBQUs7S0FDN0I7SUFFRixLQUFLO0tBQ0gsS0FBSyxRQUFRLE9BQU8sS0FBSztLQUN6QjtJQUVGLEtBQUs7S0FDSCxLQUFLLFdBQVcsT0FBTyxLQUFLO0tBQzVCO0lBRUYsS0FBSztLQUNILEtBQUssTUFBTSxPQUFPLFFBQVEsSUFBSSxNQUFNLEVBQUU7S0FDdEM7SUFFRixLQUFLO0tBQ0gsS0FBSyxNQUFNLE9BQU8sUUFBUSxHQUFHLE1BQU0sRUFBRTtLQUNyQztJQUVGLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxRQUFRLElBQUksT0FBTztLQUNyQztJQUVGLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxJQUFJO0tBQ3RCO0lBRUYsS0FBSztLQUNILEtBQUssTUFBTSxPQUFPLE1BQU0sSUFBSTtLQUM1QjtJQUVGLEtBQUs7S0FDSCxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUs7S0FDNUI7SUFFRixLQUFLO0tBQ0gsS0FBSyxNQUFNLE9BQU8sS0FBSyxLQUFLO0tBQzVCO0lBRUYsS0FBSztLQUNILElBQUksTUFBTSxRQUFRLEtBQUssS0FBSyxNQUFNLFdBQVcsR0FBRztNQUM5QyxNQUFNLENBQUMsS0FBSyxPQUFPO01BQ25CLEtBQUssTUFBTSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxPQUFPLE1BQU0sR0FBRztLQUNyRDtLQUNBO0lBR0YsU0FDRSxRQUFRLEtBQUsseUJBQXlCLFVBQVU7R0FDcEQ7RUFDRjs7OztFQUtBLFlBQVksS0FBVSxPQUF1QjtHQUMzQyxJQUFJLENBQUMsT0FBTyxPQUFPLFFBQVEsVUFDekI7R0FHRixJQUFJLE1BQU0sV0FBVyxHQUFHO0lBQ3RCLElBQUksTUFBTSxRQUFRLEdBQUcsR0FDbkIsSUFBSSxTQUFTLFNBQVM7S0FDcEIsSUFBSSxRQUFRLE9BQU8sU0FBUyxVQUMxQixPQUFPLEtBQUssTUFBTTtJQUV0QixDQUFDO1NBRUQsT0FBTyxJQUFJLE1BQU07SUFFbkI7R0FDRjtHQUVBLE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUTtHQUN6QixNQUFNLE9BQU8sSUFBSTtHQUVqQixJQUFJLE1BQU0sUUFBUSxJQUFJLEdBQ3BCLEtBQUssS0FBSyxTQUFTLEtBQUssWUFBWSxNQUFNLElBQUksQ0FBQztRQUMxQyxJQUFJLFFBQVEsT0FBTyxTQUFTLFVBQ2pDLEtBQUssWUFBWSxNQUFNLElBQUk7RUFFL0I7Ozs7RUFLQSxNQUFjLGtCQUNaLElBQ0EsUUFDQSxPQUNBLG9CQUNpQjtHQUNqQixJQUFJLE9BQU8sY0FBYyxRQUN2QixPQUFPO0dBR1QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLE1BQU0sUUFBUTtHQUV6RSxJQUFJLG9CQUFvQjtJQUN0QixNQUFNLEVBQUUsU0FBUyxjQUFjLE1BQU0sT0FBTztJQUU1QyxNQUFNLGNBQWMsSUFERCxVQUFVLE9BQ1QsQ0FBQSxDQUFPLE9BQU8sVUFBVSxRQUFRLEdBQUcsRUFDckQsVUFBVSxPQUFPLE9BQU8sU0FBUyxTQUNuQyxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsY0FBYyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQy9ELE1BQU0sY0FBYyx1QkFBdUIsV0FBVztJQUd0RCxBQUR1QixlQUFlLFFBQVEsTUFBTSxDQUFDLFlBQVksU0FBUyxDQUFDLENBQzNFLENBQUEsQ0FBZSxTQUFTLFVBQVU7S0FDaEMsVUFBVSxVQUFVLEtBQUs7SUFDM0IsQ0FBQztHQUNIO0dBSUEsTUFBTSxjQUFrQyxNQUFNLFVBQzNDLE1BQU0sUUFBUSxDQUFDLENBQ2YsT0FBTyxFQUFFLE9BQU8sS0FBSyxVQUFVLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUN0RCxNQUFNO0dBRVQsSUFBSSxPQUNGLFVBQVUsTUFBTTtHQUdsQixPQUFPLGFBQWEsU0FBUztFQUMvQjs7OztFQUtBLE1BQWMsaUJBQ1osUUFDQSxJQUNBLFFBQ0EsS0FDQSxNQUNBLE9BQ0EsYUFDZ0I7R0FDaEIsSUFBSSxPQUFPLGNBQWMsU0FDdkIsT0FBTyxDQUFDO0dBVVYsSUFBSSxlQUFlLGFBUE07SUFDdkIsSUFBSSxRQUFRLEdBQ1YsT0FBTztTQUVQLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sT0FBTyxPQUFPLEVBQUU7R0FFaEQsRUFBQSxDQUN5QjtHQUV6QixJQUFJLE9BQ0YsR0FBRyxNQUFNO0dBSVgsTUFBTSxVQUFXLEtBQUssY0FBc0I7R0FDNUMsSUFBSSxXQUFXLE1BQU0sUUFBUSxPQUFPLEdBQ2xDLGVBQWUsTUFBTSxLQUFLLGVBQWUsY0FBYyxTQUFTLE9BQU8sV0FBVztHQUdwRixPQUFPLEtBQUssUUFBUSxZQUFZO0VBQ2xDOzs7O0VBS0EsTUFBYyxlQUNaLE1BQ0EsU0FDQSxPQUNBLGFBQ2dCO0dBQ2hCLEtBQUssTUFBTSxpQkFBaUIsU0FBUztJQUNuQyxNQUFNLEVBQUUsSUFBSSxPQUFPLElBQUksbUJBQW1CLFNBQVMsa0JBQWtCO0lBRXJFLE1BQU0sa0JBQWtCLGtCQUN0QixhQUNBLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUM5QjtJQUVBLElBQUksT0FDRixnQkFBZ0IsTUFBTTtJQUd4QixJQUFJLGFBQWMsTUFBTTtJQUd4QixJQUFJLGlCQUFpQixjQUFjLFNBQVMsR0FDMUMsYUFBYSxNQUFNLEtBQUssZUFBZSxZQUFZLGVBQWUsT0FBTyxXQUFXO0lBR3RGLE1BQU0sZUFBZSxNQUFNLGFBQWEsUUFBUSxJQUFJLEtBQUs7SUFFekQsT0FBTyxLQUFLLEtBQUssUUFBUTtLQUN2QixJQUFJLE9BQU8sYUFBYSxJQUFJLFdBQVcsQ0FBQyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3hFLE9BQU87SUFDVCxDQUFDO0dBQ0g7R0FFQSxPQUFPO0VBQ1Q7Ozs7Ozs7RUFRQSxRQUFtQyxNQUFnQjtHQUNqRCxPQUFPLEtBQUssS0FBSyxRQUFXO0lBRTFCLE1BQU0sYUFBYSxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxRQUFRLElBQUksU0FBUyxJQUFJLENBQUM7SUFDdEUsTUFBTSxTQUFTLE9BQU8sUUFBUSxhQUFhLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFHckUsTUFBTSxXQUFXLE9BQU8sUUFBUSxNQUFNLENBQUMsQ0FDcEMsUUFBUSxDQUFDLFVBQVUsWUFBWTtLQUM5QixJQUFJLENBQUMsVUFBVSxPQUFPLFdBQVcsR0FBRyxPQUFPO0tBRzNDLE1BQU0sVUFBVSxHQUFHLFNBQVM7S0FDNUIsSUFBSSxXQUFXLEtBRWIsT0FBTyxJQUFJLGFBQWE7S0FJMUIsT0FBTyxPQUFPLE9BQ1gsVUFDQyxJQUFJLFdBQVcsUUFBUyxNQUFNLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxDQUMvRTtJQUNGLENBQUMsQ0FBQyxDQUNELEtBQUssQ0FBQyxTQUFTLEdBQUc7SUFFckIsTUFBTSxXQUFXLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVTtLQUNyRCxJQUFJLENBQUMsTUFBTSxTQUFTLElBQUksR0FBRztNQUV6QixJQUFJLE1BQU0sUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsR0FDckQsRUFBRSxTQUFTLEtBQUssUUFBUSxJQUFJLE1BQU07V0FFbEMsRUFBRSxTQUFTLElBQUk7TUFFakIsT0FBTztLQUNUO0tBR0EsTUFBTSxRQUFRLE1BQU0sTUFBTSxJQUFJO0tBQzlCLE1BQU0sVUFDSixNQUFNLEtBQ04sTUFDRyxNQUFNLENBQUMsQ0FBQyxDQUNSLEtBQUssU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQzFCLEtBQUssRUFBRTtLQUVaLElBQUksSUFDRixHQUNBLFNBQ0EsSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsSUFDN0QsS0FBSyxRQUFRLElBQUksTUFBTSxJQUN2QixJQUFJLE1BQ1Y7S0FFQSxPQUFPO0lBQ1QsR0FBRyxDQUFDLENBQW9CO0lBR3hCLFNBQVMsU0FBUyxZQUFZO0tBQzVCLFNBQVMsV0FBVztJQUN0QixDQUFDO0lBRUQsT0FBTztHQUNULENBQUM7RUFDSDtDQUNGO0NBdUJhLFlBQVksSUFBSSxlQUFlIn0=
|
package/dist/database/db.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { AsyncLocalStorage } from "async_hooks";
|
|
|
2
2
|
import { type Knex } from "knex";
|
|
3
3
|
import { type SonamuConfig } from "../api/config";
|
|
4
4
|
import { type EnvironmentSnapshots, type SonamuEnvironment } from "../env";
|
|
5
|
+
import { type PuriTransactionWrapper } from "./puri-wrapper";
|
|
5
6
|
import { TransactionContext } from "./transaction-context";
|
|
6
7
|
export type SonamuMainDBPreset = "test" | "fixture" | SonamuEnvironment;
|
|
7
8
|
export type SonamuReadonlyDBPreset = "test_readonly" | "development_readonly" | "staging_readonly" | "production_readonly";
|
|
@@ -15,7 +16,7 @@ export declare class DBClass {
|
|
|
15
16
|
private workerDBs;
|
|
16
17
|
private currentConfig;
|
|
17
18
|
transactionStorage: AsyncLocalStorage<TransactionContext>;
|
|
18
|
-
|
|
19
|
+
runWithTransactionScope<T>(preset: DBPreset, transaction: PuriTransactionWrapper, callback: () => Promise<T>): Promise<T>;
|
|
19
20
|
setConfig(dbConfig: SonamuDBConfig): void;
|
|
20
21
|
private getCurrentConfig;
|
|
21
22
|
getTransactionContext(): TransactionContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAwB,KAAK,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmC3D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AACxE,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,sBAAsB,GACtB,kBAAkB,GAClB,qBAAqB,CAAC;AAC1B,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;AACzE,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,cAAc,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAgGjE,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,aAAa,CAA+B;IAE7C,kBAAkB,wCAA+C;IAEjE,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAwB,KAAK,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEjG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmC3D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;AACxE,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,sBAAsB,GACtB,kBAAkB,GAClB,qBAAqB,CAAC;AAC1B,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;AACzE,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,cAAc,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAgGjE,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,aAAa,CAA+B;IAE7C,kBAAkB,wCAA+C;IAEjE,uBAAuB,CAAC,CAAC,EAC9B,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,sBAAsB,EACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC;IAcb,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIzC,OAAO,CAAC,gBAAgB;IAQjB,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IA4C5B,OAAO,CAAC,WAAW;IA6BnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IAsBnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBvB,gBAAgB,CACrB,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,EAChC,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,oBAAoB,GAC/B,cAAc;IA2EV,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
|