@pipeline-builder/api-core 4.1.22 → 5.0.1
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/errors/app-errors.d.ts +4 -2
- package/lib/errors/app-errors.js +6 -4
- package/lib/helpers/content-disposition.d.ts +14 -0
- package/lib/helpers/content-disposition.js +22 -0
- package/lib/helpers/index.d.ts +1 -0
- package/lib/helpers/index.js +2 -1
- package/lib/middleware/assurance.js +2 -2
- package/lib/middleware/auth.js +7 -7
- package/lib/middleware/ecosystem-guard.js +3 -3
- package/lib/middleware/permission-gates.js +3 -3
- package/lib/middleware/service-tokens.js +2 -2
- package/lib/middleware/step-up.js +2 -2
- package/lib/services/api-key-exchange.js +2 -2
- package/lib/services/compliance-client.js +2 -2
- package/lib/services/durable-event-bus.js +3 -1
- package/lib/services/index.d.ts +1 -1
- package/lib/services/index.js +2 -2
- package/lib/services/jwks-cache.js +2 -2
- package/lib/services/leader-lock.d.ts +56 -3
- package/lib/services/leader-lock.js +60 -4
- package/lib/services/quota.js +2 -2
- package/lib/services/scheduler.d.ts +20 -4
- package/lib/services/scheduler.js +36 -6
- package/lib/services/service-keys.d.ts +0 -4
- package/lib/services/service-keys.js +1 -14
- package/lib/types/catalog-metadata.d.ts +0 -6
- package/lib/types/catalog-metadata.js +1 -1
- package/lib/types/ecosystem.d.ts +0 -1
- package/lib/types/ecosystem.js +1 -1
- package/lib/types/feature-flags.d.ts +1 -1
- package/lib/types/feature-flags.js +6 -1
- package/lib/types/index.d.ts +3 -2
- package/lib/types/index.js +3 -2
- package/lib/types/permissions.d.ts +16 -1
- package/lib/types/permissions.js +23 -2
- package/lib/types/plugin-scan.d.ts +26 -0
- package/lib/types/plugin-scan.js +1 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +35 -1
- package/lib/types/reserved-tags.d.ts +28 -0
- package/lib/types/reserved-tags.js +37 -0
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/params.d.ts +33 -1
- package/lib/utils/params.js +54 -2
- package/lib/utils/response.js +2 -2
- package/lib/utils/secret-encryption.d.ts +0 -2
- package/lib/utils/secret-encryption.js +1 -5
- package/lib/validation/message-schemas.d.ts +0 -7
- package/lib/validation/message-schemas.js +3 -2
- package/lib/validation/pipeline-schemas.d.ts +6 -0
- package/lib/validation/pipeline-schemas.js +32 -2
- package/lib/validation/plugin-catalog-detect.d.ts +1 -1
- package/lib/validation/plugin-catalog-detect.js +2 -2
- package/lib/validation/plugin-spec-schema.js +2 -2
- package/package.json +2 -4
|
@@ -25,7 +25,9 @@ export declare class ValidationError extends AppError {
|
|
|
25
25
|
constructor(message: string);
|
|
26
26
|
}
|
|
27
27
|
/** 409 — Conflict / duplicate. `code` narrows the conflict for clients
|
|
28
|
-
* (e.g. `PLUGIN_VERSION_FROZEN`); it must be a 409-mapped code.
|
|
28
|
+
* (e.g. `PLUGIN_VERSION_FROZEN`); it must be a 409-mapped code. `details`
|
|
29
|
+
* carries what the client needs to resolve it — for a taken pipeline slot,
|
|
30
|
+
* the NORMALIZED names that collided and the id to PUT instead. */
|
|
29
31
|
export declare class ConflictError extends AppError {
|
|
30
|
-
constructor(message: string, code?: ErrorCode);
|
|
32
|
+
constructor(message: string, code?: ErrorCode, details?: Record<string, unknown>);
|
|
31
33
|
}
|
package/lib/errors/app-errors.js
CHANGED
|
@@ -41,11 +41,13 @@ export class ValidationError extends AppError {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
/** 409 — Conflict / duplicate. `code` narrows the conflict for clients
|
|
44
|
-
* (e.g. `PLUGIN_VERSION_FROZEN`); it must be a 409-mapped code.
|
|
44
|
+
* (e.g. `PLUGIN_VERSION_FROZEN`); it must be a 409-mapped code. `details`
|
|
45
|
+
* carries what the client needs to resolve it — for a taken pipeline slot,
|
|
46
|
+
* the NORMALIZED names that collided and the id to PUT instead. */
|
|
45
47
|
export class ConflictError extends AppError {
|
|
46
|
-
constructor(message, code = ErrorCode.CONFLICT) {
|
|
47
|
-
super(getStatusForErrorCode(ErrorCode.CONFLICT), code, message);
|
|
48
|
+
constructor(message, code = ErrorCode.CONFLICT, details) {
|
|
49
|
+
super(getStatusForErrorCode(ErrorCode.CONFLICT), code, message, details);
|
|
48
50
|
this.name = 'ConflictError';
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvYXBwLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLEtBQUs7SUFFZixVQUFVO0lBQ1YsSUFBSTtJQUdKLE9BQU87SUFMekIsWUFDa0IsVUFBa0IsRUFDbEIsSUFBZSxFQUMvQixPQUFlO0lBQ2YsZ0ZBQWdGO0lBQ2hFLE9BQWlDO1FBRWpELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzswQkFOQyxVQUFVO29CQUNWLElBQUk7dUJBR0osT0FBTztRQUd2QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxnQ0FBZ0M7QUFDaEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBQ3pDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBUTtJQUMxQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELHNDQUFzQztBQUN0QyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQ7OztvRUFHb0U7QUFDcEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxRQUFRO0lBQ3pDLFlBQVksT0FBZSxFQUFFLElBQUksR0FBYyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQWlDO1FBQ2xHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlLCBnZXRTdGF0dXNGb3JFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5cbi8qKlxuICogQmFzZSBhcHBsaWNhdGlvbiBlcnJvciB3aXRoIEhUVFAgc3RhdHVzIGNvZGUgYW5kIGVycm9yIGNvZGUuXG4gKiBFeHRlbmQgdGhpcyBmb3IgZG9tYWluLXNwZWNpZmljIGVycm9yIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgQXBwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU6IEVycm9yQ29kZSxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgLyoqIFN0cnVjdHVyZWQgY29udGV4dCBzZW50IHdpdGggdGhlIGVycm9yIHJlc3BvbnNlIChlLmcuIHRoZSBmYWlsaW5nIGdhdGVzKS4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBwRXJyb3InO1xuICB9XG59XG5cbi8qKiA0MDQg4oCUIFJlc291cmNlIG5vdCBmb3VuZC4gKi9cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLk5PVF9GT1VORCksIEVycm9yQ29kZS5OT1RfRk9VTkQsIG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgfVxufVxuXG4vKiogNDAzIOKAlCBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMuICovXG5leHBvcnQgY2xhc3MgRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBBcHBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TKSwgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUywgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0ZvcmJpZGRlbkVycm9yJztcbiAgfVxufVxuXG4vKiogNDAwIOKAlCBWYWxpZGF0aW9uIC8gYmFkIHJlcXVlc3QuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQXBwRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihnZXRTdGF0dXNGb3JFcnJvckNvZGUoRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IpLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgbWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqIDQwOSDigJQgQ29uZmxpY3QgLyBkdXBsaWNhdGUuIGBjb2RlYCBuYXJyb3dzIHRoZSBjb25mbGljdCBmb3IgY2xpZW50c1xuICogIChlLmcuIGBQTFVHSU5fVkVSU0lPTl9GUk9aRU5gKTsgaXQgbXVzdCBiZSBhIDQwOS1tYXBwZWQgY29kZS4gYGRldGFpbHNgXG4gKiAgY2FycmllcyB3aGF0IHRoZSBjbGllbnQgbmVlZHMgdG8gcmVzb2x2ZSBpdCDigJQgZm9yIGEgdGFrZW4gcGlwZWxpbmUgc2xvdCxcbiAqICB0aGUgTk9STUFMSVpFRCBuYW1lcyB0aGF0IGNvbGxpZGVkIGFuZCB0aGUgaWQgdG8gUFVUIGluc3RlYWQuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEFwcEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBjb2RlOiBFcnJvckNvZGUgPSBFcnJvckNvZGUuQ09ORkxJQ1QsIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIHN1cGVyKGdldFN0YXR1c0ZvckVycm9yQ29kZShFcnJvckNvZGUuQ09ORkxJQ1QpLCBjb2RlLCBtZXNzYWdlLCBkZXRhaWxzKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmxpY3RFcnJvcic7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Content-Disposition: attachment` for a download whose file name is built
|
|
3
|
+
* from stored or request data (a plugin name, a version, a report period). Every
|
|
4
|
+
* character outside `[A-Za-z0-9._-]` becomes `_`, so a quote, a CR/LF or a
|
|
5
|
+
* path separator can never break out of the header or the file name.
|
|
6
|
+
*
|
|
7
|
+
* In api-core rather than in one service because it is a header-injection guard with
|
|
8
|
+
* several callers (plugin's SBOM and scan downloads, reporting's report PDFs). A second
|
|
9
|
+
* copy of a sanitizer is a copy that gets a fix the other one does not.
|
|
10
|
+
*/
|
|
11
|
+
/** A header-safe file name (at most 200 characters, never empty). */
|
|
12
|
+
export declare function safeFileName(name: string): string;
|
|
13
|
+
/** The full header value for downloading `name` as an attachment. */
|
|
14
|
+
export declare function attachmentDisposition(name: string): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* `Content-Disposition: attachment` for a download whose file name is built
|
|
5
|
+
* from stored or request data (a plugin name, a version, a report period). Every
|
|
6
|
+
* character outside `[A-Za-z0-9._-]` becomes `_`, so a quote, a CR/LF or a
|
|
7
|
+
* path separator can never break out of the header or the file name.
|
|
8
|
+
*
|
|
9
|
+
* In api-core rather than in one service because it is a header-injection guard with
|
|
10
|
+
* several callers (plugin's SBOM and scan downloads, reporting's report PDFs). A second
|
|
11
|
+
* copy of a sanitizer is a copy that gets a fix the other one does not.
|
|
12
|
+
*/
|
|
13
|
+
/** A header-safe file name (at most 200 characters, never empty). */
|
|
14
|
+
export function safeFileName(name) {
|
|
15
|
+
const cleaned = name.replace(/[^A-Za-z0-9._-]/g, '_').replace(/^\.+/, '_').slice(0, 200);
|
|
16
|
+
return cleaned || 'download';
|
|
17
|
+
}
|
|
18
|
+
/** The full header value for downloading `name` as an attachment. */
|
|
19
|
+
export function attachmentDisposition(name) {
|
|
20
|
+
return `attachment; filename="${safeFileName(name)}"`;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1kaXNwb3NpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL2NvbnRlbnQtZGlzcG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLE9BQU8sT0FBTyxJQUFJLFVBQVUsQ0FBQztBQUMvQixDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFZO0lBQ2hELE9BQU8seUJBQXlCLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAgZm9yIGEgZG93bmxvYWQgd2hvc2UgZmlsZSBuYW1lIGlzIGJ1aWx0XG4gKiBmcm9tIHN0b3JlZCBvciByZXF1ZXN0IGRhdGEgKGEgcGx1Z2luIG5hbWUsIGEgdmVyc2lvbiwgYSByZXBvcnQgcGVyaW9kKS4gRXZlcnlcbiAqIGNoYXJhY3RlciBvdXRzaWRlIGBbQS1aYS16MC05Ll8tXWAgYmVjb21lcyBgX2AsIHNvIGEgcXVvdGUsIGEgQ1IvTEYgb3IgYVxuICogcGF0aCBzZXBhcmF0b3IgY2FuIG5ldmVyIGJyZWFrIG91dCBvZiB0aGUgaGVhZGVyIG9yIHRoZSBmaWxlIG5hbWUuXG4gKlxuICogSW4gYXBpLWNvcmUgcmF0aGVyIHRoYW4gaW4gb25lIHNlcnZpY2UgYmVjYXVzZSBpdCBpcyBhIGhlYWRlci1pbmplY3Rpb24gZ3VhcmQgd2l0aFxuICogc2V2ZXJhbCBjYWxsZXJzIChwbHVnaW4ncyBTQk9NIGFuZCBzY2FuIGRvd25sb2FkcywgcmVwb3J0aW5nJ3MgcmVwb3J0IFBERnMpLiBBIHNlY29uZFxuICogY29weSBvZiBhIHNhbml0aXplciBpcyBhIGNvcHkgdGhhdCBnZXRzIGEgZml4IHRoZSBvdGhlciBvbmUgZG9lcyBub3QuXG4gKi9cblxuLyoqIEEgaGVhZGVyLXNhZmUgZmlsZSBuYW1lIChhdCBtb3N0IDIwMCBjaGFyYWN0ZXJzLCBuZXZlciBlbXB0eSkuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZUZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNsZWFuZWQgPSBuYW1lLnJlcGxhY2UoL1teQS1aYS16MC05Ll8tXS9nLCAnXycpLnJlcGxhY2UoL15cXC4rLywgJ18nKS5zbGljZSgwLCAyMDApO1xuICByZXR1cm4gY2xlYW5lZCB8fCAnZG93bmxvYWQnO1xufVxuXG4vKiogVGhlIGZ1bGwgaGVhZGVyIHZhbHVlIGZvciBkb3dubG9hZGluZyBgbmFtZWAgYXMgYW4gYXR0YWNobWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RGlzcG9zaXRpb24obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiR7c2FmZUZpbGVOYW1lKG5hbWUpfVwiYDtcbn1cbiJdfQ==
|
package/lib/helpers/index.d.ts
CHANGED
|
@@ -4,3 +4,4 @@ export { loadAndRestore, loadAndPurge, type RestorableService, type PurgeableSer
|
|
|
4
4
|
export * from './sse-helpers.js';
|
|
5
5
|
export * from './org-hierarchy.js';
|
|
6
6
|
export { fetchParentOrgId, fetchOrgDescendants, fetchOrgNames, fetchOrgMembership, } from './org-hierarchy-http.js';
|
|
7
|
+
export * from './content-disposition.js';
|
package/lib/helpers/index.js
CHANGED
|
@@ -6,4 +6,5 @@ export { loadAndRestore, loadAndPurge, } from './restore-helpers.js';
|
|
|
6
6
|
export * from './sse-helpers.js';
|
|
7
7
|
export * from './org-hierarchy.js';
|
|
8
8
|
export { fetchParentOrgId, fetchOrgDescendants, fetchOrgNames, fetchOrgMembership, } from './org-hierarchy-http.js';
|
|
9
|
-
|
|
9
|
+
export * from './content-disposition.js';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsR0FLbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksR0FLYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2Isa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgKiBmcm9tICcuL2NydWQtaGVscGVycy5qcyc7XG5leHBvcnQge1xuICByZXF1aXJlVmlzaWJpbGl0eVdyaXRlQWNjZXNzLFxuICBjaGVja1Zpc2liaWxpdHlXcml0ZUFjY2VzcyxcbiAgY2hlY2tXcml0ZUFjY2VzcyxcbiAgcmVqZWN0Rm9yYmlkZGVuQnVsa1Jvd3MsXG4gIHJlc29sdmVWaXNpYmlsaXR5LFxuICB0eXBlIFZpc2liaWxpdHlXcml0ZVRhcmdldCxcbiAgdHlwZSBWaXNpYmlsaXR5V3JpdGVWZXJkaWN0LFxuICB0eXBlIFdyaXRlQWNjZXNzLFxuICB0eXBlIEJ1bGtXcml0ZVJvdyxcbn0gZnJvbSAnLi9hY2Nlc3MtaGVscGVycy5qcyc7XG5leHBvcnQge1xuICBsb2FkQW5kUmVzdG9yZSxcbiAgbG9hZEFuZFB1cmdlLFxuICB0eXBlIFJlc3RvcmFibGVTZXJ2aWNlLFxuICB0eXBlIFB1cmdlYWJsZVNlcnZpY2UsXG4gIHR5cGUgVG9tYnN0b25lQXV0aG9yaXplcixcbiAgdHlwZSBUb21ic3RvbmVSb3V0ZU9wdGlvbnMsXG59IGZyb20gJy4vcmVzdG9yZS1oZWxwZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3NlLWhlbHBlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcmctaGllcmFyY2h5LmpzJztcbmV4cG9ydCB7XG4gIGZldGNoUGFyZW50T3JnSWQsXG4gIGZldGNoT3JnRGVzY2VuZGFudHMsXG4gIGZldGNoT3JnTmFtZXMsXG4gIGZldGNoT3JnTWVtYmVyc2hpcCxcbn0gZnJvbSAnLi9vcmctaGllcmFyY2h5LWh0dHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZW50LWRpc3Bvc2l0aW9uLmpzJztcbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { recordAuthzDenial } from './permission-gates.js';
|
|
3
4
|
import { tagRouteGate } from './route-table.js';
|
|
4
5
|
import { HttpStatus } from '../constants/http-status.js';
|
|
5
6
|
import { serviceIdentity } from '../services/service-keys.js';
|
|
@@ -7,7 +8,6 @@ import {} from '../types/common.js';
|
|
|
7
8
|
import { ErrorCode } from '../types/error-codes.js';
|
|
8
9
|
import { emitCounter } from '../utils/metric-emitter.js';
|
|
9
10
|
import { sendError } from '../utils/response.js';
|
|
10
|
-
import { recordAuthzDenial } from './permission-gates.js';
|
|
11
11
|
/**
|
|
12
12
|
* Whether a set of verified claims speaks for a PERSON's own session — the only
|
|
13
13
|
* kind of credential an assurance level can be asserted about.
|
|
@@ -173,4 +173,4 @@ export function refuseForAssurance(options, decoded, req, res) {
|
|
|
173
173
|
}
|
|
174
174
|
return false;
|
|
175
175
|
}
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzdXJhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvYXNzdXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFRdEMsT0FBTyxFQUFFLFlBQVksRUFBa0MsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBd0MsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFtRTtJQUNsRyxPQUFPLE1BQU0sRUFBRSxhQUFhLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDO0FBQzNFLENBQUM7QUF1QkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBeUI7SUFDeEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQVEsRUFBRTtRQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdF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Q25FLFNBQVMsQ0FBQyxlQUFlLENBQzFCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlc3Npb24tYXNzdXJhbmNlIGdhdGVzOiBtaW5pbXVtIEFBTCAvIG1heCBhdXRoIGFnZSBmb3IgYSBwZXJzb24ncyBzZXNzaW9uLFxuICogYW5kIHRoZSBvcmctYWRtaW4gTUZBIHBvbGljeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHRhZ1JvdXRlR2F0ZSwgdHlwZSBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH0gZnJvbSAnLi9yb3V0ZS10YWJsZS5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB7IHNlcnZpY2VJZGVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyB0eXBlIEFzc3VyYW5jZUxldmVsLCB0eXBlIEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyByZWNvcmRBdXRoekRlbmlhbCB9IGZyb20gJy4vcGVybWlzc2lvbi1nYXRlcy5qcyc7XG4vKipcbiAqIFdoZXRoZXIgYSBzZXQgb2YgdmVyaWZpZWQgY2xhaW1zIHNwZWFrcyBmb3IgYSBQRVJTT04ncyBvd24gc2Vzc2lvbiDigJQgdGhlIG9ubHlcbiAqIGtpbmQgb2YgY3JlZGVudGlhbCBhbiBhc3N1cmFuY2UgbGV2ZWwgY2FuIGJlIGFzc2VydGVkIGFib3V0LlxuICpcbiAqIEV4Y2x1ZGVzIGFsbCB0aHJlZSBtYWNoaW5lIHNoYXBlczogYW4gaW50ZXJuYWwgc2VydmljZSBwcmluY2lwYWwsIGFuIG9yZ1xuICogc2VydmljZSBhY2NvdW50LCBhbmQgYW55IGV4Y2hhbmdlZCBhY2Nlc3Mga2V5IChgdG9rZW5fdXNlOiAnYXBpX2tleSdgLCBpLmUuIGFcbiAqIFBBVCBvciBhIHNlcnZpY2UtYWNjb3VudCBrZXkpLCBlYWNoIG9mIHdoaWNoIGF1dGhlbnRpY2F0ZXMgYSBwcm9ncmFtIGhvbGRpbmcgYVxuICogc2VjcmV0IHJhdGhlciB0aGFuIGEgcGVyc29uIHByZXNlbnRpbmcgZmFjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSHVtYW5QcmluY2lwYWwoY2xhaW1zOiBQaWNrPEp3dFBheWxvYWQsICdwcmluY2lwYWxUeXBlJyB8ICd0b2tlbl91c2UnPiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW1zPy5wcmluY2lwYWxUeXBlID09PSAndXNlcicgJiYgY2xhaW1zLnRva2VuX3VzZSA9PT0gJ2FjY2Vzcyc7XG59XG5cbi8qKiBXaGF0IGFuIGFzc3VyYW5jZSBnYXRlIGRlbWFuZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc3VyYW5jZU9wdGlvbnMge1xuICBtaW5Bc3N1cmFuY2U6IEFzc3VyYW5jZUxldmVsO1xuICBtYXhBZ2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBIE5BTUVEIGNhcnZlLW91dCBmb3IgcmVxdWVzdHMgdGhhdCBjYW5ub3QgcG9zc2libHkgc2F0aXNmeSB0aGUgbGV2ZWwgYW5kXG4gICAqIG11c3Qgc3RpbGwgYmUgc2VydmVkIOKAlCB0b2RheSBvbmx5IG9uZSBleGlzdHM6IHRoZSBib290c3RyYXAtYWRtaW5pc3RyYXRvclxuICAgKiB3aW5kb3csIHdoZXJlIGEgZnJlc2ggaW5zdGFsbCdzIHNpbmdsZSBhZG1pbiBoYXMgbm8gZmFjdG9yIHlldCBhbmQgdGhlIHNldHVwXG4gICAqIGNhbGxzIHRoYXQgY3JlYXRlIHRoZSBpbnN0YWxsJ3MgYXV0b21hdGlvbiBjcmVkZW50aWFsIHdvdWxkIG90aGVyd2lzZSBiZVxuICAgKiB1bnJlYWNoYWJsZSAoc2VlIHBsYXRmb3JtJ3MgYGlzQm9vdHN0cmFwU2V0dXBSZXF1ZXN0YCkuXG4gICAqXG4gICAqIEl0IGlzIGRlbGliZXJhdGVseSBzaGFwZWQgYXMgYHsgcmVhc29uLCB3aGVuIH1gIHJhdGhlciB0aGFuIGEgYmFyZSBwcmVkaWNhdGU6XG4gICAqIHRoZSByZWFzb24gaXMgY291bnRlZCAoYGFzc3VyYW5jZV9leGVtcHRlZF90b3RhbHtyZWFzb259YCkgYW5kIHB1Ymxpc2hlZCBvblxuICAgKiB0aGUgcm91dGUgdGFibGUgYXMgYGFzc3VyYW5jZUV4ZW1wdGAsIHNvIGFuIGV4ZW1wdGlvbiBjYW5ub3QgYmUgYWRkZWQgd2l0aG91dFxuICAgKiBzaG93aW5nIHVwIGluIHRoZSBnZW5lcmF0ZWQgdGFibGUgYSByZXZpZXdlciByZWFkcy4gVGhlIGdhdGUga2VlcHMgaXRzXG4gICAqIGBtaW5Bc3N1cmFuY2VgIHRhZyBlaXRoZXIgd2F5IOKAlCB0aGUgcm91dGUgc3RpbGwgcmVxdWlyZXMgTUZBLWdyYWRlIGZvclxuICAgKiBldmVyeW9uZSB0aGUgY2FydmUtb3V0IGRvZXMgbm90IG5hbWUuXG4gICAqL1xuICBleGVtcHQ/OiB7IHJlYXNvbjogc3RyaW5nOyB3aGVuOiAocmVxOiBSZXF1ZXN0KSA9PiBib29sZWFuIH07XG59XG5cbi8qKlxuICogU3RhbmRhbG9uZSBhc3N1cmFuY2UgZ2F0ZSwgZm9yIGEgc2VydmljZSB3aG9zZSBvd24gYHJlcXVpcmVBdXRoYCBpcyBub3RcbiAqIGFwaS1jb3JlJ3MgKHBsYXRmb3JtJ3MgaXMgaXRzIG93biwgYmVjYXVzZSBpdCByZWFkcyBNb25nbykuIENvbXBvc2UgaXQgQUZURVJcbiAqIGF1dGhlbnRpY2F0aW9uOiBgcm91dGVyLmdldCgnL3gnLCByZXF1aXJlQXV0aCwgcmVxdWlyZUFzc3VyYW5jZSh7IG1pbkFzc3VyYW5jZTogMiB9KSwgaClgLlxuICpcbiAqIElkZW50aWNhbCBydWxlcyBhbmQgaWRlbnRpY2FsIHJlZnVzYWxzIHRvIGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSB9KWAg4oCUXG4gKiB0aGF0IG9wdGlvbiBzaW1wbHkgY2FsbHMgdGhlIHNhbWUgY2hlY2sgaW5saW5lLCBzbyB0aGVyZSBpcyBvbmUgaW1wbGVtZW50YXRpb25cbiAqIG9mIFwiaXMgdGhpcyBzZXNzaW9uIE1GQS1ncmFkZVwiIGluIHRoZSBjb2RlYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBc3N1cmFuY2Uob3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucykge1xuICByZXR1cm4gdGFnUm91dGVHYXRlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIGlmICghcmVxLnVzZXIpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJywgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCk7XG4gICAgfVxuICAgIC8vIEEgbmFtZWQgZXhlbXB0aW9uIGlzIGNoZWNrZWQgQUZURVIgYXV0aGVudGljYXRpb24gYW5kIGJlZm9yZSB0aGUgbGV2ZWwsIHNvXG4gICAgLy8gaXQgY2FuIG5ldmVyIGFkbWl0IGFuIHVuYXV0aGVudGljYXRlZCBjYWxsZXIsIGFuZCBpdCBpcyBjb3VudGVkIGV2ZXJ5IHRpbWVcbiAgICAvLyBpdCBmaXJlcyDigJQgYW4gZXhlbXB0aW9uIG5vYm9keSBjYW4gc2VlIGlzIGhvdyBhIGdhdGUgcXVpZXRseSBzdG9wcyBiZWluZyBvbmUuXG4gICAgaWYgKG9wdGlvbnMuZXhlbXB0Py53aGVuKHJlcSkgPT09IHRydWUpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhc3N1cmFuY2VfZXhlbXB0ZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpLCByZWFzb246IG9wdGlvbnMuZXhlbXB0LnJlYXNvbiB9KTtcbiAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIGlmIChyZWZ1c2VGb3JBc3N1cmFuY2Uob3B0aW9ucywgcmVxLnVzZXIgYXMgSnd0UGF5bG9hZCwgcmVxLCByZXMpKSByZXR1cm47XG4gICAgbmV4dCgpO1xuICB9LCB7XG4gICAga2luZDogJ2Fzc3VyYW5jZScsXG4gICAgbWluQXNzdXJhbmNlOiBvcHRpb25zLm1pbkFzc3VyYW5jZSxcbiAgICAuLi4ob3B0aW9ucy5tYXhBZ2UgIT09IHVuZGVmaW5lZCA/IHsgbWF4QWdlOiBvcHRpb25zLm1heEFnZSB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLmV4ZW1wdCA/IHsgZXhlbXB0OiBvcHRpb25zLmV4ZW1wdC5yZWFzb24gfSA6IHt9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogSGFuZGxlci1sZXZlbCB0d2luIG9mIHtAbGluayByZXF1aXJlQXNzdXJhbmNlfSwgZm9yIGEgcm91dGUgd2hlcmUgb25seSBTT01FXG4gKiByZXF1ZXN0cyBtdXN0IGJlIE1GQS1ncmFkZSDigJQgZS5nLiBhIHBvbGljeSByb3V0ZSBvbiB3aGljaCBUSUdIVEVOSU5HIGEgc2V0dGluZ1xuICogc3RheXMgb3BlbiB0byBhIHNpbmdsZS1mYWN0b3Igc2Vzc2lvbiAoc28gYW4gYWRtaW4gd2l0aG91dCBNRkEgY2FuIGFkb3B0IGl0KVxuICogYnV0IExPT1NFTklORyBpdCBkb2VzIG5vdC4gU2FtZSBydWxlcyBhbmQgdGhlIHNhbWUgdGhyZWUgcmVmdXNhbHMuIFJldHVybnNcbiAqIHRydWUgd2hlbiB0aGUgcmVxdWVzdCB3YXMgUkVGVVNFRCAoYSByZXNwb25zZSBoYXMgYmVlbiBzZW50KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnVzZVdlYWtTZXNzaW9uKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIXJlcS51c2VyKSB7XG4gICAgc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZWZ1c2VGb3JBc3N1cmFuY2Uob3B0aW9ucywgcmVxLnVzZXIgYXMgSnd0UGF5bG9hZCwgcmVxLCByZXMpO1xufVxuXG4vKiogV2hhdCB7QGxpbmsgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlfSBkZW1hbmRzIG9mIGEgcm91dGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyB7XG4gIC8qKiBXaGF0IGEgbWFjaGluZSBjcmVkZW50aWFsIChQQVQsIHNlcnZpY2UgYWNjb3VudCwgbWFjaGluZSBzZXNzaW9uKSBtZWV0cyBvblxuICAgKiAgdGhpcyByb3V0ZSB3aGlsZSB0aGUgcG9saWN5IGlzIG9uIOKAlCBzZWUge0BsaW5rIE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXN9LlxuICAgKiAgUmVxdWlyZWQsIHNvIGV2ZXJ5IHJvdXRlIHN0YXRlcyBpdHMgZGVjaXNpb24gcmF0aGVyIHRoYW4gaW5oZXJpdGluZyBvbmUuICovXG4gIG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzO1xufVxuXG4vKiogYGRldGFpbHMucmVhc29uYCBvbiBhIHJlZnVzYWwgYnkge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0sIHNvIHRoZSBVSVxuICogIGNhbiBzYXkgaXQgaXMgdGhlIE9SRydzIHBvbGljeSBhc2tpbmcsIG5vdCB0aGUgcm91dGUncyBvd24gcmVxdWlyZW1lbnQuICovXG5leHBvcnQgY29uc3QgT1JHX0FETUlOX01GQV9SRUFTT04gPSAnb3JnX2FkbWluX3BvbGljeSc7XG5cbi8qKlxuICogVGhlIHJlZnVzYWwge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0gd291bGQgc2VuZCBmb3IgdGhlc2UgY2xhaW1zLCBvclxuICogYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVxdWVzdCBtYXkgcHJvY2VlZC4gRXhwb3J0ZWQgc28gYSBoYW5kbGVyIHdob3NlIHBvbGljeVxuICogYXBwbGllcyB0byBvbmx5IFBBUlQgb2YgYSByb3V0ZSAoZS5nLiBgZ2VuZXJhdGUtdG9rZW5gLCB3aGVyZSBvcGVuaW5nIGEgbmV3XG4gKiBtYWNoaW5lIGNyZWRlbnRpYWwgaXMgZ2F0ZWQgYnV0IHJlbmV3aW5nIGFuIGV4aXN0aW5nIG9uZSBpcyBub3QpIGFwcGxpZXMgdGhlXG4gKiBleGFjdCBzYW1lIHJ1bGUgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnQWRtaW5Bc3N1cmFuY2VSZWZ1c2FsKFxuICBjbGFpbXM6IEp3dFBheWxvYWQgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyxcbik6IHsgc3RhdHVzOiBudW1iZXI7IGNvZGU6IEVycm9yQ29kZTsgbWVzc2FnZTogc3RyaW5nOyByZWFzb246ICdtYWNoaW5lX3ByaW5jaXBhbCcgfCAnd2Vha19zZXNzaW9uJyB9IHwgdW5kZWZpbmVkIHtcbiAgLy8gVGhlIGNsYWltIGlzIG9ubHkgZXZlciBgMmAsIGFuZCBvbmx5IHdoZW4gdGhlIHBvbGljeSBpcyBvbiAoc2VlIEp3dFBheWxvYWQpLlxuICBpZiAoIWNsYWltcyB8fCBjbGFpbXMub3JnX2FkbWluX2FhbCAhPT0gMikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFpc0h1bWFuUHJpbmNpcGFsKGNsYWltcykpIHtcbiAgICBpZiAob3B0aW9ucy5tYWNoaW5lcyA9PT0gJ2FsbG93JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBIdHRwU3RhdHVzLkZPUkJJRERFTixcbiAgICAgIGNvZGU6IEVycm9yQ29kZS5IVU1BTl9TRVNTSU9OX1JFUVVJUkVELFxuICAgICAgcmVhc29uOiAnbWFjaGluZV9wcmluY2lwYWwnLFxuICAgICAgbWVzc2FnZTogJ1lvdXIgb3JnYW5pemF0aW9uIHJlcXVpcmVzIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIHRoaXMgYWN0aW9uIOKAlCBBUEkga2V5cyBhbmQgc2VydmljZSBhY2NvdW50cyBjYW5ub3QgcGVyZm9ybSBpdCcsXG4gICAgfTtcbiAgfVxuICBpZiAoKGNsYWltcy5hYWwgPz8gMSkgPj0gMikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELFxuICAgIGNvZGU6IEVycm9yQ29kZS5NRkFfUkVRVUlSRUQsXG4gICAgcmVhc29uOiAnd2Vha19zZXNzaW9uJyxcbiAgICBtZXNzYWdlOiAnWW91ciBvcmdhbml6YXRpb24gcmVxdWlyZXMgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyDigJQgc2lnbiBpbiBhZ2FpbiB3aXRoIGEgcGFzc2tleSBvciBhbiBhdXRoZW50aWNhdG9yIGNvZGUnLFxuICB9O1xufVxuXG4vKipcbiAqIEFwcGx5IHtAbGluayBvcmdBZG1pbkFzc3VyYW5jZVJlZnVzYWx9IGFuZCBzZW5kIGl0cyByZWZ1c2FsLiBSZXR1cm5zIHRydWUgd2hlblxuICogdGhlIHJlcXVlc3Qgd2FzIFJFRlVTRUQgKGEgcmVzcG9uc2UgaGFzIGJlZW4gc2VudCkuIEZvciBoYW5kbGVyLWxldmVsIHVzZTtcbiAqIHJvdXRlcyB1c2Uge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZ1c2VGb3JPcmdBZG1pbkFzc3VyYW5jZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG9wdGlvbnM6IE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBjb25zdCByZWZ1c2FsID0gb3JnQWRtaW5Bc3N1cmFuY2VSZWZ1c2FsKHJlcS51c2VyIGFzIEp3dFBheWxvYWQgfCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICBpZiAoIXJlZnVzYWwpIHJldHVybiBmYWxzZTtcbiAgZW1pdENvdW50ZXIoJ21mYV9lbmZvcmNlbWVudF9yZWZ1c2VkX3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlSWRlbnRpdHkoKSwgcmVhc29uOiBgb3JnX2FkbWluXyR7cmVmdXNhbC5yZWFzb259YCB9KTtcbiAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnYXNzdXJhbmNlOm9yZy1hZG1pbicpO1xuICBzZW5kRXJyb3IocmVzLCByZWZ1c2FsLnN0YXR1cywgcmVmdXNhbC5tZXNzYWdlLCByZWZ1c2FsLmNvZGUsIHsgcmVhc29uOiBPUkdfQURNSU5fTUZBX1JFQVNPTiB9KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVGhlIG9yZyBwb2xpY3kgXCJhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIHJlcXVpcmUgTUZBXCIgKGBhZG1pbkFjdGlvbnNSZXF1aXJlTWZhYCkuXG4gKlxuICogVW5saWtlIHtAbGluayByZXF1aXJlQXNzdXJhbmNlfSwgdGhlIHJlcXVpcmVtZW50IGlzIHRoZSBPUkcncyBjaG9pY2UsIG5vdCB0aGVcbiAqIHJvdXRlJ3M6IHRoZSBnYXRlIHJlYWRzIHRoZSBgb3JnX2FkbWluX2FhbGAgY2xhaW0sIHNldCBhdCB0b2tlbiBpc3N1ZSBmcm9tIHRoZVxuICogYWN0aXZlIG9yZydzIHBvbGljeSAoc3RyaWN0ZXN0IGFjcm9zcyBpdHMgYW5jZXN0b3JzKSwgc28gYSBzZXJ2aWNlIHRoYXQgY2Fubm90XG4gKiByZWFkIHRoZSBvcmcgZG9jdW1lbnQgc3RpbGwgZW5mb3JjZXMgaXQuIFdpdGggdGhlIHBvbGljeSBvZmYgdGhlIGdhdGUgaXMgYVxuICogbm8tb3A7IHdpdGggaXQgb24sIGEgc2luZ2xlLWZhY3RvciBzZXNzaW9uIGlzIHJlZnVzZWQgNDAxIGBNRkFfUkVRVUlSRURgXG4gKiAod2l0aCBgZGV0YWlscy5yZWFzb246ICdvcmdfYWRtaW5fcG9saWN5J2ApIOKAlCB0aGUgc2FtZSBjb2RlIHRoZSBjbGllbnQgYWxyZWFkeVxuICogdHVybnMgaW50byBcImVucm9sIGEgZmFjdG9yIC8gc2lnbiBpbiB3aXRoIGl0XCIsIG5ldmVyIGEgc2lnbi1vdXQuXG4gKlxuICogYG1hY2hpbmVzYCBpcyBkZWNpZGVkIHBlciByb3V0ZSAoc2VlIHtAbGluayBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzfSk6IHRoZVxuICogcG9saWN5IGlzIGFib3V0IGhvdyBzdHJvbmdseSBhIFBFUlNPTidzIHNlc3Npb24gd2FzIG9wZW5lZCwgc28gYXV0b21hdGlvbiB0aGF0XG4gKiBsZWdpdGltYXRlbHkgZHJpdmVzIGEgcm91dGUga2VlcHMgd29ya2luZyAoYGFsbG93YCksIHdoaWxlIGEgcm91dGUgdGhhdCBtaW50c1xuICogYSBmdXJ0aGVyIGNyZWRlbnRpYWwgcmVmdXNlcyBtYWNoaW5lcyBvdXRyaWdodCAoYHJlZnVzZWAsIDQwM1xuICogYEhVTUFOX1NFU1NJT05fUkVRVUlSRURgIOKAlCB0aGUgc2FtZSByZWZ1c2FsIGByZXF1aXJlQXNzdXJhbmNlYCBnaXZlcyB0aGVtKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZShvcHRpb25zOiBPcmdBZG1pbkFzc3VyYW5jZU9wdGlvbnMpIHtcbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJlcS51c2VyKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICAgIH1cbiAgICBpZiAocmVmdXNlRm9yT3JnQWRtaW5Bc3N1cmFuY2UocmVxLCByZXMsIG9wdGlvbnMpKSByZXR1cm47XG4gICAgbmV4dCgpO1xuICB9LCB7IGtpbmQ6ICdvcmdBZG1pbkFzc3VyYW5jZScsIG1hY2hpbmVzOiBvcHRpb25zLm1hY2hpbmVzIH0pO1xufVxuXG4vKipcbiAqIEVuZm9yY2UgYG1pbkFzc3VyYW5jZWAgLyBgbWF4QWdlYCBvbiBhIHZlcmlmaWVkIHRva2VuLiBSZXR1cm5zIHRydWUgd2hlbiB0aGVcbiAqIHJlcXVlc3Qgd2FzIFJFRlVTRUQgKGEgcmVzcG9uc2UgaGFzIGJlZW4gc2VudCkuXG4gKlxuICogVGhyZWUgZGlzdGluY3QgcmVmdXNhbHMsIGJlY2F1c2UgdGhlIGNsaWVudCdzIG5leHQgbW92ZSBkaWZmZXJzIGZvciBlYWNoOlxuICogYSBtYWNoaW5lIG11c3Qgc3RvcCAoNDAzKSwgYSB3ZWFrIHNlc3Npb24gbXVzdCBnYWluIGEgZmFjdG9yICg0MDFcbiAqIGBNRkFfUkVRVUlSRURgIOKGkiBlbnJvbG1lbnQsIG5ldmVyIGEgc2lnbi1vdXQpLCBhbmQgYSBzdGFsZSBvbmUgbXVzdCBzaW1wbHlcbiAqIGF1dGhlbnRpY2F0ZSBhZ2FpbiAoNDAxIGBSRUFVVEhfUkVRVUlSRURgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnVzZUZvckFzc3VyYW5jZShcbiAgb3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucyxcbiAgZGVjb2RlZDogSnd0UGF5bG9hZCxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1pbkFzc3VyYW5jZSA9IG9wdGlvbnMubWluQXNzdXJhbmNlO1xuICBjb25zdCByZWZ1c2UgPSAocmVhc29uOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIGNvZGU6IEVycm9yQ29kZSk6IHRydWUgPT4ge1xuICAgIGVtaXRDb3VudGVyKCdtZmFfZW5mb3JjZW1lbnRfcmVmdXNlZF90b3RhbCcsIHsgc2VydmljZTogc2VydmljZUlkZW50aXR5KCksIHJlYXNvbiB9KTtcbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsIGBhc3N1cmFuY2U6JHttaW5Bc3N1cmFuY2V9YCk7XG4gICAgc2VuZEVycm9yKHJlcywgc3RhdHVzLCBtZXNzYWdlLCBjb2RlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBpZiAoIWlzSHVtYW5QcmluY2lwYWwoZGVjb2RlZCkpIHtcbiAgICByZXR1cm4gcmVmdXNlKFxuICAgICAgJ21hY2hpbmVfcHJpbmNpcGFsJywgSHR0cFN0YXR1cy5GT1JCSURERU4sXG4gICAgICAnVGhpcyBhY3Rpb24gcmVxdWlyZXMgYSBwZXJzb24gc2lnbmVkIGluIHdpdGggdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiDigJQgQVBJIGtleXMgYW5kIHNlcnZpY2UgYWNjb3VudHMgY2Fubm90IHBlcmZvcm0gaXQnLFxuICAgICAgRXJyb3JDb2RlLkhVTUFOX1NFU1NJT05fUkVRVUlSRUQsXG4gICAgKTtcbiAgfVxuICBpZiAoKGRlY29kZWQuYWFsID8/IDEpIDwgbWluQXNzdXJhbmNlKSB7XG4gICAgcmV0dXJuIHJlZnVzZShcbiAgICAgICd3ZWFrX3Nlc3Npb24nLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICdUaGlzIGFjdGlvbiByZXF1aXJlcyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIOKAlCBzaWduIGluIGFnYWluIHdpdGggYSBwYXNza2V5IG9yIGFuIGF1dGhlbnRpY2F0b3IgY29kZScsXG4gICAgICBFcnJvckNvZGUuTUZBX1JFUVVJUkVELFxuICAgICk7XG4gIH1cbiAgaWYgKG9wdGlvbnMubWF4QWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBhdXRoVGltZSA9IGRlY29kZWQuYXV0aF90aW1lO1xuICAgIC8vIE5vIGBhdXRoX3RpbWVgIGlzIG5vdCBcInJlY2VudCBlbm91Z2ggYnkgZGVmYXVsdFwiIOKAlCBgaGFzVmFsaWRJZGVudGl0eUNsYWltc2BcbiAgICAvLyBhbHJlYWR5IHJlcXVpcmVzIGl0IG9uIGEgdXNlciB0b2tlbiwgc28gYW4gYWJzZW50IG9uZSBtZWFucyBhIHRva2VuIHRoaXNcbiAgICAvLyBnYXRlIGNhbm5vdCByZWFzb24gYWJvdXQuIEZhaWwgY2xvc2VkLlxuICAgIGlmICh0eXBlb2YgYXV0aFRpbWUgIT09ICdudW1iZXInIHx8IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIC0gYXV0aFRpbWUgPiBvcHRpb25zLm1heEFnZSkge1xuICAgICAgcmV0dXJuIHJlZnVzZShcbiAgICAgICAgJ3N0YWxlX3Nlc3Npb24nLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgJ1RoaXMgYWN0aW9uIHJlcXVpcmVzIGEgcmVjZW50IHNpZ24taW4g4oCUIHBsZWFzZSBhdXRoZW50aWNhdGUgYWdhaW4nLFxuICAgICAgICBFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVELFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzdXJhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvYXNzdXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFRdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBa0MsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBd0MsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFtRTtJQUNsRyxPQUFPLE1BQU0sRUFBRSxhQUFhLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDO0FBQzNFLENBQUM7QUF1QkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBeUI7SUFDeEQsT0FBTyxZQUFZLENBQUMsQ0FBQyxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQVEsRUFBRTtRQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdF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Q25FLFNBQVMsQ0FBQyxlQUFlLENBQzFCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlc3Npb24tYXNzdXJhbmNlIGdhdGVzOiBtaW5pbXVtIEFBTCAvIG1heCBhdXRoIGFnZSBmb3IgYSBwZXJzb24ncyBzZXNzaW9uLFxuICogYW5kIHRoZSBvcmctYWRtaW4gTUZBIHBvbGljeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHJlY29yZEF1dGh6RGVuaWFsIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWdhdGVzLmpzJztcbmltcG9ydCB7IHRhZ1JvdXRlR2F0ZSwgdHlwZSBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzIH0gZnJvbSAnLi9yb3V0ZS10YWJsZS5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB7IHNlcnZpY2VJZGVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyB0eXBlIEFzc3VyYW5jZUxldmVsLCB0eXBlIEp3dFBheWxvYWQgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG4vKipcbiAqIFdoZXRoZXIgYSBzZXQgb2YgdmVyaWZpZWQgY2xhaW1zIHNwZWFrcyBmb3IgYSBQRVJTT04ncyBvd24gc2Vzc2lvbiDigJQgdGhlIG9ubHlcbiAqIGtpbmQgb2YgY3JlZGVudGlhbCBhbiBhc3N1cmFuY2UgbGV2ZWwgY2FuIGJlIGFzc2VydGVkIGFib3V0LlxuICpcbiAqIEV4Y2x1ZGVzIGFsbCB0aHJlZSBtYWNoaW5lIHNoYXBlczogYW4gaW50ZXJuYWwgc2VydmljZSBwcmluY2lwYWwsIGFuIG9yZ1xuICogc2VydmljZSBhY2NvdW50LCBhbmQgYW55IGV4Y2hhbmdlZCBhY2Nlc3Mga2V5IChgdG9rZW5fdXNlOiAnYXBpX2tleSdgLCBpLmUuIGFcbiAqIFBBVCBvciBhIHNlcnZpY2UtYWNjb3VudCBrZXkpLCBlYWNoIG9mIHdoaWNoIGF1dGhlbnRpY2F0ZXMgYSBwcm9ncmFtIGhvbGRpbmcgYVxuICogc2VjcmV0IHJhdGhlciB0aGFuIGEgcGVyc29uIHByZXNlbnRpbmcgZmFjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSHVtYW5QcmluY2lwYWwoY2xhaW1zOiBQaWNrPEp3dFBheWxvYWQsICdwcmluY2lwYWxUeXBlJyB8ICd0b2tlbl91c2UnPiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xhaW1zPy5wcmluY2lwYWxUeXBlID09PSAndXNlcicgJiYgY2xhaW1zLnRva2VuX3VzZSA9PT0gJ2FjY2Vzcyc7XG59XG5cbi8qKiBXaGF0IGFuIGFzc3VyYW5jZSBnYXRlIGRlbWFuZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc3VyYW5jZU9wdGlvbnMge1xuICBtaW5Bc3N1cmFuY2U6IEFzc3VyYW5jZUxldmVsO1xuICBtYXhBZ2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBIE5BTUVEIGNhcnZlLW91dCBmb3IgcmVxdWVzdHMgdGhhdCBjYW5ub3QgcG9zc2libHkgc2F0aXNmeSB0aGUgbGV2ZWwgYW5kXG4gICAqIG11c3Qgc3RpbGwgYmUgc2VydmVkIOKAlCB0b2RheSBvbmx5IG9uZSBleGlzdHM6IHRoZSBib290c3RyYXAtYWRtaW5pc3RyYXRvclxuICAgKiB3aW5kb3csIHdoZXJlIGEgZnJlc2ggaW5zdGFsbCdzIHNpbmdsZSBhZG1pbiBoYXMgbm8gZmFjdG9yIHlldCBhbmQgdGhlIHNldHVwXG4gICAqIGNhbGxzIHRoYXQgY3JlYXRlIHRoZSBpbnN0YWxsJ3MgYXV0b21hdGlvbiBjcmVkZW50aWFsIHdvdWxkIG90aGVyd2lzZSBiZVxuICAgKiB1bnJlYWNoYWJsZSAoc2VlIHBsYXRmb3JtJ3MgYGlzQm9vdHN0cmFwU2V0dXBSZXF1ZXN0YCkuXG4gICAqXG4gICAqIEl0IGlzIGRlbGliZXJhdGVseSBzaGFwZWQgYXMgYHsgcmVhc29uLCB3aGVuIH1gIHJhdGhlciB0aGFuIGEgYmFyZSBwcmVkaWNhdGU6XG4gICAqIHRoZSByZWFzb24gaXMgY291bnRlZCAoYGFzc3VyYW5jZV9leGVtcHRlZF90b3RhbHtyZWFzb259YCkgYW5kIHB1Ymxpc2hlZCBvblxuICAgKiB0aGUgcm91dGUgdGFibGUgYXMgYGFzc3VyYW5jZUV4ZW1wdGAsIHNvIGFuIGV4ZW1wdGlvbiBjYW5ub3QgYmUgYWRkZWQgd2l0aG91dFxuICAgKiBzaG93aW5nIHVwIGluIHRoZSBnZW5lcmF0ZWQgdGFibGUgYSByZXZpZXdlciByZWFkcy4gVGhlIGdhdGUga2VlcHMgaXRzXG4gICAqIGBtaW5Bc3N1cmFuY2VgIHRhZyBlaXRoZXIgd2F5IOKAlCB0aGUgcm91dGUgc3RpbGwgcmVxdWlyZXMgTUZBLWdyYWRlIGZvclxuICAgKiBldmVyeW9uZSB0aGUgY2FydmUtb3V0IGRvZXMgbm90IG5hbWUuXG4gICAqL1xuICBleGVtcHQ/OiB7IHJlYXNvbjogc3RyaW5nOyB3aGVuOiAocmVxOiBSZXF1ZXN0KSA9PiBib29sZWFuIH07XG59XG5cbi8qKlxuICogU3RhbmRhbG9uZSBhc3N1cmFuY2UgZ2F0ZSwgZm9yIGEgc2VydmljZSB3aG9zZSBvd24gYHJlcXVpcmVBdXRoYCBpcyBub3RcbiAqIGFwaS1jb3JlJ3MgKHBsYXRmb3JtJ3MgaXMgaXRzIG93biwgYmVjYXVzZSBpdCByZWFkcyBNb25nbykuIENvbXBvc2UgaXQgQUZURVJcbiAqIGF1dGhlbnRpY2F0aW9uOiBgcm91dGVyLmdldCgnL3gnLCByZXF1aXJlQXV0aCwgcmVxdWlyZUFzc3VyYW5jZSh7IG1pbkFzc3VyYW5jZTogMiB9KSwgaClgLlxuICpcbiAqIElkZW50aWNhbCBydWxlcyBhbmQgaWRlbnRpY2FsIHJlZnVzYWxzIHRvIGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSB9KWAg4oCUXG4gKiB0aGF0IG9wdGlvbiBzaW1wbHkgY2FsbHMgdGhlIHNhbWUgY2hlY2sgaW5saW5lLCBzbyB0aGVyZSBpcyBvbmUgaW1wbGVtZW50YXRpb25cbiAqIG9mIFwiaXMgdGhpcyBzZXNzaW9uIE1GQS1ncmFkZVwiIGluIHRoZSBjb2RlYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBc3N1cmFuY2Uob3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucykge1xuICByZXR1cm4gdGFnUm91dGVHYXRlKChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgIGlmICghcmVxLnVzZXIpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJywgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCk7XG4gICAgfVxuICAgIC8vIEEgbmFtZWQgZXhlbXB0aW9uIGlzIGNoZWNrZWQgQUZURVIgYXV0aGVudGljYXRpb24gYW5kIGJlZm9yZSB0aGUgbGV2ZWwsIHNvXG4gICAgLy8gaXQgY2FuIG5ldmVyIGFkbWl0IGFuIHVuYXV0aGVudGljYXRlZCBjYWxsZXIsIGFuZCBpdCBpcyBjb3VudGVkIGV2ZXJ5IHRpbWVcbiAgICAvLyBpdCBmaXJlcyDigJQgYW4gZXhlbXB0aW9uIG5vYm9keSBjYW4gc2VlIGlzIGhvdyBhIGdhdGUgcXVpZXRseSBzdG9wcyBiZWluZyBvbmUuXG4gICAgaWYgKG9wdGlvbnMuZXhlbXB0Py53aGVuKHJlcSkgPT09IHRydWUpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhc3N1cmFuY2VfZXhlbXB0ZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpLCByZWFzb246IG9wdGlvbnMuZXhlbXB0LnJlYXNvbiB9KTtcbiAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIGlmIChyZWZ1c2VGb3JBc3N1cmFuY2Uob3B0aW9ucywgcmVxLnVzZXIgYXMgSnd0UGF5bG9hZCwgcmVxLCByZXMpKSByZXR1cm47XG4gICAgbmV4dCgpO1xuICB9LCB7XG4gICAga2luZDogJ2Fzc3VyYW5jZScsXG4gICAgbWluQXNzdXJhbmNlOiBvcHRpb25zLm1pbkFzc3VyYW5jZSxcbiAgICAuLi4ob3B0aW9ucy5tYXhBZ2UgIT09IHVuZGVmaW5lZCA/IHsgbWF4QWdlOiBvcHRpb25zLm1heEFnZSB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLmV4ZW1wdCA/IHsgZXhlbXB0OiBvcHRpb25zLmV4ZW1wdC5yZWFzb24gfSA6IHt9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogSGFuZGxlci1sZXZlbCB0d2luIG9mIHtAbGluayByZXF1aXJlQXNzdXJhbmNlfSwgZm9yIGEgcm91dGUgd2hlcmUgb25seSBTT01FXG4gKiByZXF1ZXN0cyBtdXN0IGJlIE1GQS1ncmFkZSDigJQgZS5nLiBhIHBvbGljeSByb3V0ZSBvbiB3aGljaCBUSUdIVEVOSU5HIGEgc2V0dGluZ1xuICogc3RheXMgb3BlbiB0byBhIHNpbmdsZS1mYWN0b3Igc2Vzc2lvbiAoc28gYW4gYWRtaW4gd2l0aG91dCBNRkEgY2FuIGFkb3B0IGl0KVxuICogYnV0IExPT1NFTklORyBpdCBkb2VzIG5vdC4gU2FtZSBydWxlcyBhbmQgdGhlIHNhbWUgdGhyZWUgcmVmdXNhbHMuIFJldHVybnNcbiAqIHRydWUgd2hlbiB0aGUgcmVxdWVzdCB3YXMgUkVGVVNFRCAoYSByZXNwb25zZSBoYXMgYmVlbiBzZW50KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnVzZVdlYWtTZXNzaW9uKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgb3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIXJlcS51c2VyKSB7XG4gICAgc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZWZ1c2VGb3JBc3N1cmFuY2Uob3B0aW9ucywgcmVxLnVzZXIgYXMgSnd0UGF5bG9hZCwgcmVxLCByZXMpO1xufVxuXG4vKiogV2hhdCB7QGxpbmsgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlfSBkZW1hbmRzIG9mIGEgcm91dGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyB7XG4gIC8qKiBXaGF0IGEgbWFjaGluZSBjcmVkZW50aWFsIChQQVQsIHNlcnZpY2UgYWNjb3VudCwgbWFjaGluZSBzZXNzaW9uKSBtZWV0cyBvblxuICAgKiAgdGhpcyByb3V0ZSB3aGlsZSB0aGUgcG9saWN5IGlzIG9uIOKAlCBzZWUge0BsaW5rIE9yZ0FkbWluQXNzdXJhbmNlTWFjaGluZXN9LlxuICAgKiAgUmVxdWlyZWQsIHNvIGV2ZXJ5IHJvdXRlIHN0YXRlcyBpdHMgZGVjaXNpb24gcmF0aGVyIHRoYW4gaW5oZXJpdGluZyBvbmUuICovXG4gIG1hY2hpbmVzOiBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzO1xufVxuXG4vKiogYGRldGFpbHMucmVhc29uYCBvbiBhIHJlZnVzYWwgYnkge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0sIHNvIHRoZSBVSVxuICogIGNhbiBzYXkgaXQgaXMgdGhlIE9SRydzIHBvbGljeSBhc2tpbmcsIG5vdCB0aGUgcm91dGUncyBvd24gcmVxdWlyZW1lbnQuICovXG5leHBvcnQgY29uc3QgT1JHX0FETUlOX01GQV9SRUFTT04gPSAnb3JnX2FkbWluX3BvbGljeSc7XG5cbi8qKlxuICogVGhlIHJlZnVzYWwge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0gd291bGQgc2VuZCBmb3IgdGhlc2UgY2xhaW1zLCBvclxuICogYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVxdWVzdCBtYXkgcHJvY2VlZC4gRXhwb3J0ZWQgc28gYSBoYW5kbGVyIHdob3NlIHBvbGljeVxuICogYXBwbGllcyB0byBvbmx5IFBBUlQgb2YgYSByb3V0ZSAoZS5nLiBgZ2VuZXJhdGUtdG9rZW5gLCB3aGVyZSBvcGVuaW5nIGEgbmV3XG4gKiBtYWNoaW5lIGNyZWRlbnRpYWwgaXMgZ2F0ZWQgYnV0IHJlbmV3aW5nIGFuIGV4aXN0aW5nIG9uZSBpcyBub3QpIGFwcGxpZXMgdGhlXG4gKiBleGFjdCBzYW1lIHJ1bGUgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnQWRtaW5Bc3N1cmFuY2VSZWZ1c2FsKFxuICBjbGFpbXM6IEp3dFBheWxvYWQgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyxcbik6IHsgc3RhdHVzOiBudW1iZXI7IGNvZGU6IEVycm9yQ29kZTsgbWVzc2FnZTogc3RyaW5nOyByZWFzb246ICdtYWNoaW5lX3ByaW5jaXBhbCcgfCAnd2Vha19zZXNzaW9uJyB9IHwgdW5kZWZpbmVkIHtcbiAgLy8gVGhlIGNsYWltIGlzIG9ubHkgZXZlciBgMmAsIGFuZCBvbmx5IHdoZW4gdGhlIHBvbGljeSBpcyBvbiAoc2VlIEp3dFBheWxvYWQpLlxuICBpZiAoIWNsYWltcyB8fCBjbGFpbXMub3JnX2FkbWluX2FhbCAhPT0gMikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFpc0h1bWFuUHJpbmNpcGFsKGNsYWltcykpIHtcbiAgICBpZiAob3B0aW9ucy5tYWNoaW5lcyA9PT0gJ2FsbG93JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBIdHRwU3RhdHVzLkZPUkJJRERFTixcbiAgICAgIGNvZGU6IEVycm9yQ29kZS5IVU1BTl9TRVNTSU9OX1JFUVVJUkVELFxuICAgICAgcmVhc29uOiAnbWFjaGluZV9wcmluY2lwYWwnLFxuICAgICAgbWVzc2FnZTogJ1lvdXIgb3JnYW5pemF0aW9uIHJlcXVpcmVzIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIHRoaXMgYWN0aW9uIOKAlCBBUEkga2V5cyBhbmQgc2VydmljZSBhY2NvdW50cyBjYW5ub3QgcGVyZm9ybSBpdCcsXG4gICAgfTtcbiAgfVxuICBpZiAoKGNsYWltcy5hYWwgPz8gMSkgPj0gMikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELFxuICAgIGNvZGU6IEVycm9yQ29kZS5NRkFfUkVRVUlSRUQsXG4gICAgcmVhc29uOiAnd2Vha19zZXNzaW9uJyxcbiAgICBtZXNzYWdlOiAnWW91ciBvcmdhbml6YXRpb24gcmVxdWlyZXMgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyDigJQgc2lnbiBpbiBhZ2FpbiB3aXRoIGEgcGFzc2tleSBvciBhbiBhdXRoZW50aWNhdG9yIGNvZGUnLFxuICB9O1xufVxuXG4vKipcbiAqIEFwcGx5IHtAbGluayBvcmdBZG1pbkFzc3VyYW5jZVJlZnVzYWx9IGFuZCBzZW5kIGl0cyByZWZ1c2FsLiBSZXR1cm5zIHRydWUgd2hlblxuICogdGhlIHJlcXVlc3Qgd2FzIFJFRlVTRUQgKGEgcmVzcG9uc2UgaGFzIGJlZW4gc2VudCkuIEZvciBoYW5kbGVyLWxldmVsIHVzZTtcbiAqIHJvdXRlcyB1c2Uge0BsaW5rIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZ1c2VGb3JPcmdBZG1pbkFzc3VyYW5jZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG9wdGlvbnM6IE9yZ0FkbWluQXNzdXJhbmNlT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBjb25zdCByZWZ1c2FsID0gb3JnQWRtaW5Bc3N1cmFuY2VSZWZ1c2FsKHJlcS51c2VyIGFzIEp3dFBheWxvYWQgfCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICBpZiAoIXJlZnVzYWwpIHJldHVybiBmYWxzZTtcbiAgZW1pdENvdW50ZXIoJ21mYV9lbmZvcmNlbWVudF9yZWZ1c2VkX3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlSWRlbnRpdHkoKSwgcmVhc29uOiBgb3JnX2FkbWluXyR7cmVmdXNhbC5yZWFzb259YCB9KTtcbiAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnYXNzdXJhbmNlOm9yZy1hZG1pbicpO1xuICBzZW5kRXJyb3IocmVzLCByZWZ1c2FsLnN0YXR1cywgcmVmdXNhbC5tZXNzYWdlLCByZWZ1c2FsLmNvZGUsIHsgcmVhc29uOiBPUkdfQURNSU5fTUZBX1JFQVNPTiB9KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVGhlIG9yZyBwb2xpY3kgXCJhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIHJlcXVpcmUgTUZBXCIgKGBhZG1pbkFjdGlvbnNSZXF1aXJlTWZhYCkuXG4gKlxuICogVW5saWtlIHtAbGluayByZXF1aXJlQXNzdXJhbmNlfSwgdGhlIHJlcXVpcmVtZW50IGlzIHRoZSBPUkcncyBjaG9pY2UsIG5vdCB0aGVcbiAqIHJvdXRlJ3M6IHRoZSBnYXRlIHJlYWRzIHRoZSBgb3JnX2FkbWluX2FhbGAgY2xhaW0sIHNldCBhdCB0b2tlbiBpc3N1ZSBmcm9tIHRoZVxuICogYWN0aXZlIG9yZydzIHBvbGljeSAoc3RyaWN0ZXN0IGFjcm9zcyBpdHMgYW5jZXN0b3JzKSwgc28gYSBzZXJ2aWNlIHRoYXQgY2Fubm90XG4gKiByZWFkIHRoZSBvcmcgZG9jdW1lbnQgc3RpbGwgZW5mb3JjZXMgaXQuIFdpdGggdGhlIHBvbGljeSBvZmYgdGhlIGdhdGUgaXMgYVxuICogbm8tb3A7IHdpdGggaXQgb24sIGEgc2luZ2xlLWZhY3RvciBzZXNzaW9uIGlzIHJlZnVzZWQgNDAxIGBNRkFfUkVRVUlSRURgXG4gKiAod2l0aCBgZGV0YWlscy5yZWFzb246ICdvcmdfYWRtaW5fcG9saWN5J2ApIOKAlCB0aGUgc2FtZSBjb2RlIHRoZSBjbGllbnQgYWxyZWFkeVxuICogdHVybnMgaW50byBcImVucm9sIGEgZmFjdG9yIC8gc2lnbiBpbiB3aXRoIGl0XCIsIG5ldmVyIGEgc2lnbi1vdXQuXG4gKlxuICogYG1hY2hpbmVzYCBpcyBkZWNpZGVkIHBlciByb3V0ZSAoc2VlIHtAbGluayBPcmdBZG1pbkFzc3VyYW5jZU1hY2hpbmVzfSk6IHRoZVxuICogcG9saWN5IGlzIGFib3V0IGhvdyBzdHJvbmdseSBhIFBFUlNPTidzIHNlc3Npb24gd2FzIG9wZW5lZCwgc28gYXV0b21hdGlvbiB0aGF0XG4gKiBsZWdpdGltYXRlbHkgZHJpdmVzIGEgcm91dGUga2VlcHMgd29ya2luZyAoYGFsbG93YCksIHdoaWxlIGEgcm91dGUgdGhhdCBtaW50c1xuICogYSBmdXJ0aGVyIGNyZWRlbnRpYWwgcmVmdXNlcyBtYWNoaW5lcyBvdXRyaWdodCAoYHJlZnVzZWAsIDQwM1xuICogYEhVTUFOX1NFU1NJT05fUkVRVUlSRURgIOKAlCB0aGUgc2FtZSByZWZ1c2FsIGByZXF1aXJlQXNzdXJhbmNlYCBnaXZlcyB0aGVtKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZShvcHRpb25zOiBPcmdBZG1pbkFzc3VyYW5jZU9wdGlvbnMpIHtcbiAgcmV0dXJuIHRhZ1JvdXRlR2F0ZSgocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJlcS51c2VyKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICAgIH1cbiAgICBpZiAocmVmdXNlRm9yT3JnQWRtaW5Bc3N1cmFuY2UocmVxLCByZXMsIG9wdGlvbnMpKSByZXR1cm47XG4gICAgbmV4dCgpO1xuICB9LCB7IGtpbmQ6ICdvcmdBZG1pbkFzc3VyYW5jZScsIG1hY2hpbmVzOiBvcHRpb25zLm1hY2hpbmVzIH0pO1xufVxuXG4vKipcbiAqIEVuZm9yY2UgYG1pbkFzc3VyYW5jZWAgLyBgbWF4QWdlYCBvbiBhIHZlcmlmaWVkIHRva2VuLiBSZXR1cm5zIHRydWUgd2hlbiB0aGVcbiAqIHJlcXVlc3Qgd2FzIFJFRlVTRUQgKGEgcmVzcG9uc2UgaGFzIGJlZW4gc2VudCkuXG4gKlxuICogVGhyZWUgZGlzdGluY3QgcmVmdXNhbHMsIGJlY2F1c2UgdGhlIGNsaWVudCdzIG5leHQgbW92ZSBkaWZmZXJzIGZvciBlYWNoOlxuICogYSBtYWNoaW5lIG11c3Qgc3RvcCAoNDAzKSwgYSB3ZWFrIHNlc3Npb24gbXVzdCBnYWluIGEgZmFjdG9yICg0MDFcbiAqIGBNRkFfUkVRVUlSRURgIOKGkiBlbnJvbG1lbnQsIG5ldmVyIGEgc2lnbi1vdXQpLCBhbmQgYSBzdGFsZSBvbmUgbXVzdCBzaW1wbHlcbiAqIGF1dGhlbnRpY2F0ZSBhZ2FpbiAoNDAxIGBSRUFVVEhfUkVRVUlSRURgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnVzZUZvckFzc3VyYW5jZShcbiAgb3B0aW9uczogQXNzdXJhbmNlT3B0aW9ucyxcbiAgZGVjb2RlZDogSnd0UGF5bG9hZCxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1pbkFzc3VyYW5jZSA9IG9wdGlvbnMubWluQXNzdXJhbmNlO1xuICBjb25zdCByZWZ1c2UgPSAocmVhc29uOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIGNvZGU6IEVycm9yQ29kZSk6IHRydWUgPT4ge1xuICAgIGVtaXRDb3VudGVyKCdtZmFfZW5mb3JjZW1lbnRfcmVmdXNlZF90b3RhbCcsIHsgc2VydmljZTogc2VydmljZUlkZW50aXR5KCksIHJlYXNvbiB9KTtcbiAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsIGBhc3N1cmFuY2U6JHttaW5Bc3N1cmFuY2V9YCk7XG4gICAgc2VuZEVycm9yKHJlcywgc3RhdHVzLCBtZXNzYWdlLCBjb2RlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBpZiAoIWlzSHVtYW5QcmluY2lwYWwoZGVjb2RlZCkpIHtcbiAgICByZXR1cm4gcmVmdXNlKFxuICAgICAgJ21hY2hpbmVfcHJpbmNpcGFsJywgSHR0cFN0YXR1cy5GT1JCSURERU4sXG4gICAgICAnVGhpcyBhY3Rpb24gcmVxdWlyZXMgYSBwZXJzb24gc2lnbmVkIGluIHdpdGggdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiDigJQgQVBJIGtleXMgYW5kIHNlcnZpY2UgYWNjb3VudHMgY2Fubm90IHBlcmZvcm0gaXQnLFxuICAgICAgRXJyb3JDb2RlLkhVTUFOX1NFU1NJT05fUkVRVUlSRUQsXG4gICAgKTtcbiAgfVxuICBpZiAoKGRlY29kZWQuYWFsID8/IDEpIDwgbWluQXNzdXJhbmNlKSB7XG4gICAgcmV0dXJuIHJlZnVzZShcbiAgICAgICd3ZWFrX3Nlc3Npb24nLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICdUaGlzIGFjdGlvbiByZXF1aXJlcyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIOKAlCBzaWduIGluIGFnYWluIHdpdGggYSBwYXNza2V5IG9yIGFuIGF1dGhlbnRpY2F0b3IgY29kZScsXG4gICAgICBFcnJvckNvZGUuTUZBX1JFUVVJUkVELFxuICAgICk7XG4gIH1cbiAgaWYgKG9wdGlvbnMubWF4QWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBhdXRoVGltZSA9IGRlY29kZWQuYXV0aF90aW1lO1xuICAgIC8vIE5vIGBhdXRoX3RpbWVgIGlzIG5vdCBcInJlY2VudCBlbm91Z2ggYnkgZGVmYXVsdFwiIOKAlCBgaGFzVmFsaWRJZGVudGl0eUNsYWltc2BcbiAgICAvLyBhbHJlYWR5IHJlcXVpcmVzIGl0IG9uIGEgdXNlciB0b2tlbiwgc28gYW4gYWJzZW50IG9uZSBtZWFucyBhIHRva2VuIHRoaXNcbiAgICAvLyBnYXRlIGNhbm5vdCByZWFzb24gYWJvdXQuIEZhaWwgY2xvc2VkLlxuICAgIGlmICh0eXBlb2YgYXV0aFRpbWUgIT09ICdudW1iZXInIHx8IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIC0gYXV0aFRpbWUgPiBvcHRpb25zLm1heEFnZSkge1xuICAgICAgcmV0dXJuIHJlZnVzZShcbiAgICAgICAgJ3N0YWxlX3Nlc3Npb24nLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgJ1RoaXMgYWN0aW9uIHJlcXVpcmVzIGEgcmVjZW50IHNpZ24taW4g4oCUIHBsZWFzZSBhdXRoZW50aWNhdGUgYWdhaW4nLFxuICAgICAgICBFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVELFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4iXX0=
|
package/lib/middleware/auth.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import jwt from 'jsonwebtoken';
|
|
4
|
+
import { refuseForAssurance } from './assurance.js';
|
|
5
|
+
import { hasValidIdentityClaims, verifyBearerToken } from './jwt-verify.js';
|
|
6
|
+
import { recordAuthzDenial } from './permission-gates.js';
|
|
7
|
+
import { checkRevocation, isImpersonationWriteBlocked, needsRevocationCheck } from './revocation.js';
|
|
4
8
|
import { tagRouteGate } from './route-table.js';
|
|
9
|
+
import { isServiceTokenDenied, serviceNameOf } from './service-tokens.js';
|
|
5
10
|
import { HttpStatus } from '../constants/http-status.js';
|
|
6
11
|
import { JwksUnavailableError, UnknownKidError } from '../services/jwks-cache.js';
|
|
7
12
|
import { ServiceKeyError, serviceIdentity } from '../services/service-keys.js';
|
|
@@ -10,14 +15,9 @@ import { ErrorCode } from '../types/error-codes.js';
|
|
|
10
15
|
import { isOpaqueApiKey } from '../utils/api-key.js';
|
|
11
16
|
import { getHeaderString } from '../utils/headers.js';
|
|
12
17
|
import { getIdentity } from '../utils/identity.js';
|
|
18
|
+
import { createLogger } from '../utils/logger.js';
|
|
13
19
|
import { emitCounter } from '../utils/metric-emitter.js';
|
|
14
20
|
import { sendError } from '../utils/response.js';
|
|
15
|
-
import { checkRevocation, isImpersonationWriteBlocked, needsRevocationCheck } from './revocation.js';
|
|
16
|
-
import { hasValidIdentityClaims, verifyBearerToken } from './jwt-verify.js';
|
|
17
|
-
import { isServiceTokenDenied, serviceNameOf } from './service-tokens.js';
|
|
18
|
-
import { recordAuthzDenial } from './permission-gates.js';
|
|
19
|
-
import { refuseForAssurance } from './assurance.js';
|
|
20
|
-
import { createLogger } from '../utils/logger.js';
|
|
21
21
|
const logger = createLogger('auth-middleware');
|
|
22
22
|
export function requireAuth(reqOrOptions, res, next) {
|
|
23
23
|
if (reqOrOptions && res && next && 'headers' in reqOrOptions) {
|
|
@@ -196,4 +196,4 @@ async function verifyAndAttach(options, rawToken, req, res, next) {
|
|
|
196
196
|
return sendError(res, HttpStatus.UNAUTHORIZED, 'Authentication failed', ErrorCode.UNAUTHORIZED);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQVF0QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBd0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFr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QUFJLEVBQUUsQ0FBQztJQUNULENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxJQUFJLEtBQUssWUFBWSxvQkFBb0IsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFLENBQUM7WUFDOUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtREFBbUQsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzRixPQUFPLFNBQVMsQ0FDZCxHQUFHLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUNuQyw2REFBNkQsRUFDN0QsU0FBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLGVBQWUsSUFBSSxLQUFLLFlBQVksR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0UsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogYHJlcXVpcmVBdXRoYDogYmVhcmVyIC8gYWNjZXNzLWtleSBhdXRoZW50aWNhdGlvbiwgdGhlIGNoZWNrcyBldmVyeVxuICogdmVyaWZpZWQgcmVxdWVzdCBwYXNzZXMsIGFuZCB0aGUgdGVuYW50IGlkZW50aXR5IGl0IGF0dGFjaGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGp3dCBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IHsgdGFnUm91dGVHYXRlIH0gZnJvbSAnLi9yb3V0ZS10YWJsZS5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB7IEp3a3NVbmF2YWlsYWJsZUVycm9yLCBVbmtub3duS2lkRXJyb3IgfSBmcm9tICcuLi9zZXJ2aWNlcy9qd2tzLWNhY2hlLmpzJztcbmltcG9ydCB7IFNlcnZpY2VLZXlFcnJvciwgc2VydmljZUlkZW50aXR5IH0gZnJvbSAnLi4vc2VydmljZXMvc2VydmljZS1rZXlzLmpzJztcbmltcG9ydCB7IHR5cGUgQXNzdXJhbmNlTGV2ZWwgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIdHRwUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL2h0dHAuanMnO1xuaW1wb3J0IHsgaXNPcGFxdWVBcGlLZXkgfSBmcm9tICcuLi91dGlscy9hcGkta2V5LmpzJztcbmltcG9ydCB7IGdldEhlYWRlclN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2hlYWRlcnMuanMnO1xuaW1wb3J0IHsgZ2V0SWRlbnRpdHksIHR5cGUgUmVxdWVzdElkZW50aXR5IH0gZnJvbSAnLi4vdXRpbHMvaWRlbnRpdHkuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBjaGVja1Jldm9jYXRpb24sIGlzSW1wZXJzb25hdGlvbldyaXRlQmxvY2tlZCwgbmVlZHNSZXZvY2F0aW9uQ2hlY2sgfSBmcm9tICcuL3Jldm9jYXRpb24uanMnO1xuaW1wb3J0IHsgaGFzVmFsaWRJZGVudGl0eUNsYWltcywgdmVyaWZ5QmVhcmVyVG9rZW4gfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgaXNTZXJ2aWNlVG9rZW5EZW5pZWQsIHNlcnZpY2VOYW1lT2YgfSBmcm9tICcuL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IHJlY29yZEF1dGh6RGVuaWFsIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWdhdGVzLmpzJztcbmltcG9ydCB7IHJlZnVzZUZvckFzc3VyYW5jZSB9IGZyb20gJy4vYXNzdXJhbmNlLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXV0aC1taWRkbGV3YXJlJyk7XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyB4LW9yZy1pZC94LW9yZy1uYW1lIGhlYWRlcnMgdG8gb3ZlcnJpZGUgdGhlIEpXVCdzIG9yZ2FuaXphdGlvbiBmaWVsZHMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGB4LW9yZy1pZGAvYHgtb3JnLW5hbWVgIGhlYWRlcnMgb3ZlcnJpZGUgdGhlIGNhbGxlcidzIG9yZ1xuICAgKiDigJQgYnV0IE9OTFkgZm9yIGEgdmVyaWZpZWQgU1lTLUFETUlOIChgaXNTdXBlckFkbWluYCBjbGFpbSkuIEZvciBhbnkgb3JkaW5hcnlcbiAgICogYXV0aGVudGljYXRlZCB1c2VyIHRoZSBoZWFkZXJzIGFyZSBpZ25vcmVkLCBzbyBlbmFibGluZyB0aGlzIGNhbiBuZXZlciBsZXQgYVxuICAgKiBub3JtYWwgdXNlciBpbXBlcnNvbmF0ZSBhbm90aGVyIHRlbmFudCdzIG9yZy4gVXNlIGZvciBjcm9zcy1vcmcgYWRtaW4gdG9vbGluZ1xuICAgKiAoZS5nLiBhIHN5c2FkbWluIG1hbmFnaW5nIGEgZ2l2ZW4gb3JnJ3MgYmlsbGluZykuIElmIHVuc3VyZSwgbGVhdmUgaXQgZGlzYWJsZWQuXG4gICAqL1xuICBhbGxvd09yZ0hlYWRlck92ZXJyaWRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlbWFuZCB0aGF0IHRoZSB3aG9sZSBTRVNTSU9OIGJlIGF0IGxlYXN0IHRoaXMgYXNzdXJhbmNlIGxldmVsLlxuICAgKlxuICAgKiBgbWluQXNzdXJhbmNlOiAyYCBtZWFucyB0aGUgcGVyc29uIGF1dGhlbnRpY2F0ZWQgd2l0aCBhIHNlY29uZCBmYWN0b3Ig4oCUIGFcbiAgICogcGFzc2tleSB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXMgYW4gYXV0aGVudGljYXRvciBjb2RlLCBvclxuICAgKiBTU08gdGhyb3VnaCBhbiBJZFAgdGhlIG9yZyBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS4gQSB3ZWFrZXIgdG9rZW4gZ2V0c1xuICAgKiAqKjQwMSBgTUZBX1JFUVVJUkVEYCoqLCB3aGljaCB0aGUgY2xpZW50IGFuc3dlcnMgYnkgc2VuZGluZyB0aGUgcGVyc29uIHRvXG4gICAqIGVucm9sbWVudCBvciB0byBhIHN0cm9uZ2VyIHNpZ24taW47IHJlZnJlc2hpbmcgY2Fubm90IGhlbHAsIGJlY2F1c2UgYGFhbGBcbiAgICogbGl2ZXMgb24gdGhlIHNlc3Npb24gc2xvdCBhbmQgYSByZWZyZXNoIG5ldmVyIHJhaXNlcyBpdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgU0VTU0lPTi1sZXZlbCBjb3VudGVycGFydCB0byB7QGxpbmsgcmVxdWlyZVN0ZXBVcH0sIHdoaWNoIHN0YXlzXG4gICAqIGEgZnJlc2gsIHBlci1hY3Rpb24gY29uZmlybWF0aW9uLiBVc2UgYm90aCBvbiB0aGUgbW9zdCBkYW5nZXJvdXMgcm91dGVzLlxuICAgKlxuICAgKiBNQUNISU5FUyBORVZFUiBTQVRJU0ZZIElULiBBIHNlcnZpY2UgcHJpbmNpcGFsLCBhbiBvcmcgc2VydmljZSBhY2NvdW50IGFuZFxuICAgKiBhbiBleGNoYW5nZWQgYWNjZXNzIGtleSBhbGwgZ2V0ICoqNDAzIGBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEYCoqIOKAlCB0aGVyZSBpc1xuICAgKiBubyBwZXJzb24gYmVoaW5kIHRoZW0gdG8gaGF2ZSBwcmVzZW50ZWQgYSBmYWN0b3IsIHNvIFwiYXNzdXJhbmNlXCIgaXMgbm90IGFcbiAgICogcXVlc3Rpb24gdGhlaXIgY3JlZGVudGlhbCBjYW4gYW5zd2VyLiBUaGF0IGlzIGRlbGliZXJhdGVseSBub3QgYSBzaWxlbnRcbiAgICogcGFzcy10aHJvdWdoIGZvciBpbnRlcm5hbCBzZXJ2aWNlczogYSByb3V0ZSB0aGF0IGRlbWFuZHMgTUZBIGlzIGEgcm91dGUgYVxuICAgKiBodW1hbiBpcyBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzIG9uLlxuICAgKi9cbiAgbWluQXNzdXJhbmNlPzogQXNzdXJhbmNlTGV2ZWw7XG4gIC8qKlxuICAgKiBXaXRoIHtAbGluayBtaW5Bc3N1cmFuY2V9LCBhZGRpdGlvbmFsbHkgYm91bmQgaG93IGxvbmcgYWdvIHRoYXQgc2lnbi1pblxuICAgKiBoYXBwZW5lZCAoc2Vjb25kcywgY29tcGFyZWQgYWdhaW5zdCB0aGUgdG9rZW4ncyBgYXV0aF90aW1lYCkuIEEgc2Vzc2lvbiB0aGF0XG4gICAqIGlzIE1GQS1ncmFkZSBidXQgb2xkZXIgdGhhbiB0aGlzIGdldHMgKio0MDEgYFJFQVVUSF9SRVFVSVJFRGAqKi4gSWdub3JlZFxuICAgKiB3aXRob3V0IGBtaW5Bc3N1cmFuY2VgIOKAlCBcImhvdyByZWNlbnRcIiBpcyBvbmx5IG1lYW5pbmdmdWwgb25jZSBcImhvdyBzdHJvbmdcIlxuICAgKiBpcyBiZWluZyBhc2tlZC5cbiAgICovXG4gIG1heEFnZT86IG51bWJlcjtcbn1cblxuLyoqIEpXVCBhdXRoIG1pZGRsZXdhcmUuIFVzZSBkaXJlY3RseSBvciBjYWxsIHdpdGggb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICBvcHRpb25zPzogUmVxdWlyZUF1dGhPcHRpb25zLFxuKTogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICByZXFPck9wdGlvbnM/OiBSZXF1ZXN0IHwgUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXM/OiBSZXNwb25zZSxcbiAgbmV4dD86IE5leHRGdW5jdGlvbixcbik6IHZvaWQgfCAoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gIGlmIChyZXFPck9wdGlvbnMgJiYgcmVzICYmIG5leHQgJiYgJ2hlYWRlcnMnIGluIHJlcU9yT3B0aW9ucykge1xuICAgIHJldHVybiBfcmVxdWlyZUF1dGgoe30sIHJlcU9yT3B0aW9ucyBhcyBSZXF1ZXN0LCByZXMsIG5leHQpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IChyZXFPck9wdGlvbnMgYXMgUmVxdWlyZUF1dGhPcHRpb25zKSB8fCB7fTtcbiAgY29uc3QgZ2F0ZSA9IHRhZ1JvdXRlR2F0ZSgocmVxOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgX3JlcXVpcmVBdXRoKG9wdGlvbnMsIHJlcSwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gIH0sIHsga2luZDogJ2F1dGgnIH0pO1xuICBpZiAob3B0aW9ucy5taW5Bc3N1cmFuY2UpIHtcbiAgICB0YWdSb3V0ZUdhdGUoZ2F0ZSwgeyBraW5kOiAnYXNzdXJhbmNlJywgbWluQXNzdXJhbmNlOiBvcHRpb25zLm1pbkFzc3VyYW5jZSwgLi4uKG9wdGlvbnMubWF4QWdlICE9PSB1bmRlZmluZWQgPyB7IG1heEFnZTogb3B0aW9ucy5tYXhBZ2UgfSA6IHt9KSB9KTtcbiAgfVxuICByZXR1cm4gZ2F0ZTtcbn1cbnRhZ1JvdXRlR2F0ZShyZXF1aXJlQXV0aCwgeyBraW5kOiAnYXV0aCcgfSk7XG5cbmZ1bmN0aW9uIF9yZXF1aXJlQXV0aChcbiAgb3B0aW9uczogUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IHZvaWQge1xuICBjb25zdCBhdXRoSGVhZGVyID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcblxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRob3JpemF0aW9uIGhlYWRlciByZXF1aXJlZCcsIEVycm9yQ29kZS5UT0tFTl9NSVNTSU5HKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gYXV0aEhlYWRlci5zcGxpdCgnICcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8IHBhcnRzWzBdICE9PSAnQmVhcmVyJykge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgYXV0aG9yaXphdGlvbiBmb3JtYXQuIFVzZTogQmVhcmVyIDx0b2tlbj4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gIH1cblxuICAvLyBBbiBPUEFRVUUgQUNDRVNTIEtFWSAoYHBiX3BhdF/igKZgIC8gYHBiX3NhX+KApmApIGNhcnJpZXMgbm8gY2xhaW1zIGFuZCBub1xuICAvLyBzaWduYXR1cmUsIHNvIGl0IGNhbm5vdCBiZSB2ZXJpZmllZCBoZXJlLiBUcmFkZSBpdCBhdCBwbGF0Zm9ybSBmb3IgYVxuICAvLyBzaG9ydC1saXZlZCBKV1QgKGNhY2hlZCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMpIGFuZCB0aGVuIHZlcmlmeSB0aGF0XG4gIC8vIEpXVCBvbiB0aGUgbm9ybWFsIHBhdGgg4oCUIHNlcnZpY2VzIG5ldmVyIHJlYWQgYSBrZXkgaGFzaC4gU2VlXG4gIC8vIGBzZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzYC5cbiAgaWYgKGlzT3BhcXVlQXBpS2V5KHBhcnRzWzFdKSkge1xuICAgIHZvaWQgcmVzb2x2ZUFwaUtleShvcHRpb25zLCBwYXJ0c1sxXSwgcmVxLCByZXMsIG5leHQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGAuY2F0Y2gobmV4dClgIGZvcndhcmRzIGEgRE9XTlNUUkVBTSBzeW5jaHJvbm91cyB0aHJvdyBmcm9tIGBuZXh0KClgIHRvXG4gIC8vIEV4cHJlc3MncyBlcnJvciBtaWRkbGV3YXJlIOKAlCB2ZXJpZmljYXRpb24gaXRzZWxmIG5ldmVyIHJlamVjdHMgKGl0IG1hcHNcbiAgLy8gZXZlcnkgZmFpbHVyZSB0byBhIHJlc3BvbnNlKS5cbiAgdm9pZCB2ZXJpZnlBbmRBdHRhY2gob3B0aW9ucywgcGFydHNbMV0sIHJlcSwgcmVzLCBuZXh0KS5jYXRjaChuZXh0KTtcbn1cblxuLyoqXG4gKiBFeGNoYW5nZSBhbiBvcGFxdWUga2V5IGZvciBhIEpXVCwgdGhlbiBjb250aW51ZSBvbiB0aGUgbm9ybWFsIHZlcmlmaWNhdGlvblxuICogcGF0aC4gQSByZWZ1c2VkIGtleSBpcyBhIDQwMTsgYW4gdW5yZWFjaGFibGUgcGxhdGZvcm0gaXMgYSA1MDMgKG5ldmVyIGEgcGFzcyDigJRcbiAqIGFuIHVudmVyaWZpYWJsZSBjcmVkZW50aWFsIGlzIG5vdCBhbiBpZGVudGl0eSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlLZXkoXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAga2V5OiBzdHJpbmcsXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIExvYWRlZCBMQVpJTFksIG9uIHRoZSBmaXJzdCBrZXkgZXZlciBwcmVzZW50ZWQuIEEgc3RhdGljIGltcG9ydCB3b3VsZCBwdXRcbiAgLy8gdGhlIEhUVFAgY2xpZW50IChhbmQgcGxhdGZvcm0ncyBhZGRyZXNzKSBpbnRvIHRoZSBpbXBvcnQgZ3JhcGggb2YgZXZlcnlcbiAgLy8gbW9kdWxlIHRoYXQgbWVyZWx5IHVzZXMgYHJlcXVpcmVBdXRoYCwgd2hpY2ggYm90aCB3aWRlbnMgdGhlIGJvb3QgZ3JhcGggYW5kXG4gIC8vIGJyZWFrcyBhbnkgdGVzdCB0aGF0IG1vY2tzIGBodHRwLWNsaWVudC5qc2Agd2l0aCBhIHBhcnRpYWwgbW9kdWxlLlxuICBjb25zdCB7IGV4Y2hhbmdlQXBpS2V5LCBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvYXBpLWtleS1leGNoYW5nZS5qcycpO1xuICBsZXQgdG9rZW46IHN0cmluZztcbiAgdHJ5IHtcbiAgICB0b2tlbiA9IGF3YWl0IGV4Y2hhbmdlQXBpS2V5KGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICAgJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlOyBwbGVhc2UgcmV0cnknLFxuICAgICAgICBFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgb3IgcmV2b2tlZCBhY2Nlc3Mga2V5JywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICB9XG4gIGF3YWl0IHZlcmlmeUFuZEF0dGFjaChvcHRpb25zLCB0b2tlbiwgcmVxLCByZXMsIG5leHQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBbmRBdHRhY2goXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmF3VG9rZW46IHN0cmluZyxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBUd28gY2hhaW5zLCBvbmUgZW50cnkgcG9pbnQgKHNlZSBgdmVyaWZ5QmVhcmVyVG9rZW5gKTogYSB1c2VyIHRva2VuIG11c3RcbiAgICAvLyBiZSBFUzI1NiBzaWduZWQgYnkgcGxhdGZvcm0gYW5kIHZlcmlmaWVkIGFnYWluc3QgaXRzIHB1Ymxpc2hlZCBKV0tTOyBhblxuICAgIC8vIGludGVybmFsIHNlcnZpY2UgdG9rZW4gbXVzdCBiZSBFUzI1NiBzaWduZWQgYnkgdGhhdCBzZXJ2aWNlJ3MgT1dOIGtleSBhbmRcbiAgICAvLyBkZWNsYXJlIGl0c2VsZiBhIHNlcnZpY2UgcHJpbmNpcGFsLiBCb3RoIHBpbiB0aGUgYWxnb3JpdGhtIChub1xuICAgIC8vIGFsZy1jb25mdXNpb24sIG5vIGBhbGc6bm9uZWApIGFuZCBib3RoIGFwcGx5IHRoZSBvcHRpb25hbCBpc3N1ZXIvYXVkaWVuY2VcbiAgICAvLyBiaW5kaW5nLlxuICAgIGNvbnN0IGRlY29kZWQgPSBhd2FpdCB2ZXJpZnlCZWFyZXJUb2tlbihyYXdUb2tlbik7XG5cbiAgICBpZiAoZGVjb2RlZC50eXBlICE9PSAnYWNjZXNzJykge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnT25seSBhY2Nlc3MgdG9rZW5zIGNhbiBiZSB1c2VkIGZvciBBUEkgcmVxdWVzdHMnLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gICAgfVxuXG4gICAgaWYgKCFkZWNvZGVkLnN1YiB8fCAhZGVjb2RlZC5yb2xlIHx8ICFoYXNWYWxpZElkZW50aXR5Q2xhaW1zKGRlY29kZWQpKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdUb2tlbiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcycsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlLXRva2VuIGtpbGwtc3dpdGNoOiByZWplY3QgYSBzZXJ2aWNlIHByaW5jaXBhbCB3aG9zZSBzZXJ2aWNlIGhhc1xuICAgIC8vIGJlZW4gYWRkZWQgdG8gdGhlIGRlbnlsaXN0LiBPdGhlcndpc2UgdGhlIG9ubHkgd2F5IHRvIGludmFsaWRhdGUgYVxuICAgIC8vIHNlcnZpY2UncyB0b2tlbnMgYmVmb3JlIHRoZWlyIChzaG9ydCkgVFRMIGlzIHJvdGF0aW5nIHRoYXQgc2VydmljZSdzXG4gICAgLy8gc2lnbmluZyBrZXk7IHRoaXMgY3V0cyBvbmUgY29tcHJvbWlzZWQvcm9ndWUgc2VydmljZSBvZmYgaW1tZWRpYXRlbHkuIE8oMSkgU2V0IGxvb2t1cCwgemVybyBjb3N0IHdoZW4gdGhlIGRlbnlsaXN0XG4gICAgLy8gaXMgZW1wdHkgKHRoZSBkZWZhdWx0KSwgc28gaXQgbmV2ZXIgdGF4ZXMgdGhlIFMyUyBob3QgcGF0aCB1bmxlc3MgYXJtZWQuXG4gICAgaWYgKGlzU2VydmljZVRva2VuRGVuaWVkKGRlY29kZWQpKSB7XG4gICAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl9kZW5pZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YoZGVjb2RlZCkgPz8gJ3Vua25vd24nIH0pO1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlamVjdGVkIGRlbnlsaXN0ZWQgc2VydmljZSB0b2tlbicsIHsgc3ViOiBkZWNvZGVkLnN1YiB9KTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1NlcnZpY2UgdG9rZW4gcmV2b2tlZCcsIEVycm9yQ29kZS5UT0tFTl9SRVZPS0VEKTtcbiAgICB9XG5cbiAgICByZXEudXNlciA9IHsgLi4uZGVjb2RlZCB9O1xuXG4gICAgLy8gUkVBRC1PTkxZIElNUEVSU09OQVRJT04uIFRoZSB0b2tlbiBuYW1lcyB0aGUgb3BlcmF0b3IgQU5EIHNheXMgaXQgbWF5IG9ubHlcbiAgICAvLyBsb29rOiBldmVyeSBzZXJ2aWNlIHJlZnVzZXMgYSBzdGF0ZSBjaGFuZ2UgdW5kZXIgaXQsIG5vdCBvbmx5IHBsYXRmb3JtIOKAlFxuICAgIC8vIGEgc3VwcG9ydCBzZXNzaW9uIHRoYXQgY291bGQgd3JpdGUgdG8gcGx1Z2luL2NvbXBsaWFuY2UvYmlsbGluZyBpcyBub3RcbiAgICAvLyByZWFkLW9ubHkuIENoZWNrZWQgYmVmb3JlIGFueSBvdGhlciBnYXRlIHNvIG5vIHJvdXRlIGNhbiBmb3JnZXQgaXQuXG4gICAgaWYgKGlzSW1wZXJzb25hdGlvbldyaXRlQmxvY2tlZChyZXEubWV0aG9kLCBkZWNvZGVkKSkge1xuICAgICAgaWYgKHJlcS5tZXRob2QpIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ2ltcGVyc29uYXRpb24tcmVhZC1vbmx5Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnV3JpdGUgcmVxdWVzdHMgYXJlIGRpc2FibGVkIGR1cmluZyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbi4gU3RvcCBpbXBlcnNvbmF0aW5nIHRvIG1ha2UgY2hhbmdlcy4nLFxuICAgICAgICBFcnJvckNvZGUuSU1QRVJTT05BVElPTl9SRUFEX09OTFksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJPT1RTVFJBUC1BRE1JTiBFTlJPTE1FTlQgU0VTU0lPTi4gU3VjaCBhIHRva2VuIGV4aXN0cyBzb1xuICAgIC8vIHRoZSBpbnN0YWxsJ3Mgb25seSBhZG1pbiBjYW4gZW5yb2wgYSBmYWN0b3I7IGl0IGlzIGBhYWw6IDFgIGFuZCBtdXN0IG5vdFxuICAgIC8vIHJlYWNoIGFueXRoaW5nIGVsc2UuIFBsYXRmb3JtIOKAlCB3aGljaCBvd25zIHRoZSBleGNlcHRpb24gYW5kIGtub3dzIHdoaWNoXG4gICAgLy8gb2YgaXRzIG93biByb3V0ZXMgYGluaXQtcGxhdGZvcm0uc2hgIGNhbGxzIOKAlCBhbGxvd3MgYW4gZXhwbGljaXQgZmV3IGJlZm9yZVxuICAgIC8vIHRoaXMgcG9pbnQgKHNlZSBpdHMgb3duIGByZXF1aXJlQXV0aGApOyBpbiBFVkVSWSBvdGhlciBzZXJ2aWNlIHRoZSBhbnN3ZXJcbiAgICAvLyBpcyBzaW1wbHkgbm8sIHNvIHRoZSByZWFjaCByZXN0cmljdGlvbiBob2xkcyB3aXRob3V0IGEgcGVyLXNlcnZpY2VcbiAgICAvLyBhbGxvd2xpc3QgdG8ga2VlcCBpbiBzeW5jLlxuICAgIGlmIChkZWNvZGVkLm1mYUVucm9sbG1lbnRQZW5kaW5nID09PSB0cnVlKSB7XG4gICAgICBlbWl0Q291bnRlcignbWZhX2VuZm9yY2VtZW50X3JlZnVzZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpLCByZWFzb246ICdib290c3RyYXBfc2Vzc2lvbicgfSk7XG4gICAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdtZmEtZW5yb2xtZW50Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnRmluaXNoIHNldHRpbmcgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBiZWZvcmUgdXNpbmcgdGhlIHJlc3Qgb2YgUGlwZWxpbmUgQnVpbGRlcicsXG4gICAgICAgIEVycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2Vzc2lvbi1sZXZlbCBhc3N1cmFuY2UgKGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSwgbWF4QWdlIH0pYCkuXG4gICAgaWYgKG9wdGlvbnMubWluQXNzdXJhbmNlXG4gICAgICAmJiByZWZ1c2VGb3JBc3N1cmFuY2UoeyBtaW5Bc3N1cmFuY2U6IG9wdGlvbnMubWluQXNzdXJhbmNlLCAuLi4ob3B0aW9ucy5tYXhBZ2UgIT09IHVuZGVmaW5lZCA/IHsgbWF4QWdlOiBvcHRpb25zLm1heEFnZSB9IDoge30pIH0sIGRlY29kZWQsIHJlcSwgcmVzKSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIHgtb3JnLWlkL3gtb3JnLW5hbWUgb3ZlcnJpZGUgbGV0cyBhIFNZUy1BRE1JTiBhY3Qgb24gYSBjaG9zZW4gb3JnXG4gICAgLy8gKGNyb3NzLW9yZyBhZG1pbiB0b29saW5nKS4gSXQgaXMgZ2F0ZWQgb24gdGhlIHZlcmlmaWVkIGBpc1N1cGVyQWRtaW5gIGNsYWltXG4gICAgLy8gaGVyZSBzbyB0aGF0IGV2ZW4gYSByb3V0ZSB3aGljaCBtaXN0YWtlbmx5IGVuYWJsZXMgYGFsbG93T3JnSGVhZGVyT3ZlcnJpZGVgXG4gICAgLy8gY2FuIE5FVkVSIGxldCBhbiBvcmRpbmFyeSBhdXRoZW50aWNhdGVkIHVzZXIgc3Bvb2YgYW5vdGhlciB0ZW5hbnQncyBvcmcgdmlhXG4gICAgLy8gdGhlIGhlYWRlciDigJQgZGVmZW5jZS1pbi1kZXB0aCBhZ2FpbnN0IHRoZSBjcm9zcy10ZW5hbnQgYnJlYWsgdGhpcyBjYXVzZWQuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dPcmdIZWFkZXJPdmVycmlkZSAmJiBkZWNvZGVkLmlzU3VwZXJBZG1pbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaGVhZGVyT3JnSWQgPSBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtb3JnLWlkJ10pO1xuICAgICAgY29uc3QgaGVhZGVyT3JnTmFtZSA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctbmFtZSddKTtcbiAgICAgIGlmIChoZWFkZXJPcmdJZCkgcmVxLnVzZXIub3JnYW5pemF0aW9uSWQgPSBoZWFkZXJPcmdJZDtcbiAgICAgIGlmIChoZWFkZXJPcmdOYW1lKSByZXEudXNlci5vcmdhbml6YXRpb25OYW1lID0gaGVhZGVyT3JnTmFtZTtcbiAgICB9XG5cbiAgICAvLyBSZS1kZXJpdmUgdGhlIHJlcXVlc3QncyB0ZW5hbnQgaWRlbnRpdHkgZnJvbSB0aGUgTk9XLXZlcmlmaWVkIEpXVC5cbiAgICAvL1xuICAgIC8vIGBhdHRhY2hSZXF1ZXN0Q29udGV4dGAgcnVucyBhcyBhIGdsb2JhbCBtaWRkbGV3YXJlIEJFRk9SRSB0aGlzIHBlci1yb3V0ZVxuICAgIC8vIGByZXF1aXJlQXV0aGAsIHNvIGl0IGNhcHR1cmVkIGByZXEuY29udGV4dC5pZGVudGl0eWAgd2hpbGUgYHJlcS51c2VyYCB3YXNcbiAgICAvLyBzdGlsbCB1bmRlZmluZWQg4oCUIGF0IHdoaWNoIHBvaW50IGBnZXRJZGVudGl0eWAgZmFsbHMgYmFjayB0byB0aGUgcmF3LFxuICAgIC8vIGNsaWVudC1zZXR0YWJsZSBgeC1vcmctaWRgL2B4LXVzZXItaWRgIGhlYWRlcnMuIEV2ZXJ5IGRvd25zdHJlYW0gdGVuYW50LVxuICAgIC8vIGF1dGhvcml0eSBjb25zdW1lciAocmVxdWlyZU9yZ0lkLCB3aXRoVGVuYW50Q29udGV4dCdzIFJMUyBzY29wZSwgY2hlY2tRdW90YSxcbiAgICAvLyB3aXRoUm91dGUsIGFuZCB0aGUgaWRlbXBvdGVuY3kgbmFtZXNwYWNlKSByZWFkcyBgcmVxLmNvbnRleHQuaWRlbnRpdHlgLCBzb1xuICAgIC8vIHRoYXQgZnJvemVuIGhlYWRlci1kZXJpdmVkIHZhbHVlIOKAlCBub3QgdGhlIEpXVCDigJQgd2FzIGdvdmVybmluZyB0ZW5hbmN5IG9uXG4gICAgLy8gYW55IG5vbi1uZ2lueCBwYXRoLiBSZWNvbXB1dGluZyBoZXJlLCBhdCB0aGUgc2luZ2xlIHBvc3QtdmVyaWZpY2F0aW9uIGNob2tlXG4gICAgLy8gcG9pbnQsIG1ha2VzIGBnZXRJZGVudGl0eWAgcHJlZmVyIHRoZSB2ZXJpZmllZCBgcmVxLnVzZXJgIChzZWUgaWRlbnRpdHkudHMpXG4gICAgLy8gc28gdGVuYW5jeSBpcyBKV1QtYXV0aG9yaXRhdGl2ZS4gVGhlIG5naW54IGB4LW9yZy1pZGAgb3ZlcndyaXRlIHN0YXlzIGFzXG4gICAgLy8gZGVmZW5jZS1pbi1kZXB0aC4gR3VhcmRlZCBvbiBgcmVxLmNvbnRleHRgIHNvIHNlcnZpY2VzL3BhdGhzIHRoYXQgbmV2ZXJcbiAgICAvLyBhdHRhY2ggYSBjb250ZXh0IChvciBydW4gcmVxdWlyZUF1dGggcHJlLWNvbnRleHQpIGFyZSB1bmFmZmVjdGVkLlxuICAgIGNvbnN0IHJlcUN0eCA9IChyZXEgYXMgUmVxdWVzdCAmIHsgY29udGV4dD86IHsgaWRlbnRpdHk6IFJlcXVlc3RJZGVudGl0eSB9IH0pLmNvbnRleHQ7XG4gICAgaWYgKHJlcUN0eCkge1xuICAgICAgcmVxQ3R4LmlkZW50aXR5ID0gZ2V0SWRlbnRpdHkocmVxIGFzIHVua25vd24gYXMgSHR0cFJlcXVlc3QpO1xuICAgIH1cblxuICAgIC8vIFNlc3Npb24gaW52YWxpZGF0aW9uICh0b2tlbi12ZXJzaW9uIHN0b3JlICsgaW1wZXJzb25hdGlvbi1zZXNzaW9uXG4gICAgLy8gbGl2ZW5lc3MpLiBObyBzdG9yZSByZWdpc3RlcmVkIOKHkiBvbmx5IGltcGVyc29uYXRpb24gc2Vzc2lvbnMgYXJlIGNoZWNrZWQuXG4gICAgaWYgKG5lZWRzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQpKSB7XG4gICAgICAvLyBgLmNhdGNoKG5leHQpYCBmb3J3YXJkcyBhIERPV05TVFJFQU0gc3luY2hyb25vdXMgdGhyb3cgZnJvbSBgbmV4dCgpYCB0b1xuICAgICAgLy8gRXhwcmVzcydzIGVycm9yIG1pZGRsZXdhcmUg4oCUIHRoaXMgYG5leHQoKWAgcnVucyBpbiBhIG1pY3JvdGFzaywgb3V0c2lkZVxuICAgICAgLy8gdGhlIHN1cnJvdW5kaW5nIHRyeS9jYXRjaC4gVGhlIGNoZWNrIGl0c2VsZiBuZXZlciByZWplY3RzLlxuICAgICAgY2hlY2tSZXZvY2F0aW9uKGRlY29kZWQpLnRoZW4oKHJlZnVzYWwpID0+IHtcbiAgICAgICAgaWYgKHJlZnVzYWwpIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgcmVmdXNhbCwgRXJyb3JDb2RlLlRPS0VOX1JFVk9LRUQpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9KS5jYXRjaChuZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2Ygand0LlRva2VuRXhwaXJlZEVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdUb2tlbiBoYXMgZXhwaXJlZCcsIEVycm9yQ29kZS5UT0tFTl9FWFBJUkVEKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgc2lnbmluZyBrZXlzIGNvdWxkbid0IGJlIGZldGNoZWQsIHNvIHRoZSB0b2tlbidzIHZhbGlkaXR5IGlzIFVOS05PV04uXG4gICAgLy8gRmFpbCBDTE9TRUQgd2l0aCBhIHJldHJ5YWJsZSA1MDMg4oCUIG5ldmVyIGEgcGFzcywgYW5kIG5ldmVyIGEgNDAxIHRoYXRcbiAgICAvLyB3b3VsZCBzZW5kIGEgbGVnaXRpbWF0ZSBjbGllbnQgb2ZmIHRvIHJlLWF1dGhlbnRpY2F0ZSBvdmVyIG91ciBvdXRhZ2UuXG4gICAgLy8gU2FtZSByZWFzb25pbmcgZm9yIHRoZSBTRVJWSUNFIGNoYWluOiBubyByZWFkYWJsZSBrZXkgYnVuZGxlIG1lYW5zIG5vIHdheVxuICAgIC8vIHRvIHRlbGwgYSBwZWVyJ3MgdG9rZW4gZnJvbSBhIGZvcmdlcnksIHNvIHRoZSByZXF1ZXN0IGlzIHJlZnVzZWQgd2l0aCBhXG4gICAgLy8gcmV0cnlhYmxlIDUwMyByYXRoZXIgdGhhbiBhZG1pdHRlZCBvciBib3VuY2VkIHRvIHJlLWF1dGhlbnRpY2F0ZS5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBKd2tzVW5hdmFpbGFibGVFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlamVjdGluZyByZXF1ZXN0OiB0b2tlbiBzaWduaW5nIGtleXMgdW5hdmFpbGFibGUnLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihcbiAgICAgICAgcmVzLCBIdHRwU3RhdHVzLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gICAgICAgICdUb2tlbiB2ZXJpZmljYXRpb24gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU7IHBsZWFzZSByZXRyeScsXG4gICAgICAgIEVycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBVbmtub3duS2lkRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBqd3QuSnNvbldlYlRva2VuRXJyb3IpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgdG9rZW4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnQXV0aGVudGljYXRpb24gZmFpbGVkJywgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCk7XG4gIH1cbn1cblxuIl19
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQVF0QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FB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QUFJLEVBQUUsQ0FBQztJQUNULENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxJQUFJLEtBQUssWUFBWSxvQkFBb0IsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFLENBQUM7WUFDOUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtREFBbUQsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzRixPQUFPLFNBQVMsQ0FDZCxHQUFHLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUNuQyw2REFBNkQsRUFDN0QsU0FBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLGVBQWUsSUFBSSxLQUFLLFlBQVksR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0UsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogYHJlcXVpcmVBdXRoYDogYmVhcmVyIC8gYWNjZXNzLWtleSBhdXRoZW50aWNhdGlvbiwgdGhlIGNoZWNrcyBldmVyeVxuICogdmVyaWZpZWQgcmVxdWVzdCBwYXNzZXMsIGFuZCB0aGUgdGVuYW50IGlkZW50aXR5IGl0IGF0dGFjaGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UsIE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGp3dCBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IHsgcmVmdXNlRm9yQXNzdXJhbmNlIH0gZnJvbSAnLi9hc3N1cmFuY2UuanMnO1xuaW1wb3J0IHsgaGFzVmFsaWRJZGVudGl0eUNsYWltcywgdmVyaWZ5QmVhcmVyVG9rZW4gfSBmcm9tICcuL2p3dC12ZXJpZnkuanMnO1xuaW1wb3J0IHsgcmVjb3JkQXV0aHpEZW5pYWwgfSBmcm9tICcuL3Blcm1pc3Npb24tZ2F0ZXMuanMnO1xuaW1wb3J0IHsgY2hlY2tSZXZvY2F0aW9uLCBpc0ltcGVyc29uYXRpb25Xcml0ZUJsb2NrZWQsIG5lZWRzUmV2b2NhdGlvbkNoZWNrIH0gZnJvbSAnLi9yZXZvY2F0aW9uLmpzJztcbmltcG9ydCB7IHRhZ1JvdXRlR2F0ZSB9IGZyb20gJy4vcm91dGUtdGFibGUuanMnO1xuaW1wb3J0IHsgaXNTZXJ2aWNlVG9rZW5EZW5pZWQsIHNlcnZpY2VOYW1lT2YgfSBmcm9tICcuL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IEh0dHBTdGF0dXMgfSBmcm9tICcuLi9jb25zdGFudHMvaHR0cC1zdGF0dXMuanMnO1xuaW1wb3J0IHsgSndrc1VuYXZhaWxhYmxlRXJyb3IsIFVua25vd25LaWRFcnJvciB9IGZyb20gJy4uL3NlcnZpY2VzL2p3a3MtY2FjaGUuanMnO1xuaW1wb3J0IHsgU2VydmljZUtleUVycm9yLCBzZXJ2aWNlSWRlbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXJ2aWNlLWtleXMuanMnO1xuaW1wb3J0IHsgdHlwZSBBc3N1cmFuY2VMZXZlbCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMvaHR0cC5qcyc7XG5pbXBvcnQgeyBpc09wYXF1ZUFwaUtleSB9IGZyb20gJy4uL3V0aWxzL2FwaS1rZXkuanMnO1xuaW1wb3J0IHsgZ2V0SGVhZGVyU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycy5qcyc7XG5pbXBvcnQgeyBnZXRJZGVudGl0eSwgdHlwZSBSZXF1ZXN0SWRlbnRpdHkgfSBmcm9tICcuLi91dGlscy9pZGVudGl0eS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXV0aC1taWRkbGV3YXJlJyk7XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyB4LW9yZy1pZC94LW9yZy1uYW1lIGhlYWRlcnMgdG8gb3ZlcnJpZGUgdGhlIEpXVCdzIG9yZ2FuaXphdGlvbiBmaWVsZHMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGB4LW9yZy1pZGAvYHgtb3JnLW5hbWVgIGhlYWRlcnMgb3ZlcnJpZGUgdGhlIGNhbGxlcidzIG9yZ1xuICAgKiDigJQgYnV0IE9OTFkgZm9yIGEgdmVyaWZpZWQgU1lTLUFETUlOIChgaXNTdXBlckFkbWluYCBjbGFpbSkuIEZvciBhbnkgb3JkaW5hcnlcbiAgICogYXV0aGVudGljYXRlZCB1c2VyIHRoZSBoZWFkZXJzIGFyZSBpZ25vcmVkLCBzbyBlbmFibGluZyB0aGlzIGNhbiBuZXZlciBsZXQgYVxuICAgKiBub3JtYWwgdXNlciBpbXBlcnNvbmF0ZSBhbm90aGVyIHRlbmFudCdzIG9yZy4gVXNlIGZvciBjcm9zcy1vcmcgYWRtaW4gdG9vbGluZ1xuICAgKiAoZS5nLiBhIHN5c2FkbWluIG1hbmFnaW5nIGEgZ2l2ZW4gb3JnJ3MgYmlsbGluZykuIElmIHVuc3VyZSwgbGVhdmUgaXQgZGlzYWJsZWQuXG4gICAqL1xuICBhbGxvd09yZ0hlYWRlck92ZXJyaWRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlbWFuZCB0aGF0IHRoZSB3aG9sZSBTRVNTSU9OIGJlIGF0IGxlYXN0IHRoaXMgYXNzdXJhbmNlIGxldmVsLlxuICAgKlxuICAgKiBgbWluQXNzdXJhbmNlOiAyYCBtZWFucyB0aGUgcGVyc29uIGF1dGhlbnRpY2F0ZWQgd2l0aCBhIHNlY29uZCBmYWN0b3Ig4oCUIGFcbiAgICogcGFzc2tleSB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXMgYW4gYXV0aGVudGljYXRvciBjb2RlLCBvclxuICAgKiBTU08gdGhyb3VnaCBhbiBJZFAgdGhlIG9yZyBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS4gQSB3ZWFrZXIgdG9rZW4gZ2V0c1xuICAgKiAqKjQwMSBgTUZBX1JFUVVJUkVEYCoqLCB3aGljaCB0aGUgY2xpZW50IGFuc3dlcnMgYnkgc2VuZGluZyB0aGUgcGVyc29uIHRvXG4gICAqIGVucm9sbWVudCBvciB0byBhIHN0cm9uZ2VyIHNpZ24taW47IHJlZnJlc2hpbmcgY2Fubm90IGhlbHAsIGJlY2F1c2UgYGFhbGBcbiAgICogbGl2ZXMgb24gdGhlIHNlc3Npb24gc2xvdCBhbmQgYSByZWZyZXNoIG5ldmVyIHJhaXNlcyBpdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgU0VTU0lPTi1sZXZlbCBjb3VudGVycGFydCB0byB7QGxpbmsgcmVxdWlyZVN0ZXBVcH0sIHdoaWNoIHN0YXlzXG4gICAqIGEgZnJlc2gsIHBlci1hY3Rpb24gY29uZmlybWF0aW9uLiBVc2UgYm90aCBvbiB0aGUgbW9zdCBkYW5nZXJvdXMgcm91dGVzLlxuICAgKlxuICAgKiBNQUNISU5FUyBORVZFUiBTQVRJU0ZZIElULiBBIHNlcnZpY2UgcHJpbmNpcGFsLCBhbiBvcmcgc2VydmljZSBhY2NvdW50IGFuZFxuICAgKiBhbiBleGNoYW5nZWQgYWNjZXNzIGtleSBhbGwgZ2V0ICoqNDAzIGBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEYCoqIOKAlCB0aGVyZSBpc1xuICAgKiBubyBwZXJzb24gYmVoaW5kIHRoZW0gdG8gaGF2ZSBwcmVzZW50ZWQgYSBmYWN0b3IsIHNvIFwiYXNzdXJhbmNlXCIgaXMgbm90IGFcbiAgICogcXVlc3Rpb24gdGhlaXIgY3JlZGVudGlhbCBjYW4gYW5zd2VyLiBUaGF0IGlzIGRlbGliZXJhdGVseSBub3QgYSBzaWxlbnRcbiAgICogcGFzcy10aHJvdWdoIGZvciBpbnRlcm5hbCBzZXJ2aWNlczogYSByb3V0ZSB0aGF0IGRlbWFuZHMgTUZBIGlzIGEgcm91dGUgYVxuICAgKiBodW1hbiBpcyBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzIG9uLlxuICAgKi9cbiAgbWluQXNzdXJhbmNlPzogQXNzdXJhbmNlTGV2ZWw7XG4gIC8qKlxuICAgKiBXaXRoIHtAbGluayBtaW5Bc3N1cmFuY2V9LCBhZGRpdGlvbmFsbHkgYm91bmQgaG93IGxvbmcgYWdvIHRoYXQgc2lnbi1pblxuICAgKiBoYXBwZW5lZCAoc2Vjb25kcywgY29tcGFyZWQgYWdhaW5zdCB0aGUgdG9rZW4ncyBgYXV0aF90aW1lYCkuIEEgc2Vzc2lvbiB0aGF0XG4gICAqIGlzIE1GQS1ncmFkZSBidXQgb2xkZXIgdGhhbiB0aGlzIGdldHMgKio0MDEgYFJFQVVUSF9SRVFVSVJFRGAqKi4gSWdub3JlZFxuICAgKiB3aXRob3V0IGBtaW5Bc3N1cmFuY2VgIOKAlCBcImhvdyByZWNlbnRcIiBpcyBvbmx5IG1lYW5pbmdmdWwgb25jZSBcImhvdyBzdHJvbmdcIlxuICAgKiBpcyBiZWluZyBhc2tlZC5cbiAgICovXG4gIG1heEFnZT86IG51bWJlcjtcbn1cblxuLyoqIEpXVCBhdXRoIG1pZGRsZXdhcmUuIFVzZSBkaXJlY3RseSBvciBjYWxsIHdpdGggb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlQXV0aChcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICBvcHRpb25zPzogUmVxdWlyZUF1dGhPcHRpb25zLFxuKTogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBdXRoKFxuICByZXFPck9wdGlvbnM/OiBSZXF1ZXN0IHwgUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXM/OiBSZXNwb25zZSxcbiAgbmV4dD86IE5leHRGdW5jdGlvbixcbik6IHZvaWQgfCAoKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gIGlmIChyZXFPck9wdGlvbnMgJiYgcmVzICYmIG5leHQgJiYgJ2hlYWRlcnMnIGluIHJlcU9yT3B0aW9ucykge1xuICAgIHJldHVybiBfcmVxdWlyZUF1dGgoe30sIHJlcU9yT3B0aW9ucyBhcyBSZXF1ZXN0LCByZXMsIG5leHQpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IChyZXFPck9wdGlvbnMgYXMgUmVxdWlyZUF1dGhPcHRpb25zKSB8fCB7fTtcbiAgY29uc3QgZ2F0ZSA9IHRhZ1JvdXRlR2F0ZSgocmVxOiBSZXF1ZXN0LCByZXNJbm5lcjogUmVzcG9uc2UsIG5leHRJbm5lcjogTmV4dEZ1bmN0aW9uKSA9PiB7XG4gICAgX3JlcXVpcmVBdXRoKG9wdGlvbnMsIHJlcSwgcmVzSW5uZXIsIG5leHRJbm5lcik7XG4gIH0sIHsga2luZDogJ2F1dGgnIH0pO1xuICBpZiAob3B0aW9ucy5taW5Bc3N1cmFuY2UpIHtcbiAgICB0YWdSb3V0ZUdhdGUoZ2F0ZSwgeyBraW5kOiAnYXNzdXJhbmNlJywgbWluQXNzdXJhbmNlOiBvcHRpb25zLm1pbkFzc3VyYW5jZSwgLi4uKG9wdGlvbnMubWF4QWdlICE9PSB1bmRlZmluZWQgPyB7IG1heEFnZTogb3B0aW9ucy5tYXhBZ2UgfSA6IHt9KSB9KTtcbiAgfVxuICByZXR1cm4gZ2F0ZTtcbn1cbnRhZ1JvdXRlR2F0ZShyZXF1aXJlQXV0aCwgeyBraW5kOiAnYXV0aCcgfSk7XG5cbmZ1bmN0aW9uIF9yZXF1aXJlQXV0aChcbiAgb3B0aW9uczogUmVxdWlyZUF1dGhPcHRpb25zLFxuICByZXE6IFJlcXVlc3QsXG4gIHJlczogUmVzcG9uc2UsXG4gIG5leHQ6IE5leHRGdW5jdGlvbixcbik6IHZvaWQge1xuICBjb25zdCBhdXRoSGVhZGVyID0gcmVxLmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcblxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRob3JpemF0aW9uIGhlYWRlciByZXF1aXJlZCcsIEVycm9yQ29kZS5UT0tFTl9NSVNTSU5HKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gYXV0aEhlYWRlci5zcGxpdCgnICcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8IHBhcnRzWzBdICE9PSAnQmVhcmVyJykge1xuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgYXV0aG9yaXphdGlvbiBmb3JtYXQuIFVzZTogQmVhcmVyIDx0b2tlbj4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gIH1cblxuICAvLyBBbiBPUEFRVUUgQUNDRVNTIEtFWSAoYHBiX3BhdF/igKZgIC8gYHBiX3NhX+KApmApIGNhcnJpZXMgbm8gY2xhaW1zIGFuZCBub1xuICAvLyBzaWduYXR1cmUsIHNvIGl0IGNhbm5vdCBiZSB2ZXJpZmllZCBoZXJlLiBUcmFkZSBpdCBhdCBwbGF0Zm9ybSBmb3IgYVxuICAvLyBzaG9ydC1saXZlZCBKV1QgKGNhY2hlZCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMpIGFuZCB0aGVuIHZlcmlmeSB0aGF0XG4gIC8vIEpXVCBvbiB0aGUgbm9ybWFsIHBhdGgg4oCUIHNlcnZpY2VzIG5ldmVyIHJlYWQgYSBrZXkgaGFzaC4gU2VlXG4gIC8vIGBzZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzYC5cbiAgaWYgKGlzT3BhcXVlQXBpS2V5KHBhcnRzWzFdKSkge1xuICAgIHZvaWQgcmVzb2x2ZUFwaUtleShvcHRpb25zLCBwYXJ0c1sxXSwgcmVxLCByZXMsIG5leHQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGAuY2F0Y2gobmV4dClgIGZvcndhcmRzIGEgRE9XTlNUUkVBTSBzeW5jaHJvbm91cyB0aHJvdyBmcm9tIGBuZXh0KClgIHRvXG4gIC8vIEV4cHJlc3MncyBlcnJvciBtaWRkbGV3YXJlIOKAlCB2ZXJpZmljYXRpb24gaXRzZWxmIG5ldmVyIHJlamVjdHMgKGl0IG1hcHNcbiAgLy8gZXZlcnkgZmFpbHVyZSB0byBhIHJlc3BvbnNlKS5cbiAgdm9pZCB2ZXJpZnlBbmRBdHRhY2gob3B0aW9ucywgcGFydHNbMV0sIHJlcSwgcmVzLCBuZXh0KS5jYXRjaChuZXh0KTtcbn1cblxuLyoqXG4gKiBFeGNoYW5nZSBhbiBvcGFxdWUga2V5IGZvciBhIEpXVCwgdGhlbiBjb250aW51ZSBvbiB0aGUgbm9ybWFsIHZlcmlmaWNhdGlvblxuICogcGF0aC4gQSByZWZ1c2VkIGtleSBpcyBhIDQwMTsgYW4gdW5yZWFjaGFibGUgcGxhdGZvcm0gaXMgYSA1MDMgKG5ldmVyIGEgcGFzcyDigJRcbiAqIGFuIHVudmVyaWZpYWJsZSBjcmVkZW50aWFsIGlzIG5vdCBhbiBpZGVudGl0eSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlLZXkoXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAga2V5OiBzdHJpbmcsXG4gIHJlcTogUmVxdWVzdCxcbiAgcmVzOiBSZXNwb25zZSxcbiAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIExvYWRlZCBMQVpJTFksIG9uIHRoZSBmaXJzdCBrZXkgZXZlciBwcmVzZW50ZWQuIEEgc3RhdGljIGltcG9ydCB3b3VsZCBwdXRcbiAgLy8gdGhlIEhUVFAgY2xpZW50IChhbmQgcGxhdGZvcm0ncyBhZGRyZXNzKSBpbnRvIHRoZSBpbXBvcnQgZ3JhcGggb2YgZXZlcnlcbiAgLy8gbW9kdWxlIHRoYXQgbWVyZWx5IHVzZXMgYHJlcXVpcmVBdXRoYCwgd2hpY2ggYm90aCB3aWRlbnMgdGhlIGJvb3QgZ3JhcGggYW5kXG4gIC8vIGJyZWFrcyBhbnkgdGVzdCB0aGF0IG1vY2tzIGBodHRwLWNsaWVudC5qc2Agd2l0aCBhIHBhcnRpYWwgbW9kdWxlLlxuICBjb25zdCB7IGV4Y2hhbmdlQXBpS2V5LCBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvYXBpLWtleS1leGNoYW5nZS5qcycpO1xuICBsZXQgdG9rZW46IHN0cmluZztcbiAgdHJ5IHtcbiAgICB0b2tlbiA9IGF3YWl0IGV4Y2hhbmdlQXBpS2V5KGtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICAgJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlOyBwbGVhc2UgcmV0cnknLFxuICAgICAgICBFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgb3IgcmV2b2tlZCBhY2Nlc3Mga2V5JywgRXJyb3JDb2RlLlRPS0VOX0lOVkFMSUQpO1xuICB9XG4gIGF3YWl0IHZlcmlmeUFuZEF0dGFjaChvcHRpb25zLCB0b2tlbiwgcmVxLCByZXMsIG5leHQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBbmRBdHRhY2goXG4gIG9wdGlvbnM6IFJlcXVpcmVBdXRoT3B0aW9ucyxcbiAgcmF3VG9rZW46IHN0cmluZyxcbiAgcmVxOiBSZXF1ZXN0LFxuICByZXM6IFJlc3BvbnNlLFxuICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBUd28gY2hhaW5zLCBvbmUgZW50cnkgcG9pbnQgKHNlZSBgdmVyaWZ5QmVhcmVyVG9rZW5gKTogYSB1c2VyIHRva2VuIG11c3RcbiAgICAvLyBiZSBFUzI1NiBzaWduZWQgYnkgcGxhdGZvcm0gYW5kIHZlcmlmaWVkIGFnYWluc3QgaXRzIHB1Ymxpc2hlZCBKV0tTOyBhblxuICAgIC8vIGludGVybmFsIHNlcnZpY2UgdG9rZW4gbXVzdCBiZSBFUzI1NiBzaWduZWQgYnkgdGhhdCBzZXJ2aWNlJ3MgT1dOIGtleSBhbmRcbiAgICAvLyBkZWNsYXJlIGl0c2VsZiBhIHNlcnZpY2UgcHJpbmNpcGFsLiBCb3RoIHBpbiB0aGUgYWxnb3JpdGhtIChub1xuICAgIC8vIGFsZy1jb25mdXNpb24sIG5vIGBhbGc6bm9uZWApIGFuZCBib3RoIGFwcGx5IHRoZSBvcHRpb25hbCBpc3N1ZXIvYXVkaWVuY2VcbiAgICAvLyBiaW5kaW5nLlxuICAgIGNvbnN0IGRlY29kZWQgPSBhd2FpdCB2ZXJpZnlCZWFyZXJUb2tlbihyYXdUb2tlbik7XG5cbiAgICBpZiAoZGVjb2RlZC50eXBlICE9PSAnYWNjZXNzJykge1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnT25seSBhY2Nlc3MgdG9rZW5zIGNhbiBiZSB1c2VkIGZvciBBUEkgcmVxdWVzdHMnLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gICAgfVxuXG4gICAgaWYgKCFkZWNvZGVkLnN1YiB8fCAhZGVjb2RlZC5yb2xlIHx8ICFoYXNWYWxpZElkZW50aXR5Q2xhaW1zKGRlY29kZWQpKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdUb2tlbiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcycsIEVycm9yQ29kZS5UT0tFTl9JTlZBTElEKTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlLXRva2VuIGtpbGwtc3dpdGNoOiByZWplY3QgYSBzZXJ2aWNlIHByaW5jaXBhbCB3aG9zZSBzZXJ2aWNlIGhhc1xuICAgIC8vIGJlZW4gYWRkZWQgdG8gdGhlIGRlbnlsaXN0LiBPdGhlcndpc2UgdGhlIG9ubHkgd2F5IHRvIGludmFsaWRhdGUgYVxuICAgIC8vIHNlcnZpY2UncyB0b2tlbnMgYmVmb3JlIHRoZWlyIChzaG9ydCkgVFRMIGlzIHJvdGF0aW5nIHRoYXQgc2VydmljZSdzXG4gICAgLy8gc2lnbmluZyBrZXk7IHRoaXMgY3V0cyBvbmUgY29tcHJvbWlzZWQvcm9ndWUgc2VydmljZSBvZmYgaW1tZWRpYXRlbHkuIE8oMSkgU2V0IGxvb2t1cCwgemVybyBjb3N0IHdoZW4gdGhlIGRlbnlsaXN0XG4gICAgLy8gaXMgZW1wdHkgKHRoZSBkZWZhdWx0KSwgc28gaXQgbmV2ZXIgdGF4ZXMgdGhlIFMyUyBob3QgcGF0aCB1bmxlc3MgYXJtZWQuXG4gICAgaWYgKGlzU2VydmljZVRva2VuRGVuaWVkKGRlY29kZWQpKSB7XG4gICAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl9kZW5pZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YoZGVjb2RlZCkgPz8gJ3Vua25vd24nIH0pO1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlamVjdGVkIGRlbnlsaXN0ZWQgc2VydmljZSB0b2tlbicsIHsgc3ViOiBkZWNvZGVkLnN1YiB9KTtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ1NlcnZpY2UgdG9rZW4gcmV2b2tlZCcsIEVycm9yQ29kZS5UT0tFTl9SRVZPS0VEKTtcbiAgICB9XG5cbiAgICByZXEudXNlciA9IHsgLi4uZGVjb2RlZCB9O1xuXG4gICAgLy8gUkVBRC1PTkxZIElNUEVSU09OQVRJT04uIFRoZSB0b2tlbiBuYW1lcyB0aGUgb3BlcmF0b3IgQU5EIHNheXMgaXQgbWF5IG9ubHlcbiAgICAvLyBsb29rOiBldmVyeSBzZXJ2aWNlIHJlZnVzZXMgYSBzdGF0ZSBjaGFuZ2UgdW5kZXIgaXQsIG5vdCBvbmx5IHBsYXRmb3JtIOKAlFxuICAgIC8vIGEgc3VwcG9ydCBzZXNzaW9uIHRoYXQgY291bGQgd3JpdGUgdG8gcGx1Z2luL2NvbXBsaWFuY2UvYmlsbGluZyBpcyBub3RcbiAgICAvLyByZWFkLW9ubHkuIENoZWNrZWQgYmVmb3JlIGFueSBvdGhlciBnYXRlIHNvIG5vIHJvdXRlIGNhbiBmb3JnZXQgaXQuXG4gICAgaWYgKGlzSW1wZXJzb25hdGlvbldyaXRlQmxvY2tlZChyZXEubWV0aG9kLCBkZWNvZGVkKSkge1xuICAgICAgaWYgKHJlcS5tZXRob2QpIHJlY29yZEF1dGh6RGVuaWFsKHJlcSwgJ2ltcGVyc29uYXRpb24tcmVhZC1vbmx5Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnV3JpdGUgcmVxdWVzdHMgYXJlIGRpc2FibGVkIGR1cmluZyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbi4gU3RvcCBpbXBlcnNvbmF0aW5nIHRvIG1ha2UgY2hhbmdlcy4nLFxuICAgICAgICBFcnJvckNvZGUuSU1QRVJTT05BVElPTl9SRUFEX09OTFksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJPT1RTVFJBUC1BRE1JTiBFTlJPTE1FTlQgU0VTU0lPTi4gU3VjaCBhIHRva2VuIGV4aXN0cyBzb1xuICAgIC8vIHRoZSBpbnN0YWxsJ3Mgb25seSBhZG1pbiBjYW4gZW5yb2wgYSBmYWN0b3I7IGl0IGlzIGBhYWw6IDFgIGFuZCBtdXN0IG5vdFxuICAgIC8vIHJlYWNoIGFueXRoaW5nIGVsc2UuIFBsYXRmb3JtIOKAlCB3aGljaCBvd25zIHRoZSBleGNlcHRpb24gYW5kIGtub3dzIHdoaWNoXG4gICAgLy8gb2YgaXRzIG93biByb3V0ZXMgYGluaXQtcGxhdGZvcm0uc2hgIGNhbGxzIOKAlCBhbGxvd3MgYW4gZXhwbGljaXQgZmV3IGJlZm9yZVxuICAgIC8vIHRoaXMgcG9pbnQgKHNlZSBpdHMgb3duIGByZXF1aXJlQXV0aGApOyBpbiBFVkVSWSBvdGhlciBzZXJ2aWNlIHRoZSBhbnN3ZXJcbiAgICAvLyBpcyBzaW1wbHkgbm8sIHNvIHRoZSByZWFjaCByZXN0cmljdGlvbiBob2xkcyB3aXRob3V0IGEgcGVyLXNlcnZpY2VcbiAgICAvLyBhbGxvd2xpc3QgdG8ga2VlcCBpbiBzeW5jLlxuICAgIGlmIChkZWNvZGVkLm1mYUVucm9sbG1lbnRQZW5kaW5nID09PSB0cnVlKSB7XG4gICAgICBlbWl0Q291bnRlcignbWZhX2VuZm9yY2VtZW50X3JlZnVzZWRfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpLCByZWFzb246ICdib290c3RyYXBfc2Vzc2lvbicgfSk7XG4gICAgICByZWNvcmRBdXRoekRlbmlhbChyZXEsICdtZmEtZW5yb2xtZW50Jyk7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKFxuICAgICAgICByZXMsIEh0dHBTdGF0dXMuRk9SQklEREVOLFxuICAgICAgICAnRmluaXNoIHNldHRpbmcgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBiZWZvcmUgdXNpbmcgdGhlIHJlc3Qgb2YgUGlwZWxpbmUgQnVpbGRlcicsXG4gICAgICAgIEVycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2Vzc2lvbi1sZXZlbCBhc3N1cmFuY2UgKGByZXF1aXJlQXV0aCh7IG1pbkFzc3VyYW5jZSwgbWF4QWdlIH0pYCkuXG4gICAgaWYgKG9wdGlvbnMubWluQXNzdXJhbmNlXG4gICAgICAmJiByZWZ1c2VGb3JBc3N1cmFuY2UoeyBtaW5Bc3N1cmFuY2U6IG9wdGlvbnMubWluQXNzdXJhbmNlLCAuLi4ob3B0aW9ucy5tYXhBZ2UgIT09IHVuZGVmaW5lZCA/IHsgbWF4QWdlOiBvcHRpb25zLm1heEFnZSB9IDoge30pIH0sIGRlY29kZWQsIHJlcSwgcmVzKSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIHgtb3JnLWlkL3gtb3JnLW5hbWUgb3ZlcnJpZGUgbGV0cyBhIFNZUy1BRE1JTiBhY3Qgb24gYSBjaG9zZW4gb3JnXG4gICAgLy8gKGNyb3NzLW9yZyBhZG1pbiB0b29saW5nKS4gSXQgaXMgZ2F0ZWQgb24gdGhlIHZlcmlmaWVkIGBpc1N1cGVyQWRtaW5gIGNsYWltXG4gICAgLy8gaGVyZSBzbyB0aGF0IGV2ZW4gYSByb3V0ZSB3aGljaCBtaXN0YWtlbmx5IGVuYWJsZXMgYGFsbG93T3JnSGVhZGVyT3ZlcnJpZGVgXG4gICAgLy8gY2FuIE5FVkVSIGxldCBhbiBvcmRpbmFyeSBhdXRoZW50aWNhdGVkIHVzZXIgc3Bvb2YgYW5vdGhlciB0ZW5hbnQncyBvcmcgdmlhXG4gICAgLy8gdGhlIGhlYWRlciDigJQgZGVmZW5jZS1pbi1kZXB0aCBhZ2FpbnN0IHRoZSBjcm9zcy10ZW5hbnQgYnJlYWsgdGhpcyBjYXVzZWQuXG4gICAgaWYgKG9wdGlvbnMuYWxsb3dPcmdIZWFkZXJPdmVycmlkZSAmJiBkZWNvZGVkLmlzU3VwZXJBZG1pbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaGVhZGVyT3JnSWQgPSBnZXRIZWFkZXJTdHJpbmcocmVxLmhlYWRlcnNbJ3gtb3JnLWlkJ10pO1xuICAgICAgY29uc3QgaGVhZGVyT3JnTmFtZSA9IGdldEhlYWRlclN0cmluZyhyZXEuaGVhZGVyc1sneC1vcmctbmFtZSddKTtcbiAgICAgIGlmIChoZWFkZXJPcmdJZCkgcmVxLnVzZXIub3JnYW5pemF0aW9uSWQgPSBoZWFkZXJPcmdJZDtcbiAgICAgIGlmIChoZWFkZXJPcmdOYW1lKSByZXEudXNlci5vcmdhbml6YXRpb25OYW1lID0gaGVhZGVyT3JnTmFtZTtcbiAgICB9XG5cbiAgICAvLyBSZS1kZXJpdmUgdGhlIHJlcXVlc3QncyB0ZW5hbnQgaWRlbnRpdHkgZnJvbSB0aGUgTk9XLXZlcmlmaWVkIEpXVC5cbiAgICAvL1xuICAgIC8vIGBhdHRhY2hSZXF1ZXN0Q29udGV4dGAgcnVucyBhcyBhIGdsb2JhbCBtaWRkbGV3YXJlIEJFRk9SRSB0aGlzIHBlci1yb3V0ZVxuICAgIC8vIGByZXF1aXJlQXV0aGAsIHNvIGl0IGNhcHR1cmVkIGByZXEuY29udGV4dC5pZGVudGl0eWAgd2hpbGUgYHJlcS51c2VyYCB3YXNcbiAgICAvLyBzdGlsbCB1bmRlZmluZWQg4oCUIGF0IHdoaWNoIHBvaW50IGBnZXRJZGVudGl0eWAgZmFsbHMgYmFjayB0byB0aGUgcmF3LFxuICAgIC8vIGNsaWVudC1zZXR0YWJsZSBgeC1vcmctaWRgL2B4LXVzZXItaWRgIGhlYWRlcnMuIEV2ZXJ5IGRvd25zdHJlYW0gdGVuYW50LVxuICAgIC8vIGF1dGhvcml0eSBjb25zdW1lciAocmVxdWlyZU9yZ0lkLCB3aXRoVGVuYW50Q29udGV4dCdzIFJMUyBzY29wZSwgY2hlY2tRdW90YSxcbiAgICAvLyB3aXRoUm91dGUsIGFuZCB0aGUgaWRlbXBvdGVuY3kgbmFtZXNwYWNlKSByZWFkcyBgcmVxLmNvbnRleHQuaWRlbnRpdHlgLCBzb1xuICAgIC8vIHRoYXQgZnJvemVuIGhlYWRlci1kZXJpdmVkIHZhbHVlIOKAlCBub3QgdGhlIEpXVCDigJQgd2FzIGdvdmVybmluZyB0ZW5hbmN5IG9uXG4gICAgLy8gYW55IG5vbi1uZ2lueCBwYXRoLiBSZWNvbXB1dGluZyBoZXJlLCBhdCB0aGUgc2luZ2xlIHBvc3QtdmVyaWZpY2F0aW9uIGNob2tlXG4gICAgLy8gcG9pbnQsIG1ha2VzIGBnZXRJZGVudGl0eWAgcHJlZmVyIHRoZSB2ZXJpZmllZCBgcmVxLnVzZXJgIChzZWUgaWRlbnRpdHkudHMpXG4gICAgLy8gc28gdGVuYW5jeSBpcyBKV1QtYXV0aG9yaXRhdGl2ZS4gVGhlIG5naW54IGB4LW9yZy1pZGAgb3ZlcndyaXRlIHN0YXlzIGFzXG4gICAgLy8gZGVmZW5jZS1pbi1kZXB0aC4gR3VhcmRlZCBvbiBgcmVxLmNvbnRleHRgIHNvIHNlcnZpY2VzL3BhdGhzIHRoYXQgbmV2ZXJcbiAgICAvLyBhdHRhY2ggYSBjb250ZXh0IChvciBydW4gcmVxdWlyZUF1dGggcHJlLWNvbnRleHQpIGFyZSB1bmFmZmVjdGVkLlxuICAgIGNvbnN0IHJlcUN0eCA9IChyZXEgYXMgUmVxdWVzdCAmIHsgY29udGV4dD86IHsgaWRlbnRpdHk6IFJlcXVlc3RJZGVudGl0eSB9IH0pLmNvbnRleHQ7XG4gICAgaWYgKHJlcUN0eCkge1xuICAgICAgcmVxQ3R4LmlkZW50aXR5ID0gZ2V0SWRlbnRpdHkocmVxIGFzIHVua25vd24gYXMgSHR0cFJlcXVlc3QpO1xuICAgIH1cblxuICAgIC8vIFNlc3Npb24gaW52YWxpZGF0aW9uICh0b2tlbi12ZXJzaW9uIHN0b3JlICsgaW1wZXJzb25hdGlvbi1zZXNzaW9uXG4gICAgLy8gbGl2ZW5lc3MpLiBObyBzdG9yZSByZWdpc3RlcmVkIOKHkiBvbmx5IGltcGVyc29uYXRpb24gc2Vzc2lvbnMgYXJlIGNoZWNrZWQuXG4gICAgaWYgKG5lZWRzUmV2b2NhdGlvbkNoZWNrKGRlY29kZWQpKSB7XG4gICAgICAvLyBgLmNhdGNoKG5leHQpYCBmb3J3YXJkcyBhIERPV05TVFJFQU0gc3luY2hyb25vdXMgdGhyb3cgZnJvbSBgbmV4dCgpYCB0b1xuICAgICAgLy8gRXhwcmVzcydzIGVycm9yIG1pZGRsZXdhcmUg4oCUIHRoaXMgYG5leHQoKWAgcnVucyBpbiBhIG1pY3JvdGFzaywgb3V0c2lkZVxuICAgICAgLy8gdGhlIHN1cnJvdW5kaW5nIHRyeS9jYXRjaC4gVGhlIGNoZWNrIGl0c2VsZiBuZXZlciByZWplY3RzLlxuICAgICAgY2hlY2tSZXZvY2F0aW9uKGRlY29kZWQpLnRoZW4oKHJlZnVzYWwpID0+IHtcbiAgICAgICAgaWYgKHJlZnVzYWwpIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgcmVmdXNhbCwgRXJyb3JDb2RlLlRPS0VOX1JFVk9LRUQpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9KS5jYXRjaChuZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2Ygand0LlRva2VuRXhwaXJlZEVycm9yKSB7XG4gICAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdUb2tlbiBoYXMgZXhwaXJlZCcsIEVycm9yQ29kZS5UT0tFTl9FWFBJUkVEKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgc2lnbmluZyBrZXlzIGNvdWxkbid0IGJlIGZldGNoZWQsIHNvIHRoZSB0b2tlbidzIHZhbGlkaXR5IGlzIFVOS05PV04uXG4gICAgLy8gRmFpbCBDTE9TRUQgd2l0aCBhIHJldHJ5YWJsZSA1MDMg4oCUIG5ldmVyIGEgcGFzcywgYW5kIG5ldmVyIGEgNDAxIHRoYXRcbiAgICAvLyB3b3VsZCBzZW5kIGEgbGVnaXRpbWF0ZSBjbGllbnQgb2ZmIHRvIHJlLWF1dGhlbnRpY2F0ZSBvdmVyIG91ciBvdXRhZ2UuXG4gICAgLy8gU2FtZSByZWFzb25pbmcgZm9yIHRoZSBTRVJWSUNFIGNoYWluOiBubyByZWFkYWJsZSBrZXkgYnVuZGxlIG1lYW5zIG5vIHdheVxuICAgIC8vIHRvIHRlbGwgYSBwZWVyJ3MgdG9rZW4gZnJvbSBhIGZvcmdlcnksIHNvIHRoZSByZXF1ZXN0IGlzIHJlZnVzZWQgd2l0aCBhXG4gICAgLy8gcmV0cnlhYmxlIDUwMyByYXRoZXIgdGhhbiBhZG1pdHRlZCBvciBib3VuY2VkIHRvIHJlLWF1dGhlbnRpY2F0ZS5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBKd2tzVW5hdmFpbGFibGVFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1JlamVjdGluZyByZXF1ZXN0OiB0b2tlbiBzaWduaW5nIGtleXMgdW5hdmFpbGFibGUnLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIHNlbmRFcnJvcihcbiAgICAgICAgcmVzLCBIdHRwU3RhdHVzLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gICAgICAgICdUb2tlbiB2ZXJpZmljYXRpb24gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU7IHBsZWFzZSByZXRyeScsXG4gICAgICAgIEVycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBVbmtub3duS2lkRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBqd3QuSnNvbldlYlRva2VuRXJyb3IpIHtcbiAgICAgIHJldHVybiBzZW5kRXJyb3IocmVzLCBIdHRwU3RhdHVzLlVOQVVUSE9SSVpFRCwgJ0ludmFsaWQgdG9rZW4nLCBFcnJvckNvZGUuVE9LRU5fSU5WQUxJRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIEh0dHBTdGF0dXMuVU5BVVRIT1JJWkVELCAnQXV0aGVudGljYXRpb24gZmFpbGVkJywgRXJyb3JDb2RlLlVOQVVUSE9SSVpFRCk7XG4gIH1cbn1cblxuIl19
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { isSystemOrgId } from './system-org.js';
|
|
4
|
-
import { recordAuthzDenial, requirePermission } from './permission-gates.js';
|
|
5
3
|
import { requireAssurance } from './assurance.js';
|
|
4
|
+
import { recordAuthzDenial, requirePermission } from './permission-gates.js';
|
|
6
5
|
import { tagRouteGate } from './route-table.js';
|
|
6
|
+
import { isSystemOrgId } from './system-org.js';
|
|
7
7
|
import { HttpStatus } from '../constants/http-status.js';
|
|
8
8
|
import { ErrorCode } from '../types/error-codes.js';
|
|
9
9
|
import { isSystemOrgOnlyPermission } from '../types/permissions.js';
|
|
@@ -57,4 +57,4 @@ export function requireEcosystemPermission(...permissions) {
|
|
|
57
57
|
requireAssurance({ minAssurance: 2 }),
|
|
58
58
|
];
|
|
59
59
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLWd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvZWNvc3lzdGVtLWd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF3QnRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUseUJBQXlCLEVBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRDsrRUFDK0U7QUFDL0UsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVk7SUFDN0MsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFZLEVBQUUsR0FBYSxFQUFFLElBQWtCO0lBQ3BILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUNELElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUMzQyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNsRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckMsT0FBTyxTQUFTLENBQ2QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQ3pCLG1HQUFtRyxFQUNuRyxTQUFTLENBQUMsbUJBQW1CLENBQzlCLENBQUM7QUFDSixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUUxQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEdBQUcsV0FBeUI7SUFDckUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDMUcsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBQ0QsT0FBTztRQUNMLGdCQUFnQjtRQUNoQixpQkFBaUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNqQyxnQkFBZ0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUNsQixDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGx1Z2luLWVjb3N5c3RlbSBnb3Zlcm5hbmNlIGdhdGUgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLlxuICpcbiAqIE9ubHkgdGhlIHN5c3RlbSBvcmcgbWFuYWdlcyBvciBhcHByb3ZlcyB0aGUgZWNvc3lzdGVtLiBBIHJvdXRlIHRoYXQgZXhlcmNpc2VzXG4gKiBhIHN5c3RlbS1vcmctb25seSBwZXJtaXNzaW9uIChgcGx1Z2luczptb2RlcmF0ZWAsIGBwdWJsaXNoZXJzOnZlcmlmeWApIG11c3RcbiAqIHRoZXJlZm9yZSBjaGVjayB0aHJlZSB0aGluZ3MsIGFuZCB7QGxpbmsgcmVxdWlyZUVjb3N5c3RlbVBlcm1pc3Npb259IGNvbXBvc2VzXG4gKiB0aGVtIHNvIG5vIHJvdXRlIGNhbiBmb3JnZXQgb25lOlxuICpcbiAqICAxLiB7QGxpbmsgcmVxdWlyZVN5c3RlbU9yZ30g4oCUIHRoZSBjYWxsZXIncyBBQ1RJVkUgb3JnIGlzIHRoZSBzeXN0ZW0gb3JnLiBBXG4gKiAgICAgdG9rZW4gbWludGVkIGluIGEgdGVuYW50IG9yZyBpcyByZWZ1c2VkIGV2ZW4gZm9yIHRoZSBzYW1lIHBlcnNvbiAoYW5kIGV2ZW5cbiAqICAgICBmb3IgYSBzdXBlcmFkbWluOiB0aGV5IHN3aXRjaCB0byB0aGUgc3lzdGVtIG9yZyB0byBhY3Qgb24gdGhlIGVjb3N5c3RlbSxcbiAqICAgICBzbyBldmVyeSBnb3Zlcm5hbmNlIGRlY2lzaW9uIGlzIHJlY29yZGVkIHdpdGggdGhlIHN5c3RlbSBvcmcncyBpZCkuXG4gKiAgMi4gdGhlIHBlcm1pc3Npb24gaXRzZWxmIChgcmVxdWlyZVBlcm1pc3Npb25gLCBhbnktb2YpO1xuICogIDMuIGFuIE1GQS1ncmFkZSBzZXNzaW9uIChgcmVxdWlyZUFzc3VyYW5jZSh7IG1pbkFzc3VyYW5jZTogMiB9KWApLCB3aGljaCBhbHNvXG4gKiAgICAgcmVmdXNlcyBldmVyeSBtYWNoaW5lIGNyZWRlbnRpYWwuXG4gKlxuICogVGhlIHJvdXRlLWNvdmVyYWdlIGdvdmVybmFuY2UgY2hlY2sgKGBmaW5kU3lzdGVtT3JnR3VhcmRWaW9sYXRpb25zYCBpblxuICogYHRlc3Rpbmcvcm91dGUtY292ZXJhZ2UudHNgKSBmYWlscyBhbnkgcm91dGUgdGhhdCBnYXRlcyBvbiBhIHN5c3RlbS1vcmctb25seVxuICogcGVybWlzc2lvbiB3aXRob3V0IDEgYW5kIDMsIHNvIGEgaGFuZC1yb2xsZWQgY2hhaW4gY2Fubm90IHNsaXAgdGhyb3VnaC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE5leHRGdW5jdGlvbiwgUmVxdWVzdCwgUmVxdWVzdEhhbmRsZXIsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyByZXF1aXJlQXNzdXJhbmNlIH0gZnJvbSAnLi9hc3N1cmFuY2UuanMnO1xuaW1wb3J0IHsgcmVjb3JkQXV0aHpEZW5pYWwsIHJlcXVpcmVQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uLWdhdGVzLmpzJztcbmltcG9ydCB7IHRhZ1JvdXRlR2F0ZSB9IGZyb20gJy4vcm91dGUtdGFibGUuanMnO1xuaW1wb3J0IHsgaXNTeXN0ZW1PcmdJZCB9IGZyb20gJy4vc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IGlzU3lzdGVtT3JnT25seVBlcm1pc3Npb24sIHR5cGUgUGVybWlzc2lvbiB9IGZyb20gJy4uL3R5cGVzL3Blcm1pc3Npb25zLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG4vKiogV2hldGhlciB0aGUgcmVxdWVzdCdzIEFDVElWRSBvcmcgKHRoZSB0b2tlbidzIGBvcmdhbml6YXRpb25JZGApIGlzIHRoZSBzeXN0ZW1cbiAqICBvcmcuIENvbXBhcmVkIGJ5IGlkIG9ubHkg4oCUIGFuIG9yZyBtZXJlbHkgTkFNRUQgXCJzeXN0ZW1cIiBuZXZlciBxdWFsaWZpZXMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTeXN0ZW1PcmdSZXF1ZXN0KHJlcTogUmVxdWVzdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTeXN0ZW1PcmdJZChyZXEudXNlcj8ub3JnYW5pemF0aW9uSWQpO1xufVxuXG4vKipcbiAqIFJlcXVpcmUgdGhhdCB0aGUgY2FsbGVyJ3MgYWN0aXZlIG9yZyBpcyB0aGUgc3lzdGVtIG9yZy4gQ29tcG9zZSBhZnRlclxuICogYHJlcXVpcmVBdXRoYC4gUmVmdXNhbHMgYXJlIDQwMyBgU1lTVEVNX09SR19SRVFVSVJFRGAsIGNvdW50ZWRcbiAqIChgc3lzdGVtX29yZ19ndWFyZF9yZWZ1c2VkX3RvdGFsYCkgYW5kIGF1ZGl0ZWQgdGhyb3VnaCB0aGUgc2hhcmVkXG4gKiBgYXV0aHouZGVuaWVkYCBzaW5rIChgcmVxdWlyZWQ6ICdzeXN0ZW0tb3JnJ2ApLlxuICovXG5leHBvcnQgY29uc3QgcmVxdWlyZVN5c3RlbU9yZyA9IHRhZ1JvdXRlR2F0ZShmdW5jdGlvbiByZXF1aXJlU3lzdGVtT3JnKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSwgbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCB7XG4gIGlmICghcmVxLnVzZXIpIHtcbiAgICByZXR1cm4gc2VuZEVycm9yKHJlcywgSHR0cFN0YXR1cy5VTkFVVEhPUklaRUQsICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCcsIEVycm9yQ29kZS5VTkFVVEhPUklaRUQpO1xuICB9XG4gIGlmIChpc1N5c3RlbU9yZ1JlcXVlc3QocmVxKSkgcmV0dXJuIG5leHQoKTtcbiAgZW1pdENvdW50ZXIoJ3N5c3RlbV9vcmdfZ3VhcmRfcmVmdXNlZF90b3RhbCcsIHsgcHJpbmNpcGFsOiByZXEudXNlci5wcmluY2lwYWxUeXBlID8/ICd1bmtub3duJyB9KTtcbiAgcmVjb3JkQXV0aHpEZW5pYWwocmVxLCAnc3lzdGVtLW9yZycpO1xuICByZXR1cm4gc2VuZEVycm9yKFxuICAgIHJlcywgSHR0cFN0YXR1cy5GT1JCSURERU4sXG4gICAgJ1RoaXMgYWN0aW9uIGlzIHJlc2VydmVkIGZvciB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiDigJQgc3dpdGNoIHRvIGl0IHRvIG1hbmFnZSB0aGUgcGx1Z2luIGVjb3N5c3RlbScsXG4gICAgRXJyb3JDb2RlLlNZU1RFTV9PUkdfUkVRVUlSRUQsXG4gICk7XG59LCB7IGtpbmQ6ICdzeXN0ZW1PcmcnIH0pO1xuXG4vKipcbiAqIFRIRSBnYXRlIGZvciBhbiBlY29zeXN0ZW0tZ292ZXJuYW5jZSByb3V0ZTogc3lzdGVtIG9yZyArIChhbnkgb2YpIHRoZSBnaXZlblxuICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24ocykgKyBhbiBNRkEtZ3JhZGUgaHVtYW4gc2Vzc2lvbi4gUmV0dXJucyB0aGUgY2hhaW5cbiAqIGFzIGFuIGFycmF5LCB3aGljaCBFeHByZXNzIGZsYXR0ZW5zOlxuICpcbiAqIGBgYHRzXG4gKiByb3V0ZXIucG9zdCgnL3JlcXVlc3RzLzppZC9hcHByb3ZlJywgcmVxdWlyZUF1dGgsIHJlcXVpcmVFY29zeXN0ZW1QZXJtaXNzaW9uKCdwbHVnaW5zOm1vZGVyYXRlJyksXG4gKiAgIHJlcXVpcmVTdGVwVXAsIGF1ZGl0ZWQoJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnKSwgaGFuZGxlcik7XG4gKiBgYGBcbiAqXG4gKiBUaHJvd3MgYXQgcm91dGUtZGVmaW5pdGlvbiB0aW1lIHdoZW4gaGFuZGVkIGEgcGVybWlzc2lvbiB0aGF0IGlzIE5PVFxuICogc3lzdGVtLW9yZy1vbmx5IOKAlCBhIHRlbmFudCBwZXJtaXNzaW9uIGJlaGluZCB0aGlzIGdhdGUgd291bGQgYmUgdW5yZWFjaGFibGVcbiAqIGZvciBldmVyeSB0ZW5hbnQsIHdoaWNoIGlzIGFsd2F5cyBhIHdpcmluZyBtaXN0YWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUVjb3N5c3RlbVBlcm1pc3Npb24oLi4ucGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXSk6IFJlcXVlc3RIYW5kbGVyW10ge1xuICBpZiAocGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVFY29zeXN0ZW1QZXJtaXNzaW9uIG5lZWRzIGF0IGxlYXN0IG9uZSBwZXJtaXNzaW9uJyk7XG4gIGNvbnN0IHRlbmFudCA9IHBlcm1pc3Npb25zLmZpbHRlcigocCkgPT4gIWlzU3lzdGVtT3JnT25seVBlcm1pc3Npb24ocCkpO1xuICBpZiAodGVuYW50Lmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVpcmVFY29zeXN0ZW1QZXJtaXNzaW9uIG9ubHkgdGFrZXMgc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb25zOyBnb3QgJHt0ZW5hbnQuam9pbignLCAnKX1gKTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHJlcXVpcmVTeXN0ZW1PcmcsXG4gICAgcmVxdWlyZVBlcm1pc3Npb24oLi4ucGVybWlzc2lvbnMpLFxuICAgIHJlcXVpcmVBc3N1cmFuY2UoeyBtaW5Bc3N1cmFuY2U6IDIgfSksXG4gIF0gYXMgUmVxdWVzdEhhbmRsZXJbXTtcbn1cbiJdfQ==
|