__vite_ssr_exportName__("OrchestratorMcpTargetOptions", () => { try { return OrchestratorMcpTargetOptions } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTarget", () => { try { return OrchestratorMcpTarget } catch {} });
__vite_ssr_exportName__("OrchestratorMcpRuntimeMode", () => { try { return OrchestratorMcpRuntimeMode } catch {} });
__vite_ssr_exportName__("OrchestratorMcpInteractionMode", () => { try { return OrchestratorMcpInteractionMode } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTaskRole", () => { try { return OrchestratorMcpTaskRole } catch {} });
__vite_ssr_exportName__("OrchestratorMcpDelegatedTaskStatus", () => { try { return OrchestratorMcpDelegatedTaskStatus } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTerminalDelegatedTaskStatus", () => { try { return OrchestratorMcpTerminalDelegatedTaskStatus } catch {} });
__vite_ssr_exportName__("OrchestratorMcpDelegateTaskInput", () => { try { return OrchestratorMcpDelegateTaskInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpDelegateTaskResult", () => { try { return OrchestratorMcpDelegateTaskResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTaskStatusInput", () => { try { return OrchestratorMcpTaskStatusInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTaskCancelInput", () => { try { return OrchestratorMcpTaskCancelInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpTaskCancelResult", () => { try { return OrchestratorMcpTaskCancelResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCreateThreadRequest", () => { try { return OrchestratorMcpCreateThreadRequest } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCreateThreadsInput", () => { try { return OrchestratorMcpCreateThreadsInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCreatedThreadStatus", () => { try { return OrchestratorMcpCreatedThreadStatus } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCreatedThread", () => { try { return OrchestratorMcpCreatedThread } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCreateThreadsResult", () => { try { return OrchestratorMcpCreateThreadsResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadStatus", () => { try { return OrchestratorMcpThreadStatus } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadListInput", () => { try { return OrchestratorMcpThreadListInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadPullRequest", () => { try { return OrchestratorMcpThreadPullRequest } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadListItem", () => { try { return OrchestratorMcpThreadListItem } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadListResult", () => { try { return OrchestratorMcpThreadListResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadReadInput", () => { try { return OrchestratorMcpThreadReadInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadDetail", () => { try { return OrchestratorMcpThreadDetail } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadRun", () => { try { return OrchestratorMcpThreadRun } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadTimelineItem", () => { try { return OrchestratorMcpThreadTimelineItem } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadReadResult", () => { try { return OrchestratorMcpThreadReadResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadSendInput", () => { try { return OrchestratorMcpThreadSendInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadSendResult", () => { try { return OrchestratorMcpThreadSendResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadWaitInput", () => { try { return OrchestratorMcpThreadWaitInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadWaitResult", () => { try { return OrchestratorMcpThreadWaitResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadInterruptInput", () => { try { return OrchestratorMcpThreadInterruptInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpThreadInterruptResult", () => { try { return OrchestratorMcpThreadInterruptResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCapabilitiesInput", () => { try { return OrchestratorMcpCapabilitiesInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpModelOption", () => { try { return OrchestratorMcpModelOption } catch {} });
__vite_ssr_exportName__("OrchestratorMcpProviderCapability", () => { try { return OrchestratorMcpProviderCapability } catch {} });
__vite_ssr_exportName__("OrchestratorMcpCapabilitiesResult", () => { try { return OrchestratorMcpCapabilitiesResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpScheduleTaskInput", () => { try { return OrchestratorMcpScheduleTaskInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpScheduledTask", () => { try { return OrchestratorMcpScheduledTask } catch {} });
__vite_ssr_exportName__("OrchestratorMcpScheduleTaskResult", () => { try { return OrchestratorMcpScheduleTaskResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpListScheduledTasksInput", () => { try { return OrchestratorMcpListScheduledTasksInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpListScheduledTasksResult", () => { try { return OrchestratorMcpListScheduledTasksResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpUpdateScheduledTaskInput", () => { try { return OrchestratorMcpUpdateScheduledTaskInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpRequestSecretInput", () => { try { return OrchestratorMcpRequestSecretInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpRequestSecretResult", () => { try { return OrchestratorMcpRequestSecretResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpDeleteScheduledTaskInput", () => { try { return OrchestratorMcpDeleteScheduledTaskInput } catch {} });
__vite_ssr_exportName__("OrchestratorMcpDeleteScheduledTaskResult", () => { try { return OrchestratorMcpDeleteScheduledTaskResult } catch {} });
__vite_ssr_exportName__("OrchestratorMcpFailure", () => { try { return OrchestratorMcpFailure } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Effect.js");
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/SchemaTransformation.js");
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["ContextTransferId","IsoDateTime","MessageId","NodeId","NonNegativeInt","PositiveInt","ProjectId","RunId","RuntimeRequestId","ScheduledTaskId","SecretRef","ThreadId","TrimmedNonEmptyString","TurnItemId"]});
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/scheduledTask.ts", {"importedNames":["ScheduledTaskRunStatus","ScheduledTaskSchedule","ScheduledTaskUpsertSchedule"]});
const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerPolicy.ts", {"importedNames":["ProviderInteractionMode","ProviderRequestKind","RuntimeMode"]});
const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/pullRequest.ts", {"importedNames":["PullRequestState"]});
const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/threadPullRequest.ts", {"importedNames":["ThreadLinkedPullRequest","ThreadPullRequestKey","ThreadPullRequestLinkSource"]});
const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/threadTitle.ts", {"importedNames":["ThreadTitleRegeneration"]});
const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/orchestrationV2.ts", {"importedNames":["OrchestrationV2Actor","OrchestrationV2CreationSource","OrchestrationV2RunStatus","OrchestrationV2TurnItemStatus"]});
const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/model.ts", {"importedNames":["ProviderOptionSelection","ProviderOptionSelectionValue"]});
const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerInstance.ts", {"importedNames":["ProviderDriverKind","ProviderInstanceId"]});












const OrchestratorMcpPrompt = __vite_ssr_import_3__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(12e4)).annotate({ description: "Complete task or message text for the target agent." });
const OrchestratorMcpTitle = __vite_ssr_import_3__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(512)).annotate({ description: "Optional concise display title." });
const OrchestratorMcpClientRequestId = __vite_ssr_import_3__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(256)).annotate({ description: "Stable idempotency key to reuse when retrying this mutation." });
// OpenCode 1.15 serializes nested MCP union objects as JSON strings; decode that form at the boundary.
const OrchestratorMcpScheduleFromJsonString = __vite_ssr_import_1__.fromJsonString((0,__vite_ssr_import_4__.ScheduledTaskUpsertSchedule)).annotate({ description: "Compatibility-only JSON encoding of the schedule object. Prefer a structured object." });
const OrchestratorMcpSchedule = __vite_ssr_import_1__.Union([__vite_ssr_import_4__.ScheduledTaskUpsertSchedule, OrchestratorMcpScheduleFromJsonString]).annotate({ description: "Trigger object: {type:'interval', everyMs}, {type:'fixed_time', timeOfDay, weekdays?}, or {type:'webhook'} to run on each request to a generated URL. Never stringify it unless the provider requires the compatibility form." });
const OrchestratorMcpTargetOptionsFromRecord = __vite_ssr_import_1__.Record(__vite_ssr_import_1__.String, (0,__vite_ssr_import_10__.ProviderOptionSelectionValue)).pipe(__vite_ssr_import_1__.decodeTo(__vite_ssr_import_1__.Array((0,__vite_ssr_import_10__.ProviderOptionSelection)), __vite_ssr_import_2__.transformEffect({
	decode: (record) => __vite_ssr_import_0__.succeed(Object.entries(record).map(([id, value]) => ({
		id,
		value
	}))),
	encode: (selections) => __vite_ssr_import_0__.succeed(Object.fromEntries(selections.map((selection) => [selection.id, selection.value])))
})));
const OrchestratorMcpTargetOptions = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Array((0,__vite_ssr_import_10__.ProviderOptionSelection)), OrchestratorMcpTargetOptionsFromRecord]);
const OrchestratorMcpTarget = __vite_ssr_import_1__.Struct({
	providerInstanceId: __vite_ssr_import_1__.optional(__vite_ssr_import_11__.ProviderInstanceId.annotate({ description: "Configured provider instance id from orchestrator_capabilities." })),
	driverKind: __vite_ssr_import_1__.optional(__vite_ssr_import_11__.ProviderDriverKind.annotate({ description: "Provider driver kind; prefer providerInstanceId when available." })),
	model: __vite_ssr_import_1__.optional(__vite_ssr_import_3__.TrimmedNonEmptyString.annotate({ description: "Model id advertised for the selected provider instance." })),
	options: __vite_ssr_import_1__.optional(OrchestratorMcpTargetOptions.annotate({ description: "Model options from orchestrator_capabilities. For the same provider instance and model, overrides individual inherited values; [] or {} clears them. Claude: {effort: 'max', fastMode: true}; Codex: {reasoningEffort: 'max', serviceTier: 'priority'}. Only use options advertised by the selected model." }))
});
const OrchestratorMcpRuntimeMode = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Literal("inherit"), __vite_ssr_import_5__.RuntimeMode]);
const OrchestratorMcpInteractionMode = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Literal("inherit"), __vite_ssr_import_5__.ProviderInteractionMode]);
const OrchestratorMcpTaskRole = __vite_ssr_import_1__.Literals([
	"implementation",
	"research",
	"review",
	"design",
	"test",
	"general"
]);
const OrchestratorMcpDelegatedTaskStatus = __vite_ssr_import_1__.Literals([
	"queued",
	"running",
	"waiting",
	"completed",
	"failed",
	"cancelled",
	"interrupted"
]);
const OrchestratorMcpTerminalDelegatedTaskStatus = __vite_ssr_import_1__.Literals([
	"completed",
	"failed",
	"cancelled",
	"interrupted"
]);
const OrchestratorMcpDelegateTaskInput = __vite_ssr_import_1__.Struct({
	task: OrchestratorMcpPrompt.annotate({ description: "Self-contained task for one delegated child agent/subagent." }),
	target: __vite_ssr_import_1__.optional(OrchestratorMcpTarget),
	title: __vite_ssr_import_1__.optional(OrchestratorMcpTitle),
	role: __vite_ssr_import_1__.optional(OrchestratorMcpTaskRole),
	isolation: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["shared", "worktree"]).annotate({ description: "Defaults to shared: use the parent's checkout. Worktree creates a separate checkout from the parent's current local commit before starting the child. Uncommitted edits are not copied." })),
	mode: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["async", "wait"]).annotate({ description: "Defaults to async. Use wait only when this turn needs the child's result before you can continue. A blocking question or a pending approval in the child ends the wait early with the task still running." })),
	timeoutMs: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Finite).annotate({ description: "Wait budget for mode=wait only. Default 10 minutes. Elapsing it returns waitTimedOut=true on that call and does not cancel the child." }),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId),
	runtimeMode: __vite_ssr_import_1__.optional(OrchestratorMcpRuntimeMode.annotate({ description: "Defaults to inherit; omit it unless the user asks for a supervised child. A narrower mode is not a read-only switch: on most providers, approval-required and auto-accept-edits pause the child at each action that needs approval until a person approves it in the child's thread, which this thread cannot do. To limit what the child does, say so in the task. A mode ranked above this thread's is rejected; that ranking does not promise the child's provider permissions are narrower than this thread's." })),
	interactionMode: __vite_ssr_import_1__.optional(OrchestratorMcpInteractionMode)
});
const OrchestratorMcpDelegateTaskResult = __vite_ssr_import_1__.Struct({
	taskId: __vite_ssr_import_3__.NodeId,
	childThreadId: __vite_ssr_import_3__.ThreadId,
	childRunId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	childNodeId: __vite_ssr_import_3__.NodeId,
	status: OrchestratorMcpDelegatedTaskStatus,
	workState: __vite_ssr_import_1__.Literals([
		"working",
		"waiting_for_children",
		"result_available"
	]),
	hasPendingChildRuns: __vite_ssr_import_1__.Boolean,
	latestTerminalRunId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	latestTerminalStatus: __vite_ssr_import_1__.NullOr(OrchestratorMcpTerminalDelegatedTaskStatus),
	latestTerminalSummary: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	latestTerminalResultContextTransferId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ContextTransferId)),
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	model: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	options: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array((0,__vite_ssr_import_10__.ProviderOptionSelection)).annotate({ description: "Stored model option selections for the child run, or its thread before a run starts. Omitted selections use provider defaults." })),
	summary: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	resultContextTransferId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ContextTransferId)),
	hasPendingQuestion: __vite_ssr_import_1__.Boolean.annotate({ description: "Blocking question ends mode=wait. Pass threadId=childThreadId to t3_pending_request_list, t3_pending_request_read (with requestId) and t3_pending_request_respond, or ask the user; the task's completion still wakes this thread." }),
	pendingApproval: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.Struct({
		requestId: __vite_ssr_import_3__.RuntimeRequestId,
		kind: __vite_ssr_import_5__.ProviderRequestKind,
		runId: __vite_ssr_import_3__.RunId
	})).annotate({ description: "Identity of the oldest pending live approval for this task's own unfinished work, or null. Ends mode=wait without cancelling the child; completion still wakes this thread. This grants no approval authority. Read the fresh full request in childThreadId before responding: the record can outlive its provider callback. Decisions remain with the child's existing approval holder; pending request tools answer questions only." }),
	waitTimedOut: __vite_ssr_import_1__.Boolean.annotate({ description: "True only on that mode=wait call when timeoutMs elapsed. The timeout does not cancel the child. Later task_status reads return false and use status for liveness." })
});
const OrchestratorMcpTaskStatusInput = __vite_ssr_import_1__.Struct({ taskId: __vite_ssr_import_3__.NodeId });
const OrchestratorMcpTaskCancelInput = __vite_ssr_import_1__.Struct({
	taskId: __vite_ssr_import_3__.NodeId,
	reason: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isMaxLength(2e3))),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId)
});
const OrchestratorMcpTaskCancelResult = __vite_ssr_import_1__.Struct({
	taskId: __vite_ssr_import_3__.NodeId,
	status: __vite_ssr_import_1__.Literals([
		"cancel_requested",
		"completed",
		"failed",
		"cancelled",
		"interrupted"
	])
});
const OrchestratorMcpCreateThreadRequest = __vite_ssr_import_1__.Struct({
	prompt: __vite_ssr_import_1__.optional(OrchestratorMcpPrompt),
	title: __vite_ssr_import_1__.optional(OrchestratorMcpTitle),
	target: __vite_ssr_import_1__.optional(OrchestratorMcpTarget),
	runtimeMode: __vite_ssr_import_1__.optional(OrchestratorMcpRuntimeMode),
	interactionMode: __vite_ssr_import_1__.optional(OrchestratorMcpInteractionMode)
});
const OrchestratorMcpCreateThreadsInput = __vite_ssr_import_1__.Struct({
	threads: __vite_ssr_import_1__.Array(OrchestratorMcpCreateThreadRequest).check(__vite_ssr_import_1__.isMinLength(1), __vite_ssr_import_1__.isMaxLength(20)),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId)
});
const OrchestratorMcpCreatedThreadStatus = __vite_ssr_import_1__.Union([
	__vite_ssr_import_1__.Literal("idle"),
	__vite_ssr_import_1__.Literal("preparing"),
	__vite_ssr_import_1__.Literal("starting"),
	OrchestratorMcpDelegatedTaskStatus,
	__vite_ssr_import_1__.Literal("rolled_back")
]);
const OrchestratorMcpCreatedThread = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	runId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	status: OrchestratorMcpCreatedThreadStatus,
	title: __vite_ssr_import_1__.String,
	createdBy: __vite_ssr_import_9__.OrchestrationV2Actor,
	creationSource: __vite_ssr_import_9__.OrchestrationV2CreationSource,
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	model: __vite_ssr_import_1__.String
});
const OrchestratorMcpCreateThreadsResult = __vite_ssr_import_1__.Struct({ threads: __vite_ssr_import_1__.Array(OrchestratorMcpCreatedThread) });
const OrchestratorMcpThreadStatus = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Literal("idle"), __vite_ssr_import_9__.OrchestrationV2RunStatus]);
const OrchestratorMcpProjectTarget = __vite_ssr_import_1__.optional(__vite_ssr_import_3__.ProjectId.annotate({ description: "Project to act on. Omit for the calling thread's project; required when the caller is not a T3 thread." }));
const OrchestratorMcpThreadListInput = __vite_ssr_import_1__.Struct({
	projectId: OrchestratorMcpProjectTarget,
	statuses: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array(OrchestratorMcpThreadStatus).check(__vite_ssr_import_1__.isMaxLength(10))),
	titleContains: __vite_ssr_import_1__.optional(__vite_ssr_import_3__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(256))),
	settled: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	snoozed: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	includeSubagents: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	cursor: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NonNegativeInt)),
	limit: __vite_ssr_import_1__.optional(__vite_ssr_import_3__.PositiveInt.check(__vite_ssr_import_1__.isLessThanOrEqualTo(100)))
});
/** state is null until the host is read. */
const OrchestratorMcpThreadPullRequest = __vite_ssr_import_1__.Struct({
	...__vite_ssr_import_7__.ThreadPullRequestKey.fields,
	url: __vite_ssr_import_3__.TrimmedNonEmptyString,
	source: __vite_ssr_import_7__.ThreadPullRequestLinkSource,
	state: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_6__.PullRequestState))
});
const OrchestratorMcpThreadListItem = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	title: __vite_ssr_import_1__.String,
	createdBy: __vite_ssr_import_9__.OrchestrationV2Actor,
	creationSource: __vite_ssr_import_9__.OrchestrationV2CreationSource,
	status: OrchestratorMcpThreadStatus,
	latestRunId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	model: __vite_ssr_import_1__.String,
	runtimeMode: __vite_ssr_import_5__.RuntimeMode,
	interactionMode: __vite_ssr_import_5__.ProviderInteractionMode,
	linkedPullRequest: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_7__.ThreadLinkedPullRequest)),
	pullRequests: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array(OrchestratorMcpThreadPullRequest)),
	settled: __vite_ssr_import_1__.Boolean,
	settledAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	snoozed: __vite_ssr_import_1__.Boolean,
	snoozedUntil: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	parentThreadId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ThreadId)),
	relationshipToParent: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.Literals(["fork", "subagent"])),
	itemCount: __vite_ssr_import_3__.NonNegativeInt,
	createdAt: __vite_ssr_import_3__.IsoDateTime,
	updatedAt: __vite_ssr_import_3__.IsoDateTime
});
const OrchestratorMcpThreadListResult = __vite_ssr_import_1__.Struct({
	projectId: __vite_ssr_import_3__.ProjectId,
	currentThreadId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ThreadId)),
	threads: __vite_ssr_import_1__.Array(OrchestratorMcpThreadListItem),
	nextCursor: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.NonNegativeInt)),
	total: __vite_ssr_import_3__.NonNegativeInt
});
// Codex hides `minimum` and `maximum` from the model, so a value above the maximum clamps on
// decode instead of failing the call; pagination returns the rest. Values below 1 still fail:
// 0 asks for nothing, and answering it with one item would be a different request.
const clampedPositiveInt = (maximum) => __vite_ssr_import_3__.PositiveInt.pipe(__vite_ssr_import_1__.decodeTo(__vite_ssr_import_3__.PositiveInt.check(__vite_ssr_import_1__.isLessThanOrEqualTo(maximum)), __vite_ssr_import_2__.transform({
	decode: (value) => Math.min(value, maximum),
	encode: (value) => value
})));
const OrchestratorMcpThreadReadInput = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	itemId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.TurnItemId)),
	textOffset: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NonNegativeInt)),
	view: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["messages", "activity"])),
	afterPosition: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NonNegativeInt)),
	limit: __vite_ssr_import_1__.optional(clampedPositiveInt(100)).annotate({ description: "Maximum timeline items to return, from 1 to 100." }),
	runLimit: __vite_ssr_import_1__.optional(clampedPositiveInt(50)).annotate({ description: "Maximum recent runs to return, from 1 to 50." }),
	maxCharsPerItem: __vite_ssr_import_1__.optional(clampedPositiveInt(5e4)).annotate({ description: "Maximum text characters per item, from 1 to 50000." })
});
const OrchestratorMcpThreadDetail = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	projectId: __vite_ssr_import_3__.ProjectId,
	title: __vite_ssr_import_1__.String,
	createdBy: __vite_ssr_import_9__.OrchestrationV2Actor,
	creationSource: __vite_ssr_import_9__.OrchestrationV2CreationSource,
	status: OrchestratorMcpThreadStatus,
	latestRunId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	activeRunId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	model: __vite_ssr_import_1__.String,
	runtimeMode: __vite_ssr_import_5__.RuntimeMode,
	interactionMode: __vite_ssr_import_5__.ProviderInteractionMode,
	linkedPullRequest: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_7__.ThreadLinkedPullRequest)),
	pullRequests: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array(OrchestratorMcpThreadPullRequest)),
	titleRegeneration: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_8__.ThreadTitleRegeneration)),
	branch: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	worktreePath: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	parentThreadId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ThreadId)),
	relationshipToParent: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.Literals(["fork", "subagent"])),
	runCount: __vite_ssr_import_3__.NonNegativeInt,
	itemCount: __vite_ssr_import_3__.NonNegativeInt,
	pendingRequestCount: __vite_ssr_import_3__.NonNegativeInt,
	archived: __vite_ssr_import_1__.Boolean,
	settled: __vite_ssr_import_1__.Boolean,
	settledAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	snoozed: __vite_ssr_import_1__.Boolean,
	snoozedUntil: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	createdAt: __vite_ssr_import_3__.IsoDateTime,
	updatedAt: __vite_ssr_import_3__.IsoDateTime
});
const OrchestratorMcpThreadRun = __vite_ssr_import_1__.Struct({
	runId: __vite_ssr_import_3__.RunId,
	ordinal: __vite_ssr_import_3__.PositiveInt,
	status: __vite_ssr_import_9__.OrchestrationV2RunStatus,
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	model: __vite_ssr_import_1__.String,
	requestedAt: __vite_ssr_import_3__.IsoDateTime,
	startedAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	completedAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime))
});
const OrchestratorMcpThreadTimelineItem = __vite_ssr_import_1__.Struct({
	position: __vite_ssr_import_3__.NonNegativeInt,
	visibility: __vite_ssr_import_1__.Literals([
		"local",
		"inherited",
		"synthetic"
	]),
	sourceThreadId: __vite_ssr_import_3__.ThreadId,
	itemId: __vite_ssr_import_3__.TurnItemId,
	subagentId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NodeId)),
	runId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	messageId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.MessageId)),
	createdBy: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_9__.OrchestrationV2Actor)),
	creationSource: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_9__.OrchestrationV2CreationSource)),
	senderThreadId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.ThreadId)),
	type: __vite_ssr_import_1__.String,
	status: __vite_ssr_import_9__.OrchestrationV2TurnItemStatus,
	title: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	text: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	textTruncated: __vite_ssr_import_1__.Boolean,
	nextTextOffset: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.NonNegativeInt))),
	updatedAt: __vite_ssr_import_3__.IsoDateTime
});
const OrchestratorMcpThreadReadResult = __vite_ssr_import_1__.Struct({
	thread: OrchestratorMcpThreadDetail,
	recentRuns: __vite_ssr_import_1__.Array(OrchestratorMcpThreadRun),
	items: __vite_ssr_import_1__.Array(OrchestratorMcpThreadTimelineItem),
	nextPosition: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.NonNegativeInt)),
	hasMore: __vite_ssr_import_1__.Boolean
});
const OrchestratorMcpThreadSendInput = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	message: OrchestratorMcpPrompt,
	mode: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals([
		"auto",
		"queue",
		"steer",
		"restart"
	])),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId)
});
const OrchestratorMcpThreadSendResult = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	messageId: __vite_ssr_import_3__.MessageId,
	runId: __vite_ssr_import_3__.RunId,
	taskId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NodeId)),
	status: __vite_ssr_import_9__.OrchestrationV2RunStatus,
	delivery: __vite_ssr_import_1__.Literals([
		"started",
		"queued",
		"steered",
		"restarted"
	])
});
const OrchestratorMcpThreadWaitInput = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	runId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.RunId)),
	timeoutMs: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Finite)
});
const OrchestratorMcpThreadWaitResult = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	runId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	status: OrchestratorMcpThreadStatus,
	timedOut: __vite_ssr_import_1__.Boolean
});
const OrchestratorMcpThreadInterruptInput = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	runId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.RunId)),
	reason: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.String.check(__vite_ssr_import_1__.isMaxLength(2e3))),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId)
});
const OrchestratorMcpThreadInterruptResult = __vite_ssr_import_1__.Struct({
	threadId: __vite_ssr_import_3__.ThreadId,
	runId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.RunId)),
	status: __vite_ssr_import_1__.Union([
		__vite_ssr_import_1__.Literal("interrupt_requested"),
		__vite_ssr_import_1__.Literal("no_active_run"),
		__vite_ssr_import_1__.Literals([
			"completed",
			"failed",
			"cancelled",
			"interrupted",
			"rolled_back"
		])
	])
});
const OrchestratorMcpCapabilitiesInput = __vite_ssr_import_1__.Struct({ search: __vite_ssr_import_1__.optional(__vite_ssr_import_3__.TrimmedNonEmptyString.check(__vite_ssr_import_1__.isMaxLength(200)).annotate({ description: "Words to match against model ids and labels. Lists matching models instead of the default short list." })) });
const OrchestratorMcpModelOption = __vite_ssr_import_1__.Struct({
	id: __vite_ssr_import_1__.String,
	values: __vite_ssr_import_1__.Array((0,__vite_ssr_import_10__.ProviderOptionSelectionValue)),
	default: __vite_ssr_import_1__.optional((0,__vite_ssr_import_10__.ProviderOptionSelectionValue))
});
const OrchestratorMcpProviderCapability = __vite_ssr_import_1__.Struct({
	providerInstanceId: __vite_ssr_import_11__.ProviderInstanceId,
	driverKind: __vite_ssr_import_11__.ProviderDriverKind,
	displayName: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	models: __vite_ssr_import_1__.Array(__vite_ssr_import_1__.Struct({
		id: __vite_ssr_import_1__.String,
		/** Omitted when it only restates the id. */
		label: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.String),
		options: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array(OrchestratorMcpModelOption))
	})),
	/** Models left out of `models`: unlisted visible models, or matches past the cap with `search`. */
	omittedModels: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.NonNegativeInt)),
	runtimeModes: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array((0,__vite_ssr_import_5__.RuntimeMode))),
	canRunChildTask: __vite_ssr_import_1__.Boolean,
	canRunCrossProviderChildTask: __vite_ssr_import_1__.Boolean,
	constraints: __vite_ssr_import_1__.Array(__vite_ssr_import_1__.String)
});
const OrchestratorMcpCapabilitiesResult = __vite_ssr_import_1__.Struct({
	parentThreadId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ThreadId)),
	inheritedProviderInstanceId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_11__.ProviderInstanceId)),
	inheritedModel: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	inheritedOptions: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Array((0,__vite_ssr_import_10__.ProviderOptionSelection))),
	runtimeMode: __vite_ssr_import_5__.RuntimeMode,
	interactionMode: __vite_ssr_import_5__.ProviderInteractionMode,
	providers: __vite_ssr_import_1__.Array(OrchestratorMcpProviderCapability),
	features: __vite_ssr_import_1__.Struct({
		appOwnedSubagents: __vite_ssr_import_1__.Boolean,
		asyncPolling: __vite_ssr_import_1__.Boolean,
		cancellation: __vite_ssr_import_1__.Boolean,
		batchThreadCreation: __vite_ssr_import_1__.Boolean,
		threadManagement: __vite_ssr_import_1__.Boolean,
		incrementalThreadRead: __vite_ssr_import_1__.Boolean,
		scheduledTasks: __vite_ssr_import_1__.Boolean,
		maxBatchThreads: __vite_ssr_import_1__.Number
	})
});
const OrchestratorMcpScheduleTaskInput = __vite_ssr_import_1__.Struct({
	projectId: OrchestratorMcpProjectTarget,
	prompt: OrchestratorMcpPrompt.annotate({ description: "Prompt executed on every scheduled run." }),
	schedule: OrchestratorMcpSchedule,
	title: __vite_ssr_import_1__.optional(OrchestratorMcpTitle),
	enabled: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean.annotate({ description: "Whether the schedule starts enabled; defaults true." })),
	bindToCurrentThread: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean.annotate({ description: "True (default) posts each run into this thread; false creates a fresh top-level thread per run." })),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId)
});
const OrchestratorMcpScheduledTask = __vite_ssr_import_1__.Struct({
	scheduledTaskId: __vite_ssr_import_3__.ScheduledTaskId,
	title: __vite_ssr_import_1__.String,
	prompt: __vite_ssr_import_1__.String,
	enabled: __vite_ssr_import_1__.Boolean,
	projectId: __vite_ssr_import_3__.ProjectId,
	boundThreadId: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.ThreadId)),
	schedule: __vite_ssr_import_4__.ScheduledTaskSchedule,
	nextRunAt: __vite_ssr_import_1__.NullOr((0,__vite_ssr_import_3__.IsoDateTime)),
	lastRunStatus: __vite_ssr_import_4__.ScheduledTaskRunStatus,
	webhookUrl: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.String).annotate({ description: "Public URL to give the sender. Absent when this environment has no T3 Connect managed tunnel; the user must enable T3 Connect remote access first." }),
	webhookSignature: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["none", "set"])).annotate({ description: "Whether requests must carry a valid signature." })
});
const OrchestratorMcpScheduleTaskResult = OrchestratorMcpScheduledTask;
const OrchestratorMcpListScheduledTasksInput = __vite_ssr_import_1__.Struct({ projectId: __vite_ssr_import_1__.optional(__vite_ssr_import_3__.ProjectId.annotate({ description: "Only list this project's tasks. Omit for the calling thread's project, or for every project when the caller is not a T3 thread." })) });
const OrchestratorMcpListScheduledTasksResult = __vite_ssr_import_1__.Struct({ tasks: __vite_ssr_import_1__.Array(OrchestratorMcpScheduledTask) });
const OrchestratorMcpUpdateScheduledTaskInput = __vite_ssr_import_1__.Struct({
	scheduledTaskId: __vite_ssr_import_3__.ScheduledTaskId,
	prompt: __vite_ssr_import_1__.optional(OrchestratorMcpPrompt),
	title: __vite_ssr_import_1__.optional(OrchestratorMcpTitle),
	schedule: __vite_ssr_import_1__.optional(OrchestratorMcpSchedule),
	enabled: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	bindToCurrentThread: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean)
});
const OrchestratorMcpRequestSecretInput = __vite_ssr_import_1__.Struct({
	label: __vite_ssr_import_3__.TrimmedNonEmptyString.annotate({ description: "What you need, shown as the card's title, e.g. 'GitHub webhook secret'." }),
	reason: __vite_ssr_import_3__.TrimmedNonEmptyString.annotate({ description: "One or two sentences on what it is for and where the user gets or also enters it." }),
	placeholder: __vite_ssr_import_1__.optional((0,__vite_ssr_import_3__.TrimmedNonEmptyString)).annotate({ description: "Hint inside the input, e.g. 'Paste your GitHub token'." }),
	timeoutMs: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Int.check(__vite_ssr_import_1__.isBetween({
		minimum: 1e3,
		maximum: 60 * 60 * 1e3
	}))).annotate({ description: "How long to wait for the user. Default 10 minutes." }),
	clientRequestId: __vite_ssr_import_1__.optional(OrchestratorMcpClientRequestId).annotate({ description: "Reuse when retrying a call that lost its result, so the user sees one card and its answer is returned again. Use a new id to ask again after timed_out or cancelled." })
});
const OrchestratorMcpRequestSecretResult = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Struct({
	status: __vite_ssr_import_1__.Literal("saved").annotate({ description: "secretRef holds the value." }),
	secretRef: __vite_ssr_import_3__.SecretRef.annotate({ description: "Pass it to a tool that accepts a secretRef; it works once, and you never see the value." })
}), __vite_ssr_import_1__.Struct({ status: __vite_ssr_import_1__.Literals([
	"declined",
	"cancelled",
	"timed_out"
]).annotate({ description: "declined: the user chose not to. cancelled: the request ended with the run. timed_out: the user did not answer in time; the card is closed, so ask again with a new clientRequestId if still needed." }) })]);
const OrchestratorMcpDeleteScheduledTaskInput = __vite_ssr_import_1__.Struct({ scheduledTaskId: __vite_ssr_import_3__.ScheduledTaskId });
const OrchestratorMcpDeleteScheduledTaskResult = __vite_ssr_import_1__.Struct({
	scheduledTaskId: __vite_ssr_import_3__.ScheduledTaskId,
	deleted: __vite_ssr_import_1__.Boolean
});
class OrchestratorMcpFailure extends __vite_ssr_import_1__.TaggedError()("OrchestratorMcpFailure", {
	code: __vite_ssr_import_1__.Literals([
		"capability_denied",
		"parent_not_active",
		"provider_unavailable",
		"model_unavailable",
		"runtime_mode_escalation_denied",
		"interaction_mode_escalation_denied",
		"task_not_found",
		"task_not_cancellable",
		"thread_not_found",
		"run_not_found",
		"thread_not_sendable",
		"thread_not_interruptible",
		"invalid_request",
		"orchestration_error",
		"thread_credential_required",
		"target_required"
	]),
	message: __vite_ssr_import_1__.String
}) {}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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LENBQUM7QUFJTSxNQUFNLDJDQUEyQyxzQkFBTyxPQUFPO0NBQ3BFLGlCQUFpQjtDQUNqQixTQUFTLHNCQUFPO0FBQ2xCLENBQUM7QUFJTSxNQUFNLCtCQUErQixzQkFBTyxZQUFvQyxDQUFDLENBQ3RGLDBCQUNBO0NBQ0UsTUFBTSxzQkFBTyxTQUFTO0VBQ3BCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0YsQ0FBQztDQUNELFNBQVMsc0JBQU87QUFDbEIsQ0FDRixDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsib3JjaGVzdHJhdG9yTWNwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEVmZmVjdCBmcm9tIFwiZWZmZWN0L0VmZmVjdFwiO1xuaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5pbXBvcnQgKiBhcyBTY2hlbWFUcmFuc2Zvcm1hdGlvbiBmcm9tIFwiZWZmZWN0L1NjaGVtYVRyYW5zZm9ybWF0aW9uXCI7XG5cbmltcG9ydCB7XG4gIENvbnRleHRUcmFuc2ZlcklkLFxuICBJc29EYXRlVGltZSxcbiAgTWVzc2FnZUlkLFxuICBOb2RlSWQsXG4gIE5vbk5lZ2F0aXZlSW50LFxuICBQb3NpdGl2ZUludCxcbiAgUHJvamVjdElkLFxuICBSdW5JZCxcbiAgUnVudGltZVJlcXVlc3RJZCxcbiAgU2NoZWR1bGVkVGFza0lkLFxuICBTZWNyZXRSZWYsXG4gIFRocmVhZElkLFxuICBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIFR1cm5JdGVtSWQsXG59IGZyb20gXCIuL2Jhc2VTY2hlbWFzLnRzXCI7XG5pbXBvcnQge1xuICBTY2hlZHVsZWRUYXNrUnVuU3RhdHVzLFxuICBTY2hlZHVsZWRUYXNrU2NoZWR1bGUsXG4gIFNjaGVkdWxlZFRhc2tVcHNlcnRTY2hlZHVsZSxcbn0gZnJvbSBcIi4vc2NoZWR1bGVkVGFzay50c1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJJbnRlcmFjdGlvbk1vZGUsIFByb3ZpZGVyUmVxdWVzdEtpbmQsIFJ1bnRpbWVNb2RlIH0gZnJvbSBcIi4vcHJvdmlkZXJQb2xpY3kudHNcIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0U3RhdGUgfSBmcm9tIFwiLi9wdWxsUmVxdWVzdC50c1wiO1xuaW1wb3J0IHtcbiAgVGhyZWFkTGlua2VkUHVsbFJlcXVlc3QsXG4gIFRocmVhZFB1bGxSZXF1ZXN0S2V5LFxuICBUaHJlYWRQdWxsUmVxdWVzdExpbmtTb3VyY2UsXG59IGZyb20gXCIuL3RocmVhZFB1bGxSZXF1ZXN0LnRzXCI7XG5pbXBvcnQgeyBUaHJlYWRUaXRsZVJlZ2VuZXJhdGlvbiB9IGZyb20gXCIuL3RocmVhZFRpdGxlLnRzXCI7XG5pbXBvcnQge1xuICBPcmNoZXN0cmF0aW9uVjJBY3RvcixcbiAgT3JjaGVzdHJhdGlvblYyQ3JlYXRpb25Tb3VyY2UsXG4gIE9yY2hlc3RyYXRpb25WMlJ1blN0YXR1cyxcbiAgT3JjaGVzdHJhdGlvblYyVHVybkl0ZW1TdGF0dXMsXG59IGZyb20gXCIuL29yY2hlc3RyYXRpb25WMi50c1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJPcHRpb25TZWxlY3Rpb24sIFByb3ZpZGVyT3B0aW9uU2VsZWN0aW9uVmFsdWUgfSBmcm9tIFwiLi9tb2RlbC50c1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJEcml2ZXJLaW5kLCBQcm92aWRlckluc3RhbmNlSWQgfSBmcm9tIFwiLi9wcm92aWRlckluc3RhbmNlLnRzXCI7XG5cbmNvbnN0IE9yY2hlc3RyYXRvck1jcFByb21wdCA9IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMTIwXzAwMCkpLmFubm90YXRlKHtcbiAgZGVzY3JpcHRpb246IFwiQ29tcGxldGUgdGFzayBvciBtZXNzYWdlIHRleHQgZm9yIHRoZSB0YXJnZXQgYWdlbnQuXCIsXG59KTtcbmNvbnN0IE9yY2hlc3RyYXRvck1jcFRpdGxlID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCg1MTIpKS5hbm5vdGF0ZSh7XG4gIGRlc2NyaXB0aW9uOiBcIk9wdGlvbmFsIGNvbmNpc2UgZGlzcGxheSB0aXRsZS5cIixcbn0pO1xuY29uc3QgT3JjaGVzdHJhdG9yTWNwQ2xpZW50UmVxdWVzdElkID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhMZW5ndGgoMjU2KSxcbikuYW5ub3RhdGUoeyBkZXNjcmlwdGlvbjogXCJTdGFibGUgaWRlbXBvdGVuY3kga2V5IHRvIHJldXNlIHdoZW4gcmV0cnlpbmcgdGhpcyBtdXRhdGlvbi5cIiB9KTtcblxuLy8gT3BlbkNvZGUgMS4xNSBzZXJpYWxpemVzIG5lc3RlZCBNQ1AgdW5pb24gb2JqZWN0cyBhcyBKU09OIHN0cmluZ3M7IGRlY29kZSB0aGF0IGZvcm0gYXQgdGhlIGJvdW5kYXJ5LlxuY29uc3QgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGVGcm9tSnNvblN0cmluZyA9IFNjaGVtYS5mcm9tSnNvblN0cmluZyhcbiAgU2NoZWR1bGVkVGFza1Vwc2VydFNjaGVkdWxlLFxuKS5hbm5vdGF0ZSh7XG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiQ29tcGF0aWJpbGl0eS1vbmx5IEpTT04gZW5jb2Rpbmcgb2YgdGhlIHNjaGVkdWxlIG9iamVjdC4gUHJlZmVyIGEgc3RydWN0dXJlZCBvYmplY3QuXCIsXG59KTtcblxuY29uc3QgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGUgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlZHVsZWRUYXNrVXBzZXJ0U2NoZWR1bGUsXG4gIE9yY2hlc3RyYXRvck1jcFNjaGVkdWxlRnJvbUpzb25TdHJpbmcsXG5dKS5hbm5vdGF0ZSh7XG4gIGRlc2NyaXB0aW9uOlxuICAgIFwiVHJpZ2dlciBvYmplY3Q6IHt0eXBlOidpbnRlcnZhbCcsIGV2ZXJ5TXN9LCB7dHlwZTonZml4ZWRfdGltZScsIHRpbWVPZkRheSwgd2Vla2RheXM/fSwgb3Ige3R5cGU6J3dlYmhvb2snfSB0byBydW4gb24gZWFjaCByZXF1ZXN0IHRvIGEgZ2VuZXJhdGVkIFVSTC4gTmV2ZXIgc3RyaW5naWZ5IGl0IHVubGVzcyB0aGUgcHJvdmlkZXIgcmVxdWlyZXMgdGhlIGNvbXBhdGliaWxpdHkgZm9ybS5cIixcbn0pO1xuXG5jb25zdCBPcmNoZXN0cmF0b3JNY3BUYXJnZXRPcHRpb25zRnJvbVJlY29yZCA9IFNjaGVtYS5SZWNvcmQoXG4gIFNjaGVtYS5TdHJpbmcsXG4gIFByb3ZpZGVyT3B0aW9uU2VsZWN0aW9uVmFsdWUsXG4pLnBpcGUoXG4gIFNjaGVtYS5kZWNvZGVUbyhcbiAgICBTY2hlbWEuQXJyYXkoUHJvdmlkZXJPcHRpb25TZWxlY3Rpb24pLFxuICAgIFNjaGVtYVRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybUVmZmVjdCh7XG4gICAgICBkZWNvZGU6IChyZWNvcmQpID0+XG4gICAgICAgIEVmZmVjdC5zdWNjZWVkKE9iamVjdC5lbnRyaWVzKHJlY29yZCkubWFwKChbaWQsIHZhbHVlXSkgPT4gKHsgaWQsIHZhbHVlIH0pKSksXG4gICAgICBlbmNvZGU6IChzZWxlY3Rpb25zOiBSZWFkb25seUFycmF5PFByb3ZpZGVyT3B0aW9uU2VsZWN0aW9uPikgPT5cbiAgICAgICAgRWZmZWN0LnN1Y2NlZWQoXG4gICAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHNlbGVjdGlvbnMubWFwKChzZWxlY3Rpb24pID0+IFtzZWxlY3Rpb24uaWQsIHNlbGVjdGlvbi52YWx1ZV0pKSxcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgKSxcbik7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUYXJnZXRPcHRpb25zID0gU2NoZW1hLlVuaW9uKFtcbiAgU2NoZW1hLkFycmF5KFByb3ZpZGVyT3B0aW9uU2VsZWN0aW9uKSxcbiAgT3JjaGVzdHJhdG9yTWNwVGFyZ2V0T3B0aW9uc0Zyb21SZWNvcmQsXG5dKTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRhcmdldE9wdGlvbnMgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGFyZ2V0T3B0aW9ucy5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGFyZ2V0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHByb3ZpZGVySW5zdGFuY2VJZDogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFByb3ZpZGVySW5zdGFuY2VJZC5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJDb25maWd1cmVkIHByb3ZpZGVyIGluc3RhbmNlIGlkIGZyb20gb3JjaGVzdHJhdG9yX2NhcGFiaWxpdGllcy5cIixcbiAgICB9KSxcbiAgKSxcbiAgZHJpdmVyS2luZDogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFByb3ZpZGVyRHJpdmVyS2luZC5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJQcm92aWRlciBkcml2ZXIga2luZDsgcHJlZmVyIHByb3ZpZGVySW5zdGFuY2VJZCB3aGVuIGF2YWlsYWJsZS5cIixcbiAgICB9KSxcbiAgKSxcbiAgbW9kZWw6IFNjaGVtYS5vcHRpb25hbChcbiAgICBUcmltbWVkTm9uRW1wdHlTdHJpbmcuYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246IFwiTW9kZWwgaWQgYWR2ZXJ0aXNlZCBmb3IgdGhlIHNlbGVjdGVkIHByb3ZpZGVyIGluc3RhbmNlLlwiLFxuICAgIH0pLFxuICApLFxuICBvcHRpb25zOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgT3JjaGVzdHJhdG9yTWNwVGFyZ2V0T3B0aW9ucy5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJNb2RlbCBvcHRpb25zIGZyb20gb3JjaGVzdHJhdG9yX2NhcGFiaWxpdGllcy4gRm9yIHRoZSBzYW1lIHByb3ZpZGVyIGluc3RhbmNlIGFuZCBtb2RlbCwgb3ZlcnJpZGVzIGluZGl2aWR1YWwgaW5oZXJpdGVkIHZhbHVlczsgW10gb3Ige30gY2xlYXJzIHRoZW0uIENsYXVkZToge2VmZm9ydDogJ21heCcsIGZhc3RNb2RlOiB0cnVlfTsgQ29kZXg6IHtyZWFzb25pbmdFZmZvcnQ6ICdtYXgnLCBzZXJ2aWNlVGllcjogJ3ByaW9yaXR5J30uIE9ubHkgdXNlIG9wdGlvbnMgYWR2ZXJ0aXNlZCBieSB0aGUgc2VsZWN0ZWQgbW9kZWwuXCIsXG4gICAgfSksXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRhcmdldCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUYXJnZXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFJ1bnRpbWVNb2RlID0gU2NoZW1hLlVuaW9uKFtTY2hlbWEuTGl0ZXJhbChcImluaGVyaXRcIiksIFJ1bnRpbWVNb2RlXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BSdW50aW1lTW9kZSA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BSdW50aW1lTW9kZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwSW50ZXJhY3Rpb25Nb2RlID0gU2NoZW1hLlVuaW9uKFtcbiAgU2NoZW1hLkxpdGVyYWwoXCJpbmhlcml0XCIpLFxuICBQcm92aWRlckludGVyYWN0aW9uTW9kZSxcbl0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwSW50ZXJhY3Rpb25Nb2RlID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcEludGVyYWN0aW9uTW9kZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGFza1JvbGUgPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImltcGxlbWVudGF0aW9uXCIsXG4gIFwicmVzZWFyY2hcIixcbiAgXCJyZXZpZXdcIixcbiAgXCJkZXNpZ25cIixcbiAgXCJ0ZXN0XCIsXG4gIFwiZ2VuZXJhbFwiLFxuXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUYXNrUm9sZSA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUYXNrUm9sZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwRGVsZWdhdGVkVGFza1N0YXR1cyA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwicXVldWVkXCIsXG4gIFwicnVubmluZ1wiLFxuICBcIndhaXRpbmdcIixcbiAgXCJjb21wbGV0ZWRcIixcbiAgXCJmYWlsZWRcIixcbiAgXCJjYW5jZWxsZWRcIixcbiAgXCJpbnRlcnJ1cHRlZFwiLFxuXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BEZWxlZ2F0ZWRUYXNrU3RhdHVzID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcERlbGVnYXRlZFRhc2tTdGF0dXMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRlcm1pbmFsRGVsZWdhdGVkVGFza1N0YXR1cyA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiY29tcGxldGVkXCIsXG4gIFwiZmFpbGVkXCIsXG4gIFwiY2FuY2VsbGVkXCIsXG4gIFwiaW50ZXJydXB0ZWRcIixcbl0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwVGVybWluYWxEZWxlZ2F0ZWRUYXNrU3RhdHVzID1cbiAgdHlwZW9mIE9yY2hlc3RyYXRvck1jcFRlcm1pbmFsRGVsZWdhdGVkVGFza1N0YXR1cy5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwRGVsZWdhdGVUYXNrSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGFzazogT3JjaGVzdHJhdG9yTWNwUHJvbXB0LmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJTZWxmLWNvbnRhaW5lZCB0YXNrIGZvciBvbmUgZGVsZWdhdGVkIGNoaWxkIGFnZW50L3N1YmFnZW50LlwiLFxuICB9KSxcbiAgdGFyZ2V0OiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwVGFyZ2V0KSxcbiAgdGl0bGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BUaXRsZSksXG4gIHJvbGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BUYXNrUm9sZSksXG4gIGlzb2xhdGlvbjogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5MaXRlcmFscyhbXCJzaGFyZWRcIiwgXCJ3b3JrdHJlZVwiXSkuYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGVmYXVsdHMgdG8gc2hhcmVkOiB1c2UgdGhlIHBhcmVudCdzIGNoZWNrb3V0LiBXb3JrdHJlZSBjcmVhdGVzIGEgc2VwYXJhdGUgY2hlY2tvdXQgZnJvbSB0aGUgcGFyZW50J3MgY3VycmVudCBsb2NhbCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjaGlsZC4gVW5jb21taXR0ZWQgZWRpdHMgYXJlIG5vdCBjb3BpZWQuXCIsXG4gICAgfSksXG4gICksXG4gIG1vZGU6IFNjaGVtYS5vcHRpb25hbChcbiAgICBTY2hlbWEuTGl0ZXJhbHMoW1wiYXN5bmNcIiwgXCJ3YWl0XCJdKS5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEZWZhdWx0cyB0byBhc3luYy4gVXNlIHdhaXQgb25seSB3aGVuIHRoaXMgdHVybiBuZWVkcyB0aGUgY2hpbGQncyByZXN1bHQgYmVmb3JlIHlvdSBjYW4gY29udGludWUuIEEgYmxvY2tpbmcgcXVlc3Rpb24gb3IgYSBwZW5kaW5nIGFwcHJvdmFsIGluIHRoZSBjaGlsZCBlbmRzIHRoZSB3YWl0IGVhcmx5IHdpdGggdGhlIHRhc2sgc3RpbGwgcnVubmluZy5cIixcbiAgICB9KSxcbiAgKSxcbiAgdGltZW91dE1zOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkZpbml0ZSkuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJXYWl0IGJ1ZGdldCBmb3IgbW9kZT13YWl0IG9ubHkuIERlZmF1bHQgMTAgbWludXRlcy4gRWxhcHNpbmcgaXQgcmV0dXJucyB3YWl0VGltZWRPdXQ9dHJ1ZSBvbiB0aGF0IGNhbGwgYW5kIGRvZXMgbm90IGNhbmNlbCB0aGUgY2hpbGQuXCIsXG4gIH0pLFxuICBjbGllbnRSZXF1ZXN0SWQ6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BDbGllbnRSZXF1ZXN0SWQpLFxuICBydW50aW1lTW9kZTogU2NoZW1hLm9wdGlvbmFsKFxuICAgIE9yY2hlc3RyYXRvck1jcFJ1bnRpbWVNb2RlLmFubm90YXRlKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRlZmF1bHRzIHRvIGluaGVyaXQ7IG9taXQgaXQgdW5sZXNzIHRoZSB1c2VyIGFza3MgZm9yIGEgc3VwZXJ2aXNlZCBjaGlsZC4gQSBuYXJyb3dlciBtb2RlIGlzIG5vdCBhIHJlYWQtb25seSBzd2l0Y2g6IG9uIG1vc3QgcHJvdmlkZXJzLCBhcHByb3ZhbC1yZXF1aXJlZCBhbmQgYXV0by1hY2NlcHQtZWRpdHMgcGF1c2UgdGhlIGNoaWxkIGF0IGVhY2ggYWN0aW9uIHRoYXQgbmVlZHMgYXBwcm92YWwgdW50aWwgYSBwZXJzb24gYXBwcm92ZXMgaXQgaW4gdGhlIGNoaWxkJ3MgdGhyZWFkLCB3aGljaCB0aGlzIHRocmVhZCBjYW5ub3QgZG8uIFRvIGxpbWl0IHdoYXQgdGhlIGNoaWxkIGRvZXMsIHNheSBzbyBpbiB0aGUgdGFzay4gQSBtb2RlIHJhbmtlZCBhYm92ZSB0aGlzIHRocmVhZCdzIGlzIHJlamVjdGVkOyB0aGF0IHJhbmtpbmcgZG9lcyBub3QgcHJvbWlzZSB0aGUgY2hpbGQncyBwcm92aWRlciBwZXJtaXNzaW9ucyBhcmUgbmFycm93ZXIgdGhhbiB0aGlzIHRocmVhZCdzLlwiLFxuICAgIH0pLFxuICApLFxuICBpbnRlcmFjdGlvbk1vZGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BJbnRlcmFjdGlvbk1vZGUpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BEZWxlZ2F0ZVRhc2tJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BEZWxlZ2F0ZVRhc2tJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwRGVsZWdhdGVUYXNrUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRhc2tJZDogTm9kZUlkLFxuICBjaGlsZFRocmVhZElkOiBUaHJlYWRJZCxcbiAgY2hpbGRSdW5JZDogU2NoZW1hLk51bGxPcihSdW5JZCksXG4gIGNoaWxkTm9kZUlkOiBOb2RlSWQsXG4gIHN0YXR1czogT3JjaGVzdHJhdG9yTWNwRGVsZWdhdGVkVGFza1N0YXR1cyxcbiAgd29ya1N0YXRlOiBTY2hlbWEuTGl0ZXJhbHMoW1wid29ya2luZ1wiLCBcIndhaXRpbmdfZm9yX2NoaWxkcmVuXCIsIFwicmVzdWx0X2F2YWlsYWJsZVwiXSksXG4gIGhhc1BlbmRpbmdDaGlsZFJ1bnM6IFNjaGVtYS5Cb29sZWFuLFxuICBsYXRlc3RUZXJtaW5hbFJ1bklkOiBTY2hlbWEuTnVsbE9yKFJ1bklkKSxcbiAgbGF0ZXN0VGVybWluYWxTdGF0dXM6IFNjaGVtYS5OdWxsT3IoT3JjaGVzdHJhdG9yTWNwVGVybWluYWxEZWxlZ2F0ZWRUYXNrU3RhdHVzKSxcbiAgbGF0ZXN0VGVybWluYWxTdW1tYXJ5OiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICBsYXRlc3RUZXJtaW5hbFJlc3VsdENvbnRleHRUcmFuc2ZlcklkOiBTY2hlbWEuTnVsbE9yKENvbnRleHRUcmFuc2ZlcklkKSxcbiAgcHJvdmlkZXJJbnN0YW5jZUlkOiBQcm92aWRlckluc3RhbmNlSWQsXG4gIG1vZGVsOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICBvcHRpb25zOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgU2NoZW1hLkFycmF5KFByb3ZpZGVyT3B0aW9uU2VsZWN0aW9uKS5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJTdG9yZWQgbW9kZWwgb3B0aW9uIHNlbGVjdGlvbnMgZm9yIHRoZSBjaGlsZCBydW4sIG9yIGl0cyB0aHJlYWQgYmVmb3JlIGEgcnVuIHN0YXJ0cy4gT21pdHRlZCBzZWxlY3Rpb25zIHVzZSBwcm92aWRlciBkZWZhdWx0cy5cIixcbiAgICB9KSxcbiAgKSxcbiAgc3VtbWFyeTogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgcmVzdWx0Q29udGV4dFRyYW5zZmVySWQ6IFNjaGVtYS5OdWxsT3IoQ29udGV4dFRyYW5zZmVySWQpLFxuICBoYXNQZW5kaW5nUXVlc3Rpb246IFNjaGVtYS5Cb29sZWFuLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQmxvY2tpbmcgcXVlc3Rpb24gZW5kcyBtb2RlPXdhaXQuIFBhc3MgdGhyZWFkSWQ9Y2hpbGRUaHJlYWRJZCB0byB0M19wZW5kaW5nX3JlcXVlc3RfbGlzdCwgdDNfcGVuZGluZ19yZXF1ZXN0X3JlYWQgKHdpdGggcmVxdWVzdElkKSBhbmQgdDNfcGVuZGluZ19yZXF1ZXN0X3Jlc3BvbmQsIG9yIGFzayB0aGUgdXNlcjsgdGhlIHRhc2sncyBjb21wbGV0aW9uIHN0aWxsIHdha2VzIHRoaXMgdGhyZWFkLlwiLFxuICB9KSxcbiAgcGVuZGluZ0FwcHJvdmFsOiBTY2hlbWEuTnVsbE9yKFxuICAgIFNjaGVtYS5TdHJ1Y3QoeyByZXF1ZXN0SWQ6IFJ1bnRpbWVSZXF1ZXN0SWQsIGtpbmQ6IFByb3ZpZGVyUmVxdWVzdEtpbmQsIHJ1bklkOiBSdW5JZCB9KSxcbiAgKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIklkZW50aXR5IG9mIHRoZSBvbGRlc3QgcGVuZGluZyBsaXZlIGFwcHJvdmFsIGZvciB0aGlzIHRhc2sncyBvd24gdW5maW5pc2hlZCB3b3JrLCBvciBudWxsLiBFbmRzIG1vZGU9d2FpdCB3aXRob3V0IGNhbmNlbGxpbmcgdGhlIGNoaWxkOyBjb21wbGV0aW9uIHN0aWxsIHdha2VzIHRoaXMgdGhyZWFkLiBUaGlzIGdyYW50cyBubyBhcHByb3ZhbCBhdXRob3JpdHkuIFJlYWQgdGhlIGZyZXNoIGZ1bGwgcmVxdWVzdCBpbiBjaGlsZFRocmVhZElkIGJlZm9yZSByZXNwb25kaW5nOiB0aGUgcmVjb3JkIGNhbiBvdXRsaXZlIGl0cyBwcm92aWRlciBjYWxsYmFjay4gRGVjaXNpb25zIHJlbWFpbiB3aXRoIHRoZSBjaGlsZCdzIGV4aXN0aW5nIGFwcHJvdmFsIGhvbGRlcjsgcGVuZGluZyByZXF1ZXN0IHRvb2xzIGFuc3dlciBxdWVzdGlvbnMgb25seS5cIixcbiAgfSksXG4gIHdhaXRUaW1lZE91dDogU2NoZW1hLkJvb2xlYW4uYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJUcnVlIG9ubHkgb24gdGhhdCBtb2RlPXdhaXQgY2FsbCB3aGVuIHRpbWVvdXRNcyBlbGFwc2VkLiBUaGUgdGltZW91dCBkb2VzIG5vdCBjYW5jZWwgdGhlIGNoaWxkLiBMYXRlciB0YXNrX3N0YXR1cyByZWFkcyByZXR1cm4gZmFsc2UgYW5kIHVzZSBzdGF0dXMgZm9yIGxpdmVuZXNzLlwiLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwRGVsZWdhdGVUYXNrUmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcERlbGVnYXRlVGFza1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGFza1N0YXR1c0lucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRhc2tJZDogTm9kZUlkLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUYXNrU3RhdHVzSW5wdXQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGFza1N0YXR1c0lucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUYXNrQ2FuY2VsSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGFza0lkOiBOb2RlSWQsXG4gIHJlYXNvbjogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDJfMDAwKSkpLFxuICBjbGllbnRSZXF1ZXN0SWQ6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BDbGllbnRSZXF1ZXN0SWQpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUYXNrQ2FuY2VsSW5wdXQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGFza0NhbmNlbElucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUYXNrQ2FuY2VsUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRhc2tJZDogTm9kZUlkLFxuICBzdGF0dXM6IFNjaGVtYS5MaXRlcmFscyhbXCJjYW5jZWxfcmVxdWVzdGVkXCIsIFwiY29tcGxldGVkXCIsIFwiZmFpbGVkXCIsIFwiY2FuY2VsbGVkXCIsIFwiaW50ZXJydXB0ZWRcIl0pLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUYXNrQ2FuY2VsUmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFRhc2tDYW5jZWxSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZFJlcXVlc3QgPSBTY2hlbWEuU3RydWN0KHtcbiAgcHJvbXB0OiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwUHJvbXB0KSxcbiAgdGl0bGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BUaXRsZSksXG4gIHRhcmdldDogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRvck1jcFRhcmdldCksXG4gIHJ1bnRpbWVNb2RlOiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwUnVudGltZU1vZGUpLFxuICBpbnRlcmFjdGlvbk1vZGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BJbnRlcmFjdGlvbk1vZGUpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BDcmVhdGVUaHJlYWRSZXF1ZXN0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZFJlcXVlc3QuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZHNJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aHJlYWRzOiBTY2hlbWEuQXJyYXkoT3JjaGVzdHJhdG9yTWNwQ3JlYXRlVGhyZWFkUmVxdWVzdCkuY2hlY2soXG4gICAgU2NoZW1hLmlzTWluTGVuZ3RoKDEpLFxuICAgIFNjaGVtYS5pc01heExlbmd0aCgyMCksXG4gICksXG4gIGNsaWVudFJlcXVlc3RJZDogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRvck1jcENsaWVudFJlcXVlc3RJZCksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZHNJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BDcmVhdGVUaHJlYWRzSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcENyZWF0ZWRUaHJlYWRTdGF0dXMgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlbWEuTGl0ZXJhbChcImlkbGVcIiksXG4gIFNjaGVtYS5MaXRlcmFsKFwicHJlcGFyaW5nXCIpLFxuICBTY2hlbWEuTGl0ZXJhbChcInN0YXJ0aW5nXCIpLFxuICBPcmNoZXN0cmF0b3JNY3BEZWxlZ2F0ZWRUYXNrU3RhdHVzLFxuICBTY2hlbWEuTGl0ZXJhbChcInJvbGxlZF9iYWNrXCIpLFxuXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BDcmVhdGVkVGhyZWFkU3RhdHVzID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcENyZWF0ZWRUaHJlYWRTdGF0dXMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcENyZWF0ZWRUaHJlYWQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkSWQ6IFRocmVhZElkLFxuICBydW5JZDogU2NoZW1hLk51bGxPcihSdW5JZCksXG4gIHN0YXR1czogT3JjaGVzdHJhdG9yTWNwQ3JlYXRlZFRocmVhZFN0YXR1cyxcbiAgdGl0bGU6IFNjaGVtYS5TdHJpbmcsXG4gIGNyZWF0ZWRCeTogT3JjaGVzdHJhdGlvblYyQWN0b3IsXG4gIGNyZWF0aW9uU291cmNlOiBPcmNoZXN0cmF0aW9uVjJDcmVhdGlvblNvdXJjZSxcbiAgcHJvdmlkZXJJbnN0YW5jZUlkOiBQcm92aWRlckluc3RhbmNlSWQsXG4gIG1vZGVsOiBTY2hlbWEuU3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BDcmVhdGVkVGhyZWFkID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcENyZWF0ZWRUaHJlYWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZHNSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkczogU2NoZW1hLkFycmF5KE9yY2hlc3RyYXRvck1jcENyZWF0ZWRUaHJlYWQpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BDcmVhdGVUaHJlYWRzUmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcENyZWF0ZVRocmVhZHNSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZFN0YXR1cyA9IFNjaGVtYS5VbmlvbihbXG4gIFNjaGVtYS5MaXRlcmFsKFwiaWRsZVwiKSxcbiAgT3JjaGVzdHJhdGlvblYyUnVuU3RhdHVzLFxuXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRTdGF0dXMgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGhyZWFkU3RhdHVzLlR5cGU7XG5cbmNvbnN0IE9yY2hlc3RyYXRvck1jcFByb2plY3RUYXJnZXQgPSBTY2hlbWEub3B0aW9uYWwoXG4gIFByb2plY3RJZC5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlByb2plY3QgdG8gYWN0IG9uLiBPbWl0IGZvciB0aGUgY2FsbGluZyB0aHJlYWQncyBwcm9qZWN0OyByZXF1aXJlZCB3aGVuIHRoZSBjYWxsZXIgaXMgbm90IGEgVDMgdGhyZWFkLlwiLFxuICB9KSxcbik7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0SW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcHJvamVjdElkOiBPcmNoZXN0cmF0b3JNY3BQcm9qZWN0VGFyZ2V0LFxuICBzdGF0dXNlczogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BUaHJlYWRTdGF0dXMpLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgxMCkpLFxuICApLFxuICB0aXRsZUNvbnRhaW5zOiBTY2hlbWEub3B0aW9uYWwoVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyNTYpKSksXG4gIHNldHRsZWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIHNub296ZWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIGluY2x1ZGVTdWJhZ2VudHM6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIGN1cnNvcjogU2NoZW1hLm9wdGlvbmFsKE5vbk5lZ2F0aXZlSW50KSxcbiAgbGltaXQ6IFNjaGVtYS5vcHRpb25hbChQb3NpdGl2ZUludC5jaGVjayhTY2hlbWEuaXNMZXNzVGhhbk9yRXF1YWxUbygxMDApKSksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZExpc3RJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0SW5wdXQuVHlwZTtcblxuLyoqIHN0YXRlIGlzIG51bGwgdW50aWwgdGhlIGhvc3QgaXMgcmVhZC4gKi9cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRQdWxsUmVxdWVzdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5UaHJlYWRQdWxsUmVxdWVzdEtleS5maWVsZHMsXG4gIHVybDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBzb3VyY2U6IFRocmVhZFB1bGxSZXF1ZXN0TGlua1NvdXJjZSxcbiAgc3RhdGU6IFNjaGVtYS5OdWxsT3IoUHVsbFJlcXVlc3RTdGF0ZSksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZFB1bGxSZXF1ZXN0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFRocmVhZFB1bGxSZXF1ZXN0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0SXRlbSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aHJlYWRJZDogVGhyZWFkSWQsXG4gIHRpdGxlOiBTY2hlbWEuU3RyaW5nLFxuICBjcmVhdGVkQnk6IE9yY2hlc3RyYXRpb25WMkFjdG9yLFxuICBjcmVhdGlvblNvdXJjZTogT3JjaGVzdHJhdGlvblYyQ3JlYXRpb25Tb3VyY2UsXG4gIHN0YXR1czogT3JjaGVzdHJhdG9yTWNwVGhyZWFkU3RhdHVzLFxuICBsYXRlc3RSdW5JZDogU2NoZW1hLk51bGxPcihSdW5JZCksXG4gIHByb3ZpZGVySW5zdGFuY2VJZDogUHJvdmlkZXJJbnN0YW5jZUlkLFxuICBtb2RlbDogU2NoZW1hLlN0cmluZyxcbiAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLFxuICBpbnRlcmFjdGlvbk1vZGU6IFByb3ZpZGVySW50ZXJhY3Rpb25Nb2RlLFxuICBsaW5rZWRQdWxsUmVxdWVzdDogU2NoZW1hLk51bGxPcihUaHJlYWRMaW5rZWRQdWxsUmVxdWVzdCksXG4gIHB1bGxSZXF1ZXN0czogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BUaHJlYWRQdWxsUmVxdWVzdCkpLFxuICBzZXR0bGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgc2V0dGxlZEF0OiBTY2hlbWEuTnVsbE9yKElzb0RhdGVUaW1lKSxcbiAgc25vb3plZDogU2NoZW1hLkJvb2xlYW4sXG4gIHNub296ZWRVbnRpbDogU2NoZW1hLk51bGxPcihJc29EYXRlVGltZSksXG4gIHBhcmVudFRocmVhZElkOiBTY2hlbWEuTnVsbE9yKFRocmVhZElkKSxcbiAgcmVsYXRpb25zaGlwVG9QYXJlbnQ6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLkxpdGVyYWxzKFtcImZvcmtcIiwgXCJzdWJhZ2VudFwiXSkpLFxuICBpdGVtQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICBjcmVhdGVkQXQ6IElzb0RhdGVUaW1lLFxuICB1cGRhdGVkQXQ6IElzb0RhdGVUaW1lLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0SXRlbSA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0SXRlbS5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGhyZWFkTGlzdFJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwcm9qZWN0SWQ6IFByb2plY3RJZCxcbiAgY3VycmVudFRocmVhZElkOiBTY2hlbWEuTnVsbE9yKFRocmVhZElkKSxcbiAgdGhyZWFkczogU2NoZW1hLkFycmF5KE9yY2hlc3RyYXRvck1jcFRocmVhZExpc3RJdGVtKSxcbiAgbmV4dEN1cnNvcjogU2NoZW1hLk51bGxPcihOb25OZWdhdGl2ZUludCksXG4gIHRvdGFsOiBOb25OZWdhdGl2ZUludCxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwVGhyZWFkTGlzdFJlc3VsdCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRMaXN0UmVzdWx0LlR5cGU7XG5cbi8vIENvZGV4IGhpZGVzIGBtaW5pbXVtYCBhbmQgYG1heGltdW1gIGZyb20gdGhlIG1vZGVsLCBzbyBhIHZhbHVlIGFib3ZlIHRoZSBtYXhpbXVtIGNsYW1wcyBvblxuLy8gZGVjb2RlIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgY2FsbDsgcGFnaW5hdGlvbiByZXR1cm5zIHRoZSByZXN0LiBWYWx1ZXMgYmVsb3cgMSBzdGlsbCBmYWlsOlxuLy8gMCBhc2tzIGZvciBub3RoaW5nLCBhbmQgYW5zd2VyaW5nIGl0IHdpdGggb25lIGl0ZW0gd291bGQgYmUgYSBkaWZmZXJlbnQgcmVxdWVzdC5cbmNvbnN0IGNsYW1wZWRQb3NpdGl2ZUludCA9IChtYXhpbXVtOiBudW1iZXIpID0+XG4gIFBvc2l0aXZlSW50LnBpcGUoXG4gICAgU2NoZW1hLmRlY29kZVRvKFxuICAgICAgUG9zaXRpdmVJbnQuY2hlY2soU2NoZW1hLmlzTGVzc1RoYW5PckVxdWFsVG8obWF4aW11bSkpLFxuICAgICAgU2NoZW1hVHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHtcbiAgICAgICAgZGVjb2RlOiAodmFsdWUpID0+IE1hdGgubWluKHZhbHVlLCBtYXhpbXVtKSxcbiAgICAgICAgZW5jb2RlOiAodmFsdWUpID0+IHZhbHVlLFxuICAgICAgfSksXG4gICAgKSxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZFJlYWRJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aHJlYWRJZDogVGhyZWFkSWQsXG4gIGl0ZW1JZDogU2NoZW1hLm9wdGlvbmFsKFR1cm5JdGVtSWQpLFxuICB0ZXh0T2Zmc2V0OiBTY2hlbWEub3B0aW9uYWwoTm9uTmVnYXRpdmVJbnQpLFxuICB2aWV3OiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkxpdGVyYWxzKFtcIm1lc3NhZ2VzXCIsIFwiYWN0aXZpdHlcIl0pKSxcbiAgYWZ0ZXJQb3NpdGlvbjogU2NoZW1hLm9wdGlvbmFsKE5vbk5lZ2F0aXZlSW50KSxcbiAgbGltaXQ6IFNjaGVtYS5vcHRpb25hbChjbGFtcGVkUG9zaXRpdmVJbnQoMTAwKSkuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOiBcIk1heGltdW0gdGltZWxpbmUgaXRlbXMgdG8gcmV0dXJuLCBmcm9tIDEgdG8gMTAwLlwiLFxuICB9KSxcbiAgcnVuTGltaXQ6IFNjaGVtYS5vcHRpb25hbChjbGFtcGVkUG9zaXRpdmVJbnQoNTApKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246IFwiTWF4aW11bSByZWNlbnQgcnVucyB0byByZXR1cm4sIGZyb20gMSB0byA1MC5cIixcbiAgfSksXG4gIG1heENoYXJzUGVySXRlbTogU2NoZW1hLm9wdGlvbmFsKGNsYW1wZWRQb3NpdGl2ZUludCg1MF8wMDApKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246IFwiTWF4aW11bSB0ZXh0IGNoYXJhY3RlcnMgcGVyIGl0ZW0sIGZyb20gMSB0byA1MDAwMC5cIixcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZFJlYWRJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRSZWFkSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZERldGFpbCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aHJlYWRJZDogVGhyZWFkSWQsXG4gIHByb2plY3RJZDogUHJvamVjdElkLFxuICB0aXRsZTogU2NoZW1hLlN0cmluZyxcbiAgY3JlYXRlZEJ5OiBPcmNoZXN0cmF0aW9uVjJBY3RvcixcbiAgY3JlYXRpb25Tb3VyY2U6IE9yY2hlc3RyYXRpb25WMkNyZWF0aW9uU291cmNlLFxuICBzdGF0dXM6IE9yY2hlc3RyYXRvck1jcFRocmVhZFN0YXR1cyxcbiAgbGF0ZXN0UnVuSWQ6IFNjaGVtYS5OdWxsT3IoUnVuSWQpLFxuICBhY3RpdmVSdW5JZDogU2NoZW1hLk51bGxPcihSdW5JZCksXG4gIHByb3ZpZGVySW5zdGFuY2VJZDogUHJvdmlkZXJJbnN0YW5jZUlkLFxuICBtb2RlbDogU2NoZW1hLlN0cmluZyxcbiAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLFxuICBpbnRlcmFjdGlvbk1vZGU6IFByb3ZpZGVySW50ZXJhY3Rpb25Nb2RlLFxuICBsaW5rZWRQdWxsUmVxdWVzdDogU2NoZW1hLk51bGxPcihUaHJlYWRMaW5rZWRQdWxsUmVxdWVzdCksXG4gIHB1bGxSZXF1ZXN0czogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BUaHJlYWRQdWxsUmVxdWVzdCkpLFxuICB0aXRsZVJlZ2VuZXJhdGlvbjogU2NoZW1hLk51bGxPcihUaHJlYWRUaXRsZVJlZ2VuZXJhdGlvbiksXG4gIGJyYW5jaDogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgd29ya3RyZWVQYXRoOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICBwYXJlbnRUaHJlYWRJZDogU2NoZW1hLk51bGxPcihUaHJlYWRJZCksXG4gIHJlbGF0aW9uc2hpcFRvUGFyZW50OiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5MaXRlcmFscyhbXCJmb3JrXCIsIFwic3ViYWdlbnRcIl0pKSxcbiAgcnVuQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICBpdGVtQ291bnQ6IE5vbk5lZ2F0aXZlSW50LFxuICBwZW5kaW5nUmVxdWVzdENvdW50OiBOb25OZWdhdGl2ZUludCxcbiAgYXJjaGl2ZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBzZXR0bGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgc2V0dGxlZEF0OiBTY2hlbWEuTnVsbE9yKElzb0RhdGVUaW1lKSxcbiAgc25vb3plZDogU2NoZW1hLkJvb2xlYW4sXG4gIHNub296ZWRVbnRpbDogU2NoZW1hLk51bGxPcihJc29EYXRlVGltZSksXG4gIGNyZWF0ZWRBdDogSXNvRGF0ZVRpbWUsXG4gIHVwZGF0ZWRBdDogSXNvRGF0ZVRpbWUsXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZERldGFpbCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWREZXRhaWwuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZFJ1biA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBydW5JZDogUnVuSWQsXG4gIG9yZGluYWw6IFBvc2l0aXZlSW50LFxuICBzdGF0dXM6IE9yY2hlc3RyYXRpb25WMlJ1blN0YXR1cyxcbiAgcHJvdmlkZXJJbnN0YW5jZUlkOiBQcm92aWRlckluc3RhbmNlSWQsXG4gIG1vZGVsOiBTY2hlbWEuU3RyaW5nLFxuICByZXF1ZXN0ZWRBdDogSXNvRGF0ZVRpbWUsXG4gIHN0YXJ0ZWRBdDogU2NoZW1hLk51bGxPcihJc29EYXRlVGltZSksXG4gIGNvbXBsZXRlZEF0OiBTY2hlbWEuTnVsbE9yKElzb0RhdGVUaW1lKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwVGhyZWFkUnVuID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFRocmVhZFJ1bi5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGhyZWFkVGltZWxpbmVJdGVtID0gU2NoZW1hLlN0cnVjdCh7XG4gIHBvc2l0aW9uOiBOb25OZWdhdGl2ZUludCxcbiAgdmlzaWJpbGl0eTogU2NoZW1hLkxpdGVyYWxzKFtcImxvY2FsXCIsIFwiaW5oZXJpdGVkXCIsIFwic3ludGhldGljXCJdKSxcbiAgc291cmNlVGhyZWFkSWQ6IFRocmVhZElkLFxuICBpdGVtSWQ6IFR1cm5JdGVtSWQsXG4gIHN1YmFnZW50SWQ6IFNjaGVtYS5vcHRpb25hbChOb2RlSWQpLFxuICBydW5JZDogU2NoZW1hLk51bGxPcihSdW5JZCksXG4gIG1lc3NhZ2VJZDogU2NoZW1hLk51bGxPcihNZXNzYWdlSWQpLFxuICBjcmVhdGVkQnk6IFNjaGVtYS5OdWxsT3IoT3JjaGVzdHJhdGlvblYyQWN0b3IpLFxuICBjcmVhdGlvblNvdXJjZTogU2NoZW1hLk51bGxPcihPcmNoZXN0cmF0aW9uVjJDcmVhdGlvblNvdXJjZSksXG4gIHNlbmRlclRocmVhZElkOiBTY2hlbWEub3B0aW9uYWwoVGhyZWFkSWQpLFxuICB0eXBlOiBTY2hlbWEuU3RyaW5nLFxuICBzdGF0dXM6IE9yY2hlc3RyYXRpb25WMlR1cm5JdGVtU3RhdHVzLFxuICB0aXRsZTogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgdGV4dDogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgdGV4dFRydW5jYXRlZDogU2NoZW1hLkJvb2xlYW4sXG4gIG5leHRUZXh0T2Zmc2V0OiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLk51bGxPcihOb25OZWdhdGl2ZUludCkpLFxuICB1cGRhdGVkQXQ6IElzb0RhdGVUaW1lLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRUaW1lbGluZUl0ZW0gPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGhyZWFkVGltZWxpbmVJdGVtLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRSZWFkUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZDogT3JjaGVzdHJhdG9yTWNwVGhyZWFkRGV0YWlsLFxuICByZWNlbnRSdW5zOiBTY2hlbWEuQXJyYXkoT3JjaGVzdHJhdG9yTWNwVGhyZWFkUnVuKSxcbiAgaXRlbXM6IFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BUaHJlYWRUaW1lbGluZUl0ZW0pLFxuICBuZXh0UG9zaXRpb246IFNjaGVtYS5OdWxsT3IoTm9uTmVnYXRpdmVJbnQpLFxuICBoYXNNb3JlOiBTY2hlbWEuQm9vbGVhbixcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwVGhyZWFkUmVhZFJlc3VsdCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRSZWFkUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRTZW5kSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkSWQ6IFRocmVhZElkLFxuICBtZXNzYWdlOiBPcmNoZXN0cmF0b3JNY3BQcm9tcHQsXG4gIG1vZGU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuTGl0ZXJhbHMoW1wiYXV0b1wiLCBcInF1ZXVlXCIsIFwic3RlZXJcIiwgXCJyZXN0YXJ0XCJdKSksXG4gIGNsaWVudFJlcXVlc3RJZDogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRvck1jcENsaWVudFJlcXVlc3RJZCksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZFNlbmRJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRTZW5kSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZFNlbmRSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkSWQ6IFRocmVhZElkLFxuICBtZXNzYWdlSWQ6IE1lc3NhZ2VJZCxcbiAgcnVuSWQ6IFJ1bklkLFxuICB0YXNrSWQ6IFNjaGVtYS5vcHRpb25hbChOb2RlSWQpLFxuICBzdGF0dXM6IE9yY2hlc3RyYXRpb25WMlJ1blN0YXR1cyxcbiAgZGVsaXZlcnk6IFNjaGVtYS5MaXRlcmFscyhbXCJzdGFydGVkXCIsIFwicXVldWVkXCIsIFwic3RlZXJlZFwiLCBcInJlc3RhcnRlZFwiXSksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcFRocmVhZFNlbmRSZXN1bHQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGhyZWFkU2VuZFJlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGhyZWFkV2FpdElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbiAgcnVuSWQ6IFNjaGVtYS5vcHRpb25hbChSdW5JZCksXG4gIHRpbWVvdXRNczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5GaW5pdGUpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRXYWl0SW5wdXQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGhyZWFkV2FpdElucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BUaHJlYWRXYWl0UmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbiAgcnVuSWQ6IFNjaGVtYS5OdWxsT3IoUnVuSWQpLFxuICBzdGF0dXM6IE9yY2hlc3RyYXRvck1jcFRocmVhZFN0YXR1cyxcbiAgdGltZWRPdXQ6IFNjaGVtYS5Cb29sZWFuLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRXYWl0UmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFRocmVhZFdhaXRSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFRocmVhZEludGVycnVwdElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbiAgcnVuSWQ6IFNjaGVtYS5vcHRpb25hbChSdW5JZCksXG4gIHJlYXNvbjogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDJfMDAwKSkpLFxuICBjbGllbnRSZXF1ZXN0SWQ6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BDbGllbnRSZXF1ZXN0SWQpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRJbnRlcnJ1cHRJbnB1dCA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BUaHJlYWRJbnRlcnJ1cHRJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwVGhyZWFkSW50ZXJydXB0UmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbiAgcnVuSWQ6IFNjaGVtYS5OdWxsT3IoUnVuSWQpLFxuICBzdGF0dXM6IFNjaGVtYS5VbmlvbihbXG4gICAgU2NoZW1hLkxpdGVyYWwoXCJpbnRlcnJ1cHRfcmVxdWVzdGVkXCIpLFxuICAgIFNjaGVtYS5MaXRlcmFsKFwibm9fYWN0aXZlX3J1blwiKSxcbiAgICBTY2hlbWEuTGl0ZXJhbHMoW1wiY29tcGxldGVkXCIsIFwiZmFpbGVkXCIsIFwiY2FuY2VsbGVkXCIsIFwiaW50ZXJydXB0ZWRcIiwgXCJyb2xsZWRfYmFja1wiXSksXG4gIF0pLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BUaHJlYWRJbnRlcnJ1cHRSZXN1bHQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwVGhyZWFkSW50ZXJydXB0UmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BDYXBhYmlsaXRpZXNJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzZWFyY2g6IFNjaGVtYS5vcHRpb25hbChcbiAgICBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDIwMCkpLmFubm90YXRlKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIldvcmRzIHRvIG1hdGNoIGFnYWluc3QgbW9kZWwgaWRzIGFuZCBsYWJlbHMuIExpc3RzIG1hdGNoaW5nIG1vZGVscyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHNob3J0IGxpc3QuXCIsXG4gICAgfSksXG4gICksXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcENhcGFiaWxpdGllc0lucHV0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcENhcGFiaWxpdGllc0lucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BNb2RlbE9wdGlvbiA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpZDogU2NoZW1hLlN0cmluZyxcbiAgdmFsdWVzOiBTY2hlbWEuQXJyYXkoUHJvdmlkZXJPcHRpb25TZWxlY3Rpb25WYWx1ZSksXG4gIGRlZmF1bHQ6IFNjaGVtYS5vcHRpb25hbChQcm92aWRlck9wdGlvblNlbGVjdGlvblZhbHVlKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwTW9kZWxPcHRpb24gPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwTW9kZWxPcHRpb24uVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFByb3ZpZGVyQ2FwYWJpbGl0eSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwcm92aWRlckluc3RhbmNlSWQ6IFByb3ZpZGVySW5zdGFuY2VJZCxcbiAgZHJpdmVyS2luZDogUHJvdmlkZXJEcml2ZXJLaW5kLFxuICBkaXNwbGF5TmFtZTogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgbW9kZWxzOiBTY2hlbWEuQXJyYXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBpZDogU2NoZW1hLlN0cmluZyxcbiAgICAgIC8qKiBPbWl0dGVkIHdoZW4gaXQgb25seSByZXN0YXRlcyB0aGUgaWQuICovXG4gICAgICBsYWJlbDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5TdHJpbmcpLFxuICAgICAgb3B0aW9uczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BNb2RlbE9wdGlvbikpLFxuICAgIH0pLFxuICApLFxuICAvKiogTW9kZWxzIGxlZnQgb3V0IG9mIGBtb2RlbHNgOiB1bmxpc3RlZCB2aXNpYmxlIG1vZGVscywgb3IgbWF0Y2hlcyBwYXN0IHRoZSBjYXAgd2l0aCBgc2VhcmNoYC4gKi9cbiAgb21pdHRlZE1vZGVsczogU2NoZW1hLm9wdGlvbmFsKE5vbk5lZ2F0aXZlSW50KSxcbiAgcnVudGltZU1vZGVzOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkFycmF5KFJ1bnRpbWVNb2RlKSksXG4gIGNhblJ1bkNoaWxkVGFzazogU2NoZW1hLkJvb2xlYW4sXG4gIGNhblJ1bkNyb3NzUHJvdmlkZXJDaGlsZFRhc2s6IFNjaGVtYS5Cb29sZWFuLFxuICBjb25zdHJhaW50czogU2NoZW1hLkFycmF5KFNjaGVtYS5TdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BQcm92aWRlckNhcGFiaWxpdHkgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwUHJvdmlkZXJDYXBhYmlsaXR5LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BDYXBhYmlsaXRpZXNSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcGFyZW50VGhyZWFkSWQ6IFNjaGVtYS5OdWxsT3IoVGhyZWFkSWQpLFxuICBpbmhlcml0ZWRQcm92aWRlckluc3RhbmNlSWQ6IFNjaGVtYS5OdWxsT3IoUHJvdmlkZXJJbnN0YW5jZUlkKSxcbiAgaW5oZXJpdGVkTW9kZWw6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gIGluaGVyaXRlZE9wdGlvbnM6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQXJyYXkoUHJvdmlkZXJPcHRpb25TZWxlY3Rpb24pKSxcbiAgcnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLFxuICBpbnRlcmFjdGlvbk1vZGU6IFByb3ZpZGVySW50ZXJhY3Rpb25Nb2RlLFxuICBwcm92aWRlcnM6IFNjaGVtYS5BcnJheShPcmNoZXN0cmF0b3JNY3BQcm92aWRlckNhcGFiaWxpdHkpLFxuICBmZWF0dXJlczogU2NoZW1hLlN0cnVjdCh7XG4gICAgYXBwT3duZWRTdWJhZ2VudHM6IFNjaGVtYS5Cb29sZWFuLFxuICAgIGFzeW5jUG9sbGluZzogU2NoZW1hLkJvb2xlYW4sXG4gICAgY2FuY2VsbGF0aW9uOiBTY2hlbWEuQm9vbGVhbixcbiAgICBiYXRjaFRocmVhZENyZWF0aW9uOiBTY2hlbWEuQm9vbGVhbixcbiAgICB0aHJlYWRNYW5hZ2VtZW50OiBTY2hlbWEuQm9vbGVhbixcbiAgICBpbmNyZW1lbnRhbFRocmVhZFJlYWQ6IFNjaGVtYS5Cb29sZWFuLFxuICAgIHNjaGVkdWxlZFRhc2tzOiBTY2hlbWEuQm9vbGVhbixcbiAgICBtYXhCYXRjaFRocmVhZHM6IFNjaGVtYS5OdW1iZXIsXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BDYXBhYmlsaXRpZXNSZXN1bHQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwQ2FwYWJpbGl0aWVzUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BTY2hlZHVsZVRhc2tJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwcm9qZWN0SWQ6IE9yY2hlc3RyYXRvck1jcFByb2plY3RUYXJnZXQsXG4gIHByb21wdDogT3JjaGVzdHJhdG9yTWNwUHJvbXB0LmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJQcm9tcHQgZXhlY3V0ZWQgb24gZXZlcnkgc2NoZWR1bGVkIHJ1bi5cIixcbiAgfSksXG4gIHNjaGVkdWxlOiBPcmNoZXN0cmF0b3JNY3BTY2hlZHVsZSxcbiAgdGl0bGU6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0b3JNY3BUaXRsZSksXG4gIGVuYWJsZWQ6IFNjaGVtYS5vcHRpb25hbChcbiAgICBTY2hlbWEuQm9vbGVhbi5hbm5vdGF0ZSh7IGRlc2NyaXB0aW9uOiBcIldoZXRoZXIgdGhlIHNjaGVkdWxlIHN0YXJ0cyBlbmFibGVkOyBkZWZhdWx0cyB0cnVlLlwiIH0pLFxuICApLFxuICBiaW5kVG9DdXJyZW50VGhyZWFkOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgU2NoZW1hLkJvb2xlYW4uYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVHJ1ZSAoZGVmYXVsdCkgcG9zdHMgZWFjaCBydW4gaW50byB0aGlzIHRocmVhZDsgZmFsc2UgY3JlYXRlcyBhIGZyZXNoIHRvcC1sZXZlbCB0aHJlYWQgcGVyIHJ1bi5cIixcbiAgICB9KSxcbiAgKSxcbiAgY2xpZW50UmVxdWVzdElkOiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwQ2xpZW50UmVxdWVzdElkKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGVUYXNrSW5wdXQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGVUYXNrSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcFNjaGVkdWxlZFRhc2sgPSBTY2hlbWEuU3RydWN0KHtcbiAgc2NoZWR1bGVkVGFza0lkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIHRpdGxlOiBTY2hlbWEuU3RyaW5nLFxuICBwcm9tcHQ6IFNjaGVtYS5TdHJpbmcsXG4gIGVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBwcm9qZWN0SWQ6IFByb2plY3RJZCxcbiAgYm91bmRUaHJlYWRJZDogU2NoZW1hLk51bGxPcihUaHJlYWRJZCksXG4gIHNjaGVkdWxlOiBTY2hlZHVsZWRUYXNrU2NoZWR1bGUsXG4gIG5leHRSdW5BdDogU2NoZW1hLk51bGxPcihJc29EYXRlVGltZSksXG4gIGxhc3RSdW5TdGF0dXM6IFNjaGVkdWxlZFRhc2tSdW5TdGF0dXMsXG4gIHdlYmhvb2tVcmw6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuU3RyaW5nKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlB1YmxpYyBVUkwgdG8gZ2l2ZSB0aGUgc2VuZGVyLiBBYnNlbnQgd2hlbiB0aGlzIGVudmlyb25tZW50IGhhcyBubyBUMyBDb25uZWN0IG1hbmFnZWQgdHVubmVsOyB0aGUgdXNlciBtdXN0IGVuYWJsZSBUMyBDb25uZWN0IHJlbW90ZSBhY2Nlc3MgZmlyc3QuXCIsXG4gIH0pLFxuICB3ZWJob29rU2lnbmF0dXJlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkxpdGVyYWxzKFtcIm5vbmVcIiwgXCJzZXRcIl0pKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246IFwiV2hldGhlciByZXF1ZXN0cyBtdXN0IGNhcnJ5IGEgdmFsaWQgc2lnbmF0dXJlLlwiLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGVkVGFzayA9IHR5cGVvZiBPcmNoZXN0cmF0b3JNY3BTY2hlZHVsZWRUYXNrLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BTY2hlZHVsZVRhc2tSZXN1bHQgPSBPcmNoZXN0cmF0b3JNY3BTY2hlZHVsZWRUYXNrO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwU2NoZWR1bGVUYXNrUmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFNjaGVkdWxlVGFza1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwTGlzdFNjaGVkdWxlZFRhc2tzSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcHJvamVjdElkOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgUHJvamVjdElkLmFubm90YXRlKHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9ubHkgbGlzdCB0aGlzIHByb2plY3QncyB0YXNrcy4gT21pdCBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkJ3MgcHJvamVjdCwgb3IgZm9yIGV2ZXJ5IHByb2plY3Qgd2hlbiB0aGUgY2FsbGVyIGlzIG5vdCBhIFQzIHRocmVhZC5cIixcbiAgICB9KSxcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwTGlzdFNjaGVkdWxlZFRhc2tzSW5wdXQgPVxuICB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwTGlzdFNjaGVkdWxlZFRhc2tzSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcExpc3RTY2hlZHVsZWRUYXNrc1Jlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0YXNrczogU2NoZW1hLkFycmF5KE9yY2hlc3RyYXRvck1jcFNjaGVkdWxlZFRhc2spLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BMaXN0U2NoZWR1bGVkVGFza3NSZXN1bHQgPVxuICB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwTGlzdFNjaGVkdWxlZFRhc2tzUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BVcGRhdGVTY2hlZHVsZWRUYXNrSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgc2NoZWR1bGVkVGFza0lkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIHByb21wdDogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRvck1jcFByb21wdCksXG4gIHRpdGxlOiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwVGl0bGUpLFxuICBzY2hlZHVsZTogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRvck1jcFNjaGVkdWxlKSxcbiAgZW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgYmluZFRvQ3VycmVudFRocmVhZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwVXBkYXRlU2NoZWR1bGVkVGFza0lucHV0ID1cbiAgdHlwZW9mIE9yY2hlc3RyYXRvck1jcFVwZGF0ZVNjaGVkdWxlZFRhc2tJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwUmVxdWVzdFNlY3JldElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGxhYmVsOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOiBcIldoYXQgeW91IG5lZWQsIHNob3duIGFzIHRoZSBjYXJkJ3MgdGl0bGUsIGUuZy4gJ0dpdEh1YiB3ZWJob29rIHNlY3JldCcuXCIsXG4gIH0pLFxuICByZWFzb246IFRyaW1tZWROb25FbXB0eVN0cmluZy5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIk9uZSBvciB0d28gc2VudGVuY2VzIG9uIHdoYXQgaXQgaXMgZm9yIGFuZCB3aGVyZSB0aGUgdXNlciBnZXRzIG9yIGFsc28gZW50ZXJzIGl0LlwiLFxuICB9KSxcbiAgcGxhY2Vob2xkZXI6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJIaW50IGluc2lkZSB0aGUgaW5wdXQsIGUuZy4gJ1Bhc3RlIHlvdXIgR2l0SHViIHRva2VuJy5cIixcbiAgfSksXG4gIHRpbWVvdXRNczogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5JbnQuY2hlY2soU2NoZW1hLmlzQmV0d2Vlbih7IG1pbmltdW06IDFfMDAwLCBtYXhpbXVtOiA2MCAqIDYwICogMV8wMDAgfSkpLFxuICApLmFubm90YXRlKHsgZGVzY3JpcHRpb246IFwiSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIHVzZXIuIERlZmF1bHQgMTAgbWludXRlcy5cIiB9KSxcbiAgY2xpZW50UmVxdWVzdElkOiBTY2hlbWEub3B0aW9uYWwoT3JjaGVzdHJhdG9yTWNwQ2xpZW50UmVxdWVzdElkKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJldXNlIHdoZW4gcmV0cnlpbmcgYSBjYWxsIHRoYXQgbG9zdCBpdHMgcmVzdWx0LCBzbyB0aGUgdXNlciBzZWVzIG9uZSBjYXJkIGFuZCBpdHMgYW5zd2VyIGlzIHJldHVybmVkIGFnYWluLiBVc2UgYSBuZXcgaWQgdG8gYXNrIGFnYWluIGFmdGVyIHRpbWVkX291dCBvciBjYW5jZWxsZWQuXCIsXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BSZXF1ZXN0U2VjcmV0SW5wdXQgPSB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwUmVxdWVzdFNlY3JldElucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBPcmNoZXN0cmF0b3JNY3BSZXF1ZXN0U2VjcmV0UmVzdWx0ID0gU2NoZW1hLlVuaW9uKFtcbiAgU2NoZW1hLlN0cnVjdCh7XG4gICAgc3RhdHVzOiBTY2hlbWEuTGl0ZXJhbChcInNhdmVkXCIpLmFubm90YXRlKHsgZGVzY3JpcHRpb246IFwic2VjcmV0UmVmIGhvbGRzIHRoZSB2YWx1ZS5cIiB9KSxcbiAgICBzZWNyZXRSZWY6IFNlY3JldFJlZi5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQYXNzIGl0IHRvIGEgdG9vbCB0aGF0IGFjY2VwdHMgYSBzZWNyZXRSZWY7IGl0IHdvcmtzIG9uY2UsIGFuZCB5b3UgbmV2ZXIgc2VlIHRoZSB2YWx1ZS5cIixcbiAgICB9KSxcbiAgfSksXG4gIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgIHN0YXR1czogU2NoZW1hLkxpdGVyYWxzKFtcImRlY2xpbmVkXCIsIFwiY2FuY2VsbGVkXCIsIFwidGltZWRfb3V0XCJdKS5hbm5vdGF0ZSh7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJkZWNsaW5lZDogdGhlIHVzZXIgY2hvc2Ugbm90IHRvLiBjYW5jZWxsZWQ6IHRoZSByZXF1ZXN0IGVuZGVkIHdpdGggdGhlIHJ1bi4gdGltZWRfb3V0OiB0aGUgdXNlciBkaWQgbm90IGFuc3dlciBpbiB0aW1lOyB0aGUgY2FyZCBpcyBjbG9zZWQsIHNvIGFzayBhZ2FpbiB3aXRoIGEgbmV3IGNsaWVudFJlcXVlc3RJZCBpZiBzdGlsbCBuZWVkZWQuXCIsXG4gICAgfSksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBPcmNoZXN0cmF0b3JNY3BSZXF1ZXN0U2VjcmV0UmVzdWx0ID0gdHlwZW9mIE9yY2hlc3RyYXRvck1jcFJlcXVlc3RTZWNyZXRSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9yY2hlc3RyYXRvck1jcERlbGV0ZVNjaGVkdWxlZFRhc2tJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzY2hlZHVsZWRUYXNrSWQ6IFNjaGVkdWxlZFRhc2tJZCxcbn0pO1xuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9yTWNwRGVsZXRlU2NoZWR1bGVkVGFza0lucHV0ID1cbiAgdHlwZW9mIE9yY2hlc3RyYXRvck1jcERlbGV0ZVNjaGVkdWxlZFRhc2tJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgT3JjaGVzdHJhdG9yTWNwRGVsZXRlU2NoZWR1bGVkVGFza1Jlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzY2hlZHVsZWRUYXNrSWQ6IFNjaGVkdWxlZFRhc2tJZCxcbiAgZGVsZXRlZDogU2NoZW1hLkJvb2xlYW4sXG59KTtcbmV4cG9ydCB0eXBlIE9yY2hlc3RyYXRvck1jcERlbGV0ZVNjaGVkdWxlZFRhc2tSZXN1bHQgPVxuICB0eXBlb2YgT3JjaGVzdHJhdG9yTWNwRGVsZXRlU2NoZWR1bGVkVGFza1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY2xhc3MgT3JjaGVzdHJhdG9yTWNwRmFpbHVyZSBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxPcmNoZXN0cmF0b3JNY3BGYWlsdXJlPigpKFxuICBcIk9yY2hlc3RyYXRvck1jcEZhaWx1cmVcIixcbiAge1xuICAgIGNvZGU6IFNjaGVtYS5MaXRlcmFscyhbXG4gICAgICBcImNhcGFiaWxpdHlfZGVuaWVkXCIsXG4gICAgICBcInBhcmVudF9ub3RfYWN0aXZlXCIsXG4gICAgICBcInByb3ZpZGVyX3VuYXZhaWxhYmxlXCIsXG4gICAgICBcIm1vZGVsX3VuYXZhaWxhYmxlXCIsXG4gICAgICBcInJ1bnRpbWVfbW9kZV9lc2NhbGF0aW9uX2RlbmllZFwiLFxuICAgICAgXCJpbnRlcmFjdGlvbl9tb2RlX2VzY2FsYXRpb25fZGVuaWVkXCIsXG4gICAgICBcInRhc2tfbm90X2ZvdW5kXCIsXG4gICAgICBcInRhc2tfbm90X2NhbmNlbGxhYmxlXCIsXG4gICAgICBcInRocmVhZF9ub3RfZm91bmRcIixcbiAgICAgIFwicnVuX25vdF9mb3VuZFwiLFxuICAgICAgXCJ0aHJlYWRfbm90X3NlbmRhYmxlXCIsXG4gICAgICBcInRocmVhZF9ub3RfaW50ZXJydXB0aWJsZVwiLFxuICAgICAgXCJpbnZhbGlkX3JlcXVlc3RcIixcbiAgICAgIFwib3JjaGVzdHJhdGlvbl9lcnJvclwiLFxuICAgICAgXCJ0aHJlYWRfY3JlZGVudGlhbF9yZXF1aXJlZFwiLFxuICAgICAgXCJ0YXJnZXRfcmVxdWlyZWRcIixcbiAgICBdKSxcbiAgICBtZXNzYWdlOiBTY2hlbWEuU3RyaW5nLFxuICB9LFxuKSB7fVxuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvb3JjaGVzdHJhdG9yTWNwLnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9vcmNoZXN0cmF0b3JNY3AudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvb3JjaGVzdHJhdG9yTWNwLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLFtdLFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLHt9LCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L0VmZmVjdC5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvU2NoZW1hLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWFUcmFuc2Zvcm1hdGlvbi5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9iYXNlU2NoZW1hcy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zY2hlZHVsZWRUYXNrLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3Byb3ZpZGVyUG9saWN5LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3B1bGxSZXF1ZXN0LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3RocmVhZFB1bGxSZXF1ZXN0LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3RocmVhZFRpdGxlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL29yY2hlc3RyYXRpb25WMi50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9tb2RlbC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9wcm92aWRlckluc3RhbmNlLnRzIl0=