@pipeline-builder/pipeline-data 4.1.7 → 4.1.9
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/lib/database/drizzle-schema.d.ts +0 -17
- package/lib/database/postgres-connection.js +2 -2
- package/lib/database/retry-strategy.d.ts +22 -29
- package/lib/database/retry-strategy.js +50 -51
- package/lib/database/schema/compliance.d.ts +0 -17
- package/lib/database/schema/compliance.js +1 -3
- package/lib/database/tenancy.d.ts +0 -7
- package/lib/database/tenancy.js +1 -15
- package/lib/index.d.ts +1 -1
- package/lib/index.js +4 -2
- package/package.json +14 -2
|
@@ -4738,23 +4738,6 @@ export declare const schema: {
|
|
|
4738
4738
|
length: 10;
|
|
4739
4739
|
$type: import("./schema/compliance.js").RuleScope;
|
|
4740
4740
|
}>;
|
|
4741
|
-
forkedFromRuleId: import("drizzle-orm/pg-core").PgColumn<{
|
|
4742
|
-
name: "forked_from_rule_id";
|
|
4743
|
-
tableName: "compliance_rules";
|
|
4744
|
-
dataType: "string";
|
|
4745
|
-
columnType: "PgUUID";
|
|
4746
|
-
data: string;
|
|
4747
|
-
driverParam: string;
|
|
4748
|
-
notNull: false;
|
|
4749
|
-
hasDefault: false;
|
|
4750
|
-
isPrimaryKey: false;
|
|
4751
|
-
isAutoincrement: false;
|
|
4752
|
-
hasRuntimeDefault: false;
|
|
4753
|
-
enumValues: undefined;
|
|
4754
|
-
baseColumn: never;
|
|
4755
|
-
identity: undefined;
|
|
4756
|
-
generated: undefined;
|
|
4757
|
-
}, {}, {}>;
|
|
4758
4741
|
suppressNotification: import("drizzle-orm/pg-core").PgColumn<{
|
|
4759
4742
|
name: "suppress_notification";
|
|
4760
4743
|
tableName: "compliance_rules";
|
|
@@ -125,7 +125,7 @@ export class Connection {
|
|
|
125
125
|
// Initialize retry strategy
|
|
126
126
|
this.retryStrategy = new ConnectionRetryStrategy({
|
|
127
127
|
maxRetries: this.options.maxRetries,
|
|
128
|
-
|
|
128
|
+
retryDelayMs: this.options.retryDelay,
|
|
129
129
|
});
|
|
130
130
|
try {
|
|
131
131
|
const config = getDatabaseConfig();
|
|
@@ -410,4 +410,4 @@ export async function testConnection() {
|
|
|
410
410
|
const connection = Connection.getInstance();
|
|
411
411
|
return connection.testConnection();
|
|
412
412
|
}
|
|
413
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFtQixNQUFNLElBQUksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQXlCLEVBQUUsUUFBZ0I7SUFDOUQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbEQsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFtQztJQUM5RCxJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFNUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFFckQsSUFBSSxPQUFnQixDQUFDO0lBQ3JCLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssR0FBRztRQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDakQsSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxHQUFHO1FBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN4RCxJQUFJLE9BQU87UUFBRSxPQUFPLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQzs7UUFDN0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQztJQUVyRCxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzNCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixLQUFLLE1BQU0sRUFBRSxDQUFDO0FBQ25GLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN4QixpRkFBaUY7SUFDakYsMERBQTBEO0lBQzFELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRXBELE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksVUFBVTtRQUN2QyxJQUFJLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztRQUM1QyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksa0JBQWtCO1FBQ3BELElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxVQUFVO1FBQ3ZDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckssV0FBVyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQztRQUM1RSxpQkFBaUIsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxrQkFBa0IsQ0FBQztRQUMzRix1QkFBdUIsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUM7S0FDMUYsQ0FBQztBQUNKLENBQUM7QUErQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNiLE1BQU0sQ0FBQyxRQUFRLEdBQXNCLElBQUksQ0FBQztJQUVsRDs7T0FFRztJQUNhLEVBQUUsQ0FBNkI7SUFFOUIsSUFBSSxDQUFPO0lBQ1gsT0FBTyxDQUE4QjtJQUNyQyxhQUFhLENBQTBCO0lBQ2hELGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFL0I7Ozs7OztPQU1HO0lBQ0gsWUFBb0IsT0FBTyxHQUFzQixFQUFFO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJO1lBQzVDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLElBQUk7WUFDaEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDakYsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN2Rix5RUFBeUU7WUFDekUsd0VBQXdFO1lBQ3hFLDBFQUEwRTtZQUMxRSxHQUFHLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDL0IsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQXVCLENBQUM7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1NBQ25DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFFbkMsTUFBTSxVQUFVLEdBQWU7Z0JBQzdCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN6QixHQUFHLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQzNDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyx1QkFBdUI7Z0JBQ3ZELEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLGVBQWUsRUFBRSxJQUFJO2FBQ3RCLENBQUM7WUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRTFCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXpDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQTJCO1FBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBWSxJQUFJO1FBQ3JELElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLGNBQWM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLDJFQUEyRTtZQUMzRSx5RUFBeUU7WUFDekUsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzlDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO2dCQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVE7UUFDYixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQzlCLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7U0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBVyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7UUFDckYsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLFVBQVUsV0FBVyxLQUFLLENBQUMsU0FBUyxjQUFjLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ25ILENBQUM7WUFFRCxzQ0FBc0M7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUMvQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDekUsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBRW5ELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXRELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMvRixLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNqRyxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztZQUU3RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE1BQWtCO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDckMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ3ZCLGFBQWEsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQ3ZDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyx1QkFBdUI7WUFDbkQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVTtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILDZEQUE2RDtBQUM3RCxJQUFJLFdBQVcsR0FBc0MsSUFBSSxDQUFDO0FBRTFEOzs7R0FHRztBQUNILFNBQVMsYUFBYTtJQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFnQyxFQUFFO0lBQzVELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBcUI7UUFDMUIsTUFBTSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQTZCLENBQUMsQ0FBQztRQUN0RCwwREFBMEQ7UUFDMUQsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWU7SUFDbkMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxPQUFPLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGRyaXp6bGUgfSBmcm9tICdkcml6emxlLW9ybS9ub2RlLXBvc3RncmVzJztcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gJ3BnJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4vZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3kgfSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkYXRhYmFzZScpO1xuXG4vKipcbiAqIEdldCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBOb3RlOiBVc2VzIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggcGlwZWxpbmUtY29yZVxuICovXG5mdW5jdGlvbiBwYXJzZUludEVudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHBhcnNlZCkgPyBmYWxsYmFjayA6IHBhcnNlZDtcbn1cblxuLyoqIERldGVjdCBMYW1iZGEgZW52aXJvbm1lbnQgZm9yIHBvb2wtc2l6ZSB0dW5pbmcgKi9cbmNvbnN0IGlzTGFtYmRhID0gISFwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUU7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgcGcgVExTL1NTTCBjb25maWcgZnJvbSBhbiBleHBsaWNpdCBvcHRpb24gb3IgdGhlIGVudmlyb25tZW50LFxuICogZm9sbG93aW5nIHRoZSBzYW1lIGVudi10dW5hYmxlIHBhdHRlcm4gYXMgdGhlIHBvb2wgc2l6aW5nIGFib3ZlLlxuICpcbiAqIFByZWNlZGVuY2U6XG4gKiAgIDEuIEFuIGV4cGxpY2l0IGBvcHRpb25zLnNzbGAgKGNvbnN0cnVjdG9yIGFyZykgYWx3YXlzIHdpbnMg4oCUIGluY2x1ZGluZyBhblxuICogICAgICBleHBsaWNpdCBgZmFsc2VgIHRvIGZvcmNlIHBsYWludGV4dC5cbiAqICAgMi4gYERCX1NTTGAgKGB0cnVlYC9gMWAgb24sIGBmYWxzZWAvYDBgIG9mZikgb3IgUG9zdGdyZXMnIHN0YW5kYXJkXG4gKiAgICAgIGBQR1NTTE1PREVgIChgZGlzYWJsZWAgPSBvZmYsIGFueSBvdGhlciBtb2RlID0gb24pLlxuICogICAzLiBEZWZhdWx0OiBPTiBpbiBwcm9kdWN0aW9uIChSRFMgY29ubmVjdGlvbnMgbXVzdCBiZSBlbmNyeXB0ZWQgaW4gdHJhbnNpdCksXG4gKiAgICAgIE9GRiBldmVyeXdoZXJlIGVsc2Ugc28gYSBsb2NhbCBQb3N0Z3JlcyB3aXRob3V0IFRMUyBrZWVwcyB3b3JraW5nLlxuICpcbiAqIFdoZW4gZW5hYmxlZCwgYHJlamVjdFVuYXV0aG9yaXplZGAgZm9sbG93cyBgREJfU1NMX1JFSkVDVF9VTkFVVEhPUklaRURgXG4gKiAoZGVmYXVsdCBgZmFsc2VgKTogQVdTIFJEUyBwcmVzZW50cyBhIGNlcnQgc2lnbmVkIGJ5IHRoZSBSRFMgQ0EsIHdoaWNoIGlzIG5vdFxuICogaW4gTm9kZSdzIGRlZmF1bHQgdHJ1c3Qgc3RvcmUgdW5sZXNzIHRoZSBDQSBidW5kbGUgaXMgbW91bnRlZCwgc28gY2VydGlmaWNhdGVcbiAqIFZFUklGSUNBVElPTiBpcyBvcHQtaW4gdG8gYXZvaWQgYnJlYWtpbmcgYSBzdG9jayBSRFMgZGVwbG95IOKAlCB0aGUgY2hhbm5lbCBpc1xuICogc3RpbGwgRU5DUllQVEVELiBTZXQgYERCX1NTTF9SRUpFQ1RfVU5BVVRIT1JJWkVEPXRydWVgIG9uY2UgdGhlIFJEUyBDQSBidW5kbGVcbiAqIGlzIHdpcmVkIHRvIGdldCBmdWxsIHZlcmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNzbENvbmZpZyhleHBsaWNpdD86IENvbm5lY3Rpb25PcHRpb25zWydzc2wnXSk6IGJvb2xlYW4gfCB7IHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhbiB9IHtcbiAgaWYgKGV4cGxpY2l0ICE9PSB1bmRlZmluZWQpIHJldHVybiBleHBsaWNpdDtcblxuICBjb25zdCBkYlNzbCA9IHByb2Nlc3MuZW52LkRCX1NTTD8udG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3NsTW9kZSA9IHByb2Nlc3MuZW52LlBHU1NMTU9ERT8udG9Mb3dlckNhc2UoKTtcblxuICBsZXQgZW5hYmxlZDogYm9vbGVhbjtcbiAgaWYgKGRiU3NsID09PSAndHJ1ZScgfHwgZGJTc2wgPT09ICcxJykgZW5hYmxlZCA9IHRydWU7XG4gIGVsc2UgaWYgKGRiU3NsID09PSAnZmFsc2UnIHx8IGRiU3NsID09PSAnMCcpIGVuYWJsZWQgPSBmYWxzZTtcbiAgZWxzZSBpZiAoc3NsTW9kZSkgZW5hYmxlZCA9IHNzbE1vZGUgIT09ICdkaXNhYmxlJztcbiAgZWxzZSBlbmFibGVkID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcblxuICBpZiAoIWVuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHsgcmVqZWN0VW5hdXRob3JpemVkOiBwcm9jZXNzLmVudi5EQl9TU0xfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJ3RydWUnIH07XG59XG5cbmZ1bmN0aW9uIGdldERhdGFiYXNlQ29uZmlnKCkge1xuICAvLyBMYW1iZGE6IHNtYWxsIHBvb2wgKGVhY2ggaW52b2NhdGlvbiBpcyBzaG9ydC1saXZlZCwgbWFueSBjb25jdXJyZW50IGluc3RhbmNlcylcbiAgLy8gRUNTL2xvbmctcnVubmluZzogbGFyZ2VyIHBvb2wgZm9yIHN1c3RhaW5lZCBjb25jdXJyZW5jeVxuICBjb25zdCBkZWZhdWx0UG9vbFNpemUgPSBpc0xhbWJkYSA/IDIgOiAyMDtcbiAgY29uc3QgZGVmYXVsdElkbGVUaW1lb3V0ID0gaXNMYW1iZGEgPyAxMDAwMCA6IDMwMDAwO1xuXG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuREJfSE9TVCB8fCAncG9zdGdyZXMnLFxuICAgIHBvcnQ6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1BPUlQsIDU0MzIpLFxuICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5EQVRBQkFTRSB8fCAncGlwZWxpbmVfYnVpbGRlcicsXG4gICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAncG9zdGdyZXMnLFxuICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5EQl9QQVNTV09SRCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/ICgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignREJfUEFTU1dPUkQgaXMgcmVxdWlyZWQgaW4gcHJvZHVjdGlvbicpOyB9KSgpIGFzIHN0cmluZyA6ICcnKSxcbiAgICBtYXhQb29sU2l6ZTogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9NQVhfUE9PTF9TSVpFLCBkZWZhdWx0UG9vbFNpemUpLFxuICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVMsIGRlZmF1bHRJZGxlVGltZW91dCksXG4gICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfQ09OTkVDVElPTl9USU1FT1VUX01JTExJUywgNTAwMCksXG4gIH07XG59XG5cbi8qKlxuICogRGF0YWJhc2UgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblN0YXRzIHtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICBpZGxlQ291bnQ6IG51bWJlcjtcbiAgd2FpdGluZ0NvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBjb25uZWN0aW9uIGxvZ2dpbmcgKi9cbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZXRyeSBmYWlsZWQgY29ubmVjdGlvbnMgKi9cbiAgZW5hYmxlQXV0b1JldHJ5PzogYm9vbGVhbjtcblxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbiByZXRyeSBhdHRlbXB0cyAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKiBEZWxheSBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZXRyeURlbGF5PzogbnVtYmVyO1xuXG4gIC8qKiBTU0wgY29uZmlndXJhdGlvbiAqL1xuICBzc2w/OiBib29sZWFuIHwgeyByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW4gfTtcbn1cblxuLyoqXG4gKiBTaW5nbGV0b24gZGF0YWJhc2UgY29ubmVjdGlvbiBjbGFzcy5cbiAqIE1hbmFnZXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHBvb2xpbmcgYW5kIERyaXp6bGUgT1JNIGluc3RhbmNlLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBTaW5nbGV0b24gcGF0dGVybiBmb3Igc2luZ2xlIGNvbm5lY3Rpb24gcG9vbFxuICogLSBBdXRvbWF0aWMgY29ubmVjdGlvbiByZXRyeSB3aXRoIGJhY2tvZmZcbiAqIC0gQ29ubmVjdGlvbiBoZWFsdGggbW9uaXRvcmluZ1xuICogLSBHcmFjZWZ1bCBzaHV0ZG93biBoYW5kbGluZ1xuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nXG4gKiAtIENvbm5lY3Rpb24gc3RhdGlzdGljcyB0cmFja2luZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGNvbm5lY3Rpb24uZGIuc2VsZWN0KCkuZnJvbShzY2hlbWEucGx1Z2luKTtcbiAqXG4gKiAvLyBEdXJpbmcgc2h1dGRvd25cbiAqIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb25uZWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIERyaXp6bGUgT1JNIGRhdGFiYXNlIGluc3RhbmNlIHdpdGggc2NoZW1hXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGI6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxDb25uZWN0aW9uT3B0aW9ucz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlTdHJhdGVneTogQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3k7XG4gIHByaXZhdGUgaXNTaHV0dGluZ0Rvd24gPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBlbmZvcmNlIHNpbmdsZXRvbiBwYXR0ZXJuLlxuICAgKiBJbml0aWFsaXplcyBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gcG9vbCBhbmQgRHJpenpsZSBPUk0gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb25cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uIGZhaWxzIGFmdGVyIGFsbCByZXRyaWVzXG4gICAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbm5lY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gdHJ1ZSxcbiAgICAgIGVuYWJsZUF1dG9SZXRyeTogb3B0aW9ucy5lbmFibGVBdXRvUmV0cnkgPz8gdHJ1ZSxcbiAgICAgIG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9NQVhfUkVUUklFUyB8fCAnMycsIDEwKSxcbiAgICAgIHJldHJ5RGVsYXk6IG9wdGlvbnMucmV0cnlEZWxheSA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9SRVRSWV9ERUxBWV9NUyB8fCAnMTAwMCcsIDEwKSxcbiAgICAgIC8vIEVudi1kcml2ZW4gVExTOiBvbi1ieS1kZWZhdWx0IGluIHByb2R1Y3Rpb24sIGVudi1lbmFibGVhYmxlIGVsc2V3aGVyZS5cbiAgICAgIC8vIGdldEluc3RhbmNlKCkgaXMgbm9ybWFsbHkgY2FsbGVkIHdpdGggbm8gb3B0aW9ucywgc28gdGhpcyBpcyB0aGUgb25seVxuICAgICAgLy8gcGxhY2UgcHJvZHVjdGlvbiBSRFMgY29ubmVjdGlvbnMgcGljayB1cCBTU0wgKGZvcm1lcmx5IGhhcmQtY29kZWQgb2ZmKS5cbiAgICAgIHNzbDogZ2V0U3NsQ29uZmlnKG9wdGlvbnMuc3NsKSxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBzdHJhdGVneVxuICAgIHRoaXMucmV0cnlTdHJhdGVneSA9IG5ldyBDb25uZWN0aW9uUmV0cnlTdHJhdGVneSh7XG4gICAgICBtYXhSZXRyaWVzOiB0aGlzLm9wdGlvbnMubWF4UmV0cmllcyxcbiAgICAgIGJhc2VEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0RGF0YWJhc2VDb25maWcoKTtcblxuICAgICAgY29uc3QgcG9vbENvbmZpZzogUG9vbENvbmZpZyA9IHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBkYXRhYmFzZTogY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICB1c2VyOiBjb25maWcudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgbWF4OiBjb25maWcubWF4UG9vbFNpemUsXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICAgIHNzbDogdGhpcy5vcHRpb25zLnNzbCxcbiAgICAgICAgYWxsb3dFeGl0T25JZGxlOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wb29sID0gbmV3IFBvb2wocG9vbENvbmZpZyk7XG4gICAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGVycygpO1xuXG4gICAgICB0aGlzLmRiID0gZHJpenpsZSh0aGlzLnBvb2wsIHsgc2NoZW1hIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHRoaXMubG9nQ29ubmVjdGlvbkNvbmZpZyhwb29sQ29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YWJhc2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29ubmVjdGlvbiBjbGFzcy5cbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBpZiBvbmUgZG9lc24ndCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChvbmx5IHVzZWQgb24gZmlyc3QgY2FsbClcbiAgICogQHJldHVybnMgVGhlIHNpbmdsZXRvbiBDb25uZWN0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IENvbm5lY3Rpb24ge1xuICAgIGlmICghQ29ubmVjdGlvbi5pbnN0YW5jZSkge1xuICAgICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uKG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gQ29ubmVjdGlvbi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIHJlY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbG9zZUV4aXN0aW5nIC0gV2hldGhlciB0byBjbG9zZSBleGlzdGluZyBjb25uZWN0aW9uIGJlZm9yZSByZXNldFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyByZXNldChjbG9zZUV4aXN0aW5nOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChDb25uZWN0aW9uLmluc3RhbmNlICYmIGNsb3NlRXhpc3RpbmcpIHtcbiAgICAgIGF3YWl0IENvbm5lY3Rpb24uaW5zdGFuY2UuY2xvc2UoKTtcbiAgICB9XG4gICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgY29ubmVjdGlvbiBpcyBoZWFsdGh5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMucG9vbC5jb25uZWN0KCk7XG4gICAgICAvLyBSZWxlYXNlIGV2ZW4gaWYgdGhlIHByb2JlIHF1ZXJ5IHRocm93cyDigJQgb3RoZXJ3aXNlIGEgZmxha3kgREIgKHRoZSBleGFjdFxuICAgICAgLy8gY2FzZSB0aGlzIGNoZWNrIGV4aXN0cyBmb3IpIGxlYWtzIGEgcG9vbGVkIGNsaWVudCBlYWNoIGZhaWx1cmUgYW5kIGNhblxuICAgICAgLy8gZXhoYXVzdCB0aGUgcG9vbCBvbiB0aGUgcmV0cnkgcGF0aC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeSgnU0VMRUNUIDEnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBzdWNjZXNzZnVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzLmxlbmd0aCA+IDA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGllbnQucmVsZWFzZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbm5lY3Rpb24gcG9vbCBzdGF0aXN0aWNzXG4gICAqXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgY29ubmVjdGlvbiBwb29sIHN0YXRpc3RpY3NcbiAgICovXG4gIHB1YmxpYyBnZXRTdGF0cygpOiBDb25uZWN0aW9uU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbENvdW50OiB0aGlzLnBvb2wudG90YWxDb3VudCxcbiAgICAgIGlkbGVDb3VudDogdGhpcy5wb29sLmlkbGVDb3VudCxcbiAgICAgIHdhaXRpbmdDb3VudDogdGhpcy5wb29sLndhaXRpbmdDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBwb29sIGdyYWNlZnVsbHkuXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCAtIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBjbG9zZSAobXMpXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHBvb2wgaXMgY2xvc2VkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xvc2UodGltZW91dDogbnVtYmVyID0gcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfQ0xPU0VfVElNRU9VVF9NUywgNTAwMCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93bikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Nvbm5lY3Rpb24gaXMgYWxyZWFkeSBzaHV0dGluZyBkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1NodXR0aW5nRG93biA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIGRhdGFiYXNlIGNvbm5lY3Rpb24gcG9vbC4uLicpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IHRoaXMuZ2V0U3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFBvb2wgc3RhdHMgLSBUb3RhbDogJHtzdGF0cy50b3RhbENvdW50fSwgSWRsZTogJHtzdGF0cy5pZGxlQ291bnR9LCBXYWl0aW5nOiAke3N0YXRzLndhaXRpbmdDb3VudH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGEgdGltZW91dCBmb3IgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZSA9IHRoaXMucG9vbC5lbmQoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdDb25uZWN0aW9uIGNsb3NlIHRpbWVvdXQnKSksIHRpbWVvdXQpLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtjbG9zZVByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBjbG9zZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2xvc2luZyBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgY29ubmVjdGlvbiBpcyBpbiBzaHV0ZG93biBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGlzQ2xvc2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NodXR0aW5nRG93bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY29ubmVjdGlvbiBwb29sXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnBvb2wub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIG9uIGlkbGUgY2xpZW50OicsIGVycik7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlQXV0b1JldHJ5ICYmIHRoaXMucmV0cnlTdHJhdGVneS5nZXRBdHRlbXB0cygpIDwgdGhpcy5vcHRpb25zLm1heFJldHJpZXMpIHtcbiAgICAgICAgdm9pZCB0aGlzLnJldHJ5U3RyYXRlZ3kuaGFuZGxlQ29ubmVjdGlvbkVycm9yKGVyciwgKCkgPT4gdGhpcy50ZXN0Q29ubmVjdGlvbigpKS5jYXRjaCgocmV0cnlFcnIpID0+IHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3Rpb24gcmV0cnkgZXJyb3I6JywgcmV0cnlFcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHRoaXMucmV0cnlTdHJhdGVneS5yZXNldCgpOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2xpZW50IHJlbW92ZWQgZnJvbSBwb29sJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gKHNhbml0aXplZClcbiAgICovXG4gIHByaXZhdGUgbG9nQ29ubmVjdGlvbkNvbmZpZyhjb25maWc6IFBvb2xDb25maWcpOiB2b2lkIHtcbiAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgQ29uZmlndXJhdGlvbjonLCB7XG4gICAgICBob3N0OiBgJHtjb25maWcuaG9zdH06JHtjb25maWcucG9ydH1gLFxuICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgIHVzZXI6IGNvbmZpZy51c2VyLFxuICAgICAgbWF4UG9vbFNpemU6IGNvbmZpZy5tYXgsXG4gICAgICBpZGxlVGltZW91dE1zOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1zOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICBzc2w6IGNvbmZpZy5zc2wgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGRhdGFiYXNlIGluc3RhbmNlIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRiIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiAvLyBTZWxlY3QgcXVlcmllc1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKlxuICogLy8gSW5zZXJ0IHF1ZXJpZXNcbiAqIGF3YWl0IGRiLmluc2VydChzY2hlbWEucGx1Z2luKS52YWx1ZXMoeyBuYW1lOiAnbXktcGx1Z2luJyB9KTtcbiAqXG4gKiAvLyBUcmFuc2FjdGlvbnNcbiAqIGF3YWl0IGRiLnRyYW5zYWN0aW9uKGFzeW5jICh0eCkgPT4ge1xuICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgLi4uIH0pO1xuICogICBhd2FpdCB0eC51cGRhdGUoc2NoZW1hLnBsdWdpbikuc2V0KHsgLi4uIH0pO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuXG4vLyBMYXp5IGluaXRpYWxpemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIG9uIG1vZHVsZSBsb2FkXG5sZXQgX2RiSW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhYmFzZSBpbnN0YW5jZSB3aXRoIGxhenkgaW5pdGlhbGl6YXRpb25cbiAqIFRoaXMgYXZvaWRzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBiZWZvcmUgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZFxuICovXG5mdW5jdGlvbiBnZXREYkluc3RhbmNlKCk6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHtcbiAgaWYgKCFfZGJJbnN0YW5jZSkge1xuICAgIF9kYkluc3RhbmNlID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpLmRiO1xuICB9XG4gIHJldHVybiBfZGJJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBQcm94eS1iYXNlZCBsYXp5IGRhdGFiYXNlIGluc3RhbmNlXG4gKiBUaGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgb25seSBjcmVhdGVkIHdoZW4gZmlyc3QgYWNjZXNzZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZGIgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIC8vIENvbm5lY3Rpb24gaXMgY3JlYXRlZCBoZXJlIG9uIGZpcnN0IHVzZSwgbm90IG9uIGltcG9ydFxuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGRiID0gbmV3IFByb3h5KHt9IGFzIFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+LCB7XG4gIGdldChfLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldERiSW5zdGFuY2UoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlW3Byb3AgYXMga2V5b2YgdHlwZW9mIGluc3RhbmNlXTtcbiAgICAvLyBCaW5kIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlIHRvIHByZXNlcnZlICd0aGlzJyBjb250ZXh0XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmJpbmQoaW5zdGFuY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG59KTtcblxuLyoqXG4gKiBHZXRzIHRoZSBDb25uZWN0aW9uIGluc3RhbmNlIGZvciBhZHZhbmNlZCBvcGVyYXRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGdldENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGNvbnN0IGNvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKCk7XG4gKiBjb25zdCBzdGF0cyA9IGNvbm5lY3Rpb24uZ2V0U3RhdHMoKTtcbiAqIGNvbnNvbGUubG9nKGBBY3RpdmUgY29ubmVjdGlvbnM6ICR7c3RhdHMudG90YWxDb3VudH1gKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbigpOiBDb25uZWN0aW9uIHtcbiAgcmV0dXJuIENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNsb3NlQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogcHJvY2Vzcy5vbignU0lHVEVSTScsIGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY2xvc2VDb25uZWN0aW9uKCk7XG4gKiAgIHByb2Nlc3MuZXhpdCgwKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgX2RiSW5zdGFuY2UgPSBudWxsOyAvLyBSZXNldCBsYXp5IGluc3RhbmNlXG59XG5cbi8qKlxuICogVGVzdHMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIGhlYWx0aHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgdGVzdENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGlmIChhd2FpdCB0ZXN0Q29ubmVjdGlvbigpKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdEYXRhYmFzZSBpcyByZWFkeScpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5lcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsZWQnKTtcbiAqICAgcHJvY2Vzcy5leGl0KDEpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q29ubmVjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbiAgcmV0dXJuIGNvbm5lY3Rpb24udGVzdENvbm5lY3Rpb24oKTtcbn1cbiJdfQ==
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFtQixNQUFNLElBQUksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQXlCLEVBQUUsUUFBZ0I7SUFDOUQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbEQsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFtQztJQUM5RCxJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFNUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVB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TUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWU7SUFDbkMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxzQkFBc0I7QUFDNUMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxPQUFPLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGRyaXp6bGUgfSBmcm9tICdkcml6emxlLW9ybS9ub2RlLXBvc3RncmVzJztcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gJ3BnJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4vZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3kgfSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkYXRhYmFzZScpO1xuXG4vKipcbiAqIEdldCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBOb3RlOiBVc2VzIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggcGlwZWxpbmUtY29yZVxuICovXG5mdW5jdGlvbiBwYXJzZUludEVudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHBhcnNlZCkgPyBmYWxsYmFjayA6IHBhcnNlZDtcbn1cblxuLyoqIERldGVjdCBMYW1iZGEgZW52aXJvbm1lbnQgZm9yIHBvb2wtc2l6ZSB0dW5pbmcgKi9cbmNvbnN0IGlzTGFtYmRhID0gISFwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUU7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgcGcgVExTL1NTTCBjb25maWcgZnJvbSBhbiBleHBsaWNpdCBvcHRpb24gb3IgdGhlIGVudmlyb25tZW50LFxuICogZm9sbG93aW5nIHRoZSBzYW1lIGVudi10dW5hYmxlIHBhdHRlcm4gYXMgdGhlIHBvb2wgc2l6aW5nIGFib3ZlLlxuICpcbiAqIFByZWNlZGVuY2U6XG4gKiAgIDEuIEFuIGV4cGxpY2l0IGBvcHRpb25zLnNzbGAgKGNvbnN0cnVjdG9yIGFyZykgYWx3YXlzIHdpbnMg4oCUIGluY2x1ZGluZyBhblxuICogICAgICBleHBsaWNpdCBgZmFsc2VgIHRvIGZvcmNlIHBsYWludGV4dC5cbiAqICAgMi4gYERCX1NTTGAgKGB0cnVlYC9gMWAgb24sIGBmYWxzZWAvYDBgIG9mZikgb3IgUG9zdGdyZXMnIHN0YW5kYXJkXG4gKiAgICAgIGBQR1NTTE1PREVgIChgZGlzYWJsZWAgPSBvZmYsIGFueSBvdGhlciBtb2RlID0gb24pLlxuICogICAzLiBEZWZhdWx0OiBPTiBpbiBwcm9kdWN0aW9uIChSRFMgY29ubmVjdGlvbnMgbXVzdCBiZSBlbmNyeXB0ZWQgaW4gdHJhbnNpdCksXG4gKiAgICAgIE9GRiBldmVyeXdoZXJlIGVsc2Ugc28gYSBsb2NhbCBQb3N0Z3JlcyB3aXRob3V0IFRMUyBrZWVwcyB3b3JraW5nLlxuICpcbiAqIFdoZW4gZW5hYmxlZCwgYHJlamVjdFVuYXV0aG9yaXplZGAgZm9sbG93cyBgREJfU1NMX1JFSkVDVF9VTkFVVEhPUklaRURgXG4gKiAoZGVmYXVsdCBgZmFsc2VgKTogQVdTIFJEUyBwcmVzZW50cyBhIGNlcnQgc2lnbmVkIGJ5IHRoZSBSRFMgQ0EsIHdoaWNoIGlzIG5vdFxuICogaW4gTm9kZSdzIGRlZmF1bHQgdHJ1c3Qgc3RvcmUgdW5sZXNzIHRoZSBDQSBidW5kbGUgaXMgbW91bnRlZCwgc28gY2VydGlmaWNhdGVcbiAqIFZFUklGSUNBVElPTiBpcyBvcHQtaW4gdG8gYXZvaWQgYnJlYWtpbmcgYSBzdG9jayBSRFMgZGVwbG95IOKAlCB0aGUgY2hhbm5lbCBpc1xuICogc3RpbGwgRU5DUllQVEVELiBTZXQgYERCX1NTTF9SRUpFQ1RfVU5BVVRIT1JJWkVEPXRydWVgIG9uY2UgdGhlIFJEUyBDQSBidW5kbGVcbiAqIGlzIHdpcmVkIHRvIGdldCBmdWxsIHZlcmlmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNzbENvbmZpZyhleHBsaWNpdD86IENvbm5lY3Rpb25PcHRpb25zWydzc2wnXSk6IGJvb2xlYW4gfCB7IHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhbiB9IHtcbiAgaWYgKGV4cGxpY2l0ICE9PSB1bmRlZmluZWQpIHJldHVybiBleHBsaWNpdDtcblxuICBjb25zdCBkYlNzbCA9IHByb2Nlc3MuZW52LkRCX1NTTD8udG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3NsTW9kZSA9IHByb2Nlc3MuZW52LlBHU1NMTU9ERT8udG9Mb3dlckNhc2UoKTtcblxuICBsZXQgZW5hYmxlZDogYm9vbGVhbjtcbiAgaWYgKGRiU3NsID09PSAndHJ1ZScgfHwgZGJTc2wgPT09ICcxJykgZW5hYmxlZCA9IHRydWU7XG4gIGVsc2UgaWYgKGRiU3NsID09PSAnZmFsc2UnIHx8IGRiU3NsID09PSAnMCcpIGVuYWJsZWQgPSBmYWxzZTtcbiAgZWxzZSBpZiAoc3NsTW9kZSkgZW5hYmxlZCA9IHNzbE1vZGUgIT09ICdkaXNhYmxlJztcbiAgZWxzZSBlbmFibGVkID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcblxuICBpZiAoIWVuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHsgcmVqZWN0VW5hdXRob3JpemVkOiBwcm9jZXNzLmVudi5EQl9TU0xfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJ3RydWUnIH07XG59XG5cbmZ1bmN0aW9uIGdldERhdGFiYXNlQ29uZmlnKCkge1xuICAvLyBMYW1iZGE6IHNtYWxsIHBvb2wgKGVhY2ggaW52b2NhdGlvbiBpcyBzaG9ydC1saXZlZCwgbWFueSBjb25jdXJyZW50IGluc3RhbmNlcylcbiAgLy8gRUNTL2xvbmctcnVubmluZzogbGFyZ2VyIHBvb2wgZm9yIHN1c3RhaW5lZCBjb25jdXJyZW5jeVxuICBjb25zdCBkZWZhdWx0UG9vbFNpemUgPSBpc0xhbWJkYSA/IDIgOiAyMDtcbiAgY29uc3QgZGVmYXVsdElkbGVUaW1lb3V0ID0gaXNMYW1iZGEgPyAxMDAwMCA6IDMwMDAwO1xuXG4gIHJldHVybiB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuREJfSE9TVCB8fCAncG9zdGdyZXMnLFxuICAgIHBvcnQ6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1BPUlQsIDU0MzIpLFxuICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5EQVRBQkFTRSB8fCAncGlwZWxpbmVfYnVpbGRlcicsXG4gICAgdXNlcjogcHJvY2Vzcy5lbnYuREJfVVNFUiB8fCAncG9zdGdyZXMnLFxuICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5EQl9QQVNTV09SRCB8fCAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/ICgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignREJfUEFTU1dPUkQgaXMgcmVxdWlyZWQgaW4gcHJvZHVjdGlvbicpOyB9KSgpIGFzIHN0cmluZyA6ICcnKSxcbiAgICBtYXhQb29sU2l6ZTogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9NQVhfUE9PTF9TSVpFLCBkZWZhdWx0UG9vbFNpemUpLFxuICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVMsIGRlZmF1bHRJZGxlVGltZW91dCksXG4gICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfQ09OTkVDVElPTl9USU1FT1VUX01JTExJUywgNTAwMCksXG4gIH07XG59XG5cbi8qKlxuICogRGF0YWJhc2UgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGZvciBtb25pdG9yaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblN0YXRzIHtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICBpZGxlQ291bnQ6IG51bWJlcjtcbiAgd2FpdGluZ0NvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBjb25uZWN0aW9uIGxvZ2dpbmcgKi9cbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZXRyeSBmYWlsZWQgY29ubmVjdGlvbnMgKi9cbiAgZW5hYmxlQXV0b1JldHJ5PzogYm9vbGVhbjtcblxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbiByZXRyeSBhdHRlbXB0cyAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8qKiBEZWxheSBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZXRyeURlbGF5PzogbnVtYmVyO1xuXG4gIC8qKiBTU0wgY29uZmlndXJhdGlvbiAqL1xuICBzc2w/OiBib29sZWFuIHwgeyByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW4gfTtcbn1cblxuLyoqXG4gKiBTaW5nbGV0b24gZGF0YWJhc2UgY29ubmVjdGlvbiBjbGFzcy5cbiAqIE1hbmFnZXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHBvb2xpbmcgYW5kIERyaXp6bGUgT1JNIGluc3RhbmNlLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBTaW5nbGV0b24gcGF0dGVybiBmb3Igc2luZ2xlIGNvbm5lY3Rpb24gcG9vbFxuICogLSBBdXRvbWF0aWMgY29ubmVjdGlvbiByZXRyeSB3aXRoIGJhY2tvZmZcbiAqIC0gQ29ubmVjdGlvbiBoZWFsdGggbW9uaXRvcmluZ1xuICogLSBHcmFjZWZ1bCBzaHV0ZG93biBoYW5kbGluZ1xuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nXG4gKiAtIENvbm5lY3Rpb24gc3RhdGlzdGljcyB0cmFja2luZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGNvbm5lY3Rpb24uZGIuc2VsZWN0KCkuZnJvbShzY2hlbWEucGx1Z2luKTtcbiAqXG4gKiAvLyBEdXJpbmcgc2h1dGRvd25cbiAqIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb25uZWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIERyaXp6bGUgT1JNIGRhdGFiYXNlIGluc3RhbmNlIHdpdGggc2NoZW1hXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGI6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxDb25uZWN0aW9uT3B0aW9ucz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlTdHJhdGVneTogQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3k7XG4gIHByaXZhdGUgaXNTaHV0dGluZ0Rvd24gPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBlbmZvcmNlIHNpbmdsZXRvbiBwYXR0ZXJuLlxuICAgKiBJbml0aWFsaXplcyBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gcG9vbCBhbmQgRHJpenpsZSBPUk0gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbm5lY3Rpb25cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uIGZhaWxzIGFmdGVyIGFsbCByZXRyaWVzXG4gICAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbm5lY3Rpb25PcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gdHJ1ZSxcbiAgICAgIGVuYWJsZUF1dG9SZXRyeTogb3B0aW9ucy5lbmFibGVBdXRvUmV0cnkgPz8gdHJ1ZSxcbiAgICAgIG1heFJldHJpZXM6IG9wdGlvbnMubWF4UmV0cmllcyA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9NQVhfUkVUUklFUyB8fCAnMycsIDEwKSxcbiAgICAgIHJldHJ5RGVsYXk6IG9wdGlvbnMucmV0cnlEZWxheSA/PyBwYXJzZUludChwcm9jZXNzLmVudi5EQl9SRVRSWV9ERUxBWV9NUyB8fCAnMTAwMCcsIDEwKSxcbiAgICAgIC8vIEVudi1kcml2ZW4gVExTOiBvbi1ieS1kZWZhdWx0IGluIHByb2R1Y3Rpb24sIGVudi1lbmFibGVhYmxlIGVsc2V3aGVyZS5cbiAgICAgIC8vIGdldEluc3RhbmNlKCkgaXMgbm9ybWFsbHkgY2FsbGVkIHdpdGggbm8gb3B0aW9ucywgc28gdGhpcyBpcyB0aGUgb25seVxuICAgICAgLy8gcGxhY2UgcHJvZHVjdGlvbiBSRFMgY29ubmVjdGlvbnMgcGljayB1cCBTU0wgKGZvcm1lcmx5IGhhcmQtY29kZWQgb2ZmKS5cbiAgICAgIHNzbDogZ2V0U3NsQ29uZmlnKG9wdGlvbnMuc3NsKSxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBzdHJhdGVneVxuICAgIHRoaXMucmV0cnlTdHJhdGVneSA9IG5ldyBDb25uZWN0aW9uUmV0cnlTdHJhdGVneSh7XG4gICAgICBtYXhSZXRyaWVzOiB0aGlzLm9wdGlvbnMubWF4UmV0cmllcyxcbiAgICAgIHJldHJ5RGVsYXlNczogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0RGF0YWJhc2VDb25maWcoKTtcblxuICAgICAgY29uc3QgcG9vbENvbmZpZzogUG9vbENvbmZpZyA9IHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBkYXRhYmFzZTogY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICB1c2VyOiBjb25maWcudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgbWF4OiBjb25maWcubWF4UG9vbFNpemUsXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICAgIHNzbDogdGhpcy5vcHRpb25zLnNzbCxcbiAgICAgICAgYWxsb3dFeGl0T25JZGxlOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wb29sID0gbmV3IFBvb2wocG9vbENvbmZpZyk7XG4gICAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGVycygpO1xuXG4gICAgICB0aGlzLmRiID0gZHJpenpsZSh0aGlzLnBvb2wsIHsgc2NoZW1hIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHRoaXMubG9nQ29ubmVjdGlvbkNvbmZpZyhwb29sQ29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YWJhc2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29ubmVjdGlvbiBjbGFzcy5cbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBpZiBvbmUgZG9lc24ndCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChvbmx5IHVzZWQgb24gZmlyc3QgY2FsbClcbiAgICogQHJldHVybnMgVGhlIHNpbmdsZXRvbiBDb25uZWN0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IENvbm5lY3Rpb24ge1xuICAgIGlmICghQ29ubmVjdGlvbi5pbnN0YW5jZSkge1xuICAgICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uKG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gQ29ubmVjdGlvbi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIHJlY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbG9zZUV4aXN0aW5nIC0gV2hldGhlciB0byBjbG9zZSBleGlzdGluZyBjb25uZWN0aW9uIGJlZm9yZSByZXNldFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyByZXNldChjbG9zZUV4aXN0aW5nOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChDb25uZWN0aW9uLmluc3RhbmNlICYmIGNsb3NlRXhpc3RpbmcpIHtcbiAgICAgIGF3YWl0IENvbm5lY3Rpb24uaW5zdGFuY2UuY2xvc2UoKTtcbiAgICB9XG4gICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgY29ubmVjdGlvbiBpcyBoZWFsdGh5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMucG9vbC5jb25uZWN0KCk7XG4gICAgICAvLyBSZWxlYXNlIGV2ZW4gaWYgdGhlIHByb2JlIHF1ZXJ5IHRocm93cyDigJQgb3RoZXJ3aXNlIGEgZmxha3kgREIgKHRoZSBleGFjdFxuICAgICAgLy8gY2FzZSB0aGlzIGNoZWNrIGV4aXN0cyBmb3IpIGxlYWtzIGEgcG9vbGVkIGNsaWVudCBlYWNoIGZhaWx1cmUgYW5kIGNhblxuICAgICAgLy8gZXhoYXVzdCB0aGUgcG9vbCBvbiB0aGUgcmV0cnkgcGF0aC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeSgnU0VMRUNUIDEnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBzdWNjZXNzZnVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzLmxlbmd0aCA+IDA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGllbnQucmVsZWFzZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbm5lY3Rpb24gcG9vbCBzdGF0aXN0aWNzXG4gICAqXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgY29ubmVjdGlvbiBwb29sIHN0YXRpc3RpY3NcbiAgICovXG4gIHB1YmxpYyBnZXRTdGF0cygpOiBDb25uZWN0aW9uU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbENvdW50OiB0aGlzLnBvb2wudG90YWxDb3VudCxcbiAgICAgIGlkbGVDb3VudDogdGhpcy5wb29sLmlkbGVDb3VudCxcbiAgICAgIHdhaXRpbmdDb3VudDogdGhpcy5wb29sLndhaXRpbmdDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBwb29sIGdyYWNlZnVsbHkuXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCAtIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBjbG9zZSAobXMpXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHBvb2wgaXMgY2xvc2VkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xvc2UodGltZW91dDogbnVtYmVyID0gcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfQ0xPU0VfVElNRU9VVF9NUywgNTAwMCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93bikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Nvbm5lY3Rpb24gaXMgYWxyZWFkeSBzaHV0dGluZyBkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1NodXR0aW5nRG93biA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIGRhdGFiYXNlIGNvbm5lY3Rpb24gcG9vbC4uLicpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IHRoaXMuZ2V0U3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFBvb2wgc3RhdHMgLSBUb3RhbDogJHtzdGF0cy50b3RhbENvdW50fSwgSWRsZTogJHtzdGF0cy5pZGxlQ291bnR9LCBXYWl0aW5nOiAke3N0YXRzLndhaXRpbmdDb3VudH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGEgdGltZW91dCBmb3IgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZSA9IHRoaXMucG9vbC5lbmQoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdDb25uZWN0aW9uIGNsb3NlIHRpbWVvdXQnKSksIHRpbWVvdXQpLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtjbG9zZVByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBjbG9zZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2xvc2luZyBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgY29ubmVjdGlvbiBpcyBpbiBzaHV0ZG93biBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGlzQ2xvc2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NodXR0aW5nRG93bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY29ubmVjdGlvbiBwb29sXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnBvb2wub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIG9uIGlkbGUgY2xpZW50OicsIGVycik7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlQXV0b1JldHJ5ICYmIHRoaXMucmV0cnlTdHJhdGVneS5nZXRBdHRlbXB0cygpIDwgdGhpcy5vcHRpb25zLm1heFJldHJpZXMpIHtcbiAgICAgICAgdm9pZCB0aGlzLnJldHJ5U3RyYXRlZ3kuaGFuZGxlQ29ubmVjdGlvbkVycm9yKGVyciwgKCkgPT4gdGhpcy50ZXN0Q29ubmVjdGlvbigpKS5jYXRjaCgocmV0cnlFcnIpID0+IHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3Rpb24gcmV0cnkgZXJyb3I6JywgcmV0cnlFcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHRoaXMucmV0cnlTdHJhdGVneS5yZXNldCgpOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2xpZW50IHJlbW92ZWQgZnJvbSBwb29sJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gKHNhbml0aXplZClcbiAgICovXG4gIHByaXZhdGUgbG9nQ29ubmVjdGlvbkNvbmZpZyhjb25maWc6IFBvb2xDb25maWcpOiB2b2lkIHtcbiAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgQ29uZmlndXJhdGlvbjonLCB7XG4gICAgICBob3N0OiBgJHtjb25maWcuaG9zdH06JHtjb25maWcucG9ydH1gLFxuICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgIHVzZXI6IGNvbmZpZy51c2VyLFxuICAgICAgbWF4UG9vbFNpemU6IGNvbmZpZy5tYXgsXG4gICAgICBpZGxlVGltZW91dE1zOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1zOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICBzc2w6IGNvbmZpZy5zc2wgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGRhdGFiYXNlIGluc3RhbmNlIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRiIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiAvLyBTZWxlY3QgcXVlcmllc1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKlxuICogLy8gSW5zZXJ0IHF1ZXJpZXNcbiAqIGF3YWl0IGRiLmluc2VydChzY2hlbWEucGx1Z2luKS52YWx1ZXMoeyBuYW1lOiAnbXktcGx1Z2luJyB9KTtcbiAqXG4gKiAvLyBUcmFuc2FjdGlvbnNcbiAqIGF3YWl0IGRiLnRyYW5zYWN0aW9uKGFzeW5jICh0eCkgPT4ge1xuICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgLi4uIH0pO1xuICogICBhd2FpdCB0eC51cGRhdGUoc2NoZW1hLnBsdWdpbikuc2V0KHsgLi4uIH0pO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuXG4vLyBMYXp5IGluaXRpYWxpemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIG9uIG1vZHVsZSBsb2FkXG5sZXQgX2RiSW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhYmFzZSBpbnN0YW5jZSB3aXRoIGxhenkgaW5pdGlhbGl6YXRpb25cbiAqIFRoaXMgYXZvaWRzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBiZWZvcmUgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZFxuICovXG5mdW5jdGlvbiBnZXREYkluc3RhbmNlKCk6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHtcbiAgaWYgKCFfZGJJbnN0YW5jZSkge1xuICAgIF9kYkluc3RhbmNlID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpLmRiO1xuICB9XG4gIHJldHVybiBfZGJJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBQcm94eS1iYXNlZCBsYXp5IGRhdGFiYXNlIGluc3RhbmNlXG4gKiBUaGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgb25seSBjcmVhdGVkIHdoZW4gZmlyc3QgYWNjZXNzZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZGIgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIC8vIENvbm5lY3Rpb24gaXMgY3JlYXRlZCBoZXJlIG9uIGZpcnN0IHVzZSwgbm90IG9uIGltcG9ydFxuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGRiID0gbmV3IFByb3h5KHt9IGFzIFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+LCB7XG4gIGdldChfLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldERiSW5zdGFuY2UoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlW3Byb3AgYXMga2V5b2YgdHlwZW9mIGluc3RhbmNlXTtcbiAgICAvLyBCaW5kIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlIHRvIHByZXNlcnZlICd0aGlzJyBjb250ZXh0XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmJpbmQoaW5zdGFuY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG59KTtcblxuLyoqXG4gKiBHZXRzIHRoZSBDb25uZWN0aW9uIGluc3RhbmNlIGZvciBhZHZhbmNlZCBvcGVyYXRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGdldENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGNvbnN0IGNvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKCk7XG4gKiBjb25zdCBzdGF0cyA9IGNvbm5lY3Rpb24uZ2V0U3RhdHMoKTtcbiAqIGNvbnNvbGUubG9nKGBBY3RpdmUgY29ubmVjdGlvbnM6ICR7c3RhdHMudG90YWxDb3VudH1gKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbigpOiBDb25uZWN0aW9uIHtcbiAgcmV0dXJuIENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNsb3NlQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogcHJvY2Vzcy5vbignU0lHVEVSTScsIGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY2xvc2VDb25uZWN0aW9uKCk7XG4gKiAgIHByb2Nlc3MuZXhpdCgwKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgX2RiSW5zdGFuY2UgPSBudWxsOyAvLyBSZXNldCBsYXp5IGluc3RhbmNlXG59XG5cbi8qKlxuICogVGVzdHMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIGhlYWx0aHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgdGVzdENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGlmIChhd2FpdCB0ZXN0Q29ubmVjdGlvbigpKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdEYXRhYmFzZSBpcyByZWFkeScpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5lcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsZWQnKTtcbiAqICAgcHJvY2Vzcy5leGl0KDEpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q29ubmVjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbiAgcmV0dXJuIGNvbm5lY3Rpb24udGVzdENvbm5lY3Rpb24oKTtcbn1cbiJdfQ==
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
+
import { type RetryConfig } from '@pipeline-builder/api-core';
|
|
2
|
+
export type { RetryConfig };
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* Implements exponential backoff retry strategy for database connections.
|
|
4
|
+
* Exponential-backoff retry for database connections.
|
|
5
|
+
*
|
|
6
|
+
* The backoff DECISION (how many attempts, how long to wait, jitter) is
|
|
7
|
+
* api-core's `getErrorRetryDecision` — this class owns only the connection-
|
|
8
|
+
* specific concerns (attempt tracking, logging, the health-probe recovery
|
|
9
|
+
* path). It previously carried a second, subtly different implementation: its
|
|
10
|
+
* own `RetryConfig` (`baseDelay` rather than `retryDelayMs`), no jitter — so a
|
|
11
|
+
* pool of replicas retried in lockstep after a database blip — and an
|
|
12
|
+
* off-by-one in the loop condition that gave `maxRetries: 3` only TWO retries.
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* - Attempt tracking and logging
|
|
16
|
-
* - Graceful failure after max retries
|
|
14
|
+
* `maxRetries` now means what it says: N retries AFTER the initial attempt, so
|
|
15
|
+
* `{ maxRetries: 3 }` makes up to 4 attempts total.
|
|
17
16
|
*
|
|
18
17
|
* @example
|
|
19
18
|
* ```typescript
|
|
20
|
-
* const strategy = new ConnectionRetryStrategy({ maxRetries: 3,
|
|
19
|
+
* const strategy = new ConnectionRetryStrategy({ maxRetries: 3, retryDelayMs: 1000 });
|
|
21
20
|
*
|
|
22
21
|
* const result = await strategy.execute(async () => {
|
|
23
22
|
* return await db.query('SELECT 1');
|
|
@@ -29,38 +28,32 @@ export declare class ConnectionRetryStrategy {
|
|
|
29
28
|
private attempts;
|
|
30
29
|
constructor(config: RetryConfig);
|
|
31
30
|
/**
|
|
32
|
-
* Executes an operation with
|
|
31
|
+
* Executes an operation, retrying transient failures with jittered
|
|
32
|
+
* exponential backoff.
|
|
33
33
|
*
|
|
34
34
|
* @param operation - Async function to execute with retries
|
|
35
35
|
* @returns Promise resolving to operation result
|
|
36
|
-
* @throws
|
|
36
|
+
* @throws the last error once the retry budget is exhausted
|
|
37
37
|
*/
|
|
38
38
|
execute<T>(operation: () => Promise<T>): Promise<T>;
|
|
39
39
|
/**
|
|
40
|
-
* Handles connection errors with retry tracking
|
|
40
|
+
* Handles connection errors with retry tracking.
|
|
41
41
|
*
|
|
42
42
|
* @param error - Error that occurred
|
|
43
43
|
* @param testConnection - Function to test if connection is restored
|
|
44
44
|
*/
|
|
45
45
|
handleConnectionError(error: Error, testConnection: () => Promise<boolean>): Promise<void>;
|
|
46
46
|
/**
|
|
47
|
-
* Resets the attempt counter
|
|
48
|
-
* Call this after a successful operation
|
|
47
|
+
* Resets the attempt counter.
|
|
48
|
+
* Call this after a successful operation.
|
|
49
49
|
*/
|
|
50
50
|
reset(): void;
|
|
51
51
|
/**
|
|
52
|
-
* Gets the current attempt count
|
|
52
|
+
* Gets the current attempt count.
|
|
53
53
|
*/
|
|
54
54
|
getAttempts(): number;
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* @param attempt - Current attempt number (1-indexed)
|
|
59
|
-
* @returns Delay in milliseconds
|
|
60
|
-
*/
|
|
61
|
-
private calculateBackoff;
|
|
62
|
-
/**
|
|
63
|
-
* Sleeps for the specified duration
|
|
56
|
+
* Sleeps for the specified duration.
|
|
64
57
|
*
|
|
65
58
|
* @param ms - Milliseconds to sleep
|
|
66
59
|
*/
|
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { createLogger } from '@pipeline-builder/api-core';
|
|
3
|
+
import { createLogger, getErrorRetryDecision, errorMessage } from '@pipeline-builder/api-core';
|
|
4
4
|
const logger = createLogger('retry-strategy');
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Exponential-backoff retry for database connections.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* The backoff DECISION (how many attempts, how long to wait, jitter) is
|
|
9
|
+
* api-core's `getErrorRetryDecision` — this class owns only the connection-
|
|
10
|
+
* specific concerns (attempt tracking, logging, the health-probe recovery
|
|
11
|
+
* path). It previously carried a second, subtly different implementation: its
|
|
12
|
+
* own `RetryConfig` (`baseDelay` rather than `retryDelayMs`), no jitter — so a
|
|
13
|
+
* pool of replicas retried in lockstep after a database blip — and an
|
|
14
|
+
* off-by-one in the loop condition that gave `maxRetries: 3` only TWO retries.
|
|
15
|
+
*
|
|
16
|
+
* `maxRetries` now means what it says: N retries AFTER the initial attempt, so
|
|
17
|
+
* `{ maxRetries: 3 }` makes up to 4 attempts total.
|
|
12
18
|
*
|
|
13
19
|
* @example
|
|
14
20
|
* ```typescript
|
|
15
|
-
* const strategy = new ConnectionRetryStrategy({ maxRetries: 3,
|
|
21
|
+
* const strategy = new ConnectionRetryStrategy({ maxRetries: 3, retryDelayMs: 1000 });
|
|
16
22
|
*
|
|
17
23
|
* const result = await strategy.execute(async () => {
|
|
18
24
|
* return await db.query('SELECT 1');
|
|
@@ -26,92 +32,85 @@ export class ConnectionRetryStrategy {
|
|
|
26
32
|
this.config = config;
|
|
27
33
|
}
|
|
28
34
|
/**
|
|
29
|
-
* Executes an operation with
|
|
35
|
+
* Executes an operation, retrying transient failures with jittered
|
|
36
|
+
* exponential backoff.
|
|
30
37
|
*
|
|
31
38
|
* @param operation - Async function to execute with retries
|
|
32
39
|
* @returns Promise resolving to operation result
|
|
33
|
-
* @throws
|
|
40
|
+
* @throws the last error once the retry budget is exhausted
|
|
34
41
|
*/
|
|
35
42
|
async execute(operation) {
|
|
36
43
|
this.attempts = 0;
|
|
37
|
-
|
|
44
|
+
// `attempt` is ZERO-BASED and counts retries already made, matching
|
|
45
|
+
// getErrorRetryDecision's contract: it allows a retry while
|
|
46
|
+
// `attempt < maxRetries`, so the loop makes maxRetries + 1 attempts.
|
|
47
|
+
for (let attempt = 0;; attempt++) {
|
|
38
48
|
try {
|
|
39
49
|
const result = await operation();
|
|
40
|
-
if (
|
|
50
|
+
if (attempt > 0) {
|
|
41
51
|
logger.info('Operation succeeded after retry');
|
|
42
52
|
}
|
|
43
53
|
return result;
|
|
44
54
|
}
|
|
45
55
|
catch (error) {
|
|
46
|
-
this.attempts
|
|
47
|
-
|
|
56
|
+
this.attempts = attempt + 1;
|
|
57
|
+
const decision = getErrorRetryDecision(attempt, this.config);
|
|
58
|
+
if (!decision.shouldRetry) {
|
|
48
59
|
logger.error(`Max retry attempts (${this.config.maxRetries}) reached`);
|
|
49
60
|
throw error;
|
|
50
61
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
await this.sleep(delay);
|
|
62
|
+
logger.warn(`Operation failed (attempt ${this.attempts}/${this.config.maxRetries}), retrying in ${decision.delayMs}ms...`, { error: errorMessage(error) });
|
|
63
|
+
await this.sleep(decision.delayMs);
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
|
-
throw new Error('Retry logic failed unexpectedly');
|
|
57
66
|
}
|
|
58
67
|
/**
|
|
59
|
-
* Handles connection errors with retry tracking
|
|
68
|
+
* Handles connection errors with retry tracking.
|
|
60
69
|
*
|
|
61
70
|
* @param error - Error that occurred
|
|
62
71
|
* @param testConnection - Function to test if connection is restored
|
|
63
72
|
*/
|
|
64
73
|
async handleConnectionError(error, testConnection) {
|
|
74
|
+
// Decide from the attempts already spent (zero-based), THEN record this one,
|
|
75
|
+
// so the budget matches `execute`'s.
|
|
76
|
+
const decision = getErrorRetryDecision(this.attempts, this.config);
|
|
65
77
|
this.attempts++;
|
|
66
78
|
logger.error(`Connection error (attempt ${this.attempts}/${this.config.maxRetries}):`, error.message);
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
logger.error('Connection test failed after retry');
|
|
79
|
-
}
|
|
79
|
+
if (!decision.shouldRetry) {
|
|
80
|
+
logger.error('Max connection retry attempts reached');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
logger.info(`Retrying connection in ${decision.delayMs}ms...`);
|
|
84
|
+
await this.sleep(decision.delayMs);
|
|
85
|
+
try {
|
|
86
|
+
const isHealthy = await testConnection();
|
|
87
|
+
if (isHealthy) {
|
|
88
|
+
logger.info('Connection restored');
|
|
89
|
+
this.attempts = 0; // Reset on successful connection
|
|
80
90
|
}
|
|
81
|
-
|
|
82
|
-
logger.error('
|
|
91
|
+
else {
|
|
92
|
+
logger.error('Connection test failed after retry');
|
|
83
93
|
}
|
|
84
94
|
}
|
|
85
|
-
|
|
86
|
-
logger.error('
|
|
95
|
+
catch (retryError) {
|
|
96
|
+
logger.error('Retry failed:', retryError);
|
|
87
97
|
}
|
|
88
98
|
}
|
|
89
99
|
/**
|
|
90
|
-
* Resets the attempt counter
|
|
91
|
-
* Call this after a successful operation
|
|
100
|
+
* Resets the attempt counter.
|
|
101
|
+
* Call this after a successful operation.
|
|
92
102
|
*/
|
|
93
103
|
reset() {
|
|
94
104
|
this.attempts = 0;
|
|
95
105
|
}
|
|
96
106
|
/**
|
|
97
|
-
* Gets the current attempt count
|
|
107
|
+
* Gets the current attempt count.
|
|
98
108
|
*/
|
|
99
109
|
getAttempts() {
|
|
100
110
|
return this.attempts;
|
|
101
111
|
}
|
|
102
112
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* @param attempt - Current attempt number (1-indexed)
|
|
106
|
-
* @returns Delay in milliseconds
|
|
107
|
-
*/
|
|
108
|
-
calculateBackoff(attempt) {
|
|
109
|
-
const base = this.config.baseDelay * Math.pow(2, attempt - 1);
|
|
110
|
-
const jitter = Math.random() * 0.1 * base;
|
|
111
|
-
return base + jitter;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Sleeps for the specified duration
|
|
113
|
+
* Sleeps for the specified duration.
|
|
115
114
|
*
|
|
116
115
|
* @param ms - Milliseconds to sleep
|
|
117
116
|
*/
|
|
@@ -119,4 +118,4 @@ export class ConnectionRetryStrategy {
|
|
|
119
118
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
120
119
|
}
|
|
121
120
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvcmV0cnktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFvQixZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUk5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFHTCxNQUFNO0lBRjNCLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFckIsWUFBNkIsTUFBbUI7c0JBQW5CLE1BQU07SUFBZ0IsQ0FBQztJQUVwRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBSSxTQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVsQixvRUFBb0U7UUFDcEUsNERBQTREO1FBQzVELHFFQUFxRTtRQUNyRSxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsR0FBSSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO2dCQUNELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxDQUFDO29CQUN2RSxNQUFNLEtBQUssQ0FBQztnQkFDZCxDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsNkJBQTZCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLGtCQUFrQixRQUFRLENBQUMsT0FBTyxPQUFPLEVBQzdHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUMvQixDQUFDO2dCQUVGLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBWSxFQUFFLGNBQXNDO1FBQzlFLDZFQUE2RTtRQUM3RSxxQ0FBcUM7UUFDckMsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLE1BQU0sQ0FBQyxLQUFLLENBQ1YsNkJBQTZCLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFDeEUsS0FBSyxDQUFDLE9BQU8sQ0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDdEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixRQUFRLENBQUMsT0FBTyxPQUFPLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sY0FBYyxFQUFFLENBQUM7WUFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1lBQ3RELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsRUFBVTtRQUN0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGdldEVycm9yUmV0cnlEZWNpc2lvbiwgdHlwZSBSZXRyeUNvbmZpZywgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3JldHJ5LXN0cmF0ZWd5Jyk7XG5cbmV4cG9ydCB0eXBlIHsgUmV0cnlDb25maWcgfTtcblxuLyoqXG4gKiBFeHBvbmVudGlhbC1iYWNrb2ZmIHJldHJ5IGZvciBkYXRhYmFzZSBjb25uZWN0aW9ucy5cbiAqXG4gKiBUaGUgYmFja29mZiBERUNJU0lPTiAoaG93IG1hbnkgYXR0ZW1wdHMsIGhvdyBsb25nIHRvIHdhaXQsIGppdHRlcikgaXNcbiAqIGFwaS1jb3JlJ3MgYGdldEVycm9yUmV0cnlEZWNpc2lvbmAg4oCUIHRoaXMgY2xhc3Mgb3ducyBvbmx5IHRoZSBjb25uZWN0aW9uLVxuICogc3BlY2lmaWMgY29uY2VybnMgKGF0dGVtcHQgdHJhY2tpbmcsIGxvZ2dpbmcsIHRoZSBoZWFsdGgtcHJvYmUgcmVjb3ZlcnlcbiAqIHBhdGgpLiBJdCBwcmV2aW91c2x5IGNhcnJpZWQgYSBzZWNvbmQsIHN1YnRseSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb246IGl0c1xuICogb3duIGBSZXRyeUNvbmZpZ2AgKGBiYXNlRGVsYXlgIHJhdGhlciB0aGFuIGByZXRyeURlbGF5TXNgKSwgbm8gaml0dGVyIOKAlCBzbyBhXG4gKiBwb29sIG9mIHJlcGxpY2FzIHJldHJpZWQgaW4gbG9ja3N0ZXAgYWZ0ZXIgYSBkYXRhYmFzZSBibGlwIOKAlCBhbmQgYW5cbiAqIG9mZi1ieS1vbmUgaW4gdGhlIGxvb3AgY29uZGl0aW9uIHRoYXQgZ2F2ZSBgbWF4UmV0cmllczogM2Agb25seSBUV08gcmV0cmllcy5cbiAqXG4gKiBgbWF4UmV0cmllc2Agbm93IG1lYW5zIHdoYXQgaXQgc2F5czogTiByZXRyaWVzIEFGVEVSIHRoZSBpbml0aWFsIGF0dGVtcHQsIHNvXG4gKiBgeyBtYXhSZXRyaWVzOiAzIH1gIG1ha2VzIHVwIHRvIDQgYXR0ZW1wdHMgdG90YWwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0cmF0ZWd5ID0gbmV3IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5KHsgbWF4UmV0cmllczogMywgcmV0cnlEZWxheU1zOiAxMDAwIH0pO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0cmF0ZWd5LmV4ZWN1dGUoYXN5bmMgKCkgPT4ge1xuICogICByZXR1cm4gYXdhaXQgZGIucXVlcnkoJ1NFTEVDVCAxJyk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblJldHJ5U3RyYXRlZ3kge1xuICBwcml2YXRlIGF0dGVtcHRzID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUmV0cnlDb25maWcpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFuIG9wZXJhdGlvbiwgcmV0cnlpbmcgdHJhbnNpZW50IGZhaWx1cmVzIHdpdGggaml0dGVyZWRcbiAgICogZXhwb25lbnRpYWwgYmFja29mZi5cbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIEFzeW5jIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2l0aCByZXRyaWVzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG9wZXJhdGlvbiByZXN1bHRcbiAgICogQHRocm93cyB0aGUgbGFzdCBlcnJvciBvbmNlIHRoZSByZXRyeSBidWRnZXQgaXMgZXhoYXVzdGVkXG4gICAqL1xuICBhc3luYyBleGVjdXRlPFQ+KG9wZXJhdGlvbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHRoaXMuYXR0ZW1wdHMgPSAwO1xuXG4gICAgLy8gYGF0dGVtcHRgIGlzIFpFUk8tQkFTRUQgYW5kIGNvdW50cyByZXRyaWVzIGFscmVhZHkgbWFkZSwgbWF0Y2hpbmdcbiAgICAvLyBnZXRFcnJvclJldHJ5RGVjaXNpb24ncyBjb250cmFjdDogaXQgYWxsb3dzIGEgcmV0cnkgd2hpbGVcbiAgICAvLyBgYXR0ZW1wdCA8IG1heFJldHJpZXNgLCBzbyB0aGUgbG9vcCBtYWtlcyBtYXhSZXRyaWVzICsgMSBhdHRlbXB0cy5cbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnT3BlcmF0aW9uIHN1Y2NlZWRlZCBhZnRlciByZXRyeScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmF0dGVtcHRzID0gYXR0ZW1wdCArIDE7XG4gICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZ2V0RXJyb3JSZXRyeURlY2lzaW9uKGF0dGVtcHQsIHRoaXMuY29uZmlnKTtcbiAgICAgICAgaWYgKCFkZWNpc2lvbi5zaG91bGRSZXRyeSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgTWF4IHJldHJ5IGF0dGVtcHRzICgke3RoaXMuY29uZmlnLm1heFJldHJpZXN9KSByZWFjaGVkYCk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgT3BlcmF0aW9uIGZhaWxlZCAoYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdHN9LyR7dGhpcy5jb25maWcubWF4UmV0cmllc30pLCByZXRyeWluZyBpbiAke2RlY2lzaW9uLmRlbGF5TXN9bXMuLi5gLFxuICAgICAgICAgIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGRlY2lzaW9uLmRlbGF5TXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbm5lY3Rpb24gZXJyb3JzIHdpdGggcmV0cnkgdHJhY2tpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIEVycm9yIHRoYXQgb2NjdXJyZWRcbiAgICogQHBhcmFtIHRlc3RDb25uZWN0aW9uIC0gRnVuY3Rpb24gdG8gdGVzdCBpZiBjb25uZWN0aW9uIGlzIHJlc3RvcmVkXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb25uZWN0aW9uRXJyb3IoZXJyb3I6IEVycm9yLCB0ZXN0Q29ubmVjdGlvbjogKCkgPT4gUHJvbWlzZTxib29sZWFuPik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIERlY2lkZSBmcm9tIHRoZSBhdHRlbXB0cyBhbHJlYWR5IHNwZW50ICh6ZXJvLWJhc2VkKSwgVEhFTiByZWNvcmQgdGhpcyBvbmUsXG4gICAgLy8gc28gdGhlIGJ1ZGdldCBtYXRjaGVzIGBleGVjdXRlYCdzLlxuICAgIGNvbnN0IGRlY2lzaW9uID0gZ2V0RXJyb3JSZXRyeURlY2lzaW9uKHRoaXMuYXR0ZW1wdHMsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmF0dGVtcHRzKys7XG5cbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBgQ29ubmVjdGlvbiBlcnJvciAoYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdHN9LyR7dGhpcy5jb25maWcubWF4UmV0cmllc30pOmAsXG4gICAgICBlcnJvci5tZXNzYWdlLFxuICAgICk7XG5cbiAgICBpZiAoIWRlY2lzaW9uLnNob3VsZFJldHJ5KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ01heCBjb25uZWN0aW9uIHJldHJ5IGF0dGVtcHRzIHJlYWNoZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbyhgUmV0cnlpbmcgY29ubmVjdGlvbiBpbiAke2RlY2lzaW9uLmRlbGF5TXN9bXMuLi5gKTtcbiAgICBhd2FpdCB0aGlzLnNsZWVwKGRlY2lzaW9uLmRlbGF5TXMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzSGVhbHRoeSA9IGF3YWl0IHRlc3RDb25uZWN0aW9uKCk7XG4gICAgICBpZiAoaXNIZWFsdGh5KSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdDb25uZWN0aW9uIHJlc3RvcmVkJyk7XG4gICAgICAgIHRoaXMuYXR0ZW1wdHMgPSAwOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignQ29ubmVjdGlvbiB0ZXN0IGZhaWxlZCBhZnRlciByZXRyeScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmV0cnkgZmFpbGVkOicsIHJldHJ5RXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGVtcHQgY291bnRlci5cbiAgICogQ2FsbCB0aGlzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IGF0dGVtcHQgY291bnQuXG4gICAqL1xuICBnZXRBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmF0dGVtcHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwcyBmb3IgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIG1zIC0gTWlsbGlzZWNvbmRzIHRvIHNsZWVwXG4gICAqL1xuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -596,23 +596,6 @@ export declare const complianceRule: import("drizzle-orm/pg-core").PgTableWithCo
|
|
|
596
596
|
length: 10;
|
|
597
597
|
$type: RuleScope;
|
|
598
598
|
}>;
|
|
599
|
-
forkedFromRuleId: import("drizzle-orm/pg-core").PgColumn<{
|
|
600
|
-
name: "forked_from_rule_id";
|
|
601
|
-
tableName: "compliance_rules";
|
|
602
|
-
dataType: "string";
|
|
603
|
-
columnType: "PgUUID";
|
|
604
|
-
data: string;
|
|
605
|
-
driverParam: string;
|
|
606
|
-
notNull: false;
|
|
607
|
-
hasDefault: false;
|
|
608
|
-
isPrimaryKey: false;
|
|
609
|
-
isAutoincrement: false;
|
|
610
|
-
hasRuntimeDefault: false;
|
|
611
|
-
enumValues: undefined;
|
|
612
|
-
baseColumn: never;
|
|
613
|
-
identity: undefined;
|
|
614
|
-
generated: undefined;
|
|
615
|
-
}, {}, {}>;
|
|
616
599
|
suppressNotification: import("drizzle-orm/pg-core").PgColumn<{
|
|
617
600
|
name: "suppress_notification";
|
|
618
601
|
tableName: "compliance_rules";
|
|
@@ -61,8 +61,6 @@ export const complianceRule = pgTable('compliance_rules', {
|
|
|
61
61
|
effectiveUntil: timestamp('effective_until', { withTimezone: true }),
|
|
62
62
|
// Scope
|
|
63
63
|
scope: varchar('scope', { length: 10 }).$type().default('org').notNull(),
|
|
64
|
-
// Forking tracks which published rule this org rule was copied from
|
|
65
|
-
forkedFromRuleId: uuid('forked_from_rule_id'),
|
|
66
64
|
// Notification override
|
|
67
65
|
suppressNotification: boolean('suppress_notification').default(false).notNull(),
|
|
68
66
|
// Org → team hierarchy: when true, this (parent-org) rule is also enforced on
|
|
@@ -364,4 +362,4 @@ export const complianceReportSchedule = pgTable('compliance_report_schedules', {
|
|
|
364
362
|
.on(table.isActive, table.nextRunAt),
|
|
365
363
|
orgIdx: index('compliance_report_schedule_org_idx').on(table.orgId),
|
|
366
364
|
}));
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvY29tcGxpYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlEM0g7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtJQUM3RCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDMUUsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ3pELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0lBQ2pGLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN6RCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxF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QyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDYixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsNENBQTRDLENBQUM7U0FDbEUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUN0QyxNQUFNLEVBQUUsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Q0FDcEUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJvb2xlYW4sIGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21wbGlhbmNlIFNlcnZpY2UgVGFibGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ29tcGxpYW5jZSBydWxlIHNldmVyaXR5IGxldmVscy5cbiAqL1xuZXhwb3J0IHR5cGUgUnVsZVNldmVyaXR5ID0gJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdjcml0aWNhbCc7XG5cbi8qKlxuICogQ29tcGxpYW5jZSBydWxlIHRhcmdldCBlbnRpdHkgdHlwZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFJ1bGVUYXJnZXQgPSAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG5cbi8qKlxuICogQ29tcGxpYW5jZSBydWxlIG9wZXJhdG9ycyBmb3IgZmllbGQgZXZhbHVhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgUnVsZU9wZXJhdG9yID1cbiAgfCAnZXEnIHwgJ25lcSdcbiAgfCAnY29udGFpbnMnIHwgJ25vdENvbnRhaW5zJ1xuICB8ICdyZWdleCdcbiAgfCAnZ3QnIHwgJ2d0ZScgfCAnbHQnIHwgJ2x0ZSdcbiAgfCAnaW4nIHwgJ25vdEluJ1xuICB8ICdleGlzdHMnIHwgJ25vdEV4aXN0cycgfCAnbm90RW1wdHknXG4gIHwgJ2NvdW50R3QnIHwgJ2NvdW50THQnXG4gIHwgJ2xlbmd0aEd0JyB8ICdsZW5ndGhMdCc7XG5cbi8qKlxuICogQ3Jvc3MtZmllbGQgY29uZGl0aW9uIG1vZGUgZm9yIG11bHRpLWNvbmRpdGlvbiBydWxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgUnVsZUNvbmRpdGlvbk1vZGUgPSAnYWxsJyB8ICdhbnknO1xuXG4vKipcbiAqIFJ1bGUgc2NvcGUgIG9yZy1sZXZlbCBvciBwdWJsaXNoZWQgKHN5c3RlbSBvcmcgb25seSwgb3B0LWluIHZpYSBzdWJzY3JpcHRpb24pLlxuICovXG5leHBvcnQgdHlwZSBSdWxlU2NvcGUgPSAnb3JnJyB8ICdwdWJsaXNoZWQnO1xuXG4vKipcbiAqIEEgc2luZ2xlIGNvbmRpdGlvbiBpbiBhIGNyb3NzLWZpZWxkIHJ1bGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUNvbmRpdGlvbiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBvcGVyYXRvcj86IFJ1bGVPcGVyYXRvcjtcbiAgdmFsdWU/OiB1bmtub3duO1xuICBkZXBlbmRzT25SdWxlPzogc3RyaW5nOyAvLyBydWxlIElEICBvbmx5IGV2YWx1YXRlIGlmIHJlZmVyZW5jZWQgcnVsZSBwYXNzZWRcbn1cblxuLyoqXG4gKiBDb21wbGlhbmNlIHBvbGljaWVzIGdyb3VwIHJ1bGVzIGludG8gbmFtZWQgc2V0cyB0aGF0IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIHRvZ2V0aGVyLlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX3BvbGljaWVzXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUG9saWN5ID0gcGdUYWJsZSgnY29tcGxpYW5jZV9wb2xpY2llcycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkuZGVmYXVsdChTWVNURU1fT1JHX0lEKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpLmRlZmF1bHQoJ3N5c3RlbScpLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKS5kZWZhdWx0KCdzeXN0ZW0nKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICB2ZXJzaW9uOiB2YXJjaGFyKCd2ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pLmRlZmF1bHQoJzEuMC4wJykubm90TnVsbCgpLFxuICBpc1RlbXBsYXRlOiBib29sZWFuKCdpc190ZW1wbGF0ZScpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcblxuICAvLyBObyBzaGFyaW5nIHJ1bmc6IGNvbXBsaWFuY2UgdmlzaWJpbGl0eSBpcyBvcmcgKyB0aGUgc3lzdGVtLW9yZyBjYXJ2ZS1vdXQsXG4gIC8vIGFwcGxpZWQgaW4gYGJ1aWxkQ29tcGxpYW5jZVBvbGljeUNvbmRpdGlvbnNgIC8gYGJ1aWxkQ29tcGxpYW5jZVJ1bGVDb25kaXRpb25zYC5cbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICBwdXJnZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcG9saWN5X3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIG9yZ0FjdGl2ZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcG9saWN5X29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcbiAgdGVtcGxhdGVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3BvbGljeV90ZW1wbGF0ZV9pZHgnKS5vbih0YWJsZS5pc1RlbXBsYXRlKSxcbiAgbmFtZU9yZ1ZlcnNpb25VbmlxdWU6IHVuaXF1ZUluZGV4KCdjb21wbGlhbmNlX3BvbGljeV9uYW1lX29yZ192ZXJzaW9uX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5uYW1lLCB0YWJsZS52ZXJzaW9uKSxcbn0pKTtcblxuLyoqXG4gKiBDb21wbGlhbmNlIHJ1bGVzIGRlZmluZSBpbmRpdmlkdWFsIGNoZWNrcyBhZ2FpbnN0IHBsdWdpbi9waXBlbGluZSBhdHRyaWJ1dGVzLlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX3J1bGVzXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUnVsZSA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfcnVsZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5kZWZhdWx0KCdzeXN0ZW0nKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JykuZGVmYXVsdCgnc3lzdGVtJykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgLy8gUnVsZSBpZGVudGl0eVxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBwb2xpY3lJZDogdXVpZCgncG9saWN5X2lkJykucmVmZXJlbmNlcygoKSA9PiBjb21wbGlhbmNlUG9saWN5LmlkLCB7IG9uRGVsZXRlOiAnc2V0IG51bGwnIH0pLFxuICBwcmlvcml0eTogaW50ZWdlcigncHJpb3JpdHknKS5kZWZhdWx0KDApLm5vdE51bGwoKSxcbiAgdGFyZ2V0OiB2YXJjaGFyKCd0YXJnZXQnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8UnVsZVRhcmdldD4oKS5ub3ROdWxsKCksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxSdWxlU2V2ZXJpdHk+KCkuZGVmYXVsdCgnZXJyb3InKS5ub3ROdWxsKCksXG5cbiAgLy8gQ2F0ZWdvcml6YXRpb25cbiAgdGFnczoganNvbmIoJ3RhZ3MnKS4kdHlwZTxzdHJpbmdbXT4oKS5kZWZhdWx0KFtdKS5ub3ROdWxsKCksXG5cbiAgLy8gU2NoZWR1bGluZ1xuICBlZmZlY3RpdmVGcm9tOiB0aW1lc3RhbXAoJ2VmZmVjdGl2ZV9mcm9tJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGVmZmVjdGl2ZVVudGlsOiB0aW1lc3RhbXAoJ2VmZmVjdGl2ZV91bnRpbCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuXG4gIC8vIFNjb3BlXG4gIHNjb3BlOiB2YXJjaGFyKCdzY29wZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxSdWxlU2NvcGU+KCkuZGVmYXVsdCgnb3JnJykubm90TnVsbCgpLFxuXG4gIC8vIEZvcmtpbmcgIHRyYWNrcyB3aGljaCBwdWJsaXNoZWQgcnVsZSB0aGlzIG9yZyBydWxlIHdhcyBjb3BpZWQgZnJvbVxuICBmb3JrZWRGcm9tUnVsZUlkOiB1dWlkKCdmb3JrZWRfZnJvbV9ydWxlX2lkJyksXG5cbiAgLy8gTm90aWZpY2F0aW9uIG92ZXJyaWRlXG4gIHN1cHByZXNzTm90aWZpY2F0aW9uOiBib29sZWFuKCdzdXBwcmVzc19ub3RpZmljYXRpb24nKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG5cbiAgLy8gT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeTogd2hlbiB0cnVlLCB0aGlzIChwYXJlbnQtb3JnKSBydWxlIGlzIGFsc28gZW5mb3JjZWQgb25cbiAgLy8gZGVzY2VuZGFudCB0ZWFtIG9yZ3MgZHVyaW5nIHRoZWlyIGNvbXBsaWFuY2UgZXZhbHVhdGlvbi5cbiAgcHJvcGFnYXRlVG9DaGlsZHJlbjogYm9vbGVhbigncHJvcGFnYXRlX3RvX2NoaWxkcmVuJykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuXG4gIC8vIFNpbmdsZS1maWVsZCBjb25kaXRpb25cbiAgZmllbGQ6IHZhcmNoYXIoJ2ZpZWxkJywgeyBsZW5ndGg6IDEwMCB9KSxcbiAgb3BlcmF0b3I6IHZhcmNoYXIoJ29wZXJhdG9yJywgeyBsZW5ndGg6IDIwIH0pLiR0eXBlPFJ1bGVPcGVyYXRvcj4oKSxcbiAgdmFsdWU6IGpzb25iKCd2YWx1ZScpLFxuXG4gIC8vIENyb3NzLWZpZWxkIGNvbmRpdGlvbnMgKG92ZXJyaWRlcyBzaW5nbGUtZmllbGQgd2hlbiBwcmVzZW50KVxuICBjb25kaXRpb25zOiBqc29uYignY29uZGl0aW9ucycpLiR0eXBlPFJ1bGVDb25kaXRpb25bXT4oKSxcbiAgY29uZGl0aW9uTW9kZTogdmFyY2hhcignY29uZGl0aW9uX21vZGUnLCB7IGxlbmd0aDogNSB9KS4kdHlwZTxSdWxlQ29uZGl0aW9uTW9kZT4oKS5kZWZhdWx0KCdhbGwnKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHlcbiAgLy8gTm8gc2hhcmluZyBydW5nOiBjb21wbGlhbmNlIHZpc2liaWxpdHkgaXMgb3JnICsgdGhlIHN5c3RlbS1vcmcgY2FydmUtb3V0LFxuICAvLyBhcHBsaWVkIGluIGBidWlsZENvbXBsaWFuY2VQb2xpY3lDb25kaXRpb25zYCAvIGBidWlsZENvbXBsaWFuY2VSdWxlQ29uZGl0aW9uc2AuXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcHVyZ2VJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgb3JnVGFyZ2V0QWN0aXZlSWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX29yZ190YXJnZXRfYWN0aXZlX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS50YXJnZXQsIHRhYmxlLmlzQWN0aXZlKSxcbiAgb3JnUG9saWN5SWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX29yZ19wb2xpY3lfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnBvbGljeUlkKSxcbiAgcHJpb3JpdHlJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfcHJpb3JpdHlfaWR4Jykub24odGFibGUucHJpb3JpdHkpLFxuICBzY29wZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9zY29wZV9pZHgnKS5vbih0YWJsZS5zY29wZSksXG4gIGVmZmVjdGl2ZUZyb21JZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfZWZmZWN0aXZlX2Zyb21faWR4Jykub24odGFibGUuZWZmZWN0aXZlRnJvbSksXG4gIG5hbWVPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdjb21wbGlhbmNlX3J1bGVfbmFtZV9vcmdfdW5pcXVlJykub24odGFibGUub3JnSWQsIHRhYmxlLm5hbWUpLFxuICAvLyBQYXJ0aWFsIEdJTiBpbmRleCBiYWNraW5nIHRoZSBjdXJhdGVkLXNldCBsb29rdXBcbiAgLy8gYGZpbmRQdWJsaXNoZWRSdWxlSWRzQnlTZXRUYWdgIChzdWJzY3JpcHRpb24tc2VydmljZSk6IGEgY29udGFpbm1lbnQgcXVlcnlcbiAgLy8gYHRhZ3MgQD4gJ1tcInNldDo8eD5cIl0nOjpqc29uYmAgcmVzdHJpY3RlZCB0byBwdWJsaXNoZWQgcm93cy4gYGpzb25iX3BhdGhfb3BzYFxuICAvLyBpcyB0aGUgc21hbGxlci9mYXN0ZXIgb3BjbGFzcyDigJQgaXQgb25seSBzdXBwb3J0cyBgQD5gIChleGFjdGx5IHRoaXMgcXVlcnkpLFxuICAvLyBub3Qga2V5LWV4aXN0ZW5jZSwgd2hpY2ggd2UgbmV2ZXIgcnVuIGFnYWluc3QgYHRhZ3NgLiBTY29wZWQgdG9cbiAgLy8gYHNjb3BlID0gJ3B1Ymxpc2hlZCdgIHNvIG9ubHkgdGhlIGN1cmF0ZWQgY2F0YWxvZyAoYSBoYW5kZnVsIG9mIHJvd3MpIGlzXG4gIC8vIGluZGV4ZWQsIG5vdCBldmVyeSBvcmcncyBwcml2YXRlIHJ1bGUgdGFncy5cbiAgLy8gTUlHUkFUSU9OIFJFUVVJUkVEOiBydW4gYHBucG0gZHJpenpsZS1raXQgZ2VuZXJhdGVgIGFmdGVyIHB1bGxpbmcuXG4gIHB1Ymxpc2hlZFRhZ3NHaW5JZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfcHVibGlzaGVkX3RhZ3NfZ2luX2lkeCcpXG4gICAgLnVzaW5nKCdnaW4nLCB0YWJsZS50YWdzLm9wKCdqc29uYl9wYXRoX29wcycpKVxuICAgIC53aGVyZShzcWxgc2NvcGUgPSAncHVibGlzaGVkJ2ApLFxufSkpO1xuXG4vKipcbiAqIFRyYWNrcyBldmVyeSBjaGFuZ2UgdG8gY29tcGxpYW5jZSBydWxlcyBmb3IgdmVyc2lvbmluZyBhbmQgcm9sbGJhY2suXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2VfcnVsZV9oaXN0b3J5XG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUnVsZUhpc3RvcnkgPSBwZ1RhYmxlKCdjb21wbGlhbmNlX3J1bGVfaGlzdG9yeScsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgcnVsZUlkOiB1dWlkKCdydWxlX2lkJykubm90TnVsbCgpLnJlZmVyZW5jZXMoKCkgPT4gY29tcGxpYW5jZVJ1bGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBjaGFuZ2VUeXBlOiB2YXJjaGFyKCdjaGFuZ2VfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksIC8vIGNyZWF0ZWQgfCB1cGRhdGVkIHwgZGVsZXRlZCB8IHJlc3RvcmVkXG4gIHByZXZpb3VzU3RhdGU6IGpzb25iKCdwcmV2aW91c19zdGF0ZScpLCAvLyBmdWxsIHJ1bGUgc25hcHNob3QgYmVmb3JlIGNoYW5nZVxuICBjaGFuZ2VkQnk6IHRleHQoJ2NoYW5nZWRfYnknKS5ub3ROdWxsKCksXG4gIGNoYW5nZWRBdDogdGltZXN0YW1wKCdjaGFuZ2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcnVsZUNoYW5nZWRBdElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9oaXN0b3J5X3J1bGVfY2hhbmdlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5ydWxlSWQsIHRhYmxlLmNoYW5nZWRBdCksXG4gIG9yZ0NoYW5nZWRBdElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9oaXN0b3J5X29yZ19jaGFuZ2VkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jaGFuZ2VkQXQpLFxuICBydWxlSWRJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfaGlzdG9yeV9ydWxlX2lkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnJ1bGVJZCksXG59KSk7XG5cbi8qKlxuICogQ29tcGxpYW5jZSBhdWRpdCBsb2cgIHN0b3JlcyBldmVyeSBjb21wbGlhbmNlIGNoZWNrIHJlc3VsdC5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9hdWRpdF9sb2dcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VBdWRpdExvZyA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfYXVkaXRfbG9nJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHVzZXJJZDogdGV4dCgndXNlcl9pZCcpLm5vdE51bGwoKSxcbiAgdGFyZ2V0OiB2YXJjaGFyKCd0YXJnZXQnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8UnVsZVRhcmdldD4oKS5ub3ROdWxsKCksXG4gIGFjdGlvbjogdmFyY2hhcignYWN0aW9uJywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gdXBsb2FkIHwgZGVwbG95IHwgY3JlYXRlIHwgdXBkYXRlIHwgc2NhblxuICBlbnRpdHlJZDogdmFyY2hhcignZW50aXR5X2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZW50aXR5TmFtZTogdmFyY2hhcignZW50aXR5X25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICByZXN1bHQ6IHZhcmNoYXIoJ3Jlc3VsdCcsIHsgbGVuZ3RoOiAxMCB9KS5ub3ROdWxsKCksIC8vIHBhc3MgfCB3YXJuIHwgYmxvY2tcbiAgdmlvbGF0aW9uczoganNvbmIoJ3Zpb2xhdGlvbnMnKS4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigpLmRlZmF1bHQoW10pLFxuICBydWxlQ291bnQ6IGludGVnZXIoJ3J1bGVfY291bnQnKS5ub3ROdWxsKCksXG4gIHNjYW5JZDogdXVpZCgnc2Nhbl9pZCcpLCAvLyBncm91cHMgZW50cmllcyBmcm9tIHRoZSBzYW1lIGJ1bGsgc2NhblxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ0NyZWF0ZWRBdElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfYXVkaXRfb3JnX2NyZWF0ZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRBdCksXG4gIC8vIERFU0MgdmFyaWFudCBmb3IgdGhlIGRvbWluYW50IFwibGF0ZXN0IGF1ZGl0IGV2ZW50cyBwZXIgb3JnXCIgcXVlcnlcbiAgLy8gcGF0dGVybiAoYXVkaXQgbG9nIFVJcyBzb3J0IG5ld2VzdC1maXJzdCkuIFBvc3RncmVzIGNhbiB1c2UgdGhlIGFzY1xuICAvLyBpbmRleCBmb3IgZGVzYyBzY2FucywgYnV0IGEgbWF0Y2hpbmcgREVTQyBpbmRleCBsZXRzIGluZGV4LW9ubHkgc2NhbnNcbiAgLy8gc2F0aXNmeSBgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIG5gIHdpdGhvdXQgYSByZXZlcnNlIHN0ZXAuXG4gIC8vIE1JR1JBVElPTiBSRVFVSVJFRDogcnVuIGBwbnBtIGRyaXp6bGUta2l0IGdlbmVyYXRlYCBhZnRlciBwdWxsaW5nLlxuICBvcmdDcmVhdGVkQXREZXNjSWR4OiBpbmRleCgnY29tcGxpYW5jZV9hdWRpdF9vcmdfY3JlYXRlZF9kZXNjX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKSxcbiAgb3JnVGFyZ2V0UmVzdWx0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9hdWRpdF9vcmdfdGFyZ2V0X3Jlc3VsdF9pZHgnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUudGFyZ2V0LCB0YWJsZS5yZXN1bHQpLFxuICBzY2FuSWRJZHg6IGluZGV4KCdjb21wbGlhbmNlX2F1ZGl0X3NjYW5faWRfaWR4Jykub24odGFibGUuc2NhbklkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItZW50aXR5IGV4ZW1wdGlvbnMgZnJvbSBzcGVjaWZpYyBjb21wbGlhbmNlIHJ1bGVzLlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX2V4ZW1wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VFeGVtcHRpb24gPSBwZ1RhYmxlKCdjb21wbGlhbmNlX2V4ZW1wdGlvbnMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcnVsZUlkOiB1dWlkKCdydWxlX2lkJykubm90TnVsbCgpLnJlZmVyZW5jZXMoKCkgPT4gY29tcGxpYW5jZVJ1bGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KSxcbiAgZW50aXR5VHlwZTogdmFyY2hhcignZW50aXR5X3R5cGUnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8UnVsZVRhcmdldD4oKS5ub3ROdWxsKCksXG4gIGVudGl0eUlkOiB1dWlkKCdlbnRpdHlfaWQnKS5ub3ROdWxsKCksXG4gIGVudGl0eU5hbWU6IHZhcmNoYXIoJ2VudGl0eV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgcmVhc29uOiB0ZXh0KCdyZWFzb24nKS5ub3ROdWxsKCksXG4gIGFwcHJvdmVkQnk6IHRleHQoJ2FwcHJvdmVkX2J5JyksXG4gIHJlamVjdGlvblJlYXNvbjogdGV4dCgncmVqZWN0aW9uX3JlYXNvbicpLFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5kZWZhdWx0KCdwZW5kaW5nJykubm90TnVsbCgpLCAvLyBwZW5kaW5nIHwgYXBwcm92ZWQgfCByZWplY3RlZCB8IGV4cGlyZWRcbiAgZXhwaXJlc0F0OiB0aW1lc3RhbXAoJ2V4cGlyZXNfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdSdWxlRW50aXR5VW5pcXVlOiB1bmlxdWVJbmRleCgnY29tcGxpYW5jZV9leGVtcHRpb25fb3JnX3J1bGVfZW50aXR5X3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ydWxlSWQsIHRhYmxlLmVudGl0eUlkKSxcbiAgb3JnU3RhdHVzSWR4OiBpbmRleCgnY29tcGxpYW5jZV9leGVtcHRpb25fb3JnX3N0YXR1c19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuc3RhdHVzKSxcbiAgZXhwaXJlc0F0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9leGVtcHRpb25fZXhwaXJlc19hdF9pZHgnKS5vbih0YWJsZS5leHBpcmVzQXQpLFxuICBlbnRpdHlJZElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfZXhlbXB0aW9uX2VudGl0eV9pZF9pZHgnKS5vbih0YWJsZS5lbnRpdHlJZCksXG59KSk7XG5cbi8qKlxuICogVHJhY2tzIHdoaWNoIG9yZ3MgaGF2ZSBvcHRlZCBpbnRvIHN5c3RlbS1vcmcgcHVibGlzaGVkIGNvbXBsaWFuY2UgcnVsZXMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2VfcnVsZV9zdWJzY3JpcHRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUnVsZVN1YnNjcmlwdGlvbiA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfcnVsZV9zdWJzY3JpcHRpb25zJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHJ1bGVJZDogdXVpZCgncnVsZV9pZCcpLm5vdE51bGwoKS5yZWZlcmVuY2VzKCgpID0+IGNvbXBsaWFuY2VSdWxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSksXG4gIHN1YnNjcmliZWRCeTogdGV4dCgnc3Vic2NyaWJlZF9ieScpLm5vdE51bGwoKSxcbiAgc3Vic2NyaWJlZEF0OiB0aW1lc3RhbXAoJ3N1YnNjcmliZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIHBpbm5lZFZlcnNpb246IGpzb25iKCdwaW5uZWRfdmVyc2lvbicpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLFxuICB1bnN1YnNjcmliZWRBdDogdGltZXN0YW1wKCd1bnN1YnNjcmliZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgdW5zdWJzY3JpYmVkQnk6IHRleHQoJ3Vuc3Vic2NyaWJlZF9ieScpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdSdWxlVW5pcXVlOiB1bmlxdWVJbmRleCgnY29tcGxpYW5jZV9ydWxlX3N1Yl9vcmdfcnVsZV91bmlxdWUnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUucnVsZUlkKSxcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX3N1Yl9vcmdfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSksXG4gIHJ1bGVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfc3ViX3J1bGVfaWR4Jykub24odGFibGUucnVsZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBCdWxrIGNvbXBsaWFuY2Ugc2NhbnMgIHRyYWNrcyBzY2hlZHVsZWQgYW5kIG9uLWRlbWFuZCBzY2Fucy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9zY2Fuc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVNjYW4gPSBwZ1RhYmxlKCdjb21wbGlhbmNlX3NjYW5zJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHRhcmdldDogdmFyY2hhcigndGFyZ2V0JywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gcGx1Z2luIHwgcGlwZWxpbmUgfCBhbGxcbiAgZmlsdGVyOiBqc29uYignZmlsdGVyJyksIC8vIG9wdGlvbmFsIGVudGl0eSBmaWx0ZXIgZm9yIHBhcnRpYWwgc2NhbnNcbiAgc3RhdHVzOiB2YXJjaGFyKCdzdGF0dXMnLCB7IGxlbmd0aDogMjAgfSkuZGVmYXVsdCgncGVuZGluZycpLm5vdE51bGwoKSwgLy8gcGVuZGluZyB8IHJ1bm5pbmcgfCBjb21wbGV0ZWQgfCBmYWlsZWQgfCBjYW5jZWxsZWRcbiAgdHJpZ2dlcmVkQnk6IHZhcmNoYXIoJ3RyaWdnZXJlZF9ieScsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksIC8vIG1hbnVhbCB8IHNjaGVkdWxlZCB8IHJ1bGUtY2hhbmdlIHwgcnVsZS1kcnktcnVuXG4gIHVzZXJJZDogdGV4dCgndXNlcl9pZCcpLm5vdE51bGwoKSxcbiAgdG90YWxFbnRpdGllczogaW50ZWdlcigndG90YWxfZW50aXRpZXMnKS5kZWZhdWx0KDApLm5vdE51bGwoKSxcbiAgcHJvY2Vzc2VkRW50aXRpZXM6IGludGVnZXIoJ3Byb2Nlc3NlZF9lbnRpdGllcycpLmRlZmF1bHQoMCkubm90TnVsbCgpLFxuICBwYXNzQ291bnQ6IGludGVnZXIoJ3Bhc3NfY291bnQnKS5kZWZhdWx0KDApLm5vdE51bGwoKSxcbiAgd2FybkNvdW50OiBpbnRlZ2VyKCd3YXJuX2NvdW50JykuZGVmYXVsdCgwKS5ub3ROdWxsKCksXG4gIGJsb2NrQ291bnQ6IGludGVnZXIoJ2Jsb2NrX2NvdW50JykuZGVmYXVsdCgwKS5ub3ROdWxsKCksXG4gIC8vIFRydWUgd2hlbiB0aGUgc2NhbiBzdG9wcGVkIGVhcmx5IGF0IGEgY29uZmlndXJlZCBwZXItc2NhbiBjYXAgKHNvIHRoZVxuICAvLyBjb3VudHMgYWJvdmUgcmVwcmVzZW50IGEgc3Vic2V0LCBub3QgdGhlIGZ1bGwgZW50aXR5IHVuaXZlcnNlKS4gU3VyZmFjZWRcbiAgLy8gaW4gdGhlIHNjYW4tc3RhdHVzIFVJIHNvIHVzZXJzIGtub3cgd2hldGhlciB0byB3aWRlbiB0aGUgZmlsdGVyLlxuICAvLyBNSUdSQVRJT04gUkVRVUlSRUQ6IHJ1biBgcG5wbSBkcml6emxlLWtpdCBnZW5lcmF0ZWAgYWZ0ZXIgcHVsbGluZy5cbiAgdHJ1bmNhdGVkOiBib29sZWFuKCd0cnVuY2F0ZWQnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG4gIHN0YXJ0ZWRBdDogdGltZXN0YW1wKCdzdGFydGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbXBsZXRlZEF0OiB0aW1lc3RhbXAoJ2NvbXBsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjYW5jZWxsZWRBdDogdGltZXN0YW1wKCdjYW5jZWxsZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY2FuY2VsbGVkQnk6IHRleHQoJ2NhbmNlbGxlZF9ieScpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ0NyZWF0ZWRBdElkeDogaW5kZXgoJ2NvbXBsaWFuY2Vfc2Nhbl9vcmdfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnU3RhdHVzSWR4OiBpbmRleCgnY29tcGxpYW5jZV9zY2FuX29yZ19zdGF0dXNfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnN0YXR1cyksXG59KSk7XG5cbi8qKlxuICogQ3Jvbi1iYXNlZCByZWN1cnJpbmcgc2NhbiBzY2hlZHVsZXMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2Vfc2Nhbl9zY2hlZHVsZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VTY2FuU2NoZWR1bGUgPSBwZ1RhYmxlKCdjb21wbGlhbmNlX3NjYW5fc2NoZWR1bGVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHRhcmdldDogdmFyY2hhcigndGFyZ2V0JywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gcGx1Z2luIHwgcGlwZWxpbmUgfCBhbGxcbiAgY3JvbkV4cHJlc3Npb246IHZhcmNoYXIoJ2Nyb25fZXhwcmVzc2lvbicsIHsgbGVuZ3RoOiAxMDAgfSkubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIGxhc3RSdW5BdDogdGltZXN0YW1wKCdsYXN0X3J1bl9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBuZXh0UnVuQXQ6IHRpbWVzdGFtcCgnbmV4dF9ydW5fYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBhY3RpdmVOZXh0UnVuSWR4OiBpbmRleCgnY29tcGxpYW5jZV9zY2FuX3NjaGVkdWxlX2FjdGl2ZV9uZXh0X2lkeCcpXG4gICAgLm9uKHRhYmxlLmlzQWN0aXZlLCB0YWJsZS5uZXh0UnVuQXQpLFxuICBvcmdJZHg6IGluZGV4KCdjb21wbGlhbmNlX3NjYW5fc2NoZWR1bGVfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIG5vdGlmaWNhdGlvbiBzZXR0aW5ncyBmb3IgY29tcGxpYW5jZSBldmVudHMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX3ByZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSA9IHBnVGFibGUoJ2NvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX3ByZWZlcmVuY2VzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCkudW5pcXVlKCksXG4gIG5vdGlmeU9uQmxvY2s6IGJvb2xlYW4oJ25vdGlmeV9vbl9ibG9jaycpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuICBub3RpZnlPbldhcm5pbmc6IGJvb2xlYW4oJ25vdGlmeV9vbl93YXJuaW5nJykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuICAvLyBPcHQtaW4gZW1haWwgZGVsaXZlcnkgKHRvIGB0YXJnZXRVc2Vyc2AsIG9yIGFsbCBvcmcgYWRtaW5zIHdoZW4gbnVsbCkuXG4gIGVtYWlsRW5hYmxlZDogYm9vbGVhbignZW1haWxfZW5hYmxlZCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgZGlnZXN0TW9kZTogdmFyY2hhcignZGlnZXN0X21vZGUnLCB7IGxlbmd0aDogMjAgfSkuZGVmYXVsdCgnaW1tZWRpYXRlJykubm90TnVsbCgpLCAvLyBpbW1lZGlhdGUgfCBkYWlseSB8IHdlZWtseVxuICBkaWdlc3RTY2hlZHVsZTogdmFyY2hhcignZGlnZXN0X3NjaGVkdWxlJywgeyBsZW5ndGg6IDEwMCB9KSxcbiAgbGFzdERpZ2VzdEF0OiB0aW1lc3RhbXAoJ2xhc3RfZGlnZXN0X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHRhcmdldFVzZXJzOiBqc29uYigndGFyZ2V0X3VzZXJzJykuJHR5cGU8c3RyaW5nW10+KCksIC8vIG51bGwgPSBhbGwgb3JnIGFkbWluc1xuICB3ZWJob29rVXJsOiB2YXJjaGFyKCd3ZWJob29rX3VybCcsIHsgbGVuZ3RoOiA1MDAgfSksXG4gIHdlYmhvb2tTZWNyZXQ6IHZhcmNoYXIoJ3dlYmhvb2tfc2VjcmV0JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBMb2cgb2YgYWxsIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9ucyBzZW50LlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9sb2dcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2cgPSBwZ1RhYmxlKCdjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9sb2cnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgY2hhbm5lbDogdmFyY2hhcignY2hhbm5lbCcsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksIC8vIGluLWFwcCB8IHdlYmhvb2sgfCBkaWdlc3RcbiAgc3RhdHVzOiB2YXJjaGFyKCdzdGF0dXMnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLCAvLyBzZW50IHwgZmFpbGVkIHwgcGVuZGluZ1xuICBwYXlsb2FkOiBqc29uYigncGF5bG9hZCcpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLm5vdE51bGwoKSxcbiAgd2ViaG9va1Jlc3BvbnNlQ29kZTogaW50ZWdlcignd2ViaG9va19yZXNwb25zZV9jb2RlJyksXG4gIHdlYmhvb2tFcnJvcjogdGV4dCgnd2ViaG9va19lcnJvcicpLFxuICByZXRyeUNvdW50OiBpbnRlZ2VyKCdyZXRyeV9jb3VudCcpLmRlZmF1bHQoMCkubm90TnVsbCgpLFxuICBuZXh0UmV0cnlBdDogdGltZXN0YW1wKCduZXh0X3JldHJ5X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHJlbGF0ZWRBdWRpdElkOiB1dWlkKCdyZWxhdGVkX2F1ZGl0X2lkJyksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnQ3JlYXRlZEF0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9ub3RpZmljYXRpb25fb3JnX2NyZWF0ZWRfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRBdCksXG4gIHN0YXR1c1JldHJ5SWR4OiBpbmRleCgnY29tcGxpYW5jZV9ub3RpZmljYXRpb25fc3RhdHVzX3JldHJ5X2lkeCcpXG4gICAgLm9uKHRhYmxlLnN0YXR1cywgdGFibGUubmV4dFJldHJ5QXQpLFxuICByZWxhdGVkQXVkaXRJZHg6IGluZGV4KCdjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9yZWxhdGVkX2F1ZGl0X2lkeCcpXG4gICAgLm9uKHRhYmxlLnJlbGF0ZWRBdWRpdElkKSxcbn0pKTtcblxuLyoqXG4gKiBDb21wbGlhbmNlLXNwZWNpZmljIFJCQUMgcm9sZXMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2Vfcm9sZXNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJvbGVUeXBlID0gJ2NvbXBsaWFuY2Utdmlld2VyJyB8ICdjb21wbGlhbmNlLWVkaXRvcicgfCAnY29tcGxpYW5jZS1hZG1pbic7XG5cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUm9sZSA9IHBnVGFibGUoJ2NvbXBsaWFuY2Vfcm9sZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgdXNlcklkOiB0ZXh0KCd1c2VyX2lkJykubm90TnVsbCgpLFxuICByb2xlOiB2YXJjaGFyKCdyb2xlJywgeyBsZW5ndGg6IDMwIH0pLiR0eXBlPENvbXBsaWFuY2VSb2xlVHlwZT4oKS5ub3ROdWxsKCksXG4gIGdyYW50ZWRCeTogdGV4dCgnZ3JhbnRlZF9ieScpLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ1VzZXJVbmlxdWU6IHVuaXF1ZUluZGV4KCdjb21wbGlhbmNlX3JvbGVfb3JnX3VzZXJfdW5pcXVlJykub24odGFibGUub3JnSWQsIHRhYmxlLnVzZXJJZCksXG4gIG9yZ1JvbGVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3JvbGVfb3JnX3JvbGVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJvbGUpLFxufSkpO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBjb21wbGlhbmNlIHJlcG9ydHMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2VfcmVwb3J0c1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVJlcG9ydCA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfcmVwb3J0cycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICByZXBvcnRUeXBlOiB2YXJjaGFyKCdyZXBvcnRfdHlwZScsIHsgbGVuZ3RoOiAzMCB9KS5ub3ROdWxsKCksIC8vIHN1bW1hcnkgfCBkZXRhaWxlZCB8IGF1ZGl0LXRyYWlsIHwgY29tcGFyaXNvblxuICB0YXJnZXQ6IHZhcmNoYXIoJ3RhcmdldCcsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksIC8vIHBsdWdpbiB8IHBpcGVsaW5lIHwgYWxsXG4gIGRhdGVGcm9tOiB0aW1lc3RhbXAoJ2RhdGVfZnJvbScsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkYXRlVG86IHRpbWVzdGFtcCgnZGF0ZV90bycsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wYXJlRnJvbTogdGltZXN0YW1wKCdjb21wYXJlX2Zyb20nLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY29tcGFyZVRvOiB0aW1lc3RhbXAoJ2NvbXBhcmVfdG8nLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGF0YToganNvbmIoJ2RhdGEnKS4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKS5ub3ROdWxsKCksXG4gIGZvcm1hdDogdmFyY2hhcignZm9ybWF0JywgeyBsZW5ndGg6IDEwIH0pLmRlZmF1bHQoJ2pzb24nKS5ub3ROdWxsKCksIC8vIGpzb24gfCBjc3ZcbiAgZ2VuZXJhdGVkQnk6IHRleHQoJ2dlbmVyYXRlZF9ieScpLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdDcmVhdGVkQXRJZHg6IGluZGV4KCdjb21wbGlhbmNlX3JlcG9ydF9vcmdfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEF0KSxcbn0pKTtcblxuLyoqXG4gKiBDcm9uLWJhc2VkIHJlY3VycmluZyByZXBvcnQgZ2VuZXJhdGlvbiBzY2hlZHVsZXMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2VfcmVwb3J0X3NjaGVkdWxlc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlID0gcGdUYWJsZSgnY29tcGxpYW5jZV9yZXBvcnRfc2NoZWR1bGVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHJlcG9ydFR5cGU6IHZhcmNoYXIoJ3JlcG9ydF90eXBlJywgeyBsZW5ndGg6IDMwIH0pLm5vdE51bGwoKSwgLy8gc3VtbWFyeSB8IGRldGFpbGVkXG4gIHRhcmdldDogdmFyY2hhcigndGFyZ2V0JywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gcGx1Z2luIHwgcGlwZWxpbmUgfCBhbGxcbiAgZm9ybWF0OiB2YXJjaGFyKCdmb3JtYXQnLCB7IGxlbmd0aDogMTAgfSkuZGVmYXVsdCgnanNvbicpLm5vdE51bGwoKSxcbiAgY3JvbkV4cHJlc3Npb246IHZhcmNoYXIoJ2Nyb25fZXhwcmVzc2lvbicsIHsgbGVuZ3RoOiAxMDAgfSkubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIGxhc3RSdW5BdDogdGltZXN0YW1wKCdsYXN0X3J1bl9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBuZXh0UnVuQXQ6IHRpbWVzdGFtcCgnbmV4dF9ydW5fYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsaXZlclRvOiBqc29uYignZGVsaXZlcl90bycpLiR0eXBlPHN0cmluZ1tdPigpLmRlZmF1bHQoW10pLm5vdE51bGwoKSwgLy8gdXNlcklkcyB0byBub3RpZnlcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBhY3RpdmVOZXh0UnVuSWR4OiBpbmRleCgnY29tcGxpYW5jZV9yZXBvcnRfc2NoZWR1bGVfYWN0aXZlX25leHRfaWR4JylcbiAgICAub24odGFibGUuaXNBY3RpdmUsIHRhYmxlLm5leHRSdW5BdCksXG4gIG9yZ0lkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcmVwb3J0X3NjaGVkdWxlX29yZ19pZHgnKS5vbih0YWJsZS5vcmdJZCksXG59KSk7XG5cbi8vIENvbXBsaWFuY2UgdHlwZXNcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVBvbGljeSA9IHR5cGVvZiBjb21wbGlhbmNlUG9saWN5LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VQb2xpY3lJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVBvbGljeS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSdWxlID0gdHlwZW9mIGNvbXBsaWFuY2VSdWxlLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSdWxlSW5zZXJ0ID0gdHlwZW9mIGNvbXBsaWFuY2VSdWxlLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJ1bGVIaXN0b3J5ID0gdHlwZW9mIGNvbXBsaWFuY2VSdWxlSGlzdG9yeS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUnVsZUhpc3RvcnlJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGVIaXN0b3J5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZUF1ZGl0TG9nID0gdHlwZW9mIGNvbXBsaWFuY2VBdWRpdExvZy4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlQXVkaXRMb2dJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZUF1ZGl0TG9nLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZUV4ZW1wdGlvbiA9IHR5cGVvZiBjb21wbGlhbmNlRXhlbXB0aW9uLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VFeGVtcHRpb25JbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZUV4ZW1wdGlvbi4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uID0gdHlwZW9mIGNvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uSW5zZXJ0ID0gdHlwZW9mIGNvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVNjYW4gPSB0eXBlb2YgY29tcGxpYW5jZVNjYW4uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVNjYW5JbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVNjYW4uJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlU2NhblNjaGVkdWxlID0gdHlwZW9mIGNvbXBsaWFuY2VTY2FuU2NoZWR1bGUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVNjYW5TY2hlZHVsZUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlU2NhblNjaGVkdWxlLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2UgPSB0eXBlb2YgY29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2UuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2VJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZU5vdGlmaWNhdGlvblByZWZlcmVuY2UuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlTm90aWZpY2F0aW9uTG9nID0gdHlwZW9mIGNvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2cuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZ0luc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlTm90aWZpY2F0aW9uTG9nLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJvbGUgPSB0eXBlb2YgY29tcGxpYW5jZVJvbGUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJvbGVJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJvbGUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUmVwb3J0ID0gdHlwZW9mIGNvbXBsaWFuY2VSZXBvcnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJlcG9ydEluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlUmVwb3J0LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlID0gdHlwZW9mIGNvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUmVwb3J0U2NoZWR1bGVJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlLiRpbmZlckluc2VydDtcbiJdfQ==
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvY29tcGxpYW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlEM0g7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtJQUM3RCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDMUUsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ3pELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0lBQ2pGLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN6RCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxF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LDRDQUE0QyxDQUFDO1NBQ2xFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDdEMsTUFBTSxFQUFFLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0NBQ3BFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBib29sZWFuLCBpbnRlZ2VyLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCwgdW5pcXVlSW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tcGxpYW5jZSBTZXJ2aWNlIFRhYmxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbXBsaWFuY2UgcnVsZSBzZXZlcml0eSBsZXZlbHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJ1bGVTZXZlcml0eSA9ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnY3JpdGljYWwnO1xuXG4vKipcbiAqIENvbXBsaWFuY2UgcnVsZSB0YXJnZXQgZW50aXR5IHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBSdWxlVGFyZ2V0ID0gJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuXG4vKipcbiAqIENvbXBsaWFuY2UgcnVsZSBvcGVyYXRvcnMgZm9yIGZpZWxkIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFJ1bGVPcGVyYXRvciA9XG4gIHwgJ2VxJyB8ICduZXEnXG4gIHwgJ2NvbnRhaW5zJyB8ICdub3RDb250YWlucydcbiAgfCAncmVnZXgnXG4gIHwgJ2d0JyB8ICdndGUnIHwgJ2x0JyB8ICdsdGUnXG4gIHwgJ2luJyB8ICdub3RJbidcbiAgfCAnZXhpc3RzJyB8ICdub3RFeGlzdHMnIHwgJ25vdEVtcHR5J1xuICB8ICdjb3VudEd0JyB8ICdjb3VudEx0J1xuICB8ICdsZW5ndGhHdCcgfCAnbGVuZ3RoTHQnO1xuXG4vKipcbiAqIENyb3NzLWZpZWxkIGNvbmRpdGlvbiBtb2RlIGZvciBtdWx0aS1jb25kaXRpb24gcnVsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFJ1bGVDb25kaXRpb25Nb2RlID0gJ2FsbCcgfCAnYW55JztcblxuLyoqXG4gKiBSdWxlIHNjb3BlICBvcmctbGV2ZWwgb3IgcHVibGlzaGVkIChzeXN0ZW0gb3JnIG9ubHksIG9wdC1pbiB2aWEgc3Vic2NyaXB0aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgUnVsZVNjb3BlID0gJ29yZycgfCAncHVibGlzaGVkJztcblxuLyoqXG4gKiBBIHNpbmdsZSBjb25kaXRpb24gaW4gYSBjcm9zcy1maWVsZCBydWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVDb25kaXRpb24ge1xuICBmaWVsZD86IHN0cmluZztcbiAgb3BlcmF0b3I/OiBSdWxlT3BlcmF0b3I7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgZGVwZW5kc09uUnVsZT86IHN0cmluZzsgLy8gcnVsZSBJRCAgb25seSBldmFsdWF0ZSBpZiByZWZlcmVuY2VkIHJ1bGUgcGFzc2VkXG59XG5cbi8qKlxuICogQ29tcGxpYW5jZSBwb2xpY2llcyBncm91cCBydWxlcyBpbnRvIG5hbWVkIHNldHMgdGhhdCBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB0b2dldGhlci5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9wb2xpY2llc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVBvbGljeSA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfcG9saWNpZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5kZWZhdWx0KCdzeXN0ZW0nKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JykuZGVmYXVsdCgnc3lzdGVtJykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgbmFtZTogdmFyY2hhcignbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAgdmVyc2lvbjogdmFyY2hhcigndmVyc2lvbicsIHsgbGVuZ3RoOiA1MCB9KS5kZWZhdWx0KCcxLjAuMCcpLm5vdE51bGwoKSxcbiAgaXNUZW1wbGF0ZTogYm9vbGVhbignaXNfdGVtcGxhdGUnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG5cbiAgLy8gTm8gc2hhcmluZyBydW5nOiBjb21wbGlhbmNlIHZpc2liaWxpdHkgaXMgb3JnICsgdGhlIHN5c3RlbS1vcmcgY2FydmUtb3V0LFxuICAvLyBhcHBsaWVkIGluIGBidWlsZENvbXBsaWFuY2VQb2xpY3lDb25kaXRpb25zYCAvIGBidWlsZENvbXBsaWFuY2VSdWxlQ29uZGl0aW9uc2AuXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcHVyZ2VJZHg6IGluZGV4KCdjb21wbGlhbmNlX3BvbGljeV9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3BvbGljeV9vcmdfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSksXG4gIHRlbXBsYXRlSWR4OiBpbmRleCgnY29tcGxpYW5jZV9wb2xpY3lfdGVtcGxhdGVfaWR4Jykub24odGFibGUuaXNUZW1wbGF0ZSksXG4gIG5hbWVPcmdWZXJzaW9uVW5pcXVlOiB1bmlxdWVJbmRleCgnY29tcGxpYW5jZV9wb2xpY3lfbmFtZV9vcmdfdmVyc2lvbl91bmlxdWUnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUubmFtZSwgdGFibGUudmVyc2lvbiksXG59KSk7XG5cbi8qKlxuICogQ29tcGxpYW5jZSBydWxlcyBkZWZpbmUgaW5kaXZpZHVhbCBjaGVja3MgYWdhaW5zdCBwbHVnaW4vcGlwZWxpbmUgYXR0cmlidXRlcy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9ydWxlc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVJ1bGUgPSBwZ1RhYmxlKCdjb21wbGlhbmNlX3J1bGVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpLm5vdE51bGwoKSxcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JykuZGVmYXVsdCgnc3lzdGVtJykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLmRlZmF1bHQoJ3N5c3RlbScpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuXG4gIC8vIFJ1bGUgaWRlbnRpdHlcbiAgbmFtZTogdmFyY2hhcignbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAgcG9saWN5SWQ6IHV1aWQoJ3BvbGljeV9pZCcpLnJlZmVyZW5jZXMoKCkgPT4gY29tcGxpYW5jZVBvbGljeS5pZCwgeyBvbkRlbGV0ZTogJ3NldCBudWxsJyB9KSxcbiAgcHJpb3JpdHk6IGludGVnZXIoJ3ByaW9yaXR5JykuZGVmYXVsdCgwKS5ub3ROdWxsKCksXG4gIHRhcmdldDogdmFyY2hhcigndGFyZ2V0JywgeyBsZW5ndGg6IDIwIH0pLiR0eXBlPFJ1bGVUYXJnZXQ+KCkubm90TnVsbCgpLFxuICBzZXZlcml0eTogdmFyY2hhcignc2V2ZXJpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8UnVsZVNldmVyaXR5PigpLmRlZmF1bHQoJ2Vycm9yJykubm90TnVsbCgpLFxuXG4gIC8vIENhdGVnb3JpemF0aW9uXG4gIHRhZ3M6IGpzb25iKCd0YWdzJykuJHR5cGU8c3RyaW5nW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLFxuXG4gIC8vIFNjaGVkdWxpbmdcbiAgZWZmZWN0aXZlRnJvbTogdGltZXN0YW1wKCdlZmZlY3RpdmVfZnJvbScsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBlZmZlY3RpdmVVbnRpbDogdGltZXN0YW1wKCdlZmZlY3RpdmVfdW50aWwnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcblxuICAvLyBTY29wZVxuICBzY29wZTogdmFyY2hhcignc2NvcGUnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8UnVsZVNjb3BlPigpLmRlZmF1bHQoJ29yZycpLm5vdE51bGwoKSxcblxuICAvLyBOb3RpZmljYXRpb24gb3ZlcnJpZGVcbiAgc3VwcHJlc3NOb3RpZmljYXRpb246IGJvb2xlYW4oJ3N1cHByZXNzX25vdGlmaWNhdGlvbicpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcblxuICAvLyBPcmcg4oaSIHRlYW0gaGllcmFyY2h5OiB3aGVuIHRydWUsIHRoaXMgKHBhcmVudC1vcmcpIHJ1bGUgaXMgYWxzbyBlbmZvcmNlZCBvblxuICAvLyBkZXNjZW5kYW50IHRlYW0gb3JncyBkdXJpbmcgdGhlaXIgY29tcGxpYW5jZSBldmFsdWF0aW9uLlxuICBwcm9wYWdhdGVUb0NoaWxkcmVuOiBib29sZWFuKCdwcm9wYWdhdGVfdG9fY2hpbGRyZW4nKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG5cbiAgLy8gU2luZ2xlLWZpZWxkIGNvbmRpdGlvblxuICBmaWVsZDogdmFyY2hhcignZmllbGQnLCB7IGxlbmd0aDogMTAwIH0pLFxuICBvcGVyYXRvcjogdmFyY2hhcignb3BlcmF0b3InLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8UnVsZU9wZXJhdG9yPigpLFxuICB2YWx1ZToganNvbmIoJ3ZhbHVlJyksXG5cbiAgLy8gQ3Jvc3MtZmllbGQgY29uZGl0aW9ucyAob3ZlcnJpZGVzIHNpbmdsZS1maWVsZCB3aGVuIHByZXNlbnQpXG4gIGNvbmRpdGlvbnM6IGpzb25iKCdjb25kaXRpb25zJykuJHR5cGU8UnVsZUNvbmRpdGlvbltdPigpLFxuICBjb25kaXRpb25Nb2RlOiB2YXJjaGFyKCdjb25kaXRpb25fbW9kZScsIHsgbGVuZ3RoOiA1IH0pLiR0eXBlPFJ1bGVDb25kaXRpb25Nb2RlPigpLmRlZmF1bHQoJ2FsbCcpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eVxuICAvLyBObyBzaGFyaW5nIHJ1bmc6IGNvbXBsaWFuY2UgdmlzaWJpbGl0eSBpcyBvcmcgKyB0aGUgc3lzdGVtLW9yZyBjYXJ2ZS1vdXQsXG4gIC8vIGFwcGxpZWQgaW4gYGJ1aWxkQ29tcGxpYW5jZVBvbGljeUNvbmRpdGlvbnNgIC8gYGJ1aWxkQ29tcGxpYW5jZVJ1bGVDb25kaXRpb25zYC5cbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICBwdXJnZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICBvcmdUYXJnZXRBY3RpdmVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfb3JnX3RhcmdldF9hY3RpdmVfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLnRhcmdldCwgdGFibGUuaXNBY3RpdmUpLFxuICBvcmdQb2xpY3lJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfb3JnX3BvbGljeV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUucG9saWN5SWQpLFxuICBwcmlvcml0eUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9wcmlvcml0eV9pZHgnKS5vbih0YWJsZS5wcmlvcml0eSksXG4gIHNjb3BlSWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX3Njb3BlX2lkeCcpLm9uKHRhYmxlLnNjb3BlKSxcbiAgZWZmZWN0aXZlRnJvbUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9lZmZlY3RpdmVfZnJvbV9pZHgnKS5vbih0YWJsZS5lZmZlY3RpdmVGcm9tKSxcbiAgbmFtZU9yZ1VuaXF1ZTogdW5pcXVlSW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9uYW1lX29yZ191bmlxdWUnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubmFtZSksXG4gIC8vIFBhcnRpYWwgR0lOIGluZGV4IGJhY2tpbmcgdGhlIGN1cmF0ZWQtc2V0IGxvb2t1cFxuICAvLyBgZmluZFB1Ymxpc2hlZFJ1bGVJZHNCeVNldFRhZ2AgKHN1YnNjcmlwdGlvbi1zZXJ2aWNlKTogYSBjb250YWlubWVudCBxdWVyeVxuICAvLyBgdGFncyBAPiAnW1wic2V0Ojx4PlwiXSc6Ompzb25iYCByZXN0cmljdGVkIHRvIHB1Ymxpc2hlZCByb3dzLiBganNvbmJfcGF0aF9vcHNgXG4gIC8vIGlzIHRoZSBzbWFsbGVyL2Zhc3RlciBvcGNsYXNzIOKAlCBpdCBvbmx5IHN1cHBvcnRzIGBAPmAgKGV4YWN0bHkgdGhpcyBxdWVyeSksXG4gIC8vIG5vdCBrZXktZXhpc3RlbmNlLCB3aGljaCB3ZSBuZXZlciBydW4gYWdhaW5zdCBgdGFnc2AuIFNjb3BlZCB0b1xuICAvLyBgc2NvcGUgPSAncHVibGlzaGVkJ2Agc28gb25seSB0aGUgY3VyYXRlZCBjYXRhbG9nIChhIGhhbmRmdWwgb2Ygcm93cykgaXNcbiAgLy8gaW5kZXhlZCwgbm90IGV2ZXJ5IG9yZydzIHByaXZhdGUgcnVsZSB0YWdzLlxuICAvLyBNSUdSQVRJT04gUkVRVUlSRUQ6IHJ1biBgcG5wbSBkcml6emxlLWtpdCBnZW5lcmF0ZWAgYWZ0ZXIgcHVsbGluZy5cbiAgcHVibGlzaGVkVGFnc0dpbklkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9wdWJsaXNoZWRfdGFnc19naW5faWR4JylcbiAgICAudXNpbmcoJ2dpbicsIHRhYmxlLnRhZ3Mub3AoJ2pzb25iX3BhdGhfb3BzJykpXG4gICAgLndoZXJlKHNxbGBzY29wZSA9ICdwdWJsaXNoZWQnYCksXG59KSk7XG5cbi8qKlxuICogVHJhY2tzIGV2ZXJ5IGNoYW5nZSB0byBjb21wbGlhbmNlIHJ1bGVzIGZvciB2ZXJzaW9uaW5nIGFuZCByb2xsYmFjay5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9ydWxlX2hpc3RvcnlcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VSdWxlSGlzdG9yeSA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfcnVsZV9oaXN0b3J5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBydWxlSWQ6IHV1aWQoJ3J1bGVfaWQnKS5ub3ROdWxsKCkucmVmZXJlbmNlcygoKSA9PiBjb21wbGlhbmNlUnVsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGNoYW5nZVR5cGU6IHZhcmNoYXIoJ2NoYW5nZV90eXBlJywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gY3JlYXRlZCB8IHVwZGF0ZWQgfCBkZWxldGVkIHwgcmVzdG9yZWRcbiAgcHJldmlvdXNTdGF0ZToganNvbmIoJ3ByZXZpb3VzX3N0YXRlJyksIC8vIGZ1bGwgcnVsZSBzbmFwc2hvdCBiZWZvcmUgY2hhbmdlXG4gIGNoYW5nZWRCeTogdGV4dCgnY2hhbmdlZF9ieScpLm5vdE51bGwoKSxcbiAgY2hhbmdlZEF0OiB0aW1lc3RhbXAoJ2NoYW5nZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBydWxlQ2hhbmdlZEF0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX2hpc3RvcnlfcnVsZV9jaGFuZ2VkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnJ1bGVJZCwgdGFibGUuY2hhbmdlZEF0KSxcbiAgb3JnQ2hhbmdlZEF0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9ydWxlX2hpc3Rvcnlfb3JnX2NoYW5nZWRfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmNoYW5nZWRBdCksXG4gIHJ1bGVJZElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9oaXN0b3J5X3J1bGVfaWRfaWR4JylcbiAgICAub24odGFibGUucnVsZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBDb21wbGlhbmNlIGF1ZGl0IGxvZyAgc3RvcmVzIGV2ZXJ5IGNvbXBsaWFuY2UgY2hlY2sgcmVzdWx0LlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX2F1ZGl0X2xvZ1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZUF1ZGl0TG9nID0gcGdUYWJsZSgnY29tcGxpYW5jZV9hdWRpdF9sb2cnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgdXNlcklkOiB0ZXh0KCd1c2VyX2lkJykubm90TnVsbCgpLFxuICB0YXJnZXQ6IHZhcmNoYXIoJ3RhcmdldCcsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTxSdWxlVGFyZ2V0PigpLm5vdE51bGwoKSxcbiAgYWN0aW9uOiB2YXJjaGFyKCdhY3Rpb24nLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLCAvLyB1cGxvYWQgfCBkZXBsb3kgfCBjcmVhdGUgfCB1cGRhdGUgfCBzY2FuXG4gIGVudGl0eUlkOiB2YXJjaGFyKCdlbnRpdHlfaWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBlbnRpdHlOYW1lOiB2YXJjaGFyKCdlbnRpdHlfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIHJlc3VsdDogdmFyY2hhcigncmVzdWx0JywgeyBsZW5ndGg6IDEwIH0pLm5vdE51bGwoKSwgLy8gcGFzcyB8IHdhcm4gfCBibG9ja1xuICB2aW9sYXRpb25zOiBqc29uYigndmlvbGF0aW9ucycpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+KCkuZGVmYXVsdChbXSksXG4gIHJ1bGVDb3VudDogaW50ZWdlcigncnVsZV9jb3VudCcpLm5vdE51bGwoKSxcbiAgc2NhbklkOiB1dWlkKCdzY2FuX2lkJyksIC8vIGdyb3VwcyBlbnRyaWVzIGZyb20gdGhlIHNhbWUgYnVsayBzY2FuXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnQ3JlYXRlZEF0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9hdWRpdF9vcmdfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEF0KSxcbiAgLy8gREVTQyB2YXJpYW50IGZvciB0aGUgZG9taW5hbnQgXCJsYXRlc3QgYXVkaXQgZXZlbnRzIHBlciBvcmdcIiBxdWVyeVxuICAvLyBwYXR0ZXJuIChhdWRpdCBsb2cgVUlzIHNvcnQgbmV3ZXN0LWZpcnN0KS4gUG9zdGdyZXMgY2FuIHVzZSB0aGUgYXNjXG4gIC8vIGluZGV4IGZvciBkZXNjIHNjYW5zLCBidXQgYSBtYXRjaGluZyBERVNDIGluZGV4IGxldHMgaW5kZXgtb25seSBzY2Fuc1xuICAvLyBzYXRpc2Z5IGBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgbmAgd2l0aG91dCBhIHJldmVyc2Ugc3RlcC5cbiAgLy8gTUlHUkFUSU9OIFJFUVVJUkVEOiBydW4gYHBucG0gZHJpenpsZS1raXQgZ2VuZXJhdGVgIGFmdGVyIHB1bGxpbmcuXG4gIG9yZ0NyZWF0ZWRBdERlc2NJZHg6IGluZGV4KCdjb21wbGlhbmNlX2F1ZGl0X29yZ19jcmVhdGVkX2Rlc2NfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHNxbGAke3RhYmxlLmNyZWF0ZWRBdH0gREVTQ2ApLFxuICBvcmdUYXJnZXRSZXN1bHRJZHg6IGluZGV4KCdjb21wbGlhbmNlX2F1ZGl0X29yZ190YXJnZXRfcmVzdWx0X2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS50YXJnZXQsIHRhYmxlLnJlc3VsdCksXG4gIHNjYW5JZElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfYXVkaXRfc2Nhbl9pZF9pZHgnKS5vbih0YWJsZS5zY2FuSWQpLFxufSkpO1xuXG4vKipcbiAqIFBlci1lbnRpdHkgZXhlbXB0aW9ucyBmcm9tIHNwZWNpZmljIGNvbXBsaWFuY2UgcnVsZXMuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2VfZXhlbXB0aW9uc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZUV4ZW1wdGlvbiA9IHBnVGFibGUoJ2NvbXBsaWFuY2VfZXhlbXB0aW9ucycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBydWxlSWQ6IHV1aWQoJ3J1bGVfaWQnKS5ub3ROdWxsKCkucmVmZXJlbmNlcygoKSA9PiBjb21wbGlhbmNlUnVsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pLFxuICBlbnRpdHlUeXBlOiB2YXJjaGFyKCdlbnRpdHlfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTxSdWxlVGFyZ2V0PigpLm5vdE51bGwoKSxcbiAgZW50aXR5SWQ6IHV1aWQoJ2VudGl0eV9pZCcpLm5vdE51bGwoKSxcbiAgZW50aXR5TmFtZTogdmFyY2hhcignZW50aXR5X25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICByZWFzb246IHRleHQoJ3JlYXNvbicpLm5vdE51bGwoKSxcbiAgYXBwcm92ZWRCeTogdGV4dCgnYXBwcm92ZWRfYnknKSxcbiAgcmVqZWN0aW9uUmVhc29uOiB0ZXh0KCdyZWplY3Rpb25fcmVhc29uJyksXG4gIHN0YXR1czogdmFyY2hhcignc3RhdHVzJywgeyBsZW5ndGg6IDIwIH0pLmRlZmF1bHQoJ3BlbmRpbmcnKS5ub3ROdWxsKCksIC8vIHBlbmRpbmcgfCBhcHByb3ZlZCB8IHJlamVjdGVkIHwgZXhwaXJlZFxuICBleHBpcmVzQXQ6IHRpbWVzdGFtcCgnZXhwaXJlc19hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ1J1bGVFbnRpdHlVbmlxdWU6IHVuaXF1ZUluZGV4KCdjb21wbGlhbmNlX2V4ZW1wdGlvbl9vcmdfcnVsZV9lbnRpdHlfdW5pcXVlJylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLnJ1bGVJZCwgdGFibGUuZW50aXR5SWQpLFxuICBvcmdTdGF0dXNJZHg6IGluZGV4KCdjb21wbGlhbmNlX2V4ZW1wdGlvbl9vcmdfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5zdGF0dXMpLFxuICBleHBpcmVzQXRJZHg6IGluZGV4KCdjb21wbGlhbmNlX2V4ZW1wdGlvbl9leHBpcmVzX2F0X2lkeCcpLm9uKHRhYmxlLmV4cGlyZXNBdCksXG4gIGVudGl0eUlkSWR4OiBpbmRleCgnY29tcGxpYW5jZV9leGVtcHRpb25fZW50aXR5X2lkX2lkeCcpLm9uKHRhYmxlLmVudGl0eUlkKSxcbn0pKTtcblxuLyoqXG4gKiBUcmFja3Mgd2hpY2ggb3JncyBoYXZlIG9wdGVkIGludG8gc3lzdGVtLW9yZyBwdWJsaXNoZWQgY29tcGxpYW5jZSBydWxlcy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9ydWxlX3N1YnNjcmlwdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VSdWxlU3Vic2NyaXB0aW9uID0gcGdUYWJsZSgnY29tcGxpYW5jZV9ydWxlX3N1YnNjcmlwdGlvbnMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcnVsZUlkOiB1dWlkKCdydWxlX2lkJykubm90TnVsbCgpLnJlZmVyZW5jZXMoKCkgPT4gY29tcGxpYW5jZVJ1bGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KSxcbiAgc3Vic2NyaWJlZEJ5OiB0ZXh0KCdzdWJzY3JpYmVkX2J5Jykubm90TnVsbCgpLFxuICBzdWJzY3JpYmVkQXQ6IHRpbWVzdGFtcCgnc3Vic2NyaWJlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcbiAgcGlubmVkVmVyc2lvbjoganNvbmIoJ3Bpbm5lZF92ZXJzaW9uJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCksXG4gIHVuc3Vic2NyaWJlZEF0OiB0aW1lc3RhbXAoJ3Vuc3Vic2NyaWJlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICB1bnN1YnNjcmliZWRCeTogdGV4dCgndW5zdWJzY3JpYmVkX2J5JyksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ1J1bGVVbmlxdWU6IHVuaXF1ZUluZGV4KCdjb21wbGlhbmNlX3J1bGVfc3ViX29yZ19ydWxlX3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ydWxlSWQpLFxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdjb21wbGlhbmNlX3J1bGVfc3ViX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcbiAgcnVsZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcnVsZV9zdWJfcnVsZV9pZHgnKS5vbih0YWJsZS5ydWxlSWQpLFxufSkpO1xuXG4vKipcbiAqIEJ1bGsgY29tcGxpYW5jZSBzY2FucyAgdHJhY2tzIHNjaGVkdWxlZCBhbmQgb24tZGVtYW5kIHNjYW5zLlxuICpcbiAqIEB0YWJsZSBjb21wbGlhbmNlX3NjYW5zXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlU2NhbiA9IHBnVGFibGUoJ2NvbXBsaWFuY2Vfc2NhbnMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgdGFyZ2V0OiB2YXJjaGFyKCd0YXJnZXQnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLCAvLyBwbHVnaW4gfCBwaXBlbGluZSB8IGFsbFxuICBmaWx0ZXI6IGpzb25iKCdmaWx0ZXInKSwgLy8gb3B0aW9uYWwgZW50aXR5IGZpbHRlciBmb3IgcGFydGlhbCBzY2Fuc1xuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5kZWZhdWx0KCdwZW5kaW5nJykubm90TnVsbCgpLCAvLyBwZW5kaW5nIHwgcnVubmluZyB8IGNvbXBsZXRlZCB8IGZhaWxlZCB8IGNhbmNlbGxlZFxuICB0cmlnZ2VyZWRCeTogdmFyY2hhcigndHJpZ2dlcmVkX2J5JywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gbWFudWFsIHwgc2NoZWR1bGVkIHwgcnVsZS1jaGFuZ2UgfCBydWxlLWRyeS1ydW5cbiAgdXNlcklkOiB0ZXh0KCd1c2VyX2lkJykubm90TnVsbCgpLFxuICB0b3RhbEVudGl0aWVzOiBpbnRlZ2VyKCd0b3RhbF9lbnRpdGllcycpLmRlZmF1bHQoMCkubm90TnVsbCgpLFxuICBwcm9jZXNzZWRFbnRpdGllczogaW50ZWdlcigncHJvY2Vzc2VkX2VudGl0aWVzJykuZGVmYXVsdCgwKS5ub3ROdWxsKCksXG4gIHBhc3NDb3VudDogaW50ZWdlcigncGFzc19jb3VudCcpLmRlZmF1bHQoMCkubm90TnVsbCgpLFxuICB3YXJuQ291bnQ6IGludGVnZXIoJ3dhcm5fY291bnQnKS5kZWZhdWx0KDApLm5vdE51bGwoKSxcbiAgYmxvY2tDb3VudDogaW50ZWdlcignYmxvY2tfY291bnQnKS5kZWZhdWx0KDApLm5vdE51bGwoKSxcbiAgLy8gVHJ1ZSB3aGVuIHRoZSBzY2FuIHN0b3BwZWQgZWFybHkgYXQgYSBjb25maWd1cmVkIHBlci1zY2FuIGNhcCAoc28gdGhlXG4gIC8vIGNvdW50cyBhYm92ZSByZXByZXNlbnQgYSBzdWJzZXQsIG5vdCB0aGUgZnVsbCBlbnRpdHkgdW5pdmVyc2UpLiBTdXJmYWNlZFxuICAvLyBpbiB0aGUgc2Nhbi1zdGF0dXMgVUkgc28gdXNlcnMga25vdyB3aGV0aGVyIHRvIHdpZGVuIHRoZSBmaWx0ZXIuXG4gIC8vIE1JR1JBVElPTiBSRVFVSVJFRDogcnVuIGBwbnBtIGRyaXp6bGUta2l0IGdlbmVyYXRlYCBhZnRlciBwdWxsaW5nLlxuICB0cnVuY2F0ZWQ6IGJvb2xlYW4oJ3RydW5jYXRlZCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgc3RhcnRlZEF0OiB0aW1lc3RhbXAoJ3N0YXJ0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY29tcGxldGVkQXQ6IHRpbWVzdGFtcCgnY29tcGxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNhbmNlbGxlZEF0OiB0aW1lc3RhbXAoJ2NhbmNlbGxlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjYW5jZWxsZWRCeTogdGV4dCgnY2FuY2VsbGVkX2J5JyksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnQ3JlYXRlZEF0SWR4OiBpbmRleCgnY29tcGxpYW5jZV9zY2FuX29yZ19jcmVhdGVkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdTdGF0dXNJZHg6IGluZGV4KCdjb21wbGlhbmNlX3NjYW5fb3JnX3N0YXR1c19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuc3RhdHVzKSxcbn0pKTtcblxuLyoqXG4gKiBDcm9uLWJhc2VkIHJlY3VycmluZyBzY2FuIHNjaGVkdWxlcy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9zY2FuX3NjaGVkdWxlc1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZVNjYW5TY2hlZHVsZSA9IHBnVGFibGUoJ2NvbXBsaWFuY2Vfc2Nhbl9zY2hlZHVsZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgdGFyZ2V0OiB2YXJjaGFyKCd0YXJnZXQnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLCAvLyBwbHVnaW4gfCBwaXBlbGluZSB8IGFsbFxuICBjcm9uRXhwcmVzc2lvbjogdmFyY2hhcignY3Jvbl9leHByZXNzaW9uJywgeyBsZW5ndGg6IDEwMCB9KS5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcbiAgbGFzdFJ1bkF0OiB0aW1lc3RhbXAoJ2xhc3RfcnVuX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIG5leHRSdW5BdDogdGltZXN0YW1wKCduZXh0X3J1bl9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIGFjdGl2ZU5leHRSdW5JZHg6IGluZGV4KCdjb21wbGlhbmNlX3NjYW5fc2NoZWR1bGVfYWN0aXZlX25leHRfaWR4JylcbiAgICAub24odGFibGUuaXNBY3RpdmUsIHRhYmxlLm5leHRSdW5BdCksXG4gIG9yZ0lkeDogaW5kZXgoJ2NvbXBsaWFuY2Vfc2Nhbl9zY2hlZHVsZV9vcmdfaWR4Jykub24odGFibGUub3JnSWQpLFxufSkpO1xuXG4vKipcbiAqIFBlci1vcmcgbm90aWZpY2F0aW9uIHNldHRpbmdzIGZvciBjb21wbGlhbmNlIGV2ZW50cy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9ub3RpZmljYXRpb25fcHJlZmVyZW5jZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VOb3RpZmljYXRpb25QcmVmZXJlbmNlID0gcGdUYWJsZSgnY29tcGxpYW5jZV9ub3RpZmljYXRpb25fcHJlZmVyZW5jZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgbm90aWZ5T25CbG9jazogYm9vbGVhbignbm90aWZ5X29uX2Jsb2NrJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIG5vdGlmeU9uV2FybmluZzogYm9vbGVhbignbm90aWZ5X29uX3dhcm5pbmcnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG4gIC8vIE9wdC1pbiBlbWFpbCBkZWxpdmVyeSAodG8gYHRhcmdldFVzZXJzYCwgb3IgYWxsIG9yZyBhZG1pbnMgd2hlbiBudWxsKS5cbiAgZW1haWxFbmFibGVkOiBib29sZWFuKCdlbWFpbF9lbmFibGVkJykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuICBkaWdlc3RNb2RlOiB2YXJjaGFyKCdkaWdlc3RfbW9kZScsIHsgbGVuZ3RoOiAyMCB9KS5kZWZhdWx0KCdpbW1lZGlhdGUnKS5ub3ROdWxsKCksIC8vIGltbWVkaWF0ZSB8IGRhaWx5IHwgd2Vla2x5XG4gIGRpZ2VzdFNjaGVkdWxlOiB2YXJjaGFyKCdkaWdlc3Rfc2NoZWR1bGUnLCB7IGxlbmd0aDogMTAwIH0pLFxuICBsYXN0RGlnZXN0QXQ6IHRpbWVzdGFtcCgnbGFzdF9kaWdlc3RfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgdGFyZ2V0VXNlcnM6IGpzb25iKCd0YXJnZXRfdXNlcnMnKS4kdHlwZTxzdHJpbmdbXT4oKSwgLy8gbnVsbCA9IGFsbCBvcmcgYWRtaW5zXG4gIHdlYmhvb2tVcmw6IHZhcmNoYXIoJ3dlYmhvb2tfdXJsJywgeyBsZW5ndGg6IDUwMCB9KSxcbiAgd2ViaG9va1NlY3JldDogdmFyY2hhcignd2ViaG9va19zZWNyZXQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIExvZyBvZiBhbGwgY29tcGxpYW5jZSBub3RpZmljYXRpb25zIHNlbnQuXG4gKlxuICogQHRhYmxlIGNvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX2xvZ1xuICovXG5leHBvcnQgY29uc3QgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZyA9IHBnVGFibGUoJ2NvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX2xvZycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBjaGFubmVsOiB2YXJjaGFyKCdjaGFubmVsJywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gaW4tYXBwIHwgd2ViaG9vayB8IGRpZ2VzdFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksIC8vIHNlbnQgfCBmYWlsZWQgfCBwZW5kaW5nXG4gIHBheWxvYWQ6IGpzb25iKCdwYXlsb2FkJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkubm90TnVsbCgpLFxuICB3ZWJob29rUmVzcG9uc2VDb2RlOiBpbnRlZ2VyKCd3ZWJob29rX3Jlc3BvbnNlX2NvZGUnKSxcbiAgd2ViaG9va0Vycm9yOiB0ZXh0KCd3ZWJob29rX2Vycm9yJyksXG4gIHJldHJ5Q291bnQ6IGludGVnZXIoJ3JldHJ5X2NvdW50JykuZGVmYXVsdCgwKS5ub3ROdWxsKCksXG4gIG5leHRSZXRyeUF0OiB0aW1lc3RhbXAoJ25leHRfcmV0cnlfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgcmVsYXRlZEF1ZGl0SWQ6IHV1aWQoJ3JlbGF0ZWRfYXVkaXRfaWQnKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdDcmVhdGVkQXRJZHg6IGluZGV4KCdjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9vcmdfY3JlYXRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEF0KSxcbiAgc3RhdHVzUmV0cnlJZHg6IGluZGV4KCdjb21wbGlhbmNlX25vdGlmaWNhdGlvbl9zdGF0dXNfcmV0cnlfaWR4JylcbiAgICAub24odGFibGUuc3RhdHVzLCB0YWJsZS5uZXh0UmV0cnlBdCksXG4gIHJlbGF0ZWRBdWRpdElkeDogaW5kZXgoJ2NvbXBsaWFuY2Vfbm90aWZpY2F0aW9uX3JlbGF0ZWRfYXVkaXRfaWR4JylcbiAgICAub24odGFibGUucmVsYXRlZEF1ZGl0SWQpLFxufSkpO1xuXG4vKipcbiAqIENvbXBsaWFuY2Utc3BlY2lmaWMgUkJBQyByb2xlcy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9yb2xlc1xuICovXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUm9sZVR5cGUgPSAnY29tcGxpYW5jZS12aWV3ZXInIHwgJ2NvbXBsaWFuY2UtZWRpdG9yJyB8ICdjb21wbGlhbmNlLWFkbWluJztcblxuZXhwb3J0IGNvbnN0IGNvbXBsaWFuY2VSb2xlID0gcGdUYWJsZSgnY29tcGxpYW5jZV9yb2xlcycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICB1c2VySWQ6IHRleHQoJ3VzZXJfaWQnKS5ub3ROdWxsKCksXG4gIHJvbGU6IHZhcmNoYXIoJ3JvbGUnLCB7IGxlbmd0aDogMzAgfSkuJHR5cGU8Q29tcGxpYW5jZVJvbGVUeXBlPigpLm5vdE51bGwoKSxcbiAgZ3JhbnRlZEJ5OiB0ZXh0KCdncmFudGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnVXNlclVuaXF1ZTogdW5pcXVlSW5kZXgoJ2NvbXBsaWFuY2Vfcm9sZV9vcmdfdXNlcl91bmlxdWUnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUudXNlcklkKSxcbiAgb3JnUm9sZUlkeDogaW5kZXgoJ2NvbXBsaWFuY2Vfcm9sZV9vcmdfcm9sZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUucm9sZSksXG59KSk7XG5cbi8qKlxuICogR2VuZXJhdGVkIGNvbXBsaWFuY2UgcmVwb3J0cy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9yZXBvcnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUmVwb3J0ID0gcGdUYWJsZSgnY29tcGxpYW5jZV9yZXBvcnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHJlcG9ydFR5cGU6IHZhcmNoYXIoJ3JlcG9ydF90eXBlJywgeyBsZW5ndGg6IDMwIH0pLm5vdE51bGwoKSwgLy8gc3VtbWFyeSB8IGRldGFpbGVkIHwgYXVkaXQtdHJhaWwgfCBjb21wYXJpc29uXG4gIHRhcmdldDogdmFyY2hhcigndGFyZ2V0JywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSwgLy8gcGx1Z2luIHwgcGlwZWxpbmUgfCBhbGxcbiAgZGF0ZUZyb206IHRpbWVzdGFtcCgnZGF0ZV9mcm9tJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRhdGVUbzogdGltZXN0YW1wKCdkYXRlX3RvJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbXBhcmVGcm9tOiB0aW1lc3RhbXAoJ2NvbXBhcmVfZnJvbScsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wYXJlVG86IHRpbWVzdGFtcCgnY29tcGFyZV90bycsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkYXRhOiBqc29uYignZGF0YScpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLm5vdE51bGwoKSxcbiAgZm9ybWF0OiB2YXJjaGFyKCdmb3JtYXQnLCB7IGxlbmd0aDogMTAgfSkuZGVmYXVsdCgnanNvbicpLm5vdE51bGwoKSwgLy8ganNvbiB8IGNzdlxuICBnZW5lcmF0ZWRCeTogdGV4dCgnZ2VuZXJhdGVkX2J5Jykubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ0NyZWF0ZWRBdElkeDogaW5kZXgoJ2NvbXBsaWFuY2VfcmVwb3J0X29yZ19jcmVhdGVkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLFxufSkpO1xuXG4vKipcbiAqIENyb24tYmFzZWQgcmVjdXJyaW5nIHJlcG9ydCBnZW5lcmF0aW9uIHNjaGVkdWxlcy5cbiAqXG4gKiBAdGFibGUgY29tcGxpYW5jZV9yZXBvcnRfc2NoZWR1bGVzXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wbGlhbmNlUmVwb3J0U2NoZWR1bGUgPSBwZ1RhYmxlKCdjb21wbGlhbmNlX3JlcG9ydF9zY2hlZHVsZXMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVwb3J0VHlwZTogdmFyY2hhcigncmVwb3J0X3R5cGUnLCB7IGxlbmd0aDogMzAgfSkubm90TnVsbCgpLCAvLyBzdW1tYXJ5IHwgZGV0YWlsZWRcbiAgdGFyZ2V0OiB2YXJjaGFyKCd0YXJnZXQnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLCAvLyBwbHVnaW4gfCBwaXBlbGluZSB8IGFsbFxuICBmb3JtYXQ6IHZhcmNoYXIoJ2Zvcm1hdCcsIHsgbGVuZ3RoOiAxMCB9KS5kZWZhdWx0KCdqc29uJykubm90TnVsbCgpLFxuICBjcm9uRXhwcmVzc2lvbjogdmFyY2hhcignY3Jvbl9leHByZXNzaW9uJywgeyBsZW5ndGg6IDEwMCB9KS5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKS5kZWZhdWx0KHRydWUpLm5vdE51bGwoKSxcbiAgbGFzdFJ1bkF0OiB0aW1lc3RhbXAoJ2xhc3RfcnVuX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIG5leHRSdW5BdDogdGltZXN0YW1wKCduZXh0X3J1bl9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxpdmVyVG86IGpzb25iKCdkZWxpdmVyX3RvJykuJHR5cGU8c3RyaW5nW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLCAvLyB1c2VySWRzIHRvIG5vdGlmeVxuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5Jykubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIGFjdGl2ZU5leHRSdW5JZHg6IGluZGV4KCdjb21wbGlhbmNlX3JlcG9ydF9zY2hlZHVsZV9hY3RpdmVfbmV4dF9pZHgnKVxuICAgIC5vbih0YWJsZS5pc0FjdGl2ZSwgdGFibGUubmV4dFJ1bkF0KSxcbiAgb3JnSWR4OiBpbmRleCgnY29tcGxpYW5jZV9yZXBvcnRfc2NoZWR1bGVfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLy8gQ29tcGxpYW5jZSB0eXBlc1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUG9saWN5ID0gdHlwZW9mIGNvbXBsaWFuY2VQb2xpY3kuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVBvbGljeUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlUG9saWN5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJ1bGUgPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJ1bGVJbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUnVsZUhpc3RvcnkgPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGVIaXN0b3J5LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSdWxlSGlzdG9yeUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlUnVsZUhpc3RvcnkuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlQXVkaXRMb2cgPSB0eXBlb2YgY29tcGxpYW5jZUF1ZGl0TG9nLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VBdWRpdExvZ0luc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlQXVkaXRMb2cuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlRXhlbXB0aW9uID0gdHlwZW9mIGNvbXBsaWFuY2VFeGVtcHRpb24uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZUV4ZW1wdGlvbkluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlRXhlbXB0aW9uLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24gPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb25JbnNlcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJ1bGVTdWJzY3JpcHRpb24uJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlU2NhbiA9IHR5cGVvZiBjb21wbGlhbmNlU2Nhbi4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlU2Nhbkluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlU2Nhbi4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VTY2FuU2NoZWR1bGUgPSB0eXBlb2YgY29tcGxpYW5jZVNjYW5TY2hlZHVsZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlU2NhblNjaGVkdWxlSW5zZXJ0ID0gdHlwZW9mIGNvbXBsaWFuY2VTY2FuU2NoZWR1bGUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZSA9IHR5cGVvZiBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlTm90aWZpY2F0aW9uUHJlZmVyZW5jZS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2cgPSB0eXBlb2YgY29tcGxpYW5jZU5vdGlmaWNhdGlvbkxvZy4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlTm90aWZpY2F0aW9uTG9nSW5zZXJ0ID0gdHlwZW9mIGNvbXBsaWFuY2VOb3RpZmljYXRpb25Mb2cuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUm9sZSA9IHR5cGVvZiBjb21wbGlhbmNlUm9sZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUm9sZUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlUm9sZS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSZXBvcnQgPSB0eXBlb2YgY29tcGxpYW5jZVJlcG9ydC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUmVwb3J0SW5zZXJ0ID0gdHlwZW9mIGNvbXBsaWFuY2VSZXBvcnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBDb21wbGlhbmNlUmVwb3J0U2NoZWR1bGUgPSB0eXBlb2YgY29tcGxpYW5jZVJlcG9ydFNjaGVkdWxlLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VSZXBvcnRTY2hlZHVsZUluc2VydCA9IHR5cGVvZiBjb21wbGlhbmNlUmVwb3J0U2NoZWR1bGUuJGluZmVySW5zZXJ0O1xuIl19
|
|
@@ -75,13 +75,6 @@ export declare function runWithTenantContext<T>(ctx: TenantContext, fn: () => T)
|
|
|
75
75
|
/** Read the current tenant context. Returns undefined outside an
|
|
76
76
|
* `runWithTenantContext` scope (e.g. background workers, migrations). */
|
|
77
77
|
export declare function getTenantContext(): TenantContext | undefined;
|
|
78
|
-
/**
|
|
79
|
-
* Assert that the current code is running inside a tenant scope. Callers
|
|
80
|
-
* that legitimately need to refuse to operate without one (e.g. handlers
|
|
81
|
-
* that touch FORCE'd RLS tables) can use this instead of relying on the
|
|
82
|
-
* downstream "permission denied" error to surface the bug.
|
|
83
|
-
*/
|
|
84
|
-
export declare function requireTenantContext(): TenantContext;
|
|
85
78
|
/**
|
|
86
79
|
* Open a transaction with RLS GUCs SET LOCAL from the current
|
|
87
80
|
* AsyncLocalStorage tenant context, then invoke `fn(tx)`.
|
package/lib/database/tenancy.js
CHANGED
|
@@ -85,20 +85,6 @@ export function runWithTenantContext(ctx, fn) {
|
|
|
85
85
|
export function getTenantContext() {
|
|
86
86
|
return tenantContext.getStore();
|
|
87
87
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Assert that the current code is running inside a tenant scope. Callers
|
|
90
|
-
* that legitimately need to refuse to operate without one (e.g. handlers
|
|
91
|
-
* that touch FORCE'd RLS tables) can use this instead of relying on the
|
|
92
|
-
* downstream "permission denied" error to surface the bug.
|
|
93
|
-
*/
|
|
94
|
-
export function requireTenantContext() {
|
|
95
|
-
const ctx = tenantContext.getStore();
|
|
96
|
-
if (!ctx) {
|
|
97
|
-
throw new Error('requireTenantContext: no tenant scope active. Wrap your handler/worker in '
|
|
98
|
-
+ 'runWithTenantContext({ orgId, isSuperAdmin }, ...) before any DB call.');
|
|
99
|
-
}
|
|
100
|
-
return ctx;
|
|
101
|
-
}
|
|
102
88
|
/**
|
|
103
89
|
* Open a transaction with RLS GUCs SET LOCAL from the current
|
|
104
90
|
* AsyncLocalStorage tenant context, then invoke `fn(tx)`.
|
|
@@ -164,4 +150,4 @@ export async function withTenantTx(fn) {
|
|
|
164
150
|
return fn(tx);
|
|
165
151
|
});
|
|
166
152
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWU5QyxTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZFLHVFQUF1RTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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eXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGVuYW50LWNvbnRleHQgcGx1bWJpbmcgZm9yIFBvc3RncmVzIHJvdy1sZXZlbCBzZWN1cml0eS5cbiAqXG4gKiBCYWNrZ3JvdW5kOiBwb3N0Z3Jlcy1pbml0LnNxbCBpbnN0YWxscyBSTFMgcG9saWNpZXMgb24gZXZlcnkgdXNlci1kYXRhXG4gKiB0YWJsZSB0aGF0IGNvbnN1bHQgdHdvIHNlc3Npb24gR1VDcyDigJQgYGFwcC5vcmdfaWRgIGFuZCBgYXBwLmlzX3N5c2FkbWluYC5cbiAqIE1vc3QgdXNlci1kYXRhIHRhYmxlcyBoYXZlIGJlZW4gZmxpcHBlZCB0byBgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZYCwgc29cbiAqIHRoZSBwb2xpY2llcyBETyBlbmZvcmNlIGV2ZW4gZm9yIHRoZSAob3duaW5nKSBjb25uZWN0aW9uIHVzZXIg4oCUIGEgcXVlcnlcbiAqIGFnYWluc3QgYSBGT1JDRSdkIHRhYmxlIG11c3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzIFNFVCBMT0NBTCdkXG4gKiBib3RoIEdVQ3Mgb3IgaXQgcmV0dXJucyB6ZXJvIHJvd3MgZm9yIG5vbi1zeXNhZG1pbnMgKGFuZCBtYXkgZmFpbCB0byB3cml0ZVxuICogZm9yIGFueSBjYWxsZXIpLiBBIGZldyB0YWJsZXMgcmVtYWluIGBFTkFCTEVgLW9ubHkgKG93bmVyLWJ5cGFzcykgcGVuZGluZ1xuICogdGhlaXIgc29hazsgdGhlIHNhbWUgY29udGV4dCBwbHVtYmluZyBjb3ZlcnMgYm90aC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyB0aGUgc2VhbS5cbiAqXG4gKiAgIDEuIGB0ZW5hbnRDb250ZXh0YCAoQXN5bmNMb2NhbFN0b3JhZ2UpIGNhcnJpZXMgYHtvcmdJZCwgaXNTdXBlckFkbWlufWBcbiAqICAgICAgZG93biB0aGUgY2FsbCBjaGFpbiB3aXRob3V0IHByb3AtZHJpbGxpbmcuIFNldCBvbmNlIGF0IHRoZSByZXF1ZXN0XG4gKiAgICAgIGJvdW5kYXJ5OyByZWFkYWJsZSBmcm9tIGFueXdoZXJlLlxuICpcbiAqICAgMi4gYHdpdGhUZW5hbnRUeChmbilgIG9wZW5zIGEgdHJhbnNhY3Rpb24sIFNFVCBMT0NBTCdzIGJvdGggR1VDcyBmcm9tXG4gKiAgICAgIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCB0aGVuIGludm9rZXMgYGZuKHR4KWAuIFNlcnZpY2VzIG1pZ3JhdGUgb25lXG4gKiAgICAgIGF0IGEgdGltZSBieSB3cmFwcGluZyB0aGVpciBleGlzdGluZyBkcml6emxlIGNhbGxzIGluIHRoaXMgaGVscGVyIOKAlFxuICogICAgICBgZGIuc2VsZWN0KCkuZnJvbSguLi4pYCBiZWNvbWVzIGB3aXRoVGVuYW50VHgodHggPT4gdHguc2VsZWN0KCkuZnJvbSguLi4pKWAuXG4gKlxuICogICAzLiBgcnVuV2l0aFRlbmFudENvbnRleHQoY3R4LCBmbilgIGlzIHRoZSBFeHByZXNzLW1pZGRsZXdhcmUtc2lkZVxuICogICAgICBib29rZW5kIHRoYXQgZXN0YWJsaXNoZXMgdGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlIGZvciB0aGUgcmVxdWVzdC5cbiAqXG4gKiBNaWdyYXRpb24gb3JkZXIgKHNlZSBkb2NzL3BsYW5zL2YtMS0wLXJscy1lbmZvcmNlbWVudC5tZCk6XG4gKiAgIC0gRmlyc3QgYWRvcHRlcnM6IG5ld2x5LXdyaXR0ZW4gc2VydmljZXMgKGRhc2hib2FyZCwgYWxlcnQtZGVzdGluYXRpb24pXG4gKiAgICAgd2hlcmUgdGhlIGNoYW5nZSBpcyBtZWNoYW5pY2FsLlxuICogICAtIFRoZW4gaGlnaC13cml0ZSBzZXJ2aWNlcyAocGx1Z2luLCBwaXBlbGluZSkuIFNvYWsgZWFjaCBvbmUgYmVmb3JlXG4gKiAgICAgZmxpcHBpbmcgdGhlIHVuZGVybHlpbmcgdGFibGUgdG8gRk9SQ0UuXG4gKiAgIC0gYWRtaW5fYXVkaXRfbG9nIHVzZXMgYSBzeXNhZG1pbi1vbmx5IHBvbGljeSDigJQgc3lzYWRtaW4gcGF0aHMgbXVzdFxuICogICAgIGFsc28gc2V0IGBhcHAuaXNfc3lzYWRtaW4gPSAndHJ1ZSdgIG9yIHRoZXknbGwgbG9zZSBhY2Nlc3MgdG8gaXQuXG4gKi9cblxuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi9wb3N0Z3Jlcy1jb25uZWN0aW9uLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0ZW5hbnQtY29udGV4dCcpO1xuXG4vKipcbiAqIEJlaGF2aW9yIHdoZW4gYHdpdGhUZW5hbnRUeGAgaXMgaW52b2tlZCBvdXRzaWRlIGFueSBgcnVuV2l0aFRlbmFudENvbnRleHRgXG4gKiBzY29wZS4gVGhlIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGZhaWwtZmFzdCAoJ3N0cmljdCcpIGluIHByb2R1Y3Rpb24gc28gYVxuICogbWlzc2luZyB0ZW5hbnQgc2NvcGUgc3VyZmFjZXMgYXQgdGhlIGJhZCBjYWxsIHNpdGUgaW5zdGVhZCBvZiBzaWxlbnRseVxuICogcnVubmluZyB3aXRoIGVtcHR5IFJMUyBHVUNzOyBvdXRzaWRlIHByb2R1Y3Rpb24gaXQgZGVmYXVsdHMgdG8gJ3dhcm4nIHNvXG4gKiB1bi1hdWRpdGVkIGRldi90ZXN0IHBhdGhzIGtlZXAgd29ya2luZyBidXQgbG9nIGFuIGFjdGlvbmFibGUgdHJhY2UuIEFuXG4gKiBleHBsaWNpdCBSTFNfQ09OVEVYVF9NT0RFIGVudiBvdmVycmlkZSBhbHdheXMgd2lucy5cbiAqXG4gKiAnc2lsZW50JyBpcyBrZXB0IGZvciB0ZXN0cyBhbmQgc2NyaXB0cyB0aGF0IGludGVudGlvbmFsbHkgZW50ZXIgdGhlIERCXG4gKiB3aXRob3V0IGNvbnRleHQgKGUuZy4gaW50ZWdyYXRpb24gdGVzdCBzZXR1cCB0aGF0IHJ1bnMgYXMgdGhlIGNvbm5lY3Rpb25cbiAqIG93bmVyIGJlZm9yZSBhbnkgdGVuYW50IGlzIHByb3Zpc2lvbmVkKS5cbiAqL1xudHlwZSBDb250ZXh0TW9kZSA9ICdzaWxlbnQnIHwgJ3dhcm4nIHwgJ3N0cmljdCc7XG5mdW5jdGlvbiBnZXRDb250ZXh0TW9kZSgpOiBDb250ZXh0TW9kZSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LlJMU19DT05URVhUX01PREU/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09ICdzaWxlbnQnIHx8IHJhdyA9PT0gJ3dhcm4nIHx8IHJhdyA9PT0gJ3N0cmljdCcpIHJldHVybiByYXc7XG4gIC8vIE5vIGV4cGxpY2l0IG92ZXJyaWRlOiBmYWlsLWZhc3QgaW4gcHJvZHVjdGlvbiwgd2FybiBldmVyeXdoZXJlIGVsc2UuXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gJ3N0cmljdCcgOiAnd2Fybic7XG59XG5cbi8qKlxuICogUGVyLXN0YXRlbWVudCBzZXJ2ZXItc2lkZSB0aW1lb3V0IChtcykgYXBwbGllZCBJTlNJREUgZXZlcnkgYHdpdGhUZW5hbnRUeGBcbiAqIHRyYW5zYWN0aW9uLCBuZXh0IHRvIHRoZSBSTFMgR1VDcy4gYHdpdGhUZW5hbnRUeGAgaXMgdGhlIHJlYWwgcXVlcnkgcGF0aCBmb3JcbiAqIGFsbCBSTFMvQ1JVRCByZWFkcyBhbmQgd3JpdGVzLCBzbyB0aGlzIGlzIHdoZXJlIHRoZSBEQi1zaWRlIGd1YXJkIGJlbG9uZ3MgKHRoZVxuICogb2xkIGBDb25uZWN0aW9uLnRyYW5zYWN0aW9uYCB3cmFwcGVyIHRoYXQgc2V0IGl0IGlzIGRlYWQg4oCUIHNlZVxuICogcG9zdGdyZXMtY29ubmVjdGlvbi50cykuIEJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICogY29ubmVjdGlvbiBvcGVuIGluZGVmaW5pdGVseS4gRW52LWNvbmZpZ3VyYWJsZSB2aWEgYERCX1NUQVRFTUVOVF9USU1FT1VUX01TYFxuICogKGRlZmF1bHQgMzBzKTsgc2V0IHRvIGAwYCB0byBkaXNhYmxlIHRoZSB0aW1lb3V0LlxuICovXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfU1RBVEVNRU5UX1RJTUVPVVRfTVMgPz8gJycsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+PSAwID8gcmF3IDogMzAwMDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q29udGV4dCB7XG4gIC8qKiBDYWxsZXIncyBvcmcuIFVuZGVmaW5lZCBmb3IgdW4tYXV0aGVudGljYXRlZCAvIHN5c3RlbSBqb2JzLiAqL1xuICBvcmdJZD86IHN0cmluZztcbiAgLyoqIENhbGxlcidzIHVzZXIgaWQuIE5vdCB1c2VkIGZvciBSTFMg4oCUIFBvc3RncmVzIHBvbGljaWVzIGFyZSBvcmctZ3JhaW5lZCxcbiAgICogIHdpdGggbm8gcGVyLXVzZXIgc2Vzc2lvbiBHVUMg4oCUIGJ1dCBjYXJyaWVkIHNvIGFwcC1sYXllciBwcmVkaWNhdGVzIHdpdGggYVxuICAgKiAgUEVSLVVTRVIgcnVuZyAocGlwZWxpbmUgdGVtcGxhdGVzJyBgcHJpdmF0ZWAgdmlzaWJpbGl0eSkgY2FuIHJlc29sdmUgXCJ3aG9cbiAgICogIGlzIGFza2luZ1wiIG9uIHBhdGhzIHRoYXQgaGF2ZSBub3doZXJlIHRvIHBhc3MgaXQsIG5vdGFibHkgQ3J1ZFNlcnZpY2Unc1xuICAgKiAgYHdyaXRlQ29uZGl0aW9uc2AuIEFic2VudCBmb3Igc3lzdGVtIGpvYnMsIHdoaWNoIGlzIHRoZSBmYWlsLWNsb3NlZCBjYXNlOlxuICAgKiAgbm8gdmlld2VyIOKHkiBubyBwcml2YXRlIHJvd3MuICovXG4gIHVzZXJJZD86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY2FsbGVyIGlzIGEgc3lzYWRtaW4gKHN5c3RlbS1vcmcgYWRtaW4pLiBCeXBhc3NlcyBSTFNcbiAgICogIHBvbGljaWVzIHZpYSB0aGUgc3lzYWRtaW4tYnlwYXNzIGJyYW5jaCBpbiBgY3VycmVudF9pc19zeXNhZG1pbigpYC4gKi9cbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xuICAvKiogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeTogdGhlIGNhbGxlcidzIGFjdGl2ZS1vcmcgcGFyZW50IChwcmVzZW50IG9ubHkgd2hlbiB0aGVcbiAgICogIGFjdGl2ZSBvcmcgaXMgYSB0ZWFtKS4gTm90IHVzZWQgZm9yIFJMUzsgY2FycmllZCBzbyBkb3duc3RyZWFtIHNpZGUtZWZmZWN0c1xuICAgKiAgKGUuZy4gZW50aXR5LWV2ZW50IGNvbXBsaWFuY2UgZXZhbCkgY2FuIGhvbm9yIHBhcmVudCBgcHJvcGFnYXRlVG9DaGlsZHJlbmBcbiAgICogIHJ1bGVzIHdpdGhvdXQgYSByZXF1ZXN0IGluIHNjb3BlLiAqL1xuICBwYXJlbnRPcmdJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItcmVxdWVzdCB0ZW5hbnQgY29udGV4dC4gUG9wdWxhdGVkIGJ5IEV4cHJlc3MgbWlkZGxld2FyZSBvbmNlIHRoZSBKV1RcbiAqIGlzIHZhbGlkYXRlZDsgY29uc3VtZWQgYnkgYHdpdGhUZW5hbnRUeGAgYW5kIGFueSBoZWxwZXIgdGhhdCBuZWVkcyB0b1xuICoga25vdyBcIndobyBpcyB0aGUgY2FsbGVyXCIgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbmFudENvbnRleHQgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8VGVuYW50Q29udGV4dD4oKTtcblxuLyoqXG4gKiBSdW4gYGZuYCBpbnNpZGUgdGhlIGdpdmVuIHRlbmFudCBzY29wZS4gVGhlIEFzeW5jTG9jYWxTdG9yYWdlIHNjb3BlXG4gKiBzdXJ2aXZlcyBhY3Jvc3MgYXN5bmMgYm91bmRhcmllcyAoUHJvbWlzZXMsIHNldFRpbWVvdXQsIGV0Yy4pLCBzbyBhbnlcbiAqIGB3aXRoVGVuYW50VHhgIGNhbGwgaW5zaWRlIGBmbmAg4oCUIGRpcmVjdGx5IG9yIHRocm91Z2ggYW55IGRlcHRoIG9mXG4gKiBhc3luYyBoZWxwZXJzIOKAlCBwaWNrcyB1cCBgY3R4YC5cbiAqXG4gKiBXcmFwIGBuZXh0KClgIGZyb20gYW4gRXhwcmVzcyBtaWRkbGV3YXJlIHRvIGVzdGFibGlzaCBwZXItcmVxdWVzdCBzY29wZTpcbiAqXG4gKiAgICAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcbiAqICAgICAgIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAoKSA9PiBuZXh0KCkpO1xuICogICAgIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aFRlbmFudENvbnRleHQ8VD4oY3R4OiBUZW5hbnRDb250ZXh0LCBmbjogKCkgPT4gVCk6IFQge1xuICByZXR1cm4gdGVuYW50Q29udGV4dC5ydW4oY3R4LCBmbik7XG59XG5cbi8qKiBSZWFkIHRoZSBjdXJyZW50IHRlbmFudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdXRzaWRlIGFuXG4gKiAgYHJ1bldpdGhUZW5hbnRDb250ZXh0YCBzY29wZSAoZS5nLiBiYWNrZ3JvdW5kIHdvcmtlcnMsIG1pZ3JhdGlvbnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbmFudENvbnRleHQoKTogVGVuYW50Q29udGV4dCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIGN1cnJlbnQgY29kZSBpcyBydW5uaW5nIGluc2lkZSBhIHRlbmFudCBzY29wZS4gQ2FsbGVyc1xuICogdGhhdCBsZWdpdGltYXRlbHkgbmVlZCB0byByZWZ1c2UgdG8gb3BlcmF0ZSB3aXRob3V0IG9uZSAoZS5nLiBoYW5kbGVyc1xuICogdGhhdCB0b3VjaCBGT1JDRSdkIFJMUyB0YWJsZXMpIGNhbiB1c2UgdGhpcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlXG4gKiBkb3duc3RyZWFtIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB0byBzdXJmYWNlIHRoZSBidWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlVGVuYW50Q29udGV4dCgpOiBUZW5hbnRDb250ZXh0IHtcbiAgY29uc3QgY3R4ID0gdGVuYW50Q29udGV4dC5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZXF1aXJlVGVuYW50Q29udGV4dDogbm8gdGVuYW50IHNjb3BlIGFjdGl2ZS4gV3JhcCB5b3VyIGhhbmRsZXIvd29ya2VyIGluICdcbiAgICAgICsgJ3J1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBhbnkgREIgY2FsbC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cblxuLyoqXG4gKiBPcGVuIGEgdHJhbnNhY3Rpb24gd2l0aCBSTFMgR1VDcyBTRVQgTE9DQUwgZnJvbSB0aGUgY3VycmVudFxuICogQXN5bmNMb2NhbFN0b3JhZ2UgdGVuYW50IGNvbnRleHQsIHRoZW4gaW52b2tlIGBmbih0eClgLlxuICpcbiAqIC0gV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZSAoZS5nLiBmcm9tIGEgYmFja2dyb3VuZCBqb2IgdGhhdFxuICogICBkb2Vzbid0IGhhdmUgYSBjYWxsZXIgaWRlbnRpdHkpLCB0aGUgdHJhbnNhY3Rpb24gaXMgb3BlbmVkIHdpdGggYm90aFxuICogICBHVUNzIGNsZWFyZWQg4oCUIFJMUyBwb2xpY2llcyB3aWxsIHJldHVybiB6ZXJvIHJvd3Mgb24gRk9SQ0UnZCB0YWJsZXMuXG4gKiAgIENhbGxlcnMgdGhhdCBuZWVkIGEgc3lzYWRtaW4tZXF1aXZhbGVudCBzY29wZSBzaG91bGQgd3JhcCB0aGVtc2VsdmVzIGluXG4gKiAgIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCDigKYpYCBleHBsaWNpdGx5LlxuICpcbiAqIC0gVXNlcyBgc2V0X2NvbmZpZyhrZXksIHZhbHVlLCB0cnVlKWAgKHRoZSBib29sZWFuID0gYGlzX2xvY2FsYCwgaS5lLlxuICogICB0cmFuc2FjdGlvbi1zY29wZWQpLiBFcXVpdmFsZW50IHRvIGBTRVQgTE9DQUxgIGJ1dCB0YWtlcyB0aGUgdmFsdWUgYXNcbiAqICAgYSBwYXJhbWV0ZXIsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCDigJQgRHJpenpsZSdzIGBzcWxgIHRlbXBsYXRlIGJpbmRzIHRoZVxuICogICB2YWx1ZSBzYWZlbHkgc28gYW4gYXR0YWNrZXItY29udHJvbGxlZCBgb3JnSWRgIGNhbid0IGVzY2FwZSB0aGUgcXVvdGluZy5cbiAqXG4gKiAtIFJldHVybnMgd2hhdGV2ZXIgYGZuYCByZXR1cm5zOyB0aHJvd3Mgd2hhdGV2ZXIgYGZuYCB0aHJvd3MgKERyaXp6bGVcbiAqICAgaGFuZGxlcyB0aGUgQ09NTUlUL1JPTExCQUNLIGZvciB1cykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVuYW50VHg8VD4oXG4gIGZuOiAodHg6IFBhcmFtZXRlcnM8UGFyYW1ldGVyczx0eXBlb2YgZGIudHJhbnNhY3Rpb24+WzBdPlswXSkgPT4gUHJvbWlzZTxUPixcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjdHggPSB0ZW5hbnRDb250ZXh0LmdldFN0b3JlKCk7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBTdXJmYWNlIHRoZSBidWcgaW5zdGVhZCBvZiBzaWxlbnRseSBTRVQnaW5nIGVtcHR5IEdVQ3MuIFRoZSBkZWZhdWx0XG4gICAgLy8gbW9kZSAoJ3dhcm4nKSBsb2dzIGFuIGFjdGlvbmFibGUgdHJhY2Ugc28gdGhlIGJhZCBjYWxsIHNpdGUgaXMgZWFzeVxuICAgIC8vIHRvIGZpbmQ7IHByb2R1Y3Rpb24gZGVwbG95bWVudHMgdGhhdCBoYXZlIGZpbmlzaGVkIHRoZSBhdWRpdCBjYW4gc2V0XG4gICAgLy8gUkxTX0NPTlRFWFRfTU9ERT1zdHJpY3QgdG8gZmFpbC1mYXN0IGF0IHRoZSBjYWxsIHNpdGUgKGJldHRlciBzdGFja1xuICAgIC8vIHRyYWNlIHRoYW4gdGhlIFBvc3RncmVzIFwicGVybWlzc2lvbiBkZW5pZWRcIiB0aGF0IHdvdWxkIG90aGVyd2lzZVxuICAgIC8vIHN1cmZhY2UgZnJvbSBGT1JDRSdkIFJMUykuXG4gICAgY29uc3QgbW9kZSA9IGdldENvbnRleHRNb2RlKCk7XG4gICAgaWYgKG1vZGUgPT09ICdzdHJpY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGUuIFdyYXAgeW91ciBoYW5kbGVyL3dvcmtlciAnXG4gICAgICAgICsgJ2luIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgb3JnSWQsIGlzU3VwZXJBZG1pbiB9LCAuLi4pIGJlZm9yZSBpbnZva2luZyAnXG4gICAgICAgICsgJ2FueSBzZXJ2aWNlIHRoYXQgdG91Y2hlcyBSTFMtZW5mb3JjZWQgdGFibGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAvLyBJbmNsdWRlIGEgc3ludGhldGljIHN0YWNrIHNvIHRoZSBvZmZlbmRpbmcgY2FsbCBzaXRlIGlzIGluIHRoZSBsb2cuXG4gICAgICBsb2dnZXIud2Fybignd2l0aFRlbmFudFR4IGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlOyBSTFMgR1VDcyB3aWxsIGJlIGVtcHR5Jywge1xuICAgICAgICBzdGFjazogbmV3IEVycm9yKCd0ZW5hbnQtY29udGV4dCBtaXNzaW5nJykuc3RhY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcmdJZCA9IGN0eD8ub3JnSWQgPz8gJyc7XG4gIGNvbnN0IGlzU3VwZXJBZG1pbiA9IGN0eD8uaXNTdXBlckFkbWluID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICBjb25zdCBzdGF0ZW1lbnRUaW1lb3V0TXMgPSBnZXRTdGF0ZW1lbnRUaW1lb3V0TXMoKTtcblxuICByZXR1cm4gZGIudHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gU2V0IGV2ZXJ5IHRyYW5zYWN0aW9uLXNjb3BlZCBHVUMgaW4gYSBTSU5HTEUgcm91bmQtdHJpcC4gYHNldF9jb25maWcoKWBcbiAgICAvLyByZXR1cm5zIGl0cyB2YWx1ZSwgc28gbXVsdGlwbGUgY2FsbHMgY29tcG9zZSBpbiBvbmUgU0VMRUNUIOKAlCBwcmV2aW91c2x5XG4gICAgLy8gdGhlc2Ugd2VyZSAy4oCTMyBzZXBhcmF0ZSBgdHguZXhlY3V0ZSgpYCByb3VuZC10cmlwcyBQRVIgcmVhZCwgZWFjaCBhXG4gICAgLy8gbmV0d29yayBob3AgdGhhdCB0YXhlcyB0aGUgc2hhcmVkIFBnQm91bmNlciBwb29sIG9uIHRoZSBob3QgcGF0aC4gYHRydWVgXG4gICAgLy8gPSBpc19sb2NhbCAoU0VUIExPQ0FMIHNlbWFudGljczogYXV0by1yZWxlYXNlZCBvbiBDT01NSVQvUk9MTEJBQ0spLiBUaGVcbiAgICAvLyBkcml2ZXIgYmluZHMgdGhlIHZhbHVlcyBhcyBwYXJhbWV0ZXJzLCBzbyBhIGhvc3RpbGUgb3JnX2lkIGNhbid0IGJyZWFrIG91dFxuICAgIC8vIG9mIHRoZSBHVUMgc3ludGF4LlxuICAgIC8vXG4gICAgLy8gVGhlIHN0YXRlbWVudF90aW1lb3V0IEdVQyBib3VuZHMgYSBydW5hd2F5IHF1ZXJ5IHNvIGl0IGNhbid0IGhvbGQgYSBwb29sZWRcbiAgICAvLyBjb25uZWN0aW9uIG9wZW4gaW5kZWZpbml0ZWx5IChgU0VUIExPQ0FMIHN0YXRlbWVudF90aW1lb3V0ID0gJDFgIGlzIHJlamVjdGVkXG4gICAgLy8gYnkgUG9zdGdyZXMsIGhlbmNlIHNldF9jb25maWcgd2l0aCBhIGJvdW5kIG1zIHZhbHVlKS4gSW5jbHVkZWQgaW4gdGhlIHNhbWVcbiAgICAvLyBzdGF0ZW1lbnQgd2hlbiBlbmFibGVkICg+MCksIGRyb3BwZWQgZW50aXJlbHkgd2hlbiBkaXNhYmxlZCAoMCkuXG4gICAgaWYgKHN0YXRlbWVudFRpbWVvdXRNcyA+IDApIHtcbiAgICAgIGF3YWl0IHR4LmV4ZWN1dGUoXG4gICAgICAgIHNxbGBTRUxFQ1Qgc2V0X2NvbmZpZygnYXBwLm9yZ19pZCcsICR7b3JnSWR9LCB0cnVlKSwgc2V0X2NvbmZpZygnYXBwLmlzX3N5c2FkbWluJywgJHtpc1N1cGVyQWRtaW59LCB0cnVlKSwgc2V0X2NvbmZpZygnc3RhdGVtZW50X3RpbWVvdXQnLCAke1N0cmluZyhzdGF0ZW1lbnRUaW1lb3V0TXMpfSwgdHJ1ZSlgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdHguZXhlY3V0ZShcbiAgICAgICAgc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdhcHAub3JnX2lkJywgJHtvcmdJZH0sIHRydWUpLCBzZXRfY29uZmlnKCdhcHAuaXNfc3lzYWRtaW4nLCAke2lzU3VwZXJBZG1pbn0sIHRydWUpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmbih0eCk7XG4gIH0pO1xufVxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS90ZW5hbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQWU5QyxTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZFLHVFQUF1RTtJQUN2RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxDQUFDO0FBc0JEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsRUFBaUIsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxHQUFrQixFQUFFLEVBQVc7SUFDckUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7MEVBQzBFO0FBQzFFLE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxFQUEyRTtJQUUzRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1Qsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLG1FQUFtRTtRQUNuRSw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUU7a0JBQ3JFLHdFQUF3RTtrQkFDeEUsK0NBQStDLENBQ2xELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsc0VBQXNFO1lBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUU7Z0JBQ2hGLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUs7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMvQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUUxRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLENBQUM7SUFFbkQsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNqQywwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLDZFQUE2RTtRQUM3RSxxQkFBcUI7UUFDckIsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSwrRUFBK0U7UUFDL0UsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUNuRSxJQUFJLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDZCxHQUFHLENBQUEsbUNBQW1DLEtBQUssMENBQTBDLFlBQVksNENBQTRDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ2pMLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDZCxHQUFHLENBQUEsbUNBQW1DLEtBQUssMENBQTBDLFlBQVksU0FBUyxDQUMzRyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRlbmFudC1jb250ZXh0IHBsdW1iaW5nIGZvciBQb3N0Z3JlcyByb3ctbGV2ZWwgc2VjdXJpdHkuXG4gKlxuICogQmFja2dyb3VuZDogcG9zdGdyZXMtaW5pdC5zcWwgaW5zdGFsbHMgUkxTIHBvbGljaWVzIG9uIGV2ZXJ5IHVzZXItZGF0YVxuICogdGFibGUgdGhhdCBjb25zdWx0IHR3byBzZXNzaW9uIEdVQ3Mg4oCUIGBhcHAub3JnX2lkYCBhbmQgYGFwcC5pc19zeXNhZG1pbmAuXG4gKiBNb3N0IHVzZXItZGF0YSB0YWJsZXMgaGF2ZSBiZWVuIGZsaXBwZWQgdG8gYEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWWAsIHNvXG4gKiB0aGUgcG9saWNpZXMgRE8gZW5mb3JjZSBldmVuIGZvciB0aGUgKG93bmluZykgY29ubmVjdGlvbiB1c2VyIOKAlCBhIHF1ZXJ5XG4gKiBhZ2FpbnN0IGEgRk9SQ0UnZCB0YWJsZSBtdXN0IHJ1biBpbnNpZGUgYSB0cmFuc2FjdGlvbiB0aGF0IGhhcyBTRVQgTE9DQUwnZFxuICogYm90aCBHVUNzIG9yIGl0IHJldHVybnMgemVybyByb3dzIGZvciBub24tc3lzYWRtaW5zIChhbmQgbWF5IGZhaWwgdG8gd3JpdGVcbiAqIGZvciBhbnkgY2FsbGVyKS4gQSBmZXcgdGFibGVzIHJlbWFpbiBgRU5BQkxFYC1vbmx5IChvd25lci1ieXBhc3MpIHBlbmRpbmdcbiAqIHRoZWlyIHNvYWs7IHRoZSBzYW1lIGNvbnRleHQgcGx1bWJpbmcgY292ZXJzIGJvdGguXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHNlYW0uXG4gKlxuICogICAxLiBgdGVuYW50Q29udGV4dGAgKEFzeW5jTG9jYWxTdG9yYWdlKSBjYXJyaWVzIGB7b3JnSWQsIGlzU3VwZXJBZG1pbn1gXG4gKiAgICAgIGRvd24gdGhlIGNhbGwgY2hhaW4gd2l0aG91dCBwcm9wLWRyaWxsaW5nLiBTZXQgb25jZSBhdCB0aGUgcmVxdWVzdFxuICogICAgICBib3VuZGFyeTsgcmVhZGFibGUgZnJvbSBhbnl3aGVyZS5cbiAqXG4gKiAgIDIuIGB3aXRoVGVuYW50VHgoZm4pYCBvcGVucyBhIHRyYW5zYWN0aW9uLCBTRVQgTE9DQUwncyBib3RoIEdVQ3MgZnJvbVxuICogICAgICB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlbiBpbnZva2VzIGBmbih0eClgLiBTZXJ2aWNlcyBtaWdyYXRlIG9uZVxuICogICAgICBhdCBhIHRpbWUgYnkgd3JhcHBpbmcgdGhlaXIgZXhpc3RpbmcgZHJpenpsZSBjYWxscyBpbiB0aGlzIGhlbHBlciDigJRcbiAqICAgICAgYGRiLnNlbGVjdCgpLmZyb20oLi4uKWAgYmVjb21lcyBgd2l0aFRlbmFudFR4KHR4ID0+IHR4LnNlbGVjdCgpLmZyb20oLi4uKSlgLlxuICpcbiAqICAgMy4gYHJ1bldpdGhUZW5hbnRDb250ZXh0KGN0eCwgZm4pYCBpcyB0aGUgRXhwcmVzcy1taWRkbGV3YXJlLXNpZGVcbiAqICAgICAgYm9va2VuZCB0aGF0IGVzdGFibGlzaGVzIHRoZSBBc3luY0xvY2FsU3RvcmFnZSBzY29wZSBmb3IgdGhlIHJlcXVlc3QuXG4gKlxuICogTWlncmF0aW9uIG9yZGVyIChzZWUgZG9jcy9wbGFucy9mLTEtMC1ybHMtZW5mb3JjZW1lbnQubWQpOlxuICogICAtIEZpcnN0IGFkb3B0ZXJzOiBuZXdseS13cml0dGVuIHNlcnZpY2VzIChkYXNoYm9hcmQsIGFsZXJ0LWRlc3RpbmF0aW9uKVxuICogICAgIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWVjaGFuaWNhbC5cbiAqICAgLSBUaGVuIGhpZ2gtd3JpdGUgc2VydmljZXMgKHBsdWdpbiwgcGlwZWxpbmUpLiBTb2FrIGVhY2ggb25lIGJlZm9yZVxuICogICAgIGZsaXBwaW5nIHRoZSB1bmRlcmx5aW5nIHRhYmxlIHRvIEZPUkNFLlxuICogICAtIGFkbWluX2F1ZGl0X2xvZyB1c2VzIGEgc3lzYWRtaW4tb25seSBwb2xpY3kg4oCUIHN5c2FkbWluIHBhdGhzIG11c3RcbiAqICAgICBhbHNvIHNldCBgYXBwLmlzX3N5c2FkbWluID0gJ3RydWUnYCBvciB0aGV5J2xsIGxvc2UgYWNjZXNzIHRvIGl0LlxuICovXG5cbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnbm9kZTphc3luY19ob29rcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBkYiB9IGZyb20gJy4vcG9zdGdyZXMtY29ubmVjdGlvbi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigndGVuYW50LWNvbnRleHQnKTtcblxuLyoqXG4gKiBCZWhhdmlvciB3aGVuIGB3aXRoVGVuYW50VHhgIGlzIGludm9rZWQgb3V0c2lkZSBhbnkgYHJ1bldpdGhUZW5hbnRDb250ZXh0YFxuICogc2NvcGUuIFRoZSBlZmZlY3RpdmUgZGVmYXVsdCBpcyBmYWlsLWZhc3QgKCdzdHJpY3QnKSBpbiBwcm9kdWN0aW9uIHNvIGFcbiAqIG1pc3NpbmcgdGVuYW50IHNjb3BlIHN1cmZhY2VzIGF0IHRoZSBiYWQgY2FsbCBzaXRlIGluc3RlYWQgb2Ygc2lsZW50bHlcbiAqIHJ1bm5pbmcgd2l0aCBlbXB0eSBSTFMgR1VDczsgb3V0c2lkZSBwcm9kdWN0aW9uIGl0IGRlZmF1bHRzIHRvICd3YXJuJyBzb1xuICogdW4tYXVkaXRlZCBkZXYvdGVzdCBwYXRocyBrZWVwIHdvcmtpbmcgYnV0IGxvZyBhbiBhY3Rpb25hYmxlIHRyYWNlLiBBblxuICogZXhwbGljaXQgUkxTX0NPTlRFWFRfTU9ERSBlbnYgb3ZlcnJpZGUgYWx3YXlzIHdpbnMuXG4gKlxuICogJ3NpbGVudCcgaXMga2VwdCBmb3IgdGVzdHMgYW5kIHNjcmlwdHMgdGhhdCBpbnRlbnRpb25hbGx5IGVudGVyIHRoZSBEQlxuICogd2l0aG91dCBjb250ZXh0IChlLmcuIGludGVncmF0aW9uIHRlc3Qgc2V0dXAgdGhhdCBydW5zIGFzIHRoZSBjb25uZWN0aW9uXG4gKiBvd25lciBiZWZvcmUgYW55IHRlbmFudCBpcyBwcm92aXNpb25lZCkuXG4gKi9cbnR5cGUgQ29udGV4dE1vZGUgPSAnc2lsZW50JyB8ICd3YXJuJyB8ICdzdHJpY3QnO1xuZnVuY3Rpb24gZ2V0Q29udGV4dE1vZGUoKTogQ29udGV4dE1vZGUge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5STFNfQ09OVEVYVF9NT0RFPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmF3ID09PSAnc2lsZW50JyB8fCByYXcgPT09ICd3YXJuJyB8fCByYXcgPT09ICdzdHJpY3QnKSByZXR1cm4gcmF3O1xuICAvLyBObyBleHBsaWNpdCBvdmVycmlkZTogZmFpbC1mYXN0IGluIHByb2R1Y3Rpb24sIHdhcm4gZXZlcnl3aGVyZSBlbHNlLlxuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/ICdzdHJpY3QnIDogJ3dhcm4nO1xufVxuXG4vKipcbiAqIFBlci1zdGF0ZW1lbnQgc2VydmVyLXNpZGUgdGltZW91dCAobXMpIGFwcGxpZWQgSU5TSURFIGV2ZXJ5IGB3aXRoVGVuYW50VHhgXG4gKiB0cmFuc2FjdGlvbiwgbmV4dCB0byB0aGUgUkxTIEdVQ3MuIGB3aXRoVGVuYW50VHhgIGlzIHRoZSByZWFsIHF1ZXJ5IHBhdGggZm9yXG4gKiBhbGwgUkxTL0NSVUQgcmVhZHMgYW5kIHdyaXRlcywgc28gdGhpcyBpcyB3aGVyZSB0aGUgREItc2lkZSBndWFyZCBiZWxvbmdzICh0aGVcbiAqIG9sZCBgQ29ubmVjdGlvbi50cmFuc2FjdGlvbmAgd3JhcHBlciB0aGF0IHNldCBpdCBpcyBkZWFkIOKAlCBzZWVcbiAqIHBvc3RncmVzLWNvbm5lY3Rpb24udHMpLiBCb3VuZHMgYSBydW5hd2F5IHF1ZXJ5IHNvIGl0IGNhbid0IGhvbGQgYSBwb29sZWRcbiAqIGNvbm5lY3Rpb24gb3BlbiBpbmRlZmluaXRlbHkuIEVudi1jb25maWd1cmFibGUgdmlhIGBEQl9TVEFURU1FTlRfVElNRU9VVF9NU2BcbiAqIChkZWZhdWx0IDMwcyk7IHNldCB0byBgMGAgdG8gZGlzYWJsZSB0aGUgdGltZW91dC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVtZW50VGltZW91dE1zKCk6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX1NUQVRFTUVOVF9USU1FT1VUX01TID8/ICcnLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocmF3KSAmJiByYXcgPj0gMCA/IHJhdyA6IDMwMDAwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudENvbnRleHQge1xuICAvKiogQ2FsbGVyJ3Mgb3JnLiBVbmRlZmluZWQgZm9yIHVuLWF1dGhlbnRpY2F0ZWQgLyBzeXN0ZW0gam9icy4gKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBDYWxsZXIncyB1c2VyIGlkLiBOb3QgdXNlZCBmb3IgUkxTIOKAlCBQb3N0Z3JlcyBwb2xpY2llcyBhcmUgb3JnLWdyYWluZWQsXG4gICAqICB3aXRoIG5vIHBlci11c2VyIHNlc3Npb24gR1VDIOKAlCBidXQgY2FycmllZCBzbyBhcHAtbGF5ZXIgcHJlZGljYXRlcyB3aXRoIGFcbiAgICogIFBFUi1VU0VSIHJ1bmcgKHBpcGVsaW5lIHRlbXBsYXRlcycgYHByaXZhdGVgIHZpc2liaWxpdHkpIGNhbiByZXNvbHZlIFwid2hvXG4gICAqICBpcyBhc2tpbmdcIiBvbiBwYXRocyB0aGF0IGhhdmUgbm93aGVyZSB0byBwYXNzIGl0LCBub3RhYmx5IENydWRTZXJ2aWNlJ3NcbiAgICogIGB3cml0ZUNvbmRpdGlvbnNgLiBBYnNlbnQgZm9yIHN5c3RlbSBqb2JzLCB3aGljaCBpcyB0aGUgZmFpbC1jbG9zZWQgY2FzZTpcbiAgICogIG5vIHZpZXdlciDih5Igbm8gcHJpdmF0ZSByb3dzLiAqL1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNhbGxlciBpcyBhIHN5c2FkbWluIChzeXN0ZW0tb3JnIGFkbWluKS4gQnlwYXNzZXMgUkxTXG4gICAqICBwb2xpY2llcyB2aWEgdGhlIHN5c2FkbWluLWJ5cGFzcyBicmFuY2ggaW4gYGN1cnJlbnRfaXNfc3lzYWRtaW4oKWAuICovXG4gIGlzU3VwZXJBZG1pbjogYm9vbGVhbjtcbiAgLyoqIE9yZyDihpIgdGVhbSBoaWVyYXJjaHk6IHRoZSBjYWxsZXIncyBhY3RpdmUtb3JnIHBhcmVudCAocHJlc2VudCBvbmx5IHdoZW4gdGhlXG4gICAqICBhY3RpdmUgb3JnIGlzIGEgdGVhbSkuIE5vdCB1c2VkIGZvciBSTFM7IGNhcnJpZWQgc28gZG93bnN0cmVhbSBzaWRlLWVmZmVjdHNcbiAgICogIChlLmcuIGVudGl0eS1ldmVudCBjb21wbGlhbmNlIGV2YWwpIGNhbiBob25vciBwYXJlbnQgYHByb3BhZ2F0ZVRvQ2hpbGRyZW5gXG4gICAqICBydWxlcyB3aXRob3V0IGEgcmVxdWVzdCBpbiBzY29wZS4gKi9cbiAgcGFyZW50T3JnSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGVyLXJlcXVlc3QgdGVuYW50IGNvbnRleHQuIFBvcHVsYXRlZCBieSBFeHByZXNzIG1pZGRsZXdhcmUgb25jZSB0aGUgSldUXG4gKiBpcyB2YWxpZGF0ZWQ7IGNvbnN1bWVkIGJ5IGB3aXRoVGVuYW50VHhgIGFuZCBhbnkgaGVscGVyIHRoYXQgbmVlZHMgdG9cbiAqIGtub3cgXCJ3aG8gaXMgdGhlIGNhbGxlclwiIHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5hbnRDb250ZXh0ID0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlPFRlbmFudENvbnRleHQ+KCk7XG5cbi8qKlxuICogUnVuIGBmbmAgaW5zaWRlIHRoZSBnaXZlbiB0ZW5hbnQgc2NvcGUuIFRoZSBBc3luY0xvY2FsU3RvcmFnZSBzY29wZVxuICogc3Vydml2ZXMgYWNyb3NzIGFzeW5jIGJvdW5kYXJpZXMgKFByb21pc2VzLCBzZXRUaW1lb3V0LCBldGMuKSwgc28gYW55XG4gKiBgd2l0aFRlbmFudFR4YCBjYWxsIGluc2lkZSBgZm5gIOKAlCBkaXJlY3RseSBvciB0aHJvdWdoIGFueSBkZXB0aCBvZlxuICogYXN5bmMgaGVscGVycyDigJQgcGlja3MgdXAgYGN0eGAuXG4gKlxuICogV3JhcCBgbmV4dCgpYCBmcm9tIGFuIEV4cHJlc3MgbWlkZGxld2FyZSB0byBlc3RhYmxpc2ggcGVyLXJlcXVlc3Qgc2NvcGU6XG4gKlxuICogICAgIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gKiAgICAgICBydW5XaXRoVGVuYW50Q29udGV4dCh7IG9yZ0lkLCBpc1N1cGVyQWRtaW4gfSwgKCkgPT4gbmV4dCgpKTtcbiAqICAgICB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bldpdGhUZW5hbnRDb250ZXh0PFQ+KGN0eDogVGVuYW50Q29udGV4dCwgZm46ICgpID0+IFQpOiBUIHtcbiAgcmV0dXJuIHRlbmFudENvbnRleHQucnVuKGN0eCwgZm4pO1xufVxuXG4vKiogUmVhZCB0aGUgY3VycmVudCB0ZW5hbnQgY29udGV4dC4gUmV0dXJucyB1bmRlZmluZWQgb3V0c2lkZSBhblxuICogIGBydW5XaXRoVGVuYW50Q29udGV4dGAgc2NvcGUgKGUuZy4gYmFja2dyb3VuZCB3b3JrZXJzLCBtaWdyYXRpb25zKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5hbnRDb250ZXh0KCk6IFRlbmFudENvbnRleHQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdGVuYW50Q29udGV4dC5nZXRTdG9yZSgpO1xufVxuXG4vKipcbiAqIE9wZW4gYSB0cmFuc2FjdGlvbiB3aXRoIFJMUyBHVUNzIFNFVCBMT0NBTCBmcm9tIHRoZSBjdXJyZW50XG4gKiBBc3luY0xvY2FsU3RvcmFnZSB0ZW5hbnQgY29udGV4dCwgdGhlbiBpbnZva2UgYGZuKHR4KWAuXG4gKlxuICogLSBXaGVuIGNhbGxlZCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlIChlLmcuIGZyb20gYSBiYWNrZ3JvdW5kIGpvYiB0aGF0XG4gKiAgIGRvZXNuJ3QgaGF2ZSBhIGNhbGxlciBpZGVudGl0eSksIHRoZSB0cmFuc2FjdGlvbiBpcyBvcGVuZWQgd2l0aCBib3RoXG4gKiAgIEdVQ3MgY2xlYXJlZCDigJQgUkxTIHBvbGljaWVzIHdpbGwgcmV0dXJuIHplcm8gcm93cyBvbiBGT1JDRSdkIHRhYmxlcy5cbiAqICAgQ2FsbGVycyB0aGF0IG5lZWQgYSBzeXNhZG1pbi1lcXVpdmFsZW50IHNjb3BlIHNob3VsZCB3cmFwIHRoZW1zZWx2ZXMgaW5cbiAqICAgYHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIOKApilgIGV4cGxpY2l0bHkuXG4gKlxuICogLSBVc2VzIGBzZXRfY29uZmlnKGtleSwgdmFsdWUsIHRydWUpYCAodGhlIGJvb2xlYW4gPSBgaXNfbG9jYWxgLCBpLmUuXG4gKiAgIHRyYW5zYWN0aW9uLXNjb3BlZCkuIEVxdWl2YWxlbnQgdG8gYFNFVCBMT0NBTGAgYnV0IHRha2VzIHRoZSB2YWx1ZSBhc1xuICogICBhIHBhcmFtZXRlciwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IOKAlCBEcml6emxlJ3MgYHNxbGAgdGVtcGxhdGUgYmluZHMgdGhlXG4gKiAgIHZhbHVlIHNhZmVseSBzbyBhbiBhdHRhY2tlci1jb250cm9sbGVkIGBvcmdJZGAgY2FuJ3QgZXNjYXBlIHRoZSBxdW90aW5nLlxuICpcbiAqIC0gUmV0dXJucyB3aGF0ZXZlciBgZm5gIHJldHVybnM7IHRocm93cyB3aGF0ZXZlciBgZm5gIHRocm93cyAoRHJpenpsZVxuICogICBoYW5kbGVzIHRoZSBDT01NSVQvUk9MTEJBQ0sgZm9yIHVzKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhUZW5hbnRUeDxUPihcbiAgZm46ICh0eDogUGFyYW1ldGVyczxQYXJhbWV0ZXJzPHR5cGVvZiBkYi50cmFuc2FjdGlvbj5bMF0+WzBdKSA9PiBQcm9taXNlPFQ+LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGN0eCA9IHRlbmFudENvbnRleHQuZ2V0U3RvcmUoKTtcblxuICBpZiAoIWN0eCkge1xuICAgIC8vIFN1cmZhY2UgdGhlIGJ1ZyBpbnN0ZWFkIG9mIHNpbGVudGx5IFNFVCdpbmcgZW1wdHkgR1VDcy4gVGhlIGRlZmF1bHRcbiAgICAvLyBtb2RlICgnd2FybicpIGxvZ3MgYW4gYWN0aW9uYWJsZSB0cmFjZSBzbyB0aGUgYmFkIGNhbGwgc2l0ZSBpcyBlYXN5XG4gICAgLy8gdG8gZmluZDsgcHJvZHVjdGlvbiBkZXBsb3ltZW50cyB0aGF0IGhhdmUgZmluaXNoZWQgdGhlIGF1ZGl0IGNhbiBzZXRcbiAgICAvLyBSTFNfQ09OVEVYVF9NT0RFPXN0cmljdCB0byBmYWlsLWZhc3QgYXQgdGhlIGNhbGwgc2l0ZSAoYmV0dGVyIHN0YWNrXG4gICAgLy8gdHJhY2UgdGhhbiB0aGUgUG9zdGdyZXMgXCJwZXJtaXNzaW9uIGRlbmllZFwiIHRoYXQgd291bGQgb3RoZXJ3aXNlXG4gICAgLy8gc3VyZmFjZSBmcm9tIEZPUkNFJ2QgUkxTKS5cbiAgICBjb25zdCBtb2RlID0gZ2V0Q29udGV4dE1vZGUoKTtcbiAgICBpZiAobW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3dpdGhUZW5hbnRUeCBjYWxsZWQgb3V0c2lkZSBhIHRlbmFudCBzY29wZS4gV3JhcCB5b3VyIGhhbmRsZXIvd29ya2VyICdcbiAgICAgICAgKyAnaW4gcnVuV2l0aFRlbmFudENvbnRleHQoeyBvcmdJZCwgaXNTdXBlckFkbWluIH0sIC4uLikgYmVmb3JlIGludm9raW5nICdcbiAgICAgICAgKyAnYW55IHNlcnZpY2UgdGhhdCB0b3VjaGVzIFJMUy1lbmZvcmNlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnd2FybicpIHtcbiAgICAgIC8vIEluY2x1ZGUgYSBzeW50aGV0aWMgc3RhY2sgc28gdGhlIG9mZmVuZGluZyBjYWxsIHNpdGUgaXMgaW4gdGhlIGxvZy5cbiAgICAgIGxvZ2dlci53YXJuKCd3aXRoVGVuYW50VHggY2FsbGVkIG91dHNpZGUgYSB0ZW5hbnQgc2NvcGU7IFJMUyBHVUNzIHdpbGwgYmUgZW1wdHknLCB7XG4gICAgICAgIHN0YWNrOiBuZXcgRXJyb3IoJ3RlbmFudC1jb250ZXh0IG1pc3NpbmcnKS5zdGFjayxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9yZ0lkID0gY3R4Py5vcmdJZCA/PyAnJztcbiAgY29uc3QgaXNTdXBlckFkbWluID0gY3R4Py5pc1N1cGVyQWRtaW4gPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gIGNvbnN0IHN0YXRlbWVudFRpbWVvdXRNcyA9IGdldFN0YXRlbWVudFRpbWVvdXRNcygpO1xuXG4gIHJldHVybiBkYi50cmFuc2FjdGlvbihhc3luYyAodHgpID0+IHtcbiAgICAvLyBTZXQgZXZlcnkgdHJhbnNhY3Rpb24tc2NvcGVkIEdVQyBpbiBhIFNJTkdMRSByb3VuZC10cmlwLiBgc2V0X2NvbmZpZygpYFxuICAgIC8vIHJldHVybnMgaXRzIHZhbHVlLCBzbyBtdWx0aXBsZSBjYWxscyBjb21wb3NlIGluIG9uZSBTRUxFQ1Qg4oCUIHByZXZpb3VzbHlcbiAgICAvLyB0aGVzZSB3ZXJlIDLigJMzIHNlcGFyYXRlIGB0eC5leGVjdXRlKClgIHJvdW5kLXRyaXBzIFBFUiByZWFkLCBlYWNoIGFcbiAgICAvLyBuZXR3b3JrIGhvcCB0aGF0IHRheGVzIHRoZSBzaGFyZWQgUGdCb3VuY2VyIHBvb2wgb24gdGhlIGhvdCBwYXRoLiBgdHJ1ZWBcbiAgICAvLyA9IGlzX2xvY2FsIChTRVQgTE9DQUwgc2VtYW50aWNzOiBhdXRvLXJlbGVhc2VkIG9uIENPTU1JVC9ST0xMQkFDSykuIFRoZVxuICAgIC8vIGRyaXZlciBiaW5kcyB0aGUgdmFsdWVzIGFzIHBhcmFtZXRlcnMsIHNvIGEgaG9zdGlsZSBvcmdfaWQgY2FuJ3QgYnJlYWsgb3V0XG4gICAgLy8gb2YgdGhlIEdVQyBzeW50YXguXG4gICAgLy9cbiAgICAvLyBUaGUgc3RhdGVtZW50X3RpbWVvdXQgR1VDIGJvdW5kcyBhIHJ1bmF3YXkgcXVlcnkgc28gaXQgY2FuJ3QgaG9sZCBhIHBvb2xlZFxuICAgIC8vIGNvbm5lY3Rpb24gb3BlbiBpbmRlZmluaXRlbHkgKGBTRVQgTE9DQUwgc3RhdGVtZW50X3RpbWVvdXQgPSAkMWAgaXMgcmVqZWN0ZWRcbiAgICAvLyBieSBQb3N0Z3JlcywgaGVuY2Ugc2V0X2NvbmZpZyB3aXRoIGEgYm91bmQgbXMgdmFsdWUpLiBJbmNsdWRlZCBpbiB0aGUgc2FtZVxuICAgIC8vIHN0YXRlbWVudCB3aGVuIGVuYWJsZWQgKD4wKSwgZHJvcHBlZCBlbnRpcmVseSB3aGVuIGRpc2FibGVkICgwKS5cbiAgICBpZiAoc3RhdGVtZW50VGltZW91dE1zID4gMCkge1xuICAgICAgYXdhaXQgdHguZXhlY3V0ZShcbiAgICAgICAgc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdhcHAub3JnX2lkJywgJHtvcmdJZH0sIHRydWUpLCBzZXRfY29uZmlnKCdhcHAuaXNfc3lzYWRtaW4nLCAke2lzU3VwZXJBZG1pbn0sIHRydWUpLCBzZXRfY29uZmlnKCdzdGF0ZW1lbnRfdGltZW91dCcsICR7U3RyaW5nKHN0YXRlbWVudFRpbWVvdXRNcyl9LCB0cnVlKWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0eC5leGVjdXRlKFxuICAgICAgICBzcWxgU0VMRUNUIHNldF9jb25maWcoJ2FwcC5vcmdfaWQnLCAke29yZ0lkfSwgdHJ1ZSksIHNldF9jb25maWcoJ2FwcC5pc19zeXNhZG1pbicsICR7aXNTdXBlckFkbWlufSwgdHJ1ZSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHR4KTtcbiAgfSk7XG59XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -27,6 +27,6 @@ export * from './api/query-builders.js';
|
|
|
27
27
|
export * from './api/access-control-builder.js';
|
|
28
28
|
export * from './api/viewer-context.js';
|
|
29
29
|
export * from './api/crud-service.js';
|
|
30
|
-
export
|
|
30
|
+
export { runSoftDeletePurge, createSoftDeletePurgeScheduler, type PurgeableEntity, type SoftDeletePurgeOptions, type SoftDeletePurgeSchedulerOptions, } from './api/soft-delete-sweep.js';
|
|
31
31
|
export * from './api/reporting-service.js';
|
|
32
32
|
export * from './core/query-filters.js';
|
package/lib/index.js
CHANGED
|
@@ -31,8 +31,10 @@ export * from './api/query-builders.js';
|
|
|
31
31
|
export * from './api/access-control-builder.js';
|
|
32
32
|
export * from './api/viewer-context.js';
|
|
33
33
|
export * from './api/crud-service.js';
|
|
34
|
-
|
|
34
|
+
// `isSoftDeletePurgeEnabled` is the module's own env gate — `runSoftDeletePurge`
|
|
35
|
+
// and the scheduler already apply it, so callers never ask separately.
|
|
36
|
+
export { runSoftDeletePurge, createSoftDeletePurgeScheduler, } from './api/soft-delete-sweep.js';
|
|
35
37
|
export * from './api/reporting-service.js';
|
|
36
38
|
// Filters
|
|
37
39
|
export * from './core/query-filters.js';
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxXQUFXO0FBQ1gsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyw4QkFBOEI7QUFDOUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxpRkFBaUY7QUFDakYsdUVBQXVFO0FBQ3ZFLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsOEJBQThCLEdBSS9CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEBtb2R1bGUgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YVxuICpcbiAqIERhdGFiYXNlIGxheWVyOiBEcml6emxlIE9STSBzY2hlbWFzLCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGFuZCBxdWVyeSBpbmZyYXN0cnVjdHVyZS5cbiAqXG4gKiAqKkRhdGFiYXNlKipcbiAqIC0gZGIg4oCUIHNoYXJlZCBEcml6emxlIGRhdGFiYXNlIGluc3RhbmNlXG4gKiAtIGdldENvbm5lY3Rpb24sIGNsb3NlQ29ubmVjdGlvbiDigJQgUG9zdGdyZVNRTCBjb25uZWN0aW9uIGxpZmVjeWNsZSB3aXRoIHJldHJ5IGxvZ2ljXG4gKiAtIHNjaGVtYSDigJQgRHJpenpsZSB0YWJsZSBkZWZpbml0aW9ucyAocGx1Z2lucywgcGlwZWxpbmVzLCBtZXNzYWdlcywgY29tcGxpYW5jZSwgZXRjLilcbiAqXG4gKiAqKlNlcnZpY2VzKipcbiAqIC0gQ3J1ZFNlcnZpY2Ug4oCUIGdlbmVyaWMgYmFzZSBjbGFzcyBmb3IgbXVsdGktdGVuYW50IENSVUQgd2l0aCBhY2Nlc3MgY29udHJvbCBhbmQgcGFnaW5hdGlvblxuICogLSBSZXBvcnRpbmdTZXJ2aWNlIOKAlCBhZ2dyZWdhdGUgcXVlcnkgYW5kIHJlcG9ydGluZyBiYXNlIGNsYXNzXG4gKlxuICogKipRdWVyeSBCdWlsZGVycyoqXG4gKiAtIGJ1aWxkUGx1Z2luQ29uZGl0aW9ucywgYnVpbGRQaXBlbGluZUNvbmRpdGlvbnMsIGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnMg4oCUIGZpbHRlci10by1TUUwgY29uZGl0aW9uIGJ1aWxkZXJzXG4gKiAtIGJ1aWxkQ29tcGxpYW5jZVBvbGljeUNvbmRpdGlvbnMsIGJ1aWxkQ29tcGxpYW5jZVJ1bGVDb25kaXRpb25zLCBldGMuIOKAlCBjb21wbGlhbmNlIHF1ZXJ5IGJ1aWxkZXJzXG4gKiAtIEFjY2Vzc0NvbnRyb2xCdWlsZGVyIOKAlCByb3ctbGV2ZWwgYWNjZXNzIGNvbnRyb2wgY29uZGl0aW9uIGJ1aWxkZXJcbiAqXG4gKiAqKkZpbHRlcnMqKlxuICogLSBQbHVnaW5GaWx0ZXIsIFBpcGVsaW5lRmlsdGVyLCBNZXNzYWdlRmlsdGVyIOKAlCB0eXBlZCBmaWx0ZXIgaW50ZXJmYWNlc1xuICogLSBDb21wbGlhbmNlUG9saWN5RmlsdGVyLCBDb21wbGlhbmNlUnVsZUZpbHRlciwgZXRjLiDigJQgY29tcGxpYW5jZSBmaWx0ZXIgaW50ZXJmYWNlc1xuICogLSBkcml6emxlUm93cywgZHJpenpsZUNvdW50IOKAlCBEcml6emxlIHJlc3VsdCB0eXBlIGhlbHBlcnNcbiAqL1xuXG4vLyBEYXRhYmFzZVxuZXhwb3J0ICogZnJvbSAnLi9kYXRhYmFzZS9pbmRleC5qcyc7XG5cbi8vIFF1ZXJ5IGJ1aWxkZXJzIGFuZCBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvcXVlcnktYnVpbGRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvYWNjZXNzLWNvbnRyb2wtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS92aWV3ZXItY29udGV4dC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9jcnVkLXNlcnZpY2UuanMnO1xuLy8gYGlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZGAgaXMgdGhlIG1vZHVsZSdzIG93biBlbnYgZ2F0ZSDigJQgYHJ1blNvZnREZWxldGVQdXJnZWBcbi8vIGFuZCB0aGUgc2NoZWR1bGVyIGFscmVhZHkgYXBwbHkgaXQsIHNvIGNhbGxlcnMgbmV2ZXIgYXNrIHNlcGFyYXRlbHkuXG5leHBvcnQge1xuICBydW5Tb2Z0RGVsZXRlUHVyZ2UsXG4gIGNyZWF0ZVNvZnREZWxldGVQdXJnZVNjaGVkdWxlcixcbiAgdHlwZSBQdXJnZWFibGVFbnRpdHksXG4gIHR5cGUgU29mdERlbGV0ZVB1cmdlT3B0aW9ucyxcbiAgdHlwZSBTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXJPcHRpb25zLFxufSBmcm9tICcuL2FwaS9zb2Z0LWRlbGV0ZS1zd2VlcC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9yZXBvcnRpbmctc2VydmljZS5qcyc7XG5cbi8vIEZpbHRlcnNcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9xdWVyeS1maWx0ZXJzLmpzJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"drizzle-orm": "0.45.2",
|
|
27
27
|
"pg": "8.22.0",
|
|
28
|
-
"@pipeline-builder/api-core": "4.1.
|
|
28
|
+
"@pipeline-builder/api-core": "4.1.8"
|
|
29
29
|
},
|
|
30
30
|
"keywords": [
|
|
31
31
|
"ci-cd",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"access": "public",
|
|
82
82
|
"registry": "https://registry.npmjs.org/"
|
|
83
83
|
},
|
|
84
|
-
"version": "4.1.
|
|
84
|
+
"version": "4.1.9",
|
|
85
85
|
"bugs": {
|
|
86
86
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
87
87
|
},
|
|
@@ -140,6 +140,18 @@
|
|
|
140
140
|
"moduleNameMapper": {
|
|
141
141
|
"^uuid$": "<rootDir>/../../jest-uuid-stub.js",
|
|
142
142
|
"^(\\.{1,2}/.*)\\.js$": "$1"
|
|
143
|
+
},
|
|
144
|
+
"restoreMocks": true,
|
|
145
|
+
"setupFilesAfterEnv": [
|
|
146
|
+
"<rootDir>/../../jest-env-guard.js"
|
|
147
|
+
],
|
|
148
|
+
"coverageThreshold": {
|
|
149
|
+
"global": {
|
|
150
|
+
"statements": 89,
|
|
151
|
+
"branches": 89,
|
|
152
|
+
"functions": 79,
|
|
153
|
+
"lines": 89
|
|
154
|
+
}
|
|
143
155
|
}
|
|
144
156
|
},
|
|
145
157
|
"types": "lib/index.d.ts",
|