@pipeline-builder/ai-core 4.3.10 → 4.3.12
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 +17 -7
- package/lib/ai-call.d.ts +18 -5
- package/lib/ai-call.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/provider-registry.d.ts +3 -8
- package/lib/provider-registry.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,21 +10,31 @@ Shared AI provider registry for [Pipeline Builder](https://mwashburn160.github.i
|
|
|
10
10
|
|
|
11
11
|
- Lazily initializes a registry of AI SDK provider wrappers from environment variables — only providers with a configured API key are registered.
|
|
12
12
|
- Resolves a Vercel AI SDK `LanguageModel` for a given provider + model, validating against the static provider catalog.
|
|
13
|
-
-
|
|
13
|
+
- Resolves a request against a caller-supplied (BYO) or org-owned key without caching it in the registry, and never falls back from such a key to the platform's.
|
|
14
|
+
- Holds the per-call policy (timeouts, caps, retries, prompt caching, platform failover) and the "Ask" how-to agent.
|
|
14
15
|
- Re-exports the `ai` SDK helpers consumers need so they don't add a separate dependency.
|
|
15
16
|
|
|
16
17
|
Providers and their env vars: Anthropic (`ANTHROPIC_API_KEY`), OpenAI (`OPENAI_API_KEY`), Google (`GOOGLE_GENERATIVE_AI_API_KEY`), xAI (`XAI_API_KEY`), and Amazon Bedrock (authenticates via the runtime IAM role).
|
|
17
18
|
|
|
18
19
|
## Key exports
|
|
19
20
|
|
|
21
|
+
Everything below is exported from the package root (`src/index.ts`); nothing else is public.
|
|
22
|
+
|
|
20
23
|
| Export | Purpose |
|
|
21
24
|
|---|---|
|
|
22
|
-
| `getAvailableProviders()` |
|
|
23
|
-
| `getProviderModels(providerId)` |
|
|
24
|
-
| `resolveModel(providerId, modelId)` |
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
25
|
+
| `getAvailableProviders()` | Provider info for the providers with a configured API key |
|
|
26
|
+
| `getProviderModels(providerId)` | The model list for a provider, from the static catalog (no env var needed) |
|
|
27
|
+
| `resolveModel(providerId, modelId)` | A `LanguageModel` from the registry; throws if the provider is unconfigured or the model is unknown |
|
|
28
|
+
| `resolveModelSelection(selection)` | Resolve a request's `{ provider?, model?, apiKey?, fallbacks? }` to a `ResolvedModelSelection` (model, provider, modelId, whose key pays). A bring-your-own key never falls back to the platform's keys |
|
|
29
|
+
| `resolveOrgModelSelection(selection, deps?)` | The org-aware resolver: request BYO key, then the org's own provider key, then the platform key — honouring the org's AI switch (`AIDisabledError`) and never silently downgrading to the platform key |
|
|
30
|
+
| `aiCallSettings(opts)` | The per-call policy every AI entry point shares: abort signal / timeout, output-token cap, retries and temperature (`AI_REQUEST_TIMEOUT_MS`, `AI_MAX_OUTPUT_TOKENS`, `AI_MAX_RETRIES`, `aiCallSignal`, `capOutputTokens`, `samplingTemperature` are its parts) |
|
|
31
|
+
| `runWithFailover(selection, attempt, opts?)` | Run one AI call, failing over along `platformFailoverChain()` on a retryable error (`isRetryableAIError`) — platform-key selections only |
|
|
32
|
+
| `cachedSystemPrompt`, `asPromptData`, `asPromptDataBlock` | Prompt caching for the system prompt, and fencing untrusted data into a prompt |
|
|
33
|
+
| `tokenUsage`, `aiUsageAuditDetails` | Normalized token usage and the audit-row details for an AI call |
|
|
34
|
+
| `buildDocsIndexFromFiles(files)` | Build the "Ask" agent's grounding index from doc files |
|
|
35
|
+
| `answerHowTo(opts)` / `streamHowTo(opts)` | The read-only how-to (RAG) agent, whole-answer or streamed, with its sources; `buildGroundingContext`, `ASK_HOWTO_PROMPT_VERSION` |
|
|
36
|
+
| Types | `ModelSelection`, `ResolvedModelSelection`, `OrgModelSelection`, `OrgSelectionDeps`, `AICallOptions`, `AICallSettings`, `FailoverOptions`, `FailoverOutcome`, `AITokenUsage`, `AIUsageAuditDetails`, `GroundingIndex`, `DocFile`, `AskSource`, `AskStreamEvent` |
|
|
37
|
+
| Re-exported from the [`ai`](https://www.npmjs.com/package/ai) SDK | `generateText`, `streamText`, `Output`, `tool`, `generateObject`, `stepCountIs`; types `LanguageModel`, `LanguageModelUsage`, `SystemModelMessage`, `ToolSet` |
|
|
28
38
|
|
|
29
39
|
## Usage
|
|
30
40
|
|
package/lib/ai-call.d.ts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-CALL policy every AI request in the platform shares: how long it may run,
|
|
3
|
+
* how much it may write, how often the SDK retries, whether the provider may cache
|
|
4
|
+
* the static prompt, how untrusted text is fenced into a prompt, how a platform-key
|
|
5
|
+
* failure fails over to the next provider, and what the audit trail records about
|
|
6
|
+
* the call afterwards.
|
|
7
|
+
*
|
|
8
|
+
* One module so that a new AI entry point gets every one of these by calling
|
|
9
|
+
* {@link aiCallSettings} and {@link aiUsageAuditDetails}, rather than re-deciding each
|
|
10
|
+
* (which is how the platform ended up with calls that had no timeout, no output cap,
|
|
11
|
+
* and no audit row).
|
|
12
|
+
*/
|
|
13
|
+
import { type AiKeySource, type AiQuotaSettlement } from '@pipeline-builder/api-core';
|
|
1
14
|
import type { LanguageModelUsage, SystemModelMessage } from 'ai';
|
|
2
|
-
import { type
|
|
15
|
+
import { type ResolvedModelSelection } from './provider-registry.js';
|
|
3
16
|
/**
|
|
4
17
|
* Wall-clock bound on ONE AI call (`AI_REQUEST_TIMEOUT_MS`, default 120s), retries
|
|
5
18
|
* included. A provider that stalls must not hold a request — or a scheduled report
|
|
@@ -142,11 +155,11 @@ export interface AIUsageAuditDetails {
|
|
|
142
155
|
provider: string;
|
|
143
156
|
model: string;
|
|
144
157
|
/** Whose key paid: the caller's own (`request`), the org's (`org`), or the platform's. */
|
|
145
|
-
keySource:
|
|
158
|
+
keySource: AiKeySource;
|
|
146
159
|
/** Set when a failover served the call: the provider originally resolved. */
|
|
147
160
|
fallbackFrom?: string;
|
|
148
|
-
/** How the call's `aiCalls` slot settled. */
|
|
149
|
-
quotaSlot?:
|
|
161
|
+
/** How the call's `aiCalls` slot settled (api-core `AI_QUOTA_SETTLEMENTS`). */
|
|
162
|
+
quotaSlot?: AiQuotaSettlement;
|
|
150
163
|
tokens: AITokenUsage;
|
|
151
164
|
/** The versioned prompt the call ran (e.g. `ask-howto@3`). */
|
|
152
165
|
promptVersion?: string;
|
|
@@ -158,6 +171,6 @@ export interface AIUsageAuditDetails {
|
|
|
158
171
|
*/
|
|
159
172
|
export declare function aiUsageAuditDetails(selection: Pick<ResolvedModelSelection, 'provider' | 'modelId' | 'keySource' | 'fallbackFrom'>, extra?: {
|
|
160
173
|
usage?: Partial<LanguageModelUsage> | AITokenUsage | null;
|
|
161
|
-
quotaSlot?:
|
|
174
|
+
quotaSlot?: AiQuotaSettlement;
|
|
162
175
|
promptVersion?: string;
|
|
163
176
|
}): AIUsageAuditDetails;
|
package/lib/ai-call.js
CHANGED
|
@@ -232,4 +232,4 @@ export function aiUsageAuditDetails(selection, extra = {}) {
|
|
|
232
232
|
...(extra.promptVersion ? { promptVersion: extra.promptVersion } : {}),
|
|
233
233
|
};
|
|
234
234
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2FsbC5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FpLWNhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUErQyxNQUFNLHdCQUF3QixDQUFDO0FBRTFILCtFQUErRTtBQUUvRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRTlGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFdEY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFOUU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLGFBQTJCLEVBQUUsU0FBUyxHQUFXLHFCQUFxQjtJQUNqRyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM3RSxDQUFDO0FBRUQsMEdBQTBHO0FBQzFHLE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBa0I7SUFDaEQsT0FBTyxJ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QztBQUNKLENBQUM7QUFrQkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsU0FBOEYsRUFDOUYsS0FBSyxHQUEySCxFQUFFO0lBRWxJLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUErRSxDQUFDO0lBQ3BHLE1BQU0sTUFBTSxHQUFpQixLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsaUJBQWlCLEtBQUssUUFBUTtRQUMvRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtRQUM1SCxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLE9BQU87UUFDTCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7UUFDNUIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1FBQ3hCLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztRQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0UsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFELE1BQU07UUFDTixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGVyLUNBTEwgcG9saWN5IGV2ZXJ5IEFJIHJlcXVlc3QgaW4gdGhlIHBsYXRmb3JtIHNoYXJlczogaG93IGxvbmcgaXQgbWF5IHJ1bixcbiAqIGhvdyBtdWNoIGl0IG1heSB3cml0ZSwgaG93IG9mdGVuIHRoZSBTREsgcmV0cmllcywgd2hldGhlciB0aGUgcHJvdmlkZXIgbWF5IGNhY2hlXG4gKiB0aGUgc3RhdGljIHByb21wdCwgaG93IHVudHJ1c3RlZCB0ZXh0IGlzIGZlbmNlZCBpbnRvIGEgcHJvbXB0LCBob3cgYSBwbGF0Zm9ybS1rZXlcbiAqIGZhaWx1cmUgZmFpbHMgb3ZlciB0byB0aGUgbmV4dCBwcm92aWRlciwgYW5kIHdoYXQgdGhlIGF1ZGl0IHRyYWlsIHJlY29yZHMgYWJvdXRcbiAqIHRoZSBjYWxsIGFmdGVyd2FyZHMuXG4gKlxuICogT25lIG1vZHVsZSBzbyB0aGF0IGEgbmV3IEFJIGVudHJ5IHBvaW50IGdldHMgZXZlcnkgb25lIG9mIHRoZXNlIGJ5IGNhbGxpbmdcbiAqIHtAbGluayBhaUNhbGxTZXR0aW5nc30gYW5kIHtAbGluayBhaVVzYWdlQXVkaXREZXRhaWxzfSwgcmF0aGVyIHRoYW4gcmUtZGVjaWRpbmcgZWFjaFxuICogKHdoaWNoIGlzIGhvdyB0aGUgcGxhdGZvcm0gZW5kZWQgdXAgd2l0aCBjYWxscyB0aGF0IGhhZCBubyB0aW1lb3V0LCBubyBvdXRwdXQgY2FwLFxuICogYW5kIG5vIGF1ZGl0IHJvdykuXG4gKi9cblxuaW1wb3J0IHsgZW52SW50IH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBMYW5ndWFnZU1vZGVsVXNhZ2UsIFN5c3RlbU1vZGVsTWVzc2FnZSB9IGZyb20gJ2FpJztcblxuaW1wb3J0IHsgZ2V0QXZhaWxhYmxlUHJvdmlkZXJzLCByZXNvbHZlTW9kZWwsIHR5cGUgS2V5U291cmNlLCB0eXBlIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24gfSBmcm9tICcuL3Byb3ZpZGVyLXJlZ2lzdHJ5LmpzJztcblxuLy8gLS0gTGltaXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFdhbGwtY2xvY2sgYm91bmQgb24gT05FIEFJIGNhbGwgKGBBSV9SRVFVRVNUX1RJTUVPVVRfTVNgLCBkZWZhdWx0IDEyMHMpLCByZXRyaWVzXG4gKiBpbmNsdWRlZC4gQSBwcm92aWRlciB0aGF0IHN0YWxscyBtdXN0IG5vdCBob2xkIGEgcmVxdWVzdCDigJQgb3IgYSBzY2hlZHVsZWQgcmVwb3J0XG4gKiBydW4sIHdoaWNoIGhhcyBubyBjbGllbnQgdG8gZGlzY29ubmVjdCDigJQgb3BlbiBpbmRlZmluaXRlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9SRVFVRVNUX1RJTUVPVVRfTVMgPSBlbnZJbnQoJ0FJX1JFUVVFU1RfVElNRU9VVF9NUycsIDEyMF8wMDAsIHsgbWluOiAxXzAwMCB9KTtcblxuLyoqXG4gKiBQbGF0Zm9ybS13aWRlIG91dHB1dCBjYXAgcGVyIG1vZGVsIGNhbGwgKGBBSV9NQVhfT1VUUFVUX1RPS0VOU2AsIGRlZmF1bHQgODE5MikuIFRoZVxuICogQ0VJTElORzogYSBjYWxsIG1heSBhc2sgZm9yIGxlc3MgKHRoZSBBc2sgYXNzaXN0YW50IGFuZCByZXBvcnQgc3VtbWFyaWVzIGRvKSwgbmV2ZXJcbiAqIG1vcmUg4oCUIHNvIG9uZSBgYWlDYWxsc2Agc2xvdCBoYXMgYSBib3VuZGVkIGNvc3Qgd2hhdGV2ZXIgYSBwcm9tcHQgYXNrcyBmb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9NQVhfT1VUUFVUX1RPS0VOUyA9IGVudkludCgnQUlfTUFYX09VVFBVVF9UT0tFTlMnLCA4MTkyLCB7IG1pbjogNjQgfSk7XG5cbi8qKlxuICogU0RLLWxldmVsIHJldHJpZXMgcGVyIGNhbGwgKGBBSV9NQVhfUkVUUklFU2AsIGRlZmF1bHQgMiDigJQgdGhlIFNESydzIG93biBkZWZhdWx0LFxuICogc3RhdGVkIGV4cGxpY2l0bHkgc28gaXQgaXMgYSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhbiBhY2NpZGVudCkuIFRoZSBTREsgcmV0cmllc1xuICogNDA4LzQwOS80MjkvNXh4IGFuZCBjb25uZWN0aW9uIGVycm9ycyBvbiB0aGUgU0FNRSBwcm92aWRlcjsgY3Jvc3MtcHJvdmlkZXIgZmFpbG92ZXJcbiAqIGlzIHtAbGluayBydW5XaXRoRmFpbG92ZXJ9J3Mgam9iLlxuICovXG5leHBvcnQgY29uc3QgQUlfTUFYX1JFVFJJRVMgPSBlbnZJbnQoJ0FJX01BWF9SRVRSSUVTJywgMiwgeyBtaW46IDAsIG1heDogNSB9KTtcblxuLyoqXG4gKiBUaGUgc2lnbmFsIGZvciBvbmUgQUkgY2FsbDogYWJvcnRzIHdoZW4gdGhlIHJlcXVlc3QncyBvd24gc2lnbmFsIGRvZXMgKGNsaWVudFxuICogZGlzY29ubmVjdCwgU1NFIGNsb3NlKSBPUiB3aGVuIHtAbGluayBBSV9SRVFVRVNUX1RJTUVPVVRfTVN9IGVsYXBzZXMg4oCUIHdoaWNoZXZlclxuICogY29tZXMgZmlyc3QuIEEgdGltZW91dCBhYm9ydHMgd2l0aCBhIGBUaW1lb3V0RXJyb3JgLCB3aGljaCBgaGFuZGxlQUlFcnJvcmAgYW5zd2Vyc1xuICogYXMgNTA0LiBQYXNzIG5vIHJlcXVlc3Qgc2lnbmFsIGZvciB3b3JrIHdpdGggbm8gY2xpZW50IChhIHNjaGVkdWxlZCBqb2IpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWlDYWxsU2lnbmFsKHJlcXVlc3RTaWduYWw/OiBBYm9ydFNpZ25hbCwgdGltZW91dE1zOiBudW1iZXIgPSBBSV9SRVFVRVNUX1RJTUVPVVRfTVMpOiBBYm9ydFNpZ25hbCB7XG4gIGNvbnN0IHRpbWVvdXQgPSBBYm9ydFNpZ25hbC50aW1lb3V0KHRpbWVvdXRNcyk7XG4gIHJldHVybiByZXF1ZXN0U2lnbmFsID8gQWJvcnRTaWduYWwuYW55KFtyZXF1ZXN0U2lnbmFsLCB0aW1lb3V0XSkgOiB0aW1lb3V0O1xufVxuXG4vKiogYHJlcXVlc3RlZGAgY2xhbXBlZCB0byB0aGUgcGxhdGZvcm0gY2VpbGluZyAoe0BsaW5rIEFJX01BWF9PVVRQVVRfVE9LRU5TfSk7IHRoZSBjZWlsaW5nIHdoZW4gdW5zZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwT3V0cHV0VG9rZW5zKHJlcXVlc3RlZD86IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihyZXF1ZXN0ZWQgPz8gQUlfTUFYX09VVFBVVF9UT0tFTlMsIEFJX01BWF9PVVRQVVRfVE9LRU5TKTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhhdCBSRUpFQ1QgYSBub24tZGVmYXVsdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSAoNDAwKS4gVGhlIGN1cnJlbnQgQ2xhdWRlXG4gKiBnZW5lcmF0aW9uIOKAlCBGYWJsZSA1LngsIE15dGhvcywgT3B1cyA1LnggLyA0LjcgLyA0LjgsIFNvbm5ldCA1Lngg4oCUIHJlbW92ZWQgc2FtcGxpbmdcbiAqIHBhcmFtZXRlcnM7IGRlcHRoIGlzIGNvbnRyb2xsZWQgYnkgZWZmb3J0IGluc3RlYWQuIE1hdGNoZWQgb24gdGhlIG1vZGVsIGlkIHNvIGFcbiAqIEJlZHJvY2sgcHJvZmlsZSAoYHVzLmFudGhyb3BpYy5jbGF1ZGUtb3B1cy01LTVgKSBpcyBjb3ZlcmVkIHRvby5cbiAqL1xuY29uc3QgTk9fU0FNUExJTkdfTU9ERUwgPSAvY2xhdWRlLSg/OmZhYmxlfG15dGhvc3xvcHVzfHNvbm5ldCktKD86NXw0LTd8NC04KSg/OlxcRHwkKS87XG5cbi8qKlxuICogVGhlIHRlbXBlcmF0dXJlIHRvIHNlbmQgZm9yIGBtb2RlbElkYCwgb3IgYHVuZGVmaW5lZGAgd2hlcmUgdGhlIG1vZGVsIHJlZnVzZXMgb25lLlxuICogRXZlcnkgQUkgY2FsbCBzdGF0ZXMgaXRzIHRlbXBlcmF0dXJlIChsb3cgZm9yIGdyb3VuZGVkIGFuc3dlcnMgYW5kIHN0cnVjdHVyZWRcbiAqIGRyYWZ0cykgc28gYmVoYXZpb3VyIGRvZXMgbm90IGRyaWZ0IHdpdGggYSBwcm92aWRlcidzIGRlZmF1bHQg4oCUIGV4Y2VwdCBvbiBtb2RlbHNcbiAqIHRoYXQgNDAwIG9uIHRoZSBwYXJhbWV0ZXIsIHdoZXJlIG9taXR0aW5nIGl0IElTIHRoZSBkZXRlcm1pbmlzdGljIGNob2ljZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbXBsaW5nVGVtcGVyYXR1cmUobW9kZWxJZDogc3RyaW5nLCB0ZW1wZXJhdHVyZTogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE5PX1NBTVBMSU5HX01PREVMLnRlc3QobW9kZWxJZCkgPyB1bmRlZmluZWQgOiB0ZW1wZXJhdHVyZTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIGFpQ2FsbFNldHRpbmdzfSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlDYWxsT3B0aW9ucyB7XG4gIC8qKiBUaGUgcmVzb2x2ZWQgc2VsZWN0aW9uIOKAlCBzdXBwbGllcyB0aGUgbW9kZWwgaWQgdGhlIHRlbXBlcmF0dXJlIHJ1bGUgbmVlZHMuICovXG4gIHNlbGVjdGlvbjogUGljazxSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLCAnbW9kZWxJZCc+O1xuICAvKiogVGhlIHJlcXVlc3QncyBvd24gc2lnbmFsIChjbGllbnQgZGlzY29ubmVjdCk7IG9taXQgZm9yIHNjaGVkdWxlZCB3b3JrLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRoaXMgY2FsbCdzIG93biBjYXA7IGNsYW1wZWQgdG8ge0BsaW5rIEFJX01BWF9PVVRQVVRfVE9LRU5TfS4gKi9cbiAgbWF4T3V0cHV0VG9rZW5zPzogbnVtYmVyO1xuICAvKiogSW50ZW5kZWQgdGVtcGVyYXR1cmU7IGRyb3BwZWQgZm9yIG1vZGVscyB0aGF0IHJlZnVzZSBvbmUgKHNlZSB7QGxpbmsgc2FtcGxpbmdUZW1wZXJhdHVyZX0pLiAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgLyoqIE92ZXJyaWRlIHtAbGluayBBSV9SRVFVRVNUX1RJTUVPVVRfTVN9IGZvciB0aGlzIGNhbGwuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIFRoZSBzZXR0aW5ncyBldmVyeSBgZ2VuZXJhdGVUZXh0YCAvIGBzdHJlYW1UZXh0YCAvIGBnZW5lcmF0ZU9iamVjdGAgY2FsbCBzcHJlYWRzIGluLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUNhbGxTZXR0aW5ncyB7XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgbWF4T3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIG1heFJldHJpZXM6IG51bWJlcjtcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBwZXItY2FsbCBzZXR0aW5nczogYHsgYWJvcnRTaWduYWwsIG1heE91dHB1dFRva2VucywgbWF4UmV0cmllcywgdGVtcGVyYXR1cmU/IH1gLlxuICogU3ByZWFkIGludG8gdGhlIFNESyBjYWxsOiBgZ2VuZXJhdGVUZXh0KHsgbW9kZWwsIC4uLmFpQ2FsbFNldHRpbmdzKHsgc2VsZWN0aW9uLCBzaWduYWwgfSksIOKApiB9KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhaUNhbGxTZXR0aW5ncyhvcHRzOiBBSUNhbGxPcHRpb25zKTogQUlDYWxsU2V0dGluZ3Mge1xuICBjb25zdCB0ZW1wZXJhdHVyZSA9IG9wdHMudGVtcGVyYXR1cmUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNhbXBsaW5nVGVtcGVyYXR1cmUob3B0cy5zZWxlY3Rpb24ubW9kZWxJZCwgb3B0cy50ZW1wZXJhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgYWJvcnRTaWduYWw6IGFpQ2FsbFNpZ25hbChvcHRzLnNpZ25hbCwgb3B0cy50aW1lb3V0TXMpLFxuICAgIG1heE91dHB1dFRva2VuczogY2FwT3V0cHV0VG9rZW5zKG9wdHMubWF4T3V0cHV0VG9rZW5zKSxcbiAgICBtYXhSZXRyaWVzOiBBSV9NQVhfUkVUUklFUyxcbiAgICAuLi4odGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCA/IHsgdGVtcGVyYXR1cmUgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gLS0gUHJvbXB0IGNhY2hpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIHN5c3RlbSBwcm9tcHQgbWFya2VkIGNhY2hlYWJsZSBmb3IgdGhlIHByb3ZpZGVycyB0aGF0IHN1cHBvcnQgZXhwbGljaXRcbiAqIGJyZWFrcG9pbnRzIChBbnRocm9waWMgYGNhY2hlQ29udHJvbGAsIEJlZHJvY2sgYGNhY2hlUG9pbnRgKTsgb3RoZXIgcHJvdmlkZXJzXG4gKiBpZ25vcmUgdGhlIG9wdGlvbnMgYW5kIGNhY2hlIGF1dG9tYXRpY2FsbHkgb3Igbm90IGF0IGFsbC5cbiAqXG4gKiBQYXNzIHRoZSBTVEFUSUMgcGFydCBvbmx5IOKAlCB0aGUgY2FjaGUgaXMgYSBwcmVmaXggbWF0Y2gsIHNvIGFueXRoaW5nIHRoYXQgdmFyaWVzXG4gKiBwZXIgcmVxdWVzdCAocmV0cmlldmVkIGRvY3MsIHRoZSB1c2VyJ3MgZGF0YSkgbXVzdCBjb21lIGFmdGVyIGl0LCBpbiBhIHNlY29uZFxuICogc3lzdGVtIG1lc3NhZ2Ugb3IgdGhlIG1lc3NhZ2VzLiBBbnRocm9waWMgY2FjaGVzIHRvb2xzIOKGkiBzeXN0ZW0g4oaSIG1lc3NhZ2VzLCBzbyBhXG4gKiBicmVha3BvaW50IGhlcmUgYWxzbyBjb3ZlcnMgYSB0b29sLWNhbGxpbmcgYWdlbnQncyB0b29sIGRlZmluaXRpb25zLiBQcm9tcHRzIHVuZGVyXG4gKiB0aGUgbW9kZWwncyBtaW5pbXVtIGNhY2hlYWJsZSBsZW5ndGggKDUxMiB0b2tlbnMgb24gdGhlIGN1cnJlbnQgQ2xhdWRlIG1vZGVscylcbiAqIHNpbXBseSBhcmUgbm90IGNhY2hlZCDigJQgaGFybWxlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWRTeXN0ZW1Qcm9tcHQodGV4dDogc3RyaW5nKTogU3lzdGVtTW9kZWxNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnc3lzdGVtJyxcbiAgICBjb250ZW50OiB0ZXh0LFxuICAgIHByb3ZpZGVyT3B0aW9uczoge1xuICAgICAgYW50aHJvcGljOiB7IGNhY2hlQ29udHJvbDogeyB0eXBlOiAnZXBoZW1lcmFsJyB9IH0sXG4gICAgICBiZWRyb2NrOiB7IGNhY2hlUG9pbnQ6IHsgdHlwZTogJ2RlZmF1bHQnIH0gfSxcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLSBVbnRydXN0ZWQgZGF0YSBpbiBwcm9tcHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEZsYXR0ZW4gdW50cnVzdGVkIHRleHQgdG8gb25lIGxpbmUgKG5vIGNvbnRyb2wgY2hhcmFjdGVycyksIGNhcCBpdCwgYW5kIHJlbmRlciBpdFxuICogYXMgYSBxdW90ZWQgSlNPTiBzdHJpbmcg4oCUIGFuIGluZXJ0IHZhbHVlLCBuZXZlciBwcm9zZSB0aGUgbW9kZWwgY291bGQgcmVhZCBhcyBhblxuICogaW5zdHJ1Y3Rpb24uIEZvciBzaG9ydCBmaWVsZHMgKG5hbWVzLCBrZXl3b3Jkcywgc3VtbWFyaWVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzUHJvbXB0RGF0YSh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBtYXg6IG51bWJlcik6IHN0cmluZyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIHN0cmlwcGluZyBjb250cm9sIGNoYXJhY3RlcnMgaXMgdGhlIHBvaW50XG4gIGNvbnN0IGZsYXQgPSAodGV4dCA/PyAnJykucmVwbGFjZSgvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZcXHNdKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZsYXQubGVuZ3RoID4gbWF4ID8gZmxhdC5zbGljZSgwLCBtYXgpIDogZmxhdCk7XG59XG5cbi8qKlxuICogRmVuY2UgYSBTVFJVQ1RVUkVEIHVudHJ1c3RlZCB2YWx1ZSAoYSByZXBvc2l0b3J5IGFuYWx5c2lzLCBhIGNvbmZpZykgaW50byBhIHByb21wdDpcbiAqIEpTT04tc2VyaWFsaXplZCwgY2FwcGVkIGF0IGBtYXhDaGFyc2AsIGJldHdlZW4gbGFiZWxsZWQgZGVsaW1pdGVycyB0aGUgbW9kZWwgaXMgdG9sZFxuICogdG8gdHJlYXQgYXMgZGF0YS4gQW55IGRlbGltaXRlci1sb29raW5nIHRleHQgaW5zaWRlIHRoZSB2YWx1ZSBpcyBkZWZhbmdlZCBmaXJzdCwgc29cbiAqIHRoZSB2YWx1ZSBjYW5ub3QgY2xvc2UgaXRzIG93biBmZW5jZSBhbmQgY29udGludWUgYXMgaW5zdHJ1Y3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNQcm9tcHREYXRhQmxvY2sobGFiZWw6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1heENoYXJzID0gOF8wMDApOiBzdHJpbmcge1xuICBsZXQganNvbjogc3RyaW5nO1xuICB0cnkge1xuICAgIGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPz8gJ251bGwnO1xuICB9IGNhdGNoIHtcbiAgICBqc29uID0gJ1wiW3Vuc2VyaWFsaXphYmxlXVwiJztcbiAgfVxuICBjb25zdCBjYXBwZWQgPSBqc29uLmxlbmd0aCA+IG1heENoYXJzID8gYCR7anNvbi5zbGljZSgwLCBtYXhDaGFycyl94oCmW3RydW5jYXRlZF1gIDoganNvbjtcbiAgY29uc3Qgc2FmZSA9IGNhcHBlZC5yZXBsYWNlKC88PDx8Pj4+L2csICfCqycpO1xuICByZXR1cm4gYDw8PERBVEEgJHtsYWJlbH0g4oCUIHVudHJ1c3RlZCBkYXRhLCBub3QgaW5zdHJ1Y3Rpb25zPj4+XFxuJHtzYWZlfVxcbjw8PEVORCAke2xhYmVsfT4+PmA7XG59XG5cbi8vIC0tIEZhaWxvdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVHJ1ZSBmb3IgYSBmYWlsdXJlIHdvcnRoIHRyeWluZyBBTk9USEVSIHByb3ZpZGVyIGZvcjogdGhlIHByb3ZpZGVyIGlzIG92ZXJsb2FkZWQgb3JcbiAqIGRvd24gKDV4eCwgNTI5KSwgaXQgdGltZWQgb3V0LCBvciB0aGUgY29ubmVjdGlvbiBmYWlsZWQuIE5vdCBhIDR4eCDigJQgYSBiYWQgcmVxdWVzdFxuICogZmFpbHMgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGFuZCBhIDQwMS80MjkgaXMgYWJvdXQgdGhpcyBwcm92aWRlcidzIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0cnlhYmxlQUlFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAvLyBEdWNrLXR5cGVkIG9uIHRoZSBTREsncyBgQVBJQ2FsbEVycm9yYCBmaWVsZHMgcmF0aGVyIHRoYW4gYGluc3RhbmNlb2ZgOiB0aGVcbiAgLy8gY2hlY2sgbXVzdCBob2xkIGFjcm9zcyBkdXBsaWNhdGVkIGBhaWAgY29waWVzIGFuZCB1bmRlciB0ZXN0IGRvdWJsZXMgb2YgaXQuXG4gIGNvbnN0IGUgPSBlcnJvciBhcyB7IG5hbWU/OiB1bmtub3duOyBjb2RlPzogdW5rbm93bjsgc3RhdHVzQ29kZT86IHVua25vd247IGlzUmV0cnlhYmxlPzogdW5rbm93bjsgY2F1c2U/OiB7IG5hbWU/OiB1bmtub3duIH0gfSB8IG51bGw7XG4gIGlmICh0eXBlb2YgZT8uc3RhdHVzQ29kZSA9PT0gJ251bWJlcicpIHJldHVybiBlLnN0YXR1c0NvZGUgPj0gNTAwO1xuICBpZiAoZT8ubmFtZSA9PT0gJ0FJX0FQSUNhbGxFcnJvcicgJiYgdHlwZW9mIGUuaXNSZXRyeWFibGUgPT09ICdib29sZWFuJykgcmV0dXJuIGUuaXNSZXRyeWFibGU7XG4gIGlmIChlPy5uYW1lID09PSAnVGltZW91dEVycm9yJyB8fCBlPy5jYXVzZT8ubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcicpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIGU/LmNvZGUgPT09ICdzdHJpbmcnICYmIFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJywgJ0VBSV9BR0FJTicsICdVTkRfRVJSX1NPQ0tFVCddLmluY2x1ZGVzKGUuY29kZSk7XG59XG5cbi8qKlxuICogVGhlIHBsYXRmb3JtJ3MgcHJvdmlkZXIgZmFpbG92ZXIgY2hhaW4gKGBBSV9GQUlMT1ZFUl9QUk9WSURFUlNgLCBjb21tYS1zZXBhcmF0ZWRcbiAqIHByb3ZpZGVyIGlkcyksIGVsc2UgZXZlcnkgcGxhdGZvcm0tY29uZmlndXJlZCBwcm92aWRlciBpbiByZWdpc3RyeSBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtRmFpbG92ZXJDaGFpbigpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBnZXRBdmFpbGFibGVQcm92aWRlcnMoKS5tYXAoKHApID0+IHAuaWQpO1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5BSV9GQUlMT1ZFUl9QUk9WSURFUlM7XG4gIGlmICghcmF3KSByZXR1cm4gY29uZmlndXJlZDtcbiAgcmV0dXJuIHJhdy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcigoaWQpID0+IGNvbmZpZ3VyZWQuaW5jbHVkZXMoaWQpKTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIHJ1bldpdGhGYWlsb3Zlcn0gcmVwb3J0cyBhYm91dCB0aGUgY2FsbCB0aGF0IGFuc3dlcmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsb3Zlck91dGNvbWU8VD4ge1xuICB2YWx1ZTogVDtcbiAgLyoqIFRoZSBzZWxlY3Rpb24gdGhhdCBhY3R1YWxseSBzZXJ2ZWQgdGhlIGNhbGwgKGRpZmZlcnMgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgYSBmYWlsb3ZlcikuICovXG4gIHNlbGVjdGlvbjogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbjtcbiAgLyoqIFByb3ZpZGVycyB0aGF0IGZhaWxlZCByZXRyeWFibHkgYmVmb3JlIGBzZWxlY3Rpb25gIGFuc3dlcmVkLCBpbiBvcmRlci4gKi9cbiAgZmFpbGVkT3Zlcjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbG92ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRydWUgb25jZSB0aGUgY3VycmVudCBhdHRlbXB0IGhhcyBoYWQgYSByZXNwb25zZSBmcm9tIHRoZSBwcm92aWRlciAoYSBzdHJlYW1lZFxuICAgKiBjaHVuaywgYSB0b29sIGNhbGwpLiBGcm9tIHRoZW4gb24gYSBmYWlsdXJlIGlzIGZpbmFsOiByZS1ydW5uaW5nIHdvdWxkIHJlcGVhdFxuICAgKiBwYWlkIHdvcmsgYW5kIGFueSB0b29sIHNpZGUgZWZmZWN0cy4gT21pdCBmb3Igb25lLXNob3QgY2FsbHMuXG4gICAqL1xuICBjb250YWN0ZWQ/OiAoKSA9PiBib29sZWFuO1xuICAvKiogT3ZlcnJpZGUgdGhlIGNoYWluIChkZWZhdWx0IHtAbGluayBwbGF0Zm9ybUZhaWxvdmVyQ2hhaW59KS4gKi9cbiAgY2hhaW4/OiBzdHJpbmdbXTtcbiAgLyoqIENhbGxlZCBvbmNlIHBlciBmYWlsb3ZlciwgZm9yIGEgbG9nIGxpbmUgLyBtZXRyaWMuICovXG4gIG9uRmFpbG92ZXI/OiAoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSdW4gb25lIEFJIGNhbGwsIGZhaWxpbmcgb3ZlciB0byB0aGUgbmV4dCBwcm92aWRlciBpbiB0aGUgcGxhdGZvcm0gY2hhaW4gd2hlbiB0aGVcbiAqIGN1cnJlbnQgb25lIGZhaWxzIFJFVFJZQUJMWSAoe0BsaW5rIGlzUmV0cnlhYmxlQUlFcnJvcn0pIGJlZm9yZSByZXNwb25kaW5nLlxuICpcbiAqIE9OTFkgZm9yIHBsYXRmb3JtLWtleSBzZWxlY3Rpb25zOiBhIHJlcXVlc3Qgc2VydmVkIG9uIGEgYnJpbmcteW91ci1vd24gb3Igb3JnIGtleVxuICogaXMgYmlsbGVkIHRvIHRoYXQga2V5J3Mgb3duZXIsIGFuZCBzaWxlbnRseSByZS1ydW5uaW5nIGl0IG9uIHRoZSBwbGF0Zm9ybSdzIGtleSAob3JcbiAqIGFub3RoZXIgb3JnIHByb3ZpZGVyKSB3b3VsZCBzcGVuZCBzb21lb25lIGVsc2UncyBtb25leSDigJQgc28gdGhvc2UgZmFpbCBhcyB0aGV5IGFyZS5cbiAqIFRoZSBTREsncyBvd24gc2FtZS1wcm92aWRlciByZXRyaWVzICh7QGxpbmsgQUlfTUFYX1JFVFJJRVN9KSBoYXBwZW4gaW5zaWRlIGVhY2ggYXR0ZW1wdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhGYWlsb3ZlcjxUPihcbiAgc2VsZWN0aW9uOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLFxuICBhdHRlbXB0OiAoc2VsZWN0aW9uOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uKSA9PiBQcm9taXNlPFQ+LFxuICBvcHRzOiBGYWlsb3Zlck9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8RmFpbG92ZXJPdXRjb21lPFQ+PiB7XG4gIGNvbnN0IGZhaWxlZE92ZXI6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50ID0gc2VsZWN0aW9uO1xuICBjb25zdCBjaGFpbiA9IChvcHRzLmNoYWluID8/IHBsYXRmb3JtRmFpbG92ZXJDaGFpbigpKS5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gc2VsZWN0aW9uLnByb3ZpZGVyKTtcbiAgZm9yICg7Oykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogYXdhaXQgYXR0ZW1wdChjdXJyZW50KSwgc2VsZWN0aW9uOiBjdXJyZW50LCBmYWlsZWRPdmVyIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGNhbkZhaWxPdmVyID0gY3VycmVudC5rZXlTb3VyY2UgPT09ICdwbGF0Zm9ybSdcbiAgICAgICAgJiYgaXNSZXRyeWFibGVBSUVycm9yKGVycm9yKVxuICAgICAgICAmJiAhKG9wdHMuY29udGFjdGVkPy4oKSA/PyBmYWxzZSk7XG4gICAgICBjb25zdCBuZXh0ID0gY2FuRmFpbE92ZXIgPyBuZXh0UGxhdGZvcm1TZWxlY3Rpb24oY2hhaW4sIGN1cnJlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFuZXh0KSB0aHJvdyBlcnJvcjtcbiAgICAgIGZhaWxlZE92ZXIucHVzaChjdXJyZW50LnByb3ZpZGVyKTtcbiAgICAgIG9wdHMub25GYWlsb3Zlcj8uKGN1cnJlbnQucHJvdmlkZXIsIG5leHQucHJvdmlkZXIsIGVycm9yKTtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cbiAgfVxufVxuXG4vKiogVGhlIG5leHQgcHJvdmlkZXIgaW4gYGNoYWluYCAoY29uc3VtZWQgaW4gcGxhY2UpIHRoYXQgcmVzb2x2ZXMgb24gYSBwbGF0Zm9ybSBrZXkuICovXG5mdW5jdGlvbiBuZXh0UGxhdGZvcm1TZWxlY3Rpb24oY2hhaW46IHN0cmluZ1tdLCBmcm9tOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uKTogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHdoaWxlIChjaGFpbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBjaGFpbi5zaGlmdCgpITtcbiAgICBjb25zdCBtb2RlbElkID0gZ2V0QXZhaWxhYmxlUHJvdmlkZXJzKCkuZmluZCgocCkgPT4gcC5pZCA9PT0gcHJvdmlkZXIpPy5tb2RlbHNbMF0/LmlkO1xuICAgIGlmICghbW9kZWxJZCkgY29udGludWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IG1vZGVsOiByZXNvbHZlTW9kZWwocHJvdmlkZXIsIG1vZGVsSWQpLCBwcm92aWRlciwgbW9kZWxJZCwga2V5U291cmNlOiAncGxhdGZvcm0nLCBmYWxsYmFja0Zyb206IGZyb20uZmFsbGJhY2tGcm9tID8/IGZyb20ucHJvdmlkZXIgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyAtLSBBdWRpdCArIGFjY291bnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBUb2tlbiBjb3VudHMgcmVhZCBmcm9tIGFuIFNESyB1c2FnZSBvYmplY3QgKG1pc3NpbmcgZmllbGRzIOKGkiAwKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlUb2tlblVzYWdlIHtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIC8qKiBJbnB1dCB0b2tlbnMgc2VydmVkIGZyb20gdGhlIHByb3ZpZGVyJ3MgcHJvbXB0IGNhY2hlLiAqL1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vKiogTm9ybWFsaXplIGFuIFNESyBgTGFuZ3VhZ2VNb2RlbFVzYWdlYCAob3Igbm90aGluZykgaW50byB7QGxpbmsgQUlUb2tlblVzYWdlfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlblVzYWdlKHVzYWdlOiBQYXJ0aWFsPExhbmd1YWdlTW9kZWxVc2FnZT4gfCB1bmRlZmluZWQgfCBudWxsKTogQUlUb2tlblVzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFRva2VuczogdXNhZ2U/LmlucHV0VG9rZW5zID8/IDAsXG4gICAgb3V0cHV0VG9rZW5zOiB1c2FnZT8ub3V0cHV0VG9rZW5zID8/IDAsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlPy5pbnB1dFRva2VuRGV0YWlscz8uY2FjaGVSZWFkVG9rZW5zID8/IDAsXG4gIH07XG59XG5cbi8qKiBUaGUgYXVkaXQgYGRldGFpbHNgIGJsb2NrIGV2ZXJ5IEFJIGNhbGwgcmVjb3Jkcy4gU0FGRSBNRVRBREFUQSBPTkxZIOKAlCBuZXZlciBhIHByb21wdCwgYW4gYW5zd2VyIG9yIGEga2V5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSVVzYWdlQXVkaXREZXRhaWxzIHtcbiAgLyoqIFRoZSBwcm92aWRlciB0aGF0IEFOU1dFUkVEIChhZnRlciBhbnkgZmFpbG92ZXIpLCBub3QgdGhlIG9uZSByZXF1ZXN0ZWQuICovXG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8qKiBXaG9zZSBrZXkgcGFpZDogdGhlIGNhbGxlcidzIG93biAoYHJlcXVlc3RgKSwgdGhlIG9yZydzIChgb3JnYCksIG9yIHRoZSBwbGF0Zm9ybSdzLiAqL1xuICBrZXlTb3VyY2U6IEtleVNvdXJjZTtcbiAgLyoqIFNldCB3aGVuIGEgZmFpbG92ZXIgc2VydmVkIHRoZSBjYWxsOiB0aGUgcHJvdmlkZXIgb3JpZ2luYWxseSByZXNvbHZlZC4gKi9cbiAgZmFsbGJhY2tGcm9tPzogc3RyaW5nO1xuICAvKiogSG93IHRoZSBjYWxsJ3MgYGFpQ2FsbHNgIHNsb3Qgc2V0dGxlZC4gKi9cbiAgcXVvdGFTbG90PzogJ2tlcHQnIHwgJ3JlZnVuZGVkJztcbiAgdG9rZW5zOiBBSVRva2VuVXNhZ2U7XG4gIC8qKiBUaGUgdmVyc2lvbmVkIHByb21wdCB0aGUgY2FsbCByYW4gKGUuZy4gYGFzay1ob3d0b0AzYCkuICovXG4gIHByb21wdFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGF1ZGl0IGBkZXRhaWxzYCBmb3Igb25lIEFJIGNhbGwgZnJvbSB0aGUgc2VsZWN0aW9uIHRoYXQgc2VydmVkIGl0IGFuZFxuICogdGhlIFNESyB1c2FnZSBpdCByZXBvcnRlZC4gU3ByZWFkIGludG8gYSBgcmVjb3JkQXVkaXQoeyBkZXRhaWxzIH0pYCBhbG9uZ3NpZGUgdGhlXG4gKiByb3V0ZSdzIG93biBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhaVVzYWdlQXVkaXREZXRhaWxzKFxuICBzZWxlY3Rpb246IFBpY2s8UmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiwgJ3Byb3ZpZGVyJyB8ICdtb2RlbElkJyB8ICdrZXlTb3VyY2UnIHwgJ2ZhbGxiYWNrRnJvbSc+LFxuICBleHRyYTogeyB1c2FnZT86IFBhcnRpYWw8TGFuZ3VhZ2VNb2RlbFVzYWdlPiB8IEFJVG9rZW5Vc2FnZSB8IG51bGw7IHF1b3RhU2xvdD86ICdrZXB0JyB8ICdyZWZ1bmRlZCc7IHByb21wdFZlcnNpb24/OiBzdHJpbmcgfSA9IHt9LFxuKTogQUlVc2FnZUF1ZGl0RGV0YWlscyB7XG4gIGNvbnN0IHVzYWdlID0gZXh0cmEudXNhZ2UgYXMgUGFydGlhbDxMYW5ndWFnZU1vZGVsVXNhZ2U+ICYgUGFydGlhbDxBSVRva2VuVXNhZ2U+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29uc3QgdG9rZW5zOiBBSVRva2VuVXNhZ2UgPSB1c2FnZSAmJiB0eXBlb2YgdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMgPT09ICdudW1iZXInXG4gICAgPyB7IGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyA/PyAwLCBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyA/PyAwLCBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMgfVxuICAgIDogdG9rZW5Vc2FnZSh1c2FnZSk7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZXI6IHNlbGVjdGlvbi5wcm92aWRlcixcbiAgICBtb2RlbDogc2VsZWN0aW9uLm1vZGVsSWQsXG4gICAga2V5U291cmNlOiBzZWxlY3Rpb24ua2V5U291cmNlLFxuICAgIC4uLihzZWxlY3Rpb24uZmFsbGJhY2tGcm9tID8geyBmYWxsYmFja0Zyb206IHNlbGVjdGlvbi5mYWxsYmFja0Zyb20gfSA6IHt9KSxcbiAgICAuLi4oZXh0cmEucXVvdGFTbG90ID8geyBxdW90YVNsb3Q6IGV4dHJhLnF1b3RhU2xvdCB9IDoge30pLFxuICAgIHRva2VucyxcbiAgICAuLi4oZXh0cmEucHJvbXB0VmVyc2lvbiA/IHsgcHJvbXB0VmVyc2lvbjogZXh0cmEucHJvbXB0VmVyc2lvbiB9IDoge30pLFxuICB9O1xufVxuIl19
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2FsbC5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FpLWNhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQTRDLE1BQU0sNEJBQTRCLENBQUM7QUFHOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBK0IsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRywrRUFBK0U7QUFFL0U7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUU5Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXRGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxhQUEyQixFQUFFLFNBQVMsR0FBVyxxQkFBcUI7SUFDakcsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0UsQ0FBQztBQUVELDBHQUEwRztBQUMxRyxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQWtCO0lBQ2hELE9BQU8s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QUM7QUFDSixDQUFDO0FBa0JEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFNBQThGLEVBQzlGLEtBQUssR0FBeUgsRUFBRTtJQUVoSSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBK0UsQ0FBQztJQUNwRyxNQUFNLE1BQU0sR0FBaUIsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLFFBQVE7UUFDL0UsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDNUgsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixPQUFPO1FBQ0wsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTztRQUN4QixTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7UUFDOUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNO1FBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3ZFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHBlci1DQUxMIHBvbGljeSBldmVyeSBBSSByZXF1ZXN0IGluIHRoZSBwbGF0Zm9ybSBzaGFyZXM6IGhvdyBsb25nIGl0IG1heSBydW4sXG4gKiBob3cgbXVjaCBpdCBtYXkgd3JpdGUsIGhvdyBvZnRlbiB0aGUgU0RLIHJldHJpZXMsIHdoZXRoZXIgdGhlIHByb3ZpZGVyIG1heSBjYWNoZVxuICogdGhlIHN0YXRpYyBwcm9tcHQsIGhvdyB1bnRydXN0ZWQgdGV4dCBpcyBmZW5jZWQgaW50byBhIHByb21wdCwgaG93IGEgcGxhdGZvcm0ta2V5XG4gKiBmYWlsdXJlIGZhaWxzIG92ZXIgdG8gdGhlIG5leHQgcHJvdmlkZXIsIGFuZCB3aGF0IHRoZSBhdWRpdCB0cmFpbCByZWNvcmRzIGFib3V0XG4gKiB0aGUgY2FsbCBhZnRlcndhcmRzLlxuICpcbiAqIE9uZSBtb2R1bGUgc28gdGhhdCBhIG5ldyBBSSBlbnRyeSBwb2ludCBnZXRzIGV2ZXJ5IG9uZSBvZiB0aGVzZSBieSBjYWxsaW5nXG4gKiB7QGxpbmsgYWlDYWxsU2V0dGluZ3N9IGFuZCB7QGxpbmsgYWlVc2FnZUF1ZGl0RGV0YWlsc30sIHJhdGhlciB0aGFuIHJlLWRlY2lkaW5nIGVhY2hcbiAqICh3aGljaCBpcyBob3cgdGhlIHBsYXRmb3JtIGVuZGVkIHVwIHdpdGggY2FsbHMgdGhhdCBoYWQgbm8gdGltZW91dCwgbm8gb3V0cHV0IGNhcCxcbiAqIGFuZCBubyBhdWRpdCByb3cpLlxuICovXG5cbmltcG9ydCB7IGVudkludCwgdHlwZSBBaUtleVNvdXJjZSwgdHlwZSBBaVF1b3RhU2V0dGxlbWVudCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbFVzYWdlLCBTeXN0ZW1Nb2RlbE1lc3NhZ2UgfSBmcm9tICdhaSc7XG5cbmltcG9ydCB7IGdldEF2YWlsYWJsZVByb3ZpZGVycywgcmVzb2x2ZU1vZGVsLCB0eXBlIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24gfSBmcm9tICcuL3Byb3ZpZGVyLXJlZ2lzdHJ5LmpzJztcblxuLy8gLS0gTGltaXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFdhbGwtY2xvY2sgYm91bmQgb24gT05FIEFJIGNhbGwgKGBBSV9SRVFVRVNUX1RJTUVPVVRfTVNgLCBkZWZhdWx0IDEyMHMpLCByZXRyaWVzXG4gKiBpbmNsdWRlZC4gQSBwcm92aWRlciB0aGF0IHN0YWxscyBtdXN0IG5vdCBob2xkIGEgcmVxdWVzdCDigJQgb3IgYSBzY2hlZHVsZWQgcmVwb3J0XG4gKiBydW4sIHdoaWNoIGhhcyBubyBjbGllbnQgdG8gZGlzY29ubmVjdCDigJQgb3BlbiBpbmRlZmluaXRlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9SRVFVRVNUX1RJTUVPVVRfTVMgPSBlbnZJbnQoJ0FJX1JFUVVFU1RfVElNRU9VVF9NUycsIDEyMF8wMDAsIHsgbWluOiAxXzAwMCB9KTtcblxuLyoqXG4gKiBQbGF0Zm9ybS13aWRlIG91dHB1dCBjYXAgcGVyIG1vZGVsIGNhbGwgKGBBSV9NQVhfT1VUUFVUX1RPS0VOU2AsIGRlZmF1bHQgODE5MikuIFRoZVxuICogQ0VJTElORzogYSBjYWxsIG1heSBhc2sgZm9yIGxlc3MgKHRoZSBBc2sgYXNzaXN0YW50IGFuZCByZXBvcnQgc3VtbWFyaWVzIGRvKSwgbmV2ZXJcbiAqIG1vcmUg4oCUIHNvIG9uZSBgYWlDYWxsc2Agc2xvdCBoYXMgYSBib3VuZGVkIGNvc3Qgd2hhdGV2ZXIgYSBwcm9tcHQgYXNrcyBmb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9NQVhfT1VUUFVUX1RPS0VOUyA9IGVudkludCgnQUlfTUFYX09VVFBVVF9UT0tFTlMnLCA4MTkyLCB7IG1pbjogNjQgfSk7XG5cbi8qKlxuICogU0RLLWxldmVsIHJldHJpZXMgcGVyIGNhbGwgKGBBSV9NQVhfUkVUUklFU2AsIGRlZmF1bHQgMiDigJQgdGhlIFNESydzIG93biBkZWZhdWx0LFxuICogc3RhdGVkIGV4cGxpY2l0bHkgc28gaXQgaXMgYSBkZWNpc2lvbiByYXRoZXIgdGhhbiBhbiBhY2NpZGVudCkuIFRoZSBTREsgcmV0cmllc1xuICogNDA4LzQwOS80MjkvNXh4IGFuZCBjb25uZWN0aW9uIGVycm9ycyBvbiB0aGUgU0FNRSBwcm92aWRlcjsgY3Jvc3MtcHJvdmlkZXIgZmFpbG92ZXJcbiAqIGlzIHtAbGluayBydW5XaXRoRmFpbG92ZXJ9J3Mgam9iLlxuICovXG5leHBvcnQgY29uc3QgQUlfTUFYX1JFVFJJRVMgPSBlbnZJbnQoJ0FJX01BWF9SRVRSSUVTJywgMiwgeyBtaW46IDAsIG1heDogNSB9KTtcblxuLyoqXG4gKiBUaGUgc2lnbmFsIGZvciBvbmUgQUkgY2FsbDogYWJvcnRzIHdoZW4gdGhlIHJlcXVlc3QncyBvd24gc2lnbmFsIGRvZXMgKGNsaWVudFxuICogZGlzY29ubmVjdCwgU1NFIGNsb3NlKSBPUiB3aGVuIHtAbGluayBBSV9SRVFVRVNUX1RJTUVPVVRfTVN9IGVsYXBzZXMg4oCUIHdoaWNoZXZlclxuICogY29tZXMgZmlyc3QuIEEgdGltZW91dCBhYm9ydHMgd2l0aCBhIGBUaW1lb3V0RXJyb3JgLCB3aGljaCBgaGFuZGxlQUlFcnJvcmAgYW5zd2Vyc1xuICogYXMgNTA0LiBQYXNzIG5vIHJlcXVlc3Qgc2lnbmFsIGZvciB3b3JrIHdpdGggbm8gY2xpZW50IChhIHNjaGVkdWxlZCBqb2IpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWlDYWxsU2lnbmFsKHJlcXVlc3RTaWduYWw/OiBBYm9ydFNpZ25hbCwgdGltZW91dE1zOiBudW1iZXIgPSBBSV9SRVFVRVNUX1RJTUVPVVRfTVMpOiBBYm9ydFNpZ25hbCB7XG4gIGNvbnN0IHRpbWVvdXQgPSBBYm9ydFNpZ25hbC50aW1lb3V0KHRpbWVvdXRNcyk7XG4gIHJldHVybiByZXF1ZXN0U2lnbmFsID8gQWJvcnRTaWduYWwuYW55KFtyZXF1ZXN0U2lnbmFsLCB0aW1lb3V0XSkgOiB0aW1lb3V0O1xufVxuXG4vKiogYHJlcXVlc3RlZGAgY2xhbXBlZCB0byB0aGUgcGxhdGZvcm0gY2VpbGluZyAoe0BsaW5rIEFJX01BWF9PVVRQVVRfVE9LRU5TfSk7IHRoZSBjZWlsaW5nIHdoZW4gdW5zZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwT3V0cHV0VG9rZW5zKHJlcXVlc3RlZD86IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihyZXF1ZXN0ZWQgPz8gQUlfTUFYX09VVFBVVF9UT0tFTlMsIEFJX01BWF9PVVRQVVRfVE9LRU5TKTtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhhdCBSRUpFQ1QgYSBub24tZGVmYXVsdCBzYW1wbGluZyB0ZW1wZXJhdHVyZSAoNDAwKS4gVGhlIGN1cnJlbnQgQ2xhdWRlXG4gKiBnZW5lcmF0aW9uIOKAlCBGYWJsZSA1LngsIE15dGhvcywgT3B1cyA1LnggLyA0LjcgLyA0LjgsIFNvbm5ldCA1Lngg4oCUIHJlbW92ZWQgc2FtcGxpbmdcbiAqIHBhcmFtZXRlcnM7IGRlcHRoIGlzIGNvbnRyb2xsZWQgYnkgZWZmb3J0IGluc3RlYWQuIE1hdGNoZWQgb24gdGhlIG1vZGVsIGlkIHNvIGFcbiAqIEJlZHJvY2sgcHJvZmlsZSAoYHVzLmFudGhyb3BpYy5jbGF1ZGUtb3B1cy01LTVgKSBpcyBjb3ZlcmVkIHRvby5cbiAqL1xuY29uc3QgTk9fU0FNUExJTkdfTU9ERUwgPSAvY2xhdWRlLSg/OmZhYmxlfG15dGhvc3xvcHVzfHNvbm5ldCktKD86NXw0LTd8NC04KSg/OlxcRHwkKS87XG5cbi8qKlxuICogVGhlIHRlbXBlcmF0dXJlIHRvIHNlbmQgZm9yIGBtb2RlbElkYCwgb3IgYHVuZGVmaW5lZGAgd2hlcmUgdGhlIG1vZGVsIHJlZnVzZXMgb25lLlxuICogRXZlcnkgQUkgY2FsbCBzdGF0ZXMgaXRzIHRlbXBlcmF0dXJlIChsb3cgZm9yIGdyb3VuZGVkIGFuc3dlcnMgYW5kIHN0cnVjdHVyZWRcbiAqIGRyYWZ0cykgc28gYmVoYXZpb3VyIGRvZXMgbm90IGRyaWZ0IHdpdGggYSBwcm92aWRlcidzIGRlZmF1bHQg4oCUIGV4Y2VwdCBvbiBtb2RlbHNcbiAqIHRoYXQgNDAwIG9uIHRoZSBwYXJhbWV0ZXIsIHdoZXJlIG9taXR0aW5nIGl0IElTIHRoZSBkZXRlcm1pbmlzdGljIGNob2ljZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbXBsaW5nVGVtcGVyYXR1cmUobW9kZWxJZDogc3RyaW5nLCB0ZW1wZXJhdHVyZTogbnVtYmVyKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE5PX1NBTVBMSU5HX01PREVMLnRlc3QobW9kZWxJZCkgPyB1bmRlZmluZWQgOiB0ZW1wZXJhdHVyZTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIGFpQ2FsbFNldHRpbmdzfSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlDYWxsT3B0aW9ucyB7XG4gIC8qKiBUaGUgcmVzb2x2ZWQgc2VsZWN0aW9uIOKAlCBzdXBwbGllcyB0aGUgbW9kZWwgaWQgdGhlIHRlbXBlcmF0dXJlIHJ1bGUgbmVlZHMuICovXG4gIHNlbGVjdGlvbjogUGljazxSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLCAnbW9kZWxJZCc+O1xuICAvKiogVGhlIHJlcXVlc3QncyBvd24gc2lnbmFsIChjbGllbnQgZGlzY29ubmVjdCk7IG9taXQgZm9yIHNjaGVkdWxlZCB3b3JrLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRoaXMgY2FsbCdzIG93biBjYXA7IGNsYW1wZWQgdG8ge0BsaW5rIEFJX01BWF9PVVRQVVRfVE9LRU5TfS4gKi9cbiAgbWF4T3V0cHV0VG9rZW5zPzogbnVtYmVyO1xuICAvKiogSW50ZW5kZWQgdGVtcGVyYXR1cmU7IGRyb3BwZWQgZm9yIG1vZGVscyB0aGF0IHJlZnVzZSBvbmUgKHNlZSB7QGxpbmsgc2FtcGxpbmdUZW1wZXJhdHVyZX0pLiAqL1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgLyoqIE92ZXJyaWRlIHtAbGluayBBSV9SRVFVRVNUX1RJTUVPVVRfTVN9IGZvciB0aGlzIGNhbGwuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIFRoZSBzZXR0aW5ncyBldmVyeSBgZ2VuZXJhdGVUZXh0YCAvIGBzdHJlYW1UZXh0YCAvIGBnZW5lcmF0ZU9iamVjdGAgY2FsbCBzcHJlYWRzIGluLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUNhbGxTZXR0aW5ncyB7XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgbWF4T3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIG1heFJldHJpZXM6IG51bWJlcjtcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBwZXItY2FsbCBzZXR0aW5nczogYHsgYWJvcnRTaWduYWwsIG1heE91dHB1dFRva2VucywgbWF4UmV0cmllcywgdGVtcGVyYXR1cmU/IH1gLlxuICogU3ByZWFkIGludG8gdGhlIFNESyBjYWxsOiBgZ2VuZXJhdGVUZXh0KHsgbW9kZWwsIC4uLmFpQ2FsbFNldHRpbmdzKHsgc2VsZWN0aW9uLCBzaWduYWwgfSksIOKApiB9KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhaUNhbGxTZXR0aW5ncyhvcHRzOiBBSUNhbGxPcHRpb25zKTogQUlDYWxsU2V0dGluZ3Mge1xuICBjb25zdCB0ZW1wZXJhdHVyZSA9IG9wdHMudGVtcGVyYXR1cmUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNhbXBsaW5nVGVtcGVyYXR1cmUob3B0cy5zZWxlY3Rpb24ubW9kZWxJZCwgb3B0cy50ZW1wZXJhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgYWJvcnRTaWduYWw6IGFpQ2FsbFNpZ25hbChvcHRzLnNpZ25hbCwgb3B0cy50aW1lb3V0TXMpLFxuICAgIG1heE91dHB1dFRva2VuczogY2FwT3V0cHV0VG9rZW5zKG9wdHMubWF4T3V0cHV0VG9rZW5zKSxcbiAgICBtYXhSZXRyaWVzOiBBSV9NQVhfUkVUUklFUyxcbiAgICAuLi4odGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCA/IHsgdGVtcGVyYXR1cmUgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gLS0gUHJvbXB0IGNhY2hpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIHN5c3RlbSBwcm9tcHQgbWFya2VkIGNhY2hlYWJsZSBmb3IgdGhlIHByb3ZpZGVycyB0aGF0IHN1cHBvcnQgZXhwbGljaXRcbiAqIGJyZWFrcG9pbnRzIChBbnRocm9waWMgYGNhY2hlQ29udHJvbGAsIEJlZHJvY2sgYGNhY2hlUG9pbnRgKTsgb3RoZXIgcHJvdmlkZXJzXG4gKiBpZ25vcmUgdGhlIG9wdGlvbnMgYW5kIGNhY2hlIGF1dG9tYXRpY2FsbHkgb3Igbm90IGF0IGFsbC5cbiAqXG4gKiBQYXNzIHRoZSBTVEFUSUMgcGFydCBvbmx5IOKAlCB0aGUgY2FjaGUgaXMgYSBwcmVmaXggbWF0Y2gsIHNvIGFueXRoaW5nIHRoYXQgdmFyaWVzXG4gKiBwZXIgcmVxdWVzdCAocmV0cmlldmVkIGRvY3MsIHRoZSB1c2VyJ3MgZGF0YSkgbXVzdCBjb21lIGFmdGVyIGl0LCBpbiBhIHNlY29uZFxuICogc3lzdGVtIG1lc3NhZ2Ugb3IgdGhlIG1lc3NhZ2VzLiBBbnRocm9waWMgY2FjaGVzIHRvb2xzIOKGkiBzeXN0ZW0g4oaSIG1lc3NhZ2VzLCBzbyBhXG4gKiBicmVha3BvaW50IGhlcmUgYWxzbyBjb3ZlcnMgYSB0b29sLWNhbGxpbmcgYWdlbnQncyB0b29sIGRlZmluaXRpb25zLiBQcm9tcHRzIHVuZGVyXG4gKiB0aGUgbW9kZWwncyBtaW5pbXVtIGNhY2hlYWJsZSBsZW5ndGggKDUxMiB0b2tlbnMgb24gdGhlIGN1cnJlbnQgQ2xhdWRlIG1vZGVscylcbiAqIHNpbXBseSBhcmUgbm90IGNhY2hlZCDigJQgaGFybWxlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWRTeXN0ZW1Qcm9tcHQodGV4dDogc3RyaW5nKTogU3lzdGVtTW9kZWxNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnc3lzdGVtJyxcbiAgICBjb250ZW50OiB0ZXh0LFxuICAgIHByb3ZpZGVyT3B0aW9uczoge1xuICAgICAgYW50aHJvcGljOiB7IGNhY2hlQ29udHJvbDogeyB0eXBlOiAnZXBoZW1lcmFsJyB9IH0sXG4gICAgICBiZWRyb2NrOiB7IGNhY2hlUG9pbnQ6IHsgdHlwZTogJ2RlZmF1bHQnIH0gfSxcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLSBVbnRydXN0ZWQgZGF0YSBpbiBwcm9tcHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEZsYXR0ZW4gdW50cnVzdGVkIHRleHQgdG8gb25lIGxpbmUgKG5vIGNvbnRyb2wgY2hhcmFjdGVycyksIGNhcCBpdCwgYW5kIHJlbmRlciBpdFxuICogYXMgYSBxdW90ZWQgSlNPTiBzdHJpbmcg4oCUIGFuIGluZXJ0IHZhbHVlLCBuZXZlciBwcm9zZSB0aGUgbW9kZWwgY291bGQgcmVhZCBhcyBhblxuICogaW5zdHJ1Y3Rpb24uIEZvciBzaG9ydCBmaWVsZHMgKG5hbWVzLCBrZXl3b3Jkcywgc3VtbWFyaWVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzUHJvbXB0RGF0YSh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBtYXg6IG51bWJlcik6IHN0cmluZyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIHN0cmlwcGluZyBjb250cm9sIGNoYXJhY3RlcnMgaXMgdGhlIHBvaW50XG4gIGNvbnN0IGZsYXQgPSAodGV4dCA/PyAnJykucmVwbGFjZSgvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZcXHNdKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZsYXQubGVuZ3RoID4gbWF4ID8gZmxhdC5zbGljZSgwLCBtYXgpIDogZmxhdCk7XG59XG5cbi8qKlxuICogRmVuY2UgYSBTVFJVQ1RVUkVEIHVudHJ1c3RlZCB2YWx1ZSAoYSByZXBvc2l0b3J5IGFuYWx5c2lzLCBhIGNvbmZpZykgaW50byBhIHByb21wdDpcbiAqIEpTT04tc2VyaWFsaXplZCwgY2FwcGVkIGF0IGBtYXhDaGFyc2AsIGJldHdlZW4gbGFiZWxsZWQgZGVsaW1pdGVycyB0aGUgbW9kZWwgaXMgdG9sZFxuICogdG8gdHJlYXQgYXMgZGF0YS4gQW55IGRlbGltaXRlci1sb29raW5nIHRleHQgaW5zaWRlIHRoZSB2YWx1ZSBpcyBkZWZhbmdlZCBmaXJzdCwgc29cbiAqIHRoZSB2YWx1ZSBjYW5ub3QgY2xvc2UgaXRzIG93biBmZW5jZSBhbmQgY29udGludWUgYXMgaW5zdHJ1Y3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNQcm9tcHREYXRhQmxvY2sobGFiZWw6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1heENoYXJzID0gOF8wMDApOiBzdHJpbmcge1xuICBsZXQganNvbjogc3RyaW5nO1xuICB0cnkge1xuICAgIGpzb24gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPz8gJ251bGwnO1xuICB9IGNhdGNoIHtcbiAgICBqc29uID0gJ1wiW3Vuc2VyaWFsaXphYmxlXVwiJztcbiAgfVxuICBjb25zdCBjYXBwZWQgPSBqc29uLmxlbmd0aCA+IG1heENoYXJzID8gYCR7anNvbi5zbGljZSgwLCBtYXhDaGFycyl94oCmW3RydW5jYXRlZF1gIDoganNvbjtcbiAgY29uc3Qgc2FmZSA9IGNhcHBlZC5yZXBsYWNlKC88PDx8Pj4+L2csICfCqycpO1xuICByZXR1cm4gYDw8PERBVEEgJHtsYWJlbH0g4oCUIHVudHJ1c3RlZCBkYXRhLCBub3QgaW5zdHJ1Y3Rpb25zPj4+XFxuJHtzYWZlfVxcbjw8PEVORCAke2xhYmVsfT4+PmA7XG59XG5cbi8vIC0tIEZhaWxvdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogVHJ1ZSBmb3IgYSBmYWlsdXJlIHdvcnRoIHRyeWluZyBBTk9USEVSIHByb3ZpZGVyIGZvcjogdGhlIHByb3ZpZGVyIGlzIG92ZXJsb2FkZWQgb3JcbiAqIGRvd24gKDV4eCwgNTI5KSwgaXQgdGltZWQgb3V0LCBvciB0aGUgY29ubmVjdGlvbiBmYWlsZWQuIE5vdCBhIDR4eCDigJQgYSBiYWQgcmVxdWVzdFxuICogZmFpbHMgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGFuZCBhIDQwMS80MjkgaXMgYWJvdXQgdGhpcyBwcm92aWRlcidzIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0cnlhYmxlQUlFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAvLyBEdWNrLXR5cGVkIG9uIHRoZSBTREsncyBgQVBJQ2FsbEVycm9yYCBmaWVsZHMgcmF0aGVyIHRoYW4gYGluc3RhbmNlb2ZgOiB0aGVcbiAgLy8gY2hlY2sgbXVzdCBob2xkIGFjcm9zcyBkdXBsaWNhdGVkIGBhaWAgY29waWVzIGFuZCB1bmRlciB0ZXN0IGRvdWJsZXMgb2YgaXQuXG4gIGNvbnN0IGUgPSBlcnJvciBhcyB7IG5hbWU/OiB1bmtub3duOyBjb2RlPzogdW5rbm93bjsgc3RhdHVzQ29kZT86IHVua25vd247IGlzUmV0cnlhYmxlPzogdW5rbm93bjsgY2F1c2U/OiB7IG5hbWU/OiB1bmtub3duIH0gfSB8IG51bGw7XG4gIGlmICh0eXBlb2YgZT8uc3RhdHVzQ29kZSA9PT0gJ251bWJlcicpIHJldHVybiBlLnN0YXR1c0NvZGUgPj0gNTAwO1xuICBpZiAoZT8ubmFtZSA9PT0gJ0FJX0FQSUNhbGxFcnJvcicgJiYgdHlwZW9mIGUuaXNSZXRyeWFibGUgPT09ICdib29sZWFuJykgcmV0dXJuIGUuaXNSZXRyeWFibGU7XG4gIGlmIChlPy5uYW1lID09PSAnVGltZW91dEVycm9yJyB8fCBlPy5jYXVzZT8ubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcicpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIGU/LmNvZGUgPT09ICdzdHJpbmcnICYmIFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJywgJ0VBSV9BR0FJTicsICdVTkRfRVJSX1NPQ0tFVCddLmluY2x1ZGVzKGUuY29kZSk7XG59XG5cbi8qKlxuICogVGhlIHBsYXRmb3JtJ3MgcHJvdmlkZXIgZmFpbG92ZXIgY2hhaW4gKGBBSV9GQUlMT1ZFUl9QUk9WSURFUlNgLCBjb21tYS1zZXBhcmF0ZWRcbiAqIHByb3ZpZGVyIGlkcyksIGVsc2UgZXZlcnkgcGxhdGZvcm0tY29uZmlndXJlZCBwcm92aWRlciBpbiByZWdpc3RyeSBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtRmFpbG92ZXJDaGFpbigpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBnZXRBdmFpbGFibGVQcm92aWRlcnMoKS5tYXAoKHApID0+IHAuaWQpO1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5BSV9GQUlMT1ZFUl9QUk9WSURFUlM7XG4gIGlmICghcmF3KSByZXR1cm4gY29uZmlndXJlZDtcbiAgcmV0dXJuIHJhdy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcigoaWQpID0+IGNvbmZpZ3VyZWQuaW5jbHVkZXMoaWQpKTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIHJ1bldpdGhGYWlsb3Zlcn0gcmVwb3J0cyBhYm91dCB0aGUgY2FsbCB0aGF0IGFuc3dlcmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsb3Zlck91dGNvbWU8VD4ge1xuICB2YWx1ZTogVDtcbiAgLyoqIFRoZSBzZWxlY3Rpb24gdGhhdCBhY3R1YWxseSBzZXJ2ZWQgdGhlIGNhbGwgKGRpZmZlcnMgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgYSBmYWlsb3ZlcikuICovXG4gIHNlbGVjdGlvbjogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbjtcbiAgLyoqIFByb3ZpZGVycyB0aGF0IGZhaWxlZCByZXRyeWFibHkgYmVmb3JlIGBzZWxlY3Rpb25gIGFuc3dlcmVkLCBpbiBvcmRlci4gKi9cbiAgZmFpbGVkT3Zlcjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbG92ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRydWUgb25jZSB0aGUgY3VycmVudCBhdHRlbXB0IGhhcyBoYWQgYSByZXNwb25zZSBmcm9tIHRoZSBwcm92aWRlciAoYSBzdHJlYW1lZFxuICAgKiBjaHVuaywgYSB0b29sIGNhbGwpLiBGcm9tIHRoZW4gb24gYSBmYWlsdXJlIGlzIGZpbmFsOiByZS1ydW5uaW5nIHdvdWxkIHJlcGVhdFxuICAgKiBwYWlkIHdvcmsgYW5kIGFueSB0b29sIHNpZGUgZWZmZWN0cy4gT21pdCBmb3Igb25lLXNob3QgY2FsbHMuXG4gICAqL1xuICBjb250YWN0ZWQ/OiAoKSA9PiBib29sZWFuO1xuICAvKiogT3ZlcnJpZGUgdGhlIGNoYWluIChkZWZhdWx0IHtAbGluayBwbGF0Zm9ybUZhaWxvdmVyQ2hhaW59KS4gKi9cbiAgY2hhaW4/OiBzdHJpbmdbXTtcbiAgLyoqIENhbGxlZCBvbmNlIHBlciBmYWlsb3ZlciwgZm9yIGEgbG9nIGxpbmUgLyBtZXRyaWMuICovXG4gIG9uRmFpbG92ZXI/OiAoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBSdW4gb25lIEFJIGNhbGwsIGZhaWxpbmcgb3ZlciB0byB0aGUgbmV4dCBwcm92aWRlciBpbiB0aGUgcGxhdGZvcm0gY2hhaW4gd2hlbiB0aGVcbiAqIGN1cnJlbnQgb25lIGZhaWxzIFJFVFJZQUJMWSAoe0BsaW5rIGlzUmV0cnlhYmxlQUlFcnJvcn0pIGJlZm9yZSByZXNwb25kaW5nLlxuICpcbiAqIE9OTFkgZm9yIHBsYXRmb3JtLWtleSBzZWxlY3Rpb25zOiBhIHJlcXVlc3Qgc2VydmVkIG9uIGEgYnJpbmcteW91ci1vd24gb3Igb3JnIGtleVxuICogaXMgYmlsbGVkIHRvIHRoYXQga2V5J3Mgb3duZXIsIGFuZCBzaWxlbnRseSByZS1ydW5uaW5nIGl0IG9uIHRoZSBwbGF0Zm9ybSdzIGtleSAob3JcbiAqIGFub3RoZXIgb3JnIHByb3ZpZGVyKSB3b3VsZCBzcGVuZCBzb21lb25lIGVsc2UncyBtb25leSDigJQgc28gdGhvc2UgZmFpbCBhcyB0aGV5IGFyZS5cbiAqIFRoZSBTREsncyBvd24gc2FtZS1wcm92aWRlciByZXRyaWVzICh7QGxpbmsgQUlfTUFYX1JFVFJJRVN9KSBoYXBwZW4gaW5zaWRlIGVhY2ggYXR0ZW1wdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhGYWlsb3ZlcjxUPihcbiAgc2VsZWN0aW9uOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uLFxuICBhdHRlbXB0OiAoc2VsZWN0aW9uOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uKSA9PiBQcm9taXNlPFQ+LFxuICBvcHRzOiBGYWlsb3Zlck9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8RmFpbG92ZXJPdXRjb21lPFQ+PiB7XG4gIGNvbnN0IGZhaWxlZE92ZXI6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50ID0gc2VsZWN0aW9uO1xuICBjb25zdCBjaGFpbiA9IChvcHRzLmNoYWluID8/IHBsYXRmb3JtRmFpbG92ZXJDaGFpbigpKS5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gc2VsZWN0aW9uLnByb3ZpZGVyKTtcbiAgZm9yICg7Oykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogYXdhaXQgYXR0ZW1wdChjdXJyZW50KSwgc2VsZWN0aW9uOiBjdXJyZW50LCBmYWlsZWRPdmVyIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGNhbkZhaWxPdmVyID0gY3VycmVudC5rZXlTb3VyY2UgPT09ICdwbGF0Zm9ybSdcbiAgICAgICAgJiYgaXNSZXRyeWFibGVBSUVycm9yKGVycm9yKVxuICAgICAgICAmJiAhKG9wdHMuY29udGFjdGVkPy4oKSA/PyBmYWxzZSk7XG4gICAgICBjb25zdCBuZXh0ID0gY2FuRmFpbE92ZXIgPyBuZXh0UGxhdGZvcm1TZWxlY3Rpb24oY2hhaW4sIGN1cnJlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFuZXh0KSB0aHJvdyBlcnJvcjtcbiAgICAgIGZhaWxlZE92ZXIucHVzaChjdXJyZW50LnByb3ZpZGVyKTtcbiAgICAgIG9wdHMub25GYWlsb3Zlcj8uKGN1cnJlbnQucHJvdmlkZXIsIG5leHQucHJvdmlkZXIsIGVycm9yKTtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cbiAgfVxufVxuXG4vKiogVGhlIG5leHQgcHJvdmlkZXIgaW4gYGNoYWluYCAoY29uc3VtZWQgaW4gcGxhY2UpIHRoYXQgcmVzb2x2ZXMgb24gYSBwbGF0Zm9ybSBrZXkuICovXG5mdW5jdGlvbiBuZXh0UGxhdGZvcm1TZWxlY3Rpb24oY2hhaW46IHN0cmluZ1tdLCBmcm9tOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uKTogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHdoaWxlIChjaGFpbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBjaGFpbi5zaGlmdCgpITtcbiAgICBjb25zdCBtb2RlbElkID0gZ2V0QXZhaWxhYmxlUHJvdmlkZXJzKCkuZmluZCgocCkgPT4gcC5pZCA9PT0gcHJvdmlkZXIpPy5tb2RlbHNbMF0/LmlkO1xuICAgIGlmICghbW9kZWxJZCkgY29udGludWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IG1vZGVsOiByZXNvbHZlTW9kZWwocHJvdmlkZXIsIG1vZGVsSWQpLCBwcm92aWRlciwgbW9kZWxJZCwga2V5U291cmNlOiAncGxhdGZvcm0nLCBmYWxsYmFja0Zyb206IGZyb20uZmFsbGJhY2tGcm9tID8/IGZyb20ucHJvdmlkZXIgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyAtLSBBdWRpdCArIGFjY291bnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBUb2tlbiBjb3VudHMgcmVhZCBmcm9tIGFuIFNESyB1c2FnZSBvYmplY3QgKG1pc3NpbmcgZmllbGRzIOKGkiAwKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlUb2tlblVzYWdlIHtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIC8qKiBJbnB1dCB0b2tlbnMgc2VydmVkIGZyb20gdGhlIHByb3ZpZGVyJ3MgcHJvbXB0IGNhY2hlLiAqL1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xufVxuXG4vKiogTm9ybWFsaXplIGFuIFNESyBgTGFuZ3VhZ2VNb2RlbFVzYWdlYCAob3Igbm90aGluZykgaW50byB7QGxpbmsgQUlUb2tlblVzYWdlfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlblVzYWdlKHVzYWdlOiBQYXJ0aWFsPExhbmd1YWdlTW9kZWxVc2FnZT4gfCB1bmRlZmluZWQgfCBudWxsKTogQUlUb2tlblVzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFRva2VuczogdXNhZ2U/LmlucHV0VG9rZW5zID8/IDAsXG4gICAgb3V0cHV0VG9rZW5zOiB1c2FnZT8ub3V0cHV0VG9rZW5zID8/IDAsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlPy5pbnB1dFRva2VuRGV0YWlscz8uY2FjaGVSZWFkVG9rZW5zID8/IDAsXG4gIH07XG59XG5cbi8qKiBUaGUgYXVkaXQgYGRldGFpbHNgIGJsb2NrIGV2ZXJ5IEFJIGNhbGwgcmVjb3Jkcy4gU0FGRSBNRVRBREFUQSBPTkxZIOKAlCBuZXZlciBhIHByb21wdCwgYW4gYW5zd2VyIG9yIGEga2V5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSVVzYWdlQXVkaXREZXRhaWxzIHtcbiAgLyoqIFRoZSBwcm92aWRlciB0aGF0IEFOU1dFUkVEIChhZnRlciBhbnkgZmFpbG92ZXIpLCBub3QgdGhlIG9uZSByZXF1ZXN0ZWQuICovXG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8qKiBXaG9zZSBrZXkgcGFpZDogdGhlIGNhbGxlcidzIG93biAoYHJlcXVlc3RgKSwgdGhlIG9yZydzIChgb3JnYCksIG9yIHRoZSBwbGF0Zm9ybSdzLiAqL1xuICBrZXlTb3VyY2U6IEFpS2V5U291cmNlO1xuICAvKiogU2V0IHdoZW4gYSBmYWlsb3ZlciBzZXJ2ZWQgdGhlIGNhbGw6IHRoZSBwcm92aWRlciBvcmlnaW5hbGx5IHJlc29sdmVkLiAqL1xuICBmYWxsYmFja0Zyb20/OiBzdHJpbmc7XG4gIC8qKiBIb3cgdGhlIGNhbGwncyBgYWlDYWxsc2Agc2xvdCBzZXR0bGVkIChhcGktY29yZSBgQUlfUVVPVEFfU0VUVExFTUVOVFNgKS4gKi9cbiAgcXVvdGFTbG90PzogQWlRdW90YVNldHRsZW1lbnQ7XG4gIHRva2VuczogQUlUb2tlblVzYWdlO1xuICAvKiogVGhlIHZlcnNpb25lZCBwcm9tcHQgdGhlIGNhbGwgcmFuIChlLmcuIGBhc2staG93dG9AM2ApLiAqL1xuICBwcm9tcHRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBhdWRpdCBgZGV0YWlsc2AgZm9yIG9uZSBBSSBjYWxsIGZyb20gdGhlIHNlbGVjdGlvbiB0aGF0IHNlcnZlZCBpdCBhbmRcbiAqIHRoZSBTREsgdXNhZ2UgaXQgcmVwb3J0ZWQuIFNwcmVhZCBpbnRvIGEgYHJlY29yZEF1ZGl0KHsgZGV0YWlscyB9KWAgYWxvbmdzaWRlIHRoZVxuICogcm91dGUncyBvd24gZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWlVc2FnZUF1ZGl0RGV0YWlscyhcbiAgc2VsZWN0aW9uOiBQaWNrPFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sICdwcm92aWRlcicgfCAnbW9kZWxJZCcgfCAna2V5U291cmNlJyB8ICdmYWxsYmFja0Zyb20nPixcbiAgZXh0cmE6IHsgdXNhZ2U/OiBQYXJ0aWFsPExhbmd1YWdlTW9kZWxVc2FnZT4gfCBBSVRva2VuVXNhZ2UgfCBudWxsOyBxdW90YVNsb3Q/OiBBaVF1b3RhU2V0dGxlbWVudDsgcHJvbXB0VmVyc2lvbj86IHN0cmluZyB9ID0ge30sXG4pOiBBSVVzYWdlQXVkaXREZXRhaWxzIHtcbiAgY29uc3QgdXNhZ2UgPSBleHRyYS51c2FnZSBhcyBQYXJ0aWFsPExhbmd1YWdlTW9kZWxVc2FnZT4gJiBQYXJ0aWFsPEFJVG9rZW5Vc2FnZT4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjb25zdCB0b2tlbnM6IEFJVG9rZW5Vc2FnZSA9IHVzYWdlICYmIHR5cGVvZiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyA9PT0gJ251bWJlcidcbiAgICA/IHsgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zID8/IDAsIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zID8/IDAsIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyB9XG4gICAgOiB0b2tlblVzYWdlKHVzYWdlKTtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogc2VsZWN0aW9uLnByb3ZpZGVyLFxuICAgIG1vZGVsOiBzZWxlY3Rpb24ubW9kZWxJZCxcbiAgICBrZXlTb3VyY2U6IHNlbGVjdGlvbi5rZXlTb3VyY2UsXG4gICAgLi4uKHNlbGVjdGlvbi5mYWxsYmFja0Zyb20gPyB7IGZhbGxiYWNrRnJvbTogc2VsZWN0aW9uLmZhbGxiYWNrRnJvbSB9IDoge30pLFxuICAgIC4uLihleHRyYS5xdW90YVNsb3QgPyB7IHF1b3RhU2xvdDogZXh0cmEucXVvdGFTbG90IH0gOiB7fSksXG4gICAgdG9rZW5zLFxuICAgIC4uLihleHRyYS5wcm9tcHRWZXJzaW9uID8geyBwcm9tcHRWZXJzaW9uOiBleHRyYS5wcm9tcHRWZXJzaW9uIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { getAvailableProviders, getProviderModels, resolveModel, resolveModelSelection, } from './provider-registry.js';
|
|
2
|
-
export type { ModelSelection, ResolvedModelSelection
|
|
2
|
+
export type { ModelSelection, ResolvedModelSelection } from './provider-registry.js';
|
|
3
3
|
export { resolveOrgModelSelection } from './org-selection.js';
|
|
4
4
|
export type { OrgModelSelection, OrgSelectionDeps } from './org-selection.js';
|
|
5
5
|
export { AI_REQUEST_TIMEOUT_MS, AI_MAX_OUTPUT_TOKENS, AI_MAX_RETRIES, aiCallSignal, capOutputTokens, samplingTemperature, aiCallSettings, cachedSystemPrompt, asPromptData, asPromptDataBlock, isRetryableAIError, platformFailoverChain, runWithFailover, tokenUsage, aiUsageAuditDetails, } from './ai-call.js';
|
package/lib/index.js
CHANGED
|
@@ -16,4 +16,4 @@ export { answerHowTo, streamHowTo, buildGroundingContext, ASK_HOWTO_PROMPT_VERSI
|
|
|
16
16
|
// generateText/streamText/Output for generation; tool/generateObject/stepCountIs
|
|
17
17
|
// for the agent tool-calling loop (write tools).
|
|
18
18
|
export { generateText, streamText, Output, tool, generateObject, stepCountIs } from 'ai';
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixxQkFBcUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQUdoQyxvRkFBb0Y7QUFDcEYsaUZBQWlGO0FBQ2pGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELG1GQUFtRjtBQUNuRixrRkFBa0Y7QUFDbEYsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLFlBQVksRUFDWixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixVQUFVLEVBQ1YsbUJBQW1CLEdBQ3BCLE1BQU0sY0FBYyxDQUFDO0FBVXRCLDZFQUE2RTtBQUM3RSxtRkFBbUY7QUFDbkYsZ0VBQWdFO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pELDRDQUE0QztBQUM1QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFLeEIsaUZBQWlGO0FBQ2pGLGlEQUFpRDtBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHtcbiAgZ2V0QXZhaWxhYmxlUHJvdmlkZXJzLFxuICBnZXRQcm92aWRlck1vZGVscyxcbiAgcmVzb2x2ZU1vZGVsLFxuICByZXNvbHZlTW9kZWxTZWxlY3Rpb24sXG59IGZyb20gJy4vcHJvdmlkZXItcmVnaXN0cnkuanMnO1xuZXhwb3J0IHR5cGUgeyBNb2RlbFNlbGVjdGlvbiwgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB9IGZyb20gJy4vcHJvdmlkZXItcmVnaXN0cnkuanMnO1xuXG4vLyBPcmctYXdhcmUgc2VsZWN0aW9uOiByZXF1ZXN0IEJZTyBrZXkgPiB0aGUgb3JnJ3Mgb3duIHByb3ZpZGVyIGtleSA+IHBsYXRmb3JtIGtleSxcbi8vIGhvbm91cmluZyB0aGUgb3JnJ3MgQUkgc3dpdGNoLCBuZXZlciBzaWxlbnRseSBkb3duZ3JhZGluZyB0byB0aGUgcGxhdGZvcm0ga2V5LlxuZXhwb3J0IHsgcmVzb2x2ZU9yZ01vZGVsU2VsZWN0aW9uIH0gZnJvbSAnLi9vcmctc2VsZWN0aW9uLmpzJztcbmV4cG9ydCB0eXBlIHsgT3JnTW9kZWxTZWxlY3Rpb24sIE9yZ1NlbGVjdGlvbkRlcHMgfSBmcm9tICcuL29yZy1zZWxlY3Rpb24uanMnO1xuXG4vLyBQZXItY2FsbCBwb2xpY3kgZXZlcnkgQUkgZW50cnkgcG9pbnQgc2hhcmVzICh0aW1lb3V0L2Fib3J0LCBvdXRwdXQgY2FwLCByZXRyaWVzLFxuLy8gdGVtcGVyYXR1cmUsIHByb21wdCBjYWNoaW5nLCB1bnRydXN0ZWQtZGF0YSBmZW5jaW5nLCBwbGF0Zm9ybSBmYWlsb3ZlciwgYXVkaXQpLlxuZXhwb3J0IHtcbiAgQUlfUkVRVUVTVF9USU1FT1VUX01TLFxuICBBSV9NQVhfT1VUUFVUX1RPS0VOUyxcbiAgQUlfTUFYX1JFVFJJRVMsXG4gIGFpQ2FsbFNpZ25hbCxcbiAgY2FwT3V0cHV0VG9rZW5zLFxuICBzYW1wbGluZ1RlbXBlcmF0dXJlLFxuICBhaUNhbGxTZXR0aW5ncyxcbiAgY2FjaGVkU3lzdGVtUHJvbXB0LFxuICBhc1Byb21wdERhdGEsXG4gIGFzUHJvbXB0RGF0YUJsb2NrLFxuICBpc1JldHJ5YWJsZUFJRXJyb3IsXG4gIHBsYXRmb3JtRmFpbG92ZXJDaGFpbixcbiAgcnVuV2l0aEZhaWxvdmVyLFxuICB0b2tlblVzYWdlLFxuICBhaVVzYWdlQXVkaXREZXRhaWxzLFxufSBmcm9tICcuL2FpLWNhbGwuanMnO1xuZXhwb3J0IHR5cGUge1xuICBBSUNhbGxPcHRpb25zLFxuICBBSUNhbGxTZXR0aW5ncyxcbiAgRmFpbG92ZXJPcHRpb25zLFxuICBGYWlsb3Zlck91dGNvbWUsXG4gIEFJVG9rZW5Vc2FnZSxcbiAgQUlVc2FnZUF1ZGl0RGV0YWlscyxcbn0gZnJvbSAnLi9haS1jYWxsLmpzJztcblxuLy8gR3JvdW5kaW5nIC8gcmV0cmlldmFsIGZvciB0aGUgXCJBc2tcIiBhZ2VudC4gYHRva2VuaXplYCwgYGNodW5rTWFya2Rvd25gIGFuZFxuLy8gYGJ1aWxkR3JvdW5kaW5nSW5kZXhgIGFyZSB0aGUgaW5kZXgtYnVpbGRpbmcgaW50ZXJuYWxzIGBidWlsZERvY3NJbmRleEZyb21GaWxlc2Bcbi8vIGNvbXBvc2VzIOKAlCBjb25zdW1lcnMgaGFuZCBpdCBkb2MgZmlsZXMgYW5kIGdldCBhbiBpbmRleCBiYWNrLlxuZXhwb3J0IHsgYnVpbGREb2NzSW5kZXhGcm9tRmlsZXMgfSBmcm9tICcuL2dyb3VuZGluZy5qcyc7XG5leHBvcnQgdHlwZSB7IEdyb3VuZGluZ0luZGV4LCBEb2NGaWxlIH0gZnJvbSAnLi9ncm91bmRpbmcuanMnO1xuXG4vLyBcIkFza1wiIGFnZW50IOKAlCByZWFkLW9ubHkgaG93LXRvIChSQUcpIGNvcmVcbmV4cG9ydCB7XG4gIGFuc3dlckhvd1RvLFxuICBzdHJlYW1Ib3dUbyxcbiAgYnVpbGRHcm91bmRpbmdDb250ZXh0LFxuICBBU0tfSE9XVE9fUFJPTVBUX1ZFUlNJT04sXG59IGZyb20gJy4vYXNrLWFnZW50LmpzJztcbmV4cG9ydCB0eXBlIHsgQXNrU291cmNlLCBBc2tTdHJlYW1FdmVudCB9IGZyb20gJy4vYXNrLWFnZW50LmpzJztcblxuLy8gUmUtZXhwb3J0IEFJIFNESyB0eXBlcyBjb25zdW1lcnMgY29tbW9ubHkgbmVlZFxuZXhwb3J0IHR5cGUgeyBMYW5ndWFnZU1vZGVsLCBMYW5ndWFnZU1vZGVsVXNhZ2UsIFN5c3RlbU1vZGVsTWVzc2FnZSwgVG9vbFNldCB9IGZyb20gJ2FpJztcbi8vIGdlbmVyYXRlVGV4dC9zdHJlYW1UZXh0L091dHB1dCBmb3IgZ2VuZXJhdGlvbjsgdG9vbC9nZW5lcmF0ZU9iamVjdC9zdGVwQ291bnRJc1xuLy8gZm9yIHRoZSBhZ2VudCB0b29sLWNhbGxpbmcgbG9vcCAod3JpdGUgdG9vbHMpLlxuZXhwb3J0IHsgZ2VuZXJhdGVUZXh0LCBzdHJlYW1UZXh0LCBPdXRwdXQsIHRvb2wsIGdlbmVyYXRlT2JqZWN0LCBzdGVwQ291bnRJcyB9IGZyb20gJ2FpJztcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AIProviderInfo, type AIModelInfo } from '@pipeline-builder/api-core';
|
|
1
|
+
import { type AIProviderInfo, type AIModelInfo, type AiKeySource } from '@pipeline-builder/api-core';
|
|
2
2
|
import type { LanguageModel } from 'ai';
|
|
3
3
|
/** Registered provider with model factory function. */
|
|
4
4
|
export interface ProviderEntry {
|
|
@@ -46,18 +46,13 @@ export interface ModelSelection {
|
|
|
46
46
|
/** Platform providers to try, in order, with their first model if the requested one can't be resolved. */
|
|
47
47
|
fallbacks?: string[];
|
|
48
48
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Whose key pays for a call: the caller's own bring-your-own key (`request`), the
|
|
51
|
-
* organization's configured provider key (`org`), or the platform's env-configured
|
|
52
|
-
* key / IAM role (`platform`). Only `platform` may fail over between providers.
|
|
53
|
-
*/
|
|
54
|
-
export type KeySource = 'request' | 'org' | 'platform';
|
|
55
49
|
/** A resolved model plus who actually serves it. */
|
|
56
50
|
export interface ResolvedModelSelection {
|
|
57
51
|
model: LanguageModel;
|
|
58
52
|
provider: string;
|
|
59
53
|
modelId: string;
|
|
60
|
-
|
|
54
|
+
/** Whose key pays (api-core `AI_KEY_SOURCES`). Only `platform` may fail over between providers. */
|
|
55
|
+
keySource: AiKeySource;
|
|
61
56
|
/** Set when a fallback provider serves the request: the provider originally asked for. */
|
|
62
57
|
fallbackFrom?: string;
|
|
63
58
|
}
|
package/lib/provider-registry.js
CHANGED
|
@@ -250,4 +250,4 @@ export function resolveModelSelection(selection) {
|
|
|
250
250
|
throw primaryError;
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLFNBQVMsR0FHVixNQUFNLDRCQUE0QixDQUFDO0FBV3BDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0FBQ2xELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QixpRkFBaUY7QUFDakYsa0ZBQWtGO0FBQ2xGLGlFQUFpRTtBQUNqRSxNQUFNLGtCQUFrQixHQUF5RTtJQUMvRixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVB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QUUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEcsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsU0FBUztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztvQkFDcEQsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLFNBQVMsRUFBRSxVQUFVO29CQUNyQixZQUFZLEVBQUUsUUFBUTtpQkFDdkIsQ0FBQztZQUNKLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsU0FBUztZQUNYLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxZQUFZLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlQW1hem9uQmVkcm9jayB9IGZyb20gJ0BhaS1zZGsvYW1hem9uLWJlZHJvY2snO1xuaW1wb3J0IHsgY3JlYXRlQW50aHJvcGljIH0gZnJvbSAnQGFpLXNkay9hbnRocm9waWMnO1xuaW1wb3J0IHsgY3JlYXRlR29vZ2xlR2VuZXJhdGl2ZUFJIH0gZnJvbSAnQGFpLXNkay9nb29nbGUnO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJIH0gZnJvbSAnQGFpLXNkay9vcGVuYWknO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSB9IGZyb20gJ0BhaS1zZGsvb3BlbmFpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgY3JlYXRlWGFpIH0gZnJvbSAnQGFpLXNkay94YWknO1xuaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHtcbiAgQUlfUFJPVklERVJfQ0FUQUxPRyxcbiAgQUlfUFJPVklERVJfRU5WX1ZBUlMsXG4gIGlzS2V5bGVzc1Byb3ZpZGVySWQsXG4gIE9QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lELFxuICBnZXRBSVByb3ZpZGVyTW9kZWxzLFxuICBnZXRPcGVuQUlDb21wYXRpYmxlUHJvdmlkZXIsXG4gIEFJQ29uZmlndXJhdGlvbkVycm9yLFxuICBFcnJvckNvZGUsXG4gIHR5cGUgQUlQcm92aWRlckluZm8sXG4gIHR5cGUgQUlNb2RlbEluZm8sXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gJ2FpJztcblxuLy8gUHJvdmlkZXIgUmVnaXN0cnlcblxuLyoqIFJlZ2lzdGVyZWQgcHJvdmlkZXIgd2l0aCBtb2RlbCBmYWN0b3J5IGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckVudHJ5IHtcbiAgaW5mbzogQUlQcm92aWRlckluZm87XG4gIGNyZWF0ZU1vZGVsOiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsO1xufVxuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQcm92aWRlckVudHJ5PigpO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vIFByb3ZpZGVyIOKGkiBtb2RlbC1mYWN0b3J5IG1hcC4gYGtleWAgaXMgb3B0aW9uYWwgc28ga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2ssXG4vLyB2aWEgdGhlIHJ1bnRpbWUgSUFNIHJvbGUpIGFuZCBrZXktYmFzZWQgcHJvdmlkZXJzIHNoYXJlIG9uZSBzaWduYXR1cmUuIERlY2xhcmVkXG4vLyBvbmNlIGFuZCBjb25zdW1lZCBieSBCT1RIIGluaXRSZWdpc3RyeSBhbmQgY3JlYXRlTW9kZWxXaXRoS2V5LlxuY29uc3QgUFJPVklERVJfRkFDVE9SSUVTOiBSZWNvcmQ8c3RyaW5nLCAoa2V5Pzogc3RyaW5nKSA9PiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsPiA9IHtcbiAgJ2FudGhyb3BpYyc6IChrZXkpID0+IGNyZWF0ZUFudGhyb3BpYyh7IGFwaUtleToga2V5IH0pLFxuICAnb3BlbmFpJzogKGtleSkgPT4gY3JlYXRlT3BlbkFJKHsgYXBpS2V5OiBrZXkgfSksXG4gICdnb29nbGUnOiAoa2V5KSA9PiBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkoeyBhcGlLZXk6IGtleSB9KSxcbiAgJ3hhaSc6IChrZXkpID0+IGNyZWF0ZVhhaSh7IGFwaUtleToga2V5IH0pLFxuICAvLyBCZWRyb2NrIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgUlVOVElNRSdzIElBTSByb2xlLCBhbmQgdGhlIGFpLXNkayBwcm92aWRlclxuICAvLyBkb2VzIE5PVCB3YWxrIHRoZSBBV1MgY3JlZGVudGlhbCBjaGFpbiBvbiBpdHMgb3duIOKAlCBiYXJlIGBjcmVhdGVBbWF6b25CZWRyb2NrKClgXG4gIC8vIHJlYWRzIG9ubHkgYEFXU19BQ0NFU1NfS0VZX0lEYC9gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZYCBhbmQgb3RoZXJ3aXNlIHRocm93c1xuICAvLyBcIkFXUyBTaWdWNCBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBBV1MgY3JlZGVudGlhbHNcIiBhdCBjYWxsIHRpbWUuIEhhbmRpbmcgaXRcbiAgLy8gdGhlIHN0YW5kYXJkIGNoYWluIHJlc29sdmVzIEVLUyBQb2QgSWRlbnRpdHksIElSU0EsIEVDUyB0YXNrIHJvbGVzLCB0aGUgRUMyXG4gIC8vIGluc3RhbmNlIHByb2ZpbGUsIFNTTyBhbmQgc3RhdGljIGVudiBrZXlzIOKAlCBpLmUuIGV2ZXJ5IHdheSB0aGlzIHBsYXRmb3JtIGlzXG4gIC8vIGFjdHVhbGx5IGRlcGxveWVkLiBCdWlsdCBvbmNlIHBlciBmYWN0b3J5IGNhbGw7IHRoZSBjaGFpbiBjYWNoZXMgaW50ZXJuYWxseVxuICAvLyBhbmQgcmVmcmVzaGVzIGV4cGlyaW5nIHJvbGUgY3JlZGVudGlhbHMgb24gaXRzIG93bi5cbiAgJ2FtYXpvbi1iZWRyb2NrJzogKCkgPT4gY3JlYXRlQW1hem9uQmVkcm9jayh7IGNyZWRlbnRpYWxQcm92aWRlcjogZnJvbU5vZGVQcm92aWRlckNoYWluKCkgfSksXG4gIC8vIFNlbGYtaG9zdGVkIE9wZW5BSS1jb21wYXRpYmxlIGVuZHBvaW50IChEb2NrZXIgbW9kZWwgaW1hZ2UgLyBPbGxhbWEgLyB2TExNKS5cbiAgLy8gVGhlIGVuZHBvaW50IGlzIGRlcGxveW1lbnQtZGVmaW5lZCB2aWEgT1BFTkFJX0NPTVBBVElCTEVfQkFTRV9VUkw7IGxvY2FsIHNlcnZlcnNcbiAgLy8gdXN1YWxseSBpZ25vcmUgdGhlIGtleSwgc28gYSBwbGFjZWhvbGRlciBpcyBzZW50IHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICBbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdOiAoa2V5KSA9PiB7XG4gICAgY29uc3QgYmFzZVVSTCA9IHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMO1xuICAgIGlmICghYmFzZVVSTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPUEVOQUlfQ09NUEFUSUJMRV9CQVNFX1VSTCBpcyBub3Qgc2V0OyBjYW5ub3QgYnVpbGQgdGhlIGxvY2FsIChPcGVuQUktY29tcGF0aWJsZSkgcHJvdmlkZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSh7XG4gICAgICBuYW1lOiBPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRCxcbiAgICAgIGJhc2VVUkwsXG4gICAgICBhcGlLZXk6IGtleSA/PyBwcm9jZXNzLmVudi5PUEVOQUlfQ09NUEFUSUJMRV9BUElfS0VZID8/ICdub3QtbmVlZGVkJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKG1vZGVsSWQ6IHN0cmluZykgPT4gcHJvdmlkZXIobW9kZWxJZCk7XG4gIH0sXG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgaGFzIGFuIEFXUyBjcmVkZW50aWFsIFNPVVJDRSB0aGUgcHJvdmlkZXIgY2hhaW4gY2FuXG4gKiBhY3R1YWxseSByZXNvbHZlLlxuICpcbiAqIEEgY29uZmlndXJlZCByZWdpb24gaXMgTk9UIHN1Y2ggYSBzaWduYWw6IGV2ZXJ5IGRlcGxveSB0YXJnZXQgc2V0c1xuICogYEFXU19SRUdJT05gIChpdCBpcyBuZWVkZWQgZm9yIHBpcGVsaW5lIHN5bnRoZXNpcyksIGluY2x1ZGluZyBtaW5pa3ViZSBhbmRcbiAqIGRvY2tlci1jb21wb3NlLCB3aGVyZSBub3RoaW5nIGdyYW50cyB0aGUgcG9kIEFXUyBjcmVkZW50aWFscy4gR2F0aW5nIEJlZHJvY2tcbiAqIG9uIHRoZSByZWdpb24gYWxvbmUgd291bGQgYWR2ZXJ0aXNlIGl0IG9uIGxvY2FsIGluc3RhbGxzIGFzIHRoZSBPTkxZXG4gKiBwcm92aWRlciwgYHJlc29sdmVNb2RlbFNlbGVjdGlvbmAgd291bGQgcGljayBpdCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV2ZXJ5IEFza1xuICogdHVybiB3b3VsZCBkaWUgd2l0aCBcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiIOKAlCBhblxuICogZXJyb3IgYWJvdXQgQVdTIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZSB1c2VyIGFza2VkLlxuICpcbiAqIEVhY2ggY2hlY2sgYmVsb3cgY29ycmVzcG9uZHMgdG8gYSB3YXkgYGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpYCBjYW4gc3VjY2VlZDpcbiAqICAgLSBzdGF0aWMga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQ7XG4gKiAgIC0gRUtTIFBvZCBJZGVudGl0eSAvIEVDUyB0YXNrIHJvbGUgKHRoZSBhZ2VudCBpbmplY3RzIGEgY3JlZGVudGlhbHMgVVJJKTtcbiAqICAgLSBJUlNBIChhIHByb2plY3RlZCB3ZWItaWRlbnRpdHkgdG9rZW4gZmlsZSk7XG4gKiAgIC0gYSBzaGFyZWQtY29uZmlnIHByb2ZpbGUsIGZvciBhIGRldmVsb3BlciBydW5uaW5nIGFnYWluc3QgcmVhbCBBV1MuXG4gKlxuICogVGhlIEVDMiBpbnN0YW5jZSBwcm9maWxlIGlzIHRoZSBvbmUgY2FzZSB3aXRoIE5PIGVudmlyb25tZW50IG1hcmtlciDigJQgaXRzXG4gKiBjcmVkZW50aWFscyBjb21lIGZyb20gSU1EUyBhdCBjYWxsIHRpbWUg4oCUIHNvIGl0IHRha2VzIHRoZSBleHBsaWNpdFxuICogYEJFRFJPQ0tfRU5BQkxFRD10cnVlYCBvcHQtaW4gcmF0aGVyIHRoYW4gYmVpbmcgZ3Vlc3NlZCBhdC5cbiAqL1xuZnVuY3Rpb24gYXdzQ3JlZGVudGlhbFNvdXJjZUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRFxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfRlVMTF9VUklcbiAgICB8fCBwcm9jZXNzLmVudi5BV1NfQ09OVEFJTkVSX0NSRURFTlRJQUxTX1JFTEFUSVZFX1VSSVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFXG4gICAgfHwgcHJvY2Vzcy5lbnYuQkVEUk9DS19FTkFCTEVEID09PSAndHJ1ZSdcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEga2V5bGVzcyBwcm92aWRlciAoQmVkcm9jaykgc2hvdWxkIGJlIGFkdmVydGlzZWQuIEl0IGF1dGhlbnRpY2F0ZXNcbiAqIHdpdGggdGhlIHJ1bnRpbWUncyBJQU0gcm9sZSByYXRoZXIgdGhhbiBhbiBBUEkga2V5LCBzbyBpdCBuZWVkcyBCT1RIIGEgcmVnaW9uXG4gKiB0byBjYWxsIGFuZCBhIHJlc29sdmFibGUgY3JlZGVudGlhbCBzb3VyY2Ug4oCUIHNlZVxuICoge0BsaW5rIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkfSBmb3Igd2h5IHRoZSByZWdpb24gYWxvbmUgaXMgbm90IGVub3VnaC5cbiAqL1xuZnVuY3Rpb24ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEocHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04pICYmIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkKCk7XG59XG5cbi8qKlxuICogTGF6aWx5IGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBLZXktYmFzZWRcbiAqIHByb3ZpZGVycyByZWdpc3RlciBvbmx5IHdoZW4gdGhlaXIga2V5IGlzIHNldDsga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spXG4gKiByZWdpc3RlciB3aGVuIGFuIEFXUyByZWdpb24gaXMgY29uZmlndXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhBSV9QUk9WSURFUl9DQVRBTE9HKSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbaWRdO1xuICAgIGlmICghZmFjdG9yeSkgY29udGludWU7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgLy8gQSBrZXlsZXNzIHByb3ZpZGVyIGlzIGdhdGVkIFNPTEVMWSBieSBpdHMgb3duIGF2YWlsYWJpbGl0eSBjaGVjayDigJQgbmV2ZXJcbiAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgYGVudlZhcmAuIEJlZHJvY2sncyBtYXBwZWQgZW52IHZhciBpc1xuICAgIC8vIGBBV1NfQUNDRVNTX0tFWV9JRGAsIHNvIHRoZSBrZXkgcGF0aCB3b3VsZCBvdGhlcndpc2UgcmVnaXN0ZXIgaXQgd2hlbmV2ZXJcbiAgICAvLyBzdGF0aWMga2V5cyBleGlzdCwgc2tpcHBpbmcgdGhlIHJlZ2lvbiByZXF1aXJlbWVudCBhbmQgcHJvZHVjaW5nIGFcbiAgICAvLyBwcm92aWRlciB0aGF0IGZhaWxzIGF0IGNhbGwgdGltZSBmb3Igd2FudCBvZiBhIHJlZ2lvbi5cbiAgICBjb25zdCB1c2FibGUgPSBpc0tleWxlc3NQcm92aWRlcklkKGlkKSA/IGtleWxlc3NQcm92aWRlckF2YWlsYWJsZSgpIDogISFhcGlLZXk7XG4gICAgaWYgKHVzYWJsZSkge1xuICAgICAgcmVnaXN0cnkuc2V0KGlkLCB7IGluZm8sIGNyZWF0ZU1vZGVsOiBmYWN0b3J5KGFwaUtleSkgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIE9wZW5BSS1jb21wYXRpYmxlIChsb2NhbCAvIHNlbGYtaG9zdGVkKSBwcm92aWRlciBpcyBub3QgaW4gdGhlIHN0YXRpY1xuICAvLyBjYXRhbG9nIOKAlCBpdHMgZW5kcG9pbnQgYW5kIG1vZGVscyBhcmUgZGVwbG95bWVudC1kZWZpbmVkLiBSZWdpc3RlciBpdCB3aGVuIGFcbiAgLy8gYmFzZSBVUkwgaXMgY29uZmlndXJlZDsgaXRzIFwiaXMgY29uZmlndXJlZFwiIHNpZ25hbCBpcyB0aGUgYmFzZSBVUkwsIG5vdCBhIGtleS5cbiAgY29uc3QgY29tcGF0ID0gZ2V0T3BlbkFJQ29tcGF0aWJsZVByb3ZpZGVyKCk7XG4gIGlmIChjb21wYXQpIHtcbiAgICByZWdpc3RyeS5zZXQoY29tcGF0LmlkLCB7XG4gICAgICBpbmZvOiBjb21wYXQsXG4gICAgICBjcmVhdGVNb2RlbDogUFJPVklERVJfRkFDVE9SSUVTW09QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lEXShwcm9jZXNzLmVudi5PUEVOQUlfQ09NUEFUSUJMRV9BUElfS0VZKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxpc3Qgb2YgcHJvdmlkZXJzIHRoYXQgaGF2ZSBBUEkga2V5cyBjb25maWd1cmVkIHZpYSBlbnYgdmFycy5cbiAqXG4gKiBAcmV0dXJucyBBcnJheSBvZiBjb25maWd1cmVkIHByb3ZpZGVyIGluZm8gd2l0aCBtb2RlbCBsaXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUHJvdmlkZXJzKCk6IEFJUHJvdmlkZXJJbmZvW10ge1xuICBpbml0UmVnaXN0cnkoKTtcbiAgcmV0dXJuIEFycmF5LmZyb20ocmVnaXN0cnkudmFsdWVzKCkpLm1hcCgoZSkgPT4gZS5pbmZvKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2RlbCBsaXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyIElEIChyZWdhcmRsZXNzIG9mIGVudiB2YXIgY29uZmlnKS5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIEFycmF5IG9mIG1vZGVscywgb3IgZW1wdHkgYXJyYXkgaWYgcHJvdmlkZXIgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZDogc3RyaW5nKTogQUlNb2RlbEluZm9bXSB7XG4gIHJldHVybiBnZXRBSVByb3ZpZGVyTW9kZWxzKHByb3ZpZGVySWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBMYW5ndWFnZU1vZGVsIGZyb20gdGhlIHJlZ2lzdHJ5IGZvciBhIGNvbmZpZ3VyZWQgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIExhbmd1YWdlTW9kZWwgaW5zdGFuY2VcbiAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdmlkZXIgaXMgbm90IGNvbmZpZ3VyZWQgb3IgbW9kZWwgaXMgaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKHByb3ZpZGVySWQ6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICBjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5LmdldChwcm92aWRlcklkKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQUkgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIgaXMgbm90IGNvbmZpZ3VyZWQuIFNldCB0aGUgY29ycmVzcG9uZGluZyBBUEkga2V5IGVudmlyb25tZW50IHZhcmlhYmxlLmApO1xuICB9XG4gIGlmICghZW50cnkuaW5mby5tb2RlbHMuc29tZSgobSkgPT4gbS5pZCA9PT0gbW9kZWxJZCkpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBlbnRyeS5pbmZvLm1vZGVscy5tYXAoKG0pID0+IG0uaWQpLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIi4gQXZhaWxhYmxlIG1vZGVsczogJHthdmFpbGFibGV9YCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmNyZWF0ZU1vZGVsKG1vZGVsSWQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRlbXBvcmFyeSBMYW5ndWFnZU1vZGVsIHVzaW5nIGEgY3VzdG9tIEFQSSBrZXkgKG5vdCBjYWNoZWQgaW4gcmVnaXN0cnkpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHBhcmFtIG1vZGVsSWQgLSBNb2RlbCBpZGVudGlmaWVyXG4gKiBAcGFyYW0gYXBpS2V5IC0gQ3VzdG9tIEFQSSBrZXlcbiAqIEByZXR1cm5zIExhbmd1YWdlTW9kZWwgaW5zdGFuY2VcbiAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdmlkZXIgb3IgbW9kZWwgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxXaXRoS2V5KHByb3ZpZGVySWQ6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nLCBhcGlLZXk6IHN0cmluZyk6IExhbmd1YWdlTW9kZWwge1xuICBjb25zdCBtb2RlbHMgPSBnZXRBSVByb3ZpZGVyTW9kZWxzKHByb3ZpZGVySWQpO1xuICBpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIi4gU3VwcG9ydGVkOiAke09iamVjdC5rZXlzKEFJX1BST1ZJREVSX0NBVEFMT0cpLmpvaW4oJywgJyl9YCk7XG4gIH1cbiAgaWYgKCFtb2RlbHMuc29tZSgobSkgPT4gbS5pZCA9PT0gbW9kZWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGU6ICR7bW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbcHJvdmlkZXJJZF07XG4gIGlmICghZmFjdG9yeSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cImApO1xuXG4gIC8vIEtleWxlc3MgcHJvdmlkZXJzIChCZWRyb2NrKSBhdXRoZW50aWNhdGUgdmlhIHRoZSBydW50aW1lIElBTSByb2xlIGFuZCBJR05PUkUgYVxuICAvLyBzdXBwbGllZCBrZXkuIFNpbGVudGx5IGRyb3BwaW5nIHRoZSBrZXkgYW5kIHJldHVybmluZyBhIG1vZGVsIHdvdWxkIGRlZmVyIHRoZVxuICAvLyBmYWlsdXJlIHRvIG1vZGVsLWNhbGwgdGltZSB3aGVuIHRoZSBJQU0gcm9sZS9yZWdpb24gaXNuJ3QgY29uZmlndXJlZDsgZ3VhcmQgaXRcbiAgLy8gaGVyZSBzbyB0aGUgZmFpbHVyZSBpcyBjbGVhciBhdCBjb25maWcgdGltZSAobWlycm9ycyByZXNvbHZlTW9kZWwncyBnYXRlKS5cbiAgLy8gS2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spIGF1dGhlbnRpY2F0ZSB2aWEgdGhlIFJVTlRJTUUncyBJQU0gcm9sZSBhbmQgaGF2ZVxuICAvLyBubyBrZXkgdG8gYnJpbmc6IGhvbm91cmluZyBhIFwiYnJpbmcteW91ci1vd24ga2V5XCIgcmVxdWVzdCB0aGVyZSB3b3VsZCBzZXJ2ZVxuICAvLyBpdCBvbiB0aGUgcGxhdGZvcm0ncyBvd24gQVdTIGNyZWRlbnRpYWxzIOKAlCB0aGUgc2lsZW50IEJZTyDihpIgcGxhdGZvcm0gZmFsbGJhY2tcbiAgLy8gYHJlc29sdmVNb2RlbFNlbGVjdGlvbmAgZXhpc3RzIHRvIHByZXZlbnQuIFJlZnVzZSBpdCBpbnN0ZWFkLlxuICBpZiAoaXNLZXlsZXNzUHJvdmlkZXJJZChwcm92aWRlcklkKSkge1xuICAgIHRocm93IG5ldyBBSUNvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgIGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBhdXRoZW50aWNhdGVzIHdpdGggdGhlIHBsYXRmb3JtJ3MgQVdTIHJvbGUgYW5kIGRvZXMgbm90IGFjY2VwdCBhbiBBUEkga2V5LiBgXG4gICAgICAgICsgJ0Nob29zZSBhIGtleS1iYXNlZCBwcm92aWRlciBmb3IgYSBicmluZy15b3VyLW93biBrZXksIG9yIG9taXQgdGhlIGtleSB0byB1c2UgdGhlIHBsYXRmb3JtXFwncyBCZWRyb2NrIGFjY2Vzcy4nLFxuICAgICAgNDAwLFxuICAgICAgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFjdG9yeShhcGlLZXkpKG1vZGVsSWQpO1xufVxuXG4vKiogV2hhdCBhIGNhbGxlciBhc2tlZCBmb3I7IGV2ZXJ5IGZpZWxkIG9wdGlvbmFsIChzZWUge0BsaW5rIHJlc29sdmVNb2RlbFNlbGVjdGlvbn0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFNlbGVjdGlvbiB7XG4gIHByb3ZpZGVyPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIEVwaGVtZXJhbCBicmluZy15b3VyLW93biBrZXkg4oCUIHRoZSByZXF1ZXN0IGlzIGJpbGxlZCB0byBpdCwgbmV2ZXIgdG8gYSBwbGF0Zm9ybSBrZXkuICovXG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIFBsYXRmb3JtIHByb3ZpZGVycyB0byB0cnksIGluIG9yZGVyLCB3aXRoIHRoZWlyIGZpcnN0IG1vZGVsIGlmIHRoZSByZXF1ZXN0ZWQgb25lIGNhbid0IGJlIHJlc29sdmVkLiAqL1xuICBmYWxsYmFja3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBXaG9zZSBrZXkgcGF5cyBmb3IgYSBjYWxsOiB0aGUgY2FsbGVyJ3Mgb3duIGJyaW5nLXlvdXItb3duIGtleSAoYHJlcXVlc3RgKSwgdGhlXG4gKiBvcmdhbml6YXRpb24ncyBjb25maWd1cmVkIHByb3ZpZGVyIGtleSAoYG9yZ2ApLCBvciB0aGUgcGxhdGZvcm0ncyBlbnYtY29uZmlndXJlZFxuICoga2V5IC8gSUFNIHJvbGUgKGBwbGF0Zm9ybWApLiBPbmx5IGBwbGF0Zm9ybWAgbWF5IGZhaWwgb3ZlciBiZXR3ZWVuIHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgS2V5U291cmNlID0gJ3JlcXVlc3QnIHwgJ29yZycgfCAncGxhdGZvcm0nO1xuXG4vKiogQSByZXNvbHZlZCBtb2RlbCBwbHVzIHdobyBhY3R1YWxseSBzZXJ2ZXMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24ge1xuICBtb2RlbDogTGFuZ3VhZ2VNb2RlbDtcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBrZXlTb3VyY2U6IEtleVNvdXJjZTtcbiAgLyoqIFNldCB3aGVuIGEgZmFsbGJhY2sgcHJvdmlkZXIgc2VydmVzIHRoZSByZXF1ZXN0OiB0aGUgcHJvdmlkZXIgb3JpZ2luYWxseSBhc2tlZCBmb3IuICovXG4gIGZhbGxiYWNrRnJvbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgTGFuZ3VhZ2VNb2RlbCBmb3IgYSByZXF1ZXN0OlxuICogLSBgcHJvdmlkZXJgICsgYG1vZGVsYCDihpIgdXNlIHRoZW0gKHdpdGggYW4gb3B0aW9uYWwgZXBoZW1lcmFsIEJZTyBrZXkpO1xuICogLSBgcHJvdmlkZXJgIG9ubHkg4oaSIHRoZSBwcm92aWRlcidzIGZpcnN0IGNhdGFsb2cgbW9kZWw7XG4gKiAtIGBtb2RlbGAgb25seSDihpIgZXJyb3IgKGFtYmlndW91cyDigJQgdGhlIHByb3ZpZGVyIGlzIHVua25vd24pO1xuICogLSBuZWl0aGVyIOKGkiB0aGUgZmlyc3QgZW52LWNvbmZpZ3VyZWQgcHJvdmlkZXIgKGEgY2xvdWQga2V5IG9yIHRoZSBsb2NhbFxuICogICBPcGVuQUktY29tcGF0aWJsZSBlbmRwb2ludCkgc28gQUkgZmVhdHVyZXMgd29yayBvdXQgb2YgdGhlIGJveC5cbiAqXG4gKiBJZiB0aGUgcmVxdWVzdGVkIHByb3ZpZGVyL21vZGVsIGNhbid0IGJlIHJlc29sdmVkLCBgZmFsbGJhY2tzYCBhcmUgdHJpZWQgaW5cbiAqIG9yZGVyIHdpdGggZWFjaCBwcm92aWRlcidzIGZpcnN0IG1vZGVsIOKAlCBFWENFUFQgZm9yIGEgQllPLWtleSByZXF1ZXN0OiB0aGVcbiAqIGZhbGxiYWNrcyByZXNvbHZlIHRocm91Z2ggdGhlIHBsYXRmb3JtJ3MgZW52LWNvbmZpZ3VyZWQga2V5cywgd2hpY2ggd291bGRcbiAqIHNpbGVudGx5IHNwZW5kIHRoZSBwbGF0Zm9ybSdzIEFJIGJ1ZGdldCBvbiBhIHJlcXVlc3QgdGhlIGNhbGxlciBtZWFudCB0byBiaWxsXG4gKiB0byB0aGVpciBvd24ga2V5LiBBIEJZTyBmYWlsdXJlIGlzIHRlcm1pbmFsLlxuICpcbiAqIEB0aHJvd3MgRXJyb3Igd2hlbiBub3RoaW5nIHJlc29sdmVzICh0aGUgb3JpZ2luYWwgZXJyb3Igd2hlbiBmYWxsYmFja3MgYXJlIGV4aGF1c3RlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbFNlbGVjdGlvbihzZWxlY3Rpb246IE1vZGVsU2VsZWN0aW9uKTogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIGNvbnN0IHsgcHJvdmlkZXIsIG1vZGVsLCBhcGlLZXksIGZhbGxiYWNrcyB9ID0gc2VsZWN0aW9uO1xuXG4gIGlmICghcHJvdmlkZXIpIHtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBgbW9kZWxgIHdhcyBzdXBwbGllZCB3aXRob3V0IGEgYHByb3ZpZGVyYCDigJQgc3BlY2lmeSBib3RoLCBvciBuZWl0aGVyLicpO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdCA9IGdldEF2YWlsYWJsZVByb3ZpZGVycygpWzBdO1xuICAgIGNvbnN0IGZpcnN0TW9kZWwgPSBmaXJzdD8ubW9kZWxzWzBdPy5pZDtcbiAgICBpZiAoIWZpcnN0IHx8ICFmaXJzdE1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FJIGlzIG5vdCBjb25maWd1cmVkOiBubyBwcm92aWRlciBBUEkga2V5IGlzIHNldCBhbmQgT1BFTkFJX0NPTVBBVElCTEVfQkFTRV9VUkwgaXMgdW5zZXQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGVsOiByZXNvbHZlTW9kZWwoZmlyc3QuaWQsIGZpcnN0TW9kZWwpLCBwcm92aWRlcjogZmlyc3QuaWQsIG1vZGVsSWQ6IGZpcnN0TW9kZWwsIGtleVNvdXJjZTogJ3BsYXRmb3JtJyB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtb2RlbElkID0gbW9kZWwgPz8gZ2V0UHJvdmlkZXJNb2RlbHMocHJvdmlkZXIpWzBdPy5pZDtcbiAgICBpZiAoIW1vZGVsSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQUkgcHJvdmlkZXIgXCIke3Byb3ZpZGVyfVwiIGhhcyBubyBjb25maWd1cmVkIG1vZGVscy5gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhcGlLZXkgPyBjcmVhdGVNb2RlbFdpdGhLZXkocHJvdmlkZXIsIG1vZGVsSWQsIGFwaUtleSkgOiByZXNvbHZlTW9kZWwocHJvdmlkZXIsIG1vZGVsSWQpO1xuICAgIHJldHVybiB7IG1vZGVsOiByZXNvbHZlZCwgcHJvdmlkZXIsIG1vZGVsSWQsIGtleVNvdXJjZTogYXBpS2V5ID8gJ3JlcXVlc3QnIDogJ3BsYXRmb3JtJyB9O1xuICB9IGNhdGNoIChwcmltYXJ5RXJyb3IpIHtcbiAgICBpZiAoYXBpS2V5IHx8ICFmYWxsYmFja3M/Lmxlbmd0aCkgdGhyb3cgcHJpbWFyeUVycm9yO1xuXG4gICAgZm9yIChjb25zdCBmYWxsYmFja1Byb3ZpZGVyIG9mIGZhbGxiYWNrcykge1xuICAgICAgY29uc3QgZmFsbGJhY2tNb2RlbCA9IGdldEF2YWlsYWJsZVByb3ZpZGVycygpLmZpbmQoKHApID0+IHAuaWQgPT09IGZhbGxiYWNrUHJvdmlkZXIpPy5tb2RlbHNbMF0/LmlkO1xuICAgICAgaWYgKCFmYWxsYmFja01vZGVsKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZWw6IHJlc29sdmVNb2RlbChmYWxsYmFja1Byb3ZpZGVyLCBmYWxsYmFja01vZGVsKSxcbiAgICAgICAgICBwcm92aWRlcjogZmFsbGJhY2tQcm92aWRlcixcbiAgICAgICAgICBtb2RlbElkOiBmYWxsYmFja01vZGVsLFxuICAgICAgICAgIGtleVNvdXJjZTogJ3BsYXRmb3JtJyxcbiAgICAgICAgICBmYWxsYmFja0Zyb206IHByb3ZpZGVyLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBwcmltYXJ5RXJyb3I7XG4gIH1cbn1cbiJdfQ==
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItcmVnaXN0cnkuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLFNBQVMsR0FJVixNQUFNLDRCQUE0QixDQUFDO0FBV3BDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0FBQ2xELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QixpRkFBaUY7QUFDakYsa0ZBQWtGO0FBQ2xGLGlFQUFpRTtBQUNqRSxNQUFNLGtCQUFrQixHQUF5RTtJQUMvRixXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVB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QUUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEcsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsU0FBUztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztvQkFDcEQsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLFNBQVMsRUFBRSxVQUFVO29CQUNyQixZQUFZLEVBQUUsUUFBUTtpQkFDdkIsQ0FBQztZQUNKLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsU0FBUztZQUNYLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxZQUFZLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlQW1hem9uQmVkcm9jayB9IGZyb20gJ0BhaS1zZGsvYW1hem9uLWJlZHJvY2snO1xuaW1wb3J0IHsgY3JlYXRlQW50aHJvcGljIH0gZnJvbSAnQGFpLXNkay9hbnRocm9waWMnO1xuaW1wb3J0IHsgY3JlYXRlR29vZ2xlR2VuZXJhdGl2ZUFJIH0gZnJvbSAnQGFpLXNkay9nb29nbGUnO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJIH0gZnJvbSAnQGFpLXNkay9vcGVuYWknO1xuaW1wb3J0IHsgY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSB9IGZyb20gJ0BhaS1zZGsvb3BlbmFpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgY3JlYXRlWGFpIH0gZnJvbSAnQGFpLXNkay94YWknO1xuaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHtcbiAgQUlfUFJPVklERVJfQ0FUQUxPRyxcbiAgQUlfUFJPVklERVJfRU5WX1ZBUlMsXG4gIGlzS2V5bGVzc1Byb3ZpZGVySWQsXG4gIE9QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lELFxuICBnZXRBSVByb3ZpZGVyTW9kZWxzLFxuICBnZXRPcGVuQUlDb21wYXRpYmxlUHJvdmlkZXIsXG4gIEFJQ29uZmlndXJhdGlvbkVycm9yLFxuICBFcnJvckNvZGUsXG4gIHR5cGUgQUlQcm92aWRlckluZm8sXG4gIHR5cGUgQUlNb2RlbEluZm8sXG4gIHR5cGUgQWlLZXlTb3VyY2UsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gJ2FpJztcblxuLy8gUHJvdmlkZXIgUmVnaXN0cnlcblxuLyoqIFJlZ2lzdGVyZWQgcHJvdmlkZXIgd2l0aCBtb2RlbCBmYWN0b3J5IGZ1bmN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckVudHJ5IHtcbiAgaW5mbzogQUlQcm92aWRlckluZm87XG4gIGNyZWF0ZU1vZGVsOiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsO1xufVxuXG5jb25zdCByZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBQcm92aWRlckVudHJ5PigpO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vIFByb3ZpZGVyIOKGkiBtb2RlbC1mYWN0b3J5IG1hcC4gYGtleWAgaXMgb3B0aW9uYWwgc28ga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2ssXG4vLyB2aWEgdGhlIHJ1bnRpbWUgSUFNIHJvbGUpIGFuZCBrZXktYmFzZWQgcHJvdmlkZXJzIHNoYXJlIG9uZSBzaWduYXR1cmUuIERlY2xhcmVkXG4vLyBvbmNlIGFuZCBjb25zdW1lZCBieSBCT1RIIGluaXRSZWdpc3RyeSBhbmQgY3JlYXRlTW9kZWxXaXRoS2V5LlxuY29uc3QgUFJPVklERVJfRkFDVE9SSUVTOiBSZWNvcmQ8c3RyaW5nLCAoa2V5Pzogc3RyaW5nKSA9PiAobW9kZWxJZDogc3RyaW5nKSA9PiBMYW5ndWFnZU1vZGVsPiA9IHtcbiAgJ2FudGhyb3BpYyc6IChrZXkpID0+IGNyZWF0ZUFudGhyb3BpYyh7IGFwaUtleToga2V5IH0pLFxuICAnb3BlbmFpJzogKGtleSkgPT4gY3JlYXRlT3BlbkFJKHsgYXBpS2V5OiBrZXkgfSksXG4gICdnb29nbGUnOiAoa2V5KSA9PiBjcmVhdGVHb29nbGVHZW5lcmF0aXZlQUkoeyBhcGlLZXk6IGtleSB9KSxcbiAgJ3hhaSc6IChrZXkpID0+IGNyZWF0ZVhhaSh7IGFwaUtleToga2V5IH0pLFxuICAvLyBCZWRyb2NrIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgUlVOVElNRSdzIElBTSByb2xlLCBhbmQgdGhlIGFpLXNkayBwcm92aWRlclxuICAvLyBkb2VzIE5PVCB3YWxrIHRoZSBBV1MgY3JlZGVudGlhbCBjaGFpbiBvbiBpdHMgb3duIOKAlCBiYXJlIGBjcmVhdGVBbWF6b25CZWRyb2NrKClgXG4gIC8vIHJlYWRzIG9ubHkgYEFXU19BQ0NFU1NfS0VZX0lEYC9gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZYCBhbmQgb3RoZXJ3aXNlIHRocm93c1xuICAvLyBcIkFXUyBTaWdWNCBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBBV1MgY3JlZGVudGlhbHNcIiBhdCBjYWxsIHRpbWUuIEhhbmRpbmcgaXRcbiAgLy8gdGhlIHN0YW5kYXJkIGNoYWluIHJlc29sdmVzIEVLUyBQb2QgSWRlbnRpdHksIElSU0EsIEVDUyB0YXNrIHJvbGVzLCB0aGUgRUMyXG4gIC8vIGluc3RhbmNlIHByb2ZpbGUsIFNTTyBhbmQgc3RhdGljIGVudiBrZXlzIOKAlCBpLmUuIGV2ZXJ5IHdheSB0aGlzIHBsYXRmb3JtIGlzXG4gIC8vIGFjdHVhbGx5IGRlcGxveWVkLiBCdWlsdCBvbmNlIHBlciBmYWN0b3J5IGNhbGw7IHRoZSBjaGFpbiBjYWNoZXMgaW50ZXJuYWxseVxuICAvLyBhbmQgcmVmcmVzaGVzIGV4cGlyaW5nIHJvbGUgY3JlZGVudGlhbHMgb24gaXRzIG93bi5cbiAgJ2FtYXpvbi1iZWRyb2NrJzogKCkgPT4gY3JlYXRlQW1hem9uQmVkcm9jayh7IGNyZWRlbnRpYWxQcm92aWRlcjogZnJvbU5vZGVQcm92aWRlckNoYWluKCkgfSksXG4gIC8vIFNlbGYtaG9zdGVkIE9wZW5BSS1jb21wYXRpYmxlIGVuZHBvaW50IChEb2NrZXIgbW9kZWwgaW1hZ2UgLyBPbGxhbWEgLyB2TExNKS5cbiAgLy8gVGhlIGVuZHBvaW50IGlzIGRlcGxveW1lbnQtZGVmaW5lZCB2aWEgT1BFTkFJX0NPTVBBVElCTEVfQkFTRV9VUkw7IGxvY2FsIHNlcnZlcnNcbiAgLy8gdXN1YWxseSBpZ25vcmUgdGhlIGtleSwgc28gYSBwbGFjZWhvbGRlciBpcyBzZW50IHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICBbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdOiAoa2V5KSA9PiB7XG4gICAgY29uc3QgYmFzZVVSTCA9IHByb2Nlc3MuZW52Lk9QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMO1xuICAgIGlmICghYmFzZVVSTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPUEVOQUlfQ09NUEFUSUJMRV9CQVNFX1VSTCBpcyBub3Qgc2V0OyBjYW5ub3QgYnVpbGQgdGhlIGxvY2FsIChPcGVuQUktY29tcGF0aWJsZSkgcHJvdmlkZXIuJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlT3BlbkFJQ29tcGF0aWJsZSh7XG4gICAgICBuYW1lOiBPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRCxcbiAgICAgIGJhc2VVUkwsXG4gICAgICBhcGlLZXk6IGtleSA/PyBwcm9jZXNzLmVudi5PUEVOQUlfQ09NUEFUSUJMRV9BUElfS0VZID8/ICdub3QtbmVlZGVkJyxcbiAgICB9KTtcbiAgICByZXR1cm4gKG1vZGVsSWQ6IHN0cmluZykgPT4gcHJvdmlkZXIobW9kZWxJZCk7XG4gIH0sXG59O1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgaGFzIGFuIEFXUyBjcmVkZW50aWFsIFNPVVJDRSB0aGUgcHJvdmlkZXIgY2hhaW4gY2FuXG4gKiBhY3R1YWxseSByZXNvbHZlLlxuICpcbiAqIEEgY29uZmlndXJlZCByZWdpb24gaXMgTk9UIHN1Y2ggYSBzaWduYWw6IGV2ZXJ5IGRlcGxveSB0YXJnZXQgc2V0c1xuICogYEFXU19SRUdJT05gIChpdCBpcyBuZWVkZWQgZm9yIHBpcGVsaW5lIHN5bnRoZXNpcyksIGluY2x1ZGluZyBtaW5pa3ViZSBhbmRcbiAqIGRvY2tlci1jb21wb3NlLCB3aGVyZSBub3RoaW5nIGdyYW50cyB0aGUgcG9kIEFXUyBjcmVkZW50aWFscy4gR2F0aW5nIEJlZHJvY2tcbiAqIG9uIHRoZSByZWdpb24gYWxvbmUgd291bGQgYWR2ZXJ0aXNlIGl0IG9uIGxvY2FsIGluc3RhbGxzIGFzIHRoZSBPTkxZXG4gKiBwcm92aWRlciwgYHJlc29sdmVNb2RlbFNlbGVjdGlvbmAgd291bGQgcGljayBpdCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV2ZXJ5IEFza1xuICogdHVybiB3b3VsZCBkaWUgd2l0aCBcIkNvdWxkIG5vdCBsb2FkIGNyZWRlbnRpYWxzIGZyb20gYW55IHByb3ZpZGVyc1wiIOKAlCBhblxuICogZXJyb3IgYWJvdXQgQVdTIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZSB1c2VyIGFza2VkLlxuICpcbiAqIEVhY2ggY2hlY2sgYmVsb3cgY29ycmVzcG9uZHMgdG8gYSB3YXkgYGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpYCBjYW4gc3VjY2VlZDpcbiAqICAgLSBzdGF0aWMga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQ7XG4gKiAgIC0gRUtTIFBvZCBJZGVudGl0eSAvIEVDUyB0YXNrIHJvbGUgKHRoZSBhZ2VudCBpbmplY3RzIGEgY3JlZGVudGlhbHMgVVJJKTtcbiAqICAgLSBJUlNBIChhIHByb2plY3RlZCB3ZWItaWRlbnRpdHkgdG9rZW4gZmlsZSk7XG4gKiAgIC0gYSBzaGFyZWQtY29uZmlnIHByb2ZpbGUsIGZvciBhIGRldmVsb3BlciBydW5uaW5nIGFnYWluc3QgcmVhbCBBV1MuXG4gKlxuICogVGhlIEVDMiBpbnN0YW5jZSBwcm9maWxlIGlzIHRoZSBvbmUgY2FzZSB3aXRoIE5PIGVudmlyb25tZW50IG1hcmtlciDigJQgaXRzXG4gKiBjcmVkZW50aWFscyBjb21lIGZyb20gSU1EUyBhdCBjYWxsIHRpbWUg4oCUIHNvIGl0IHRha2VzIHRoZSBleHBsaWNpdFxuICogYEJFRFJPQ0tfRU5BQkxFRD10cnVlYCBvcHQtaW4gcmF0aGVyIHRoYW4gYmVpbmcgZ3Vlc3NlZCBhdC5cbiAqL1xuZnVuY3Rpb24gYXdzQ3JlZGVudGlhbFNvdXJjZUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShcbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRFxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19DT05UQUlORVJfQ1JFREVOVElBTFNfRlVMTF9VUklcbiAgICB8fCBwcm9jZXNzLmVudi5BV1NfQ09OVEFJTkVSX0NSRURFTlRJQUxTX1JFTEFUSVZFX1VSSVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRVxuICAgIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFXG4gICAgfHwgcHJvY2Vzcy5lbnYuQkVEUk9DS19FTkFCTEVEID09PSAndHJ1ZSdcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEga2V5bGVzcyBwcm92aWRlciAoQmVkcm9jaykgc2hvdWxkIGJlIGFkdmVydGlzZWQuIEl0IGF1dGhlbnRpY2F0ZXNcbiAqIHdpdGggdGhlIHJ1bnRpbWUncyBJQU0gcm9sZSByYXRoZXIgdGhhbiBhbiBBUEkga2V5LCBzbyBpdCBuZWVkcyBCT1RIIGEgcmVnaW9uXG4gKiB0byBjYWxsIGFuZCBhIHJlc29sdmFibGUgY3JlZGVudGlhbCBzb3VyY2Ug4oCUIHNlZVxuICoge0BsaW5rIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkfSBmb3Igd2h5IHRoZSByZWdpb24gYWxvbmUgaXMgbm90IGVub3VnaC5cbiAqL1xuZnVuY3Rpb24ga2V5bGVzc1Byb3ZpZGVyQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEocHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04pICYmIGF3c0NyZWRlbnRpYWxTb3VyY2VDb25maWd1cmVkKCk7XG59XG5cbi8qKlxuICogTGF6aWx5IGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIHJlZ2lzdHJ5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBLZXktYmFzZWRcbiAqIHByb3ZpZGVycyByZWdpc3RlciBvbmx5IHdoZW4gdGhlaXIga2V5IGlzIHNldDsga2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spXG4gKiByZWdpc3RlciB3aGVuIGFuIEFXUyByZWdpb24gaXMgY29uZmlndXJlZC5cbiAqL1xuZnVuY3Rpb24gaW5pdFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiBPYmplY3QuZW50cmllcyhBSV9QUk9WSURFUl9DQVRBTE9HKSkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbaWRdO1xuICAgIGlmICghZmFjdG9yeSkgY29udGludWU7XG4gICAgY29uc3QgZW52VmFyID0gQUlfUFJPVklERVJfRU5WX1ZBUlNbaWRdO1xuICAgIGNvbnN0IGFwaUtleSA9IGVudlZhciA/IHByb2Nlc3MuZW52W2VudlZhcl0gOiB1bmRlZmluZWQ7XG4gICAgLy8gQSBrZXlsZXNzIHByb3ZpZGVyIGlzIGdhdGVkIFNPTEVMWSBieSBpdHMgb3duIGF2YWlsYWJpbGl0eSBjaGVjayDigJQgbmV2ZXJcbiAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgYGVudlZhcmAuIEJlZHJvY2sncyBtYXBwZWQgZW52IHZhciBpc1xuICAgIC8vIGBBV1NfQUNDRVNTX0tFWV9JRGAsIHNvIHRoZSBrZXkgcGF0aCB3b3VsZCBvdGhlcndpc2UgcmVnaXN0ZXIgaXQgd2hlbmV2ZXJcbiAgICAvLyBzdGF0aWMga2V5cyBleGlzdCwgc2tpcHBpbmcgdGhlIHJlZ2lvbiByZXF1aXJlbWVudCBhbmQgcHJvZHVjaW5nIGFcbiAgICAvLyBwcm92aWRlciB0aGF0IGZhaWxzIGF0IGNhbGwgdGltZSBmb3Igd2FudCBvZiBhIHJlZ2lvbi5cbiAgICBjb25zdCB1c2FibGUgPSBpc0tleWxlc3NQcm92aWRlcklkKGlkKSA/IGtleWxlc3NQcm92aWRlckF2YWlsYWJsZSgpIDogISFhcGlLZXk7XG4gICAgaWYgKHVzYWJsZSkge1xuICAgICAgcmVnaXN0cnkuc2V0KGlkLCB7IGluZm8sIGNyZWF0ZU1vZGVsOiBmYWN0b3J5KGFwaUtleSkgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIE9wZW5BSS1jb21wYXRpYmxlIChsb2NhbCAvIHNlbGYtaG9zdGVkKSBwcm92aWRlciBpcyBub3QgaW4gdGhlIHN0YXRpY1xuICAvLyBjYXRhbG9nIOKAlCBpdHMgZW5kcG9pbnQgYW5kIG1vZGVscyBhcmUgZGVwbG95bWVudC1kZWZpbmVkLiBSZWdpc3RlciBpdCB3aGVuIGFcbiAgLy8gYmFzZSBVUkwgaXMgY29uZmlndXJlZDsgaXRzIFwiaXMgY29uZmlndXJlZFwiIHNpZ25hbCBpcyB0aGUgYmFzZSBVUkwsIG5vdCBhIGtleS5cbiAgY29uc3QgY29tcGF0ID0gZ2V0T3BlbkFJQ29tcGF0aWJsZVByb3ZpZGVyKCk7XG4gIGlmIChjb21wYXQpIHtcbiAgICByZWdpc3RyeS5zZXQoY29tcGF0LmlkLCB7XG4gICAgICBpbmZvOiBjb21wYXQsXG4gICAgICBjcmVhdGVNb2RlbDogUFJPVklERVJfRkFDVE9SSUVTW09QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lEXShwcm9jZXNzLmVudi5PUEVOQUlfQ09NUEFUSUJMRV9BUElfS0VZKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxpc3Qgb2YgcHJvdmlkZXJzIHRoYXQgaGF2ZSBBUEkga2V5cyBjb25maWd1cmVkIHZpYSBlbnYgdmFycy5cbiAqXG4gKiBAcmV0dXJucyBBcnJheSBvZiBjb25maWd1cmVkIHByb3ZpZGVyIGluZm8gd2l0aCBtb2RlbCBsaXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUHJvdmlkZXJzKCk6IEFJUHJvdmlkZXJJbmZvW10ge1xuICBpbml0UmVnaXN0cnkoKTtcbiAgcmV0dXJuIEFycmF5LmZyb20ocmVnaXN0cnkudmFsdWVzKCkpLm1hcCgoZSkgPT4gZS5pbmZvKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2RlbCBsaXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyIElEIChyZWdhcmRsZXNzIG9mIGVudiB2YXIgY29uZmlnKS5cbiAqXG4gKiBAcGFyYW0gcHJvdmlkZXJJZCAtIFByb3ZpZGVyIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIEFycmF5IG9mIG1vZGVscywgb3IgZW1wdHkgYXJyYXkgaWYgcHJvdmlkZXIgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdmlkZXJNb2RlbHMocHJvdmlkZXJJZDogc3RyaW5nKTogQUlNb2RlbEluZm9bXSB7XG4gIHJldHVybiBnZXRBSVByb3ZpZGVyTW9kZWxzKHByb3ZpZGVySWQpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBMYW5ndWFnZU1vZGVsIGZyb20gdGhlIHJlZ2lzdHJ5IGZvciBhIGNvbmZpZ3VyZWQgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHByb3ZpZGVySWQgLSBQcm92aWRlciBpZGVudGlmaWVyXG4gKiBAcGFyYW0gbW9kZWxJZCAtIE1vZGVsIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIExhbmd1YWdlTW9kZWwgaW5zdGFuY2VcbiAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdmlkZXIgaXMgbm90IGNvbmZpZ3VyZWQgb3IgbW9kZWwgaXMgaW52YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKHByb3ZpZGVySWQ6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nKTogTGFuZ3VhZ2VNb2RlbCB7XG4gIGluaXRSZWdpc3RyeSgpO1xuICBjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5LmdldChwcm92aWRlcklkKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQUkgcHJvdmlkZXIgXCIke3Byb3ZpZGVySWR9XCIgaXMgbm90IGNvbmZpZ3VyZWQuIFNldCB0aGUgY29ycmVzcG9uZGluZyBBUEkga2V5IGVudmlyb25tZW50IHZhcmlhYmxlLmApO1xuICB9XG4gIGlmICghZW50cnkuaW5mby5tb2RlbHMuc29tZSgobSkgPT4gbS5pZCA9PT0gbW9kZWxJZCkpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBlbnRyeS5pbmZvLm1vZGVscy5tYXAoKG0pID0+IG0uaWQpLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIi4gQXZhaWxhYmxlIG1vZGVsczogJHthdmFpbGFibGV9YCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmNyZWF0ZU1vZGVsKG1vZGVsSWQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRlbXBvcmFyeSBMYW5ndWFnZU1vZGVsIHVzaW5nIGEgY3VzdG9tIEFQSSBrZXkgKG5vdCBjYWNoZWQgaW4gcmVnaXN0cnkpLlxuICpcbiAqIEBwYXJhbSBwcm92aWRlcklkIC0gUHJvdmlkZXIgaWRlbnRpZmllclxuICogQHBhcmFtIG1vZGVsSWQgLSBNb2RlbCBpZGVudGlmaWVyXG4gKiBAcGFyYW0gYXBpS2V5IC0gQ3VzdG9tIEFQSSBrZXlcbiAqIEByZXR1cm5zIExhbmd1YWdlTW9kZWwgaW5zdGFuY2VcbiAqIEB0aHJvd3MgRXJyb3IgaWYgcHJvdmlkZXIgb3IgbW9kZWwgaXMgdW5rbm93blxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxXaXRoS2V5KHByb3ZpZGVySWQ6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nLCBhcGlLZXk6IHN0cmluZyk6IExhbmd1YWdlTW9kZWwge1xuICBjb25zdCBtb2RlbHMgPSBnZXRBSVByb3ZpZGVyTW9kZWxzKHByb3ZpZGVySWQpO1xuICBpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIi4gU3VwcG9ydGVkOiAke09iamVjdC5rZXlzKEFJX1BST1ZJREVSX0NBVEFMT0cpLmpvaW4oJywgJyl9YCk7XG4gIH1cbiAgaWYgKCFtb2RlbHMuc29tZSgobSkgPT4gbS5pZCA9PT0gbW9kZWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIFwiJHttb2RlbElkfVwiIGlzIG5vdCBhdmFpbGFibGUgZm9yIHByb3ZpZGVyIFwiJHtwcm92aWRlcklkfVwiLiBBdmFpbGFibGU6ICR7bW9kZWxzLm1hcCgobSkgPT4gbS5pZCkuam9pbignLCAnKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBQUk9WSURFUl9GQUNUT1JJRVNbcHJvdmlkZXJJZF07XG4gIGlmICghZmFjdG9yeSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cImApO1xuXG4gIC8vIEtleWxlc3MgcHJvdmlkZXJzIChCZWRyb2NrKSBhdXRoZW50aWNhdGUgdmlhIHRoZSBydW50aW1lIElBTSByb2xlIGFuZCBJR05PUkUgYVxuICAvLyBzdXBwbGllZCBrZXkuIFNpbGVudGx5IGRyb3BwaW5nIHRoZSBrZXkgYW5kIHJldHVybmluZyBhIG1vZGVsIHdvdWxkIGRlZmVyIHRoZVxuICAvLyBmYWlsdXJlIHRvIG1vZGVsLWNhbGwgdGltZSB3aGVuIHRoZSBJQU0gcm9sZS9yZWdpb24gaXNuJ3QgY29uZmlndXJlZDsgZ3VhcmQgaXRcbiAgLy8gaGVyZSBzbyB0aGUgZmFpbHVyZSBpcyBjbGVhciBhdCBjb25maWcgdGltZSAobWlycm9ycyByZXNvbHZlTW9kZWwncyBnYXRlKS5cbiAgLy8gS2V5bGVzcyBwcm92aWRlcnMgKEJlZHJvY2spIGF1dGhlbnRpY2F0ZSB2aWEgdGhlIFJVTlRJTUUncyBJQU0gcm9sZSBhbmQgaGF2ZVxuICAvLyBubyBrZXkgdG8gYnJpbmc6IGhvbm91cmluZyBhIFwiYnJpbmcteW91ci1vd24ga2V5XCIgcmVxdWVzdCB0aGVyZSB3b3VsZCBzZXJ2ZVxuICAvLyBpdCBvbiB0aGUgcGxhdGZvcm0ncyBvd24gQVdTIGNyZWRlbnRpYWxzIOKAlCB0aGUgc2lsZW50IEJZTyDihpIgcGxhdGZvcm0gZmFsbGJhY2tcbiAgLy8gYHJlc29sdmVNb2RlbFNlbGVjdGlvbmAgZXhpc3RzIHRvIHByZXZlbnQuIFJlZnVzZSBpdCBpbnN0ZWFkLlxuICBpZiAoaXNLZXlsZXNzUHJvdmlkZXJJZChwcm92aWRlcklkKSkge1xuICAgIHRocm93IG5ldyBBSUNvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgIGBBSSBwcm92aWRlciBcIiR7cHJvdmlkZXJJZH1cIiBhdXRoZW50aWNhdGVzIHdpdGggdGhlIHBsYXRmb3JtJ3MgQVdTIHJvbGUgYW5kIGRvZXMgbm90IGFjY2VwdCBhbiBBUEkga2V5LiBgXG4gICAgICAgICsgJ0Nob29zZSBhIGtleS1iYXNlZCBwcm92aWRlciBmb3IgYSBicmluZy15b3VyLW93biBrZXksIG9yIG9taXQgdGhlIGtleSB0byB1c2UgdGhlIHBsYXRmb3JtXFwncyBCZWRyb2NrIGFjY2Vzcy4nLFxuICAgICAgNDAwLFxuICAgICAgRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFjdG9yeShhcGlLZXkpKG1vZGVsSWQpO1xufVxuXG4vKiogV2hhdCBhIGNhbGxlciBhc2tlZCBmb3I7IGV2ZXJ5IGZpZWxkIG9wdGlvbmFsIChzZWUge0BsaW5rIHJlc29sdmVNb2RlbFNlbGVjdGlvbn0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFNlbGVjdGlvbiB7XG4gIHByb3ZpZGVyPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgLyoqIEVwaGVtZXJhbCBicmluZy15b3VyLW93biBrZXkg4oCUIHRoZSByZXF1ZXN0IGlzIGJpbGxlZCB0byBpdCwgbmV2ZXIgdG8gYSBwbGF0Zm9ybSBrZXkuICovXG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIFBsYXRmb3JtIHByb3ZpZGVycyB0byB0cnksIGluIG9yZGVyLCB3aXRoIHRoZWlyIGZpcnN0IG1vZGVsIGlmIHRoZSByZXF1ZXN0ZWQgb25lIGNhbid0IGJlIHJlc29sdmVkLiAqL1xuICBmYWxsYmFja3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgcmVzb2x2ZWQgbW9kZWwgcGx1cyB3aG8gYWN0dWFsbHkgc2VydmVzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uIHtcbiAgbW9kZWw6IExhbmd1YWdlTW9kZWw7XG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgLyoqIFdob3NlIGtleSBwYXlzIChhcGktY29yZSBgQUlfS0VZX1NPVVJDRVNgKS4gT25seSBgcGxhdGZvcm1gIG1heSBmYWlsIG92ZXIgYmV0d2VlbiBwcm92aWRlcnMuICovXG4gIGtleVNvdXJjZTogQWlLZXlTb3VyY2U7XG4gIC8qKiBTZXQgd2hlbiBhIGZhbGxiYWNrIHByb3ZpZGVyIHNlcnZlcyB0aGUgcmVxdWVzdDogdGhlIHByb3ZpZGVyIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAqL1xuICBmYWxsYmFja0Zyb20/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIExhbmd1YWdlTW9kZWwgZm9yIGEgcmVxdWVzdDpcbiAqIC0gYHByb3ZpZGVyYCArIGBtb2RlbGAg4oaSIHVzZSB0aGVtICh3aXRoIGFuIG9wdGlvbmFsIGVwaGVtZXJhbCBCWU8ga2V5KTtcbiAqIC0gYHByb3ZpZGVyYCBvbmx5IOKGkiB0aGUgcHJvdmlkZXIncyBmaXJzdCBjYXRhbG9nIG1vZGVsO1xuICogLSBgbW9kZWxgIG9ubHkg4oaSIGVycm9yIChhbWJpZ3VvdXMg4oCUIHRoZSBwcm92aWRlciBpcyB1bmtub3duKTtcbiAqIC0gbmVpdGhlciDihpIgdGhlIGZpcnN0IGVudi1jb25maWd1cmVkIHByb3ZpZGVyIChhIGNsb3VkIGtleSBvciB0aGUgbG9jYWxcbiAqICAgT3BlbkFJLWNvbXBhdGlibGUgZW5kcG9pbnQpIHNvIEFJIGZlYXR1cmVzIHdvcmsgb3V0IG9mIHRoZSBib3guXG4gKlxuICogSWYgdGhlIHJlcXVlc3RlZCBwcm92aWRlci9tb2RlbCBjYW4ndCBiZSByZXNvbHZlZCwgYGZhbGxiYWNrc2AgYXJlIHRyaWVkIGluXG4gKiBvcmRlciB3aXRoIGVhY2ggcHJvdmlkZXIncyBmaXJzdCBtb2RlbCDigJQgRVhDRVBUIGZvciBhIEJZTy1rZXkgcmVxdWVzdDogdGhlXG4gKiBmYWxsYmFja3MgcmVzb2x2ZSB0aHJvdWdoIHRoZSBwbGF0Zm9ybSdzIGVudi1jb25maWd1cmVkIGtleXMsIHdoaWNoIHdvdWxkXG4gKiBzaWxlbnRseSBzcGVuZCB0aGUgcGxhdGZvcm0ncyBBSSBidWRnZXQgb24gYSByZXF1ZXN0IHRoZSBjYWxsZXIgbWVhbnQgdG8gYmlsbFxuICogdG8gdGhlaXIgb3duIGtleS4gQSBCWU8gZmFpbHVyZSBpcyB0ZXJtaW5hbC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIHdoZW4gbm90aGluZyByZXNvbHZlcyAodGhlIG9yaWdpbmFsIGVycm9yIHdoZW4gZmFsbGJhY2tzIGFyZSBleGhhdXN0ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWxTZWxlY3Rpb24oc2VsZWN0aW9uOiBNb2RlbFNlbGVjdGlvbik6IFJlc29sdmVkTW9kZWxTZWxlY3Rpb24ge1xuICBjb25zdCB7IHByb3ZpZGVyLCBtb2RlbCwgYXBpS2V5LCBmYWxsYmFja3MgfSA9IHNlbGVjdGlvbjtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgYG1vZGVsYCB3YXMgc3VwcGxpZWQgd2l0aG91dCBhIGBwcm92aWRlcmAg4oCUIHNwZWNpZnkgYm90aCwgb3IgbmVpdGhlci4nKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBnZXRBdmFpbGFibGVQcm92aWRlcnMoKVswXTtcbiAgICBjb25zdCBmaXJzdE1vZGVsID0gZmlyc3Q/Lm1vZGVsc1swXT8uaWQ7XG4gICAgaWYgKCFmaXJzdCB8fCAhZmlyc3RNb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBSSBpcyBub3QgY29uZmlndXJlZDogbm8gcHJvdmlkZXIgQVBJIGtleSBpcyBzZXQgYW5kIE9QRU5BSV9DT01QQVRJQkxFX0JBU0VfVVJMIGlzIHVuc2V0LicpO1xuICAgIH1cbiAgICByZXR1cm4geyBtb2RlbDogcmVzb2x2ZU1vZGVsKGZpcnN0LmlkLCBmaXJzdE1vZGVsKSwgcHJvdmlkZXI6IGZpcnN0LmlkLCBtb2RlbElkOiBmaXJzdE1vZGVsLCBrZXlTb3VyY2U6ICdwbGF0Zm9ybScgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgbW9kZWxJZCA9IG1vZGVsID8/IGdldFByb3ZpZGVyTW9kZWxzKHByb3ZpZGVyKVswXT8uaWQ7XG4gICAgaWYgKCFtb2RlbElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFJIHByb3ZpZGVyIFwiJHtwcm92aWRlcn1cIiBoYXMgbm8gY29uZmlndXJlZCBtb2RlbHMuYCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkID0gYXBpS2V5ID8gY3JlYXRlTW9kZWxXaXRoS2V5KHByb3ZpZGVyLCBtb2RlbElkLCBhcGlLZXkpIDogcmVzb2x2ZU1vZGVsKHByb3ZpZGVyLCBtb2RlbElkKTtcbiAgICByZXR1cm4geyBtb2RlbDogcmVzb2x2ZWQsIHByb3ZpZGVyLCBtb2RlbElkLCBrZXlTb3VyY2U6IGFwaUtleSA/ICdyZXF1ZXN0JyA6ICdwbGF0Zm9ybScgfTtcbiAgfSBjYXRjaCAocHJpbWFyeUVycm9yKSB7XG4gICAgaWYgKGFwaUtleSB8fCAhZmFsbGJhY2tzPy5sZW5ndGgpIHRocm93IHByaW1hcnlFcnJvcjtcblxuICAgIGZvciAoY29uc3QgZmFsbGJhY2tQcm92aWRlciBvZiBmYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrTW9kZWwgPSBnZXRBdmFpbGFibGVQcm92aWRlcnMoKS5maW5kKChwKSA9PiBwLmlkID09PSBmYWxsYmFja1Byb3ZpZGVyKT8ubW9kZWxzWzBdPy5pZDtcbiAgICAgIGlmICghZmFsbGJhY2tNb2RlbCkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1vZGVsOiByZXNvbHZlTW9kZWwoZmFsbGJhY2tQcm92aWRlciwgZmFsbGJhY2tNb2RlbCksXG4gICAgICAgICAgcHJvdmlkZXI6IGZhbGxiYWNrUHJvdmlkZXIsXG4gICAgICAgICAgbW9kZWxJZDogZmFsbGJhY2tNb2RlbCxcbiAgICAgICAgICBrZXlTb3VyY2U6ICdwbGF0Zm9ybScsXG4gICAgICAgICAgZmFsbGJhY2tGcm9tOiBwcm92aWRlcixcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgcHJpbWFyeUVycm9yO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@ai-sdk/openai-compatible": "3.0.90",
|
|
29
29
|
"@ai-sdk/xai": "5.0.43",
|
|
30
30
|
"@aws-sdk/credential-providers": "3.1160.0",
|
|
31
|
-
"@pipeline-builder/api-core": "5.2.
|
|
31
|
+
"@pipeline-builder/api-core": "5.2.12",
|
|
32
32
|
"ai": "7.0.170"
|
|
33
33
|
},
|
|
34
34
|
"keywords": [
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"registry": "https://registry.npmjs.org/",
|
|
90
90
|
"provenance": true
|
|
91
91
|
},
|
|
92
|
-
"version": "4.3.
|
|
92
|
+
"version": "4.3.12",
|
|
93
93
|
"bugs": {
|
|
94
94
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
95
95
|
},
|