@pipeline-builder/api-core 4.1.7 → 4.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/lib/helpers/org-hierarchy.d.ts +19 -0
- package/lib/helpers/org-hierarchy.js +29 -1
- package/lib/index.d.ts +26 -0
- package/lib/index.js +27 -1
- package/lib/services/api-key-exchange.js +3 -2
- package/lib/services/audit-spool.js +3 -2
- package/lib/services/cache-service.js +5 -4
- package/lib/services/compliance-event-subscriber.js +3 -2
- package/lib/services/durable-event-bus.js +3 -2
- package/lib/services/entity-events.js +3 -2
- package/lib/services/env-redis.js +3 -2
- package/lib/services/http-client.js +8 -7
- package/lib/services/index.d.ts +6 -2
- package/lib/services/index.js +11 -3
- package/lib/services/jwks-cache.d.ts +0 -12
- package/lib/services/jwks-cache.js +7 -6
- package/lib/services/leader-lock.js +3 -2
- package/lib/services/notification-channels.d.ts +112 -0
- package/lib/services/notification-channels.js +123 -0
- package/lib/services/quota.js +4 -4
- package/lib/services/remote-audit-client.d.ts +1 -1
- package/lib/services/remote-audit-client.js +4 -4
- package/lib/services/retry-forever.d.ts +37 -0
- package/lib/services/retry-forever.js +58 -0
- package/lib/services/retry-strategy.d.ts +7 -3
- package/lib/services/retry-strategy.js +2 -2
- package/lib/services/scheduler.js +2 -2
- package/lib/services/service-boot.d.ts +20 -4
- package/lib/services/service-boot.js +10 -6
- package/lib/services/service-keys.js +6 -5
- package/lib/services/sse-ticket-store.js +3 -2
- package/lib/services/token-revocation.js +6 -5
- package/lib/testing/mock-api-core.d.ts +150 -0
- package/lib/testing/mock-api-core.js +246 -0
- package/lib/testing/mock-drizzle.d.ts +6 -0
- package/lib/testing/mock-drizzle.js +57 -0
- package/lib/types/http.d.ts +4 -0
- package/lib/types/http.js +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +2 -1
- package/lib/types/metadata-keys.d.ts +543 -0
- package/lib/types/metadata-keys.js +117 -0
- package/lib/types/permissions.d.ts +19 -0
- package/lib/types/permissions.js +33 -1
- package/lib/types/quota-tiers.js +21 -31
- package/lib/utils/api-key.d.ts +0 -9
- package/lib/utils/api-key.js +2 -13
- package/lib/utils/audit.js +3 -2
- package/lib/utils/env.d.ts +6 -2
- package/lib/utils/env.js +9 -4
- package/lib/utils/identity.d.ts +37 -1
- package/lib/utils/identity.js +62 -10
- package/lib/utils/index.d.ts +2 -1
- package/lib/utils/index.js +7 -2
- package/lib/utils/params.d.ts +35 -0
- package/lib/utils/params.js +24 -1
- package/lib/utils/secret-encryption.d.ts +4 -4
- package/lib/utils/secret-encryption.js +5 -5
- package/lib/utils/ssrf.d.ts +73 -14
- package/lib/utils/ssrf.js +138 -21
- package/package.json +26 -1
package/README.md
CHANGED
|
@@ -36,6 +36,8 @@ Provides the cross-cutting primitives every backend service depends on: JWT auth
|
|
|
36
36
|
| --- | --- |
|
|
37
37
|
| `getParam`, `getRequiredParam`, `getParams`, `getOrgId`, `getAuthHeader` | Request parameter/header extraction |
|
|
38
38
|
| `parseQueryBoolean`, `parseQueryInt`, `parseQueryString` | Query-string coercion |
|
|
39
|
+
| `parsePage` | **The** pagination primitive — parses and clamps `?limit=&offset=` against a per-route `{ def, max }` (and an optional `maxOffset`). Use it instead of a hand-rolled `Math.min(Math.max(...))`; route defaults stay per-route but are declared, not re-derived |
|
|
40
|
+
| `envInt`, `envBool`, `envStr` | **The** env readers. Strict (a non-integer `envInt` falls back to the default rather than silently truncating), and every variable read through them must appear in `docs/environment-variables.md` — enforced by `test/env-documented.test.ts` |
|
|
39
41
|
| `getIdentity`, `validateIdentity` | Parsed JWT identity (`RequestIdentity`) helpers |
|
|
40
42
|
|
|
41
43
|
### HTTP client & services (`./services`)
|
|
@@ -45,6 +47,12 @@ Provides the cross-cutting primitives every backend service depends on: JWT auth
|
|
|
45
47
|
| `createComplianceClient` / `ComplianceClient` | Typed compliance-service client built on the safe client |
|
|
46
48
|
| `QuotaService`, `createQuotaService`, `QuotaType`, `QuotaCheckResult`, `QuotaTier`, `QUOTA_TIERS`, `getTierLimits` | Quota enforcement client and tier presets |
|
|
47
49
|
| `CacheService`, `createCacheService` | In-memory LRU TTL cache with cross-replica invalidation over Redis pub/sub |
|
|
50
|
+
| `safeFetch`, `resolveSafeTarget`, `assertSafeUrl`, `isPrivateAddress` | SSRF guards for user/tenant-supplied URLs. **`safeFetch` is the one to use for an outbound request**: it resolves the host, PINS the vetted IP into the socket (no DNS-rebinding window between check and connect), refuses redirects, and caps body size and wall-clock time. `assertSafeUrl` is VALIDATION ONLY — for rejecting a URL at create/update time; never pair it with a `fetch` |
|
|
51
|
+
| `createWebhookChannel`, `createEmailChannel`, `createChannelRegistry`, `NotificationChannel`, `NotificationMessage`, `ChannelTarget`, `DeliveryResult` | Shared notification-channel contract plus the webhook (SSRF-safe, HMAC-signing) and email transports. Services supply only their own `in-app` transport |
|
|
52
|
+
| `wireServiceSecurity` | One call for every stateless service's boot security: the `authz.denied` audit sink, the token-revocation reader (overridable), and the access-key-exchange service name |
|
|
53
|
+
| `createRemoteAuditAccessor` | Returns both audit shapes a service needs — `getAuditClient` (for `wireServiceSecurity`) and `emit` (the terse per-service emitter) |
|
|
54
|
+
| `getRetryDecision`, `getErrorRetryDecision`, `RetryConfig` | The single retry/backoff decision function (Retry-After aware, jittered) and the single `RetryConfig`. pipeline-data's `ConnectionRetryStrategy` is built on it |
|
|
55
|
+
| `createOrgIdCaster` | Builds the Mongo org-id cast (24-hex → ObjectId, anything else through) from a supplied `Types.ObjectId`, so platform and quota share one implementation without api-core depending on mongoose |
|
|
48
56
|
| `entityEvents` | Process-local domain event pub/sub for entity changes |
|
|
49
57
|
|
|
50
58
|
### Logging, validation & OpenAPI
|
|
@@ -25,6 +25,25 @@ export type GetParentOrgId = (orgId: string) => Promise<string | undefined>;
|
|
|
25
25
|
export type GetChildOrgIds = (frontier: string[]) => Promise<string[]>;
|
|
26
26
|
/** Normalize a Mixed/ObjectId/string org id to a non-empty string, or undefined. */
|
|
27
27
|
export declare function toOrgIdString(v: unknown): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Build the org-id cast the Mongo-backed services use on every `_id` lookup.
|
|
30
|
+
*
|
|
31
|
+
* Platform writes ObjectId `_id`s into the shared `organizations` collection,
|
|
32
|
+
* while the well-known `'system'` org (and `parentOrgId`, still a String column)
|
|
33
|
+
* are plain strings — so a 24-hex id arriving from a route param / JWT claim /
|
|
34
|
+
* cross-service payload must be cast or `findById('<24hex>')` never matches.
|
|
35
|
+
*
|
|
36
|
+
* Platform and quota each had their OWN `toOrgId` with a different signature
|
|
37
|
+
* (`string | string[]` vs `string`), which is exactly the drift this removes:
|
|
38
|
+
* the logic and the signature live here once, and each service supplies only
|
|
39
|
+
* its mongoose `Types.ObjectId` constructor. api-core cannot import mongoose
|
|
40
|
+
* itself (it is not — and should not become — an api-core dependency), so the
|
|
41
|
+
* constructor is injected rather than imported.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* export const toOrgId = createOrgIdCaster(mongoose.Types.ObjectId);
|
|
45
|
+
*/
|
|
46
|
+
export declare function createOrgIdCaster<T>(ObjectIdCtor: new (hex: string) => T): (id: string | string[]) => string | T;
|
|
28
47
|
export interface OrgLineage {
|
|
29
48
|
/** The org's direct parent id, or `undefined` when it's a root org. */
|
|
30
49
|
parentOrgId?: string;
|
|
@@ -28,6 +28,34 @@ export function toOrgIdString(v) {
|
|
|
28
28
|
const s = String(v);
|
|
29
29
|
return s && s !== 'null' && s !== 'undefined' ? s : undefined;
|
|
30
30
|
}
|
|
31
|
+
/** True when `id` is a 24-character hex string — i.e. castable to an ObjectId. */
|
|
32
|
+
function isObjectIdHex(id) {
|
|
33
|
+
return id.length === 24 && /^[0-9a-fA-F]{24}$/.test(id);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the org-id cast the Mongo-backed services use on every `_id` lookup.
|
|
37
|
+
*
|
|
38
|
+
* Platform writes ObjectId `_id`s into the shared `organizations` collection,
|
|
39
|
+
* while the well-known `'system'` org (and `parentOrgId`, still a String column)
|
|
40
|
+
* are plain strings — so a 24-hex id arriving from a route param / JWT claim /
|
|
41
|
+
* cross-service payload must be cast or `findById('<24hex>')` never matches.
|
|
42
|
+
*
|
|
43
|
+
* Platform and quota each had their OWN `toOrgId` with a different signature
|
|
44
|
+
* (`string | string[]` vs `string`), which is exactly the drift this removes:
|
|
45
|
+
* the logic and the signature live here once, and each service supplies only
|
|
46
|
+
* its mongoose `Types.ObjectId` constructor. api-core cannot import mongoose
|
|
47
|
+
* itself (it is not — and should not become — an api-core dependency), so the
|
|
48
|
+
* constructor is injected rather than imported.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* export const toOrgId = createOrgIdCaster(mongoose.Types.ObjectId);
|
|
52
|
+
*/
|
|
53
|
+
export function createOrgIdCaster(ObjectIdCtor) {
|
|
54
|
+
return (id) => {
|
|
55
|
+
const idStr = Array.isArray(id) ? id[0] : id;
|
|
56
|
+
return isObjectIdHex(idStr) ? new ObjectIdCtor(idStr) : idStr;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
31
59
|
/**
|
|
32
60
|
* Walk `parentOrgId` from `orgId` up to the root. Returns the direct parent (if
|
|
33
61
|
* any) and the root org id (the input itself when the org has no parent). On a
|
|
@@ -107,4 +135,4 @@ export async function expandOrgScopeWith(orgId, getChildren) {
|
|
|
107
135
|
}
|
|
108
136
|
return result;
|
|
109
137
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL29yZy1oaWVyYXJjaHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFRaEMsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBVTtJQUN0QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoRSxDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxTQUF5QjtJQUNsRixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLElBQUksV0FBK0IsQ0FBQztJQUVwQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLENBQUMsd0JBQXdCO1FBQzVDLDBFQUEwRTtRQUMxRSw0Q0FBNEM7UUFDNUMs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QUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IHRyYXZlcnNhbCAob3JnLXRlYW0taGllcmFyY2h5IHByb3Bvc2FsKS5cbiAqXG4gKiBBIFwidGVhbVwiIGlzIGFuIG9yZ2FuaXphdGlvbiB3aG9zZSBgcGFyZW50T3JnSWRgIHBvaW50cyBhdCBhbm90aGVyIG9yZzsgYSByb290XG4gKiBvcmcgaGFzIGBwYXJlbnRPcmdJZCA9IG51bGxgLiBUaGVzZSBoZWxwZXJzIHdhbGsgdGhhdCBzaW5nbGUgc2VsZi1yZWZlcmVudGlhbFxuICogY29sdW1uLCBidXQgaG9sZCAqKm5vIGRhdGFiYXNlIGRlcGVuZGVuY3kqKiBvZiB0aGVpciBvd246IGVhY2ggdGFrZXMgYSBxdWVyeVxuICogY2FsbGJhY2sgc28gZXZlcnkgc2VydmljZSAocGxhdGZvcm0sIHF1b3RhLCDigKYpIGNhbiBzaGFyZSB0aGUgY3ljbGUtc2FmZSxcbiAqIGRlcHRoLWNhcHBlZCB0cmF2ZXJzYWwgbG9naWMgd2hpbGUgcmVhZGluZyBpdHMgb3duIE1vbmdvb3NlIG1vZGVsIHdpdGggaXRzIG93blxuICogYF9pZGAgY2FzdGluZyBydWxlcy5cbiAqXG4gKiAgIC0ge0BsaW5rIHJlc29sdmVPcmdMaW5lYWdlV2l0aH0g4oCUIFVQOiBkaXJlY3QgcGFyZW50ICsgcm9vdCBvZiB0aGUgY2hhaW4uXG4gKiAgIC0ge0BsaW5rIHJlc29sdmVSb290T3JnSWRXaXRofSAgIOKAlCBVUDoganVzdCB0aGUgcm9vdCBpZC5cbiAqICAgLSB7QGxpbmsgaXNBbmNlc3Rvck9yZ1dpdGh9ICAgICAg4oCUIFVQOiBpcyBBIGFuIGFuY2VzdG9yIG9mIEI/XG4gKiAgIC0ge0BsaW5rIGV4cGFuZE9yZ1Njb3BlV2l0aH0gICAgIOKAlCBET1dOOiBzZWxmICsgYWxsIGRlc2NlbmRhbnQgb3JnIGlkcy5cbiAqXG4gKiBFdmVyeSBvcmcgaXMgZmxhdCB0b2RheSAoYHBhcmVudE9yZ0lkYCBudWxsIG9uIGFsbCByb3dzKSwgc28gbGluZWFnZSByZXNvbHZlc1xuICogdG8gYHsgcm9vdE9yZ0lkOiBzZWxmIH1gIGFuZCBzY29wZSB0byBgW3NlbGZdYCDigJQgaS5lLiB0aGVzZSBhcmUgbm8tb3BzIHVudGlsXG4gKiBvcmdzIGdldCBwYXJlbnRzLlxuICovXG5cbi8qKiBIYXJkIGNlaWxpbmcgb24gYW5jZXN0cnkvZGVzY2VuZGFudCB0cmF2ZXJzYWwg4oCUIGN5Y2xlICsgYWJ1c2UgZ3VhcmQuICovXG5leHBvcnQgY29uc3QgTUFYX09SR19ERVBUSCA9IDE2O1xuXG4vKiogRmV0Y2ggYW4gb3JnJ3MgZGlyZWN0IGBwYXJlbnRPcmdJZGAsIG9yIHVuZGVmaW5lZCBmb3IgYSByb290L21pc3Npbmcgb3JnLiAqL1xuZXhwb3J0IHR5cGUgR2V0UGFyZW50T3JnSWQgPSAob3JnSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4vKiogRmV0Y2ggdGhlIGRpcmVjdCBjaGlsZCBvcmcgaWRzIG9mIGV2ZXJ5IG9yZyBpbiBgZnJvbnRpZXJgIChvbmUgcm91bmQgb2YgQkZTKS4gKi9cbmV4cG9ydCB0eXBlIEdldENoaWxkT3JnSWRzID0gKGZyb250aWVyOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxzdHJpbmdbXT47XG5cbi8qKiBOb3JtYWxpemUgYSBNaXhlZC9PYmplY3RJZC9zdHJpbmcgb3JnIGlkIHRvIGEgbm9uLWVtcHR5IHN0cmluZywgb3IgdW5kZWZpbmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvT3JnSWRTdHJpbmcodjogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcyA9IFN0cmluZyh2KTtcbiAgcmV0dXJuIHMgJiYgcyAhPT0gJ251bGwnICYmIHMgIT09ICd1bmRlZmluZWQnID8gcyA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdMaW5lYWdlIHtcbiAgLyoqIFRoZSBvcmcncyBkaXJlY3QgcGFyZW50IGlkLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0J3MgYSByb290IG9yZy4gKi9cbiAgcGFyZW50T3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBUb3Agb2YgdGhlIGFuY2VzdHJ5IGNoYWluLiBFcXVhbHMgdGhlIGlucHV0IGBvcmdJZGAgZm9yIGEgcm9vdCBvcmcuICovXG4gIHJvb3RPcmdJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdhbGsgYHBhcmVudE9yZ0lkYCBmcm9tIGBvcmdJZGAgdXAgdG8gdGhlIHJvb3QuIFJldHVybnMgdGhlIGRpcmVjdCBwYXJlbnQgKGlmXG4gKiBhbnkpIGFuZCB0aGUgcm9vdCBvcmcgaWQgKHRoZSBpbnB1dCBpdHNlbGYgd2hlbiB0aGUgb3JnIGhhcyBubyBwYXJlbnQpLiBPbiBhXG4gKiBkZXRlY3RlZCBjeWNsZSwgYSBtaXNzaW5nIG9yZywgb3IgdGhlIGRlcHRoIGNhcCwgdHJhdmVyc2FsIHN0b3BzIGFuZCB0aGUgbGFzdFxuICogcmVhY2hlZCBpZCBpcyB0cmVhdGVkIGFzIHRoZSByb290LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9yZ0xpbmVhZ2VXaXRoKG9yZ0lkOiBzdHJpbmcsIGdldFBhcmVudDogR2V0UGFyZW50T3JnSWQpOiBQcm9taXNlPE9yZ0xpbmVhZ2U+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPihbb3JnSWRdKTtcbiAgbGV0IGN1cnJlbnRJZCA9IG9yZ0lkO1xuICBsZXQgcGFyZW50T3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgTUFYX09SR19ERVBUSDsgZGVwdGgrKykge1xuICAgIGNvbnN0IHBhcmVudCA9IHRvT3JnSWRTdHJpbmcoYXdhaXQgZ2V0UGFyZW50KGN1cnJlbnRJZCkpO1xuICAgIGlmICghcGFyZW50KSBicmVhazsgLy8gY3VycmVudElkIGlzIHRoZSByb290XG4gICAgLy8gUmVjb3JkIHRoZSBkaXJlY3QgcGFyZW50IG9ubHkgd2hlbiBpdCBpc24ndCBhIHNlbGYtbG9vcCwgc28gYSBtYWxmb3JtZWRcbiAgICAvLyBB4oaSQSBvcmcgaXNuJ3QgcmVwb3J0ZWQgYXMgaXRzIG93biBwYXJlbnQuXG4gICAgaWYgKGRlcHRoID09PSAwICYmIHBhcmVudCAhPT0gb3JnSWQpIHBhcmVudE9yZ0lkID0gcGFyZW50O1xuICAgIGlmIChzZWVuLmhhcyhwYXJlbnQpKSBicmVhazsgLy8gY3ljbGUg4oCUIHRyZWF0IGN1cnJlbnRJZCBhcyB0aGUgcm9vdFxuICAgIHNlZW4uYWRkKHBhcmVudCk7XG4gICAgY3VycmVudElkID0gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIHsgcm9vdE9yZ0lkOiBjdXJyZW50SWQsIC4uLihwYXJlbnRPcmdJZCAmJiB7IHBhcmVudE9yZ0lkIH0pIH07XG59XG5cbi8qKiBXYWxrIGBwYXJlbnRPcmdJZGAgdXAgdG8gdGhlIHJvb3QgYW5kIHJldHVybiBqdXN0IHRoZSByb290IGlkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVSb290T3JnSWRXaXRoKG9yZ0lkOiBzdHJpbmcsIGdldFBhcmVudDogR2V0UGFyZW50T3JnSWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IHJlc29sdmVPcmdMaW5lYWdlV2l0aChvcmdJZCwgZ2V0UGFyZW50KSkucm9vdE9yZ0lkO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBgYW5jZXN0b3JPcmdJZGAgaXMgYW4gYW5jZXN0b3Igb2YgYGNhbmRpZGF0ZU9yZ0lkYCDigJQgaS5lLlxuICogYGNhbmRpZGF0ZU9yZ0lkYCBsaXZlcyBzb21ld2hlcmUgaW4gdGhlIHN1YnRyZWUgcm9vdGVkIGF0IGBhbmNlc3Rvck9yZ0lkYC5cbiAqIFdhbGtzIGBjYW5kaWRhdGVPcmdJZGAncyBwYXJlbnQgY2hhaW4gdXB3YXJkLCBkZXB0aC1jYXBwZWQgYW5kIGN5Y2xlLXNhZmUuXG4gKiBSZXR1cm5zIGBmYWxzZWAgd2hlbiB0aGUgdHdvIGFyZSBlcXVhbCAoYW4gb3JnIGlzIG5vdCBpdHMgb3duIGFuY2VzdG9yKSBvclxuICogdW5yZWxhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBbmNlc3Rvck9yZ1dpdGgoXG4gIGFuY2VzdG9yT3JnSWQ6IHN0cmluZyxcbiAgY2FuZGlkYXRlT3JnSWQ6IHN0cmluZyxcbiAgZ2V0UGFyZW50OiBHZXRQYXJlbnRPcmdJZCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYW5jZXN0b3JPcmdJZCA9PT0gY2FuZGlkYXRlT3JnSWQpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KFtjYW5kaWRhdGVPcmdJZF0pO1xuICBsZXQgY3VycmVudElkID0gY2FuZGlkYXRlT3JnSWQ7XG5cbiAgZm9yIChsZXQgZGVwdGggPSAwOyBkZXB0aCA8IE1BWF9PUkdfREVQVEg7IGRlcHRoKyspIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0b09yZ0lkU3RyaW5nKGF3YWl0IGdldFBhcmVudChjdXJyZW50SWQpKTtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlOyAvLyByZWFjaGVkIGEgcm9vdCB3aXRob3V0IG1hdGNoaW5nXG4gICAgaWYgKHBhcmVudCA9PT0gYW5jZXN0b3JPcmdJZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHNlZW4uaGFzKHBhcmVudCkpIHJldHVybiBmYWxzZTsgLy8gY3ljbGVcbiAgICBzZWVuLmFkZChwYXJlbnQpO1xuICAgIGN1cnJlbnRJZCA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBFeHBhbmQgYG9yZ0lkYCB0byBpdHNlbGYgcGx1cyBldmVyeSBkZXNjZW5kYW50IG9yZyBpZCAoYnJlYWR0aC1maXJzdCBvdmVyXG4gKiBgcGFyZW50T3JnSWRgKS4gVGhpcyBpcyB0aGUgc2NvcGUgYSBwYXJlbnQgb3JnIFwic2Vlc1wiIGZvciB2aXNpYmlsaXR5IGFuZFxuICogYW5hbHl0aWNzIHJvbGx1cHM6IGBbc2VsZiwgLi4uZGVzY2VuZGFudHNdYC4gUmV0dXJucyBgW29yZ0lkXWAgd2hlbiB0aGUgb3JnXG4gKiBoYXMgbm8gY2hpbGRyZW4uIEN5Y2xlLXNhZmUgYW5kIGRlcHRoLWNhcHBlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE9yZ1Njb3BlV2l0aChvcmdJZDogc3RyaW5nLCBnZXRDaGlsZHJlbjogR2V0Q2hpbGRPcmdJZHMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbb3JnSWRdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KFtvcmdJZF0pO1xuICBsZXQgZnJvbnRpZXI6IHN0cmluZ1tdID0gW29yZ0lkXTtcblxuICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgTUFYX09SR19ERVBUSCAmJiBmcm9udGllci5sZW5ndGggPiAwOyBkZXB0aCsrKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCBnZXRDaGlsZHJlbihmcm9udGllcik7XG4gICAgY29uc3QgbmV4dDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhdyBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgaWQgPSB0b09yZ0lkU3RyaW5nKHJhdyk7XG4gICAgICBpZiAoIWlkIHx8IHNlZW4uaGFzKGlkKSkgY29udGludWU7XG4gICAgICBzZWVuLmFkZChpZCk7XG4gICAgICByZXN1bHQucHVzaChpZCk7XG4gICAgICBuZXh0LnB1c2goaWQpO1xuICAgIH1cbiAgICBmcm9udGllciA9IG5leHQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL29yZy1oaWVyYXJjaHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFRaEMsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBVTtJQUN0QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLFNBQVMsYUFBYSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsWUFBb0M7SUFFcEMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ1osTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FB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YUFBYSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQUUsU0FBUztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSB0cmF2ZXJzYWwgKG9yZy10ZWFtLWhpZXJhcmNoeSBwcm9wb3NhbCkuXG4gKlxuICogQSBcInRlYW1cIiBpcyBhbiBvcmdhbml6YXRpb24gd2hvc2UgYHBhcmVudE9yZ0lkYCBwb2ludHMgYXQgYW5vdGhlciBvcmc7IGEgcm9vdFxuICogb3JnIGhhcyBgcGFyZW50T3JnSWQgPSBudWxsYC4gVGhlc2UgaGVscGVycyB3YWxrIHRoYXQgc2luZ2xlIHNlbGYtcmVmZXJlbnRpYWxcbiAqIGNvbHVtbiwgYnV0IGhvbGQgKipubyBkYXRhYmFzZSBkZXBlbmRlbmN5Kiogb2YgdGhlaXIgb3duOiBlYWNoIHRha2VzIGEgcXVlcnlcbiAqIGNhbGxiYWNrIHNvIGV2ZXJ5IHNlcnZpY2UgKHBsYXRmb3JtLCBxdW90YSwg4oCmKSBjYW4gc2hhcmUgdGhlIGN5Y2xlLXNhZmUsXG4gKiBkZXB0aC1jYXBwZWQgdHJhdmVyc2FsIGxvZ2ljIHdoaWxlIHJlYWRpbmcgaXRzIG93biBNb25nb29zZSBtb2RlbCB3aXRoIGl0cyBvd25cbiAqIGBfaWRgIGNhc3RpbmcgcnVsZXMuXG4gKlxuICogICAtIHtAbGluayByZXNvbHZlT3JnTGluZWFnZVdpdGh9IOKAlCBVUDogZGlyZWN0IHBhcmVudCArIHJvb3Qgb2YgdGhlIGNoYWluLlxuICogICAtIHtAbGluayByZXNvbHZlUm9vdE9yZ0lkV2l0aH0gICDigJQgVVA6IGp1c3QgdGhlIHJvb3QgaWQuXG4gKiAgIC0ge0BsaW5rIGlzQW5jZXN0b3JPcmdXaXRofSAgICAgIOKAlCBVUDogaXMgQSBhbiBhbmNlc3RvciBvZiBCP1xuICogICAtIHtAbGluayBleHBhbmRPcmdTY29wZVdpdGh9ICAgICDigJQgRE9XTjogc2VsZiArIGFsbCBkZXNjZW5kYW50IG9yZyBpZHMuXG4gKlxuICogRXZlcnkgb3JnIGlzIGZsYXQgdG9kYXkgKGBwYXJlbnRPcmdJZGAgbnVsbCBvbiBhbGwgcm93cyksIHNvIGxpbmVhZ2UgcmVzb2x2ZXNcbiAqIHRvIGB7IHJvb3RPcmdJZDogc2VsZiB9YCBhbmQgc2NvcGUgdG8gYFtzZWxmXWAg4oCUIGkuZS4gdGhlc2UgYXJlIG5vLW9wcyB1bnRpbFxuICogb3JncyBnZXQgcGFyZW50cy5cbiAqL1xuXG4vKiogSGFyZCBjZWlsaW5nIG9uIGFuY2VzdHJ5L2Rlc2NlbmRhbnQgdHJhdmVyc2FsIOKAlCBjeWNsZSArIGFidXNlIGd1YXJkLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9PUkdfREVQVEggPSAxNjtcblxuLyoqIEZldGNoIGFuIG9yZydzIGRpcmVjdCBgcGFyZW50T3JnSWRgLCBvciB1bmRlZmluZWQgZm9yIGEgcm9vdC9taXNzaW5nIG9yZy4gKi9cbmV4cG9ydCB0eXBlIEdldFBhcmVudE9yZ0lkID0gKG9yZ0lkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuLyoqIEZldGNoIHRoZSBkaXJlY3QgY2hpbGQgb3JnIGlkcyBvZiBldmVyeSBvcmcgaW4gYGZyb250aWVyYCAob25lIHJvdW5kIG9mIEJGUykuICovXG5leHBvcnQgdHlwZSBHZXRDaGlsZE9yZ0lkcyA9IChmcm9udGllcjogc3RyaW5nW10pID0+IFByb21pc2U8c3RyaW5nW10+O1xuXG4vKiogTm9ybWFsaXplIGEgTWl4ZWQvT2JqZWN0SWQvc3RyaW5nIG9yZyBpZCB0byBhIG5vbi1lbXB0eSBzdHJpbmcsIG9yIHVuZGVmaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b09yZ0lkU3RyaW5nKHY6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHMgPSBTdHJpbmcodik7XG4gIHJldHVybiBzICYmIHMgIT09ICdudWxsJyAmJiBzICE9PSAndW5kZWZpbmVkJyA/IHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBUcnVlIHdoZW4gYGlkYCBpcyBhIDI0LWNoYXJhY3RlciBoZXggc3RyaW5nIOKAlCBpLmUuIGNhc3RhYmxlIHRvIGFuIE9iamVjdElkLiAqL1xuZnVuY3Rpb24gaXNPYmplY3RJZEhleChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpZC5sZW5ndGggPT09IDI0ICYmIC9eWzAtOWEtZkEtRl17MjR9JC8udGVzdChpZCk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9yZy1pZCBjYXN0IHRoZSBNb25nby1iYWNrZWQgc2VydmljZXMgdXNlIG9uIGV2ZXJ5IGBfaWRgIGxvb2t1cC5cbiAqXG4gKiBQbGF0Zm9ybSB3cml0ZXMgT2JqZWN0SWQgYF9pZGBzIGludG8gdGhlIHNoYXJlZCBgb3JnYW5pemF0aW9uc2AgY29sbGVjdGlvbixcbiAqIHdoaWxlIHRoZSB3ZWxsLWtub3duIGAnc3lzdGVtJ2Agb3JnIChhbmQgYHBhcmVudE9yZ0lkYCwgc3RpbGwgYSBTdHJpbmcgY29sdW1uKVxuICogYXJlIHBsYWluIHN0cmluZ3Mg4oCUIHNvIGEgMjQtaGV4IGlkIGFycml2aW5nIGZyb20gYSByb3V0ZSBwYXJhbSAvIEpXVCBjbGFpbSAvXG4gKiBjcm9zcy1zZXJ2aWNlIHBheWxvYWQgbXVzdCBiZSBjYXN0IG9yIGBmaW5kQnlJZCgnPDI0aGV4PicpYCBuZXZlciBtYXRjaGVzLlxuICpcbiAqIFBsYXRmb3JtIGFuZCBxdW90YSBlYWNoIGhhZCB0aGVpciBPV04gYHRvT3JnSWRgIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlXG4gKiAoYHN0cmluZyB8IHN0cmluZ1tdYCB2cyBgc3RyaW5nYCksIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGRyaWZ0IHRoaXMgcmVtb3ZlczpcbiAqIHRoZSBsb2dpYyBhbmQgdGhlIHNpZ25hdHVyZSBsaXZlIGhlcmUgb25jZSwgYW5kIGVhY2ggc2VydmljZSBzdXBwbGllcyBvbmx5XG4gKiBpdHMgbW9uZ29vc2UgYFR5cGVzLk9iamVjdElkYCBjb25zdHJ1Y3Rvci4gYXBpLWNvcmUgY2Fubm90IGltcG9ydCBtb25nb29zZVxuICogaXRzZWxmIChpdCBpcyBub3Qg4oCUIGFuZCBzaG91bGQgbm90IGJlY29tZSDigJQgYW4gYXBpLWNvcmUgZGVwZW5kZW5jeSksIHNvIHRoZVxuICogY29uc3RydWN0b3IgaXMgaW5qZWN0ZWQgcmF0aGVyIHRoYW4gaW1wb3J0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGV4cG9ydCBjb25zdCB0b09yZ0lkID0gY3JlYXRlT3JnSWRDYXN0ZXIobW9uZ29vc2UuVHlwZXMuT2JqZWN0SWQpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3JnSWRDYXN0ZXI8VD4oXG4gIE9iamVjdElkQ3RvcjogbmV3IChoZXg6IHN0cmluZykgPT4gVCxcbik6IChpZDogc3RyaW5nIHwgc3RyaW5nW10pID0+IHN0cmluZyB8IFQge1xuICByZXR1cm4gKGlkKSA9PiB7XG4gICAgY29uc3QgaWRTdHIgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkWzBdIDogaWQ7XG4gICAgcmV0dXJuIGlzT2JqZWN0SWRIZXgoaWRTdHIpID8gbmV3IE9iamVjdElkQ3RvcihpZFN0cikgOiBpZFN0cjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdMaW5lYWdlIHtcbiAgLyoqIFRoZSBvcmcncyBkaXJlY3QgcGFyZW50IGlkLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0J3MgYSByb290IG9yZy4gKi9cbiAgcGFyZW50T3JnSWQ/OiBzdHJpbmc7XG4gIC8qKiBUb3Agb2YgdGhlIGFuY2VzdHJ5IGNoYWluLiBFcXVhbHMgdGhlIGlucHV0IGBvcmdJZGAgZm9yIGEgcm9vdCBvcmcuICovXG4gIHJvb3RPcmdJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdhbGsgYHBhcmVudE9yZ0lkYCBmcm9tIGBvcmdJZGAgdXAgdG8gdGhlIHJvb3QuIFJldHVybnMgdGhlIGRpcmVjdCBwYXJlbnQgKGlmXG4gKiBhbnkpIGFuZCB0aGUgcm9vdCBvcmcgaWQgKHRoZSBpbnB1dCBpdHNlbGYgd2hlbiB0aGUgb3JnIGhhcyBubyBwYXJlbnQpLiBPbiBhXG4gKiBkZXRlY3RlZCBjeWNsZSwgYSBtaXNzaW5nIG9yZywgb3IgdGhlIGRlcHRoIGNhcCwgdHJhdmVyc2FsIHN0b3BzIGFuZCB0aGUgbGFzdFxuICogcmVhY2hlZCBpZCBpcyB0cmVhdGVkIGFzIHRoZSByb290LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9yZ0xpbmVhZ2VXaXRoKG9yZ0lkOiBzdHJpbmcsIGdldFBhcmVudDogR2V0UGFyZW50T3JnSWQpOiBQcm9taXNlPE9yZ0xpbmVhZ2U+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPihbb3JnSWRdKTtcbiAgbGV0IGN1cnJlbnRJZCA9IG9yZ0lkO1xuICBsZXQgcGFyZW50T3JnSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgTUFYX09SR19ERVBUSDsgZGVwdGgrKykge1xuICAgIGNvbnN0IHBhcmVudCA9IHRvT3JnSWRTdHJpbmcoYXdhaXQgZ2V0UGFyZW50KGN1cnJlbnRJZCkpO1xuICAgIGlmICghcGFyZW50KSBicmVhazsgLy8gY3VycmVudElkIGlzIHRoZSByb290XG4gICAgLy8gUmVjb3JkIHRoZSBkaXJlY3QgcGFyZW50IG9ubHkgd2hlbiBpdCBpc24ndCBhIHNlbGYtbG9vcCwgc28gYSBtYWxmb3JtZWRcbiAgICAvLyBB4oaSQSBvcmcgaXNuJ3QgcmVwb3J0ZWQgYXMgaXRzIG93biBwYXJlbnQuXG4gICAgaWYgKGRlcHRoID09PSAwICYmIHBhcmVudCAhPT0gb3JnSWQpIHBhcmVudE9yZ0lkID0gcGFyZW50O1xuICAgIGlmIChzZWVuLmhhcyhwYXJlbnQpKSBicmVhazsgLy8gY3ljbGUg4oCUIHRyZWF0IGN1cnJlbnRJZCBhcyB0aGUgcm9vdFxuICAgIHNlZW4uYWRkKHBhcmVudCk7XG4gICAgY3VycmVudElkID0gcGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIHsgcm9vdE9yZ0lkOiBjdXJyZW50SWQsIC4uLihwYXJlbnRPcmdJZCAmJiB7IHBhcmVudE9yZ0lkIH0pIH07XG59XG5cbi8qKiBXYWxrIGBwYXJlbnRPcmdJZGAgdXAgdG8gdGhlIHJvb3QgYW5kIHJldHVybiBqdXN0IHRoZSByb290IGlkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVSb290T3JnSWRXaXRoKG9yZ0lkOiBzdHJpbmcsIGdldFBhcmVudDogR2V0UGFyZW50T3JnSWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IHJlc29sdmVPcmdMaW5lYWdlV2l0aChvcmdJZCwgZ2V0UGFyZW50KSkucm9vdE9yZ0lkO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBgYW5jZXN0b3JPcmdJZGAgaXMgYW4gYW5jZXN0b3Igb2YgYGNhbmRpZGF0ZU9yZ0lkYCDigJQgaS5lLlxuICogYGNhbmRpZGF0ZU9yZ0lkYCBsaXZlcyBzb21ld2hlcmUgaW4gdGhlIHN1YnRyZWUgcm9vdGVkIGF0IGBhbmNlc3Rvck9yZ0lkYC5cbiAqIFdhbGtzIGBjYW5kaWRhdGVPcmdJZGAncyBwYXJlbnQgY2hhaW4gdXB3YXJkLCBkZXB0aC1jYXBwZWQgYW5kIGN5Y2xlLXNhZmUuXG4gKiBSZXR1cm5zIGBmYWxzZWAgd2hlbiB0aGUgdHdvIGFyZSBlcXVhbCAoYW4gb3JnIGlzIG5vdCBpdHMgb3duIGFuY2VzdG9yKSBvclxuICogdW5yZWxhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBbmNlc3Rvck9yZ1dpdGgoXG4gIGFuY2VzdG9yT3JnSWQ6IHN0cmluZyxcbiAgY2FuZGlkYXRlT3JnSWQ6IHN0cmluZyxcbiAgZ2V0UGFyZW50OiBHZXRQYXJlbnRPcmdJZCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoYW5jZXN0b3JPcmdJZCA9PT0gY2FuZGlkYXRlT3JnSWQpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KFtjYW5kaWRhdGVPcmdJZF0pO1xuICBsZXQgY3VycmVudElkID0gY2FuZGlkYXRlT3JnSWQ7XG5cbiAgZm9yIChsZXQgZGVwdGggPSAwOyBkZXB0aCA8IE1BWF9PUkdfREVQVEg7IGRlcHRoKyspIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0b09yZ0lkU3RyaW5nKGF3YWl0IGdldFBhcmVudChjdXJyZW50SWQpKTtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIGZhbHNlOyAvLyByZWFjaGVkIGEgcm9vdCB3aXRob3V0IG1hdGNoaW5nXG4gICAgaWYgKHBhcmVudCA9PT0gYW5jZXN0b3JPcmdJZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHNlZW4uaGFzKHBhcmVudCkpIHJldHVybiBmYWxzZTsgLy8gY3ljbGVcbiAgICBzZWVuLmFkZChwYXJlbnQpO1xuICAgIGN1cnJlbnRJZCA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBFeHBhbmQgYG9yZ0lkYCB0byBpdHNlbGYgcGx1cyBldmVyeSBkZXNjZW5kYW50IG9yZyBpZCAoYnJlYWR0aC1maXJzdCBvdmVyXG4gKiBgcGFyZW50T3JnSWRgKS4gVGhpcyBpcyB0aGUgc2NvcGUgYSBwYXJlbnQgb3JnIFwic2Vlc1wiIGZvciB2aXNpYmlsaXR5IGFuZFxuICogYW5hbHl0aWNzIHJvbGx1cHM6IGBbc2VsZiwgLi4uZGVzY2VuZGFudHNdYC4gUmV0dXJucyBgW29yZ0lkXWAgd2hlbiB0aGUgb3JnXG4gKiBoYXMgbm8gY2hpbGRyZW4uIEN5Y2xlLXNhZmUgYW5kIGRlcHRoLWNhcHBlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGFuZE9yZ1Njb3BlV2l0aChvcmdJZDogc3RyaW5nLCBnZXRDaGlsZHJlbjogR2V0Q2hpbGRPcmdJZHMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbb3JnSWRdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KFtvcmdJZF0pO1xuICBsZXQgZnJvbnRpZXI6IHN0cmluZ1tdID0gW29yZ0lkXTtcblxuICBmb3IgKGxldCBkZXB0aCA9IDA7IGRlcHRoIDwgTUFYX09SR19ERVBUSCAmJiBmcm9udGllci5sZW5ndGggPiAwOyBkZXB0aCsrKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCBnZXRDaGlsZHJlbihmcm9udGllcik7XG4gICAgY29uc3QgbmV4dDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhdyBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3QgaWQgPSB0b09yZ0lkU3RyaW5nKHJhdyk7XG4gICAgICBpZiAoIWlkIHx8IHNlZW4uaGFzKGlkKSkgY29udGludWU7XG4gICAgICBzZWVuLmFkZChpZCk7XG4gICAgICByZXN1bHQucHVzaChpZCk7XG4gICAgICBuZXh0LnB1c2goaWQpO1xuICAgIH1cbiAgICBmcm9udGllciA9IG5leHQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* - getParam, getOrgId — request parameter extraction
|
|
23
23
|
* - parseQueryInt, parseQueryString — query string parsing
|
|
24
24
|
* - getIdentity — identity extraction from requests
|
|
25
|
+
* - actorId — the audit actor for a route context (one `system` sentinel)
|
|
25
26
|
* - errorMessage — safe error-to-string conversion
|
|
26
27
|
*
|
|
27
28
|
* **Constants**
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
* - CacheService — in-memory TTL cache
|
|
34
35
|
* - ComplianceClient — compliance service client
|
|
35
36
|
* - EntityEventEmitter — domain event pub/sub
|
|
37
|
+
* - retryForever — capped-backoff wait for a dependency that must come up
|
|
36
38
|
*
|
|
37
39
|
* **Errors**
|
|
38
40
|
* - AppError, NotFoundError, ForbiddenError — typed HTTP error classes
|
|
@@ -46,6 +48,30 @@
|
|
|
46
48
|
* **OpenAPI**
|
|
47
49
|
* - Schema registry and spec generation
|
|
48
50
|
*/
|
|
51
|
+
/**
|
|
52
|
+
* PUBLIC SURFACE POLICY
|
|
53
|
+
*
|
|
54
|
+
* The root re-exports the ten sub-barrels, and each SUB-BARREL is the allow-list
|
|
55
|
+
* for its own area — that is where a module is either `export *`'d or narrowed
|
|
56
|
+
* to the names services may use. Internals are excluded there rather than here,
|
|
57
|
+
* so the exclusion sits next to the code that defines them and cannot be missed
|
|
58
|
+
* by someone adding a module.
|
|
59
|
+
*
|
|
60
|
+
* Currently narrowed (the rest is the intended surface):
|
|
61
|
+
* - `services/retry-strategy` — decision functions only; `parseRetryAfter` and
|
|
62
|
+
* `addJitter` are backoff internals.
|
|
63
|
+
* - `services/circuit-breaker` — `CircuitOpenError` + `resetCircuitBreakers`;
|
|
64
|
+
* the `CircuitBreaker` class is wired by the shared HTTP client, not by
|
|
65
|
+
* services.
|
|
66
|
+
* - `services/service-keys` — verify/inspect only; signing, the key bundle and
|
|
67
|
+
* `_resetServiceKeysForTests` stay inside.
|
|
68
|
+
* - `utils/jwk` — constants, shapes, decoders and the two signer-facing helpers
|
|
69
|
+
* platform needs; `jwkThumbprint` / `publicKeyFromJwk` stay inside.
|
|
70
|
+
*
|
|
71
|
+
* api-core's own modules and its `testing/` helpers reach the excluded symbols
|
|
72
|
+
* by DEEP import (`@pipeline-builder/api-core/lib/services/service-keys.js`),
|
|
73
|
+
* which is also how the unit tests reach them.
|
|
74
|
+
*/
|
|
49
75
|
export * from './types/index.js';
|
|
50
76
|
export * from './constants/index.js';
|
|
51
77
|
export * from './utils/index.js';
|
package/lib/index.js
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* - getParam, getOrgId — request parameter extraction
|
|
25
25
|
* - parseQueryInt, parseQueryString — query string parsing
|
|
26
26
|
* - getIdentity — identity extraction from requests
|
|
27
|
+
* - actorId — the audit actor for a route context (one `system` sentinel)
|
|
27
28
|
* - errorMessage — safe error-to-string conversion
|
|
28
29
|
*
|
|
29
30
|
* **Constants**
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
* - CacheService — in-memory TTL cache
|
|
36
37
|
* - ComplianceClient — compliance service client
|
|
37
38
|
* - EntityEventEmitter — domain event pub/sub
|
|
39
|
+
* - retryForever — capped-backoff wait for a dependency that must come up
|
|
38
40
|
*
|
|
39
41
|
* **Errors**
|
|
40
42
|
* - AppError, NotFoundError, ForbiddenError — typed HTTP error classes
|
|
@@ -48,6 +50,30 @@
|
|
|
48
50
|
* **OpenAPI**
|
|
49
51
|
* - Schema registry and spec generation
|
|
50
52
|
*/
|
|
53
|
+
/**
|
|
54
|
+
* PUBLIC SURFACE POLICY
|
|
55
|
+
*
|
|
56
|
+
* The root re-exports the ten sub-barrels, and each SUB-BARREL is the allow-list
|
|
57
|
+
* for its own area — that is where a module is either `export *`'d or narrowed
|
|
58
|
+
* to the names services may use. Internals are excluded there rather than here,
|
|
59
|
+
* so the exclusion sits next to the code that defines them and cannot be missed
|
|
60
|
+
* by someone adding a module.
|
|
61
|
+
*
|
|
62
|
+
* Currently narrowed (the rest is the intended surface):
|
|
63
|
+
* - `services/retry-strategy` — decision functions only; `parseRetryAfter` and
|
|
64
|
+
* `addJitter` are backoff internals.
|
|
65
|
+
* - `services/circuit-breaker` — `CircuitOpenError` + `resetCircuitBreakers`;
|
|
66
|
+
* the `CircuitBreaker` class is wired by the shared HTTP client, not by
|
|
67
|
+
* services.
|
|
68
|
+
* - `services/service-keys` — verify/inspect only; signing, the key bundle and
|
|
69
|
+
* `_resetServiceKeysForTests` stay inside.
|
|
70
|
+
* - `utils/jwk` — constants, shapes, decoders and the two signer-facing helpers
|
|
71
|
+
* platform needs; `jwkThumbprint` / `publicKeyFromJwk` stay inside.
|
|
72
|
+
*
|
|
73
|
+
* api-core's own modules and its `testing/` helpers reach the excluded symbols
|
|
74
|
+
* by DEEP import (`@pipeline-builder/api-core/lib/services/service-keys.js`),
|
|
75
|
+
* which is also how the unit tests reach them.
|
|
76
|
+
*/
|
|
51
77
|
// Types
|
|
52
78
|
export * from './types/index.js';
|
|
53
79
|
// Constants
|
|
@@ -68,4 +94,4 @@ export * from './errors/index.js';
|
|
|
68
94
|
export * from './validation/index.js';
|
|
69
95
|
// OpenAPI
|
|
70
96
|
export * from './openapi/index.js';
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUVILFFBQVE7QUFDUixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFlBQVk7QUFDWixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFVBQVU7QUFDVixjQUFjLG9CQUFvQixDQUFDO0FBRW5DLFdBQVc7QUFDWCxjQUFjLHFCQUFxQixDQUFDO0FBRXBDLGFBQWE7QUFDYixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFNBQVM7QUFDVCxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLFNBQVM7QUFDVCxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLGFBQWE7QUFDYixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFVBQVU7QUFDVixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQG1vZHVsZSBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZVxuICpcbiAqIENvcmUgQVBJIHV0aWxpdGllcyBzaGFyZWQgYWNyb3NzIGFsbCBzZXJ2aWNlcy5cbiAqXG4gKiAqKk1pZGRsZXdhcmUqKlxuICogLSByZXF1aXJlQXV0aCwgcmVxdWlyZVN5c3RlbUFkbWluLCByZXF1aXJlRmVhdHVyZSDigJQgSldUIGF1dGhlbnRpY2F0aW9uXG4gKiAtIGlzU3lzdGVtQWRtaW4sIGlzU2VydmljZVByaW5jaXBhbCDigJQgYXV0aG9yaXphdGlvbiBoZWxwZXJzIChpc1N5c3RlbU9yZ0lkIHJlbWFpbnMgYXMgYSBjb250ZW50LW93bmVyIGNoZWNrLCBub3QgYSBwcml2aWxlZ2UgZ2F0ZSlcbiAqIC0gc2lnblNlcnZpY2VUb2tlbiwgZ2V0U2VydmljZUF1dGhIZWFkZXIg4oCUIGludGVyLXNlcnZpY2UgSldUIG1pbnRpbmdcbiAqXG4gKiAqKlR5cGVzKipcbiAqIC0gRXJyb3JDb2RlLCBFcnJvckNvZGVTdGF0dXMg4oCUIHN0YW5kYXJkaXplZCBlcnJvciBjb2RlIGVudW0gYW5kIHN0YXR1cyBtYXBwaW5nXG4gKiAtIFJlcXVlc3RJZGVudGl0eSDigJQgcGFyc2VkIEpXVCBpZGVudGl0eVxuICogLSBTZXJ2aWNlQ29uZmlnLCBSZXF1ZXN0T3B0aW9ucyDigJQgSFRUUCBjbGllbnQgdHlwZXNcbiAqIC0gUXVvdGFUeXBlLCBRdW90YUNoZWNrUmVzdWx0IOKAlCBxdW90YSBzZXJ2aWNlIHR5cGVzXG4gKiAtIFBpcGVsaW5lVHlwZSwgQ29tcHV0ZVR5cGUsIFZpc2liaWxpdHkg4oCUIHBpcGVsaW5lIGRvbWFpbiB0eXBlc1xuICogLSBGZWF0dXJlRmxhZ3Mg4oCUIGZlYXR1cmUgZmxhZyB0eXBlc1xuICpcbiAqICoqVXRpbGl0aWVzKipcbiAqIC0gY3JlYXRlTG9nZ2VyIOKAlCBXaW5zdG9uLWJhc2VkIHN0cnVjdHVyZWQgbG9nZ2VyIGZhY3RvcnlcbiAqIC0gc2VuZFN1Y2Nlc3MsIHNlbmRFcnJvciwgc2VuZFBhZ2luYXRlZE5lc3RlZCwgc2VuZEJhZFJlcXVlc3QsIHNlbmRJbnRlcm5hbEVycm9yIOKAlCBIVFRQIHJlc3BvbnNlIGhlbHBlcnNcbiAqIC0gZ2V0UGFyYW0sIGdldE9yZ0lkIOKAlCByZXF1ZXN0IHBhcmFtZXRlciBleHRyYWN0aW9uXG4gKiAtIHBhcnNlUXVlcnlJbnQsIHBhcnNlUXVlcnlTdHJpbmcg4oCUIHF1ZXJ5IHN0cmluZyBwYXJzaW5nXG4gKiAtIGdldElkZW50aXR5IOKAlCBpZGVudGl0eSBleHRyYWN0aW9uIGZyb20gcmVxdWVzdHNcbiAqIC0gYWN0b3JJZCDigJQgdGhlIGF1ZGl0IGFjdG9yIGZvciBhIHJvdXRlIGNvbnRleHQgKG9uZSBgc3lzdGVtYCBzZW50aW5lbClcbiAqIC0gZXJyb3JNZXNzYWdlIOKAlCBzYWZlIGVycm9yLXRvLXN0cmluZyBjb252ZXJzaW9uXG4gKlxuICogKipDb25zdGFudHMqKlxuICogLSBIVFRQIHN0YXR1cyBjb2RlcywgQUkgcHJvdmlkZXIgaWRlbnRpZmllcnMsIHRpbWUgY29uc3RhbnRzXG4gKlxuICogKipTZXJ2aWNlcyoqXG4gKiAtIEludGVybmFsSHR0cENsaWVudCwgY3JlYXRlU2FmZUNsaWVudCDigJQgaW50ZXJuYWwgc2VydmljZS10by1zZXJ2aWNlIEhUVFAgY2xpZW50XG4gKiAtIGNyZWF0ZVF1b3RhU2VydmljZSDigJQgcXVvdGEgZW5mb3JjZW1lbnQgY2xpZW50IGZhY3RvcnlcbiAqIC0gQ2FjaGVTZXJ2aWNlIOKAlCBpbi1tZW1vcnkgVFRMIGNhY2hlXG4gKiAtIENvbXBsaWFuY2VDbGllbnQg4oCUIGNvbXBsaWFuY2Ugc2VydmljZSBjbGllbnRcbiAqIC0gRW50aXR5RXZlbnRFbWl0dGVyIOKAlCBkb21haW4gZXZlbnQgcHViL3N1YlxuICogLSByZXRyeUZvcmV2ZXIg4oCUIGNhcHBlZC1iYWNrb2ZmIHdhaXQgZm9yIGEgZGVwZW5kZW5jeSB0aGF0IG11c3QgY29tZSB1cFxuICpcbiAqICoqRXJyb3JzKipcbiAqIC0gQXBwRXJyb3IsIE5vdEZvdW5kRXJyb3IsIEZvcmJpZGRlbkVycm9yIOKAlCB0eXBlZCBIVFRQIGVycm9yIGNsYXNzZXNcbiAqXG4gKiAqKlZhbGlkYXRpb24qKlxuICogLSBab2QtYmFzZWQgcmVxdWVzdCB2YWxpZGF0aW9uIHNjaGVtYXMgYW5kIG1pZGRsZXdhcmVcbiAqXG4gKiAqKlJvdXRlcyoqXG4gKiAtIEhlYWx0aCBjaGVjayByb3V0ZSBmYWN0b3J5XG4gKlxuICogKipPcGVuQVBJKipcbiAqIC0gU2NoZW1hIHJlZ2lzdHJ5IGFuZCBzcGVjIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIFBVQkxJQyBTVVJGQUNFIFBPTElDWVxuICpcbiAqIFRoZSByb290IHJlLWV4cG9ydHMgdGhlIHRlbiBzdWItYmFycmVscywgYW5kIGVhY2ggU1VCLUJBUlJFTCBpcyB0aGUgYWxsb3ctbGlzdFxuICogZm9yIGl0cyBvd24gYXJlYSDigJQgdGhhdCBpcyB3aGVyZSBhIG1vZHVsZSBpcyBlaXRoZXIgYGV4cG9ydCAqYCdkIG9yIG5hcnJvd2VkXG4gKiB0byB0aGUgbmFtZXMgc2VydmljZXMgbWF5IHVzZS4gSW50ZXJuYWxzIGFyZSBleGNsdWRlZCB0aGVyZSByYXRoZXIgdGhhbiBoZXJlLFxuICogc28gdGhlIGV4Y2x1c2lvbiBzaXRzIG5leHQgdG8gdGhlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZW0gYW5kIGNhbm5vdCBiZSBtaXNzZWRcbiAqIGJ5IHNvbWVvbmUgYWRkaW5nIGEgbW9kdWxlLlxuICpcbiAqIEN1cnJlbnRseSBuYXJyb3dlZCAodGhlIHJlc3QgaXMgdGhlIGludGVuZGVkIHN1cmZhY2UpOlxuICogLSBgc2VydmljZXMvcmV0cnktc3RyYXRlZ3lgIOKAlCBkZWNpc2lvbiBmdW5jdGlvbnMgb25seTsgYHBhcnNlUmV0cnlBZnRlcmAgYW5kXG4gKiAgIGBhZGRKaXR0ZXJgIGFyZSBiYWNrb2ZmIGludGVybmFscy5cbiAqIC0gYHNlcnZpY2VzL2NpcmN1aXQtYnJlYWtlcmAg4oCUIGBDaXJjdWl0T3BlbkVycm9yYCArIGByZXNldENpcmN1aXRCcmVha2Vyc2A7XG4gKiAgIHRoZSBgQ2lyY3VpdEJyZWFrZXJgIGNsYXNzIGlzIHdpcmVkIGJ5IHRoZSBzaGFyZWQgSFRUUCBjbGllbnQsIG5vdCBieVxuICogICBzZXJ2aWNlcy5cbiAqIC0gYHNlcnZpY2VzL3NlcnZpY2Uta2V5c2Ag4oCUIHZlcmlmeS9pbnNwZWN0IG9ubHk7IHNpZ25pbmcsIHRoZSBrZXkgYnVuZGxlIGFuZFxuICogICBgX3Jlc2V0U2VydmljZUtleXNGb3JUZXN0c2Agc3RheSBpbnNpZGUuXG4gKiAtIGB1dGlscy9qd2tgIOKAlCBjb25zdGFudHMsIHNoYXBlcywgZGVjb2RlcnMgYW5kIHRoZSB0d28gc2lnbmVyLWZhY2luZyBoZWxwZXJzXG4gKiAgIHBsYXRmb3JtIG5lZWRzOyBgandrVGh1bWJwcmludGAgLyBgcHVibGljS2V5RnJvbUp3a2Agc3RheSBpbnNpZGUuXG4gKlxuICogYXBpLWNvcmUncyBvd24gbW9kdWxlcyBhbmQgaXRzIGB0ZXN0aW5nL2AgaGVscGVycyByZWFjaCB0aGUgZXhjbHVkZWQgc3ltYm9sc1xuICogYnkgREVFUCBpbXBvcnQgKGBAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZS9saWIvc2VydmljZXMvc2VydmljZS1rZXlzLmpzYCksXG4gKiB3aGljaCBpcyBhbHNvIGhvdyB0aGUgdW5pdCB0ZXN0cyByZWFjaCB0aGVtLlxuICovXG5cbi8vIFR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL2luZGV4LmpzJztcblxuLy8gQ29uc3RhbnRzXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9pbmRleC5qcyc7XG5cbi8vIFV0aWxzXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcblxuLy8gSGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2luZGV4LmpzJztcblxuLy8gU2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvaW5kZXguanMnO1xuXG4vLyBNaWRkbGV3YXJlXG5leHBvcnQgKiBmcm9tICcuL21pZGRsZXdhcmUvaW5kZXguanMnO1xuXG4vLyBSb3V0ZXNcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVzL2luZGV4LmpzJztcblxuLy8gRXJyb3JzXG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycy9pbmRleC5qcyc7XG5cbi8vIFZhbGlkYXRpb25cbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGlvbi9pbmRleC5qcyc7XG5cbi8vIE9wZW5BUElcbmV4cG9ydCAqIGZyb20gJy4vb3BlbmFwaS9pbmRleC5qcyc7XG4iXX0=
|
|
@@ -36,6 +36,7 @@ import { InternalHttpClient } from '../services/http-client.js';
|
|
|
36
36
|
import { hashApiKey } from '../utils/api-key.js';
|
|
37
37
|
import { createLogger } from '../utils/logger.js';
|
|
38
38
|
import { emitCounter } from '../utils/metric-emitter.js';
|
|
39
|
+
import { errorMessage } from '../utils/response.js';
|
|
39
40
|
const logger = createLogger('api-key-exchange');
|
|
40
41
|
/** Most distinct keys held in the process-wide cache before the oldest are dropped. */
|
|
41
42
|
const MAX_CACHED_KEYS = 1000;
|
|
@@ -132,7 +133,7 @@ async function performExchange(key, hash) {
|
|
|
132
133
|
emitCounter('api_key_exchange_total', { result: 'unavailable' });
|
|
133
134
|
emitCounter('api_key_exchange_failures_total', { reason: 'unavailable' });
|
|
134
135
|
logger.warn('Access-key exchange failed to reach platform', {
|
|
135
|
-
error:
|
|
136
|
+
error: errorMessage(err),
|
|
136
137
|
});
|
|
137
138
|
throw new ApiKeyExchangeUnavailableError();
|
|
138
139
|
}
|
|
@@ -216,4 +217,4 @@ export function resetApiKeyExchangeCache() {
|
|
|
216
217
|
rejectionCache.clear();
|
|
217
218
|
inFlight.clear();
|
|
218
219
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVoRCx1RkFBdUY7QUFDdkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBRTdCLHdEQUF3RDtBQUN4RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0Isa0ZBQWtGO0FBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDOzsyREFFMkQ7QUFDM0QsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFcEMsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksT0FBTyxHQUFHLDJDQUEyQztRQUMvRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVELHVGQUF1RjtBQUN2RixNQUFNLE9BQU8sOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLE9BQU8sR0FBRyxvREFBb0Q7UUFDeEUsS0FBSyxD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SSxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ25ELDJFQUEyRTtZQUMzRSx5RUFBeUU7WUFDekUsa0VBQWtFO1lBQ2xFLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLEtBQUssWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQTZDLENBQUMsQ0FBQyxDQUFDO1FBQzFGLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEUsT0FBTyxDQUFDLE1BQU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMvQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkIsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVHJhZGUgYW4gb3BhcXVlIGFjY2VzcyBrZXkgZm9yIGEgc2hvcnQtbGl2ZWQgSldULCBvbmNlLCBhbmQgY2FjaGUgaXQuXG4gKlxuICogT25seSBwbGF0Zm9ybSwgYmlsbGluZyBhbmQgcXVvdGEgaGF2ZSBNb25nb0RCLCBzbyB0aGUgc3RhdGVsZXNzIHNlcnZpY2VzXG4gKiBjYW5ub3QgbG9vayB1cCBhIGtleSBoYXNoIOKAlCBhbmQgYXNraW5nIHBsYXRmb3JtIHRvIHZhbGlkYXRlIEVWRVJZIHJlcXVlc3RcbiAqIHdvdWxkIHB1dCBpdCBvbiB0aGUgaG90IHBhdGggb2YgdGhlIHdob2xlIGZsZWV0LiBJbnN0ZWFkIHRoaXMgbW9kdWxlIGRvZXMgdGhlXG4gKiBleGNoYW5nZSBvbmNlIHBlciBrZXkgKGBQT1NUIC9hdXRoL3Rva2VuL2V4Y2hhbmdlYCkgYW5kIGNhY2hlcyB0aGUgcmV0dXJuZWRcbiAqIEpXVCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMsIHNvIGByZXF1aXJlQXV0aGAgb25seSBldmVyIHZlcmlmaWVzIGEgSldULlxuICpcbiAqIFByb3BlcnRpZXMgdGhhdCBtYXR0ZXI6XG4gKlxuICogLSAqKlJldm9jYXRpb24gbGF0ZW5jeSBpcyBib3VuZGVkIGJ5IHRoZSB0b2tlbiBUVEwqKiAoNSBtaW51dGVzKS4gQSByZXZva2VkXG4gKiAgIGtleSBjYW4gbm8gbG9uZ2VyIGJlIGV4Y2hhbmdlZCwgYW5kIHRoZSBjYWNoZWQgdG9rZW4gaXQgYWxyZWFkeSBwcm9kdWNlZFxuICogICBkaWVzIG9uIGl0cyBvd24uXG4gKiAtICoqRWFybHksIGppdHRlcmVkIHJlZnJlc2guKiogVGhlIGNhY2hlZCB0b2tlbiBpcyByZS1leGNoYW5nZWQgaW4gdGhlXG4gKiAgIGJhY2tncm91bmQgYXQgfjc1JSBvZiBpdHMgbGlmZSAowrEyMCUgaml0dGVyKSBzbyBubyByZXF1ZXN0IGV2ZXIgYmxvY2tzIG9uXG4gKiAgIHRoZSBleGNoYW5nZSwgYW5kIGEgZmxlZXQgb2YgcG9kcyBob2xkaW5nIHRoZSBzYW1lIGtleSBkb2Vzbid0IHN0YW1wZWRlXG4gKiAgIHBsYXRmb3JtIGF0IHRoZSBzYW1lIGluc3RhbnQuXG4gKiAtICoqT25lIGluLWZsaWdodCBleGNoYW5nZSBwZXIga2V5LioqIENvbmN1cnJlbnQgcmVxdWVzdHMgc2hhcmUgYSBwcm9taXNlLlxuICogLSAqKlNob3J0IG5lZ2F0aXZlIGNhY2hlLioqIEEga2V5IHBsYXRmb3JtIHJlamVjdGVkIGlzIHJlbWVtYmVyZWQgZm9yIDMwcywgc29cbiAqICAgYSBtaXNjb25maWd1cmVkIGNsaWVudCAob3IgYSBzY2FubmVyKSBjYW4ndCB0dXJuIGV2ZXJ5IHJlcXVlc3QgaW50byBhXG4gKiAgIHBsYXRmb3JtIHJvdW5kLXRyaXAuXG4gKiAtICoqUGxhdGZvcm0gZG93biBpcyBhIDUwMywgbmV2ZXIgYSAyMDAuKiogVGhlIGNhbGxlciBtYXBzXG4gKiAgIHtAbGluayBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3J9IHRvIFwidHJ5IGFnYWluXCIsIHdpdGggYSBtZXRyaWMg4oCUIGl0IGlzXG4gKiAgIGRlbGliZXJhdGVseSBOT1QgZmFpbC1vcGVuOiBhbiB1bnZlcmlmaWFibGUgY3JlZGVudGlhbCBpcyBub3QgYW4gaWRlbnRpdHkuXG4gKlxuICogVGhlIGV4Y2hhbmdlIHJlcXVlc3QgaXRzZWxmIGNhcnJpZXMgdGhpcyBzZXJ2aWNlJ3Mgb3duIHNpZ25lZCBzZXJ2aWNlIHRva2VuLFxuICogd2hpY2ggaXMgd2hhdCBleGVtcHRzIGl0IGZyb20gcGxhdGZvcm0ncyBJUC1rZXllZCBgL2F1dGhgIHJhdGUgbGltaXRlciAoZXZlcnlcbiAqIHBvZCdzIGV4Y2hhbmdlcyB3b3VsZCBvdGhlcndpc2Ugc2hhcmUgb25lIGJ1Y2tldCkgYW5kIG5hbWVzIHRoZSBjYWxsZXIgaW5cbiAqIHBsYXRmb3JtJ3MgYXVkaXQgdHJhaWwuXG4gKi9cblxuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIsIFNZU1RFTV9PUkdfSUQgfSBmcm9tICcuLi9taWRkbGV3YXJlL2F1dGguanMnO1xuaW1wb3J0IHsgSW50ZXJuYWxIdHRwQ2xpZW50IH0gZnJvbSAnLi4vc2VydmljZXMvaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgaGFzaEFwaUtleSB9IGZyb20gJy4uL3V0aWxzL2FwaS1rZXkuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2FwaS1rZXktZXhjaGFuZ2UnKTtcblxuLyoqIE1vc3QgZGlzdGluY3Qga2V5cyBoZWxkIGluIHRoZSBwcm9jZXNzLXdpZGUgY2FjaGUgYmVmb3JlIHRoZSBvbGRlc3QgYXJlIGRyb3BwZWQuICovXG5jb25zdCBNQVhfQ0FDSEVEX0tFWVMgPSAxMDAwO1xuXG4vKiogSG93IGxvbmcgYSBwbGF0Zm9ybSBSRUpFQ1RJT04gaXMgcmVtZW1iZXJlZCAobXMpLiAqL1xuY29uc3QgTkVHQVRJVkVfVFRMX01TID0gMzBfMDAwO1xuXG4vKiogRnJhY3Rpb24gb2YgYSB0b2tlbidzIGxpZmUgYWZ0ZXIgd2hpY2ggYSBiYWNrZ3JvdW5kIHJlLWV4Y2hhbmdlIGlzIHN0YXJ0ZWQuICovXG5jb25zdCBSRUZSRVNIX0FUX0ZSQUNUSU9OID0gMC43NTtcblxuLyoqIMKxIGppdHRlciBhcHBsaWVkIHRvIHRoZSByZWZyZXNoIHBvaW50LCBhcyBhIGZyYWN0aW9uIG9mIHRoZSB0b2tlbidzIGxpZmUuXG4gKiAgV2lkZSBlbm91Z2ggdG8gZGUtc3luY2hyb25pemUgYSBmbGVldCwgbmFycm93IGVub3VnaCB0byBsZWF2ZSBhIGNsZWFyIHRhaWwgb2ZcbiAqICBzdGlsbC12YWxpZCB0b2tlbiBhZnRlciB0aGUgbGF0ZXN0IHBvc3NpYmxlIHJlZnJlc2guICovXG5jb25zdCBSRUZSRVNIX0pJVFRFUl9GUkFDVElPTiA9IDAuMTtcblxuLyoqIFRoZSBrZXkgd2FzIHByZXNlbnRlZCB0byBwbGF0Zm9ybSBhbmQgcmVmdXNlZCAodW5rbm93biwgcmV2b2tlZCwgZXhwaXJlZCkuICovXG5leHBvcnQgY2xhc3MgQXBpS2V5UmVqZWN0ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBY2Nlc3Mga2V5IGlzIGludmFsaWQsIHJldm9rZWQgb3IgZXhwaXJlZCcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBpS2V5UmVqZWN0ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIFBsYXRmb3JtIGNvdWxkIG5vdCBiZSByZWFjaGVkIChvciBhbnN3ZXJlZCA1eHgpIOKAlCB0aGUga2V5J3MgdmFsaWRpdHkgaXMgdW5rbm93bi4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQWNjZXNzLWtleSB2ZXJpZmljYXRpb24gaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcic7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICAvKiogVGhlIGV4Y2hhbmdlZCBKV1QuICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBFcG9jaCBtcyBhdCB3aGljaCB0aGUgSldUIHN0b3BzIGJlaW5nIHVzYWJsZS4gKi9cbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIC8qKiBFcG9jaCBtcyBhZnRlciB3aGljaCBhIGJhY2tncm91bmQgcmUtZXhjaGFuZ2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuICovXG4gIHJlZnJlc2hBdDogbnVtYmVyO1xufVxuXG4vKiogQ2FjaGUgb2Ygc3VjY2Vzc2Z1bCBleGNoYW5nZXMsIGtleWVkIGJ5IGBzaGEyNTYoa2V5KWAg4oCUIG5ldmVyIGJ5IHRoZSBrZXkgaXRzZWxmLiAqL1xuY29uc3QgdG9rZW5DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PigpO1xuLyoqIENhY2hlIG9mIHJlamVjdGlvbnMsIGtleWVkIHRoZSBzYW1lIHdheTsgdmFsdWUgaXMgdGhlIGVwb2NoIG1zIGl0IGV4cGlyZXMuICovXG5jb25zdCByZWplY3Rpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4vKiogSW4tZmxpZ2h0IGV4Y2hhbmdlcywgc28gY29uY3VycmVudCByZXF1ZXN0cyBmb3Igb25lIGtleSBzaGFyZSBhIHJvdW5kLXRyaXAuICovXG5jb25zdCBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPENhY2hlRW50cnk+PigpO1xuXG4vKiogVGhlIHNlcnZpY2UgbmFtZSBtaW50ZWQgaW50byB0aGUgZXhjaGFuZ2UgY2FsbCdzIG93biBzZXJ2aWNlIHRva2VuLiAqL1xubGV0IHNlcnZpY2VOYW1lID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICd1bmtub3duJztcblxuLyoqXG4gKiBOYW1lIHRoaXMgcHJvY2VzcyBpbiB0aGUgZXhjaGFuZ2UgY2FsbCdzIHNlcnZpY2UgdG9rZW4uIENhbGxlZCBmcm9tXG4gKiBgd2lyZVNlcnZpY2VTZWN1cml0eWAgYXQgYm9vdCAoYW5kIGJ5IHRoZSBwbHVnaW4gc2VydmljZSwgd2hpY2ggd2lyZXMgaXRzXG4gKiBib290IHNlY3VyaXR5IGJ5IGhhbmQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QXBpS2V5RXhjaGFuZ2VTZXJ2aWNlTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgc2VydmljZU5hbWUgPSBuYW1lO1xufVxuXG4vKiogUGxhdGZvcm0ncyBpbi1jbHVzdGVyIGFkZHJlc3Mg4oCUIHRoZSBzYW1lIGVudiBwYWlyIGV2ZXJ5IG90aGVyIGNhbGxlciB1c2VzLiAqL1xuZnVuY3Rpb24gcGxhdGZvcm1DbGllbnQoKTogSW50ZXJuYWxIdHRwQ2xpZW50IHtcbiAgcmV0dXJuIG5ldyBJbnRlcm5hbEh0dHBDbGllbnQoe1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFUlZJQ0VfSE9TVCB8fCAncGxhdGZvcm0nLFxuICAgIHBvcnQ6IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFUlZJQ0VfUE9SVCB8fCAnMzAwMCcsIDEwKSxcbiAgICB0aW1lb3V0OiBwYXJzZUludChwcm9jZXNzLmVudi5BUElfS0VZX0VYQ0hBTkdFX1RJTUVPVVRfTVMgfHwgJzMwMDAnLCAxMCksXG4gIH0pO1xufVxuXG4vKiogVGhlIGVwb2NoIG1zIGF0IHdoaWNoIGEgdG9rZW4gd2l0aCBgdHRsU2Vjb25kc2Agb2YgbGlmZSBzaG91bGQgYmUgcmVmcmVzaGVkIGVhcmx5LiAqL1xuZnVuY3Rpb24gaml0dGVyZWRSZWZyZXNoQXQoaXNzdWVkQXQ6IG51bWJlciwgdHRsU2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGlmZU1zID0gdHRsU2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IGppdHRlciA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogUkVGUkVTSF9KSVRURVJfRlJBQ1RJT047XG4gIC8vIENsYW1wIGludG8gKDAsIDEpIHNvIHRoZSByZWZyZXNoIHBvaW50IGlzIGFsd2F5cyBiZWZvcmUgZXhwaXJ5IGFuZCBuZXZlciBpblxuICAvLyB0aGUgcGFzdCwgd2hhdGV2ZXIgVFRMIHBsYXRmb3JtIHJldHVybnMuXG4gIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4oMC45NSwgTWF0aC5tYXgoMC4xLCBSRUZSRVNIX0FUX0ZSQUNUSU9OICsgaml0dGVyKSk7XG4gIHJldHVybiBpc3N1ZWRBdCArIGxpZmVNcyAqIGZyYWN0aW9uO1xufVxuXG4vKiogRHJvcCB0aGUgb2xkZXN0IGVudHJpZXMgb25jZSB0aGUgY2FjaGUgaXMgb3ZlciBpdHMgY2FwIChrZXlzIGFyZSBsb25nLWxpdmVkLCB0b2tlbnMgYXJlIG5vdCkuICovXG5mdW5jdGlvbiBldmljdElmRnVsbCgpOiB2b2lkIHtcbiAgaWYgKHRva2VuQ2FjaGUuc2l6ZSA8PSBNQVhfQ0FDSEVEX0tFWVMpIHJldHVybjtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbaGFzaCwgZW50cnldIG9mIHRva2VuQ2FjaGUpIHtcbiAgICBpZiAoZW50cnkuZXhwaXJlc0F0IDw9IG5vdykgdG9rZW5DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cbiAgLy8gTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIg4oCUIGRyb3AgZnJvbSB0aGUgZnJvbnQgdW50aWwgYmFjayB1bmRlciB0aGUgY2FwLlxuICB3aGlsZSAodG9rZW5DYWNoZS5zaXplID4gTUFYX0NBQ0hFRF9LRVlTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdG9rZW5DYWNoZS5rZXlzKCkubmV4dCgpO1xuICAgIGlmIChvbGRlc3QuZG9uZSkgYnJlYWs7XG4gICAgdG9rZW5DYWNoZS5kZWxldGUob2xkZXN0LnZhbHVlKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkYXRhPzogeyBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXhwaXJlc0luPzogbnVtYmVyIH07XG59XG5cbi8qKiBPbmUgcmVhbCByb3VuZC10cmlwIHRvIHBsYXRmb3JtLiBUaHJvd3MgdGhlIHR3byB0eXBlZCBlcnJvcnMgYWJvdmUuICovXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtRXhjaGFuZ2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBjbGllbnQgPSBwbGF0Zm9ybUNsaWVudCgpO1xuICBsZXQgc3RhdHVzOiBudW1iZXI7XG4gIGxldCBib2R5OiBFeGNoYW5nZVJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PEV4Y2hhbmdlUmVzcG9uc2U+KCcvYXV0aC90b2tlbi9leGNoYW5nZScsIHsga2V5IH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgcm9sZTogJ21lbWJlcicsIG9yZ0lkOiBTWVNURU1fT1JHX0lEIH0pLFxuICAgICAgfSxcbiAgICAgIC8vIFRoZSBleGNoYW5nZSBpcyBhIHB1cmUgcmVhZCBvZiB0aGUga2V5IHJlY29yZCBwbHVzIGEgdG9rZW4gbWludCDigJQgc2FmZSB0b1xuICAgICAgLy8gcmV0cnksIGFuZCBhIGxvc3QgcmV0cnkgb25seSBjb3N0cyBvbmUgZXh0cmEgbWludC5cbiAgICAgIGlkZW1wb3RlbnQ6IHRydWUsXG4gICAgfSk7XG4gICAgc3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgYm9keSA9IHJlcy5ib2R5O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgbG9nZ2VyLndhcm4oJ0FjY2Vzcy1rZXkgZXhjaGFuZ2UgZmFpbGVkIHRvIHJlYWNoIHBsYXRmb3JtJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKCk7XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMgfHwgc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MDQpIHtcbiAgICByZWplY3Rpb25DYWNoZS5zZXQoaGFzaCwgRGF0ZS5ub3coKSArIE5FR0FUSVZFX1RUTF9NUyk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAncmVqZWN0ZWQnIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGJvZHk/LmRhdGE/LmFjY2Vzc1Rva2VuO1xuICBpZiAoc3RhdHVzID49IDQwMCB8fCB0eXBlb2YgYWNjZXNzVG9rZW4gIT09ICdzdHJpbmcnIHx8IGFjY2Vzc1Rva2VuLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIDQyOSBhbmQgNXh4IGxhbmQgaGVyZTogcGxhdGZvcm0gaXMgdXAgYnV0IGNhbid0IGFuc3dlciByaWdodCBub3csIHdoaWNoIGlzXG4gICAgLy8gXCJ1bmtub3duXCIsIG5vdCBcImludmFsaWRcIiDigJQgbmV2ZXIgY2FjaGUgaXQgYXMgYSByZWplY3Rpb24uXG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiBzdGF0dXMgPT09IDQyOSA/ICd0aHJvdHRsZWQnIDogJ3NlcnZlcl9lcnJvcicgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgdHRsU2Vjb25kcyA9IHR5cGVvZiBib2R5Py5kYXRhPy5leHBpcmVzSW4gPT09ICdudW1iZXInICYmIGJvZHkuZGF0YS5leHBpcmVzSW4gPiAwXG4gICAgPyBib2R5LmRhdGEuZXhwaXJlc0luXG4gICAgOiA2MDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZW50cnk6IENhY2hlRW50cnkgPSB7XG4gICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgIGV4cGlyZXNBdDogbm93ICsgdHRsU2Vjb25kcyAqIDEwMDAsXG4gICAgcmVmcmVzaEF0OiBqaXR0ZXJlZFJlZnJlc2hBdChub3csIHR0bFNlY29uZHMpLFxuICB9O1xuICB0b2tlbkNhY2hlLnNldChoYXNoLCBlbnRyeSk7XG4gIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgZXZpY3RJZkZ1bGwoKTtcbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3N1Y2Nlc3MnIH0pO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBFeGNoYW5nZSwgc2hhcmluZyBhIHNpbmdsZSBpbi1mbGlnaHQgcm91bmQtdHJpcCBwZXIga2V5LiAqL1xuZnVuY3Rpb24gZXhjaGFuZ2VPbmNlKGtleTogc3RyaW5nLCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk+IHtcbiAgY29uc3QgcGVuZGluZyA9IGluRmxpZ2h0LmdldChoYXNoKTtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICBjb25zdCBwcm9taXNlID0gcGVyZm9ybUV4Y2hhbmdlKGtleSwgaGFzaCkuZmluYWxseSgoKSA9PiBpbkZsaWdodC5kZWxldGUoaGFzaCkpO1xuICBpbkZsaWdodC5zZXQoaGFzaCwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG4vKipcbiAqIFRoZSBKV1QgZm9yIGBrZXlgLCBmcm9tIGNhY2hlIHdoZW4gcG9zc2libGUuIFRocm93cyB7QGxpbmsgQXBpS2V5UmVqZWN0ZWRFcnJvcn1cbiAqIHdoZW4gcGxhdGZvcm0gcmVmdXNlZCB0aGUga2V5IGFuZCB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB3aGVuXG4gKiBpdCBjb3VsZCBub3QgYmUgYXNrZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGNoYW5nZUFwaUtleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhhc2ggPSBoYXNoQXBpS2V5KGtleSk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgY29uc3QgcmVqZWN0ZWRVbnRpbCA9IHJlamVjdGlvbkNhY2hlLmdldChoYXNoKTtcbiAgaWYgKHJlamVjdGVkVW50aWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChyZWplY3RlZFVudGlsID4gbm93KSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVqZWN0ZWQnIH0pO1xuICAgICAgdGhyb3cgbmV3IEFwaUtleVJlamVjdGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcmVqZWN0aW9uQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVkID0gdG9rZW5DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgIGlmIChjYWNoZWQucmVmcmVzaEF0IDw9IG5vdyAmJiAhaW5GbGlnaHQuaGFzKGhhc2gpKSB7XG4gICAgICAvLyBFYXJseSByZWZyZXNoOiB3YXJtIHRoZSBjYWNoZSBXSVRIT1VUIG1ha2luZyB0aGlzIHJlcXVlc3Qgd2FpdC4gQSBmYWlsZWRcbiAgICAgIC8vIGJhY2tncm91bmQgcmVmcmVzaCBpcyBub3QgdGhpcyByZXF1ZXN0J3MgcHJvYmxlbSDigJQgdGhlIGNhY2hlZCB0b2tlbiBpc1xuICAgICAgLy8gc3RpbGwgdmFsaWQsIGFuZCB0aGUgbmV4dCByZXF1ZXN0IHBhc3QgZXhwaXJ5IGV4Y2hhbmdlcyBpbmxpbmUuXG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVmcmVzaCcgfSk7XG4gICAgICB2b2lkIGV4Y2hhbmdlT25jZShrZXksIGhhc2gpLmNhdGNoKCgpID0+IHsgLyogbG9nZ2VkICsgY291bnRlZCBpbiBwZXJmb3JtRXhjaGFuZ2UgKi8gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdoaXQnIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkLnRva2VuO1xuICB9XG5cbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ21pc3MnIH0pO1xuICByZXR1cm4gKGF3YWl0IGV4Y2hhbmdlT25jZShrZXksIGhhc2gpKS50b2tlbjtcbn1cblxuLyoqXG4gKiBEcm9wIGV2ZXJ5IGNhY2hlZCBleGNoYW5nZS4gRm9yIHRlc3RzIGFuZCBmb3IgYSBwcm9jZXNzIHRoYXQgd2FudHMgdG8gZm9yY2VcbiAqIHJlLXZhbGlkYXRpb247IHByb2R1Y3Rpb24gcmVsaWVzIG9uIHRoZSBUVExzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRBcGlLZXlFeGNoYW5nZUNhY2hlKCk6IHZvaWQge1xuICB0b2tlbkNhY2hlLmNsZWFyKCk7XG4gIHJlamVjdGlvbkNhY2hlLmNsZWFyKCk7XG4gIGluRmxpZ2h0LmNsZWFyKCk7XG59XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFaEQsdUZBQXVGO0FBQ3ZGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQztBQUU3Qix3REFBd0Q7QUFDeEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLGtGQUFrRjtBQUNsRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUVqQzs7MkRBRTJEO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDLGlGQUFpRjtBQUNqRixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUM1QyxZQUFZLE9BQU8sR0FBRywyQ0FBMkM7UUFDL0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRCx1RkFBdUY7QUFDdkYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtB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Q0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuRCwyRUFBMkU7WUFDM0UseUVBQXlFO1lBQ3pFLGtFQUFrRTtZQUNsRSxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNuRSxLQUFLLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUE2QyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRyYWRlIGFuIG9wYXF1ZSBhY2Nlc3Mga2V5IGZvciBhIHNob3J0LWxpdmVkIEpXVCwgb25jZSwgYW5kIGNhY2hlIGl0LlxuICpcbiAqIE9ubHkgcGxhdGZvcm0sIGJpbGxpbmcgYW5kIHF1b3RhIGhhdmUgTW9uZ29EQiwgc28gdGhlIHN0YXRlbGVzcyBzZXJ2aWNlc1xuICogY2Fubm90IGxvb2sgdXAgYSBrZXkgaGFzaCDigJQgYW5kIGFza2luZyBwbGF0Zm9ybSB0byB2YWxpZGF0ZSBFVkVSWSByZXF1ZXN0XG4gKiB3b3VsZCBwdXQgaXQgb24gdGhlIGhvdCBwYXRoIG9mIHRoZSB3aG9sZSBmbGVldC4gSW5zdGVhZCB0aGlzIG1vZHVsZSBkb2VzIHRoZVxuICogZXhjaGFuZ2Ugb25jZSBwZXIga2V5IChgUE9TVCAvYXV0aC90b2tlbi9leGNoYW5nZWApIGFuZCBjYWNoZXMgdGhlIHJldHVybmVkXG4gKiBKV1QgaW4tcHJvY2VzcyB1bnRpbCBpdCBleHBpcmVzLCBzbyBgcmVxdWlyZUF1dGhgIG9ubHkgZXZlciB2ZXJpZmllcyBhIEpXVC5cbiAqXG4gKiBQcm9wZXJ0aWVzIHRoYXQgbWF0dGVyOlxuICpcbiAqIC0gKipSZXZvY2F0aW9uIGxhdGVuY3kgaXMgYm91bmRlZCBieSB0aGUgdG9rZW4gVFRMKiogKDUgbWludXRlcykuIEEgcmV2b2tlZFxuICogICBrZXkgY2FuIG5vIGxvbmdlciBiZSBleGNoYW5nZWQsIGFuZCB0aGUgY2FjaGVkIHRva2VuIGl0IGFscmVhZHkgcHJvZHVjZWRcbiAqICAgZGllcyBvbiBpdHMgb3duLlxuICogLSAqKkVhcmx5LCBqaXR0ZXJlZCByZWZyZXNoLioqIFRoZSBjYWNoZWQgdG9rZW4gaXMgcmUtZXhjaGFuZ2VkIGluIHRoZVxuICogICBiYWNrZ3JvdW5kIGF0IH43NSUgb2YgaXRzIGxpZmUgKMKxMjAlIGppdHRlcikgc28gbm8gcmVxdWVzdCBldmVyIGJsb2NrcyBvblxuICogICB0aGUgZXhjaGFuZ2UsIGFuZCBhIGZsZWV0IG9mIHBvZHMgaG9sZGluZyB0aGUgc2FtZSBrZXkgZG9lc24ndCBzdGFtcGVkZVxuICogICBwbGF0Zm9ybSBhdCB0aGUgc2FtZSBpbnN0YW50LlxuICogLSAqKk9uZSBpbi1mbGlnaHQgZXhjaGFuZ2UgcGVyIGtleS4qKiBDb25jdXJyZW50IHJlcXVlc3RzIHNoYXJlIGEgcHJvbWlzZS5cbiAqIC0gKipTaG9ydCBuZWdhdGl2ZSBjYWNoZS4qKiBBIGtleSBwbGF0Zm9ybSByZWplY3RlZCBpcyByZW1lbWJlcmVkIGZvciAzMHMsIHNvXG4gKiAgIGEgbWlzY29uZmlndXJlZCBjbGllbnQgKG9yIGEgc2Nhbm5lcikgY2FuJ3QgdHVybiBldmVyeSByZXF1ZXN0IGludG8gYVxuICogICBwbGF0Zm9ybSByb3VuZC10cmlwLlxuICogLSAqKlBsYXRmb3JtIGRvd24gaXMgYSA1MDMsIG5ldmVyIGEgMjAwLioqIFRoZSBjYWxsZXIgbWFwc1xuICogICB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB0byBcInRyeSBhZ2FpblwiLCB3aXRoIGEgbWV0cmljIOKAlCBpdCBpc1xuICogICBkZWxpYmVyYXRlbHkgTk9UIGZhaWwtb3BlbjogYW4gdW52ZXJpZmlhYmxlIGNyZWRlbnRpYWwgaXMgbm90IGFuIGlkZW50aXR5LlxuICpcbiAqIFRoZSBleGNoYW5nZSByZXF1ZXN0IGl0c2VsZiBjYXJyaWVzIHRoaXMgc2VydmljZSdzIG93biBzaWduZWQgc2VydmljZSB0b2tlbixcbiAqIHdoaWNoIGlzIHdoYXQgZXhlbXB0cyBpdCBmcm9tIHBsYXRmb3JtJ3MgSVAta2V5ZWQgYC9hdXRoYCByYXRlIGxpbWl0ZXIgKGV2ZXJ5XG4gKiBwb2QncyBleGNoYW5nZXMgd291bGQgb3RoZXJ3aXNlIHNoYXJlIG9uZSBidWNrZXQpIGFuZCBuYW1lcyB0aGUgY2FsbGVyIGluXG4gKiBwbGF0Zm9ybSdzIGF1ZGl0IHRyYWlsLlxuICovXG5cbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9hdXRoLmpzJztcbmltcG9ydCB7IEludGVybmFsSHR0cENsaWVudCB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGhhc2hBcGlLZXkgfSBmcm9tICcuLi91dGlscy9hcGkta2V5LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhcGkta2V5LWV4Y2hhbmdlJyk7XG5cbi8qKiBNb3N0IGRpc3RpbmN0IGtleXMgaGVsZCBpbiB0aGUgcHJvY2Vzcy13aWRlIGNhY2hlIGJlZm9yZSB0aGUgb2xkZXN0IGFyZSBkcm9wcGVkLiAqL1xuY29uc3QgTUFYX0NBQ0hFRF9LRVlTID0gMTAwMDtcblxuLyoqIEhvdyBsb25nIGEgcGxhdGZvcm0gUkVKRUNUSU9OIGlzIHJlbWVtYmVyZWQgKG1zKS4gKi9cbmNvbnN0IE5FR0FUSVZFX1RUTF9NUyA9IDMwXzAwMDtcblxuLyoqIEZyYWN0aW9uIG9mIGEgdG9rZW4ncyBsaWZlIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBpcyBzdGFydGVkLiAqL1xuY29uc3QgUkVGUkVTSF9BVF9GUkFDVElPTiA9IDAuNzU7XG5cbi8qKiDCsSBqaXR0ZXIgYXBwbGllZCB0byB0aGUgcmVmcmVzaCBwb2ludCwgYXMgYSBmcmFjdGlvbiBvZiB0aGUgdG9rZW4ncyBsaWZlLlxuICogIFdpZGUgZW5vdWdoIHRvIGRlLXN5bmNocm9uaXplIGEgZmxlZXQsIG5hcnJvdyBlbm91Z2ggdG8gbGVhdmUgYSBjbGVhciB0YWlsIG9mXG4gKiAgc3RpbGwtdmFsaWQgdG9rZW4gYWZ0ZXIgdGhlIGxhdGVzdCBwb3NzaWJsZSByZWZyZXNoLiAqL1xuY29uc3QgUkVGUkVTSF9KSVRURVJfRlJBQ1RJT04gPSAwLjE7XG5cbi8qKiBUaGUga2V5IHdhcyBwcmVzZW50ZWQgdG8gcGxhdGZvcm0gYW5kIHJlZnVzZWQgKHVua25vd24sIHJldm9rZWQsIGV4cGlyZWQpLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleVJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQWNjZXNzIGtleSBpcyBpbnZhbGlkLCByZXZva2VkIG9yIGV4cGlyZWQnKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FwaUtleVJlamVjdGVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBQbGF0Zm9ybSBjb3VsZCBub3QgYmUgcmVhY2hlZCAob3IgYW5zd2VyZWQgNXh4KSDigJQgdGhlIGtleSdzIHZhbGlkaXR5IGlzIHVua25vd24uICovXG5leHBvcnQgY2xhc3MgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3InO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZUVudHJ5IHtcbiAgLyoqIFRoZSBleGNoYW5nZWQgSldULiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogRXBvY2ggbXMgYXQgd2hpY2ggdGhlIEpXVCBzdG9wcyBiZWluZyB1c2FibGUuICovXG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogRXBvY2ggbXMgYWZ0ZXIgd2hpY2ggYSBiYWNrZ3JvdW5kIHJlLWV4Y2hhbmdlIHNob3VsZCBiZSBzdGFydGVkLiAqL1xuICByZWZyZXNoQXQ6IG51bWJlcjtcbn1cblxuLyoqIENhY2hlIG9mIHN1Y2Nlc3NmdWwgZXhjaGFuZ2VzLCBrZXllZCBieSBgc2hhMjU2KGtleSlgIOKAlCBuZXZlciBieSB0aGUga2V5IGl0c2VsZi4gKi9cbmNvbnN0IHRva2VuQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbi8qKiBDYWNoZSBvZiByZWplY3Rpb25zLCBrZXllZCB0aGUgc2FtZSB3YXk7IHZhbHVlIGlzIHRoZSBlcG9jaCBtcyBpdCBleHBpcmVzLiAqL1xuY29uc3QgcmVqZWN0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuLyoqIEluLWZsaWdodCBleGNoYW5nZXMsIHNvIGNvbmN1cnJlbnQgcmVxdWVzdHMgZm9yIG9uZSBrZXkgc2hhcmUgYSByb3VuZC10cmlwLiAqL1xuY29uc3QgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxDYWNoZUVudHJ5Pj4oKTtcblxuLyoqIFRoZSBzZXJ2aWNlIG5hbWUgbWludGVkIGludG8gdGhlIGV4Y2hhbmdlIGNhbGwncyBvd24gc2VydmljZSB0b2tlbi4gKi9cbmxldCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAndW5rbm93bic7XG5cbi8qKlxuICogTmFtZSB0aGlzIHByb2Nlc3MgaW4gdGhlIGV4Y2hhbmdlIGNhbGwncyBzZXJ2aWNlIHRva2VuLiBDYWxsZWQgZnJvbVxuICogYHdpcmVTZXJ2aWNlU2VjdXJpdHlgIGF0IGJvb3QgKGFuZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UsIHdoaWNoIHdpcmVzIGl0c1xuICogYm9vdCBzZWN1cml0eSBieSBoYW5kKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUtleUV4Y2hhbmdlU2VydmljZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlcnZpY2VOYW1lID0gbmFtZTtcbn1cblxuLyoqIFBsYXRmb3JtJ3MgaW4tY2x1c3RlciBhZGRyZXNzIOKAlCB0aGUgc2FtZSBlbnYgcGFpciBldmVyeSBvdGhlciBjYWxsZXIgdXNlcy4gKi9cbmZ1bmN0aW9uIHBsYXRmb3JtQ2xpZW50KCk6IEludGVybmFsSHR0cENsaWVudCB7XG4gIHJldHVybiBuZXcgSW50ZXJuYWxIdHRwQ2xpZW50KHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX0hPU1QgfHwgJ3BsYXRmb3JtJyxcbiAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX1BPUlQgfHwgJzMwMDAnLCAxMCksXG4gICAgdGltZW91dDogcGFyc2VJbnQocHJvY2Vzcy5lbnYuQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TIHx8ICczMDAwJywgMTApLFxuICB9KTtcbn1cblxuLyoqIFRoZSBlcG9jaCBtcyBhdCB3aGljaCBhIHRva2VuIHdpdGggYHR0bFNlY29uZHNgIG9mIGxpZmUgc2hvdWxkIGJlIHJlZnJlc2hlZCBlYXJseS4gKi9cbmZ1bmN0aW9uIGppdHRlcmVkUmVmcmVzaEF0KGlzc3VlZEF0OiBudW1iZXIsIHR0bFNlY29uZHM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGxpZmVNcyA9IHR0bFNlY29uZHMgKiAxMDAwO1xuICBjb25zdCBqaXR0ZXIgPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OO1xuICAvLyBDbGFtcCBpbnRvICgwLCAxKSBzbyB0aGUgcmVmcmVzaCBwb2ludCBpcyBhbHdheXMgYmVmb3JlIGV4cGlyeSBhbmQgbmV2ZXIgaW5cbiAgLy8gdGhlIHBhc3QsIHdoYXRldmVyIFRUTCBwbGF0Zm9ybSByZXR1cm5zLlxuICBjb25zdCBmcmFjdGlvbiA9IE1hdGgubWluKDAuOTUsIE1hdGgubWF4KDAuMSwgUkVGUkVTSF9BVF9GUkFDVElPTiArIGppdHRlcikpO1xuICByZXR1cm4gaXNzdWVkQXQgKyBsaWZlTXMgKiBmcmFjdGlvbjtcbn1cblxuLyoqIERyb3AgdGhlIG9sZGVzdCBlbnRyaWVzIG9uY2UgdGhlIGNhY2hlIGlzIG92ZXIgaXRzIGNhcCAoa2V5cyBhcmUgbG9uZy1saXZlZCwgdG9rZW5zIGFyZSBub3QpLiAqL1xuZnVuY3Rpb24gZXZpY3RJZkZ1bGwoKTogdm9pZCB7XG4gIGlmICh0b2tlbkNhY2hlLnNpemUgPD0gTUFYX0NBQ0hFRF9LRVlTKSByZXR1cm47XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGZvciAoY29uc3QgW2hhc2gsIGVudHJ5XSBvZiB0b2tlbkNhY2hlKSB7XG4gICAgaWYgKGVudHJ5LmV4cGlyZXNBdCA8PSBub3cpIHRva2VuQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICB9XG4gIC8vIE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyIOKAlCBkcm9wIGZyb20gdGhlIGZyb250IHVudGlsIGJhY2sgdW5kZXIgdGhlIGNhcC5cbiAgd2hpbGUgKHRva2VuQ2FjaGUuc2l6ZSA+IE1BWF9DQUNIRURfS0VZUykge1xuICAgIGNvbnN0IG9sZGVzdCA9IHRva2VuQ2FjaGUua2V5cygpLm5leHQoKTtcbiAgICBpZiAob2xkZXN0LmRvbmUpIGJyZWFrO1xuICAgIHRva2VuQ2FjaGUuZGVsZXRlKG9sZGVzdC52YWx1ZSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEV4Y2hhbmdlUmVzcG9uc2Uge1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgZGF0YT86IHsgYWNjZXNzVG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNJbj86IG51bWJlciB9O1xufVxuXG4vKiogT25lIHJlYWwgcm91bmQtdHJpcCB0byBwbGF0Zm9ybS4gVGhyb3dzIHRoZSB0d28gdHlwZWQgZXJyb3JzIGFib3ZlLiAqL1xuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUV4Y2hhbmdlKGtleTogc3RyaW5nLCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk+IHtcbiAgY29uc3QgY2xpZW50ID0gcGxhdGZvcm1DbGllbnQoKTtcbiAgbGV0IHN0YXR1czogbnVtYmVyO1xuICBsZXQgYm9keTogRXhjaGFuZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucG9zdDxFeGNoYW5nZVJlc3BvbnNlPignL2F1dGgvdG9rZW4vZXhjaGFuZ2UnLCB7IGtleSB9LCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWUsIHJvbGU6ICdtZW1iZXInLCBvcmdJZDogU1lTVEVNX09SR19JRCB9KSxcbiAgICAgIH0sXG4gICAgICAvLyBUaGUgZXhjaGFuZ2UgaXMgYSBwdXJlIHJlYWQgb2YgdGhlIGtleSByZWNvcmQgcGx1cyBhIHRva2VuIG1pbnQg4oCUIHNhZmUgdG9cbiAgICAgIC8vIHJldHJ5LCBhbmQgYSBsb3N0IHJldHJ5IG9ubHkgY29zdHMgb25lIGV4dHJhIG1pbnQuXG4gICAgICBpZGVtcG90ZW50OiB0cnVlLFxuICAgIH0pO1xuICAgIHN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgIGJvZHkgPSByZXMuYm9keTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGxvZ2dlci53YXJuKCdBY2Nlc3Mta2V5IGV4Y2hhbmdlIGZhaWxlZCB0byByZWFjaCBwbGF0Zm9ybScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKCk7XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMgfHwgc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MDQpIHtcbiAgICByZWplY3Rpb25DYWNoZS5zZXQoaGFzaCwgRGF0ZS5ub3coKSArIE5FR0FUSVZFX1RUTF9NUyk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAncmVqZWN0ZWQnIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGJvZHk/LmRhdGE/LmFjY2Vzc1Rva2VuO1xuICBpZiAoc3RhdHVzID49IDQwMCB8fCB0eXBlb2YgYWNjZXNzVG9rZW4gIT09ICdzdHJpbmcnIHx8IGFjY2Vzc1Rva2VuLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIDQyOSBhbmQgNXh4IGxhbmQgaGVyZTogcGxhdGZvcm0gaXMgdXAgYnV0IGNhbid0IGFuc3dlciByaWdodCBub3csIHdoaWNoIGlzXG4gICAgLy8gXCJ1bmtub3duXCIsIG5vdCBcImludmFsaWRcIiDigJQgbmV2ZXIgY2FjaGUgaXQgYXMgYSByZWplY3Rpb24uXG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiBzdGF0dXMgPT09IDQyOSA/ICd0aHJvdHRsZWQnIDogJ3NlcnZlcl9lcnJvcicgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgdHRsU2Vjb25kcyA9IHR5cGVvZiBib2R5Py5kYXRhPy5leHBpcmVzSW4gPT09ICdudW1iZXInICYmIGJvZHkuZGF0YS5leHBpcmVzSW4gPiAwXG4gICAgPyBib2R5LmRhdGEuZXhwaXJlc0luXG4gICAgOiA2MDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZW50cnk6IENhY2hlRW50cnkgPSB7XG4gICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgIGV4cGlyZXNBdDogbm93ICsgdHRsU2Vjb25kcyAqIDEwMDAsXG4gICAgcmVmcmVzaEF0OiBqaXR0ZXJlZFJlZnJlc2hBdChub3csIHR0bFNlY29uZHMpLFxuICB9O1xuICB0b2tlbkNhY2hlLnNldChoYXNoLCBlbnRyeSk7XG4gIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgZXZpY3RJZkZ1bGwoKTtcbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3N1Y2Nlc3MnIH0pO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBFeGNoYW5nZSwgc2hhcmluZyBhIHNpbmdsZSBpbi1mbGlnaHQgcm91bmQtdHJpcCBwZXIga2V5LiAqL1xuZnVuY3Rpb24gZXhjaGFuZ2VPbmNlKGtleTogc3RyaW5nLCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk+IHtcbiAgY29uc3QgcGVuZGluZyA9IGluRmxpZ2h0LmdldChoYXNoKTtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICBjb25zdCBwcm9taXNlID0gcGVyZm9ybUV4Y2hhbmdlKGtleSwgaGFzaCkuZmluYWxseSgoKSA9PiBpbkZsaWdodC5kZWxldGUoaGFzaCkpO1xuICBpbkZsaWdodC5zZXQoaGFzaCwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG4vKipcbiAqIFRoZSBKV1QgZm9yIGBrZXlgLCBmcm9tIGNhY2hlIHdoZW4gcG9zc2libGUuIFRocm93cyB7QGxpbmsgQXBpS2V5UmVqZWN0ZWRFcnJvcn1cbiAqIHdoZW4gcGxhdGZvcm0gcmVmdXNlZCB0aGUga2V5IGFuZCB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB3aGVuXG4gKiBpdCBjb3VsZCBub3QgYmUgYXNrZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGNoYW5nZUFwaUtleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhhc2ggPSBoYXNoQXBpS2V5KGtleSk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgY29uc3QgcmVqZWN0ZWRVbnRpbCA9IHJlamVjdGlvbkNhY2hlLmdldChoYXNoKTtcbiAgaWYgKHJlamVjdGVkVW50aWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChyZWplY3RlZFVudGlsID4gbm93KSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVqZWN0ZWQnIH0pO1xuICAgICAgdGhyb3cgbmV3IEFwaUtleVJlamVjdGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcmVqZWN0aW9uQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVkID0gdG9rZW5DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgIGlmIChjYWNoZWQucmVmcmVzaEF0IDw9IG5vdyAmJiAhaW5GbGlnaHQuaGFzKGhhc2gpKSB7XG4gICAgICAvLyBFYXJseSByZWZyZXNoOiB3YXJtIHRoZSBjYWNoZSBXSVRIT1VUIG1ha2luZyB0aGlzIHJlcXVlc3Qgd2FpdC4gQSBmYWlsZWRcbiAgICAgIC8vIGJhY2tncm91bmQgcmVmcmVzaCBpcyBub3QgdGhpcyByZXF1ZXN0J3MgcHJvYmxlbSDigJQgdGhlIGNhY2hlZCB0b2tlbiBpc1xuICAgICAgLy8gc3RpbGwgdmFsaWQsIGFuZCB0aGUgbmV4dCByZXF1ZXN0IHBhc3QgZXhwaXJ5IGV4Y2hhbmdlcyBpbmxpbmUuXG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVmcmVzaCcgfSk7XG4gICAgICB2b2lkIGV4Y2hhbmdlT25jZShrZXksIGhhc2gpLmNhdGNoKCgpID0+IHsgLyogbG9nZ2VkICsgY291bnRlZCBpbiBwZXJmb3JtRXhjaGFuZ2UgKi8gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdoaXQnIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkLnRva2VuO1xuICB9XG5cbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ21pc3MnIH0pO1xuICByZXR1cm4gKGF3YWl0IGV4Y2hhbmdlT25jZShrZXksIGhhc2gpKS50b2tlbjtcbn1cblxuLyoqXG4gKiBEcm9wIGV2ZXJ5IGNhY2hlZCBleGNoYW5nZS4gRm9yIHRlc3RzIGFuZCBmb3IgYSBwcm9jZXNzIHRoYXQgd2FudHMgdG8gZm9yY2VcbiAqIHJlLXZhbGlkYXRpb247IHByb2R1Y3Rpb24gcmVsaWVzIG9uIHRoZSBUVExzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRBcGlLZXlFeGNoYW5nZUNhY2hlKCk6IHZvaWQge1xuICB0b2tlbkNhY2hlLmNsZWFyKCk7XG4gIHJlamVjdGlvbkNhY2hlLmNsZWFyKCk7XG4gIGluRmxpZ2h0LmNsZWFyKCk7XG59XG4iXX0=
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
import { createEnvRedisClient } from './env-redis.js';
|
|
4
4
|
import { createLogger } from '../utils/logger.js';
|
|
5
5
|
import { emitCounter } from '../utils/metric-emitter.js';
|
|
6
|
+
import { errorMessage } from '../utils/response.js';
|
|
6
7
|
const logger = createLogger('audit-spool');
|
|
7
8
|
const DEFAULT_SPOOL_KEY = 'audit:spool';
|
|
8
9
|
const DEFAULT_MAX_DEPTH = 10_000;
|
|
9
10
|
/** Guard so a pathological in-progress list can't spin `recover`/`take` forever. */
|
|
10
11
|
const MAX_MOVE_ITERATIONS = 100_000;
|
|
11
12
|
function errMsg(err) {
|
|
12
|
-
return
|
|
13
|
+
return errorMessage(err);
|
|
13
14
|
}
|
|
14
15
|
function safeParse(raw) {
|
|
15
16
|
try {
|
|
@@ -168,4 +169,4 @@ export function createEnvRedisAuditSpool(opts = {}) {
|
|
|
168
169
|
logger.info('Redis audit spool initialized');
|
|
169
170
|
return createRedisAuditSpool(inst, opts);
|
|
170
171
|
}
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtc3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvYXVkaXQtc3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQStEM0MsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUM7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDakMsb0ZBQW9GO0FBQ3BGLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBRXBDLFNBQVMsTUFBTSxDQUFDLEdBQVk7SUFDMUIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVc7SUFDNUIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQW9CLENBQUM7UUFDbEQsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEtBQXNCLEVBQ3RCLElBQUksR0FBd0MsRUFBRTtJQUU5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLGlCQUFpQixDQUFDO0lBQzFDLDJFQUEyRTtJQUMzRSx3RUFBd0U7SUFDeEUsOEVBQThFO0lBQzlFLHNFQUFzRTtJQUN0RSxNQUFNLGFBQWEsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsQ0FBQztJQUVqRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFzQixFQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakcsT0FBTztRQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSztZQUNqQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQzFELFdBQVcsQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUM7b0JBQ25CLGtFQUFrRTtvQkFDbEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztvQkFDL0IsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDbEYsTUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RixDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ1osSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxHQUFzQixFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQy9CLHdFQUF3RTtvQkFDeEUscUVBQXFFO29CQUNyRSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ25FLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUzt3QkFBRSxNQUFNO29CQUM3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlCLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ1gsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25CLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix1RUFBdUU7d0JBQ3ZFLGlDQUFpQzt3QkFDakMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3hDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNuRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87WUFDZixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ2pDLElBQUksQ0FBQztnQkFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUM1QixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDakQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTztZQUNuQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ2pDLElBQUksQ0FBQztnQkFDSCx5RUFBeUU7Z0JBQ3pFLHVFQUF1RTtnQkFDdkUseUVBQXlFO2dCQUN6RSxvRUFBb0U7Z0JBQ3BFLEVBQUU7Z0JBQ0YseUVBQXlFO2dCQUN6RSwwRUFBMEU7Z0JBQzFFLHNFQUFzRTtnQkFDdEUsMkVBQTJFO2dCQUMzRSwwRUFBMEU7Z0JBQzFFLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM3QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzVCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLE9BQU87WUFDWCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDN0MseUVBQXlFO29CQUN6RSxvRUFBb0U7b0JBQ3BFLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbkUsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTO3dCQUFFLE1BQU07b0JBQzdDLFNBQVMsRUFBRSxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLFdBQVcsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsbURBQW1ELEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxLQUFLO1lBQ1QsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsSUFBSSxHQUF3QyxFQUFFO0lBQ3JGLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFrQixhQUFhLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUM3QyxPQUFPLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50IH0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZW1vdGVBdWRpdEV2ZW50IH0gZnJvbSAnLi9yZW1vdGUtYXVkaXQtY2xpZW50LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhdWRpdC1zcG9vbCcpO1xuXG4vKiogQSBidWZmZXJlZCBlbWlzc2lvbjogdGhlIGV2ZW50IHBsdXMgd2hpY2ggc2VydmljZSBtdXN0IHJlLWRlbGl2ZXIgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0U3Bvb2xFbnRyeSB7XG4gIGV2ZW50OiBSZW1vdGVBdWRpdEV2ZW50O1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIER1cmFibGUgYnVmZmVyIGZvciBhdWRpdCBldmVudHMgdGhhdCBmYWlsZWQgTElWRSBkZWxpdmVyeSB0byB0aGUgcGxhdGZvcm1cbiAqIChyZXRyaWVzIGV4aGF1c3RlZCBkdXJpbmcgYSBzdXN0YWluZWQgb3V0YWdlKS4gV2l0aG91dCB0aGlzLCB0aGUgYXVkaXQgdHJhaWwg4oCUXG4gKiBhIHNlY3VyaXR5IGxvZyDigJQgaXMgc2lsZW50bHkgbG9zdCB0aGUgbW9tZW50IHRoZSBwbGF0Zm9ybSBpcyBkb3duIGZvciBsb25nZXJcbiAqIHRoYW4gdGhlIGNsaWVudCdzIHNtYWxsIHJldHJ5IGJ1ZGdldC5cbiAqXG4gKiBDb250cmFjdDpcbiAqIC0gQk9VTkRFRC4gQSBzZWN1cml0eSBsb2cgbXVzdCBkZWdyYWRlIHRvIFwiZHJvcHBlZCB0aGUgb2xkZXN0LCBsb3VkbHlcIiAoYVxuICogICBtZXRyaWMpIHJhdGhlciB0aGFuIGdyb3cgd2l0aG91dCBsaW1pdCBhbmQgT09NIHRoZSBlbWl0dGVyLlxuICogLSBGQUlMLVNBRkUuIEV2ZXJ5IG1ldGhvZCBzd2FsbG93cyBpdHMgb3duIGVycm9ycyDigJQgYSBicm9rZW4vdW5yZWFjaGFibGUgc3Bvb2xcbiAqICAgbXVzdCBuZXZlciBicmVhayBvciBibG9jayB0aGUgYXVkaXQgZW1pc3Npb24gcGF0aCAod2hpY2ggaXMgaXRzZWxmXG4gKiAgIGZpcmUtYW5kLWZvcmdldCkuIEEgc3Bvb2wgcHJvYmxlbSBkZWdyYWRlcyB0byB0aGUgcHJlLXNwb29sIGJlaGF2aW9yLlxuICogLSBPcmRlcmluZyBpcyBiZXN0LWVmZm9ydC4gUmUtZGVsaXZlcmVkIGV2ZW50cyBjaGFpbiBhdCByZS1kZWxpdmVyeSB0aW1lXG4gKiAgICh0aGF0J3Mgd2hlbiB0aGUgcGxhdGZvcm0gaW5zZXJ0cyB0aGVtKSwgc28gZWFjaCBldmVudCBhbHNvIGNhcnJpZXMgYW5cbiAqICAgYG9jY3VycmVkQXRgIHN0YW1wZWQgYXQgZW1pc3Npb24gZm9yIHJldmlld2VycyDigJQgc2VlIFJlbW90ZUF1ZGl0RXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRTcG9vbCB7XG4gIC8qKiBCdWZmZXIgYW4gZXZlbnQgdGhhdCBmYWlsZWQgbGl2ZSBkZWxpdmVyeS4gKi9cbiAgZW5xdWV1ZShlbnRyeTogQXVkaXRTcG9vbEVudHJ5KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEF0b21pY2FsbHkgTU9WRSB1cCB0byBgbWF4YCBidWZmZXJlZCBlbnRyaWVzIG9udG8gYW4gaW4tcHJvZ3Jlc3MgbGlzdCBhbmRcbiAgICogcmV0dXJuIHRoZW0uIEJlY2F1c2UgdGhlIGVudHJpZXMgYXJlIG1vdmVkIChub3QgcG9wcGVkLWFuZC1kcm9wcGVkKSwgYSBjcmFzaFxuICAgKiBtaWQtZHJhaW4gbGVhdmVzIHRoZW0gcmVjb3ZlcmFibGUgb24gdGhlIGluLXByb2dyZXNzIGxpc3Qg4oCUIHNlZSBgcmVjb3ZlcmAuXG4gICAqIEVhY2ggdGFrZW4gZW50cnkgTVVTVCBiZSByZXNvbHZlZCB3aXRoIGV4YWN0bHkgb25lIG9mIGBhY2tgIChkZWxpdmVyZWQpIG9yXG4gICAqIGByZXF1ZXVlYCAoc3RpbGwgZmFpbGluZyksIG9yIGl0IGxpbmdlcnMgb24gdGhlIGluLXByb2dyZXNzIGxpc3QgdW50aWwgdGhlXG4gICAqIG5leHQgYHJlY292ZXJgLlxuICAgKi9cbiAgdGFrZShtYXg6IG51bWJlcik6IFByb21pc2U8QXVkaXRTcG9vbEVudHJ5W10+O1xuICAvKiogQWNrbm93bGVkZ2Ugc3VjY2Vzc2Z1bGx5IHJlLWRlbGl2ZXJlZCBlbnRyaWVzIOKAlCByZW1vdmVzIHRoZW0gZnJvbSB0aGVcbiAgICogIGluLXByb2dyZXNzIGxpc3Qgc28gdGhleSBhcmUgbm90IHJlY292ZXJlZCBhZ2Fpbi4gKi9cbiAgYWNrKGVudHJpZXM6IEF1ZGl0U3Bvb2xFbnRyeVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJldHVybiBlbnRyaWVzIHdob3NlIHJlLWRlbGl2ZXJ5IGZhaWxlZCB0byB0aGUgSEVBRCBvZiB0aGUgYnVmZmVyIChyZXRyaWVkXG4gICAqICBmaXJzdCkgYW5kIGNsZWFyIHRoZW0gZnJvbSB0aGUgaW4tcHJvZ3Jlc3MgbGlzdC4gQmVzdC1lZmZvcnQuICovXG4gIHJlcXVldWUoZW50cmllczogQXVkaXRTcG9vbEVudHJ5W10pOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUmVjbGFpbSBhbnkgZW50cmllcyBzdHJhbmRlZCBvbiB0aGUgaW4tcHJvZ3Jlc3MgbGlzdCBieSBhIHByaW9yIGNyYXNoLFxuICAgKiAgbW92aW5nIHRoZW0gYmFjayB0byB0aGUgaGVhZCBvZiB0aGUgbWFpbiBidWZmZXIuIENhbGwgb25jZSBhdCBzdGFydHVwLlxuICAgKiAgUmV0dXJucyB0aGUgbnVtYmVyIHJlY2xhaW1lZC4gKi9cbiAgcmVjb3ZlcigpOiBQcm9taXNlPG51bWJlcj47XG4gIC8qKiBBcHByb3hpbWF0ZSBjdXJyZW50IGRlcHRoIChmb3IgbWV0cmljcyAvIGRyYWluIGRlY2lzaW9ucykuICovXG4gIGRlcHRoKCk6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuLyoqIE1pbmltYWwgUmVkaXMgTElTVCBzdXJmYWNlIHRoZSBzcG9vbCBuZWVkcyAoYSBzdWJzZXQgb2YgaW9yZWRpcykuICovXG5pbnRlcmZhY2UgUmVkaXNMaXN0Q2xpZW50IHtcbiAgcnB1c2goa2V5OiBzdHJpbmcsIC4uLnZhbHVlczogc3RyaW5nW10pOiBQcm9taXNlPG51bWJlcj47XG4gIGxwdXNoKGtleTogc3RyaW5nLCAuLi52YWx1ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICBscG9wKGtleTogc3RyaW5nLCBjb3VudDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmdbXSB8IG51bGw+O1xuICBsdHJpbShrZXk6IHN0cmluZywgc3RhcnQ6IG51bWJlciwgc3RvcDogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPjtcbiAgbGxlbihrZXk6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqIEF0b21pY2FsbHkgcG9wIGZyb20gb25lIGxpc3QgZW5kIGFuZCBwdXNoIHRvIGFub3RoZXIgKFJlZGlzIOKJpSA2LjIpLiAqL1xuICBsbW92ZShzb3VyY2U6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZywgZnJvbTogJ0xFRlQnIHwgJ1JJR0hUJywgdG86ICdMRUZUJyB8ICdSSUdIVCcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICAvKiogUmVtb3ZlIGBjb3VudGAgb2NjdXJyZW5jZXMgb2YgYHZhbHVlYCBmcm9tIGEgbGlzdC4gKi9cbiAgbHJlbShrZXk6IHN0cmluZywgY291bnQ6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuY29uc3QgREVGQVVMVF9TUE9PTF9LRVkgPSAnYXVkaXQ6c3Bvb2wnO1xuY29uc3QgREVGQVVMVF9NQVhfREVQVEggPSAxMF8wMDA7XG4vKiogR3VhcmQgc28gYSBwYXRob2xvZ2ljYWwgaW4tcHJvZ3Jlc3MgbGlzdCBjYW4ndCBzcGluIGByZWNvdmVyYC9gdGFrZWAgZm9yZXZlci4gKi9cbmNvbnN0IE1BWF9NT1ZFX0lURVJBVElPTlMgPSAxMDBfMDAwO1xuXG5mdW5jdGlvbiBlcnJNc2coZXJyOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbn1cblxuZnVuY3Rpb24gc2FmZVBhcnNlKHJhdzogc3RyaW5nKTogQXVkaXRTcG9vbEVudHJ5IHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIEF1ZGl0U3Bvb2xFbnRyeTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHBhcnNlZC5ldmVudCAmJiBwYXJzZWQuc2VydmljZU5hbWUgPyBwYXJzZWQgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlZGlzLUxJU1QtYmFja2VkIHNwb29sLiBEdXJhYmxlIGFjcm9zcyBwcm9jZXNzIHJlc3RhcnRzICh1bmxpa2UgYW4gaW4tbWVtb3J5XG4gKiBvciBwZXItcG9kLWRpc2sgYnVmZmVyKSwgc2hhcmVkIGJ5IGFsbCByZXBsaWNhcyBvZiBhIHNlcnZpY2UsIGFuZCBib3VuZGVkIHZpYVxuICogYSB0cmltLXRvLXRhaWwgb24gb3ZlcmZsb3cgKGRyb3BzIHRoZSBPTERFU1QsIGVtaXR0aW5nIGBhdWRpdF9zcG9vbF9kcm9wcGVkX3RvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0F1ZGl0U3Bvb2woXG4gIHJlZGlzOiBSZWRpc0xpc3RDbGllbnQsXG4gIG9wdHM6IHsgbWF4RGVwdGg/OiBudW1iZXI7IGtleT86IHN0cmluZyB9ID0ge30sXG4pOiBBdWRpdFNwb29sIHtcbiAgY29uc3Qga2V5ID0gb3B0cy5rZXkgPz8gREVGQVVMVF9TUE9PTF9LRVk7XG4gIC8vIFRoZSBpbi1wcm9ncmVzcyBcInByb2Nlc3NpbmdcIiBsaXN0IOKAlCBhIHRha2VuIGJhdGNoIGxpdmVzIGhlcmUgdW50aWwgaXQgaXNcbiAgLy8gYWNrZWQgKGRlbGl2ZXJlZCkgb3IgcmVxdWV1ZWQgKHN0aWxsIGZhaWxpbmcpLiBJdCBpcyBhIHNlY3VyaXR5IGxvZydzXG4gIC8vIGR1cmFiaWxpdHkgbmV0OiBhIGNyYXNoIGJldHdlZW4gdGFrZSBhbmQgYWNrL3JlcXVldWUgbGVhdmVzIHRoZSBiYXRjaCBoZXJlLFxuICAvLyBhbmQgYHJlY292ZXJgIHJlY2xhaW1zIGl0IG9uIHJlc3RhcnQgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgaXQuXG4gIGNvbnN0IGluUHJvZ3Jlc3NLZXkgPSBgJHtrZXl9OmluZmxpZ2h0YDtcbiAgY29uc3QgbWF4RGVwdGggPSBNYXRoLm1heCgxLCBvcHRzLm1heERlcHRoID8/IERFRkFVTFRfTUFYX0RFUFRIKTtcblxuICAvLyBUaGUgRVhBQ1Qgc2VyaWFsaXplZCBzdHJpbmcgZWFjaCByZXR1cm5lZCBlbnRyeSB3YXMgcGFyc2VkIGZyb20sIHNvIGBhY2tgIC9cbiAgLy8gYHJlcXVldWVgIGNhbiBMUkVNIHRoZSBwcmVjaXNlIHZhbHVlIG9mZiB0aGUgaW4tcHJvZ3Jlc3MgbGlzdC4gS2V5ZWQgYnkgdGhlXG4gIC8vIHJldHVybmVkIG9iamVjdCBpZGVudGl0eSAodGhlIGRyYWluIGNvbnN1bWVyIHBhc3NlcyB0aGUgU0FNRSBvYmplY3RzIGJhY2spLFxuICAvLyBzbyBpdCBuZWVkcyBubyBzdGFibGUgcmUtc2VyaWFsaXphdGlvbi4gV2Vha01hcCDihpIgZW50cmllcyBHQyBuYXR1cmFsbHkuXG4gIGNvbnN0IHJhd0J5RW50cnkgPSBuZXcgV2Vha01hcDxBdWRpdFNwb29sRW50cnksIHN0cmluZz4oKTtcbiAgY29uc3QgcmF3T2YgPSAoZW50cnk6IEF1ZGl0U3Bvb2xFbnRyeSk6IHN0cmluZyA9PiByYXdCeUVudHJ5LmdldChlbnRyeSkgPz8gSlNPTi5zdHJpbmdpZnkoZW50cnkpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZW5xdWV1ZShlbnRyeSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVuID0gYXdhaXQgcmVkaXMucnB1c2goa2V5LCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuICAgICAgICBlbWl0Q291bnRlcignYXVkaXRfc3Bvb2xfZW5xdWV1ZWRfdG90YWwnLCB7IHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgICAgICBpZiAobGVuID4gbWF4RGVwdGgpIHtcbiAgICAgICAgICAvLyBLZWVwIG9ubHkgdGhlIG5ld2VzdCBgbWF4RGVwdGhgOyBkcm9wIHRoZSBvdmVyZmxvdyBhdCB0aGUgaGVhZC5cbiAgICAgICAgICBjb25zdCBkcm9wcGVkID0gbGVuIC0gbWF4RGVwdGg7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHRyaW0oa2V5LCBkcm9wcGVkLCAtMSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2F1ZGl0X3Nwb29sX2Ryb3BwZWRfdG90YWwnLCB7IHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0sIGRyb3BwZWQpO1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBvdmVyZmxvdyDigJQgZHJvcHBlZCBvbGRlc3QgYnVmZmVyZWQgZXZlbnRzJywgeyBkcm9wcGVkLCBtYXhEZXB0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBlbnF1ZXVlIGZhaWxlZCAoZXZlbnQgbG9zdCknLCB7IGVycm9yOiBlcnJNc2coZXJyKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdGFrZShtYXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG91dDogQXVkaXRTcG9vbEVudHJ5W10gPSBbXTtcbiAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBtYXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAvLyBBdG9taWNhbGx5IE1PVkUgaGVhZOKGkmluLXByb2dyZXNzLXRhaWwgc28gdGhlIGVudHJ5IGlzIG5ldmVyIGluIGxpbWJvOlxuICAgICAgICAgIC8vIGl0IGlzIG9uIGV4YWN0bHkgb25lIGxpc3QgYXQgYWxsIHRpbWVzLCByZWNvdmVyYWJsZSBhZnRlciBhIGNyYXNoLlxuICAgICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmxtb3ZlKGtleSwgaW5Qcm9ncmVzc0tleSwgJ0xFRlQnLCAnUklHSFQnKTtcbiAgICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBzYWZlUGFyc2UocmF3KTtcbiAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICByYXdCeUVudHJ5LnNldChwYXJzZWQsIHJhdyk7XG4gICAgICAgICAgICBvdXQucHVzaChwYXJzZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb3JydXB0IHBheWxvYWQg4oCUIGRyb3AgaXQgb2ZmIHRoZSBpbi1wcm9ncmVzcyBsaXN0IHNvIGl0IGNhbid0IHdlZGdlXG4gICAgICAgICAgICAvLyB0aGUgZHJhaW4sIGFuZCBhY2NvdW50IGZvciBpdC5cbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLmxyZW0oaW5Qcm9ncmVzc0tleSwgMSwgcmF3KTtcbiAgICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9zcG9vbF9kcm9wcGVkX3RvdGFsJywgeyBzZXJ2aWNlOiAndW5rbm93bicgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0F1ZGl0IHNwb29sIHRha2UgZmFpbGVkJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWNrKGVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHJlbShpblByb2dyZXNzS2V5LCAxLCByYXdPZihlbnRyeSkpO1xuICAgICAgICAgIHJhd0J5RW50cnkuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBhY2sgZmFpbGVkIChtYXkgcmUtZGVsaXZlciBvbiByZWNvdmVyKScsIHsgZXJyb3I6IGVyck1zZyhlcnIpIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXVlKGVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUHV0IGZhaWxlZCByZS1kZWxpdmVyaWVzIGJhY2sgYXQgdGhlIEhFQUQgc28gdGhleSdyZSByZXRyaWVkIGZpcnN0IGFuZFxuICAgICAgICAvLyByb3VnaCBlbWlzc2lvbiBvcmRlciBpcyBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBvdXRhZ2Ug4oCUIGFuZCBjbGVhciB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhlIGluLXByb2dyZXNzIGxpc3Qgc28gYHJlY292ZXJgIGRvZXNuJ3QgZG91YmxlIHRoZW0uIEl0ZXJhdGUgaW5cbiAgICAgICAgLy8gcmV2ZXJzZSBzbyBscHVzaCByZXN0b3JlcyB0aGUgYmF0Y2gncyBvcmlnaW5hbCBvcmRlciBhdCB0aGUgaGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gT1JERVJJTkcgSU5WQVJJQU5UIChhdC1sZWFzdC1vbmNlKTogbHB1c2ggdG8gdGhlIG1haW4gbGlzdCBGSVJTVCwgVEhFTlxuICAgICAgICAvLyBscmVtIGZyb20gaW4tcHJvZ3Jlc3MuIEEgY3Jhc2ggYmV0d2VlbiB0aGUgdHdvIGxlYXZlcyB0aGUgZW50cnkgb24gQk9USFxuICAgICAgICAvLyBsaXN0cyDihpIgaGFybWxlc3MgZG91YmxlLWRlbGl2ZXJ5IChkZWR1cGVkIGRvd25zdHJlYW0gYnkgaWRlbXBvdGVuY3lcbiAgICAgICAgLy8gcmV1c2UpLCBuZXZlciBhIExPU1MuIFRoZSByZXZlcnNlIG9yZGVyIChscmVtIHRoZW4gbHB1c2gpIHdvdWxkIGRyb3AgdGhlXG4gICAgICAgIC8vIGV2ZW50IG91dHJpZ2h0IG9uIGEgY3Jhc2ggaW4gdGhlIGdhcCwgd2hpY2ggYSBzZWN1cml0eSBsb2cgbXVzdCBub3QgZG8uXG4gICAgICAgIGZvciAobGV0IGkgPSBlbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgcmF3ID0gcmF3T2YoZW50cmllc1tpXSk7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHB1c2goa2V5LCByYXcpO1xuICAgICAgICAgIGF3YWl0IHJlZGlzLmxyZW0oaW5Qcm9ncmVzc0tleSwgMSwgcmF3KTtcbiAgICAgICAgICByYXdCeUVudHJ5LmRlbGV0ZShlbnRyaWVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCByZXF1ZXVlIGZhaWxlZCAoZXZlbnRzIGxvc3QpJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlY292ZXIoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgcmVjbGFpbWVkID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVhfTU9WRV9JVEVSQVRJT05TOyBpKyspIHtcbiAgICAgICAgICAvLyBNb3ZlIGluLXByb2dyZXNzLXRhaWwg4oaSIG1haW4taGVhZDogYW4gb2xkZXIgc3RyYW5kZWQgZW50cnkgKG5lYXJlciB0aGVcbiAgICAgICAgICAvLyBpbi1wcm9ncmVzcyBoZWFkKSBlbmRzIHVwIGFoZWFkIG9mIGEgbmV3ZXIgb25lLCBwcmVzZXJ2aW5nIG9yZGVyLlxuICAgICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmxtb3ZlKGluUHJvZ3Jlc3NLZXksIGtleSwgJ1JJR0hUJywgJ0xFRlQnKTtcbiAgICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICByZWNsYWltZWQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjbGFpbWVkID4gMCkge1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9zcG9vbF9yZWNvdmVyZWRfdG90YWwnLCB7fSwgcmVjbGFpbWVkKTtcbiAgICAgICAgICBsb2dnZXIud2FybignQXVkaXQgc3Bvb2wgcmVjb3ZlcmVkIHN0cmFuZGVkIGluLXByb2dyZXNzIGV2ZW50cycsIHsgcmVjbGFpbWVkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWNsYWltZWQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0F1ZGl0IHNwb29sIHJlY292ZXIgZmFpbGVkJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBkZXB0aCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZWRpcy5sbGVuKGtleSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFJlZGlzLWJhY2tlZCBhdWRpdCBzcG9vbCBmcm9tIHRoZSBhbWJpZW50IGBSRURJU19VUkxgIC8gYFJFRElTX1NFTlRJTkVMU2BcbiAqIGVudiB2aWEgdGhlIHNoYXJlZCBgY3JlYXRlRW52UmVkaXNDbGllbnRgLiBSZXR1cm5zIGBudWxsYCB3aGVuIFJlZGlzIGlzIG5vdFxuICogY29uZmlndXJlZCDigJQgdGhlIGNhbGxlciB0aGVuIHJ1bnMgd2l0aG91dCBhIHNwb29sIChiZXN0LWVmZm9ydCBiZWhhdmlvcikuIFRoZSBzaGFyZWQgaGVscGVyIGxvYWRzXG4gKiBpb3JlZGlzIHZpYSBgY3JlYXRlUmVxdWlyZWAsIHNvIHRoaXMgc3RheXMgaW1wb3J0YWJsZSB3aGVyZSBSZWRpcyBpc24ndCBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKG9wdHM6IHsgbWF4RGVwdGg/OiBudW1iZXI7IGtleT86IHN0cmluZyB9ID0ge30pOiBBdWRpdFNwb29sIHwgbnVsbCB7XG4gIGNvbnN0IGluc3QgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxSZWRpc0xpc3RDbGllbnQ+KCdhdWRpdC1zcG9vbCcpO1xuICBpZiAoIWluc3QpIHJldHVybiBudWxsO1xuICBsb2dnZXIuaW5mbygnUmVkaXMgYXVkaXQgc3Bvb2wgaW5pdGlhbGl6ZWQnKTtcbiAgcmV0dXJuIGNyZWF0ZVJlZGlzQXVkaXRTcG9vbChpbnN0LCBvcHRzKTtcbn1cbiJdfQ==
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtc3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvYXVkaXQtc3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUErRDNDLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLG9GQUFvRjtBQUNwRixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztBQUVwQyxTQUFTLE1BQU0sQ0FBQyxHQUFZO0lBQzFCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFXO0lBQzVCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFvQixDQUFDO1FBQ2xELE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEUsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUFzQixFQUN0QixJQUFJLEdBQXdDLEVBQUU7SUFFOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztJQUMxQywyRUFBMkU7SUFDM0Usd0VBQXdFO0lBQ3hFLDhFQUE4RTtJQUM5RSxzRUFBc0U7SUFDdEUsTUFBTSxhQUFhLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7SUFFakUsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBc0IsRUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpHLE9BQU87UUFDTCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUs7WUFDakIsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxXQUFXLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzFFLElBQUksR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDO29CQUNuQixrRUFBa0U7b0JBQ2xFLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7b0JBQy9CLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2xGLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUYsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNaLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQix3RUFBd0U7b0JBQ3hFLHFFQUFxRTtvQkFDckUsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVM7d0JBQUUsTUFBTTtvQkFDN0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QixJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sdUVBQXVFO3dCQUN2RSxpQ0FBaUM7d0JBQ2pDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDbkUsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1lBQ2YsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2pELFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDbkIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gseUVBQXlFO2dCQUN6RSx1RUFBdUU7Z0JBQ3ZFLHlFQUF5RTtnQkFDekUsb0VBQW9FO2dCQUNwRSxFQUFFO2dCQUNGLHlFQUF5RTtnQkFDekUsMEVBQTBFO2dCQUMxRSxzRUFBc0U7Z0JBQ3RFLDJFQUEyRTtnQkFDM0UsMEVBQTBFO2dCQUMxRSxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDeEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRixDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxPQUFPO1lBQ1gsSUFBSSxDQUFDO2dCQUNILElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzdDLHlFQUF5RTtvQkFDekUsb0VBQW9FO29CQUNwRSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ25FLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUzt3QkFBRSxNQUFNO29CQUM3QyxTQUFTLEVBQUUsQ0FBQztnQkFDZCxDQUFDO2dCQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNsQixXQUFXLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztnQkFDRCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSztZQUNULElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQUksR0FBd0MsRUFBRTtJQUNyRixNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBa0IsYUFBYSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0NsaWVudCB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVtb3RlQXVkaXRFdmVudCB9IGZyb20gJy4vcmVtb3RlLWF1ZGl0LWNsaWVudC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXVkaXQtc3Bvb2wnKTtcblxuLyoqIEEgYnVmZmVyZWQgZW1pc3Npb246IHRoZSBldmVudCBwbHVzIHdoaWNoIHNlcnZpY2UgbXVzdCByZS1kZWxpdmVyIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdFNwb29sRW50cnkge1xuICBldmVudDogUmVtb3RlQXVkaXRFdmVudDtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEdXJhYmxlIGJ1ZmZlciBmb3IgYXVkaXQgZXZlbnRzIHRoYXQgZmFpbGVkIExJVkUgZGVsaXZlcnkgdG8gdGhlIHBsYXRmb3JtXG4gKiAocmV0cmllcyBleGhhdXN0ZWQgZHVyaW5nIGEgc3VzdGFpbmVkIG91dGFnZSkuIFdpdGhvdXQgdGhpcywgdGhlIGF1ZGl0IHRyYWlsIOKAlFxuICogYSBzZWN1cml0eSBsb2cg4oCUIGlzIHNpbGVudGx5IGxvc3QgdGhlIG1vbWVudCB0aGUgcGxhdGZvcm0gaXMgZG93biBmb3IgbG9uZ2VyXG4gKiB0aGFuIHRoZSBjbGllbnQncyBzbWFsbCByZXRyeSBidWRnZXQuXG4gKlxuICogQ29udHJhY3Q6XG4gKiAtIEJPVU5ERUQuIEEgc2VjdXJpdHkgbG9nIG11c3QgZGVncmFkZSB0byBcImRyb3BwZWQgdGhlIG9sZGVzdCwgbG91ZGx5XCIgKGFcbiAqICAgbWV0cmljKSByYXRoZXIgdGhhbiBncm93IHdpdGhvdXQgbGltaXQgYW5kIE9PTSB0aGUgZW1pdHRlci5cbiAqIC0gRkFJTC1TQUZFLiBFdmVyeSBtZXRob2Qgc3dhbGxvd3MgaXRzIG93biBlcnJvcnMg4oCUIGEgYnJva2VuL3VucmVhY2hhYmxlIHNwb29sXG4gKiAgIG11c3QgbmV2ZXIgYnJlYWsgb3IgYmxvY2sgdGhlIGF1ZGl0IGVtaXNzaW9uIHBhdGggKHdoaWNoIGlzIGl0c2VsZlxuICogICBmaXJlLWFuZC1mb3JnZXQpLiBBIHNwb29sIHByb2JsZW0gZGVncmFkZXMgdG8gdGhlIHByZS1zcG9vbCBiZWhhdmlvci5cbiAqIC0gT3JkZXJpbmcgaXMgYmVzdC1lZmZvcnQuIFJlLWRlbGl2ZXJlZCBldmVudHMgY2hhaW4gYXQgcmUtZGVsaXZlcnkgdGltZVxuICogICAodGhhdCdzIHdoZW4gdGhlIHBsYXRmb3JtIGluc2VydHMgdGhlbSksIHNvIGVhY2ggZXZlbnQgYWxzbyBjYXJyaWVzIGFuXG4gKiAgIGBvY2N1cnJlZEF0YCBzdGFtcGVkIGF0IGVtaXNzaW9uIGZvciByZXZpZXdlcnMg4oCUIHNlZSBSZW1vdGVBdWRpdEV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0U3Bvb2wge1xuICAvKiogQnVmZmVyIGFuIGV2ZW50IHRoYXQgZmFpbGVkIGxpdmUgZGVsaXZlcnkuICovXG4gIGVucXVldWUoZW50cnk6IEF1ZGl0U3Bvb2xFbnRyeSk6IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBBdG9taWNhbGx5IE1PVkUgdXAgdG8gYG1heGAgYnVmZmVyZWQgZW50cmllcyBvbnRvIGFuIGluLXByb2dyZXNzIGxpc3QgYW5kXG4gICAqIHJldHVybiB0aGVtLiBCZWNhdXNlIHRoZSBlbnRyaWVzIGFyZSBtb3ZlZCAobm90IHBvcHBlZC1hbmQtZHJvcHBlZCksIGEgY3Jhc2hcbiAgICogbWlkLWRyYWluIGxlYXZlcyB0aGVtIHJlY292ZXJhYmxlIG9uIHRoZSBpbi1wcm9ncmVzcyBsaXN0IOKAlCBzZWUgYHJlY292ZXJgLlxuICAgKiBFYWNoIHRha2VuIGVudHJ5IE1VU1QgYmUgcmVzb2x2ZWQgd2l0aCBleGFjdGx5IG9uZSBvZiBgYWNrYCAoZGVsaXZlcmVkKSBvclxuICAgKiBgcmVxdWV1ZWAgKHN0aWxsIGZhaWxpbmcpLCBvciBpdCBsaW5nZXJzIG9uIHRoZSBpbi1wcm9ncmVzcyBsaXN0IHVudGlsIHRoZVxuICAgKiBuZXh0IGByZWNvdmVyYC5cbiAgICovXG4gIHRha2UobWF4OiBudW1iZXIpOiBQcm9taXNlPEF1ZGl0U3Bvb2xFbnRyeVtdPjtcbiAgLyoqIEFja25vd2xlZGdlIHN1Y2Nlc3NmdWxseSByZS1kZWxpdmVyZWQgZW50cmllcyDigJQgcmVtb3ZlcyB0aGVtIGZyb20gdGhlXG4gICAqICBpbi1wcm9ncmVzcyBsaXN0IHNvIHRoZXkgYXJlIG5vdCByZWNvdmVyZWQgYWdhaW4uICovXG4gIGFjayhlbnRyaWVzOiBBdWRpdFNwb29sRW50cnlbXSk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZXR1cm4gZW50cmllcyB3aG9zZSByZS1kZWxpdmVyeSBmYWlsZWQgdG8gdGhlIEhFQUQgb2YgdGhlIGJ1ZmZlciAocmV0cmllZFxuICAgKiAgZmlyc3QpIGFuZCBjbGVhciB0aGVtIGZyb20gdGhlIGluLXByb2dyZXNzIGxpc3QuIEJlc3QtZWZmb3J0LiAqL1xuICByZXF1ZXVlKGVudHJpZXM6IEF1ZGl0U3Bvb2xFbnRyeVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJlY2xhaW0gYW55IGVudHJpZXMgc3RyYW5kZWQgb24gdGhlIGluLXByb2dyZXNzIGxpc3QgYnkgYSBwcmlvciBjcmFzaCxcbiAgICogIG1vdmluZyB0aGVtIGJhY2sgdG8gdGhlIGhlYWQgb2YgdGhlIG1haW4gYnVmZmVyLiBDYWxsIG9uY2UgYXQgc3RhcnR1cC5cbiAgICogIFJldHVybnMgdGhlIG51bWJlciByZWNsYWltZWQuICovXG4gIHJlY292ZXIoKTogUHJvbWlzZTxudW1iZXI+O1xuICAvKiogQXBwcm94aW1hdGUgY3VycmVudCBkZXB0aCAoZm9yIG1ldHJpY3MgLyBkcmFpbiBkZWNpc2lvbnMpLiAqL1xuICBkZXB0aCgpOiBQcm9taXNlPG51bWJlcj47XG59XG5cbi8qKiBNaW5pbWFsIFJlZGlzIExJU1Qgc3VyZmFjZSB0aGUgc3Bvb2wgbmVlZHMgKGEgc3Vic2V0IG9mIGlvcmVkaXMpLiAqL1xuaW50ZXJmYWNlIFJlZGlzTGlzdENsaWVudCB7XG4gIHJwdXNoKGtleTogc3RyaW5nLCAuLi52YWx1ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICBscHVzaChrZXk6IHN0cmluZywgLi4udmFsdWVzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPjtcbiAgbHBvcChrZXk6IHN0cmluZywgY291bnQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10gfCBudWxsPjtcbiAgbHRyaW0oa2V5OiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIHN0b3A6IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG4gIGxsZW4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj47XG4gIC8qKiBBdG9taWNhbGx5IHBvcCBmcm9tIG9uZSBsaXN0IGVuZCBhbmQgcHVzaCB0byBhbm90aGVyIChSZWRpcyDiiaUgNi4yKS4gKi9cbiAgbG1vdmUoc291cmNlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcsIGZyb206ICdMRUZUJyB8ICdSSUdIVCcsIHRvOiAnTEVGVCcgfCAnUklHSFQnKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqIFJlbW92ZSBgY291bnRgIG9jY3VycmVuY2VzIG9mIGB2YWx1ZWAgZnJvbSBhIGxpc3QuICovXG4gIGxyZW0oa2V5OiBzdHJpbmcsIGNvdW50OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj47XG59XG5cbmNvbnN0IERFRkFVTFRfU1BPT0xfS0VZID0gJ2F1ZGl0OnNwb29sJztcbmNvbnN0IERFRkFVTFRfTUFYX0RFUFRIID0gMTBfMDAwO1xuLyoqIEd1YXJkIHNvIGEgcGF0aG9sb2dpY2FsIGluLXByb2dyZXNzIGxpc3QgY2FuJ3Qgc3BpbiBgcmVjb3ZlcmAvYHRha2VgIGZvcmV2ZXIuICovXG5jb25zdCBNQVhfTU9WRV9JVEVSQVRJT05TID0gMTAwXzAwMDtcblxuZnVuY3Rpb24gZXJyTXNnKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UoZXJyKTtcbn1cblxuZnVuY3Rpb24gc2FmZVBhcnNlKHJhdzogc3RyaW5nKTogQXVkaXRTcG9vbEVudHJ5IHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIEF1ZGl0U3Bvb2xFbnRyeTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHBhcnNlZC5ldmVudCAmJiBwYXJzZWQuc2VydmljZU5hbWUgPyBwYXJzZWQgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlZGlzLUxJU1QtYmFja2VkIHNwb29sLiBEdXJhYmxlIGFjcm9zcyBwcm9jZXNzIHJlc3RhcnRzICh1bmxpa2UgYW4gaW4tbWVtb3J5XG4gKiBvciBwZXItcG9kLWRpc2sgYnVmZmVyKSwgc2hhcmVkIGJ5IGFsbCByZXBsaWNhcyBvZiBhIHNlcnZpY2UsIGFuZCBib3VuZGVkIHZpYVxuICogYSB0cmltLXRvLXRhaWwgb24gb3ZlcmZsb3cgKGRyb3BzIHRoZSBPTERFU1QsIGVtaXR0aW5nIGBhdWRpdF9zcG9vbF9kcm9wcGVkX3RvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0F1ZGl0U3Bvb2woXG4gIHJlZGlzOiBSZWRpc0xpc3RDbGllbnQsXG4gIG9wdHM6IHsgbWF4RGVwdGg/OiBudW1iZXI7IGtleT86IHN0cmluZyB9ID0ge30sXG4pOiBBdWRpdFNwb29sIHtcbiAgY29uc3Qga2V5ID0gb3B0cy5rZXkgPz8gREVGQVVMVF9TUE9PTF9LRVk7XG4gIC8vIFRoZSBpbi1wcm9ncmVzcyBcInByb2Nlc3NpbmdcIiBsaXN0IOKAlCBhIHRha2VuIGJhdGNoIGxpdmVzIGhlcmUgdW50aWwgaXQgaXNcbiAgLy8gYWNrZWQgKGRlbGl2ZXJlZCkgb3IgcmVxdWV1ZWQgKHN0aWxsIGZhaWxpbmcpLiBJdCBpcyBhIHNlY3VyaXR5IGxvZydzXG4gIC8vIGR1cmFiaWxpdHkgbmV0OiBhIGNyYXNoIGJldHdlZW4gdGFrZSBhbmQgYWNrL3JlcXVldWUgbGVhdmVzIHRoZSBiYXRjaCBoZXJlLFxuICAvLyBhbmQgYHJlY292ZXJgIHJlY2xhaW1zIGl0IG9uIHJlc3RhcnQgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgaXQuXG4gIGNvbnN0IGluUHJvZ3Jlc3NLZXkgPSBgJHtrZXl9OmluZmxpZ2h0YDtcbiAgY29uc3QgbWF4RGVwdGggPSBNYXRoLm1heCgxLCBvcHRzLm1heERlcHRoID8/IERFRkFVTFRfTUFYX0RFUFRIKTtcblxuICAvLyBUaGUgRVhBQ1Qgc2VyaWFsaXplZCBzdHJpbmcgZWFjaCByZXR1cm5lZCBlbnRyeSB3YXMgcGFyc2VkIGZyb20sIHNvIGBhY2tgIC9cbiAgLy8gYHJlcXVldWVgIGNhbiBMUkVNIHRoZSBwcmVjaXNlIHZhbHVlIG9mZiB0aGUgaW4tcHJvZ3Jlc3MgbGlzdC4gS2V5ZWQgYnkgdGhlXG4gIC8vIHJldHVybmVkIG9iamVjdCBpZGVudGl0eSAodGhlIGRyYWluIGNvbnN1bWVyIHBhc3NlcyB0aGUgU0FNRSBvYmplY3RzIGJhY2spLFxuICAvLyBzbyBpdCBuZWVkcyBubyBzdGFibGUgcmUtc2VyaWFsaXphdGlvbi4gV2Vha01hcCDihpIgZW50cmllcyBHQyBuYXR1cmFsbHkuXG4gIGNvbnN0IHJhd0J5RW50cnkgPSBuZXcgV2Vha01hcDxBdWRpdFNwb29sRW50cnksIHN0cmluZz4oKTtcbiAgY29uc3QgcmF3T2YgPSAoZW50cnk6IEF1ZGl0U3Bvb2xFbnRyeSk6IHN0cmluZyA9PiByYXdCeUVudHJ5LmdldChlbnRyeSkgPz8gSlNPTi5zdHJpbmdpZnkoZW50cnkpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZW5xdWV1ZShlbnRyeSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVuID0gYXdhaXQgcmVkaXMucnB1c2goa2V5LCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuICAgICAgICBlbWl0Q291bnRlcignYXVkaXRfc3Bvb2xfZW5xdWV1ZWRfdG90YWwnLCB7IHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgICAgICBpZiAobGVuID4gbWF4RGVwdGgpIHtcbiAgICAgICAgICAvLyBLZWVwIG9ubHkgdGhlIG5ld2VzdCBgbWF4RGVwdGhgOyBkcm9wIHRoZSBvdmVyZmxvdyBhdCB0aGUgaGVhZC5cbiAgICAgICAgICBjb25zdCBkcm9wcGVkID0gbGVuIC0gbWF4RGVwdGg7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHRyaW0oa2V5LCBkcm9wcGVkLCAtMSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2F1ZGl0X3Nwb29sX2Ryb3BwZWRfdG90YWwnLCB7IHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0sIGRyb3BwZWQpO1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBvdmVyZmxvdyDigJQgZHJvcHBlZCBvbGRlc3QgYnVmZmVyZWQgZXZlbnRzJywgeyBkcm9wcGVkLCBtYXhEZXB0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBlbnF1ZXVlIGZhaWxlZCAoZXZlbnQgbG9zdCknLCB7IGVycm9yOiBlcnJNc2coZXJyKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdGFrZShtYXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG91dDogQXVkaXRTcG9vbEVudHJ5W10gPSBbXTtcbiAgICAgICAgY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBtYXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbWl0OyBpKyspIHtcbiAgICAgICAgICAvLyBBdG9taWNhbGx5IE1PVkUgaGVhZOKGkmluLXByb2dyZXNzLXRhaWwgc28gdGhlIGVudHJ5IGlzIG5ldmVyIGluIGxpbWJvOlxuICAgICAgICAgIC8vIGl0IGlzIG9uIGV4YWN0bHkgb25lIGxpc3QgYXQgYWxsIHRpbWVzLCByZWNvdmVyYWJsZSBhZnRlciBhIGNyYXNoLlxuICAgICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmxtb3ZlKGtleSwgaW5Qcm9ncmVzc0tleSwgJ0xFRlQnLCAnUklHSFQnKTtcbiAgICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBzYWZlUGFyc2UocmF3KTtcbiAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICByYXdCeUVudHJ5LnNldChwYXJzZWQsIHJhdyk7XG4gICAgICAgICAgICBvdXQucHVzaChwYXJzZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb3JydXB0IHBheWxvYWQg4oCUIGRyb3AgaXQgb2ZmIHRoZSBpbi1wcm9ncmVzcyBsaXN0IHNvIGl0IGNhbid0IHdlZGdlXG4gICAgICAgICAgICAvLyB0aGUgZHJhaW4sIGFuZCBhY2NvdW50IGZvciBpdC5cbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLmxyZW0oaW5Qcm9ncmVzc0tleSwgMSwgcmF3KTtcbiAgICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9zcG9vbF9kcm9wcGVkX3RvdGFsJywgeyBzZXJ2aWNlOiAndW5rbm93bicgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0F1ZGl0IHNwb29sIHRha2UgZmFpbGVkJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWNrKGVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHJlbShpblByb2dyZXNzS2V5LCAxLCByYXdPZihlbnRyeSkpO1xuICAgICAgICAgIHJhd0J5RW50cnkuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCBhY2sgZmFpbGVkIChtYXkgcmUtZGVsaXZlciBvbiByZWNvdmVyKScsIHsgZXJyb3I6IGVyck1zZyhlcnIpIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXVlKGVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUHV0IGZhaWxlZCByZS1kZWxpdmVyaWVzIGJhY2sgYXQgdGhlIEhFQUQgc28gdGhleSdyZSByZXRyaWVkIGZpcnN0IGFuZFxuICAgICAgICAvLyByb3VnaCBlbWlzc2lvbiBvcmRlciBpcyBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBvdXRhZ2Ug4oCUIGFuZCBjbGVhciB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhlIGluLXByb2dyZXNzIGxpc3Qgc28gYHJlY292ZXJgIGRvZXNuJ3QgZG91YmxlIHRoZW0uIEl0ZXJhdGUgaW5cbiAgICAgICAgLy8gcmV2ZXJzZSBzbyBscHVzaCByZXN0b3JlcyB0aGUgYmF0Y2gncyBvcmlnaW5hbCBvcmRlciBhdCB0aGUgaGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gT1JERVJJTkcgSU5WQVJJQU5UIChhdC1sZWFzdC1vbmNlKTogbHB1c2ggdG8gdGhlIG1haW4gbGlzdCBGSVJTVCwgVEhFTlxuICAgICAgICAvLyBscmVtIGZyb20gaW4tcHJvZ3Jlc3MuIEEgY3Jhc2ggYmV0d2VlbiB0aGUgdHdvIGxlYXZlcyB0aGUgZW50cnkgb24gQk9USFxuICAgICAgICAvLyBsaXN0cyDihpIgaGFybWxlc3MgZG91YmxlLWRlbGl2ZXJ5IChkZWR1cGVkIGRvd25zdHJlYW0gYnkgaWRlbXBvdGVuY3lcbiAgICAgICAgLy8gcmV1c2UpLCBuZXZlciBhIExPU1MuIFRoZSByZXZlcnNlIG9yZGVyIChscmVtIHRoZW4gbHB1c2gpIHdvdWxkIGRyb3AgdGhlXG4gICAgICAgIC8vIGV2ZW50IG91dHJpZ2h0IG9uIGEgY3Jhc2ggaW4gdGhlIGdhcCwgd2hpY2ggYSBzZWN1cml0eSBsb2cgbXVzdCBub3QgZG8uXG4gICAgICAgIGZvciAobGV0IGkgPSBlbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgcmF3ID0gcmF3T2YoZW50cmllc1tpXSk7XG4gICAgICAgICAgYXdhaXQgcmVkaXMubHB1c2goa2V5LCByYXcpO1xuICAgICAgICAgIGF3YWl0IHJlZGlzLmxyZW0oaW5Qcm9ncmVzc0tleSwgMSwgcmF3KTtcbiAgICAgICAgICByYXdCeUVudHJ5LmRlbGV0ZShlbnRyaWVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdBdWRpdCBzcG9vbCByZXF1ZXVlIGZhaWxlZCAoZXZlbnRzIGxvc3QpJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlY292ZXIoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgcmVjbGFpbWVkID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNQVhfTU9WRV9JVEVSQVRJT05TOyBpKyspIHtcbiAgICAgICAgICAvLyBNb3ZlIGluLXByb2dyZXNzLXRhaWwg4oaSIG1haW4taGVhZDogYW4gb2xkZXIgc3RyYW5kZWQgZW50cnkgKG5lYXJlciB0aGVcbiAgICAgICAgICAvLyBpbi1wcm9ncmVzcyBoZWFkKSBlbmRzIHVwIGFoZWFkIG9mIGEgbmV3ZXIgb25lLCBwcmVzZXJ2aW5nIG9yZGVyLlxuICAgICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmxtb3ZlKGluUHJvZ3Jlc3NLZXksIGtleSwgJ1JJR0hUJywgJ0xFRlQnKTtcbiAgICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICByZWNsYWltZWQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjbGFpbWVkID4gMCkge1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdhdWRpdF9zcG9vbF9yZWNvdmVyZWRfdG90YWwnLCB7fSwgcmVjbGFpbWVkKTtcbiAgICAgICAgICBsb2dnZXIud2FybignQXVkaXQgc3Bvb2wgcmVjb3ZlcmVkIHN0cmFuZGVkIGluLXByb2dyZXNzIGV2ZW50cycsIHsgcmVjbGFpbWVkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWNsYWltZWQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0F1ZGl0IHNwb29sIHJlY292ZXIgZmFpbGVkJywgeyBlcnJvcjogZXJyTXNnKGVycikgfSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBkZXB0aCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZWRpcy5sbGVuKGtleSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFJlZGlzLWJhY2tlZCBhdWRpdCBzcG9vbCBmcm9tIHRoZSBhbWJpZW50IGBSRURJU19VUkxgIC8gYFJFRElTX1NFTlRJTkVMU2BcbiAqIGVudiB2aWEgdGhlIHNoYXJlZCBgY3JlYXRlRW52UmVkaXNDbGllbnRgLiBSZXR1cm5zIGBudWxsYCB3aGVuIFJlZGlzIGlzIG5vdFxuICogY29uZmlndXJlZCDigJQgdGhlIGNhbGxlciB0aGVuIHJ1bnMgd2l0aG91dCBhIHNwb29sIChiZXN0LWVmZm9ydCBiZWhhdmlvcikuIFRoZSBzaGFyZWQgaGVscGVyIGxvYWRzXG4gKiBpb3JlZGlzIHZpYSBgY3JlYXRlUmVxdWlyZWAsIHNvIHRoaXMgc3RheXMgaW1wb3J0YWJsZSB3aGVyZSBSZWRpcyBpc24ndCBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sKG9wdHM6IHsgbWF4RGVwdGg/OiBudW1iZXI7IGtleT86IHN0cmluZyB9ID0ge30pOiBBdWRpdFNwb29sIHwgbnVsbCB7XG4gIGNvbnN0IGluc3QgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxSZWRpc0xpc3RDbGllbnQ+KCdhdWRpdC1zcG9vbCcpO1xuICBpZiAoIWluc3QpIHJldHVybiBudWxsO1xuICBsb2dnZXIuaW5mbygnUmVkaXMgYXVkaXQgc3Bvb2wgaW5pdGlhbGl6ZWQnKTtcbiAgcmV0dXJuIGNyZWF0ZVJlZGlzQXVkaXRTcG9vbChpbnN0LCBvcHRzKTtcbn1cbiJdfQ==
|