@extrovert.dev/sdk 0.1.0-pre.10 → 0.1.0-pre.11
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 +31 -4
- package/dist/index.cjs +279 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3006 -73
- package/dist/index.d.ts +3006 -73
- package/dist/index.js +278 -47
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/problem.ts","../src/version.ts","../src/http.ts","../src/extract.ts","../src/recipients.ts","../src/fixtures.ts","../src/include.ts","../src/transport.ts","../src/domain-wait.ts","../src/key-tier.ts","../src/resources/inbox-handle.ts","../src/pagination.ts","../src/resources/projects.ts","../src/resources/index.ts","../src/client.ts","../src/send-result.ts","../src/webhook.ts","../src/contract.ts"],"names":["inbox","now"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Extrovert error types. Every non-2xx response is surfaced as an {@link ApiError} (or a subclass),\n * so callers can branch on `status` / `code` without inspecting raw responses.\n *\n * The redesigned surface returns RFC-9457 `application/problem+json` with a CLOSED\n * machine {@link ProblemCode} enum. When that body is present, the thrown error\n * carries the parsed {@link Problem} on `.problem` and a typed `.problemCode`; the\n * legacy `{ error, message }` envelope is still parsed for back-compat.\n */\n\nimport type { Problem, ProblemCode } from \"./problem.js\";\n\n/** The machine-readable error envelope the Extrovert API returns on failures. */\nexport interface ApiErrorBody {\n error: {\n /** Stable, machine-readable code, e.g. `enrollment_token_exhausted`, `not_found`. */\n code: string;\n /** Human-readable message safe to surface to developers. */\n message: string;\n /** Optional per-field validation detail. */\n details?: Record<string, unknown>;\n };\n /** Request id for support correlation, echoed from the `X-Request-Id` header. */\n request_id?: string;\n}\n\n/**\n * Base error for any failed Extrovert API call. Carries the HTTP `status`, the stable `code`, the\n * `request_id` for support, and the raw `body` for forward-compatible inspection.\n */\nexport class ApiError extends Error {\n /** HTTP status code (e.g. 401, 404, 409, 429). 0 when the request never reached the server. */\n readonly status: number;\n /** Stable machine-readable error code from the body, or a synthesized one for transport errors. */\n readonly code: string;\n /** Request id for support correlation, when present. */\n readonly requestId: string | undefined;\n /** The parsed error body, when the server returned one. */\n readonly body: ApiErrorBody | undefined;\n /**\n * The parsed RFC-9457 problem+json body, when the server returned one. Present on\n * the redesigned surface; `undefined` for the legacy `{ error }` envelope.\n */\n readonly problem: Problem | undefined;\n /**\n * The typed closed-enum problem code, when the server returned problem+json. An\n * unknown/legacy code is coerced to `\"internal\"`; the raw string is always on\n * {@link ApiError.code}.\n */\n readonly problemCode: ProblemCode | undefined;\n\n constructor(args: {\n status: number;\n code: string;\n message: string;\n requestId?: string | undefined;\n body?: ApiErrorBody | undefined;\n problem?: Problem | undefined;\n cause?: unknown;\n }) {\n super(args.message, args.cause === undefined ? undefined : { cause: args.cause });\n this.name = new.target.name;\n this.status = args.status;\n this.code = args.code;\n this.requestId = args.requestId;\n this.body = args.body;\n this.problem = args.problem;\n this.problemCode = args.problem?.code;\n // Maintain prototype chain across transpile targets.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /** True for 4xx responses (client errors that retrying won't fix). */\n get isClientError(): boolean {\n return this.status >= 400 && this.status < 500;\n }\n\n /** True for 5xx responses (server errors that may succeed on retry). */\n get isServerError(): boolean {\n return this.status >= 500;\n }\n}\n\n/** 401 - the agent key / enrollment token was missing, malformed, expired, or revoked. */\nexport class AuthenticationError extends ApiError {}\n\n/** 403 - authenticated, but the key's scopes don't permit this action (capability denied). */\nexport class PermissionError extends ApiError {}\n\n/**\n * 403 `forbidden_scope` - the call is outside the key's CEILING (e.g. a non-org key\n * on the org-wide wildcard, or an issuance that would escalate). A redesign-specific\n * subclass of {@link PermissionError} so existing `instanceof PermissionError`\n * branches keep working.\n */\nexport class ForbiddenScopeError extends PermissionError {}\n\n/**\n * 400 `breadth_required` - an org-tier key/operator issued a bare list that needs a\n * breadth pick; the problem `errors`/`detail` name the next call\n * (`/v1/projects/{id}/inboxes` or `/v1/projects/-/inboxes`).\n */\nexport class BreadthRequiredError extends ApiError {}\n\n/** 404 - the inbox, message, thread, or webhook does not exist (or isn't visible to this tenant). */\nexport class NotFoundError extends ApiError {}\n\n/** 409 - a conflicting state, e.g. an enrollment token that already created its maximum number of inboxes. */\nexport class ConflictError extends ApiError {}\n\n/** 422 - the request body failed validation; see `body.error.details`. */\nexport class ValidationError extends ApiError {}\n\n/**\n * 422 `recipient_suppressed` - a send/reply/forward was rejected because one or\n * more recipients have opted out (list-unsubscribe / suppression). The whole send\n * is rejected (never a silent partial drop). {@link suppressedRecipients} lists the\n * exact addresses to drop; retry the send without them. The scope/origin of the\n * opt-out is deliberately NOT surfaced. A subclass of {@link ValidationError} so\n * existing `instanceof ValidationError` branches keep working.\n */\nexport class RecipientSuppressedError extends ValidationError {\n /** The recipient addresses that are suppressed - drop these and retry. */\n readonly suppressedRecipients: string[];\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.suppressedRecipients = suppressedRecipientsFromProblem(args.problem);\n }\n}\n\n/**\n * Pull the suppressed recipient addresses out of a problem+json body. The server\n * attaches them as per-field hints (`{field:\"recipient\", code:\"recipient_suppressed\",\n * detail:\"<address>\"}`) so the caller can drop exactly those and retry.\n */\nfunction suppressedRecipientsFromProblem(problem: Problem | undefined): string[] {\n const out: string[] = [];\n for (const field of problem?.errors ?? []) {\n if (field.field === \"recipient\" && typeof field.detail === \"string\" && field.detail) {\n out.push(field.detail);\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Review Loop taxonomy - the 422 remediation and the split 409.\n//\n// The server carries an error's recovery FACTS as repeated `{field, code,\n// detail}` problem hints (the same triple `breadth_required` and\n// `recipient_suppressed` already use), so the classes below read them off\n// `.problem.errors` instead of forcing every caller to re-GET the review. Two\n// rules the shapes encode:\n//\n// 1. Every new class extends an EXISTING one (ValidationError / ConflictError),\n// so code already written as `catch (e) { if (e instanceof ConflictError) }`\n// keeps working unchanged and only code that WANTS the distinction has to\n// learn it.\n// 2. Only StaleError and BornStaleError are retryable, and each only a bounded\n// number of times. TerminalError and WrongStateError must never be retried\n// with the same verb - that infinite loop is the bug this taxonomy exists to\n// make impossible.\n// ---------------------------------------------------------------------------\n\n/** First `detail` whose hint `field` matches, or undefined. */\nfunction hintDetail(problem: Problem | undefined, field: string): string | undefined {\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.detail === \"string\" && f.detail) return f.detail;\n }\n return undefined;\n}\n\n/** First `code` whose hint `field` matches, or undefined. */\nfunction hintCode(problem: Problem | undefined, field: string): string | undefined {\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.code === \"string\" && f.code) return f.code;\n }\n return undefined;\n}\n\n/** Every hint `code` under the repeated `field` (e.g. the `allowed_action` list). */\nfunction hintCodes(problem: Problem | undefined, field: string): string[] {\n const out: string[] = [];\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.code === \"string\" && f.code) out.push(f.code);\n }\n return out;\n}\n\n/** Parse a hint whose `code` carries an integer (revision / version). */\nfunction hintInt(problem: Problem | undefined, field: string): number | undefined {\n const raw = hintCode(problem, field);\n if (raw === undefined) return undefined;\n const n = Number(raw);\n return Number.isInteger(n) ? n : undefined;\n}\n\n/**\n * 422 `intent_required` - the inbox's resolved review policy requires a human to\n * see this message before it goes out, and the request carried no `intent`.\n *\n * **Nothing was sent and nothing was queued.** The server checks this before it\n * writes any row, which is what makes the amended retry safe: add an `intent`\n * and re-POST the SAME request. {@link retryWith} is the literal JSON fragment to\n * splice in, and the human-readable remediation (the full recipe, including how\n * to monitor the resulting review) is on `.message` / `.problem.detail`.\n *\n * Under `require_review` - the default for every account - this is the FIRST\n * thing most agents hit. Read `effective_review_policy` on\n * `GET /v1/inboxes/{id}` once at start-up and compose an intent up front instead\n * of learning the policy by being refused. A subclass of {@link ValidationError}\n * so existing `instanceof ValidationError` branches keep working.\n */\nexport class IntentRequiredError extends ValidationError {\n /** The resolved review policy, e.g. `require_review`. */\n readonly policy: string | undefined;\n /** Where the policy came from - a per-inbox override or the account default. */\n readonly policySource: string | undefined;\n /** Literal JSON to merge into the original request body, then retry once. */\n readonly retryWith: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n // The server ships `policy` as `<policy> (source: <source>)` so one hint\n // carries both halves; split rather than demand a second field.\n const policyHint = hintDetail(args.problem, \"policy\");\n const match = policyHint?.match(/^([^\\s(]+)\\s*(?:\\(source:\\s*(.*?)\\s*\\))?$/);\n this.policy = match?.[1];\n this.policySource = match?.[2];\n this.retryWith = hintDetail(args.problem, \"retry_with\");\n }\n}\n\n/**\n * Base for the review-loop 409s. Carries the live state and CAS keys the server\n * attached so a retry (where one is legal at all) needs no extra `get_review`,\n * and the `allowed_action` verbs that ARE legal from the current state so an\n * agent is told what to do instead of guessing.\n *\n * Extends {@link ConflictError}: every one of these used to be a bare 409, and\n * nothing that catches `ConflictError` should have to change.\n */\nexport class ReviewConflictError extends ConflictError {\n /** The review's CURRENT state (`needs_review`, `approved`, `sent`, …). */\n readonly currentState: string | undefined;\n /** The current revision - pass it as `parent_revision` on a legal retry. */\n readonly currentRevision: number | undefined;\n /** The current row version (the optional belt-and-braces CAS). */\n readonly currentVersion: number | undefined;\n /** The verbs that ARE legal from {@link currentState}, e.g. `submit_revision`. */\n readonly allowedActions: string[];\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.currentState = hintCode(args.problem, \"state\");\n this.currentRevision = hintInt(args.problem, \"revision\");\n this.currentVersion = hintInt(args.problem, \"version\");\n this.allowedActions = hintCodes(args.problem, \"allowed_action\");\n }\n /**\n * Whether retrying the same call could ever succeed. False for every subclass\n * except {@link StaleError} and {@link BornStaleError} - and true there only\n * after re-reading and re-applying on top of the other party's change.\n */\n get isRetryable(): boolean {\n return false;\n }\n}\n\n/**\n * 409 `stale` - the `(revision[, version])` you named is no longer current\n * because a human or reviewer moved the draft. **Nothing was mutated.**\n *\n * The one genuinely retryable conflict, and bounded (≤3): re-read the draft and\n * the feedback, re-apply your edit on top of theirs, resubmit with\n * {@link ReviewConflictError.currentRevision} as the new `parent_revision`. The\n * current state/revision/version ride along on the error, so the retry costs no\n * extra round trip.\n */\nexport class StaleError extends ReviewConflictError {\n override get isRetryable(): boolean {\n return true;\n }\n}\n\n/**\n * 409 `wrong_state` - this VERB is illegal from the review's current state, but\n * the draft is still live.\n *\n * **Never retry the same verb**; the timing is not the problem, the choice of\n * call is. Read {@link ReviewConflictError.allowedActions} and pick one of those.\n */\nexport class WrongStateError extends ReviewConflictError {}\n\n/**\n * 409 `terminal` - the review has already finished (sent / auto_sent /\n * cancelled). Nothing will EVER succeed on it.\n *\n * **Stop.** A `front_run_next` review event is waiting on the durable queue with\n * the outcome; drain it, ack it, and compose a NEW message if one is still\n * wanted. {@link sentMessageId} is the message that actually went out, when the\n * review reached a delivery.\n */\nexport class TerminalError extends ReviewConflictError {\n /** The message that was actually delivered, when this review sent one. */\n readonly sentMessageId: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.sentMessageId = hintCode(args.problem, \"sent_message_id\");\n }\n}\n\n/**\n * 409 `born_stale` - the redraft was composed against an OLDER writing-rule\n * high-water than the one now in force. **Nothing was mutated** and the composer\n * has been re-nudged.\n *\n * Retryable at most once per rule high-water: re-read the rules, re-apply them,\n * resubmit - or `restamp_review` when re-reading shows nothing genuinely needed\n * to change. Restamping when the body DID need to change makes the draft lie to\n * the born-stale accounting, so do it only for a true no-op.\n */\nexport class BornStaleError extends ReviewConflictError {\n override get isRetryable(): boolean {\n return true;\n }\n}\n\n/**\n * 409 `send_needs_reconciliation` - a delivery attempt reached (or may have\n * reached) the mail provider and the process died before recording the outcome,\n * so the review is parked for recover-by-Message-ID.\n *\n * **Do not resend.** That is exactly how one message goes out twice. Poll the\n * review (`closed` / `sent_message_id`) until an operator or the recovery path\n * resolves it.\n */\nexport class SendNeedsReconciliationError extends ReviewConflictError {}\n\n/**\n * 409 `idempotency_conflict` - the same `Idempotency-Key` was replayed with a\n * DIFFERENT request body within the same scope. The replay key is a hash of the\n * raw bytes, so \"same message, different spelling\" counts as different.\n *\n * A caller bug, not a race: do not retry under that key. Either send the byte-\n * identical body, or use a new key for the genuinely new message.\n */\nexport class IdempotencyConflictError extends ConflictError {}\n\n/**\n * 503 `unavailable` - a dependency could not be read, so the request was failed\n * CLOSED rather than served on a guess. On the send path this specifically means\n * the account's review policy was unreadable: relaying unsupervised mail for a\n * customer whose stated policy we could not see is the failure that would be\n * worse than the outage.\n *\n * Retryable after {@link retryAfter} seconds. Distinct from `not_configured`,\n * which means the deployment does not have the capability at all.\n */\nexport class UnavailableError extends ApiError {\n /** Seconds to wait before retrying, from the `Retry-After` header. */\n readonly retryAfter: number | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { retryAfter?: number }) {\n super(args);\n this.retryAfter = args.retryAfter;\n }\n}\n\n/** 402 - payment required (x402 test-mode). `paymentRequired` holds the raw challenge header. */\nexport class PaymentRequiredError extends ApiError {\n /** The raw `PAYMENT-REQUIRED` header challenge to sign + retry (EIP-3009, Base Sepolia). */\n readonly paymentRequired: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { paymentRequired?: string }) {\n super(args);\n this.paymentRequired = args.paymentRequired;\n }\n}\n\n/** 429 - rate limited. `retryAfter` is the server's hint in seconds, when provided. */\nexport class RateLimitError extends ApiError {\n /** Seconds to wait before retrying, parsed from the `Retry-After` header. */\n readonly retryAfter: number | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { retryAfter?: number }) {\n super(args);\n this.retryAfter = args.retryAfter;\n }\n}\n\n/** The request failed before a response was received (network down, DNS, abort, timeout). */\nexport class ConnectionError extends ApiError {\n constructor(message: string, cause?: unknown) {\n super({ status: 0, code: \"connection_error\", message, cause });\n }\n}\n\n/** The request was aborted by the caller's `AbortSignal` or the client `timeout`. */\nexport class TimeoutError extends ApiError {\n constructor(message = \"Request timed out\", cause?: unknown) {\n super({ status: 0, code: \"timeout\", message, cause });\n }\n}\n\n/** Map an HTTP status (and the typed problem code, when present) to the most specific {@link ApiError} subclass. */\nexport function errorForStatus(args: {\n status: number;\n code: string;\n message: string;\n requestId?: string | undefined;\n body?: ApiErrorBody | undefined;\n problem?: Problem | undefined;\n retryAfter?: number | undefined;\n paymentRequired?: string | undefined;\n}): ApiError {\n // Prefer the closed problem code when the redesigned surface returned problem+json:\n // it distinguishes forbidden_scope / breadth_required from the generic status class.\n switch (args.problem?.code) {\n case \"forbidden_scope\":\n return new ForbiddenScopeError(args);\n case \"breadth_required\":\n return new BreadthRequiredError(args);\n case \"idempotency_conflict\":\n return new IdempotencyConflictError(args);\n case \"recipient_suppressed\":\n return new RecipientSuppressedError(args);\n // Review Loop taxonomy. These MUST be matched on the code, not the status:\n // five of them share HTTP 409 and the whole point is that an agent takes a\n // different action on each.\n case \"intent_required\":\n return new IntentRequiredError(args);\n case \"stale\":\n return new StaleError(args);\n case \"wrong_state\":\n return new WrongStateError(args);\n case \"terminal\":\n return new TerminalError(args);\n case \"born_stale\":\n return new BornStaleError(args);\n case \"send_needs_reconciliation\":\n return new SendNeedsReconciliationError(args);\n case \"graduation_locked\":\n case \"maturity_gate_unmet\":\n case \"scope_taken\":\n // Still a 409 with the review hints attached, but there is no distinct\n // recovery move: the caller reads the state hints and asks a human.\n return new ReviewConflictError(args);\n case \"unavailable\":\n return new UnavailableError(args);\n default:\n break;\n }\n switch (args.status) {\n case 401:\n return new AuthenticationError(args);\n case 402:\n return new PaymentRequiredError(args);\n case 403:\n return new PermissionError(args);\n case 404:\n return new NotFoundError(args);\n case 409:\n return new ConflictError(args);\n case 422:\n return new ValidationError(args);\n case 429:\n return new RateLimitError(args);\n default:\n return new ApiError(args);\n }\n}\n","/**\n * RFC-9457 problem+json errors (redesign §5.1 / §6.2).\n *\n * The redesigned surface returns `application/problem+json` with a CLOSED machine\n * `code` enum clients switch on. The SDK parses it into {@link Problem} and raises a\n * {@link ProblemError} whose `code` is the typed {@link ProblemCode} union, so callers\n * branch exhaustively without inspecting raw bodies. The legacy `{ error, message }`\n * envelope is still parsed by the transport (back-compat); when present it is mapped\n * onto the closest {@link ProblemCode}.\n */\n\n/**\n * The CLOSED problem code enum (mirrors `components.schemas.Problem.code` in the\n * frozen OpenAPI). Adding a member is a contract change - keep it in lockstep with\n * the Go `ProblemCode` enum.\n */\nexport type ProblemCode =\n | \"bad_request\"\n | \"unauthorized\"\n | \"forbidden_scope\"\n | \"not_found\"\n | \"conflict\"\n | \"idempotency_conflict\"\n | \"breadth_required\"\n | \"quota_exceeded\"\n | \"rate_limited\"\n | \"domain_not_allowed\"\n | \"recipient_blocked\"\n | \"recipient_suppressed\"\n | \"not_configured\"\n | \"domain_unavailable\"\n | \"internal\"\n // --- Review Loop taxonomy -------------------------------------------------\n //\n // Before these members every review-loop failure answered a bare `409\n // \"conflict\"` (or, on the send path, no machine code at all), so a stale CAS,\n // an illegal verb and a review a human had already closed were\n // indistinguishable - and a retry loop written against `status === 409`\n // retried all three, including the one that can never succeed. Each member\n // below exists because the agent must take a DIFFERENT action on it; see\n // {@link REVIEW_PROBLEM_RETRYABLE} for which are worth retrying at all.\n | \"intent_required\"\n | \"wrong_state\"\n | \"terminal\"\n | \"stale\"\n | \"born_stale\"\n | \"send_needs_reconciliation\"\n | \"graduation_locked\"\n | \"maturity_gate_unmet\"\n | \"scope_taken\"\n | \"unavailable\";\n\n/** The full set of {@link ProblemCode} values (for runtime validation / exhaustive UIs). */\nexport const PROBLEM_CODES: readonly ProblemCode[] = [\n \"bad_request\",\n \"unauthorized\",\n \"forbidden_scope\",\n \"not_found\",\n \"conflict\",\n \"idempotency_conflict\",\n \"breadth_required\",\n \"quota_exceeded\",\n \"rate_limited\",\n \"domain_not_allowed\",\n \"recipient_blocked\",\n \"recipient_suppressed\",\n \"not_configured\",\n \"domain_unavailable\",\n \"internal\",\n \"intent_required\",\n \"wrong_state\",\n \"terminal\",\n \"stale\",\n \"born_stale\",\n \"send_needs_reconciliation\",\n \"graduation_locked\",\n \"maturity_gate_unmet\",\n \"scope_taken\",\n \"unavailable\",\n] as const;\n\n/**\n * Which review-loop problem codes are worth retrying, and which are a dead end.\n *\n * This table is the whole point of splitting the 409: only a failed\n * compare-and-set (`stale`) and a redraft built against an older rule high-water\n * (`born_stale`) describe a situation a retry can fix, and each only a bounded\n * number of times (re-read, re-apply on top of the other party's change,\n * resubmit). `wrong_state` means the verb is wrong, not the timing - read the\n * `allowed_action` hints and pick another one. `terminal` means the review is\n * finished forever; a `front_run_next` nudge is already waiting on the queue\n * with the outcome. `send_needs_reconciliation` means a delivery attempt is\n * unconfirmed - resending is precisely how a message goes out twice.\n *\n * `intent_required` is listed false because retrying the SAME bytes fails\n * identically: the fix is to ADD an `intent` and send a different request. The\n * server states in its `detail` that nothing was sent and nothing was queued, so\n * that amended retry is safe.\n */\nexport const REVIEW_PROBLEM_RETRYABLE: Readonly<Record<string, boolean>> = {\n stale: true,\n born_stale: true,\n wrong_state: false,\n terminal: false,\n send_needs_reconciliation: false,\n intent_required: false,\n idempotency_conflict: false,\n} as const;\n\n/** One per-field validation detail in a {@link Problem}. */\nexport interface ProblemField {\n field?: string;\n code?: string;\n detail?: string;\n}\n\n/** The RFC-9457 problem+json body. */\nexport interface Problem {\n /** Dereferenceable URI under `https://extrovert.dev/problems/{code}`. */\n type: string;\n /** Short, human-readable summary of the problem type. */\n title: string;\n /** HTTP status code, duplicated in the body. */\n status: number;\n /** Human-readable, instance-specific detail. */\n detail?: string;\n /** The closed machine code clients switch on. */\n code: ProblemCode;\n /** Per-request id for support correlation. */\n request_id?: string;\n /** Optional machine hints (e.g. `breadth_required` may name the next calls). */\n errors?: ProblemField[];\n}\n\n/** True when `value` is a member of the closed {@link ProblemCode} enum. */\nexport function isProblemCode(value: unknown): value is ProblemCode {\n return typeof value === \"string\" && (PROBLEM_CODES as readonly string[]).includes(value);\n}\n\n/**\n * Parse an unknown JSON body into a {@link Problem} when it carries the required\n * problem+json shape (`code` in the closed enum), else `undefined`. Unknown codes\n * are coerced to `\"internal\"` so the typed union holds while the raw value is still\n * available via {@link ProblemError.rawCode}.\n */\nexport function parseProblem(body: unknown): { problem: Problem; rawCode: string } | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const b = body as Record<string, unknown>;\n // problem+json must have a string `code`; the legacy envelope uses `error` instead.\n if (typeof b.code !== \"string\") return undefined;\n const rawCode = b.code;\n const code: ProblemCode = isProblemCode(rawCode) ? rawCode : \"internal\";\n const problem: Problem = {\n type: typeof b.type === \"string\" ? b.type : `https://extrovert.dev/problems/${rawCode}`,\n title: typeof b.title === \"string\" ? b.title : rawCode,\n status: typeof b.status === \"number\" ? b.status : 0,\n code,\n detail: typeof b.detail === \"string\" ? b.detail : undefined,\n request_id: typeof b.request_id === \"string\" ? b.request_id : undefined,\n errors: Array.isArray(b.errors) ? (b.errors as ProblemField[]) : undefined,\n };\n return { problem, rawCode };\n}\n","/**\n * Dated API version pin (redesign §5.4).\n *\n * The Extrovert API is versioned by a dated `Extrovert-Version` request header. A\n * request that omits the header is served the latest version; a pinned older\n * version is transformed to the current shape by a server-side shim. The SDK pins\n * {@link CURRENT_API_VERSION} on every request by default so an app's behavior is\n * stable across server deploys; override it per client via\n * `new Extrovert({ apiVersion: \"YYYY-MM-DD\" })`.\n */\n\n/** The dated API version this SDK was built against. Sent as `Extrovert-Version`. */\nexport const CURRENT_API_VERSION = \"2026-06-23\";\n\n/** The HTTP header carrying the dated API version (request + echoed on the response). */\nexport const API_VERSION_HEADER = \"Extrovert-Version\";\n","/**\n * fetch-based transport for the Extrovert API.\n *\n * Runtime-agnostic: uses the global `fetch` (Node 18+, Cloudflare Workers, Vercel Edge, Deno,\n * browsers). No Node-only APIs, no dependencies. Retries idempotent requests with jittered backoff\n * on 429/5xx, honors `Retry-After`, and surfaces every failure as a typed {@link ApiError}.\n */\n\nimport {\n ApiError,\n ConnectionError,\n TimeoutError,\n errorForStatus,\n type ApiErrorBody,\n} from \"./errors.js\";\nimport { parseProblem, type Problem } from \"./problem.js\";\nimport { API_VERSION_HEADER, CURRENT_API_VERSION } from \"./version.js\";\n\n/** The library version, surfaced in the User-Agent. Kept in sync with package.json by build. */\nexport const SDK_VERSION = \"0.1.0-pre.10\";\n\nexport interface RetryOptions {\n /** Max retry attempts for idempotent requests on 429/5xx/network errors. Default 2. */\n maxRetries: number;\n /** Base backoff in ms (grows exponentially with jitter). Default 250. */\n baseDelayMs: number;\n /** Cap on a single backoff delay. Default 8000. */\n maxDelayMs: number;\n}\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"DELETE\" | \"PATCH\" | \"PUT\";\n path: string;\n /** Query params; undefined/null values are dropped. */\n query?: Record<string, string | number | boolean | undefined | null>;\n /** JSON body; serialized as `application/json`. */\n body?: unknown;\n /** Per-request idempotency key, sent as the `Idempotency-Key` header. */\n idempotencyKey?: string;\n /** Per-request timeout override (ms). */\n timeoutMs?: number;\n /** Per-request abort signal, merged with the timeout signal. */\n signal?: AbortSignal;\n /** Force this request to be treated as (non-)retryable, overriding the method default. */\n retryable?: boolean;\n /**\n * Return the raw response body as text instead of JSON-parsing it. Used for the\n * raw `.eml` download (Content-Type `message/rfc822`), which is not JSON.\n */\n raw?: boolean;\n /**\n * Return the raw response as binary, alongside the Content-Type and\n * Content-Disposition headers. Used for the attachment download (arbitrary\n * bytes), which must not pass through text/JSON decoding.\n */\n binary?: boolean;\n}\n\n/** A binary response body plus the headers needed to save/serve it. */\nexport interface BinaryResponse {\n bytes: Uint8Array;\n contentType: string;\n contentDisposition: string;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiKey: string;\n /** Default timeout in ms. Default 30000. wait_for_email overrides this per call. */\n timeoutMs: number;\n retry: RetryOptions;\n /** Custom fetch (e.g. for tests or a proxy). Defaults to the global fetch. */\n fetch: typeof fetch;\n /** Extra headers merged into every request. */\n defaultHeaders: Record<string, string>;\n /**\n * Dated API version pinned on every request as the `Extrovert-Version` header\n * (redesign §5.4). Defaults to {@link CURRENT_API_VERSION}.\n */\n apiVersion: string;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query?: RequestOptions[\"query\"],\n): string {\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const rel = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(base + rel);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || (status >= 500 && status <= 599);\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(new TimeoutError(\"Aborted during backoff\"));\n const id = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(id);\n reject(new TimeoutError(\"Aborted during backoff\"));\n },\n { once: true },\n );\n });\n}\n\n/** Compose the caller's signal with a timeout into a single AbortSignal. */\nfunction withTimeout(timeoutMs: number, signal?: AbortSignal): { signal: AbortSignal; cancel: () => void } {\n const controller = new AbortController();\n const onAbort = () => controller.abort((signal as AbortSignal & { reason?: unknown })?.reason);\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n const timer = setTimeout(() => controller.abort(new TimeoutError()), timeoutMs);\n return {\n signal: controller.signal,\n cancel: () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n\nexport class HttpClient {\n constructor(private readonly config: HttpClientConfig) {}\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = buildUrl(this.config.baseUrl, options.path, options.query);\n const retryable =\n options.retryable ?? (options.method === \"GET\" || options.method === \"DELETE\");\n const maxAttempts = retryable ? this.config.retry.maxRetries + 1 : 1;\n const timeoutMs = options.timeoutMs ?? this.config.timeoutMs;\n\n let lastError: ApiError | undefined;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const { signal, cancel } = withTimeout(timeoutMs, options.signal);\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n // Accept problem+json (redesign) alongside json so the typed Problem body parses.\n Accept: \"application/json, application/problem+json\",\n \"User-Agent\": `extrovert-sdk-ts/${SDK_VERSION}`,\n // Pin the dated API version on every request (redesign §5.4).\n [API_VERSION_HEADER]: this.config.apiVersion || CURRENT_API_VERSION,\n ...this.config.defaultHeaders,\n };\n if (options.idempotencyKey) headers[\"Idempotency-Key\"] = options.idempotencyKey;\n let bodyInit: string | undefined;\n if (options.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n bodyInit = JSON.stringify(options.body);\n }\n\n const response = await this.config.fetch(url, {\n method: options.method,\n headers,\n body: bodyInit,\n signal,\n });\n\n if (response.ok) {\n cancel();\n if (response.status === 204) return undefined as T;\n // Binary requests (e.g. attachment bytes) return the raw bytes plus the\n // headers needed to save/serve the file, before any text decoding.\n if (options.binary) {\n const buf = new Uint8Array(await response.arrayBuffer());\n const binary: BinaryResponse = {\n bytes: buf,\n contentType: response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n contentDisposition: response.headers.get(\"content-disposition\") ?? \"\",\n };\n return binary as unknown as T;\n }\n const text = await response.text();\n // Raw requests (e.g. message/rfc822 .eml) return the body verbatim.\n if (options.raw) return text as unknown as T;\n return (text ? JSON.parse(text) : undefined) as T;\n }\n\n const apiError = await toApiError(response);\n cancel();\n // Retry transient failures on idempotent requests.\n if (retryable && attempt < maxAttempts - 1 && isRetryableStatus(response.status)) {\n lastError = apiError;\n await sleep(this.backoff(attempt, apiError), options.signal);\n continue;\n }\n throw apiError;\n } catch (err) {\n cancel();\n if (err instanceof ApiError) {\n // Already a typed API error (thrown above) - propagate.\n if (!(err.isServerError && retryable && attempt < maxAttempts - 1)) throw err;\n lastError = err;\n await sleep(this.backoff(attempt, err), options.signal);\n continue;\n }\n // Transport-level failure (network, abort, timeout).\n const transportError = this.classifyTransportError(err);\n if (retryable && attempt < maxAttempts - 1 && transportError instanceof ConnectionError) {\n lastError = transportError;\n await sleep(this.backoff(attempt), options.signal);\n continue;\n }\n throw transportError;\n }\n }\n // Exhausted retries.\n throw lastError ?? new ConnectionError(\"Request failed after retries\");\n }\n\n /**\n * Open a Server-Sent-Events stream and yield each parsed frame as it arrives.\n *\n * This bypasses the JSON request/retry path: it does a single streaming `fetch`,\n * reads the response body incrementally, splits it on the SSE frame delimiter\n * (a blank line), and yields one {@link SseFrame} per frame (skipping comment\n * heartbeats). The connection stays open until the server closes it or the\n * caller's `signal` aborts. Reconnection/resume is the caller's job (re-call with\n * the last `id` as Last-Event-ID), so this primitive stays small and predictable.\n */\n async *stream(options: {\n path: string;\n query?: RequestOptions[\"query\"];\n lastEventId?: string;\n signal?: AbortSignal;\n }): AsyncGenerator<SseFrame, void, unknown> {\n const url = buildUrl(this.config.baseUrl, options.path, options.query);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n Accept: \"text/event-stream\",\n \"User-Agent\": `extrovert-sdk-ts/${SDK_VERSION}`,\n [API_VERSION_HEADER]: this.config.apiVersion || CURRENT_API_VERSION,\n ...this.config.defaultHeaders,\n };\n if (options.lastEventId) headers[\"Last-Event-ID\"] = options.lastEventId;\n\n let response: Response;\n try {\n // No timeout: an SSE stream is intentionally long-lived. Only the caller's\n // signal closes it.\n response = await this.config.fetch(url, { method: \"GET\", headers, signal: options.signal });\n } catch (err) {\n throw this.classifyTransportError(err);\n }\n if (!response.ok) {\n throw await toApiError(response);\n }\n const body = response.body;\n if (!body) {\n throw new ConnectionError(\"SSE response had no readable body\");\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n for (;;) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // Frames are separated by a blank line. Tolerate both \\n\\n and \\r\\n\\r\\n.\n let sep: number;\n while ((sep = indexOfFrameSeparator(buffer)) !== -1) {\n const rawFrame = buffer.slice(0, sep);\n buffer = buffer.slice(sep).replace(/^(\\r?\\n){2}/, \"\");\n const frame = parseSseFrame(rawFrame);\n if (frame) yield frame;\n }\n }\n } finally {\n // Best-effort close of the underlying stream when the consumer stops early.\n try {\n await reader.cancel();\n } catch {\n // ignore\n }\n }\n }\n\n private backoff(attempt: number, error?: ApiError): number {\n if (error && \"retryAfter\" in error && typeof error.retryAfter === \"number\") {\n return Math.min(error.retryAfter * 1000, this.config.retry.maxDelayMs);\n }\n const exp = this.config.retry.baseDelayMs * 2 ** attempt;\n const jitter = Math.random() * this.config.retry.baseDelayMs;\n return Math.min(exp + jitter, this.config.retry.maxDelayMs);\n }\n\n private classifyTransportError(err: unknown): ApiError {\n if (err instanceof TimeoutError) return err;\n const name = (err as { name?: string })?.name;\n if (name === \"AbortError\" || name === \"TimeoutError\") {\n return new TimeoutError(\"Request timed out or was aborted\", err);\n }\n const message = err instanceof Error ? err.message : String(err);\n return new ConnectionError(`Network request failed: ${message}`, err);\n }\n}\n\n/** One parsed Server-Sent-Events frame: the `id:`, `event:`, and joined `data:`. */\nexport interface SseFrame {\n /** The `id:` field - the monotonic resume token (Last-Event-ID). */\n id?: string;\n /** The `event:` field - the event type. Defaults to `\"message\"` per the SSE spec. */\n event: string;\n /** The joined `data:` lines (newline-separated, per the SSE spec). */\n data: string;\n}\n\n/** Index of the next frame separator (blank line) in an SSE buffer, or -1. */\nfunction indexOfFrameSeparator(buf: string): number {\n const lf = buf.indexOf(\"\\n\\n\");\n const crlf = buf.indexOf(\"\\r\\n\\r\\n\");\n if (lf === -1) return crlf;\n if (crlf === -1) return lf;\n return Math.min(lf, crlf);\n}\n\n/**\n * Parse one raw SSE frame (the text between blank-line delimiters) into a\n * {@link SseFrame}. Comment lines (starting with `:`, e.g. heartbeats) and frames\n * with no `data` yield `undefined` so callers skip them.\n */\nfunction parseSseFrame(raw: string): SseFrame | undefined {\n let id: string | undefined;\n let event = \"message\";\n const dataLines: string[] = [];\n for (const line of raw.split(/\\r?\\n/)) {\n if (line === \"\" || line.startsWith(\":\")) continue;\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n // A single leading space after the colon is stripped, per the SSE spec.\n let value = colon === -1 ? \"\" : line.slice(colon + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n switch (field) {\n case \"id\":\n id = value;\n break;\n case \"event\":\n event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n default:\n // ignore unknown fields (e.g. retry:)\n break;\n }\n }\n if (dataLines.length === 0) return undefined;\n return { id, event, data: dataLines.join(\"\\n\") };\n}\n\n/** Build a typed error from a non-2xx response, parsing the JSON envelope when present. */\nasync function toApiError(response: Response): Promise<ApiError> {\n const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n const retryAfterRaw = response.headers.get(\"retry-after\");\n const retryAfter = retryAfterRaw ? Number(retryAfterRaw) : undefined;\n const paymentRequired = response.headers.get(\"payment-required\") ?? undefined;\n\n let body: ApiErrorBody | undefined;\n let problem: Problem | undefined;\n let code = `http_${response.status}`;\n let message = `Extrovert API request failed with status ${response.status}`;\n try {\n const text = await response.text();\n if (text) {\n const parsed = JSON.parse(text) as unknown;\n // Redesign surface: RFC-9457 problem+json (has a closed `code`).\n const parsedProblem = parseProblem(parsed);\n if (parsedProblem) {\n problem = parsedProblem.problem;\n code = parsedProblem.rawCode || code;\n message = parsedProblem.problem.detail || parsedProblem.problem.title || message;\n // Mirror onto the legacy body shape so `.body.error.code` still resolves.\n body = { error: { code, message }, request_id: parsedProblem.problem.request_id };\n } else if (parsed && typeof parsed === \"object\") {\n // LEGACY envelope. Two shapes are in the wild and BOTH must parse, or the\n // caller gets `http_409` and no server message - which is exactly what\n // happened until now, and why review-loop code could only branch on\n // `err.status`:\n //\n // (a) `{ error: { code, message } }` - the nested form this parser was\n // written for.\n // (b) `{ error: \"conflict\", message: \"…\" }` - what the Go `writeError`\n // helper actually emits (a STRING `error` plus a TOP-LEVEL\n // `message`), still used by every `/v1/admin/*` route.\n //\n // Reading only (a) against a (b) body yields `undefined` for BOTH halves.\n // The code fell back to `http_<status>` and the message to the generic\n // \"request failed with status N\" - losing the one string that says WHY.\n const legacy = parsed as {\n error?: string | { code?: string; message?: string; details?: Record<string, unknown> };\n message?: string;\n request_id?: string;\n };\n const legacyCode =\n typeof legacy.error === \"string\" ? legacy.error : legacy.error?.code;\n const legacyMessage =\n (typeof legacy.error === \"object\" ? legacy.error?.message : undefined) ?? legacy.message;\n if (legacyCode || legacyMessage) {\n code = legacyCode || code;\n message = legacyMessage || message;\n // Normalize onto the nested ApiErrorBody shape so `.body.error.code`\n // resolves for both wire spellings.\n body = {\n error: {\n code,\n message,\n ...(typeof legacy.error === \"object\" && legacy.error?.details\n ? { details: legacy.error.details }\n : {}),\n },\n ...(legacy.request_id ? { request_id: legacy.request_id } : {}),\n };\n }\n }\n }\n } catch {\n // Non-JSON error body; keep the generic message.\n }\n\n return errorForStatus({\n status: response.status,\n code,\n message,\n requestId: problem?.request_id ?? requestId,\n body,\n problem,\n retryAfter: Number.isFinite(retryAfter) ? retryAfter : undefined,\n paymentRequired,\n });\n}\n","/**\n * OTP / verification-link extraction.\n *\n * Find the most likely one-time code and preferred verification link in a message body. Pure and\n * dependency-free so it runs in Node, the edge, and the browser.\n */\n\nimport type { ExtractedCredentials, Message } from \"./models.js\";\n\n/**\n * Common OTP phrasings, ordered by specificity. A code adjacent to \"code/OTP/verification/PIN\" is a\n * far stronger signal than a bare 6-digit run (which could be a price, year, or zip).\n */\nconst OTP_CONTEXT_PATTERNS: RegExp[] = [\n /(?:one[-\\s]?time\\s*(?:code|password|pin)|verification\\s*code|security\\s*code|auth(?:entication)?\\s*code|access\\s*code|login\\s*code|confirmation\\s*code|your\\s*code|otp|pin)\\D{0,40}?(\\d[\\d\\s-]{3,9}\\d)/i,\n /(\\d[\\d\\s-]{3,9}\\d)\\D{0,30}?(?:is\\s*your|to\\s*(?:verify|confirm|sign|log))/i,\n];\n\n/** Fallback: a standalone 4–8 digit run that isn't obviously a year or currency amount. */\nconst OTP_BARE_PATTERN = /(?<![\\d.,$£€])\\b(\\d{4,8})\\b(?![\\d.,])/g;\n\n/** Verification / magic links, preferring ones whose URL or anchor hints at verification. */\nconst VERIFY_LINK_HINTS =\n /(verify|confirm|activate|magic|auth|login|sign[-_]?in|token|otp|reset|validate)/i;\n\nconst URL_PATTERN = /https?:\\/\\/[^\\s\"'<>)\\]]+/gi;\n\n/** Normalize a captured code: strip the spaces/dashes some senders insert for readability. */\nfunction normalizeCode(raw: string): string {\n return raw.replace(/[\\s-]/g, \"\");\n}\n\n/** Extract the most likely OTP code from a body of text, or null. */\nexport function extractOtp(body: string): string | null {\n for (const pattern of OTP_CONTEXT_PATTERNS) {\n const m = pattern.exec(body);\n if (m && m[1]) {\n const code = normalizeCode(m[1]);\n if (code.length >= 4 && code.length <= 10) return code;\n }\n }\n // Fallback: first plausible standalone digit run, skipping obvious years (1900–2099).\n let match: RegExpExecArray | null;\n OTP_BARE_PATTERN.lastIndex = 0;\n while ((match = OTP_BARE_PATTERN.exec(body)) !== null) {\n const code = match[1]!;\n const n = Number(code);\n if (code.length === 4 && n >= 1900 && n <= 2099) continue;\n return code;\n }\n return null;\n}\n\n/** Extract the most likely verification link from a body, or null. */\nexport function extractLink(body: string): string | null {\n const urls = body.match(URL_PATTERN);\n if (!urls || urls.length === 0) return null;\n const cleaned = urls.map((u) => u.replace(/[.,;:)]+$/, \"\"));\n const hinted = cleaned.find((u) => VERIFY_LINK_HINTS.test(u));\n return hinted ?? cleaned[0] ?? null;\n}\n\n/**\n * Extract OTP + verification link from a message. Prefers the plain-text body; falls back to a\n * tag-stripped HTML body so codes/links rendered only in HTML are still found.\n */\nexport function extractCredentials(message: Message): ExtractedCredentials {\n const htmlText = message.html ? stripHtml(message.html) : \"\";\n const text = message.text && message.text.trim().length > 0 ? message.text : htmlText;\n const combined = `${text}\\n${htmlText}`;\n return {\n otp: extractOtp(text) ?? extractOtp(htmlText),\n // Links live in href attributes, so search the raw HTML too.\n link: extractLink(message.html ?? \"\") ?? extractLink(combined),\n };\n}\n\n/** Minimal HTML-to-text: drop tags and decode the handful of entities that matter for codes. */\nfunction stripHtml(html: string): string {\n return html\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<[^>]+>/g, \" \")\n .replace(/ /gi, \" \")\n .replace(/&/gi, \"&\")\n .replace(/</gi, \"<\")\n .replace(/>/gi, \">\")\n .replace(/&#(\\d+);/g, (_, d: string) => String.fromCharCode(Number(d)))\n .replace(/\\s+/g, \" \")\n .trim();\n}\n","/**\n * Recipient-list normalization, shared by the live transport and the offline mock.\n *\n * `SendRequest.to` / `cc` / `bcc` accept `string | string[]` because passing one\n * address should not require a one-element array - and the flagship quickstart\n * does exactly that. The server, however, decodes them as `[]string` and rejects\n * a bare string with a 400. So the scalar form has to be widened somewhere, and\n * the honest place is the client: there is no deployed caller relying on a scalar\n * reaching the wire (it has always 400'd), so nothing is preserved by tolerating\n * it server-side.\n *\n * Living in its own module keeps ONE definition. The mock used to carry a private\n * copy, which is how a mock ends up quietly accepting shapes the server refuses.\n */\n\n/** Widen `string | string[] | undefined` to `string[]` (empty for absent). */\nexport function toArray(v: string | string[] | undefined): string[] {\n if (!v) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n/**\n * Widen a recipient field for the WIRE, preserving \"the caller did not set this\".\n *\n * `toArray` collapses `undefined` to `[]`, which is right for internal fan-out\n * (union of all recipients) but wrong for a request body: emitting `cc: []` where\n * the caller sent nothing adds a key the caller never wrote. Returns `undefined`\n * for an absent field so the key is omitted from the JSON entirely.\n */\nexport function toWireArray(v: string | string[] | undefined): string[] | undefined {\n if (v === undefined) return undefined;\n return Array.isArray(v) ? v : [v];\n}\n","/**\n * Offline fixtures for the Extrovert SDK.\n *\n * The SDK can run against this in-memory, deterministic mock so examples, the MCP server, and the\n * console are fully navigable offline without contacting the live `/v1` API. Construct a client with\n * `transport: \"mock\"` (or set `EXTROVERT_API_BASE_URL=mock`) to route requests here instead of fetch.\n *\n * The mock honors the same request/response models as the real API and reproduces the few behaviors\n * the SDK ergonomics depend on (enrollment cap, idempotency on `client_id`, wait_for_email returning\n * an OTP). It is intentionally simple - not a full server - and never reaches the network.\n */\n\nimport type {\n AddContactListRequest,\n Agent,\n Attachment,\n AttachmentInput,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainQuote,\n DomainRecord,\n EnrollRequest,\n EnrollResponse,\n ForwardRequest,\n Inbox,\n InboxCredentials,\n InboxMetadata,\n InboxMetadataPatch,\n IsoTimestamp,\n AckReviewEventRequest,\n AckReviewEventResult,\n Job,\n ListCommerceRequestsParams,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCategoriesParams,\n ListInboxesParams,\n ProjectInboxListParams,\n ListMessagesParams,\n ListThreadsParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n UpdateCategoryRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n Message,\n Page,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n ReplyRequest,\n RestampReviewRequest,\n CategoryPacingState,\n PacingItem,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEvent,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n SendResult,\n ReviewPolicy,\n ReviewState,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n VerifyRequest,\n VerifyResponse,\n WaitForEmailRequest,\n WaitForEmailResult,\n WaitForReviewEventParams,\n Webhook,\n WhoAmI,\n} from \"./models.js\";\nimport type { AttachmentDownload } from \"./transport.js\";\nimport type { List } from \"./pagination.js\";\nimport { extractCredentials } from \"./extract.js\";\nimport {\n ApiError,\n ConflictError,\n NotFoundError,\n PermissionError,\n RecipientSuppressedError,\n ValidationError,\n errorForStatus,\n} from \"./errors.js\";\nimport type { Problem, ProblemCode, ProblemField } from \"./problem.js\";\nimport { toArray } from \"./recipients.js\";\n\n/**\n * Opaque-cursor helpers for the mock's project-prefixed list. The real cursor is\n * server-issued and opaque; the mock encodes a bounded offset behind base64url so\n * the SDK iteration helpers exercise an opaque (non-integer) token end to end.\n */\nfunction encodeMockCursor(offset: number): string {\n const json = JSON.stringify({ o: offset, v: 1 });\n const b64 = typeof btoa === \"function\" ? btoa(json) : Buffer.from(json, \"utf8\").toString(\"base64\");\n return b64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nfunction decodeMockCursor(cursor: string): number {\n try {\n const b64 = cursor.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const json = typeof atob === \"function\" ? atob(b64) : Buffer.from(b64, \"base64\").toString(\"utf8\");\n const parsed = JSON.parse(json) as { o?: number };\n return typeof parsed.o === \"number\" && parsed.o >= 0 ? parsed.o : 0;\n } catch {\n return 0;\n }\n}\n\nfunction mailboxQuickstart(address: string): VerifyResponse[\"mailbox_quickstart\"] {\n return {\n inbox: address,\n list_mail: {\n tool: \"read_messages\",\n arguments: { inbox: address, limit: 20, unread_only: false },\n },\n read_message: {\n tool: \"get_message\",\n arguments: { id: \"<message_id from read_messages>\", format: \"text\", variant: \"extracted\" },\n },\n wait_for_mail: {\n tool: \"wait_for_email\",\n arguments: { inbox: address, since_now: true },\n },\n };\n}\n\nconst PAID_SHARED_DOMAIN = \"extrovertmail.com\";\nconst FREE_SHARED_DOMAIN = \"free.extrovertmail.com\";\nconst RESERVED_SHARED_LOCAL_PARTS = new Set([\n \"postmaster\", \"admin\", \"webadmin\", \"legal\", \"fraudmark\", \"fraudmarc\", \"keith\",\n \"melissa\", \"richard\", \"sydney\", \"syd\", \"john\", \"johnny\",\n]);\n\n/**\n * The fixed org/project the offline mock binds every key to. The mock has a single\n * org + project (mirroring the FIXED, key-bound org/project the real API resolves\n * from the stored key - there is no mutable selector). A `project_id` assertion on a\n * request must match {@link MOCK_PROJECT_ID} or the mock throws a 403, mirroring the\n * server's assertion-not-selector contract.\n */\nconst MOCK_ORG_ID = \"org_mock\";\nconst MOCK_PROJECT_ID = \"prj_mock\";\n/** Effective per-inbox recipient cap used by the offline API fixture. */\nconst DEFAULT_DAILY_SEND_LIMIT = 75;\n\n/** Caps for inbox metadata (AgentMail parity): ≤256 keys, ≤256 chars per key/string value. */\nconst METADATA_MAX_KEYS = 256;\nconst METADATA_MAX_KEY_LEN = 256;\nconst METADATA_MAX_VALUE_LEN = 256;\n\nfunction now(): IsoTimestamp {\n return new Date().toISOString();\n}\n\nfunction rid(prefix: string): string {\n const s = Math.random().toString(36).slice(2, 10);\n return `${prefix}_${s}`;\n}\n\nfunction randomHandle(): string {\n return `agent${Math.floor(1000 + Math.random() * 9000)}`;\n}\n\nfunction validatedSharedLocalPart(value: string): string {\n const normalized = value.toLowerCase().trim().replace(/[^a-z0-9._-]/g, \"\").replace(/^[._-]+|[._-]+$/g, \"\").slice(0, 40);\n if (normalized.length < 5 || RESERVED_SHARED_LOCAL_PARTS.has(normalized)) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"Shared-domain usernames must normalize to at least 5 characters and cannot use a reserved name.\" });\n }\n return normalized;\n}\n\n/**\n * Enforce the project_id assertion contract (mock): a request `project_id` is an\n * ASSERTION, never a selector. The mock binds every key to {@link MOCK_PROJECT_ID},\n * so a non-matching assertion is a 403, mirroring the server.\n */\nfunction assertProjectMatch(projectId: string | undefined): void {\n if (projectId !== undefined && projectId !== MOCK_PROJECT_ID) {\n throw new PermissionError({\n status: 403,\n code: \"project_mismatch\",\n message: `project_id \"${projectId}\" does not match the key's bound project.`,\n });\n }\n}\n\n/**\n * Validate an inbox metadata patch against the AgentMail-parity caps and value\n * types (string/number/boolean, or null to delete a key on a PATCH). Throws a 400\n * ValidationError on a violation, mirroring the server.\n */\nfunction validateMetadataPatch(patch: InboxMetadataPatch): void {\n const keys = Object.keys(patch);\n if (keys.length > METADATA_MAX_KEYS) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata has too many keys (max ${METADATA_MAX_KEYS}).`,\n });\n }\n for (const key of keys) {\n if (key.length > METADATA_MAX_KEY_LEN) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata key \"${key.slice(0, 16)}…\" exceeds ${METADATA_MAX_KEY_LEN} chars.`,\n });\n }\n const value = patch[key];\n if (value === null) continue; // null deletes the key (PATCH)\n const t = typeof value;\n if (t !== \"string\" && t !== \"number\" && t !== \"boolean\") {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata value for \"${key}\" must be a string, number, or boolean.`,\n });\n }\n if (t === \"string\" && (value as string).length > METADATA_MAX_VALUE_LEN) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata value for \"${key}\" exceeds ${METADATA_MAX_VALUE_LEN} chars.`,\n });\n }\n }\n}\n\n/**\n * Apply the shallow-merge / null-delete metadata patch semantics (mock):\n * - `undefined` patch leaves `current` unchanged;\n * - `null` patch CLEARS all metadata (returns `{}`);\n * - an object MERGES into `current`, with a per-key `null` value DELETING that key.\n */\nfunction mergeMetadata(\n current: InboxMetadata,\n patch: InboxMetadataPatch | null | undefined,\n): InboxMetadata {\n if (patch === undefined) return current;\n if (patch === null) return {};\n validateMetadataPatch(patch);\n const next: InboxMetadata = { ...current };\n for (const [key, value] of Object.entries(patch)) {\n if (value === null) {\n delete next[key];\n } else {\n next[key] = value;\n }\n }\n return next;\n}\n\n/** ruleSnapshotJSON renders a rule's restorable fields for an undo before/after column. */\nfunction ruleSnapshotJSON(r: Rule): string {\n return JSON.stringify({\n id: r.id,\n lineage_id: r.lineage_id,\n rev: r.rev,\n rule_layer: r.rule_layer,\n org_id: r.org_id,\n project_id: r.project_id,\n scope: r.scope,\n category_id: r.category_id,\n rule_text: r.rule_text,\n kind: r.kind,\n priority: r.priority,\n status: r.status,\n });\n}\n\ninterface MockState {\n agents: Map<string, Agent>;\n /** agent_handle -> agent_id, for idempotent enroll. */\n agentByHandle: Map<string, string>;\n /** client_id -> inbox_id, for idempotent inbox create. */\n inboxByClientId: Map<string, string>;\n /** client_id -> webhook_id, for idempotent webhook registration. */\n webhookByClientId: Map<string, string>;\n inboxes: Map<string, Inbox>;\n messages: Map<string, Message[]>; // keyed by inbox address\n /** message_id -> stored attachments (mock mirror of the real MIME parts). */\n attachments: Map<string, StoredAttachment[]>;\n webhooks: Map<string, Webhook>;\n /** entry id -> contact-list entry (mock mirror of extrovert_contact_lists). */\n contactLists: Map<string, ContactListEntry>;\n /** domain name -> onboarded domain (mock mirror of extrovert_domains). */\n domains: Map<string, Domain>;\n /** job id -> async job status (mock mirror of extrovert_jobs; currently only\n * the domain-offboard teardown enqueues one). */\n jobs: Map<string, Job>;\n /** request id -> agent-initiated commerce request. */\n commerceRequests: Map<string, CommerceRequest>;\n /** request kind + stable Idempotency-Key -> request id. */\n commerceByIdempotency: Map<string, string>;\n /** suppression id -> recipient opt-out row (mock mirror of extrovert_suppressions). */\n suppressions: Map<string, SuppressionEntry>;\n /**\n * The account-level review policy (mock mirror of\n * extrovert_org_settings.review_policy).\n *\n * It defaults to `require_review` because that is the column default on the\n * REAL server for every org that has never touched it - i.e. every org. The\n * mock used to model no policy at all, so a bare `send()` sailed through\n * offline while the same call against production is refused 422. A mock that\n * cannot reproduce the platform's default posture is a mock that certifies\n * broken agents.\n */\n orgReviewPolicy: ReviewPolicy;\n /** address -> per-inbox override, which BEATS the account default when set. */\n inboxReviewPolicy: Map<string, ReviewPolicy>;\n /** review id -> review request (mock mirror of extrovert_review_requests). */\n reviews: Map<string, Review>;\n /** review id -> append-only thread turns. */\n reviewTurns: Map<string, ReviewTurn[]>;\n /**\n * review id -> the draft's attachments (mock mirror of proposed_attachments).\n * They survive submit -> review row -> approval on the real server now, so the\n * mock has to carry them too or a redraft that replaces them looks like a no-op.\n */\n reviewAttachments: Map<string, AttachmentInput[]>;\n /**\n * review id -> reviewer hand-back count (M8 Slice B circuit breaker (a)). The wire\n * Review shape doesn't carry hop_count, so the mock tracks it here to surface the\n * max_hops breaker on the decision context + reviewerDecide.\n */\n reviewHopCounts: Map<string, number>;\n /**\n * review id -> durable nudges (mock mirror of extrovert_review_nudges), oldest\n * first with a per-review monotonic seq. The authoritative liveness queue.\n */\n reviewEvents: Map<string, ReviewEvent[]>;\n /** review id -> last-acked seq (the per-(agent, review) cursor). */\n reviewEventCursors: Map<string, number>;\n /** idempotency-key -> the review state snapshot returned (chat replay, M5 parity v21). */\n chatByIdempotencyKey: Map<string, Review>;\n /** category id -> category (mock mirror of extrovert_categories, D9/D10). */\n categories: Map<string, Category>;\n /** rule id -> writing rule (mock mirror of extrovert_writing_rules, D2/D11). */\n rules: Map<string, Rule>;\n /** udo id -> change/undo audit row (mock mirror of extrovert_rule_undo_log). */\n ruleAudit: Map<string, RuleAuditEntry>;\n /** human_email -> self-signup state (mock OTP + verification). */\n signupByEmail: Map<string, SignupState>;\n /** Monotonic event journal backing the SSE stream (Slice 2). */\n events: StreamEvent[];\n /** Next event seq (monotonic, mirrors the server's AUTOINCREMENT). */\n eventSeq: number;\n mailboxesUsed: number;\n mailboxesMax: number;\n}\n\n/** Mock self-signup bookkeeping (in-memory OTP). */\ninterface SignupState {\n customerId: string;\n agentId: string;\n address: string;\n otp: string;\n verified: boolean;\n}\n\n/** A mock attachment: the wire metadata plus the raw base64 for download. */\ninterface StoredAttachment {\n meta: Attachment;\n content_base64: string;\n}\n\nfunction freshState(): MockState {\n return {\n agents: new Map(),\n agentByHandle: new Map(),\n inboxByClientId: new Map(),\n webhookByClientId: new Map(),\n inboxes: new Map(),\n messages: new Map(),\n attachments: new Map(),\n webhooks: new Map(),\n contactLists: new Map(),\n domains: new Map(),\n jobs: new Map(),\n commerceRequests: new Map(),\n commerceByIdempotency: new Map(),\n suppressions: seedSuppressions(),\n orgReviewPolicy: \"require_review\",\n inboxReviewPolicy: new Map(),\n reviews: new Map(),\n reviewTurns: new Map(),\n reviewAttachments: new Map(),\n reviewHopCounts: new Map(),\n reviewEvents: new Map(),\n reviewEventCursors: new Map(),\n chatByIdempotencyKey: new Map(),\n categories: new Map(),\n rules: new Map(),\n ruleAudit: new Map(),\n signupByEmail: new Map(),\n events: [],\n eventSeq: 0,\n mailboxesUsed: 0,\n mailboxesMax: 5,\n };\n}\n\n/**\n * The recipient the mock seeds an active org-scope suppression for, so the\n * suppression reads (precheck/list/revoke) and the `recipient_suppressed`\n * send-rejection path have deterministic data offline.\n */\nexport const SEEDED_SUPPRESSED_RECIPIENT = \"unsubscribed@example.com\";\n\n/** Seed one active org-scope suppression row (source manual) for the mock. */\nfunction seedSuppressions(): Map<string, SuppressionEntry> {\n const m = new Map<string, SuppressionEntry>();\n const id = rid(\"sup\");\n m.set(id, {\n id,\n recipient: SEEDED_SUPPRESSED_RECIPIENT,\n recipient_raw: SEEDED_SUPPRESSED_RECIPIENT,\n scope: \"org\",\n source: \"manual\",\n reactivation_count: 0,\n created_at: now(),\n revoked: false,\n });\n return m;\n}\n\n// ---------------------------------------------------------------------------\n// Review-policy + review-loop helpers, mirrored from the server so the mock and\n// production cannot disagree about who gets refused and why.\n// ---------------------------------------------------------------------------\n\n/** A reply's server-derived envelope: recipients, `Re:` subject, thread. */\ninterface ReplyEnvelope {\n to: string[];\n subject: string;\n threadId: string;\n}\n\n/**\n * Whether the resolved policy turns this asserted mode into a review.\n *\n * `require_review` always does. `allow_direct` keeps `direct` iff the agent\n * ACTUALLY asserted it. `auto_send_graduated` is decided per-message by the\n * gates, so the conservative treatment is \"review unless direct under\n * allow_direct\" - the intent is still required, because the message may well end\n * up in the human queue and the summary is the reviewer's only context.\n */\nfunction resolvedModeIsReview(policy: ReviewPolicy, mode: \"review\" | \"direct\"): boolean {\n if (policy === \"allow_direct\" && mode === \"direct\") return false;\n return true;\n}\n\n/** The four states nothing will ever move a review out of (`closed` on the read shape). */\nconst CLOSED_REVIEW_STATES: ReadonlySet<ReviewState> = new Set<ReviewState>([\n \"sent\",\n \"auto_sent\",\n \"cancelled\",\n // `failed` is in the CLOSED set although it is not formally terminal: the\n // console cannot re-approve it and no sweep moves it, so an agent told\n // closed=false there would wait forever.\n \"failed\",\n]);\n\n/**\n * The states that answer 409 `terminal` rather than `wrong_state` - a review that\n * has finished for good, where the answer is STOP, not \"try a different verb\".\n * `failed` is deliberately NOT here: an agent may still `cancel_review` it, which\n * is its one legal close-out.\n */\nconst TERMINAL_REVIEW_STATES: ReadonlySet<ReviewState> = new Set<ReviewState>([\n \"sent\",\n \"auto_sent\",\n \"cancelled\",\n]);\n\n/**\n * The verbs a COMPOSING agent may legally call against a draft in this state,\n * most actionable first, reads last - the mock's mirror of the server's\n * `AllowedAgentActions`, which is what fills a 409's `allowed_action` hints.\n *\n * The reads are unconditional, which is why the list is never empty: from a\n * terminal state the honest answer is \"nothing will mutate this, go look at what\n * happened\".\n */\nfunction allowedAgentActions(state: ReviewState): string[] {\n const actions: string[] = [];\n // submit_revision targets needs_review WITH a revision bump - including the\n // needs_review self-edge, which is a legal redraft (a revision bump IS a change).\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" ||\n state === \"stale\" || state === \"rejected\") {\n actions.push(\"submit_revision\");\n }\n // post_review_chat: legal from needs_review for a NON-human actor (an agent may\n // ask a question about a queued draft; it must not fabricate a reviewer, so the\n // state does not change).\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\") {\n actions.push(\"post_review_chat\");\n }\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" || state === \"stale\") {\n actions.push(\"restamp_review\");\n }\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" ||\n state === \"stale\" || state === \"rejected\" || state === \"failed\") {\n actions.push(\"cancel_review\");\n }\n return [...actions, \"get_review\", \"list_review_events\"];\n}\n\n/** Build an RFC-9457 problem body the mock can hand to the SAME parser the live client uses. */\nfunction mockProblem(\n code: ProblemCode,\n status: number,\n title: string,\n detail: string,\n fields: ProblemField[],\n): Problem {\n return {\n type: `https://extrovert.dev/problems/${code}`,\n title,\n status,\n code,\n detail,\n request_id: rid(\"req\"),\n errors: fields.length ? fields : undefined,\n };\n}\n\n/**\n * Raise the mock error through {@link errorForStatus}, the SAME factory the HTTP\n * transport uses on a real problem+json body. That is deliberate: it means the\n * offline mock cannot hand back a different error CLASS than production for the\n * same code, which is precisely the divergence that let a wire bug live behind\n * green demos.\n */\nfunction problemError(problem: Problem, message?: string): ApiError {\n return errorForStatus({\n status: problem.status,\n code: problem.code,\n message: message ?? problem.detail ?? problem.title,\n requestId: problem.request_id,\n problem,\n });\n}\n\n/**\n * The literal `intent_required` 422, remediation and all.\n *\n * The full recipe lives in `detail` (not only in `errors[]`) for the same reason\n * it does on the server: the MCP tool surface renders only the message, so\n * anything that exists only in `errors[]` is invisible to the model that has to\n * fix the request. `errors[]` carries the machine-readable duplicate - including\n * `retry_with`, the literal JSON to splice into the original body.\n */\nfunction intentRequiredError(policy: ReviewPolicy, inboxOverride: boolean): ApiError {\n const source = inboxOverride\n ? \"a per-inbox override on this inbox\"\n : \"the account default; no per-inbox override\";\n const detail =\n `This inbox requires human review before sending (review policy: ${policy}, from ${source}). ` +\n \"Nothing was sent and nothing was queued. \" +\n \"Retry the SAME request with an `intent` object added: \" +\n '{\"intent\":{\"summary\":\"<one sentence: who you are writing to, what you want, and why now>\"}}. ' +\n \"That summary is the first thing the human reviewer reads; 8-200 characters. \" +\n \"Optional: intent.meta {goal, recipient, prior_touches, urgency} for reviewer context, \" +\n \"and category_id (cat_...) from list_categories. \" +\n \"On success you get 202 queued_for_review with a review id (rr_...); then monitor it with \" +\n \"wait_for_review_event / list_review_events until you receive a `sent` or `send_failed` event.\";\n return problemError(\n mockProblem(\"intent_required\", 422, \"Intent Required\", detail, [\n { field: \"intent.summary\", code: \"required\",\n detail: \"One sentence for the human reviewer: who / what / why. 8-200 chars.\" },\n { field: \"intent.meta\", code: \"optional\",\n detail: \"{goal, recipient, prior_touches, urgency} - improves the reviewer's decision context.\" },\n { field: \"category_id\", code: \"optional\",\n detail: \"cat_... from list_categories. A graduated category can auto-send without a human.\" },\n { field: \"policy\", code: \"review_policy\", detail: `${policy} (source: ${source})` },\n { field: \"retry_with\", code: \"example\", detail: INTENT_RETRY_EXAMPLE },\n ]),\n );\n}\n\n/** The literal JSON an agent splices into its original request to fix a 422 in one turn. */\nexport const INTENT_RETRY_EXAMPLE =\n '{\"intent\":{\"summary\":\"Follow up with vp@acme.com on the Q3 pilot; 2 prior touches\"}}';\n\n/**\n * A review-loop 409 carrying the recovery FACTS the agent needs: the live state,\n * the CAS keys a legal retry must quote, and the verbs that ARE legal now. The\n * split between `stale` / `wrong_state` / `terminal` is the whole point - only\n * `stale` and `born_stale` are worth retrying.\n */\nfunction reviewConflict(\n code: \"stale\" | \"wrong_state\" | \"terminal\" | \"born_stale\",\n review: Review,\n detail: string,\n): ApiError {\n const fields: ProblemField[] = [\n { field: \"state\", code: review.state, detail: \"the draft's current state\" },\n ];\n if (code === \"terminal\") {\n if (review.sent_message_id) {\n fields.push({\n field: \"sent_message_id\",\n code: review.sent_message_id,\n detail: \"the message that was actually delivered\",\n });\n }\n } else {\n fields.push(\n { field: \"revision\", code: String(review.revision), detail: \"current revision - use as parent_revision\" },\n { field: \"version\", code: String(review.version), detail: \"current row version\" },\n );\n }\n for (const action of allowedAgentActions(review.state)) {\n fields.push({ field: \"allowed_action\", code: action, detail: ALLOWED_ACTION_DETAIL[action] ?? \"\" });\n }\n return problemError(mockProblem(code, 409, \"Conflict\", detail, fields));\n}\n\n/** One-line \"why you would call this\" per advertised verb, so it reads the same everywhere. */\nconst ALLOWED_ACTION_DETAIL: Readonly<Record<string, string>> = {\n submit_revision: \"post a new draft under parent_revision\",\n post_review_chat: \"ask the reviewer a clarifying question\",\n restamp_review: \"assert the draft is current against the rules without redrafting\",\n cancel_review: \"withdraw this review\",\n get_review: \"re-read the draft\",\n list_review_events: \"wait for the delivery outcome\",\n};\n\n/** Mock 404 helper (mirrors the transport's). */\nfunction notFoundMock(kind: string, id: string): NotFoundError {\n return new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `No ${kind} found for \"${id}\" in the offline mock.`,\n });\n}\n\n/** Materialize a forward's quoted body, exactly as the server does at submit time. */\nfunction forwardBodyText(note: string, parent: Message): string {\n return `${note}\\n\\n---------- Forwarded message ----------\\nFrom: ${parent.from.email}\\nSubject: ${parent.subject}\\n\\n${parent.text}`;\n}\n\n/**\n * A self-contained, deterministic-enough in-memory backend implementing the subset of behavior the\n * SDK exposes. One instance per mock client so tests/examples don't bleed into each other.\n */\nexport class MockBackend {\n private state: MockState = freshState();\n\n reset(): void {\n this.state = freshState();\n }\n\n enroll(req: EnrollRequest): EnrollResponse {\n const existingId = this.state.agentByHandle.get(req.agent_handle);\n const agentId = existingId ?? rid(\"agt\");\n if (!existingId) {\n const agent: Agent = {\n id: agentId,\n name: req.agent_name ?? null,\n status: \"active\",\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n created_at: now(),\n metadata: {},\n };\n this.state.agents.set(agentId, agent);\n this.state.agentByHandle.set(req.agent_handle, agentId);\n }\n // Mirror the frozen EnrollResult wire shape EXACTLY (agent_id, agent_key, scopes,\n // org_id, project_id) so SDK tests exercise the same fields the live server emits -\n // no agent_key_prefix/expires_at/mailboxes_* (those are NOT in the contract).\n return {\n agent_id: agentId,\n agent_key: `pk_agent_proj_${agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n // The issued key is bound to the token's resolved org/project; the agent cannot change it.\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n };\n }\n\n /**\n * Self-signup (Slice E). Returns a LIMITED-scope key and a first inbox; the OTP\n * is held in-memory (mock only) so `verify` can elevate to full scope. Idempotent\n * on human_email: a re-call reuses the tenant/agent and rotates the OTP.\n */\n signUp(req: SignUpRequest): SignUpResponse {\n const email = req.human_email.trim().toLowerCase();\n const existing = this.state.signupByEmail.get(email);\n const customerId = existing?.customerId ?? `cus_pn_signup_${rid(\"c\").slice(2)}`;\n const agentId = existing?.agentId ?? rid(\"agt\");\n const address =\n existing?.address ?? `${validatedSharedLocalPart(req.username ?? randomHandle())}@${FREE_SHARED_DOMAIN}`;\n // Stable offline code keeps the full signup → mailbox handoff executable in\n // examples and contract tests without ever weakening the live API's CSPRNG.\n const otp = \"492013\";\n this.state.signupByEmail.set(email, { customerId, agentId, address, otp, verified: false });\n return {\n customer_id: customerId,\n agent_id: agentId,\n agent_key: `pk_agent_${agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n key_prefix: `pk_agent_${agentId.slice(4, 8)}`,\n scopes: [\"signup:verify\"],\n address,\n verified: false,\n otp_sent_to: email,\n otp_expires_at: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n message: \"A verification code was sent to your email. Call verify with it.\",\n };\n }\n\n /** Confirm a signup OTP and return a full-scope key (mock). */\n verify(req: VerifyRequest): VerifyResponse {\n // The mock matches the OTP against any pending signup (single-tenant fixture).\n for (const [, s] of this.state.signupByEmail) {\n if (!s.verified && s.otp === req.otp.trim()) {\n s.verified = true;\n return {\n agent_id: s.agentId,\n agent_key: `pk_agent_${s.agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n key_prefix: `pk_agent_${s.agentId.slice(4, 8)}`,\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\"],\n address: s.address,\n verified: true,\n message:\n \"Verified. The inbox is ready; use read_messages, then get_message with a returned message id.\",\n mailbox_quickstart: mailboxQuickstart(s.address),\n };\n }\n }\n throw new Error(\"verification code invalid or expired\");\n }\n\n /** Introspect the mock principal (GET /v1/auth/me). */\n whoami(): WhoAmI {\n return {\n customer_id: \"cus_pn_mock\",\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n agent_id: this.state.agents.keys().next().value ?? \"agt_mock\",\n key_id: \"pkey_mock\",\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n };\n }\n\n createInbox(req: CreateInboxRequest): Inbox {\n // project_id is an assertion (never a selector): a mismatch is 403.\n assertProjectMatch(req.project_id);\n if (req.client_id) {\n const existing = this.state.inboxByClientId.get(req.client_id);\n if (existing) {\n // Idempotent replay returns the existing inbox verbatim (incl. its metadata).\n const inbox = this.state.inboxes.get(existing);\n if (inbox) return inbox;\n }\n }\n // Validate (and snapshot) the create-time metadata: no null deletes on create.\n const metadata = req.metadata ? mergeMetadata({}, req.metadata) : {};\n const domain = req.domain ?? PAID_SHARED_DOMAIN;\n const normalizedDomain = domain.trim().toLowerCase();\n const isSharedDomain = normalizedDomain === PAID_SHARED_DOMAIN || normalizedDomain === FREE_SHARED_DOMAIN;\n const username = isSharedDomain ? validatedSharedLocalPart(req.username ?? randomHandle()) : (req.username ?? randomHandle());\n const id = rid(\"ibx\");\n const inbox: Inbox = {\n object: \"inbox\",\n id,\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n address: `${username}@${domain}`,\n username,\n domain,\n display_name: req.display_name ?? null,\n status: \"live\",\n onboarding_mode: req.domain ? \"ns_delegated\" : \"shared\",\n agent_id: null,\n daily_send_limit: DEFAULT_DAILY_SEND_LIMIT,\n direct_smtp_enabled: false,\n webhook_url: req.webhook_url ?? null,\n metadata,\n created_at: now(),\n ...(req.return_credentials\n ? {\n credentials: {\n imap_host: \"smtp.extrovert.dev\",\n imap_port: 993,\n smtp_host: \"smtp.extrovert.dev\",\n smtp_port: 587,\n username: `${username}@${domain}`,\n password: rid(\"mbpw\").slice(5),\n },\n }\n : {}),\n };\n this.state.inboxes.set(id, inbox);\n this.state.inboxes.set(inbox.address, inbox);\n this.state.messages.set(inbox.address, []);\n if (req.client_id) this.state.inboxByClientId.set(req.client_id, id);\n this.state.mailboxesUsed += 1;\n return inbox;\n }\n\n listInboxes(params: ListInboxesParams = {}): Page<Inbox> {\n let items = [...new Set(this.state.inboxes.values())].filter(\n (ibx) => ibx.id.startsWith(\"ibx\"),\n );\n if (params.domain) items = items.filter((i) => i.domain === params.domain);\n if (params.status) items = items.filter((i) => i.status === params.status);\n return { items, total: items.length };\n }\n\n getInbox(address: string): Inbox | undefined {\n const inbox = this.state.inboxes.get(address);\n if (!inbox) return undefined;\n // effective_review_policy rides the SINGLE-inbox read only - the list path\n // omits it on the server (it would be one settings read per row for a value\n // identical across the org), so the mock omits it there too. Reading it once at\n // start-up is how an agent plans its first send instead of discovering the\n // policy by being refused 422.\n return { ...inbox, effective_review_policy: this.reviewPolicyFor(inbox.address) };\n }\n\n /**\n * Normalize an inbox ref (opaque id OR address alias) to the canonical address the\n * mock keys its message/thread/contact maps on. The SDK now routes inbox ops by the\n * canonical opaque `id` when it holds a full record (matching the contract's\n * canonical-key semantics), so the mock must resolve an id back to its address -\n * both key `state.inboxes` (same object), `state.messages` keys by address only.\n * Unknown refs pass through unchanged so the existing not-found paths still fire.\n */\n private addrOf(ref: string): string {\n return this.state.inboxes.get(ref)?.address ?? ref;\n }\n\n updateInbox(address: string, req: UpdateInboxRequest): Inbox | undefined {\n // project_id is an assertion (never a selector): a mismatch is 403.\n assertProjectMatch(req.project_id);\n const inbox = this.state.inboxes.get(address);\n if (!inbox) return undefined;\n if (req.display_name !== undefined) {\n inbox.display_name = req.display_name === \"\" ? null : req.display_name;\n }\n if (req.webhook_url !== undefined) {\n inbox.webhook_url = req.webhook_url === \"\" ? null : req.webhook_url;\n }\n if (req.daily_send_limit !== undefined) {\n if (\n !Number.isInteger(req.daily_send_limit) ||\n req.daily_send_limit < 1 ||\n req.daily_send_limit > 10_000\n ) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: \"daily_send_limit must be an integer from 1 through 10000.\",\n });\n }\n inbox.daily_send_limit = req.daily_send_limit;\n }\n // Metadata: shallow merge, per-key null deletes, top-level null clears all,\n // omitted leaves unchanged (see UpdateInboxRequest.metadata).\n if (req.metadata !== undefined) {\n inbox.metadata = mergeMetadata(inbox.metadata, req.metadata);\n }\n // The record is shared by id + address keys (same object), so both views update.\n return inbox;\n }\n\n deleteInbox(address: string): void {\n const inbox = this.state.inboxes.get(address);\n if (inbox) {\n this.state.inboxes.delete(inbox.id);\n this.state.inboxes.delete(inbox.address);\n this.state.messages.delete(inbox.address);\n }\n }\n\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n // The mock binds every key to MOCK_PROJECT_ID; the wildcard \"-\" (org breadth) is\n // accepted for an org-tier key. A concrete project outside the bound project is a\n // 404 (out-of-ceiling), mirroring the server's fail-closed addressing. An inbox\n // is resolved by its opaque id OR its address alias (both key the same map).\n\n /** Resolve the project path segment against the mock's bound project (fail-closed). */\n private resolveProjectSegment(projectId: string): void {\n if (projectId === \"-\" || projectId === MOCK_PROJECT_ID) return;\n // A concrete, out-of-ceiling project id is a 404 (never an existence oracle).\n throw new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `project \"${projectId}\" is outside this key's ceiling.`,\n });\n }\n\n createInboxInProject(projectId: string, req: CreateInboxRequest): Inbox {\n // A bare org wildcard create needs a concrete project (breadth_required) - the\n // mock has a single project, so \"-\" still resolves to it for ergonomics.\n this.resolveProjectSegment(projectId);\n return this.createInbox(req);\n }\n\n listInboxesInProject(projectId: string, params: ProjectInboxListParams = {}): List<Inbox> {\n this.resolveProjectSegment(projectId);\n let items = [...new Set(this.state.inboxes.values())].filter((ibx) => ibx.id.startsWith(\"ibx\"));\n // Opaque-cursor pagination over the offset-based mock store.\n const limit = Math.min(Math.max(params.limit ?? 50, 1), 100);\n const offset = params.cursor ? decodeMockCursor(params.cursor) : 0;\n const slice = items.slice(offset, offset + limit);\n const hasMore = offset + limit < items.length;\n return {\n object: \"list\",\n data: slice,\n has_more: hasMore,\n next_cursor: hasMore ? encodeMockCursor(offset + limit) : null,\n };\n }\n\n getInboxInProject(projectId: string, inboxId: string): Inbox | undefined {\n this.resolveProjectSegment(projectId);\n return this.state.inboxes.get(inboxId);\n }\n\n updateInboxInProject(projectId: string, inboxId: string, req: UpdateInboxRequest): Inbox | undefined {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return undefined;\n return this.updateInbox(inbox.address, req);\n }\n\n deleteInboxInProject(projectId: string, inboxId: string): boolean {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return false;\n this.deleteInbox(inbox.address);\n return true;\n }\n\n getInboxCredentialsInProject(projectId: string, inboxId: string): InboxCredentials | undefined {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return undefined;\n return (\n inbox.credentials ?? {\n imap_host: \"smtp.extrovert.dev\",\n imap_port: 993,\n smtp_host: \"smtp.extrovert.dev\",\n smtp_port: 587,\n username: inbox.address,\n password: rid(\"mbpw\").slice(5),\n }\n );\n }\n\n // ---- Outbound: ONE policy-governed path (mock mirror of SubmitForReview) ----\n //\n // send / reply / forward / submitForReview / submitReplyForReview used to be five\n // separate mock implementations, and only the two `submit*` ones knew the review\n // loop existed. That is the same shape as the server bug this change set fixes:\n // policy enforcement living in a code path a caller can route around. On the real\n // server all five are ONE handler calling ONE service entry point, so they are one\n // method here too. If a rule can be bypassed by picking a different SDK method,\n // the mock will happily certify an agent that production refuses.\n //\n // The order below mirrors Service.SubmitForReview exactly, and the order is\n // load-bearing:\n //\n // 1. resolve the policy (inbox override > account default > require_review floor)\n // 2. default the mode from the policy + whether the caller asserted one\n // 3. PRE-FLIGHT: contact lists + suppression, on the FULL recipient set\n // 4. the intent gate (422 intent_required)\n // 5. route: auto-send, or park in needs_review\n //\n // (3) before (4) matters: a blocked or suppressed recipient is a fact no amount of\n // intent will fix, and answering `intent_required` first would send the agent off\n // to add an intent and retry straight into the same wall.\n\n /** The RESOLVED review policy for an inbox: per-inbox override, else the account default. */\n reviewPolicyFor(address: string): ReviewPolicy {\n return this.state.inboxReviewPolicy.get(this.addrOf(address)) ?? this.state.orgReviewPolicy;\n }\n\n /**\n * Mock-only: set the ACCOUNT-level review policy (the console/admin plane sets\n * this on the real server; there is no agent-plane write for it). Use it to\n * exercise an org that has been configured for direct sending.\n */\n setReviewPolicy(policy: ReviewPolicy): void {\n this.state.orgReviewPolicy = policy;\n }\n\n /** Mock-only: set (or clear) the per-inbox override, which beats the account default. */\n setInboxReviewPolicy(address: string, policy: ReviewPolicy | undefined): void {\n const addr = this.addrOf(address);\n if (policy === undefined) this.state.inboxReviewPolicy.delete(addr);\n else this.state.inboxReviewPolicy.set(addr, policy);\n }\n\n send(address: string, req: SendRequest): SendOutcome {\n address = this.addrOf(address);\n return this.submitOutbound({\n address,\n kind: \"send\",\n req,\n to: toArray(req.to),\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject: req.subject ?? \"\",\n text: req.text ?? \"\",\n html: req.html,\n deliver: () => this.deliverSend(address, req),\n });\n }\n\n reply(address: string, req: ReplyRequest): SendOutcome {\n address = this.addrOf(address);\n // Envelope materialization: the reply's recipients and `Re:` subject are derived\n // from the parent HERE, before the pre-flight, so the block/suppression checks\n // screen the addresses that will actually be mailed and the reviewer reads the\n // real subject instead of an empty one.\n const env = this.deriveReplyEnvelope(address, req);\n return this.submitOutbound({\n address,\n kind: \"reply\",\n req,\n to: env.to,\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject: env.subject,\n text: req.text ?? \"\",\n html: req.html,\n deliver: () => this.deliverReply(address, req, env),\n });\n }\n\n forward(address: string, messageId: string, req: ForwardRequest): SendOutcome {\n address = this.addrOf(address);\n const parent = (this.state.messages.get(address) ?? []).find((m) => m.id === messageId);\n if (!parent) throw notFoundMock(\"message\", messageId);\n // A forward is materialized at submit for the same reason a reply is, plus one\n // that is specific to it: the human must review the ACTUAL quoted thread they\n // are about to release to new recipients, not a note whose quote gets rebuilt\n // from the live parent at approval time.\n const subject = fwdSubject(parent.subject);\n const text = forwardBodyText(req.text ?? \"\", parent);\n return this.submitOutbound({\n address,\n kind: \"forward\",\n req,\n to: toArray(req.to),\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject,\n text,\n deliver: () =>\n this.deliverRaw(address, {\n to: toArray(req.to),\n cc: toArray(req.cc),\n subject,\n text,\n threadId: parent.thread_id,\n }),\n });\n }\n\n /**\n * Submit a new message for review (mock). Rides the SAME endpoint as `send` on\n * the real server, so it is literally the same call here: the resolved policy -\n * not which SDK method you picked - decides whether the message is queued\n * (`kind:\"queued_for_review\"`) or delivered.\n */\n submitForReview(address: string, req: SendRequest): SendOutcome {\n return this.send(address, req);\n }\n\n /** Submit an in-thread reply for review (mock). Same endpoint, same routing, as `reply`. */\n submitReplyForReview(address: string, req: ReplyRequest): SendOutcome {\n return this.reply(address, req);\n }\n\n /**\n * The single enforcement point. Everything above funnels here; nothing else in\n * the mock may reach `deliver*` on the agent plane.\n */\n private submitOutbound(params: {\n address: string;\n kind: \"send\" | \"reply\" | \"forward\";\n req: {\n mode?: \"review\" | \"direct\";\n intent?: { summary: string; meta?: Record<string, unknown> };\n category_id?: string;\n };\n to: string[];\n cc: string[];\n bcc: string[];\n subject: string;\n text: string;\n html?: string;\n deliver: () => SendResult;\n }): SendOutcome {\n const { address, kind, req } = params;\n const policy = this.reviewPolicyFor(address);\n\n // A caller \"opted in\" by mentioning the review loop at all. It decides the\n // RESPONSE SHAPE and the mode default - never whether the policy applies.\n const optedIn =\n req.mode !== undefined || req.intent !== undefined || (req.category_id ?? \"\") !== \"\";\n\n // POLICY-AWARE MODE DEFAULT. Order is load-bearing: an explicit assertion wins\n // (the policy may still refuse it); then a caller that supplied any review field\n // but no mode keeps the historical opt-in meaning (\"queue this\"); only then does\n // an allow_direct org's bare send stay direct; everything else - require_review,\n // auto_send_graduated, and any policy value we do not recognize - falls to\n // review. Unknown policies MUST land there: a value a newer node wrote must\n // never be read by an older client as permission.\n let mode: \"review\" | \"direct\";\n if (req.mode !== undefined) mode = req.mode;\n else if (optedIn) mode = \"review\";\n else if (policy === \"allow_direct\") mode = \"direct\";\n else mode = \"review\";\n\n // PRE-FLIGHT on the full recipient set (to + cc + bcc), before the intent gate.\n const recipients = [...params.to, ...params.cc, ...params.bcc];\n this.enforceSendPolicy(address, recipients);\n this.enforceSuppression(recipients);\n\n // D3 intent gate. NOTHING is written and NOTHING is sent when it fires, which\n // is exactly what makes the amended retry safe.\n if (resolvedModeIsReview(policy, mode) && !req.intent?.summary?.trim()) {\n throw intentRequiredError(policy, this.state.inboxReviewPolicy.has(address));\n }\n\n const review = this.createReviewRecord(address, {\n kind,\n subject: params.subject,\n text: params.text,\n html: params.html,\n to: params.to,\n cc: params.cc,\n bcc: params.bcc,\n intent: req.intent,\n categoryId: req.category_id,\n mode,\n });\n\n // ROUTING. Two auto-send paths reach delivery without a human:\n // - allow_direct + an asserted (or defaulted) `direct` mode\n // - auto_send_graduated + a category the agent named\n // Everything else - including auto_send_graduated with NO category - is held,\n // and the gate_outcome records why so the agent is not left guessing.\n const directAuto = policy === \"allow_direct\" && mode === \"direct\";\n const graduatedAuto = policy === \"auto_send_graduated\" && (req.category_id ?? \"\") !== \"\";\n if (!directAuto && !graduatedAuto) {\n if (policy === \"auto_send_graduated\") review.gate_outcome = \"held:no_category\";\n this.state.reviews.set(review.id, review);\n return {\n kind: \"queued_for_review\",\n review: { id: review.id, state: review.state, effective_mode: review.effective_mode },\n };\n }\n\n const sent = params.deliver();\n const tracking = { submission_id: sent.submission_id, sent_message_id: sent.sent_message_id,\n sent_copy_status: sent.sent_copy_status, transport: sent.transport };\n this.markReviewAutoSent(review, sent, directAuto ? \"agent_direct\" : \"graduated_auto\");\n\n if (!optedIn) {\n // The LEGACY 202 body, byte-shape-identical to what the server still returns\n // for a caller that never mentioned the review loop - plus the additive\n // `review_id`, which is the only handle a crashed agent has on this path.\n // Note the asymmetry, and that it is the server's, not ours: `send` answers\n // {status, message_id, review_id} with NO thread_id; reply/forward answer\n // {message_id, thread_id, review_id} with no status.\n return kind === \"send\"\n ? { message_id: sent.message_id, status: \"sent\", review_id: review.id, ...tracking }\n : { message_id: sent.message_id, thread_id: sent.thread_id, review_id: review.id, ...tracking };\n }\n const message: { id: string; thread_id?: string } = { id: sent.message_id };\n if (sent.thread_id) message.thread_id = sent.thread_id;\n return { kind: \"sent\", message, review: { id: review.id, state: review.state }, ...tracking };\n }\n\n /**\n * Move a review to `state` and keep `closed` in lockstep.\n *\n * `closed` is DERIVED, never independently assigned, because the two drifting\n * apart is worse than either being wrong: an agent that polls `closed` on a row\n * whose state says otherwise has no way to tell which one to believe.\n */\n private setReviewState(review: Review, state: ReviewState): void {\n review.state = state;\n review.closed = CLOSED_REVIEW_STATES.has(state);\n }\n\n /** Mark a review delivered on an auto-send path and emit its terminal `sent` nudge. */\n private markReviewAutoSent(review: Review, sent: SendResult, sendPath: string): void {\n this.setReviewState(review, \"auto_sent\");\n review.version += 1;\n review.sent_message_id = sent.message_id_header ?? sent.message_id;\n review.send_path = sendPath;\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(review.id, review);\n this.enqueueTerminalNudge(review);\n }\n\n /** Raw delivery for a send - no policy, only reachable from submitOutbound. */\n private deliverSend(address: string, req: SendRequest): SendResult {\n return this.deliverRaw(address, {\n to: toArray(req.to),\n cc: toArray(req.cc),\n subject: req.subject,\n text: req.text ?? \"\",\n html: req.html,\n threadId: rid(\"thr\"),\n attachments: req.attachments,\n });\n }\n\n /** Raw delivery for a reply - no policy, only reachable from submitOutbound. */\n private deliverReply(address: string, req: ReplyRequest, env: ReplyEnvelope): SendResult {\n return this.deliverRaw(address, {\n to: env.to,\n cc: toArray(req.cc),\n subject: env.subject,\n text: req.text ?? \"\",\n html: req.html,\n threadId: env.threadId,\n attachments: req.attachments,\n });\n }\n\n /** Append the outbound message and shape the legacy send result. */\n private deliverRaw(\n address: string,\n opts: {\n to: string[];\n cc?: string[];\n subject: string;\n text: string;\n html?: string;\n threadId: string;\n attachments?: AttachmentInput[];\n },\n ): SendResult {\n const msg = this.appendMessage(address, {\n direction: \"outbound\",\n from: address,\n to: opts.to,\n cc: opts.cc,\n subject: opts.subject,\n text: opts.text,\n html: opts.html,\n threadId: opts.threadId,\n attachments: opts.attachments,\n });\n return {\n message_id: msg.id,\n thread_id: msg.thread_id,\n submission_id: (msg.submission_id = `sub_${msg.id}`),\n sent_message_id: (msg.sent_message_id = msg.id),\n sent_copy_status: (msg.sent_copy_status = \"stored\"),\n transport: (msg.transport = { accepted: opts.to.length + (opts.cc?.length ?? 0) }),\n message_id_header: msg.message_id,\n status: \"sent\",\n created_at: now(),\n };\n }\n\n /**\n * Derive a reply's recipients / `Re:` subject / thread from the parent, the way\n * the server does before it writes the review row.\n */\n private deriveReplyEnvelope(address: string, req: ReplyRequest): ReplyEnvelope {\n if (Boolean(req.thread_id) === Boolean(req.message_id)) {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message: \"provide exactly one of thread_id or message_id\",\n });\n }\n const all = this.state.messages.get(address) ?? [];\n let parent: Message | undefined;\n let threadId = req.thread_id;\n if (req.message_id) {\n parent = all.find((m) => m.id === req.message_id);\n if (!parent) throw notFoundMock(\"message\", req.message_id);\n threadId = parent.thread_id;\n } else if (req.thread_id) {\n const inThread = all.filter((m) => m.thread_id === req.thread_id);\n parent = inThread[inThread.length - 1];\n } else {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message: \"thread_id or message_id is required\",\n });\n }\n if (req.thread_id && req.expected_last_message_id && parent?.id !== req.expected_last_message_id) {\n throw new ConflictError({\n status: 409,\n code: \"conflict\",\n message: `thread advanced; latest message is ${parent?.id ?? \"unknown\"}`,\n });\n }\n const to: string[] = [];\n if (parent) {\n if (parent.from.email.toLowerCase() === address.toLowerCase()) {\n to.push(...parent.to.map(({ email }) => email).filter((email) => email.toLowerCase() !== address.toLowerCase()));\n } else {\n to.push(...(parent.reply_to?.length ? parent.reply_to : [parent.from]).map(({ email }) => email));\n }\n if (req.reply_all) for (const a of parent.to) if (a.email !== address) to.push(a.email);\n }\n return {\n to: to.length ? to : [\"reply@example.com\"],\n subject: parent ? reSubject(parent.subject) : \"Re:\",\n threadId: threadId ?? rid(\"thr\"),\n };\n }\n\n /** List review requests (mock), newest-first, with optional filters. */\n listReviews(params: ListReviewsParams = {}): Page<Review> {\n let items = [...this.state.reviews.values()].sort((a, b) =>\n b.created_at.localeCompare(a.created_at),\n );\n if (params.state !== undefined) {\n const states = Array.isArray(params.state) ? params.state : [params.state];\n items = items.filter((r) => states.includes(r.state));\n }\n if (params.category_id) items = items.filter((r) => r.category_id === params.category_id);\n if (params.inbox) {\n const inbox = params.inbox.toLowerCase();\n items = items.filter((r) => r.from_address.toLowerCase() === inbox);\n }\n return { items, total: items.length };\n }\n\n /** Get one review request (mock), or undefined when not found. */\n getReview(reviewId: string): Review | undefined {\n return this.state.reviews.get(reviewId);\n }\n\n /** Get a review's append-only thread turns (mock), or undefined when not found. */\n getReviewTurns(reviewId: string): Page<ReviewTurn> | undefined {\n if (!this.state.reviews.has(reviewId)) return undefined;\n const items = this.state.reviewTurns.get(reviewId) ?? [];\n return { items, total: items.length };\n }\n\n /**\n * Get the human's assembled feedback (mock; M5): the diff + the human comments /\n * rejection turns + the decision (derived from state). new_rules is empty in the\n * mock (rule provenance lives server-side). Undefined when not found.\n */\n getReviewFeedback(reviewId: string): ReviewFeedback | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const comments = turns\n .filter(\n (t) =>\n (t.turn_type === \"human_comment\" ||\n t.turn_type === \"human_reject\" ||\n t.turn_type === \"human_question\") &&\n (t.body ?? \"\").trim() !== \"\",\n )\n .map((t) => ({\n turn_id: t.id,\n actor_kind: t.actor_kind,\n body: t.body ?? \"\",\n actor_id: t.actor_id,\n created_at: t.created_at,\n }));\n let diffJson: Record<string, unknown> | undefined;\n for (const t of turns) {\n if ((t.turn_type === \"human_edit\" || t.turn_type === \"system_diff\") && t.diff_json) {\n diffJson = t.diff_json;\n }\n }\n const edited = !!review.sent_body_text || !!review.sent_subject || !!review.diff_unified;\n let decision: string;\n if (review.state === \"sent\" || review.state === \"auto_sent\" || review.state === \"approved\") {\n decision = edited ? \"edited\" : \"approved\";\n } else if (review.state === \"rejected\") {\n decision = \"rejected\";\n } else {\n decision = review.state;\n }\n return {\n review_id: reviewId,\n decision,\n diff_unified: review.diff_unified,\n diff_json: diffJson,\n comments,\n new_rules: [],\n };\n }\n\n /**\n * Post a chat turn on a review's thread (mock; M5). Idempotent on the optional key\n * (parity v21): a replay with the same key returns the same review without doubling\n * the turn. Flips in_review -> chatting on the first turn. Undefined when not found.\n */\n postReviewChat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n ): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const key = idempotencyKey?.trim();\n if (key) {\n const replayed = this.state.chatByIdempotencyKey.get(key);\n if (replayed) return replayed;\n }\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\n \"terminal\",\n review,\n `this review is ${review.state}; nothing will ever succeed on it. A front_run_next event is waiting on your queue.`,\n );\n }\n // needs_review IS a legal source for an AGENT question (D-5). The old guard's\n // rationale was right - an agent must not conjure a reviewer for a queued draft\n // - but its effect was wrong: after a reviewer-reject lands a draft back in\n // needs_review WITH feedback, the skill tells the agent to ask when the feedback\n // is ambiguous, and it could not. So the question is appended and the state is\n // deliberately NOT changed: `in_review` is a soft lock meaning a real human has\n // it open, and an agent may not fabricate that.\n if (\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"needs_review\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `post_review_chat is not legal while the draft is in '${review.state}'.`,\n );\n }\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_question\",\n actor_kind: \"agent\",\n body: req.text,\n created_at: now(),\n });\n this.state.reviewTurns.set(reviewId, turns);\n if (review.state === \"in_review\") {\n this.setReviewState(review, \"chatting\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n }\n // No nudge for the agent's OWN question - feedback_added is a HUMAN signal, and\n // waking a composer with its own message is how a drain loop starts spinning.\n if (key) this.state.chatByIdempotencyKey.set(key, review);\n return review;\n }\n\n /**\n * Post a new agent draft under a parent_revision CAS (mock; M5; D17). A mismatch is\n * a 409 STALE with NO mutation; a clean CAS re-renders the draft in place\n * (revision++), returns to needs_review. Undefined when not found.\n */\n submitRevision(reviewId: string, req: SubmitRevisionRequest): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n // The three-way 409 split, in the order an agent needs it.\n //\n // TERMINAL first: the review is over, nothing will ever succeed, and a\n // front_run_next nudge is left behind so an agent that only drains the queue\n // still learns it lost the race.\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, req.parent_revision);\n throw reviewConflict(\n \"terminal\",\n review,\n `this review is ${review.state}; a redraft will never succeed. A front_run_next event is waiting on your queue.`,\n );\n }\n // WRONG_STATE: the draft is still live but this VERB is illegal from here.\n // Never retry the same verb - read the allowed_action hints and pick another.\n // needs_review IS legal (D-1): a redraft bumps the revision, which IS a change,\n // so the self-edge that used to be banned is exactly the loop a reviewer-reject\n // hands back to the composer.\n if (\n review.state !== \"needs_review\" &&\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"rejected\" &&\n review.state !== \"stale\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `submit_revision is not legal while the draft is in '${review.state}'. Wait for a sent or send_failed review event.`,\n );\n }\n // STALE: the CAS failed. NOTHING is mutated, and the error carries the current\n // revision/version so the bounded retry needs no extra get_review.\n if (review.revision !== req.parent_revision) {\n throw reviewConflict(\n \"stale\",\n review,\n \"parent_revision is stale; re-read the review, re-apply your edit on top, and resubmit with the current revision\",\n );\n }\n if (req.version !== undefined && review.version !== req.version) {\n throw reviewConflict(\n \"stale\",\n review,\n \"version is stale; re-read the review, re-apply your edit on top, and resubmit\",\n );\n }\n review.revision += 1;\n review.version += 1;\n this.setReviewState(review, \"needs_review\");\n if (req.subject !== undefined) review.proposed_subject = req.subject;\n // `text` is canonical, `body` a permanent alias - resolved here EXACTLY as the\n // server does, including the conflicting_alias rejection. The mock must not be\n // more permissive than the wire: a fixture that quietly accepts what the server\n // refuses is how a 67-day-old send bug stayed invisible behind green demos.\n if (\n req.text !== undefined &&\n req.body !== undefined &&\n req.text !== req.body\n ) {\n throw new ValidationError({\n status: 400,\n code: \"conflicting_alias\",\n message: \"`body` is a deprecated alias for `text`; send one or the other\",\n });\n }\n const revisedText = req.text ?? req.body;\n if (revisedText !== undefined) review.proposed_body_text = revisedText;\n if (req.html !== undefined) review.proposed_body_html = req.html;\n // Attachments REPLACE when present, are untouched when the field is omitted,\n // and are cleared by an explicit empty array. Without this a redraft after\n // reviewer feedback would ship a message the human reviewed WITH a file and the\n // recipient received without one.\n if (req.attachments !== undefined) {\n this.state.reviewAttachments.set(reviewId, req.attachments);\n }\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_draft\",\n actor_kind: \"agent\",\n body: revisedText ?? review.proposed_body_text,\n revision: review.revision,\n created_at: now(),\n });\n this.state.reviewTurns.set(reviewId, turns);\n // Deliberately NO nudge: the composer must not be woken by its own redraft.\n // (redraft_requested is what a REVIEWER's reject/escalate/sweep enqueues; see\n // simulateReviewRejected.)\n return review;\n }\n\n /** Withdraw a pending review (mock; M5) to the terminal cancelled state. */\n cancelReview(reviewId: string): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n this.setReviewState(review, \"cancelled\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * Re-stamp a draft's rules-version WITHOUT redrafting (mock; D19/§8 $0 escape valve).\n * Advances the version the draft is current against; no revision bump, no body change.\n * A terminal/sent draft 409s; against_version above the category's current\n * rules-version is 400. The mock has no per-category rules_version on the Review, so it\n * just bumps the row version and returns it (the body is untouched).\n */\n restampReview(reviewId: string, req: RestampReviewRequest): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n // restamp_review is ONLY the \"I re-read the rules and nothing needed to change\"\n // escape valve. It applies to a draft still sitting in the human queue; an\n // approved or failed draft has already left it.\n if (\n review.state !== \"needs_review\" &&\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"stale\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `restamp_review is not legal while the draft is in '${review.state}'.`,\n );\n }\n if (req.against_version < 0) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: \"against_version must be >= 0\",\n });\n }\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n return review;\n }\n\n // ---- BYO review-agent decision plane (M8 Slice B; D5/§9) ---------------\n //\n // The mock single-agent store acts as BOTH composer and reviewer, surfacing the\n // reviewer decision surface + the two circuit breakers without modeling the link\n // table. hop_count is tracked in a side map; the breakers use the schema defaults\n // (max_hops=3, review_deadline_s=86400). A draft is \"reviewer-held\" iff in_review/\n // chatting (the queue states a reviewer can decide).\n\n /**\n * Test helper: create a draft already ASSIGNED to a reviewer (in_review), mirroring\n * how the real server routes a parked draft to a linked review-agent. Returns the\n * review id so a test can drive the reviewer decision plane offline. `createdAtMs`\n * (optional) backdates created_at so a test can trip the hard review_deadline breaker.\n */\n seedReviewerHeldReview(opts: { fromAddress: string; createdAtMs?: number } = { fromAddress: \"reviewer@extrovertmail.com\" }): string {\n const review = this.createReviewRecord(opts.fromAddress, {\n kind: \"send\",\n subject: \"Pilot proposal\",\n text: \"Here is the Q3 pilot proposal.\",\n to: [\"vp@acme.com\"],\n intent: { summary: \"send pilot proposal\", meta: { goal: \"book_meeting\" } },\n });\n this.setReviewState(review, \"in_review\");\n if (opts.createdAtMs !== undefined) {\n review.created_at = new Date(opts.createdAtMs).toISOString();\n }\n this.state.reviews.set(review.id, review);\n return review.id;\n }\n\n /** Get the reviewer's decision context for a review (mock; §9). */\n getReviewDecisionContext(reviewId: string): ReviewDecisionContext | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const hopCount = this.state.reviewHopCounts.get(reviewId) ?? 0;\n const maxHops = 3;\n const deadlineMs = new Date(review.created_at).getTime() + 86400 * 1000;\n const deadline = new Date(deadlineMs).toISOString();\n const deadlinePassed = Date.now() >= deadlineMs;\n const hopsExhausted = hopCount >= maxHops;\n const forceToHuman = hopsExhausted || deadlinePassed;\n return {\n review,\n turns,\n hop_count: hopCount,\n max_hops: maxHops,\n review_deadline: deadline,\n deadline_passed: deadlinePassed,\n hops_exhausted: hopsExhausted,\n force_to_human: forceToHuman,\n force_reason: hopsExhausted\n ? \"max_hops_reached\"\n : deadlinePassed\n ? \"review_deadline_passed\"\n : undefined,\n };\n }\n\n /**\n * Submit a reviewer decision (mock; §9). approve/edit → the platform \"sends\" with the\n * composer's creds (kind=sent, send_path=reviewer_approved); reject → back to the\n * composer (needs_review, hop_count++) UNLESS a breaker forces the human; escalate →\n * the human queue. revision/version are the CAS (409 STALE on mismatch, NO mutation).\n */\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest): ReviewerDecisionResult | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n if (review.state !== \"in_review\" && review.state !== \"chatting\") {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `a reviewer can only decide a review it holds (got '${review.state}').`,\n );\n }\n if (review.revision !== req.revision) {\n throw reviewConflict(\n \"stale\",\n review,\n \"revision is stale; re-read the decision context and retry\",\n );\n }\n if (req.version !== undefined && review.version !== req.version) {\n throw reviewConflict(\n \"stale\",\n review,\n \"version is stale; re-read the decision context and retry\",\n );\n }\n\n const hopCount = this.state.reviewHopCounts.get(reviewId) ?? 0;\n const deadlineMs = new Date(review.created_at).getTime() + 86400 * 1000;\n const breakerTripped = hopCount >= 3 || Date.now() >= deadlineMs;\n\n if (req.action === \"approve\" || req.action === \"edit\") {\n if (req.action === \"edit\") {\n if (req.subject !== undefined) review.sent_subject = req.subject;\n if (req.body !== undefined) review.sent_body_text = req.body;\n }\n this.setReviewState(review, \"sent\");\n review.version += 1;\n review.sent_message_id = `<${rid(\"mid\")}@acme.test>`;\n // A BYO reviewer approve is still a delivery the COMPOSER has to learn about -\n // send_path is what tells the two release paths apart on the terminal nudge.\n review.send_path = \"reviewer_approved\";\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return { kind: \"sent\", review, sent: true, message_id: review.sent_message_id, sent_to_human: false };\n }\n\n // reject / escalate → the human queue (needs_review). A reject within budget bumps\n // hop_count and goes back to the composer; a tripped breaker FORCES the human.\n this.setReviewState(review, \"needs_review\");\n review.version += 1;\n if (req.feedback !== undefined) review.decision_feedback = req.feedback;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n\n let forcedByBreaker: string | undefined;\n if (req.action === \"reject\" && !breakerTripped) {\n this.state.reviewHopCounts.set(reviewId, hopCount + 1);\n } else if (req.action === \"reject\" && breakerTripped) {\n forcedByBreaker = hopCount >= 3 ? \"max_hops_reached\" : \"review_deadline_passed\";\n }\n return { kind: \"sent_to_human\", review, sent: false, sent_to_human: true, forced_by_breaker: forcedByBreaker };\n }\n\n // ---- Category registry (Review Loop, D9/D10) --------------------------\n\n /**\n * Browse the registry (mock), newest-first, excluding merged/soft-deleted. `match`\n * is a pure lexical filter (every token must appear in name+description) - NO LLM,\n * mirroring the server.\n */\n private categoryUsage(category: Category): Category {\n const now = Date.now();\n const rows = [...this.state.reviews.values()].filter(r => r.category_id === category.id && Date.parse(r.created_at) <= now);\n const count = (days: number) => rows.filter(r => Date.parse(r.created_at) >= now - days * 86_400_000).length;\n return { ...category, message_count_7d: count(7), message_count_30d: count(30), message_count_90d: count(90),\n last_used_at: rows.map(r => r.created_at).sort().slice(-1)[0],\n pending_review_count: rows.filter(r => [\"needs_review\",\"in_review\",\"chatting\",\"rejected\",\"stale\",\"approved\"].includes(r.state)).length };\n }\n\n listCategories(params: ListCategoriesParams = {}): Page<Category> {\n let items = [...this.state.categories.values()]\n .filter((c) => !c.merged_into)\n .map(c => this.categoryUsage(c))\n .sort((a, b) => b.created_at.localeCompare(a.created_at));\n const tokens = (params.match ?? \"\").trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (tokens.length) {\n items = items.filter((c) => {\n const hay = `${c.name} ${c.description}`.toLowerCase();\n return tokens.every((t) => hay.includes(t));\n });\n }\n const field = ({ messages_7d: \"message_count_7d\", messages_90d: \"message_count_90d\", pending_reviews: \"pending_review_count\" } as const)[params.sort as \"messages_7d\"] ?? \"message_count_30d\";\n items.sort((a, b) => (params.sort === \"name\" ? a.name.toLowerCase().localeCompare(b.name.toLowerCase()) : params.sort === \"last_used\" ? 0 : (b[field] ?? 0) - (a[field] ?? 0)) || (b.last_used_at ?? \"\").localeCompare(a.last_used_at ?? \"\") || a.id.localeCompare(b.id));\n const offset = params.page ? JSON.parse(Buffer.from(params.page, \"base64url\").toString()).o : 0;\n const total = items.length, limit = params.limit ?? 100;\n const next = offset + limit < total ? Buffer.from(JSON.stringify({ o: offset + limit, v: 1 })).toString(\"base64url\") : undefined;\n return { items: items.slice(offset, offset + limit), total, next_cursor: next };\n }\n\n /** Get one category (mock), or undefined when not found. */\n getCategory(categoryId: string): Category | undefined {\n const category = this.state.categories.get(categoryId);\n return category ? this.categoryUsage(category) : undefined;\n }\n\n /** Propose a category (mock): stands immediately, author_kind=agent (D9). */\n proposeCategory(req: ProposeCategoryRequest): Category {\n const name = req.name.trim();\n if ([...this.state.categories.values()].some(c => !c.merged_into && c.name.toLowerCase() === name.toLowerCase())) throw new ConflictError({ status: 409, code: \"conflict\", message: \"Category name already exists; browse and reuse it.\" });\n if (!name) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"name is required\" });\n }\n const ts = now();\n const cat: Category = {\n id: rid(\"cat\"),\n name,\n description: (req.description ?? \"\").trim(),\n scope: req.scope ?? \"org_shared\",\n state: \"supervised\",\n created_by_agent_id: \"agt_mock\",\n author_kind: \"agent\",\n rule_high_water: 0,\n rules_version: 0,\n created_at: ts,\n updated_at: ts,\n };\n this.state.categories.set(cat.id, cat);\n return cat;\n }\n\n /** Rename / re-describe a category (mock) - metadata only (D10). */\n updateCategory(categoryId: string, req: UpdateCategoryRequest): Category | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n if (req.name !== undefined) cat.name = req.name.trim();\n if (req.description !== undefined) cat.description = req.description.trim();\n cat.updated_at = now();\n this.state.categories.set(cat.id, cat);\n return cat;\n }\n\n // ---- Graduation + risk dial (Review Loop, D16/D6/D17) - agent READ + PROPOSE --\n\n /** The mock account-default risk dial (mirrors the server defaults). */\n private accountDial(): RiskDial[\"account\"] {\n return {\n min_confidence: 0.7,\n first_contact_gate: true,\n drift_demote_after: 3,\n canary_rate: 0.05,\n graduate_min_approvals: 20,\n graduate_min_age_hours: 24,\n auto_send_cap_per_day: 50,\n };\n }\n\n /**\n * Read the effective risk dial (mock): the account default + every category with an\n * inherited (null override) effective dial. The mock category carries no overrides,\n * so every category inherits - effective == account.\n */\n getRiskDial(): RiskDial {\n const account = this.accountDial();\n const categories = [...this.state.categories.values()]\n .filter((c) => !c.merged_into)\n .map((c) => ({\n category_id: c.id,\n min_confidence: null,\n first_contact_gate: null,\n drift_demote_after: null,\n canary_rate: null,\n graduate_min_approvals: null,\n graduate_min_age_hours: null,\n effective: { ...account },\n }));\n return { account, categories };\n }\n\n private nextGraduationState(state: Category[\"state\"]): string {\n if (state === \"supervised\") return \"auto_notify\";\n if (state === \"auto_notify\") return \"auto_silent\";\n return \"\";\n }\n\n /**\n * Read a category's graduation gate status (mock). The mock category has no\n * counters, so it reports zero clean approvals / zero drift against the account\n * defaults; can_graduate is true for supervised→auto_notify (no maturity gate).\n */\n getGraduationStatus(categoryId: string): GraduationStatus | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n const dial = this.accountDial();\n const next = this.nextGraduationState(cat.state);\n const approvalsMet = 0 >= dial.graduate_min_approvals;\n const ageMet = false;\n const maturityMet = approvalsMet && ageMet;\n const canGraduate =\n next === \"auto_notify\" ? true : next === \"auto_silent\" ? maturityMet : false;\n return {\n category_id: cat.id,\n state: cat.state,\n next_state: next,\n never_graduate: false,\n clean_approval_count: 0,\n graduate_min_approvals: dial.graduate_min_approvals,\n approvals_met: approvalsMet,\n age_hours: 0,\n graduate_min_age_hours: dial.graduate_min_age_hours,\n age_met: ageMet,\n maturity_gate_met: maturityMet,\n drift_count: 0,\n drift_demote_after: dial.drift_demote_after,\n can_graduate: canGraduate,\n };\n }\n\n /**\n * Propose graduating a category (mock): returns the current gate status without\n * changing the category state (D16 - an agent can never flip the bit).\n */\n proposeGraduation(categoryId: string, _req: ProposeGraduationRequest): GraduationStatus | undefined {\n return this.getGraduationStatus(categoryId);\n }\n\n /**\n * Read the D19/§8 backlog-reconciliation status (mock): counts the QUEUED drafts in a\n * category that are stale vs current-enough against the current rules-version. The\n * mock has no per-draft composed_* stamps on its Review fixtures, so every queued\n * draft reads as current-enough (composed 0 vs current 0) - the contract shape is\n * exercised; the integer-compare logic is covered by the Go tests.\n */\n getScanBacklogStatus(categoryId: string): ScanBacklogStatus | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n let queued = 0;\n for (const review of this.state.reviews.values()) {\n if (\n review.category_id === categoryId &&\n (review.state === \"needs_review\" ||\n review.state === \"in_review\" ||\n review.state === \"chatting\")\n ) {\n queued += 1;\n }\n }\n return {\n category_id: cat.id,\n state: cat.state,\n queued,\n current_enough: queued,\n stale: 0,\n current_category_rules_version: cat.rules_version,\n current_house_style_version: 0,\n staleness_tolerance: 0,\n };\n }\n\n /**\n * Read the demand-driven pacing state (mock - M7 Slice B/§8): the cursor + effective\n * window/ceiling/interval + each queued draft's classification. The mock has no cursor\n * (nothing reviewed) and no composed_* stamps, so every queued draft reads in-window-\n * fresh until the window fills, then ahead; the contract shape is exercised (the\n * cursor/staleness mechanics are covered by the Go tests).\n */\n getCategoryPacingState(categoryId: string): CategoryPacingState | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n const lookaheadWindow = 3;\n const queuedIds: string[] = [];\n for (const review of this.state.reviews.values()) {\n if (\n review.category_id === categoryId &&\n (review.state === \"needs_review\" ||\n review.state === \"in_review\" ||\n review.state === \"chatting\")\n ) {\n queuedIds.push(review.id);\n }\n }\n const items: PacingItem[] = queuedIds.map((id, i) => ({\n review_id: id,\n state: i < lookaheadWindow ? \"in_window_fresh\" : \"ahead\",\n }));\n return {\n category_id: cat.id,\n cursor_advanced_count: 0,\n lookahead_window: lookaheadWindow,\n rework_batch_max: 10,\n nudge_min_interval_ms: 5000,\n queued: queuedIds.length,\n in_window: Math.min(queuedIds.length, lookaheadWindow),\n redrafting: 0,\n items,\n };\n }\n\n // ---- Writing rules + house-style + precedence ladder + audit/undo ------\n\n /** rank a rule for the §7 ladder (mock mirror of the server's deterministic order). */\n private ruleRank(r: Rule): number[] {\n const hard = r.kind === \"hard\" ? 1 : 0;\n const spec = r.scope_agent_id ? 2 : r.scope === \"category\" ? 1 : 0;\n const human = r.author_kind === \"human\" ? 1 : 0;\n return [hard, spec, human, r.rev, r.priority];\n }\n\n /** Get the ORDERED active rule set (mock) - §7 ladder + category-before-general. */\n getRules(params: GetRulesParams = {}): RuleSnapshot {\n const active = [...this.state.rules.values()].filter((r) => r.status === \"active\");\n const byRank = (a: Rule, b: Rule): number => {\n const ra = this.ruleRank(a);\n const rb = this.ruleRank(b);\n for (let i = 0; i < ra.length; i += 1) {\n const da = ra[i] ?? 0;\n const db = rb[i] ?? 0;\n if (da !== db) return db - da;\n }\n return a.id < b.id ? -1 : 1;\n };\n let general: Rule[] = [];\n let category: Rule[] = [];\n if (!params.scope || params.scope === \"general\") {\n general = active.filter((r) => r.scope === \"general\").sort(byRank);\n }\n if (params.category_id && (!params.scope || params.scope === \"category\")) {\n category = active.filter((r) => r.scope === \"category\" && r.category_id === params.category_id).sort(byRank);\n }\n const items = [...category, ...general];\n return {\n items,\n total: items.length,\n house_style_version: 1,\n category_rules_version: params.category_id ? 1 : 0,\n rule_high_water: params.category_id ? 1 : 0,\n composition_token: params.scope ? undefined : `cmp_fixture_${params.category_id ?? \"general\"}`,\n composition_token_expires_at: params.scope ? undefined : new Date(Date.now() + 600_000).toISOString(),\n };\n }\n\n /** Save / edit a rule (mock) - append-only by supersession (D11). */\n private learnedRules = new Map<string, {fingerprint: string; result: LearnedReviewRule}>();\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest): LearnedReviewRule {\n const fingerprint = JSON.stringify({reviewId, req});\n const prior = this.learnedRules.get(req.client_id);\n if (prior) { if (prior.fingerprint !== fingerprint) throw new ValidationError({status:409,code:\"conflict\",message:\"learning retry identity changed\"}); return structuredClone(prior.result); }\n const turn = (this.state.reviewTurns.get(reviewId) ?? []).find(t => t.id === req.source_turn_id);\n if (!turn || turn.actor_kind !== \"human\" || !turn.actor_id) throw new ValidationError({status:403,code:\"forbidden_scope\",message:\"learning requires authenticated human feedback\"});\n const rule = this.saveRule({...req, scope:req.target === \"category\" ? \"category\" : \"general\", source_review_id:reviewId,source_turn_id:turn.id});\n rule.source_turn_id = turn.id;\n rule.rule_layer = req.target === \"org_house\" ? \"org\" : \"project\";\n if (req.target === \"org_house\") delete rule.project_id;\n rule.source_review_id = reviewId;\n rule.source_turn_id = turn.id;\n const audit = [...this.state.ruleAudit.values()].find(entry => entry.entity_id === rule.id)!;\n audit.after_json = ruleSnapshotJSON(rule);\n const result: LearnedReviewRule = {rule, source_review_id:reviewId, source_turn_id:turn.id, human_id:turn.actor_id, audit_id:audit.id, propagation:\"queued\"};\n this.learnedRules.set(req.client_id,{fingerprint,result:structuredClone(result)});\n return result;\n }\n\n saveRule(req: SaveRuleRequest): Rule {\n const text = req.rule_text.trim();\n if (!text) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"rule_text is required\" });\n }\n const categoryId = (req.category_id ?? \"\").trim();\n const scope = req.scope ?? (categoryId ? \"category\" : \"general\");\n if (scope === \"general\" && categoryId) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"scope=general forbids a category_id\" });\n }\n if (scope === \"category\" && !categoryId) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"scope=category requires a category_id\" });\n }\n const ts = now();\n if (req.supersedes_id) {\n const prior = this.state.rules.get(req.supersedes_id);\n if (!prior) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"rule not found\" });\n prior.status = \"superseded\";\n this.state.rules.set(prior.id, prior);\n const next: Rule = {\n ...prior,\n id: rid(\"rule\"),\n rev: prior.rev + 1,\n rule_text: text,\n kind: req.kind ?? prior.kind,\n priority: req.priority ?? prior.priority,\n status: \"active\",\n supersedes_id: prior.id,\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(next.id, next);\n this.recordRuleAudit(\"supersede\", next.id, ruleSnapshotJSON(prior), ruleSnapshotJSON(next));\n return next;\n }\n const rule: Rule = {\n id: rid(\"rule\"),\n lineage_id: rid(\"rln\"),\n rev: 1,\n // Agent-plane saves are ALWAYS project-layer, bound to the key's project (an\n // agent cannot author org-layer / house-style rules in v1).\n rule_layer: \"project\",\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n scope,\n category_id: scope === \"category\" ? categoryId : undefined,\n scope_agent_id: req.scope_agent_id || undefined,\n rule_text: text,\n kind: req.kind ?? \"soft\",\n priority: req.priority ?? 0,\n status: \"active\",\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(rule.id, rule);\n this.recordRuleAudit(\"create\", rule.id, \"{}\", ruleSnapshotJSON(rule));\n return rule;\n }\n\n /** Promote a rule between layers (mock, via supersession), or undefined when unknown. */\n promoteRule(ruleId: string, toScope: \"general\" | \"category\"): Rule | undefined {\n const prior = this.state.rules.get(ruleId);\n if (!prior) return undefined;\n if (prior.scope === toScope) return prior;\n if (toScope === \"category\" && !prior.category_id) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"promote to category needs a category\" });\n }\n prior.status = \"superseded\";\n this.state.rules.set(prior.id, prior);\n const ts = now();\n const next: Rule = {\n ...prior,\n id: rid(\"rule\"),\n lineage_id: rid(\"rln\"),\n rev: 1,\n scope: toScope,\n category_id: toScope === \"category\" ? prior.category_id : undefined,\n status: \"active\",\n supersedes_id: prior.id,\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(next.id, next);\n this.recordRuleAudit(\"supersede\", next.id, ruleSnapshotJSON(prior), ruleSnapshotJSON(next));\n return next;\n }\n\n /** Retire a rule (mock) - soft delete, or undefined when unknown. */\n retireRule(ruleId: string): Rule | undefined {\n const rule = this.state.rules.get(ruleId);\n if (!rule) return undefined;\n if (rule.status === \"retired\") return rule;\n rule.status = \"retired\";\n rule.updated_at = now();\n this.state.rules.set(rule.id, rule);\n this.recordRuleAudit(\"retire\", rule.id, ruleSnapshotJSON(rule), ruleSnapshotJSON(rule));\n return rule;\n }\n\n /** Read the rule/category change audit log (mock). */\n getRuleAudit(params: GetRuleAuditParams = {}): Page<RuleAuditEntry> {\n let items = [...this.state.ruleAudit.values()].sort((a, b) => b.created_at.localeCompare(a.created_at));\n if (params.entity_kind) items = items.filter((e) => e.entity_kind === params.entity_kind);\n if (params.entity_id) items = items.filter((e) => e.entity_id === params.entity_id);\n return { items, total: items.length };\n }\n\n /** Undo a rule change (mock) - restore the prior version; idempotent (re-undo 409). */\n undoRuleChange(udoId: string): Rule {\n const entry = this.state.ruleAudit.get(udoId);\n if (!entry) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"audit row not found\" });\n if (entry.entity_kind !== \"rule\") {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"only rule entities are restorable here\" });\n }\n if (entry.undone) throw new ConflictError({ status: 409, code: \"conflict\", message: \"already undone\" });\n const head = this.state.rules.get(entry.entity_id);\n if (!head) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"rule head not found\" });\n entry.undone = true;\n this.state.ruleAudit.set(entry.id, entry);\n const before = JSON.parse(entry.before_json ?? \"{}\") as Partial<Rule>;\n head.status = \"superseded\";\n this.state.rules.set(head.id, head);\n const ts = now();\n const restored: Rule = {\n ...head,\n id: rid(\"rule\"),\n rev: head.rev + 1,\n rule_text: before.rule_text ?? head.rule_text,\n status: before.rule_text ? \"active\" : \"retired\",\n supersedes_id: head.id,\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(restored.id, restored);\n this.recordRuleAudit(\"restore\", restored.id, ruleSnapshotJSON(head), ruleSnapshotJSON(restored));\n return restored;\n }\n\n /** recordRuleAudit appends one change/undo audit row (mock). */\n private recordRuleAudit(action: RuleAuditEntry[\"action\"], entityId: string, before: string, after: string): void {\n const entry: RuleAuditEntry = {\n id: rid(\"udo\"),\n entity_kind: \"rule\",\n entity_id: entityId,\n action,\n actor_kind: \"agent\",\n actor_id: \"agent:agt_mock\",\n before_json: before,\n after_json: after,\n undone: false,\n created_at: now(),\n };\n this.state.ruleAudit.set(entry.id, entry);\n }\n\n /**\n * enqueueReviewEvent appends a durable nudge for a review with the next per-review\n * monotonic seq (mock mirror of the server's enqueue-on-transition).\n */\n private enqueueReviewEvent(\n reviewId: string,\n reason: ReviewEvent[\"reason\"],\n payload?: Record<string, unknown>,\n ): ReviewEvent {\n const list = this.state.reviewEvents.get(reviewId) ?? [];\n const last = list[list.length - 1];\n const review = this.state.reviews.get(reviewId);\n const ev: ReviewEvent = {\n seq: last ? last.seq + 1 : 1,\n id: rid(\"ndg\"),\n reason,\n review_id: reviewId,\n category_id: review?.category_id,\n payload,\n created_at: now(),\n };\n list.push(ev);\n this.state.reviewEvents.set(reviewId, list);\n return ev;\n }\n\n /**\n * Emit the terminal-class nudge for the review's current state. `sent` and\n * `cancelled` close the row. `failed` emits `send_failed`, and a later explicit\n * cancel emits `cancelled`; this helper deliberately does not claim the first is\n * the last event the review can produce.\n */\n private enqueueTerminalNudge(review: Review): ReviewEvent | undefined {\n switch (review.state) {\n case \"sent\":\n case \"auto_sent\": {\n const payload: Record<string, unknown> = {\n state: review.state,\n message_id: review.sent_message_id ?? \"\",\n send_path: review.send_path ?? \"\",\n sent_at: review.sent_at ?? now(),\n };\n if (review.state === \"sent\") {\n // `decision` is derived the same way the chat surface derives it, so an\n // agent reading the nudge and an agent reading the thread never disagree\n // about whether the reviewer edited its draft.\n payload.decision =\n review.sent_body_text || review.sent_subject || review.diff_unified\n ? \"edited\"\n : \"approved\";\n } else {\n payload.gate_outcome = review.gate_outcome ?? \"\";\n }\n return this.enqueueReviewEvent(review.id, \"sent\", payload);\n }\n case \"failed\":\n // agent_retryable is FALSE and next_action says compose a NEW message: the\n // only live edge out of failed is cancel, so telling an agent to retry a row\n // nobody can move is how a drain loop spins forever.\n return this.enqueueReviewEvent(review.id, \"send_failed\", {\n state: \"failed\",\n error: review.send_error ?? \"\",\n agent_retryable: false,\n next_action: \"compose_and_submit_a_new_message\",\n });\n case \"cancelled\":\n return this.enqueueReviewEvent(review.id, \"cancelled\", { state: \"cancelled\" });\n default:\n return undefined;\n }\n }\n\n /**\n * Enqueue `front_run_next` - the signal that the review reached a terminal state\n * while the agent was still trying to act on it.\n *\n * Deduped on (review, terminal state, parent revision) so a retry loop hitting\n * the same 409 collapses to ONE row rather than one per attempt. Best-effort by\n * design: it must never turn a 409 into a failure.\n */\n private enqueueFrontRunNudge(review: Review, parentRevision: number): void {\n const key = `frontrun:${review.id}:${review.state}:${parentRevision}`;\n const list = this.state.reviewEvents.get(review.id) ?? [];\n if (list.some((e) => e.reason === \"front_run_next\" && e.payload?.dedupe_key === key)) return;\n this.enqueueReviewEvent(review.id, \"front_run_next\", {\n dedupe_key: key,\n state: review.state,\n sent_message_id: review.sent_message_id,\n your_parent_revision: parentRevision,\n current_revision: review.revision,\n diff_available: (review.diff_unified ?? \"\").trim() !== \"\",\n });\n }\n\n /**\n * Mock-only: mirror a console/human approve that delivers the draft. The live\n * server does this on the console plane (never an SDK call); the hook exists so a\n * drain loop can be driven to its terminal `sent` event offline.\n */\n simulateReviewApproved(reviewId: string, opts: { edited?: boolean } = {}): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (opts.edited) review.sent_body_text = review.proposed_body_text;\n this.setReviewState(review, \"sent\");\n review.version += 1;\n review.sent_message_id = `<${rid(\"mid\")}@acme.test>`;\n review.send_path = \"human_reviewed\";\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * Mock-only: mirror an approved draft whose delivery then FAILED at the provider.\n * This is the case the composing agent was previously never told about - the\n * console showed the error and the agent's queue stayed silent - so the loop test\n * that matters most drives this path.\n */\n simulateSendFailed(reviewId: string, error = \"provider rejected the message\"): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n this.setReviewState(review, \"failed\");\n review.version += 1;\n review.send_error = error;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * simulateReviewRejected is a mock-only test hook that mirrors a console reject:\n * it enqueues a `rejected` durable nudge to the composer so the realtime\n * drain/ack surface has a deterministic event to exercise offline. The live\n * server enqueues this on the reject TRANSITION (console-only, never an SDK call).\n */\n simulateReviewRejected(reviewId: string, comment = \"soften the tone\"): ReviewEvent {\n return this.enqueueReviewEvent(reviewId, \"rejected\", { decision: \"rejected\", comment });\n }\n\n /**\n * simulateReviewOpened is a mock-only test hook that mirrors a reviewer opening a\n * draft (needs_review -> in_review). There is no agent-plane \"open for review\"\n * call (a reviewer/human opens it), so tests of the M5 chat surface use this to get\n * a chattable draft offline.\n */\n simulateReviewOpened(reviewId: string): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n this.setReviewState(review, \"in_review\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n return review;\n }\n\n /**\n * simulateHumanComment is a mock-only test hook that mirrors the console chat side-\n * panel: it appends a human_comment turn so get_review_feedback has a comment to\n * assemble. The live server writes this on the console plane (never an SDK call).\n */\n simulateHumanComment(reviewId: string, body: string): ReviewTurn | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const turn: ReviewTurn = {\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"human_comment\",\n actor_kind: \"human\",\n actor_id: \"user_demo\",\n body,\n created_at: now(),\n };\n turns.push(turn);\n this.state.reviewTurns.set(reviewId, turns);\n return turn;\n }\n\n /** Drain the next un-acked review events (mock), FIFO per review + cursors. */\n listReviewEvents(params: ListReviewEventsParams = {}): ReviewEventsResult {\n const want = params.review_id?.trim();\n const events: ReviewEvent[] = [];\n const touched = new Set<string>();\n for (const [reviewId, list] of this.state.reviewEvents) {\n if (want && reviewId !== want) continue;\n const acked = this.state.reviewEventCursors.get(reviewId) ?? 0;\n for (const ev of list) {\n if (ev.seq > acked) {\n events.push(ev);\n touched.add(reviewId);\n }\n }\n }\n events.sort((a, b) => (a.review_id ?? \"\").localeCompare(b.review_id ?? \"\") || a.seq - b.seq);\n const limited = params.limit && params.limit > 0 ? events.slice(0, params.limit) : events;\n const cursors = [...touched].map((reviewId) => ({\n review_id: reviewId,\n last_acked_seq: this.state.reviewEventCursors.get(reviewId) ?? 0,\n }));\n return { events: limited, cursors };\n }\n\n /**\n * Long-poll for a review event (mock). Offline there is nothing to wait FOR, so it\n * returns the immediate drain (empty when caught up) - the server's \"empty on\n * timeout\" contract.\n */\n waitForReviewEvent(params: WaitForReviewEventParams = {}): ReviewEventsResult {\n return this.listReviewEvents({ review_id: params.review_id, limit: params.limit });\n }\n\n /** Ack review events (mock): advance per-review cursors monotonically. */\n ackReviewEvent(req: AckReviewEventRequest): AckReviewEventResult {\n const cursors: { review_id: string; last_acked_seq: number }[] = [];\n for (const a of req.acks ?? []) {\n const reviewId = a.review_id?.trim();\n if (!reviewId) continue;\n const prev = this.state.reviewEventCursors.get(reviewId) ?? 0;\n const next = Math.max(prev, a.through_seq); // monotonic (exactly-once effect)\n this.state.reviewEventCursors.set(reviewId, next);\n cursors.push({ review_id: reviewId, last_acked_seq: next });\n }\n return { cursors };\n }\n\n /** Mint a needs_review record + its intent (agent_note) and initial-draft turns. */\n private createReviewRecord(\n address: string,\n opts: {\n kind: \"send\" | \"reply\" | \"forward\";\n subject: string;\n text: string;\n html?: string;\n to: string[];\n cc?: string[];\n bcc?: string[];\n intent?: { summary: string; meta?: Record<string, unknown> };\n categoryId?: string;\n /** The mode the policy resolved. Every agent-plane send writes a row, direct included. */\n mode?: \"review\" | \"direct\";\n },\n ): Review {\n const id = rid(\"rr\");\n const created = now();\n const mode = opts.mode ?? \"review\";\n const review: Review = {\n id,\n state: \"needs_review\",\n mode,\n effective_mode: mode,\n closed: false,\n kind: opts.kind,\n from_address: address,\n agent_id: rid(\"agt\"),\n category_id: opts.categoryId,\n intent_summary: opts.intent?.summary ?? \"\",\n intent_meta: opts.intent?.meta,\n revision: 0,\n version: 0,\n proposed_subject: opts.subject,\n proposed_body_text: opts.text,\n proposed_body_html: opts.html,\n proposed_to: opts.to,\n proposed_cc: opts.cc,\n proposed_bcc: opts.bcc,\n created_at: created,\n updated_at: created,\n };\n this.state.reviews.set(id, review);\n const turns: ReviewTurn[] = [];\n if (opts.intent?.summary?.trim()) {\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_note\",\n actor_kind: \"agent\",\n body: opts.intent.summary,\n metadata: { kind: \"intent\" },\n created_at: created,\n });\n }\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_draft\",\n actor_kind: \"agent\",\n body: opts.text,\n revision: 0,\n created_at: created,\n });\n this.state.reviewTurns.set(id, turns);\n return review;\n }\n\n /** Append a message to an inbox's store and return it (mock helper). */\n private appendMessage(\n address: string,\n opts: {\n direction: Message[\"direction\"];\n from: string;\n to: string[];\n cc?: string[];\n subject: string;\n text: string;\n html?: string;\n threadId: string;\n attachments?: AttachmentInput[];\n },\n ): Message {\n const id = rid(\"msg\");\n const inbox = this.state.inboxes.get(address);\n const msg: Message = {\n id,\n thread_id: opts.threadId,\n inbox: inbox?.address ?? address,\n direction: opts.direction,\n from: inbox?.display_name\n ? { email: opts.from, name: inbox.display_name }\n : { email: opts.from },\n to: opts.to.map((email) => ({ email })),\n cc: (opts.cc ?? []).map((email) => ({ email })),\n subject: opts.subject,\n text: opts.text,\n html: opts.html ?? null,\n extracted_text: opts.text.trim() || null,\n extracted_html: opts.html?.trim() || null,\n message_id: `<${id}@${address.split(\"@\")[1] ?? PAID_SHARED_DOMAIN}>`,\n folder: opts.direction === \"inbound\" ? \"INBOX\" : \"Sent\",\n seen: opts.direction === \"outbound\",\n date: now(),\n };\n const arr = this.state.messages.get(address) ?? [];\n arr.push(msg);\n this.state.messages.set(address, arr);\n if (opts.direction === \"inbound\") this.emitEvent(\"message.received\", msg);\n if (opts.attachments && opts.attachments.length > 0) {\n const stored: StoredAttachment[] = opts.attachments.map((a, i) => ({\n meta: {\n id: `att_${i + 1}_${id}`,\n filename: a.filename,\n content_type: a.content_type || \"application/octet-stream\",\n size: base64ByteLength(a.content_base64),\n },\n content_base64: a.content_base64,\n }));\n this.state.attachments.set(id, stored);\n }\n return msg;\n }\n\n /** List a message's attachment metadata (mirrors the list endpoint). */\n listAttachments(messageId: string): Page<Attachment> {\n this.getMessage(messageId); // throws if the message does not exist\n const items = (this.state.attachments.get(messageId) ?? []).map((a) => a.meta);\n return { items, total: items.length };\n }\n\n /** Fetch one attachment's bytes + metadata (mirrors the download endpoint). */\n getAttachment(messageId: string, attachmentId: string): AttachmentDownload {\n const stored = (this.state.attachments.get(messageId) ?? []).find(\n (a) => a.meta.id === attachmentId,\n );\n if (!stored) throw new Error(`attachment not found: ${attachmentId}`);\n return {\n filename: stored.meta.filename,\n content_type: stored.meta.content_type,\n content_base64: stored.content_base64,\n };\n }\n\n listMessages(address: string, params: ListMessagesParams = {}): Page<Message> {\n address = this.addrOf(address);\n let items = [...(this.state.messages.get(address) ?? [])].sort((a, b) =>\n b.date.localeCompare(a.date),\n );\n if (params.unread) items = items.filter((m) => !m.seen);\n if (params.from) {\n const q = params.from.toLowerCase();\n items = items.filter((m) => m.from.email.toLowerCase().includes(q));\n }\n if (params.to) {\n const q = params.to.toLowerCase();\n items = items.filter((m) => m.to.some((a) => a.email.toLowerCase().includes(q)));\n }\n if (params.subject) {\n const q = params.subject.toLowerCase();\n items = items.filter((m) => m.subject.toLowerCase().includes(q));\n }\n const total = items.length;\n const offset = params.offset ?? (params.cursor ? Number(params.cursor) : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Message> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n /** Fetch a single message by id across all inboxes. */\n getMessage(messageId: string): Message {\n for (const msgs of this.state.messages.values()) {\n const found = msgs.find((m) => m.id === messageId);\n if (found) return found;\n }\n throw new Error(`message not found: ${messageId}`);\n }\n\n /** Toggle the \\Seen flag for a message by id. */\n markRead(messageId: string, read: boolean): Message {\n const msg = this.getMessage(messageId);\n msg.seen = read;\n return msg;\n }\n\n /** Render a minimal RFC822 .eml for a message by id (mirrors the raw endpoint). */\n getMessageRaw(messageId: string): string {\n const m = this.getMessage(messageId);\n const to = m.to.map((a) => a.email).join(\", \");\n const from = m.from.name ? `${m.from.name} <${m.from.email}>` : m.from.email;\n const body = m.text ?? m.html ?? \"\";\n const contentType = m.text !== null ? \"text/plain\" : \"text/html\";\n return [\n `From: ${from}`,\n `To: ${to}`,\n `Subject: ${m.subject}`,\n `Message-ID: ${m.message_id}`,\n `Date: ${m.date}`,\n \"MIME-Version: 1.0\",\n `Content-Type: ${contentType}; charset=utf-8`,\n \"\",\n body,\n \"\",\n ].join(\"\\r\\n\");\n }\n\n /** Full-text search scoped to one inbox. */\n searchMessages(address: string, params: SearchMessagesParams): Page<Message> {\n address = this.addrOf(address);\n const q = params.q.toLowerCase();\n const items = [...(this.state.messages.get(address) ?? [])]\n .filter(\n (m) =>\n m.subject.toLowerCase().includes(q) ||\n [m.text, m.html]\n .filter((part): part is string => typeof part === \"string\" && part.length > 0)\n .join(\"\\n\")\n .toLowerCase()\n .includes(q) ||\n m.from.email.toLowerCase().includes(q),\n )\n .sort((a, b) => b.date.localeCompare(a.date));\n const total = items.length;\n const offset = params.offset ?? (params.cursor ? Number(params.cursor) : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Message> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n listThreads(address: string, params: ListThreadsParams = {}): Page<Thread> {\n address = this.addrOf(address);\n const items = this.threadsFor(address);\n return this.paginateThreads(items, params);\n }\n\n /** Thread-level search (subject / snippet / participant substring). */\n searchThreads(address: string, params: SearchMessagesParams): Page<Thread> {\n address = this.addrOf(address);\n const q = params.q.toLowerCase();\n const items = this.threadsFor(address).filter(\n (t) =>\n t.subject.toLowerCase().includes(q) ||\n t.snippet.toLowerCase().includes(q) ||\n t.participants.join(\" \").toLowerCase().includes(q),\n );\n return this.paginateThreads(items, params);\n }\n\n private paginateThreads(\n items: Thread[],\n params: Pick<ListThreadsParams, \"limit\" | \"offset\" | \"cursor\">,\n ): Page<Thread> {\n const total = items.length;\n const cursorOffset = params.cursor === undefined ? undefined : Number(params.cursor);\n const offset = params.offset ?? (Number.isFinite(cursorOffset) ? cursorOffset! : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Thread> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n /** Fetch one thread (with messages, oldest-first) by id under an inbox. */\n getThread(address: string, threadId: string): ThreadDetail {\n address = this.addrOf(address);\n const messages = (this.state.messages.get(address) ?? [])\n .filter((m) => m.thread_id === threadId)\n .sort((a, b) => a.date.localeCompare(b.date));\n if (messages.length === 0) throw new Error(`thread not found: ${threadId}`);\n return { ...this.buildThread(address, threadId, messages), messages };\n }\n\n getSubmission(address: string, submissionId: string): Submission | undefined {\n address = this.addrOf(address);\n const message = (this.state.messages.get(address) ?? []).find((item) => item.submission_id === submissionId);\n if (!message) return undefined;\n return { submission_id: submissionId, inbox: address, sent_message_id: message.id, sent_copy_status: \"stored\",\n transport: message.transport ?? {}, recipients: [...message.to, ...(message.cc ?? [])].map(({ email }) => ({ recipient: email, state: \"accepted\" })),\n created_at: message.date, updated_at: message.date };\n }\n\n /**\n * Delete a message by id: move it to Trash (soft) or remove it (expunge / it\n * already lives in Trash). Returns undefined when the inbox/message is unknown\n * so the transport can surface a 404.\n */\n deleteMessage(address: string, messageId: string, expunge: boolean): DeleteResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const msgs = this.state.messages.get(address) ?? [];\n const msg = msgs.find((m) => m.id === messageId);\n if (!msg) return undefined;\n const hard = expunge || msg.folder === \"Trash\";\n if (hard) {\n this.state.messages.set(address, msgs.filter((m) => m.id !== messageId));\n } else {\n msg.folder = \"Trash\";\n }\n return { id: messageId, deleted: true, expunged: hard, count: 1 };\n }\n\n /** Delete every message in a thread by id (move to Trash or expunge). */\n deleteThread(address: string, threadId: string, expunge: boolean): DeleteResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const msgs = this.state.messages.get(address) ?? [];\n const inThread = msgs.filter((m) => m.thread_id === threadId);\n if (inThread.length === 0) return undefined;\n if (expunge) {\n this.state.messages.set(address, msgs.filter((m) => m.thread_id !== threadId));\n } else {\n for (const m of inThread) m.folder = \"Trash\";\n }\n return { id: threadId, deleted: true, expunged: expunge, count: inThread.length };\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of ids under one inbox.\n * Unknown ids go in `failed`. Returns undefined when the inbox is unknown.\n */\n batchUpdateMessages(\n address: string,\n ids: string[],\n read: boolean | undefined,\n folder: string | undefined,\n ): BatchUpdateResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const byId = new Map((this.state.messages.get(address) ?? []).map((m) => [m.id, m]));\n const updated: string[] = [];\n const failed: string[] = [];\n for (const id of ids) {\n const m = byId.get(id);\n if (!m) {\n failed.push(id);\n continue;\n }\n if (read !== undefined) m.seen = read;\n if (folder) m.folder = folder;\n updated.push(id);\n }\n return { updated, failed };\n }\n\n /** Build all threads for an inbox, newest-active first. */\n private threadsFor(address: string): Thread[] {\n const byThread = new Map<string, Message[]>();\n for (const m of this.state.messages.get(address) ?? []) {\n const arr = byThread.get(m.thread_id) ?? [];\n arr.push(m);\n byThread.set(m.thread_id, arr);\n }\n const items = [...byThread.entries()].map(([id, ms]) => this.buildThread(address, id, ms, true));\n items.sort((a, b) => b.last_message_at.localeCompare(a.last_message_at));\n return items;\n }\n\n private buildThread(address: string, id: string, ms: Message[], summary = false): Thread {\n const sorted = [...ms].sort((a, b) => a.date.localeCompare(b.date));\n const last = sorted[sorted.length - 1]!;\n const seen = new Set<string>();\n const participants: string[] = [];\n const participantMessages = summary ? [last] : sorted;\n for (const m of participantMessages) {\n for (const a of [m.from, ...m.to, ...(m.cc ?? []), ...(m.reply_to ?? [])]) {\n const key = a.email.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n participants.push(a.name ? `${a.name} <${a.email}>` : a.email);\n }\n }\n return {\n id,\n inbox_id: this.state.inboxes.get(address)?.address ?? address,\n subject: normalizeThreadSubject(sorted[0]?.subject ?? \"(no subject)\"),\n participants,\n message_count: sorted.length,\n last_message_at: last.date,\n snippet: (last.text ?? last.html ?? \"\").slice(0, 120),\n unread: !last.seen,\n last_message_has_attachments: (this.state.attachments.get(last.id)?.length ?? 0) > 0,\n last_message_id: last.id,\n };\n }\n\n /**\n * Mock wait_for_email: synthesizes a plausible OTP email after a short delay so the OTP example\n * runs end-to-end offline. The live implementation waits through the platform receive path.\n */\n async waitForEmail(address: string, req: WaitForEmailRequest): Promise<WaitForEmailResult> {\n address = this.addrOf(address);\n const inbox = this.state.inboxes.get(address);\n const match = req.match ? compileWaitRegex(req.match) : undefined;\n const delayMs = Math.min(400, (req.timeout_seconds ?? 300) * 1000);\n await new Promise((r) => setTimeout(r, delayMs));\n const code = String(Math.floor(100000 + Math.random() * 900000));\n const from = req.from ?? \"no-reply@acme.test\";\n const text = `Your Acme verification code is ${code}. It expires in 10 minutes.\\n\\nOr verify here: https://acme.test/verify?token=${rid(\"vt\")}`;\n const subject = req.subject ?? \"Your verification code\";\n if (match && !match.test(`${subject}\\n${text}`)) {\n return { timed_out: true, message: null, extracted: { otp: null, link: null } };\n }\n const message: Message = {\n id: rid(\"msg\"),\n thread_id: rid(\"thr\"),\n inbox: inbox?.address ?? address,\n direction: \"inbound\",\n from: { email: from, name: \"Acme\" },\n to: [{ email: address }],\n cc: [],\n subject,\n text,\n html: `<p>${text.replace(/\\n/g, \"<br/>\")}</p>`,\n extracted_text: text,\n extracted_html: `<p>${text.replace(/\\n/g, \"<br/>\")}</p>`,\n message_id: `<${rid(\"mid\")}@acme.test>`,\n folder: \"INBOX\",\n seen: false,\n date: now(),\n };\n const existing = this.state.messages.get(address) ?? [];\n existing.push(message);\n this.state.messages.set(address, existing);\n this.emitEvent(\"message.received\", message);\n return { timed_out: false, message, extracted: extractCredentials(message) };\n }\n\n /**\n * Append one event to the in-memory journal that backs the SSE stream. Mirrors\n * the server: a monotonic seq is the resume token and the payload is the same\n * envelope a webhook delivers.\n */\n private emitEvent(event: string, message: Message): void {\n const seq = ++this.state.eventSeq;\n this.state.events.push({\n event,\n seq,\n id: rid(\"evt\"),\n created_at: now(),\n inbox: message.inbox,\n message,\n });\n }\n\n /**\n * Replay journal events after `lastEventId`, scoped to one inbox (or all when\n * `address` is null). The offline mock yields the backlog and returns; the live\n * transport tails an open connection. Both honor the same resume contract.\n */\n async *streamEvents(\n address: string | null,\n lastEventId?: number,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n const after = lastEventId ?? 0;\n // Events are keyed by the canonical address; normalize an id ref to it so a\n // handle that streams by its opaque id still matches its own events.\n const scope = address === null ? null : this.addrOf(address);\n for (const ev of this.state.events) {\n if (ev.seq <= after) continue;\n if (scope !== null && ev.inbox !== scope) continue;\n yield ev;\n }\n }\n\n registerWebhook(req: RegisterWebhookRequest): Webhook {\n // Idempotency replay: a repeat with the same client_id returns the first row.\n if (req.client_id) {\n const existingId = this.state.webhookByClientId.get(req.client_id);\n const existing = existingId ? this.state.webhooks.get(existingId) : undefined;\n if (existing) return { ...existing };\n }\n const id = rid(\"wh\");\n const webhook: Webhook = {\n id,\n url: req.url,\n events: req.events ?? [\"message.received\"],\n inbox: req.inbox ?? null,\n agent_id: this.state.agents.keys().next().value ?? \"agt_mock\",\n secret: `whsec_${rid(\"s\").slice(2)}${rid(\"s\").slice(2)}`,\n secret_prefix: `whsec_${rid(\"s\").slice(2, 6)}`,\n active: true,\n created_at: now(),\n };\n this.state.webhooks.set(id, webhook);\n if (req.client_id) this.state.webhookByClientId.set(req.client_id, id);\n // Return the create shape (with secret); stored copy keeps it for parity.\n return { ...webhook };\n }\n\n /** List registered webhooks (secret redacted, mirroring the server). */\n listWebhooks(): Page<Webhook> {\n const items = [...this.state.webhooks.values()].map((w) => redactSecret(w));\n return { items, total: items.length };\n }\n\n /** Get one webhook by id (secret redacted), or undefined when missing. */\n getWebhook(webhookId: string): Webhook | undefined {\n const w = this.state.webhooks.get(webhookId);\n return w ? redactSecret(w) : undefined;\n }\n\n /**\n * Update a webhook in place (secret redacted), or undefined when missing.\n * Every field is optional; an unset field leaves the stored value untouched\n * (PATCH semantics). An empty-string `inbox` clears the filter.\n */\n updateWebhook(webhookId: string, req: UpdateWebhookRequest): Webhook | undefined {\n const w = this.state.webhooks.get(webhookId);\n if (!w) return undefined;\n if (req.url !== undefined) w.url = req.url;\n if (req.events !== undefined) {\n w.events = req.events.length ? req.events : [\"message.received\"];\n }\n if (req.inbox !== undefined) w.inbox = req.inbox === \"\" ? null : req.inbox;\n if (req.active !== undefined) w.active = req.active;\n this.state.webhooks.set(webhookId, w);\n return redactSecret(w);\n }\n\n /** Delete a webhook by id; returns false when it was not found. */\n deleteWebhook(webhookId: string): boolean {\n return this.state.webhooks.delete(webhookId);\n }\n\n // ---- contact allow/block lists (Slice 3) ------------------------------\n\n /** Add one allow/block entry scoped to an inbox, or undefined when the inbox is unknown. */\n addContactListEntry(address: string, req: AddContactListRequest): ContactListEntry | undefined {\n address = this.addrOf(address);\n if (!this.state.inboxes.has(address)) return undefined;\n const entry: ContactListEntry = {\n id: rid(\"lst\"),\n inbox: address,\n kind: req.kind,\n direction: req.direction ?? \"send\",\n pattern: normalizeContactPattern(req.pattern),\n created_at: now(),\n };\n this.state.contactLists.set(entry.id, entry);\n return { ...entry };\n }\n\n /** List the entries governing an inbox (inbox-specific + account-wide), or undefined when unknown. */\n listContactLists(address: string): Page<ContactListEntry> | undefined {\n address = this.addrOf(address);\n if (!this.state.inboxes.has(address)) return undefined;\n const items = [...this.state.contactLists.values()].filter(\n (e) => e.inbox === null || e.inbox === address,\n );\n return { items, total: items.length };\n }\n\n /** Delete a contact-list entry by id; returns false when it was not found. */\n deleteContactListEntry(_address: string, entryId: string): boolean {\n return this.state.contactLists.delete(entryId);\n }\n\n // ---- domains (Slice 5) ------------------------------------------------\n\n /** Add a delegated domain and return only the customer-published nameservers. */\n onboardDomain(req: OnboardDomainRequest): Domain {\n // project_id is an assertion (never a selector): a mismatch is 403. The domain's\n // project binding is always derived from the key, not from client input.\n assertProjectMatch(req.project_id);\n const name = req.domain.trim().toLowerCase();\n const existing = this.state.domains.get(name);\n if (existing) return { ...existing };\n const mode = \"ns_delegated\";\n const domain: Domain = {\n id: rid(\"dom\"),\n domain: name,\n mode,\n verification_status: \"verifying\",\n dkim_status: \"configured\",\n shared: false,\n created_at: now(),\n delegation_ns: domainDelegationNS(name),\n instruction: \"Add the nameserver entries at your domain provider. We check automatically; use Recheck DNS for an immediate check.\",\n readiness: {\n status: \"waiting_for_dns\", label: \"Waiting for DNS\", summary: \"We have not confirmed your nameserver entries yet. Add them at your domain provider; we will finish setup automatically.\",\n reason: \"dns_entries_unconfirmed\", action_required_by: \"customer\", next_action: \"check_dns_entries\",\n ready_for_inboxes: false, poll_after_seconds: 30,\n inboxes: { scope: \"agent\", total: 0, ready: 0, setting_up: 0, needs_attention: 0 },\n },\n };\n this.state.domains.set(name, domain);\n return { ...domain };\n }\n\n /** List onboarded domains (records omitted on the summary, mirroring the server). */\n listDomains(): Page<Domain> {\n const items = [...this.state.domains.values()].map((d) => domainSummary(d));\n return { items, total: items.length };\n }\n\n /** Get one domain's detail + the records to set, inline; undefined when absent. */\n getDomain(domain: string): Domain | undefined {\n const d = this.state.domains.get(domain.trim().toLowerCase());\n return d ? { ...d } : undefined;\n }\n\n /** Trigger/refresh verification; returns the (re-read) detail, or undefined when absent. */\n verifyDomain(domain: string): Domain | undefined {\n const d = this.state.domains.get(domain.trim().toLowerCase());\n return d ? { ...d } : undefined;\n }\n\n /**\n * Offboard (remove) a domain; returns false when it was not found. Also\n * records a synthetic succeeded teardown job under `job-offboard-<domain>`\n * (there is no job runner in the mock) so a subsequent {@link getJob} poll\n * resolves the same way the live transport's async contract would.\n */\n offboardDomain(domain: string): boolean {\n const name = domain.trim().toLowerCase();\n const found = this.state.domains.delete(name);\n if (found) {\n const ts = now();\n this.state.jobs.set(`job-offboard-${name}`, {\n object: \"job\",\n id: `job-offboard-${name}`,\n type: \"domain_offboard\",\n status: \"succeeded\",\n created_at: ts,\n updated_at: ts,\n finished_at: ts,\n });\n }\n return found;\n }\n\n /** Get one async job's poll status; undefined when the id is unknown. */\n getJob(jobId: string): Job | undefined {\n const job = this.state.jobs.get(jobId);\n return job ? { ...job } : undefined;\n }\n\n // ---- commerce (quote/request/status; no human approval mutation) ------\n\n quoteDomain(req: QuoteDomainRequest): DomainQuote {\n const domain = req.domain.trim().toLowerCase();\n return {\n object: \"domain_quote\",\n domain,\n available: !domain.startsWith(\"unavailable.\"),\n currency: \"usd\",\n quote_cents: 2500,\n renewal_cents: 2500,\n premium: false,\n quote_expires_at: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n blockers: [],\n };\n }\n\n requestDomainPurchase(req: RequestDomainPurchaseRequest): CommerceRequest {\n const idem = `domain_purchase:${req.idempotency_key.trim()}`;\n const replayId = this.state.commerceByIdempotency.get(idem);\n if (replayId) return { ...this.state.commerceRequests.get(replayId)! };\n const quote = this.quoteDomain({ domain: req.domain });\n const timestamp = now();\n const id = rid(\"creq\");\n const approvalUrl = `https://app.extrovert.dev/commerce/requests/${id}`;\n const request: CommerceRequest = {\n object: \"commerce_request\",\n id,\n kind: \"domain_purchase\",\n state: \"awaiting_human_approval\",\n domain: quote.domain,\n domain_scope: req.scope ?? \"org\",\n rationale: req.rationale,\n currency: quote.currency,\n quote_cents: quote.quote_cents,\n renewal_cents: quote.renewal_cents,\n quote_expires_at: quote.quote_expires_at,\n auto_renew: req.auto_renew ?? true,\n blocker_code: \"human_approval_required\",\n blockers: [\n {\n code: \"human_approval_required\",\n message: \"A human billing administrator must approve this domain purchase.\",\n manage_url: approvalUrl,\n },\n ],\n approval_url: approvalUrl,\n agent_next_action: \"Share approval_url with the human, then poll this request after approval.\",\n retry_safe: true,\n poll_after_seconds: 10,\n version: 1,\n created_at: timestamp,\n updated_at: timestamp,\n };\n this.state.commerceRequests.set(id, request);\n this.state.commerceByIdempotency.set(idem, id);\n return { ...request };\n }\n\n requestPlanChange(req: RequestPlanChangeRequest): CommerceRequest {\n const idem = `plan_change:${req.idempotency_key.trim()}`;\n const replayId = this.state.commerceByIdempotency.get(idem);\n if (replayId) return { ...this.state.commerceRequests.get(replayId)! };\n const timestamp = now();\n const id = rid(\"creq\");\n const approvalUrl = `https://app.extrovert.dev/commerce/requests/${id}`;\n const request: CommerceRequest = {\n object: \"commerce_request\",\n id,\n kind: \"plan_change\",\n state: \"awaiting_human_approval\",\n target_plan: req.target_plan,\n current_plan: \"developer\",\n rationale: req.rationale,\n currency: \"usd\",\n quote_cents: 0,\n renewal_cents: 0,\n auto_renew: true,\n blocker_code: \"human_approval_required\",\n blockers: [\n {\n code: \"human_approval_required\",\n message: \"A human billing administrator must approve this plan change.\",\n manage_url: approvalUrl,\n },\n ],\n approval_url: approvalUrl,\n agent_next_action: \"Share approval_url with the human, then poll this request after approval.\",\n retry_safe: true,\n poll_after_seconds: 10,\n version: 1,\n created_at: timestamp,\n updated_at: timestamp,\n };\n this.state.commerceRequests.set(id, request);\n this.state.commerceByIdempotency.set(idem, id);\n return { ...request };\n }\n\n getCommerceRequest(requestId: string): CommerceRequest | undefined {\n const request = this.state.commerceRequests.get(requestId);\n return request ? { ...request } : undefined;\n }\n\n cancelCommerceRequest(requestId: string): CommerceRequest | undefined {\n const request = this.state.commerceRequests.get(requestId);\n if (!request) return undefined;\n if (![\"awaiting_human_approval\", \"blocked\", \"approved\", \"payment_action_required\", \"payment_failed\"].includes(request.state)) {\n throw new ValidationError({ status: 409, code: \"conflict\", message: \"this request can no longer be cancelled\" });\n }\n request.state = \"cancelled\";\n request.blocker_code = undefined;\n request.blockers = [];\n request.agent_next_action = \"The request is cancelled. Create a new request only if the purchase is still needed.\";\n request.version += 1;\n request.updated_at = now();\n return { ...request };\n }\n\n listCommerceRequests(params: ListCommerceRequestsParams = {}): Page<CommerceRequest> {\n let items = [...this.state.commerceRequests.values()];\n items.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = items.length;\n const offset = params.page ? Math.max(0, Number.parseInt(params.page, 10) || 0) : 0;\n const limit = Math.max(1, Math.min(params.limit ?? 50, 100));\n const page = items.slice(offset, offset + limit).map((request) => ({ ...request }));\n const next = offset + page.length;\n return { items: page, total, next_cursor: next < total ? String(next) : undefined };\n }\n\n // ---- suppressions (recipient opt-outs / list-unsubscribe) --------------\n\n /**\n * Pre-check whether the caller's org suppresses a recipient (mirrors\n * `GET /v1/suppressions?recipient=…`). Returns `{recipient, suppressed, rows}`\n * over the active (non-revoked) org rows for that canonicalized recipient.\n */\n precheckSuppression(recipient: string): SuppressionPrecheck {\n const canonical = canonicalRecipient(recipient);\n const rows = [...this.state.suppressions.values()]\n .filter((s) => !s.revoked && s.recipient === canonical)\n .map((s) => ({ ...s }));\n return { recipient: canonical, suppressed: rows.length > 0, rows };\n }\n\n /** List the caller's own org suppression rows (mirrors the paged `GET /v1/suppressions`). */\n listSuppressions(params: ListSuppressionsParams): Page<SuppressionEntry> {\n let rows = [...this.state.suppressions.values()];\n if (params.scope) rows = rows.filter((s) => s.scope === params.scope);\n if (!params.include_revoked) rows = rows.filter((s) => !s.revoked);\n rows.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = rows.length;\n const offset = params.cursor ? Math.max(0, Number.parseInt(params.cursor, 10) || 0) : 0;\n const limit = params.limit ?? 50;\n const items = rows.slice(offset, offset + limit).map((s) => ({ ...s }));\n const page: Page<SuppressionEntry> = { items, total };\n if (offset + items.length < total) page.next_cursor = String(offset + items.length);\n return page;\n }\n\n /**\n * Revoke one org-scope suppression row (mirrors `POST /v1/suppressions/{id}/revoke`).\n * A reason is required (the caller validates too). Returns the updated row, or\n * undefined when the id is unknown / not the caller's own org row.\n */\n revokeSuppression(id: string, reason: string): SuppressionEntry | undefined {\n const row = this.state.suppressions.get(id);\n // Only a non-revoked org row is revocable by the agent plane (global/shared rows\n // are platform-operator only and appear as an indistinguishable 404 here).\n if (!row || row.scope !== \"org\" || row.revoked) return undefined;\n row.revoked = true;\n row.revoked_at = now();\n row.revoked_by = \"agent:agt_mock\";\n row.revoke_reason = reason;\n this.state.suppressions.set(id, row);\n return { ...row };\n }\n\n /**\n * Reject the WHOLE send if ANY recipient has an active org-scope suppression,\n * naming exactly the suppressed addresses (never the scope/origin) so the caller\n * can drop them and retry - mirroring the live `recipient_suppressed` (422) path.\n */\n private enforceSuppression(recipients: string[]): void {\n const active = new Set(\n [...this.state.suppressions.values()].filter((s) => !s.revoked).map((s) => s.recipient),\n );\n if (active.size === 0) return;\n const hit: string[] = [];\n for (const rcpt of recipients) {\n const canonical = canonicalRecipient(rcpt);\n if (canonical && active.has(canonical) && !hit.includes(canonical)) hit.push(canonical);\n }\n if (hit.length === 0) return;\n throw new RecipientSuppressedError({\n status: 422,\n code: \"recipient_suppressed\",\n message: `${hit.length} recipient(s) have opted out (recipient_suppressed)`,\n problem: {\n type: \"https://extrovert.dev/problems/recipient_suppressed\",\n title: \"Recipient Suppressed\",\n status: 422,\n code: \"recipient_suppressed\",\n detail: \"One or more recipients have opted out; remove them and retry.\",\n errors: hit.map((r) => ({ field: \"recipient\", code: \"recipient_suppressed\", detail: r })),\n },\n });\n }\n\n /**\n * Enforce the send-direction contact lists for an inbox: reject a block-listed\n * recipient, or any recipient outside the allowlist when allowlist mode is on.\n * Throws a {@link PermissionError} (403) to mirror the real API.\n */\n private enforceSendPolicy(from: string, recipients: string[]): void {\n const entries = [...this.state.contactLists.values()].filter(\n (e) => e.direction === \"send\" && (e.inbox === null || e.inbox === from),\n );\n if (entries.length === 0) return;\n const blocks = entries.filter((e) => e.kind === \"block\");\n const allows = entries.filter((e) => e.kind === \"allow\");\n for (const rcpt of recipients) {\n const addr = normalizeContactPattern(rcpt);\n if (!addr) continue;\n if (blocks.some((b) => contactEntryMatches(b.pattern, addr))) {\n throw new PermissionError({\n status: 403,\n code: \"recipient_blocked\",\n message: `${rcpt} is block-listed`,\n });\n }\n if (allows.length > 0 && !allows.some((a) => contactEntryMatches(a.pattern, addr))) {\n throw new PermissionError({\n status: 403,\n code: \"recipient_blocked\",\n message: `${rcpt} is not on the allow list`,\n });\n }\n }\n }\n}\n\n/**\n * Canonicalize a recipient address for suppression matching: pull the address out\n * of a \"Name <addr>\" form, NFC-normalize, trim, and lower-case (mirrors the Go\n * canonicalization closely enough for the offline mock).\n */\nfunction canonicalRecipient(raw: string): string {\n let value = raw.trim();\n const m = value.match(/<([^>]+)>/);\n if (m && m[1]) value = m[1];\n return value.normalize(\"NFC\").trim().toLowerCase();\n}\n\n/**\n * Normalize a contact pattern or recipient: lower-case/trim, pull the address out\n * of a \"Name <addr>\" form, and strip a leading \"@\" from a domain pattern.\n */\nfunction normalizeContactPattern(raw: string): string {\n let value = raw.trim();\n const m = value.match(/<([^>]+)>/);\n if (m && m[1]) value = m[1];\n value = value.trim().toLowerCase();\n return value.startsWith(\"@\") ? value.slice(1) : value;\n}\n\n/**\n * Match a normalized pattern against a normalized recipient address. A pattern\n * with an \"@\" is a full-address match; a bare domain matches any address in it.\n */\nfunction contactEntryMatches(pattern: string, addr: string): boolean {\n if (!pattern || !addr) return false;\n if (pattern.includes(\"@\")) return pattern === addr;\n const at = addr.lastIndexOf(\"@\");\n const domain = at >= 0 ? addr.slice(at + 1) : addr;\n return domain === pattern;\n}\n\n/** Drop the one-time signing secret from a stored webhook for read responses. */\nfunction redactSecret(w: Webhook): Webhook {\n const { secret: _omit, ...rest } = w;\n return rest;\n}\n\n/** The nameserver records for delegated setup. */\nfunction domainDelegationNS(domain: string): DomainRecord[] {\n return [\n { name: domain, type: \"NS\", value: \"ns1.extrovert.dev\", ttl: 300 },\n { name: domain, type: \"NS\", value: \"ns2.extrovert.dev\", ttl: 300 },\n ];\n}\n\n/** The list-view summary: status fields without the inline record set. */\nfunction domainSummary(d: Domain): Domain {\n const { records: _r, delegation_ns: _d, instruction: _i, ...rest } = d;\n return rest;\n}\n\nfunction reSubject(subject: string): string {\n return /^re:/i.test(subject) ? subject : `Re: ${normalizeThreadSubject(subject)}`;\n}\n\nfunction fwdSubject(subject: string): string {\n return /^fwd?:/i.test(subject) ? subject : `Fwd: ${normalizeThreadSubject(subject)}`;\n}\n\n/** Strip leading Re:/Fwd: prefixes for a thread's display subject. */\nfunction normalizeThreadSubject(subject: string): string {\n let s = subject.trim();\n for (;;) {\n const next = s.replace(/^(re|fwd|fw)\\s*:\\s*/i, \"\");\n if (next === s) break;\n s = next;\n }\n return s.trim();\n}\n\nfunction compileWaitRegex(pattern: string): RegExp {\n const explicitInsensitive = pattern.startsWith(\"(?i)\");\n const source = explicitInsensitive ? pattern.slice(4) : pattern;\n return new RegExp(source, explicitInsensitive ? \"i\" : undefined);\n}\n\n/** Decoded byte length of a base64 string (mirrors the Go-reported size). */\nfunction base64ByteLength(b64: string): number {\n const clean = b64.replace(/[\\r\\n\\s]/g, \"\");\n if (clean.length === 0) return 0;\n const padding = clean.endsWith(\"==\") ? 2 : clean.endsWith(\"=\") ? 1 : 0;\n return Math.floor((clean.length * 3) / 4) - padding;\n}\n","/**\n * `?include=` relation expansion typing (redesign §5.5 / §6.2).\n *\n * Reads may expand a per-resource allowlist of relations (depth ≤ 2); the server\n * re-applies the same ceiling/ownership filter to every expanded child. The SDK\n * types the allowed relations per resource so a caller cannot ask for a relation the\n * server would reject with 400 `bad_request`, and serializes the list as the\n * comma-separated `?include=` value.\n */\n\n/** Relations the `inbox` resource may expand (`?include=agent,domain`). */\nexport type InboxInclude = \"agent\" | \"domain\";\n\n/** Relations the `review` resource may expand (`?include=category,turns`). */\nexport type ReviewInclude = \"category\" | \"turns\";\n\n/** Serialize an include list into the comma-separated `?include=` query value. */\nexport function serializeInclude(include?: readonly string[]): string | undefined {\n if (!include || include.length === 0) return undefined;\n return include.join(\",\");\n}\n","/**\n * Transport abstraction.\n *\n * The resource methods speak a small, typed RPC surface; a transport decides whether each call hits\n * the live Extrovert API over HTTP or the offline {@link MockBackend}. This is the single mock seam:\n * flip `transport: \"mock\"` (or `EXTROVERT_API_BASE_URL=mock`) and the whole SDK runs without a network.\n *\n * `HttpTransport` is used for the live API; the mock stays for examples, docs, and tests.\n */\n\nimport { HttpClient, type BinaryResponse, type RequestOptions } from \"./http.js\";\nimport { MockBackend } from \"./fixtures.js\";\nimport { NotFoundError, ValidationError } from \"./errors.js\";\nimport type { List } from \"./pagination.js\";\nimport { serializeInclude } from \"./include.js\";\nimport { toWireArray } from \"./recipients.js\";\nimport type {\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n AckReviewEventRequest,\n AckReviewEventResult,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainStatusEventPage,\n DomainQuote,\n DomainOffboard,\n EnrollRequest,\n EnrollResponse,\n ForwardRequest,\n GetInboxParams,\n Inbox,\n InboxCredentials,\n Job,\n ListCommerceRequestsParams,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCategoriesParams,\n ListInboxesParams,\n ProjectInboxListParams,\n ListMessagesParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n UpdateCategoryRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n Page,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n ReplyRequest,\n CategoryPacingState,\n RestampReviewRequest,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n VerifyRequest,\n VerifyResponse,\n WaitForEmailRequest,\n WaitForEmailResult,\n WaitForReviewEventParams,\n Webhook,\n WhoAmI,\n} from \"./models.js\";\n\n/** Raw bytes of one attachment plus the metadata needed to save/serve it. */\nexport interface AttachmentDownload {\n filename: string;\n content_type: string;\n /** Standard base64 of the attachment bytes. */\n content_base64: string;\n}\n\n/** The RPC surface every transport implements. One method per spec §8 endpoint. */\nexport interface Transport {\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse>;\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse>;\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse>;\n whoami(signal?: AbortSignal): Promise<WhoAmI>;\n createInbox(req: CreateInboxRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Inbox>;\n listInboxes(params: ListInboxesParams, signal?: AbortSignal): Promise<Page<Inbox>>;\n getInbox(address: string, signal?: AbortSignal): Promise<Inbox>;\n updateInbox(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox>;\n deleteInbox(address: string, signal?: AbortSignal): Promise<void>;\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n // These map to /v1/projects/{project_id}/inboxes[/{inbox_id}], return the redesign\n // List envelope on list, and key single-row ops by the opaque inbox_id (an address\n // is accepted as a within-project alias). project_id may be \"-\" (org wildcard).\n createInboxInProject(\n projectId: string,\n req: CreateInboxRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n listInboxesInProject(\n projectId: string,\n params: ProjectInboxListParams,\n signal?: AbortSignal,\n ): Promise<List<Inbox>>;\n getInboxInProject(\n projectId: string,\n inboxId: string,\n params: GetInboxParams,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n deleteInboxInProject(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void>;\n getInboxCredentialsInProject(\n projectId: string,\n inboxId: string,\n signal?: AbortSignal,\n ): Promise<InboxCredentials>;\n // send / reply / forward all answer the same three-way SendOutcome union: the\n // resolved review policy decides whether a message is delivered now or parked\n // for a human, and the caller does not get to opt out of that decision.\n send(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome>;\n reply(address: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome>;\n forward(address: string, messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome>;\n listMessages(address: string, params: ListMessagesParams, signal?: AbortSignal): Promise<Page<Message>>;\n getMessage(messageId: string, signal?: AbortSignal): Promise<Message>;\n getMessageRaw(address: string, messageId: string, signal?: AbortSignal): Promise<string>;\n listAttachments(address: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>>;\n getAttachment(\n address: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload>;\n markRead(address: string, messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message>;\n deleteMessage(address: string, messageId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult>;\n batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult>;\n searchMessages(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>>;\n listThreads(address: string, params: ListThreadsParams, signal?: AbortSignal): Promise<Page<Thread>>;\n searchThreads(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>>;\n getThread(address: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail>;\n getSubmission(address: string, submissionId: string, signal?: AbortSignal): Promise<Submission>;\n getSubmissionInProject(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission>;\n deleteThread(address: string, threadId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult>;\n waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult>;\n registerWebhook(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook>;\n listWebhooks(signal?: AbortSignal): Promise<Page<Webhook>>;\n getWebhook(webhookId: string, signal?: AbortSignal): Promise<Webhook>;\n updateWebhook(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook>;\n deleteWebhook(webhookId: string, signal?: AbortSignal): Promise<void>;\n addContactListEntry(\n address: string,\n req: AddContactListRequest,\n signal?: AbortSignal,\n ): Promise<ContactListEntry>;\n listContactLists(address: string, signal?: AbortSignal): Promise<Page<ContactListEntry>>;\n deleteContactListEntry(address: string, entryId: string, signal?: AbortSignal): Promise<void>;\n // Suppressions (recipient opt-outs) - customer/org-scoped, not inbox-keyed.\n // precheck is the read-only \"is this recipient opted out of MY org's mail?\"; the\n // list pages the caller's own org rows; revoke re-enables one row (reason required).\n precheckSuppression(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck>;\n listSuppressions(params: ListSuppressionsParams, signal?: AbortSignal): Promise<Page<SuppressionEntry>>;\n revokeSuppression(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry>;\n listDomains(signal?: AbortSignal, params?: { page?: string; limit?: number }): Promise<Page<Domain>>;\n listDomainEvents(domain: string, params: { after?: string; limit?: number }, signal?: AbortSignal): Promise<DomainStatusEventPage>;\n getDomain(domain: string, signal?: AbortSignal): Promise<Domain>;\n onboardDomain(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain>;\n verifyDomain(domain: string, signal?: AbortSignal): Promise<Domain>;\n offboardDomain(domain: string, signal?: AbortSignal): Promise<DomainOffboard>;\n // Poll surface for an async job the agent enqueued (currently only the\n // domain-offboard teardown's status_url).\n getJob(jobId: string, signal?: AbortSignal): Promise<Job>;\n // Commerce request plane. These methods never expose human approval mutations.\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote>;\n requestDomainPurchase(req: RequestDomainPurchaseRequest, signal?: AbortSignal): Promise<CommerceRequest>;\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest>;\n getCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest>;\n cancelCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest>;\n listCommerceRequests(params: ListCommerceRequestsParams, signal?: AbortSignal): Promise<Page<CommerceRequest>>;\n // Review Loop (HITL): submit-for-review rides send/reply - literally the same\n // endpoints, so it answers the same SendOutcome union. It stays a distinct\n // method because it NAMES the intent of the call; a submit that omits `intent`\n // under require_review raises IntentRequiredError from either entry point.\n submitForReview(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome>;\n submitReplyForReview(\n address: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome>;\n listReviews(params: ListReviewsParams, signal?: AbortSignal): Promise<Page<Review>>;\n getReview(reviewId: string, signal?: AbortSignal): Promise<Review>;\n getReviewTurns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>>;\n // Review Loop (HITL) per-message CHAT + revision + cancel + feedback (M5). chat\n // takes an Idempotency-Key; submit_revision CASes on parent_revision (409 STALE).\n getReviewFeedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback>;\n postReviewChat(reviewId: string, req: PostReviewChatRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Review>;\n submitRevision(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review>;\n cancelReview(reviewId: string, idempotencyKey?: string, signal?: AbortSignal): Promise<Review>;\n // D19/§8 re-stamp-without-redraft escape valve ($0): assert \"reviewed against vX, no\n // change needed\" and advance composed_* WITHOUT a new draft.\n restampReview(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review>;\n // BYO review-agent DECISION plane (M8 Slice B; D5/§9). The reviewer (review:act + a\n // matching active link) reads its decision context, then decides approve|edit|reject|\n // escalate. On approve/edit the PLATFORM sends with the COMPOSER's creds (the\n // reviewer NEVER holds mailbox:send); the two circuit breakers force a maxed-out\n // review to the human regardless of intent.\n getReviewDecisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext>;\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest, signal?: AbortSignal): Promise<ReviewerDecisionResult>;\n // Review Loop (HITL) realtime: the durable nudge drain/ack/wait lifecycle. The\n // queue is the authoritative liveness source; SSE/webhook are fast paths atop it.\n listReviewEvents(params: ListReviewEventsParams, signal?: AbortSignal): Promise<ReviewEventsResult>;\n waitForReviewEvent(params: WaitForReviewEventParams, signal?: AbortSignal): Promise<ReviewEventsResult>;\n ackReviewEvent(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult>;\n // Category registry (Review Loop, D9/D10): browse / propose / rename. Customer-\n // scoped + agent-attributed (the cross-agent-404 exception). match= is lexical.\n listCategories(params: ListCategoriesParams, signal?: AbortSignal): Promise<Page<Category>>;\n getCategory(categoryId: string, signal?: AbortSignal): Promise<Category>;\n proposeCategory(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category>;\n updateCategory(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category>;\n // Graduation + risk dial (Review Loop, D16/D6/D17): agents READ the effective dial +\n // a category's graduation status, and PROPOSE graduation (records the request; never\n // flips the bit). Flipping the bit + setting the dial are console (human) actions.\n getRiskDial(signal?: AbortSignal): Promise<RiskDial>;\n getGraduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus>;\n proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus>;\n // D19/§8 backlog-reconciliation status (read-only): how many queued drafts are stale\n // vs current-enough against the current rules-version. Agents READ; humans/hooks TRIGGER.\n getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus>;\n // M7 Slice B/§8 demand-driven pacing state (read-only): the human review cursor, the\n // effective window/ceiling/interval, and each queued draft's classification.\n getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState>;\n // Writing rules + house-style + precedence ladder + audit/undo (D2/D11). ANY\n // agent may write/edit/promote/retire/undo (the cross-agent exception); get_rules\n // returns the ORDERED list with the §7 ladder applied server-side (NO LLM).\n getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule>;\n saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule>;\n promoteRule(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule>;\n retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule>;\n getRuleAudit(params: GetRuleAuditParams, signal?: AbortSignal): Promise<Page<RuleAuditEntry>>;\n undoRuleChange(udoId: string, signal?: AbortSignal): Promise<Rule>;\n /**\n * Open a live event stream. `address` scopes to one inbox (`GET\n * /v1/inboxes/{addr}/stream`); pass `null` for every owned inbox (`GET\n * /v1/events`). `lastEventId`, when set, resumes after that event seq. The\n * generator ends when the server closes the stream or `signal` aborts.\n */\n stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Wire-body builders for the three outbound verbs.\n//\n// The SDK's request types are ergonomic (`to` may be a bare string) and carry one\n// field that is NOT a body field at all (`idempotency_key`, which belongs in a\n// header). Shipping the caller's object verbatim - which is what these methods\n// used to do - sent both problems straight to a server that decodes with\n// DisallowUnknownFields and `[]string` recipients, so a documented, typechecked\n// call 400'd on the wire. These builders are the one boundary where the\n// ergonomic shape becomes the wire shape:\n//\n// 1. `idempotency_key` is REMOVED from the body and set as `Idempotency-Key`.\n// The server tolerates it in the body for already-shipped builds, but it\n// must not be there: the replay key is a hash of the raw body, so a key\n// carried inside its own hashed payload is self-referential noise.\n// 2. `to` / `cc` / `bcc` are widened from `string | string[]` to `string[]`.\n// An absent field stays absent - emitting `cc: []` would add a key the\n// caller never wrote.\n// 3. Nothing is RENAMED. `text` is the canonical name on both sides; that is\n// the whole reason `text` was chosen over the server's old `body`.\n// ---------------------------------------------------------------------------\n\n/** Strip the header-only `idempotency_key` from a request object. */\nfunction withoutIdempotencyKey<T extends { idempotency_key?: string }>(req: T): Omit<T, \"idempotency_key\"> {\n const { idempotency_key: _headerOnly, ...rest } = req;\n return rest;\n}\n\n/**\n * Drop keys whose value is `undefined` so an omitted optional never reaches the\n * wire as an explicit `null`/`undefined` entry. `JSON.stringify` already elides\n * `undefined` values, so this is belt-and-braces for readability of the emitted\n * body in tests.\n */\nfunction omitUndefined<T extends Record<string, unknown>>(obj: T): T {\n const out = {} as Record<string, unknown>;\n for (const [k, v] of Object.entries(obj)) if (v !== undefined) out[k] = v;\n return out as T;\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/send`. */\nfunction sendBody(req: SendRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n to: toWireArray(req.to),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/reply` (recipients are derived server-side). */\nfunction replyBody(req: ReplyRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/messages/{id}/forward`. */\nfunction forwardBody(req: ForwardRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n to: toWireArray(req.to),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** Live transport: each method maps to a `/v1` request. */\nexport class HttpTransport implements Transport {\n constructor(private readonly http: HttpClient) {}\n\n private encodeAddress(address: string): string {\n return encodeURIComponent(address);\n }\n\n private call<T>(opts: RequestOptions): Promise<T> {\n return this.http.request<T>(opts);\n }\n\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse> {\n return this.call({ method: \"POST\", path: \"/v1/enroll\", body: req, idempotencyKey: req.client_id, signal });\n }\n\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse> {\n return this.call({ method: \"POST\", path: \"/v1/agent/sign-up\", body: req, signal });\n }\n\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse> {\n return this.call({ method: \"POST\", path: \"/v1/agent/verify\", body: req, signal });\n }\n\n whoami(signal?: AbortSignal): Promise<WhoAmI> {\n return this.call({ method: \"GET\", path: \"/v1/auth/me\", signal });\n }\n\n createInbox(req: CreateInboxRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Inbox> {\n return this.call({\n method: \"POST\",\n path: \"/v1/inboxes\",\n body: req,\n idempotencyKey: idempotencyKey ?? req.client_id,\n signal,\n });\n }\n\n async listInboxes(params: ListInboxesParams, signal?: AbortSignal): Promise<Page<Inbox>> {\n // The bare GET /v1/inboxes returns the legacy `{inboxes, next_page}` shape (frozen\n // OpenAPI listInboxes), NOT the `{items, total, next_cursor}` Page envelope. Remap\n // it here so `page.items` / `page.next_cursor` are populated against the live API\n // (`inboxes` and `next_page` are dropped raw otherwise). Mirrors the MCP client.\n const raw = await this.call<{\n inboxes?: Inbox[];\n items?: Inbox[];\n next_page?: string;\n next_cursor?: string;\n }>({ method: \"GET\", path: \"/v1/inboxes\", query: { ...params }, signal });\n const items = raw.inboxes ?? raw.items ?? [];\n const page: Page<Inbox> = { items, total: items.length };\n const cursor = raw.next_cursor ?? raw.next_page;\n if (cursor) page.next_cursor = cursor;\n return page;\n }\n\n getInbox(address: string, signal?: AbortSignal): Promise<Inbox> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}`, signal });\n }\n\n updateInbox(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}`,\n body: req,\n signal,\n });\n }\n\n async deleteInbox(address: string, signal?: AbortSignal): Promise<void> {\n await this.call({ method: \"DELETE\", path: `/v1/inboxes/${this.encodeAddress(address)}`, signal });\n }\n\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n\n createInboxInProject(\n projectId: string,\n req: CreateInboxRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"POST\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes`,\n body: req,\n idempotencyKey: idempotencyKey ?? req.client_id,\n signal,\n });\n }\n\n listInboxesInProject(\n projectId: string,\n params: ProjectInboxListParams,\n signal?: AbortSignal,\n ): Promise<List<Inbox>> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes`,\n query: {\n limit: params.limit,\n cursor: params.cursor,\n include: serializeInclude(params.include),\n },\n signal,\n });\n }\n\n getInboxInProject(\n projectId: string,\n inboxId: string,\n params: GetInboxParams,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n query: { include: serializeInclude(params.include) },\n signal,\n });\n }\n\n updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n body: req,\n signal,\n });\n }\n\n async deleteInboxInProject(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void> {\n await this.call({\n method: \"DELETE\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n signal,\n });\n }\n\n getInboxCredentialsInProject(\n projectId: string,\n inboxId: string,\n signal?: AbortSignal,\n ): Promise<InboxCredentials> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}/credentials`,\n signal,\n });\n }\n\n send(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/send`,\n body: sendBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n reply(address: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/reply`,\n body: replyBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n forward(address: string, messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/forward`,\n body: forwardBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n listMessages(address: string, params: ListMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages`,\n query: { ...params },\n signal,\n });\n }\n\n getMessage(messageId: string, signal?: AbortSignal): Promise<Message> {\n return this.call({ method: \"GET\", path: `/v1/messages/${encodeURIComponent(messageId)}`, signal });\n }\n\n getMessageRaw(address: string, messageId: string, signal?: AbortSignal): Promise<string> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/raw`,\n raw: true,\n signal,\n });\n }\n\n listAttachments(address: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/attachments`,\n signal,\n });\n }\n\n async getAttachment(\n address: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n const res = await this.http.request<BinaryResponse>({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`,\n binary: true,\n signal,\n });\n return {\n filename: filenameFromDisposition(res.contentDisposition),\n content_type: res.contentType,\n content_base64: bytesToBase64(res.bytes),\n };\n }\n\n markRead(address: string, messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}`,\n body: req,\n signal,\n });\n }\n\n deleteMessage(\n address: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}`,\n query: expunge ? { expunge: true } : undefined,\n signal,\n });\n }\n\n batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/batch`,\n body: req,\n signal,\n });\n }\n\n searchMessages(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/search`,\n query: { ...params },\n signal,\n });\n }\n\n listThreads(address: string, params: ListThreadsParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads`,\n query: { ...params },\n signal,\n });\n }\n\n searchThreads(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/search`,\n query: { ...params },\n signal,\n });\n }\n\n getThread(address: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/${encodeURIComponent(threadId)}`,\n signal,\n });\n }\n\n getSubmission(address: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}/submissions/${encodeURIComponent(submissionId)}`, signal });\n }\n getSubmissionInProject(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.call({ method: \"GET\", path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}/submissions/${encodeURIComponent(submissionId)}`, signal });\n }\n\n deleteThread(\n address: string,\n threadId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/${encodeURIComponent(threadId)}`,\n query: expunge ? { expunge: true } : undefined,\n signal,\n });\n }\n\n waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/wait`,\n body: req,\n // The server blocks up to req.timeout_seconds; give the HTTP read a small margin over it.\n timeoutMs,\n retryable: false,\n signal,\n });\n }\n\n registerWebhook(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.call({ method: \"POST\", path: \"/v1/webhooks\", body: req, idempotencyKey: req.client_id, signal });\n }\n\n listWebhooks(signal?: AbortSignal): Promise<Page<Webhook>> {\n return this.call({ method: \"GET\", path: \"/v1/webhooks\", signal });\n }\n\n getWebhook(webhookId: string, signal?: AbortSignal): Promise<Webhook> {\n return this.call({ method: \"GET\", path: `/v1/webhooks/${encodeURIComponent(webhookId)}`, signal });\n }\n\n updateWebhook(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/webhooks/${encodeURIComponent(webhookId)}`,\n body: req,\n signal,\n });\n }\n\n async deleteWebhook(webhookId: string, signal?: AbortSignal): Promise<void> {\n await this.call({ method: \"DELETE\", path: `/v1/webhooks/${encodeURIComponent(webhookId)}`, signal });\n }\n\n addContactListEntry(\n address: string,\n req: AddContactListRequest,\n signal?: AbortSignal,\n ): Promise<ContactListEntry> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/lists`,\n body: req,\n signal,\n });\n }\n\n listContactLists(address: string, signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}/lists`, signal });\n }\n\n async deleteContactListEntry(address: string, entryId: string, signal?: AbortSignal): Promise<void> {\n await this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/lists/${encodeURIComponent(entryId)}`,\n signal,\n });\n }\n\n precheckSuppression(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck> {\n // A `recipient` query param routes the server to the pre-check shape\n // ({recipient, suppressed, rows}) rather than the paged list.\n return this.call({ method: \"GET\", path: \"/v1/suppressions\", query: { recipient }, signal });\n }\n\n listSuppressions(params: ListSuppressionsParams, signal?: AbortSignal): Promise<Page<SuppressionEntry>> {\n // Note: no `recipient` here - that param switches the server to the pre-check.\n return this.call({\n method: \"GET\",\n path: \"/v1/suppressions\",\n query: {\n scope: params.scope,\n include_revoked: params.include_revoked ? \"true\" : undefined,\n limit: params.limit,\n cursor: params.cursor,\n },\n signal,\n });\n }\n\n revokeSuppression(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry> {\n return this.call({\n method: \"POST\",\n path: `/v1/suppressions/${encodeURIComponent(id)}/revoke`,\n body: { reason },\n signal,\n });\n }\n\n listDomains(signal?: AbortSignal, params: { page?: string; limit?: number } = {}): Promise<Page<Domain>> {\n return this.call({ method: \"GET\", path: \"/v1/domains\", query: params, signal });\n }\n\n listDomainEvents(domain: string, params: { after?: string; limit?: number }, signal?: AbortSignal): Promise<DomainStatusEventPage> {\n return this.call({ method: \"GET\", path: `/v1/domains/${encodeURIComponent(domain)}/events`, query: params, signal });\n }\n\n getDomain(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.call({ method: \"GET\", path: `/v1/domains/${encodeURIComponent(domain)}`, signal });\n }\n\n onboardDomain(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain> {\n return this.call({ method: \"POST\", path: \"/v1/domains\", body: req, signal });\n }\n\n // Delegated domains perform an immediate authoritative DNS check. Inspect\n // delegation.status separately from mail readiness; 429 requests may be retried.\n verifyDomain(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.call({\n method: \"POST\",\n path: `/v1/domains/${encodeURIComponent(domain)}/verify`,\n signal,\n });\n }\n\n async offboardDomain(domain: string, signal?: AbortSignal): Promise<DomainOffboard> {\n // Async contract: the API accepts the offboard (HTTP 202) and returns the\n // teardown job to poll; the request body carries { job_id, status, status_url }.\n const res = await this.call<Partial<DomainOffboard>>({\n method: \"DELETE\",\n path: `/v1/domains/${encodeURIComponent(domain)}`,\n signal,\n });\n const jobId = res?.job_id ?? \"\";\n return {\n domain,\n job_id: jobId,\n status: res?.status ?? \"queued\",\n status_url: res?.status_url ?? (jobId ? `/v1/jobs/${jobId}` : \"\"),\n };\n }\n\n getJob(jobId: string, signal?: AbortSignal): Promise<Job> {\n return this.call({ method: \"GET\", path: `/v1/jobs/${encodeURIComponent(jobId)}`, signal });\n }\n\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote> {\n return this.call({ method: \"POST\", path: \"/v1/commerce/domain-quotes\", body: req, signal });\n }\n\n requestDomainPurchase(\n req: RequestDomainPurchaseRequest,\n signal?: AbortSignal,\n ): Promise<CommerceRequest> {\n const { idempotency_key, ...body } = req;\n return this.call({\n method: \"POST\",\n path: \"/v1/commerce/requests/domain-purchases\",\n body,\n idempotencyKey: idempotency_key,\n signal,\n });\n }\n\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest> {\n const { idempotency_key, ...body } = req;\n return this.call({\n method: \"POST\",\n path: \"/v1/commerce/requests/plan-changes\",\n body,\n idempotencyKey: idempotency_key,\n signal,\n });\n }\n\n getCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.call({\n method: \"GET\",\n path: `/v1/commerce/requests/${encodeURIComponent(requestId)}`,\n signal,\n });\n }\n\n cancelCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.call({\n method: \"POST\",\n path: `/v1/commerce/requests/${encodeURIComponent(requestId)}/cancel`,\n signal,\n });\n }\n\n listCommerceRequests(\n params: ListCommerceRequestsParams,\n signal?: AbortSignal,\n ): Promise<Page<CommerceRequest>> {\n return this.call({\n method: \"GET\",\n path: \"/v1/commerce/requests\",\n query: {\n limit: params.limit,\n page: params.page,\n },\n signal,\n });\n }\n\n submitForReview(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/send`,\n body: sendBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n submitReplyForReview(\n address: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/reply`,\n body: replyBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n listReviews(params: ListReviewsParams, signal?: AbortSignal): Promise<Page<Review>> {\n const query: Record<string, string | number | undefined> = {\n state: Array.isArray(params.state) ? params.state.join(\",\") : params.state,\n category_id: params.category_id,\n inbox: params.inbox,\n composer: params.composer,\n limit: params.limit,\n page: params.page,\n };\n return this.call({ method: \"GET\", path: \"/v1/reviews\", query, signal });\n }\n\n getReview(reviewId: string, signal?: AbortSignal): Promise<Review> {\n return this.call({ method: \"GET\", path: `/v1/reviews/${encodeURIComponent(reviewId)}`, signal });\n }\n\n getReviewTurns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/turns`,\n signal,\n });\n }\n\n getReviewFeedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/feedback`,\n signal,\n });\n }\n\n postReviewChat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/chat`,\n body: req,\n idempotencyKey,\n signal,\n });\n }\n\n submitRevision(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/revision`,\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n cancelReview(reviewId: string, idempotencyKey?: string, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/cancel`,\n body: {},\n idempotencyKey,\n signal,\n });\n }\n\n restampReview(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/restamp`,\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n getReviewDecisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/decision-context`,\n signal,\n });\n }\n\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest, signal?: AbortSignal): Promise<ReviewerDecisionResult> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/decision`,\n body: req,\n signal,\n });\n }\n\n listReviewEvents(params: ListReviewEventsParams, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.call({\n method: \"GET\",\n path: \"/v1/reviews/events\",\n query: { review_id: params.review_id, limit: params.limit },\n signal,\n });\n }\n\n waitForReviewEvent(params: WaitForReviewEventParams, signal?: AbortSignal): Promise<ReviewEventsResult> {\n const waitSeconds = Math.min(55, Math.max(1, params.wait_seconds ?? 55));\n return this.call({\n method: \"GET\",\n path: \"/v1/reviews/events/wait\",\n query: { review_id: params.review_id, limit: params.limit, wait_seconds: waitSeconds },\n timeoutMs: (waitSeconds + 10) * 1000,\n signal,\n });\n }\n\n ackReviewEvent(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult> {\n return this.call({\n method: \"POST\",\n path: \"/v1/reviews/events/ack\",\n body: { acks: req.acks ?? [], broadcast_ids: req.broadcast_ids ?? [] },\n signal,\n });\n }\n\n listCategories(params: ListCategoriesParams, signal?: AbortSignal): Promise<Page<Category>> {\n return this.call({ method: \"GET\", path: \"/v1/categories\", query: { ...params }, signal });\n }\n\n getCategory(categoryId: string, signal?: AbortSignal): Promise<Category> {\n return this.call({ method: \"GET\", path: `/v1/categories/${encodeURIComponent(categoryId)}`, signal });\n }\n\n proposeCategory(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.call({ method: \"POST\", path: \"/v1/categories\", body: req, signal });\n }\n\n updateCategory(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.call({\n method: \"PUT\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}`,\n body: req,\n signal,\n });\n }\n\n getRiskDial(signal?: AbortSignal): Promise<RiskDial> {\n return this.call({ method: \"GET\", path: \"/v1/risk-dial\", signal });\n }\n\n getGraduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/graduation-status`,\n signal,\n });\n }\n\n getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/backlog-status`,\n signal,\n });\n }\n\n getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/pacing-state`,\n signal,\n });\n }\n\n proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.call({\n method: \"POST\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/graduation-request`,\n body: { evidence: req.evidence ?? {} },\n signal,\n });\n }\n\n getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot> {\n return this.call({\n method: \"GET\",\n path: \"/v1/rules\",\n query: { category_id: params.category_id, scope: params.scope },\n signal,\n });\n }\n\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule> {\n return this.call({method: \"POST\", path: `/v1/reviews/${encodeURIComponent(reviewId)}/learned-rules`, body: req, signal});\n }\n saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"PUT\",\n path: \"/v1/rules\",\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n promoteRule(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"POST\",\n path: `/v1/rules/${encodeURIComponent(ruleId)}/promote`,\n body: { to_scope: toScope },\n signal,\n });\n }\n\n retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule> {\n return this.call({ method: \"POST\", path: `/v1/rules/${encodeURIComponent(ruleId)}/retire`, body: {}, signal });\n }\n\n getRuleAudit(params: GetRuleAuditParams, signal?: AbortSignal): Promise<Page<RuleAuditEntry>> {\n return this.call({\n method: \"GET\",\n path: \"/v1/rules/audit\",\n query: { entity_kind: params.entity_kind, entity_id: params.entity_id },\n signal,\n });\n }\n\n undoRuleChange(udoId: string, signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"POST\",\n path: `/v1/rules/audit/${encodeURIComponent(udoId)}/undo`,\n body: {},\n signal,\n });\n }\n\n async *stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n const path =\n address === null ? \"/v1/events\" : `/v1/inboxes/${this.encodeAddress(address)}/stream`;\n const frames = this.http.stream({\n path,\n lastEventId: lastEventId !== undefined ? String(lastEventId) : undefined,\n signal,\n });\n for await (const frame of frames) {\n // The SSE `data:` is the canonical event envelope; the `id:` is the monotonic\n // resume token (seq). Merge them into the typed StreamEvent.\n let envelope: Record<string, unknown> = {};\n try {\n envelope = JSON.parse(frame.data) as Record<string, unknown>;\n } catch {\n continue; // skip malformed frames rather than aborting the whole stream\n }\n const seq = frame.id !== undefined ? Number(frame.id) : NaN;\n yield {\n ...(envelope as object),\n event: (envelope.event as string) ?? frame.event,\n seq: Number.isFinite(seq) ? seq : 0,\n } as StreamEvent;\n }\n }\n}\n\n/** Offline transport backed by {@link MockBackend}. Never touches the network. */\nexport class MockTransport implements Transport {\n readonly backend: MockBackend;\n constructor(backend?: MockBackend) {\n this.backend = backend ?? new MockBackend();\n }\n\n async enroll(req: EnrollRequest): Promise<EnrollResponse> {\n return this.backend.enroll(req);\n }\n async signUp(req: SignUpRequest): Promise<SignUpResponse> {\n return this.backend.signUp(req);\n }\n async verify(req: VerifyRequest): Promise<VerifyResponse> {\n return this.backend.verify(req);\n }\n async whoami(): Promise<WhoAmI> {\n return this.backend.whoami();\n }\n async createInbox(req: CreateInboxRequest): Promise<Inbox> {\n return this.backend.createInbox(req);\n }\n async listInboxes(params: ListInboxesParams): Promise<Page<Inbox>> {\n return this.backend.listInboxes(params);\n }\n async getInbox(address: string): Promise<Inbox> {\n const inbox = this.backend.getInbox(address);\n if (!inbox) throw notFound(\"inbox\", address);\n return inbox;\n }\n async updateInbox(address: string, req: UpdateInboxRequest): Promise<Inbox> {\n const inbox = this.backend.updateInbox(address, req);\n if (!inbox) throw notFound(\"inbox\", address);\n return inbox;\n }\n async deleteInbox(address: string): Promise<void> {\n this.backend.deleteInbox(address);\n }\n async createInboxInProject(projectId: string, req: CreateInboxRequest): Promise<Inbox> {\n return this.backend.createInboxInProject(projectId, req);\n }\n async listInboxesInProject(projectId: string, params: ProjectInboxListParams): Promise<List<Inbox>> {\n return this.backend.listInboxesInProject(projectId, params);\n }\n async getInboxInProject(projectId: string, inboxId: string): Promise<Inbox> {\n const inbox = this.backend.getInboxInProject(projectId, inboxId);\n if (!inbox) throw notFound(\"inbox\", inboxId);\n return inbox;\n }\n async updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n ): Promise<Inbox> {\n const inbox = this.backend.updateInboxInProject(projectId, inboxId, req);\n if (!inbox) throw notFound(\"inbox\", inboxId);\n return inbox;\n }\n async deleteInboxInProject(projectId: string, inboxId: string): Promise<void> {\n if (!this.backend.deleteInboxInProject(projectId, inboxId)) throw notFound(\"inbox\", inboxId);\n }\n async getInboxCredentialsInProject(projectId: string, inboxId: string): Promise<InboxCredentials> {\n const creds = this.backend.getInboxCredentialsInProject(projectId, inboxId);\n if (!creds) throw notFound(\"inbox\", inboxId);\n return creds;\n }\n async send(address: string, req: SendRequest): Promise<SendOutcome> {\n return this.backend.send(address, req);\n }\n async reply(address: string, req: ReplyRequest): Promise<SendOutcome> {\n return this.backend.reply(address, req);\n }\n async forward(address: string, messageId: string, req: ForwardRequest): Promise<SendOutcome> {\n return this.backend.forward(address, messageId, req);\n }\n async listMessages(address: string, params: ListMessagesParams): Promise<Page<Message>> {\n return this.backend.listMessages(address, params);\n }\n async getMessage(messageId: string): Promise<Message> {\n try {\n return this.backend.getMessage(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async getMessageRaw(_address: string, messageId: string): Promise<string> {\n try {\n return this.backend.getMessageRaw(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async listAttachments(_address: string, messageId: string): Promise<Page<Attachment>> {\n try {\n return this.backend.listAttachments(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async getAttachment(\n _address: string,\n messageId: string,\n attachmentId: string,\n ): Promise<AttachmentDownload> {\n try {\n return this.backend.getAttachment(messageId, attachmentId);\n } catch {\n throw notFound(\"attachment\", attachmentId);\n }\n }\n async markRead(_address: string, messageId: string, req: MarkReadRequest): Promise<Message> {\n try {\n return this.backend.markRead(messageId, req.read);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async deleteMessage(address: string, messageId: string, expunge?: boolean): Promise<DeleteResult> {\n const res = this.backend.deleteMessage(address, messageId, expunge ?? false);\n if (!res) throw notFound(\"message\", messageId);\n return res;\n }\n async batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n ): Promise<BatchUpdateResult> {\n if (req.read === undefined && req.folder === undefined) {\n throw invalid(\"set read and/or folder to update\");\n }\n const res = this.backend.batchUpdateMessages(address, req.ids, req.read, req.folder);\n if (!res) throw notFound(\"inbox\", address);\n return res;\n }\n async searchMessages(address: string, params: SearchMessagesParams): Promise<Page<Message>> {\n return this.backend.searchMessages(address, params);\n }\n async listThreads(address: string, params: ListThreadsParams): Promise<Page<Thread>> {\n return this.backend.listThreads(address, params);\n }\n async searchThreads(address: string, params: SearchMessagesParams): Promise<Page<Thread>> {\n return this.backend.searchThreads(address, params);\n }\n async getThread(address: string, threadId: string): Promise<ThreadDetail> {\n try {\n return this.backend.getThread(address, threadId);\n } catch {\n throw notFound(\"thread\", threadId);\n }\n }\n async getSubmission(address: string, submissionId: string): Promise<Submission> {\n const result = this.backend.getSubmission(address, submissionId);\n if (!result) throw notFound(\"submission\", submissionId);\n return result;\n }\n async getSubmissionInProject(projectId: string, inboxId: string, submissionId: string): Promise<Submission> {\n const inbox = await this.getInboxInProject(projectId, inboxId);\n return this.getSubmission(inbox.address, submissionId);\n }\n async deleteThread(address: string, threadId: string, expunge?: boolean): Promise<DeleteResult> {\n const res = this.backend.deleteThread(address, threadId, expunge ?? false);\n if (!res) throw notFound(\"thread\", threadId);\n return res;\n }\n async waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n _timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n if (signal?.aborted) throw notFound(\"inbox\", address);\n return this.backend.waitForEmail(address, req);\n }\n async registerWebhook(req: RegisterWebhookRequest): Promise<Webhook> {\n return this.backend.registerWebhook(req);\n }\n async listWebhooks(): Promise<Page<Webhook>> {\n return this.backend.listWebhooks();\n }\n async getWebhook(webhookId: string): Promise<Webhook> {\n const hook = this.backend.getWebhook(webhookId);\n if (!hook) throw notFound(\"webhook\", webhookId);\n return hook;\n }\n async updateWebhook(webhookId: string, req: UpdateWebhookRequest): Promise<Webhook> {\n const hook = this.backend.updateWebhook(webhookId, req);\n if (!hook) throw notFound(\"webhook\", webhookId);\n return hook;\n }\n async deleteWebhook(webhookId: string): Promise<void> {\n if (!this.backend.deleteWebhook(webhookId)) throw notFound(\"webhook\", webhookId);\n }\n async addContactListEntry(address: string, req: AddContactListRequest): Promise<ContactListEntry> {\n const entry = this.backend.addContactListEntry(address, req);\n if (!entry) throw notFound(\"inbox\", address);\n return entry;\n }\n async listContactLists(address: string): Promise<Page<ContactListEntry>> {\n const page = this.backend.listContactLists(address);\n if (!page) throw notFound(\"inbox\", address);\n return page;\n }\n async deleteContactListEntry(address: string, entryId: string): Promise<void> {\n if (!this.backend.deleteContactListEntry(address, entryId)) throw notFound(\"contact list entry\", entryId);\n }\n async precheckSuppression(recipient: string): Promise<SuppressionPrecheck> {\n return this.backend.precheckSuppression(recipient);\n }\n async listSuppressions(params: ListSuppressionsParams): Promise<Page<SuppressionEntry>> {\n return this.backend.listSuppressions(params);\n }\n async revokeSuppression(id: string, reason: string): Promise<SuppressionEntry> {\n const row = this.backend.revokeSuppression(id, reason);\n if (!row) throw notFound(\"suppression\", id);\n return row;\n }\n async listDomains(_signal?: AbortSignal, params: { page?: string; limit?: number } = {}): Promise<Page<Domain>> {\n const page = this.backend.listDomains();\n const offset = Number(params.page ?? 0);\n if (!Number.isSafeInteger(offset) || offset < 0) throw new Error(\"Invalid page cursor\");\n const items = page.items.slice(offset, offset + (params.limit ?? 50));\n return { items, total: page.total, next_cursor: offset + items.length < page.items.length ? String(offset + items.length) : undefined };\n }\n\n async listDomainEvents(domain: string, params: { after?: string; limit?: number }): Promise<DomainStatusEventPage> {\n if (!this.backend.getDomain(domain)) throw notFound(\"domain\", domain);\n return { items: [], next_cursor: params.after ?? \"0\", has_more: false, poll_after_seconds: 30 };\n }\n async getDomain(domain: string): Promise<Domain> {\n const d = this.backend.getDomain(domain);\n if (!d) throw notFound(\"domain\", domain);\n return d;\n }\n async onboardDomain(req: OnboardDomainRequest): Promise<Domain> {\n return this.backend.onboardDomain(req);\n }\n async verifyDomain(domain: string): Promise<Domain> {\n const d = this.backend.verifyDomain(domain);\n if (!d) throw notFound(\"domain\", domain);\n return d;\n }\n async offboardDomain(domain: string): Promise<DomainOffboard> {\n if (!this.backend.offboardDomain(domain)) throw notFound(\"domain\", domain);\n // No job runner in the mock backend: report a synthetic succeeded teardown job\n // (the backend recorded it, so a follow-up getJob resolves it too).\n const jobId = `job-offboard-${domain.trim().toLowerCase()}`;\n return { domain, job_id: jobId, status: \"succeeded\", status_url: `/v1/jobs/${jobId}` };\n }\n async getJob(jobId: string): Promise<Job> {\n const job = this.backend.getJob(jobId);\n if (!job) throw notFound(\"job\", jobId);\n return job;\n }\n async quoteDomain(req: QuoteDomainRequest): Promise<DomainQuote> {\n return this.backend.quoteDomain(req);\n }\n async requestDomainPurchase(req: RequestDomainPurchaseRequest): Promise<CommerceRequest> {\n return this.backend.requestDomainPurchase(req);\n }\n async requestPlanChange(req: RequestPlanChangeRequest): Promise<CommerceRequest> {\n return this.backend.requestPlanChange(req);\n }\n async getCommerceRequest(requestId: string): Promise<CommerceRequest> {\n const request = this.backend.getCommerceRequest(requestId);\n if (!request) throw notFound(\"commerce request\", requestId);\n return request;\n }\n async cancelCommerceRequest(requestId: string): Promise<CommerceRequest> {\n const request = this.backend.cancelCommerceRequest(requestId);\n if (!request) throw notFound(\"commerce request\", requestId);\n return request;\n }\n async listCommerceRequests(params: ListCommerceRequestsParams): Promise<Page<CommerceRequest>> {\n return this.backend.listCommerceRequests(params);\n }\n async submitForReview(address: string, req: SendRequest): Promise<SendOutcome> {\n return this.backend.submitForReview(address, req);\n }\n async submitReplyForReview(address: string, req: ReplyRequest): Promise<SendOutcome> {\n return this.backend.submitReplyForReview(address, req);\n }\n async listReviews(params: ListReviewsParams): Promise<Page<Review>> {\n return this.backend.listReviews(params);\n }\n async getReview(reviewId: string): Promise<Review> {\n const r = this.backend.getReview(reviewId);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async getReviewTurns(reviewId: string): Promise<Page<ReviewTurn>> {\n const turns = this.backend.getReviewTurns(reviewId);\n if (!turns) throw notFound(\"review\", reviewId);\n return turns;\n }\n async getReviewFeedback(reviewId: string): Promise<ReviewFeedback> {\n const fb = this.backend.getReviewFeedback(reviewId);\n if (!fb) throw notFound(\"review\", reviewId);\n return fb;\n }\n async postReviewChat(reviewId: string, req: PostReviewChatRequest, idempotencyKey?: string): Promise<Review> {\n const r = this.backend.postReviewChat(reviewId, req, idempotencyKey);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async submitRevision(reviewId: string, req: SubmitRevisionRequest): Promise<Review> {\n const r = this.backend.submitRevision(reviewId, req);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async cancelReview(reviewId: string, _idempotencyKey?: string): Promise<Review> {\n const r = this.backend.cancelReview(reviewId);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async restampReview(reviewId: string, req: RestampReviewRequest): Promise<Review> {\n const r = this.backend.restampReview(reviewId, req);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async getReviewDecisionContext(reviewId: string): Promise<ReviewDecisionContext> {\n const dc = this.backend.getReviewDecisionContext(reviewId);\n if (!dc) throw notFound(\"review\", reviewId);\n return dc;\n }\n async reviewerDecide(reviewId: string, req: ReviewerDecisionRequest): Promise<ReviewerDecisionResult> {\n const res = this.backend.reviewerDecide(reviewId, req);\n if (!res) throw notFound(\"review\", reviewId);\n return res;\n }\n async listReviewEvents(params: ListReviewEventsParams): Promise<ReviewEventsResult> {\n return this.backend.listReviewEvents(params);\n }\n async waitForReviewEvent(params: WaitForReviewEventParams): Promise<ReviewEventsResult> {\n return this.backend.waitForReviewEvent(params);\n }\n async ackReviewEvent(req: AckReviewEventRequest): Promise<AckReviewEventResult> {\n return this.backend.ackReviewEvent(req);\n }\n async listCategories(params: ListCategoriesParams): Promise<Page<Category>> {\n return this.backend.listCategories(params);\n }\n async getCategory(categoryId: string): Promise<Category> {\n const c = this.backend.getCategory(categoryId);\n if (!c) throw notFound(\"category\", categoryId);\n return c;\n }\n async proposeCategory(req: ProposeCategoryRequest): Promise<Category> {\n return this.backend.proposeCategory(req);\n }\n async updateCategory(categoryId: string, req: UpdateCategoryRequest): Promise<Category> {\n const c = this.backend.updateCategory(categoryId, req);\n if (!c) throw notFound(\"category\", categoryId);\n return c;\n }\n async getRiskDial(): Promise<RiskDial> {\n return this.backend.getRiskDial();\n }\n async getGraduationStatus(categoryId: string): Promise<GraduationStatus> {\n const st = this.backend.getGraduationStatus(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async proposeGraduation(categoryId: string, req: ProposeGraduationRequest): Promise<GraduationStatus> {\n const st = this.backend.proposeGraduation(categoryId, req);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getScanBacklogStatus(categoryId: string): Promise<ScanBacklogStatus> {\n const st = this.backend.getScanBacklogStatus(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getCategoryPacingState(categoryId: string): Promise<CategoryPacingState> {\n const st = this.backend.getCategoryPacingState(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getRules(params: GetRulesParams): Promise<RuleSnapshot> {\n return this.backend.getRules(params);\n }\n async learnReviewRule(reviewId: string, req: LearnReviewRuleRequest): Promise<LearnedReviewRule> {\n return this.backend.learnReviewRule(reviewId, req);\n }\n async saveRule(req: SaveRuleRequest): Promise<Rule> {\n return this.backend.saveRule(req);\n }\n async promoteRule(ruleId: string, toScope: \"general\" | \"category\"): Promise<Rule> {\n const r = this.backend.promoteRule(ruleId, toScope);\n if (!r) throw notFound(\"rule\", ruleId);\n return r;\n }\n async retireRule(ruleId: string): Promise<Rule> {\n const r = this.backend.retireRule(ruleId);\n if (!r) throw notFound(\"rule\", ruleId);\n return r;\n }\n async getRuleAudit(params: GetRuleAuditParams): Promise<Page<RuleAuditEntry>> {\n return this.backend.getRuleAudit(params);\n }\n async undoRuleChange(udoId: string): Promise<Rule> {\n return this.backend.undoRuleChange(udoId);\n }\n async *stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n for await (const ev of this.backend.streamEvents(address, lastEventId)) {\n if (signal?.aborted) return;\n yield ev;\n }\n }\n}\n\nfunction notFound(kind: string, id: string): NotFoundError {\n return new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `No ${kind} found for \"${id}\" in the offline mock.`,\n });\n}\n\nfunction invalid(message: string): ValidationError {\n return new ValidationError({ status: 400, code: \"invalid\", message });\n}\n\n/** Runtime-agnostic base64 of a byte array (no Buffer dependency). */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]!);\n if (typeof btoa === \"function\") return btoa(binary);\n // Node fallback when btoa is unavailable.\n const g = globalThis as { Buffer?: { from(s: string, enc: string): { toString(enc: string): string } } };\n if (g.Buffer) return g.Buffer.from(binary, \"binary\").toString(\"base64\");\n throw new Error(\"No base64 encoder available in this runtime.\");\n}\n\n/** Pull a filename out of a Content-Disposition header value. */\nfunction filenameFromDisposition(disposition: string): string {\n const m = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(disposition);\n return m ? decodeURIComponent(m[1]!.trim()) : \"\";\n}\n","import type { Domain } from \"./models.js\";\n\nexport interface DomainWaitResult {\n domain: Domain;\n outcome: \"ready\" | \"action_required\" | \"needs_attention\" | \"timed_out\" | \"status_unavailable\";\n resume_after_seconds: number;\n}\n\n/** Bounded, cancellable status polling. Never initiates DNS or provider work. */\nexport async function waitForDomain(\n get: (signal: AbortSignal) => Promise<Domain>,\n options: { timeout_seconds?: number; signal?: AbortSignal } = {},\n): Promise<DomainWaitResult> {\n const seconds = options.timeout_seconds ?? 45;\n if (!Number.isInteger(seconds) || seconds < 0 || seconds > 50) throw new Error(\"timeout_seconds must be an integer between 0 and 50\");\n const deadline = AbortSignal.timeout(Math.max(1, seconds * 1000));\n const signal = options.signal ? AbortSignal.any([options.signal, deadline]) : deadline;\n let latest: Domain | undefined;\n const result = (outcome: DomainWaitResult[\"outcome\"]): DomainWaitResult => ({\n domain: latest!, outcome,\n resume_after_seconds: outcome === \"timed_out\" ? Math.max(5, Math.min(60, latest?.readiness?.poll_after_seconds ?? 30)) : 0,\n });\n try {\n // Zero means one status check, not an immediately aborted request.\n const singleCheckDeadline = seconds === 0 ? AbortSignal.timeout(10_000) : undefined;\n latest = await get(singleCheckDeadline\n ? (options.signal ? AbortSignal.any([options.signal, singleCheckDeadline]) : singleCheckDeadline)\n : signal);\n for (;;) {\n const r = latest.readiness;\n if (!r) return result(\"status_unavailable\");\n if (r.ready_for_inboxes) return result(\"ready\");\n if (r.action_required_by === \"customer\") return result(\"action_required\");\n if (r.status === \"needs_attention\") return result(\"needs_attention\");\n if (seconds === 0) return result(\"timed_out\");\n await new Promise<void>((resolve, reject) => {\n signal.throwIfAborted();\n const abort = () => { clearTimeout(timer); reject(signal.reason); };\n const timer = setTimeout(() => { signal.removeEventListener(\"abort\", abort); resolve(); }, Math.max(5, Math.min(60, r.poll_after_seconds || 30)) * 1000);\n signal.addEventListener(\"abort\", abort, { once: true });\n });\n latest = await get(signal);\n }\n } catch (error) {\n if (options.signal?.aborted) throw options.signal.reason;\n if (deadline.aborted && latest) return result(\"timed_out\");\n throw error;\n }\n}\n","/**\n * Key-tier awareness (redesign §3.1).\n *\n * An agent key encodes its CEILING tier in its raw prefix. The SDK never trusts\n * client input for scope - the tier is derived from the key the caller already\n * holds, purely as a client-side hint so an app can branch (e.g. an org-tier key\n * MUST pick a project breadth on a list; a project/inbox key may use the bare\n * sugar). The server remains the source of truth; this is advisory only.\n *\n * Prefix scheme (the secret tail is unchanged across tiers):\n * - `pk_agent_org_…` → {@link KeyTier.Org} (admin/console issuance only)\n * - `pk_agent_proj_…` → {@link KeyTier.Project} (enrollment redeem + console)\n * - `pk_agent_inbox_…` → {@link KeyTier.Inbox} (admin/console issuance only)\n * - legacy `pk_agent_…` (no tier segment) → {@link KeyTier.Project}\n */\n\n/** The ceiling tier encoded in an agent key's prefix. */\nexport type KeyTier = \"org\" | \"project\" | \"inbox\" | \"unknown\";\n\nconst AGENT_HEAD = \"pk_agent_\";\n\n/**\n * Derive the {@link KeyTier} from a raw agent key by peeking the segment after the\n * `pk_agent_` head. A legacy bare `pk_agent_…` key (no tier segment) maps to\n * `\"project\"` - exactly today's behavior. A non-agent credential (enrollment\n * token, Clerk session, empty) returns `\"unknown\"`.\n */\nexport function parseKeyTier(apiKey: string | undefined): KeyTier {\n if (!apiKey || !apiKey.startsWith(AGENT_HEAD)) return \"unknown\";\n const rest = apiKey.slice(AGENT_HEAD.length);\n if (rest.startsWith(\"org_\")) return \"org\";\n if (rest.startsWith(\"proj_\")) return \"project\";\n if (rest.startsWith(\"inbox_\")) return \"inbox\";\n // Bare `pk_agent_<id>_<secret>` (no tier segment) is a legacy project key.\n return \"project\";\n}\n\n/**\n * Whether a key of this tier can address the org-wide wildcard (`/v1/projects/-/…`).\n * Only an org-tier key may; a project/inbox key on the wildcard is a 403. Use this\n * to fail fast client-side before a round-trip.\n */\nexport function tierAllowsOrgWildcard(tier: KeyTier): boolean {\n return tier === \"org\";\n}\n\n/**\n * Whether a bare (project-less) list is unambiguous for this tier. An org-tier key\n * MUST pick a breadth (a concrete project or the `-` wildcard), so a bare list is a\n * 400 `breadth_required`; project/inbox keys default to their bound project.\n */\nexport function tierNeedsExplicitBreadth(tier: KeyTier): boolean {\n return tier === \"org\";\n}\n","/**\n * InboxHandle: an ergonomic, bound handle to a single inbox.\n *\n * Returned by `extrovert.inboxes.create(...)` and `extrovert.inbox(address)`, it scopes every operation\n * to one address so agent code reads naturally: `inbox.send(...)`, `inbox.waitForEmail(...)`. This\n * is the \"one agent = one inbox\" shape the spec's identity model encourages (§5).\n */\n\nimport type { AttachmentDownload, Transport } from \"../transport.js\";\nimport type {\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n ContactListEntry,\n DeleteResult,\n ForwardRequest,\n Inbox,\n InboxCredentials,\n InboxStatus,\n ListMessagesParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n OnboardingMode,\n Page,\n RegisterWebhookRequest,\n ReplyRequest,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n StreamEvent,\n StreamOptions,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n WaitForEmailRequest,\n WaitForEmailResult,\n Webhook,\n} from \"../models.js\";\n\nexport interface InboxHandleOptions {\n /** Default per-call timeout for blocking calls; resolved from the client config. */\n defaultWaitTimeoutMs: number;\n}\n\nexport class InboxHandle {\n /** The canonical address, e.g. `agent7@extrovertmail.com`. */\n readonly address: string;\n /** The full inbox record this handle was created from (absent when constructed by address). */\n readonly record: Inbox | undefined;\n\n constructor(\n private readonly transport: Transport,\n address: string,\n private readonly options: InboxHandleOptions,\n record?: Inbox,\n ) {\n this.address = address;\n this.record = record;\n }\n\n /** The inbox id, when known. */\n get id(): string | undefined {\n return this.record?.id;\n }\n\n /**\n * The canonical key every transport op routes on. The contract canonicalizes the\n * OPAQUE inbox id (`pmbx_…`) and accepts the address only as a within-project alias\n * (both are valid in the `{inbox_id}` path slot). When this handle was built from a\n * full record we route by the canonical `id` (matching the \"an inbox's canonical key\n * is its opaque id\" docs); when built bare from an address (`client.inbox(addr)`),\n * the address alias is the only key we have, so we route on it.\n */\n private get ref(): string {\n return this.record?.id ?? this.address;\n }\n\n /**\n * Arbitrary key-value metadata on this inbox, when known (from the record this\n * handle was created from). Call {@link refresh} to re-read it after an update.\n */\n get metadata(): Inbox[\"metadata\"] | undefined {\n return this.record?.metadata;\n }\n\n /** Effective rolling-24-hour recipient cap, when known. */\n get dailySendLimit(): number | undefined {\n return this.record?.daily_send_limit;\n }\n\n /** Provisioning status, when known. */\n get status(): InboxStatus | undefined {\n return this.record?.status;\n }\n\n /** Onboarding mode of the host domain, when known. */\n get onboardingMode(): OnboardingMode | undefined {\n return this.record?.onboarding_mode;\n }\n\n /** Credentials, present only when the inbox was created with `returnCredentials: true`. */\n get credentials(): InboxCredentials | undefined {\n return this.record?.credentials;\n }\n\n /** Re-fetch the live inbox record. */\n refresh(signal?: AbortSignal): Promise<Inbox> {\n return this.transport.getInbox(this.ref, signal);\n }\n\n /**\n * Update this inbox's settings in place without delete+recreate: rename the sender\n * `display_name`, change the `webhook_url`, patch arbitrary `metadata` (shallow\n * merge; a key set to `null` deletes it, top-level `metadata: null` clears all),\n * or set `daily_send_limit` to 1–10,000 recipients per rolling 24h. The limit\n * field requires the opt-in `mailbox:quota` scope.\n * Returns the updated inbox record.\n */\n update(req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox> {\n return this.transport.updateInbox(this.ref, req, signal);\n }\n\n /**\n * Send an email from this authenticated inbox. Starts a new thread.\n *\n * Returns a three-way {@link SendOutcome}: `kind:\"queued_for_review\"` means a\n * human has to approve it and NOTHING has been delivered yet; anything else was\n * delivered. Under the default `require_review` policy a call WITHOUT an\n * `intent` raises `IntentRequiredError` (422) instead: nothing sent, nothing\n * queued: so pass one, or read `inbox.record.effective_review_policy` first.\n */\n send(req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.send(this.ref, req, signal);\n }\n\n /**\n * Reply within an existing thread. Select the parent with `thread_id` (reply to\n * the latest message) or `message_id` (reply to that message); the server\n * derives To / Subject / In-Reply-To / References. Set `reply_all` to reply to\n * every thread recipient. Returns the same three-way {@link SendOutcome} as\n * {@link send}: a reply is governed by the review policy too.\n */\n reply(req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.reply(this.ref, req, signal);\n }\n\n /**\n * Forward a message in this inbox to new recipients, preserving the original.\n *\n * A forward is an outbound message to arbitrary NEW recipients that quotes an\n * inbound thread, so it is governed by the review policy exactly like a send :\n * same {@link SendOutcome} union, same `intent` requirement.\n */\n forward(messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.forward(this.ref, messageId, req, signal);\n }\n\n /**\n * Submit a new message from this inbox for human review (Review Loop, HITL).\n * Pass `intent` (required when the resolved mode is review) and optionally\n * `mode`/`category_id`. The account/inbox review policy decides whether the\n * message is queued for review (`kind:\"queued_for_review\"`) or sent on a\n * policy-permitted direct path (`kind:\"sent\"`). Monitor it via\n * `extrovert.reviews`.\n */\n submitForReview(req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.submitForReview(this.ref, req, signal);\n }\n\n /**\n * Submit an in-thread reply from this inbox for human review (Review Loop).\n * Same routing/return contract as {@link submitForReview}.\n */\n submitReplyForReview(req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.submitReplyForReview(this.ref, req, signal);\n }\n\n /**\n * List messages in this inbox, newest first. Narrow with exact-field filters\n * (from/to/subject substring) or `unread: true` (native \\Seen); page with\n * limit + offset.\n */\n messages(params: ListMessagesParams = {}, signal?: AbortSignal): Promise<Page<Message>> {\n return this.transport.listMessages(this.ref, params, signal);\n }\n\n /** Full-text search this inbox (IMAP SEARCH over from/subject/body). */\n search(params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.transport.searchMessages(this.ref, params, signal);\n }\n\n /** Download the raw RFC822 `.eml` bytes for a message in this inbox. */\n messageRaw(messageId: string, signal?: AbortSignal): Promise<string> {\n return this.transport.getMessageRaw(this.ref, messageId, signal);\n }\n\n /** Mark a message in this inbox read/unread via the native \\Seen flag. */\n markRead(messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message> {\n return this.transport.markRead(this.ref, messageId, req, signal);\n }\n\n /**\n * Delete a message in this inbox: move it to Trash (default, recoverable) or\n * permanently remove it when `expunge` is true.\n */\n deleteMessage(messageId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult> {\n return this.transport.deleteMessage(this.ref, messageId, expunge, signal);\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of message ids in this\n * inbox. At least one of `read` / `folder` must be set; returns the per-id\n * `{updated, failed}` split.\n */\n batchUpdateMessages(req: BatchUpdateMessagesRequest, signal?: AbortSignal): Promise<BatchUpdateResult> {\n return this.transport.batchUpdateMessages(this.ref, req, signal);\n }\n\n /** List a message's attachment metadata ({id, filename, content_type, size}). */\n attachments(messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.transport.listAttachments(this.ref, messageId, signal);\n }\n\n /** Download one attachment's bytes (base64) plus filename and content type. */\n attachment(\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.transport.getAttachment(this.ref, messageId, attachmentId, signal);\n }\n\n /** List conversation threads in this inbox, newest-active first. */\n threads(params: ListThreadsParams = {}, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.transport.listThreads(this.ref, params, signal);\n }\n\n /** Thread-level search in this inbox (subject / snippet / participants). */\n searchThreads(params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.transport.searchThreads(this.ref, params, signal);\n }\n\n /** Fetch one thread (with its messages) in this inbox by stable id. */\n thread(threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.transport.getThread(this.ref, threadId, signal);\n }\n\n /** Check an accepted submission without sending it again. */\n getSubmission(submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.transport.getSubmission(this.ref, submissionId, signal);\n }\n\n /**\n * Delete an entire thread in this inbox (every message): move to Trash\n * (default) or permanently remove when `expunge` is true.\n */\n deleteThread(threadId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult> {\n return this.transport.deleteThread(this.ref, threadId, expunge, signal);\n }\n\n /**\n * Poll server-side until a matching message arrives and return it with an extracted\n * OTP / verification link. The HTTP read timeout is set a hair above the server-side\n * `timeoutSeconds` so the request doesn't abort before the server returns its own timeout result.\n */\n waitForEmail(req: WaitForEmailRequest = {}, signal?: AbortSignal): Promise<WaitForEmailResult> {\n const serverTimeoutSeconds = req.timeout_seconds ?? 300;\n // Give the HTTP read a 5s margin over the server's blocking window, and never read for less\n // than the client's configured default timeout.\n const readTimeoutMs = Math.max(\n serverTimeoutSeconds * 1000 + 5000,\n this.options.defaultWaitTimeoutMs,\n );\n return this.transport.waitForEmail(this.ref, req, readTimeoutMs, signal);\n }\n\n /** Register an HMAC-signed inbound webhook scoped to this inbox. */\n registerWebhook(\n req: Omit<RegisterWebhookRequest, \"inbox\">,\n signal?: AbortSignal,\n ): Promise<Webhook> {\n return this.transport.registerWebhook({ ...req, inbox: this.address }, signal);\n }\n\n /**\n * Add an allow/block contact-list entry to this inbox. A `block` entry rejects a\n * send to a matching recipient; once any `allow` entry exists, sends from this\n * inbox are restricted to recipients that match one (allowlist mode).\n */\n addContactListEntry(req: AddContactListRequest, signal?: AbortSignal): Promise<ContactListEntry> {\n return this.transport.addContactListEntry(this.ref, req, signal);\n }\n\n /** List the allow/block contact-list entries governing this inbox. */\n listContactLists(signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.transport.listContactLists(this.ref, signal);\n }\n\n /** Delete a contact-list entry on this inbox by id. */\n deleteContactListEntry(entryId: string, signal?: AbortSignal): Promise<void> {\n return this.transport.deleteContactListEntry(this.ref, entryId, signal);\n }\n\n /**\n * Watch this inbox live (Server-Sent Events). Returns an async iterator of\n * {@link StreamEvent}; each `message.received` event arrives as it lands instead\n * of polling {@link waitForEmail}. Pass `lastEventId` (the `seq` of the last\n * event you saw) to resume without gaps after a reconnect, and a `signal` to\n * close the stream.\n *\n * ```ts\n * for await (const ev of inbox.stream()) {\n * if (ev.event === \"message.received\") console.log(\"new mail:\", ev.message?.subject);\n * }\n * ```\n */\n stream(options: StreamOptions = {}): AsyncGenerator<StreamEvent, void, unknown> {\n return this.transport.stream(this.ref, options.lastEventId, options.signal);\n }\n\n /**\n * Convenience wrapper over {@link stream}: invoke `onEvent` for every event until\n * the stream closes (or `signal` aborts). Returns when the stream ends.\n */\n async subscribe(\n onEvent: (event: StreamEvent) => void | Promise<void>,\n options: StreamOptions = {},\n ): Promise<void> {\n for await (const ev of this.stream(options)) {\n await onEvent(ev);\n }\n }\n\n /**\n * Permanently tear down this inbox and its messages/sender identity. Requires\n * `mailbox:delete`; this operation cannot be undone.\n */\n delete(signal?: AbortSignal): Promise<void> {\n return this.transport.deleteInbox(this.ref, signal);\n }\n}\n","/**\n * The ONE list envelope + opaque-cursor iteration (redesign §5.2 / §6.2).\n *\n * Every redesign collection endpoint (the canonical `x.projects.inboxes.*` chain\n * and beyond) returns {@link List}: `{ object: \"list\", data, has_more, next_cursor }`.\n * `next_cursor` is OPAQUE - treat it as a token and pass it back verbatim as\n * `?cursor` to fetch the next page. {@link ListPage} wraps a raw {@link List} with\n * ergonomic iteration (`for await … of`) and a `nextPage()` cursor walker so callers\n * never thread cursors by hand.\n */\n\n/** The opaque pagination cursor. Pass it back verbatim as `?cursor`; never parse it. */\nexport type Cursor = string;\n\n/** The one collection envelope for every redesign list response. */\nexport interface List<T> {\n /** Always the literal `\"list\"`. */\n object: \"list\";\n /** The rows on this page. */\n data: T[];\n /** True when another page exists (i.e. `next_cursor` is non-null). */\n has_more: boolean;\n /** Opaque cursor for the next page, or `null` on the last page. */\n next_cursor: Cursor | null;\n}\n\n/** Query params shared by every cursor-paginated list. */\nexport interface ListParams {\n /** Page size (server clamps to 1–100; default 50). */\n limit?: number;\n /** Opaque cursor from a prior page's `next_cursor`. */\n cursor?: Cursor;\n}\n\n/** A function that fetches one page given an opaque cursor (or undefined for page 1). */\nexport type PageFetcher<T> = (cursor: Cursor | undefined, signal?: AbortSignal) => Promise<List<T>>;\n\n/**\n * An ergonomic wrapper over a single {@link List} page that also knows how to fetch\n * the next page and auto-iterate across ALL pages.\n *\n * ```ts\n * const page = await x.projects.inboxes.list(\"proj_9k\");\n * for await (const inbox of page) console.log(inbox.id); // walks every page\n * // …or page-at-a-time:\n * if (page.hasMore) { const next = await page.nextPage(); }\n * ```\n */\nexport class ListPage<T> implements AsyncIterable<T> {\n /** The rows on THIS page. */\n readonly data: T[];\n /** True when another page exists. */\n readonly hasMore: boolean;\n /** Opaque cursor for the next page (null on the last page). */\n readonly nextCursor: Cursor | null;\n /** Always `\"list\"`. */\n readonly object = \"list\" as const;\n\n constructor(\n raw: List<T>,\n private readonly fetcher: PageFetcher<T>,\n ) {\n this.data = raw.data;\n this.hasMore = raw.has_more;\n this.nextCursor = raw.next_cursor;\n }\n\n /**\n * Fetch the next page. Throws if there is none - guard with {@link hasMore}.\n */\n async nextPage(signal?: AbortSignal): Promise<ListPage<T>> {\n if (!this.hasMore || this.nextCursor === null) {\n throw new Error(\"Extrovert: no more pages (next_cursor is null).\");\n }\n const raw = await this.fetcher(this.nextCursor, signal);\n return new ListPage(raw, this.fetcher);\n }\n\n /**\n * Auto-paginate: yield every row across every page, fetching subsequent pages\n * lazily as the iterator is consumed. The default iteration of a `ListPage`.\n */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let page: ListPage<T> = this;\n for (;;) {\n for (const item of page.data) yield item;\n if (!page.hasMore || page.nextCursor === null) return;\n page = await page.nextPage();\n }\n }\n\n /** Collect EVERY row across EVERY page into a single array (eager). */\n async collect(signal?: AbortSignal): Promise<T[]> {\n const out: T[] = [...this.data];\n let page: ListPage<T> = this;\n while (page.hasMore && page.nextCursor !== null) {\n page = await page.nextPage(signal);\n out.push(...page.data);\n }\n return out;\n }\n}\n\n/** Build a {@link ListPage} from the first raw {@link List} and a page fetcher. */\nexport function listPage<T>(raw: List<T>, fetcher: PageFetcher<T>): ListPage<T> {\n return new ListPage(raw, fetcher);\n}\n","/**\n * `extrovert.projects`: the CANONICAL project-scoped resource chain (redesign §4).\n *\n * Scope lives in the KEY; a broad (org-tier) key narrows to one project by PATH.\n * The headline chain is `x.projects.inboxes.*`, mirroring\n * `/v1/projects/{project_id}/inboxes[/{inbox_id}]`:\n *\n * ```ts\n * const inbox = await x.projects.inboxes.create(\"proj_9k\", { username: \"ada\" });\n * const page = await x.projects.inboxes.list(\"proj_9k\"); // List envelope\n * for await (const i of page) console.log(i.id); // auto-paginates\n * await x.projects.inboxes.send(\"proj_9k\", inbox.id, { to, subject, text });\n * ```\n *\n * Operations are keyed by the OPAQUE `inbox_id` (the inbox's email address is also\n * accepted as a within-project alias). `projectId` may be `\"-\"` for the org-wide\n * wildcard: only an org-tier key may use it (others get 403 `forbidden_scope`).\n *\n * The bare `x.inboxes.*` / `x.inbox(address)` surface is curl-style sugar that\n * resolves to the key's default project; this chain is the contract-canonical one.\n */\n\nimport type { Transport, AttachmentDownload } from \"../transport.js\";\nimport { ValidationError } from \"../errors.js\";\nimport { ListPage } from \"../pagination.js\";\nimport type {\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n CreateInboxRequest,\n DeleteResult,\n ForwardRequest,\n GetInboxParams,\n Inbox,\n InboxCredentials,\n ListMessagesParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n Page,\n ProjectInboxListParams,\n ReplyRequest,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n WaitForEmailRequest,\n WaitForEmailResult,\n} from \"../models.js\";\nimport type { InboxHandleOptions } from \"./inbox-handle.js\";\n\n/** Options forwarded into the chain (per-call wait timeout, resolved from the client). */\ninterface ProjectsContext {\n transport: Transport;\n handleOptions: InboxHandleOptions;\n}\n\n/**\n * `x.projects.inboxes`: create / list / get / update / delete inboxes, plus the\n * send / reply / message / thread / wait operations, all scoped to one project (or\n * the `-` org wildcard for an org-tier key). List returns a {@link ListPage} that\n * auto-paginates over the opaque-cursor {@link import(\"../pagination.js\").List} envelope.\n */\nexport class ProjectInboxes {\n constructor(private readonly ctx: ProjectsContext) {}\n\n /** Create an inbox in `projectId`. `idempotencyKey` (or `req.client_id`) makes it exactly-once. */\n create(\n projectId: string,\n req: CreateInboxRequest = {},\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.createInboxInProject(\n projectId,\n req,\n idempotencyKey ?? req.client_id,\n signal,\n );\n }\n\n /**\n * List inboxes in `projectId` (or the org subtree with `projectId=\"-\"`). Returns a\n * {@link ListPage} that yields the {@link import(\"../pagination.js\").List} envelope's\n * rows and auto-paginates across pages via the opaque cursor.\n */\n async list(\n projectId: string,\n params: ProjectInboxListParams = {},\n signal?: AbortSignal,\n ): Promise<ListPage<Inbox>> {\n const fetcher = (cursor: string | undefined, s?: AbortSignal) =>\n this.ctx.transport.listInboxesInProject(projectId, { ...params, cursor }, s);\n const first = await fetcher(params.cursor, signal);\n return new ListPage(first, fetcher);\n }\n\n /** Get an inbox by opaque `inboxId` (or address alias) in `projectId`. */\n get(\n projectId: string,\n inboxId: string,\n params: GetInboxParams = {},\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.getInboxInProject(projectId, inboxId, params, signal);\n }\n\n /**\n * Update an inbox in place (display name / webhook / metadata / daily send\n * limit). `daily_send_limit` requires the opt-in `mailbox:quota` scope.\n */\n update(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.updateInboxInProject(projectId, inboxId, req, signal);\n }\n\n /**\n * Permanently delete an inbox by opaque id (or address alias). Requires\n * `mailbox:delete`; the inbox and its messages cannot be recovered.\n */\n delete(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteInboxInProject(projectId, inboxId, signal);\n }\n\n /** Fetch IMAP/SMTP connection settings + login for an inbox. */\n credentials(projectId: string, inboxId: string, signal?: AbortSignal): Promise<InboxCredentials> {\n return this.ctx.transport.getInboxCredentialsInProject(projectId, inboxId, signal);\n }\n\n /**\n * Send an email from an inbox in `projectId`.\n *\n * Returns a three-way {@link SendOutcome}: `kind:\"queued_for_review\"` means a\n * human has to approve it and NOTHING has been delivered yet; anything else was\n * delivered. Under the default `require_review` policy a call WITHOUT an\n * `intent` raises `IntentRequiredError` (422) instead: nothing sent, nothing\n * queued: so pass one, or read `inbox.record.effective_review_policy` first.\n */\n send(\n projectId: string,\n inboxId: string,\n req: SendRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.send(this.ref(projectId, inboxId), req, signal);\n }\n\n /** Reply within a thread from an inbox in `projectId`. See {@link send} on the return union. */\n reply(\n projectId: string,\n inboxId: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.reply(this.ref(projectId, inboxId), req, signal);\n }\n\n /** Forward a message from an inbox in `projectId`. See {@link send} on the return union. */\n forward(\n projectId: string,\n inboxId: string,\n messageId: string,\n req: ForwardRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.forward(this.ref(projectId, inboxId), messageId, req, signal);\n }\n\n /** List messages in an inbox in `projectId`. */\n messages(\n projectId: string,\n inboxId: string,\n params: ListMessagesParams = {},\n signal?: AbortSignal,\n ): Promise<Page<Message>> {\n return this.ctx.transport.listMessages(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Search messages in an inbox in `projectId`. */\n searchMessages(\n projectId: string,\n inboxId: string,\n params: SearchMessagesParams,\n signal?: AbortSignal,\n ): Promise<Page<Message>> {\n return this.ctx.transport.searchMessages(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Mark a message read/unread in an inbox in `projectId`. */\n markRead(\n projectId: string,\n inboxId: string,\n messageId: string,\n req: MarkReadRequest,\n signal?: AbortSignal,\n ): Promise<Message> {\n return this.ctx.transport.markRead(this.ref(projectId, inboxId), messageId, req, signal);\n }\n\n /** Delete a message in an inbox in `projectId`. */\n deleteMessage(\n projectId: string,\n inboxId: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteMessage(this.ref(projectId, inboxId), messageId, expunge, signal);\n }\n\n /** Batch mark/move messages in an inbox in `projectId`. */\n batchUpdateMessages(\n projectId: string,\n inboxId: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.ctx.transport.batchUpdateMessages(this.ref(projectId, inboxId), req, signal);\n }\n\n /** List a message's attachment metadata. */\n attachments(\n projectId: string,\n inboxId: string,\n messageId: string,\n signal?: AbortSignal,\n ): Promise<Page<Attachment>> {\n return this.ctx.transport.listAttachments(this.ref(projectId, inboxId), messageId, signal);\n }\n\n /** Download one attachment's bytes + filename + content type. */\n attachment(\n projectId: string,\n inboxId: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.ctx.transport.getAttachment(this.ref(projectId, inboxId), messageId, attachmentId, signal);\n }\n\n /** List conversation threads in an inbox in `projectId`. */\n threads(\n projectId: string,\n inboxId: string,\n params: ListThreadsParams = {},\n signal?: AbortSignal,\n ): Promise<Page<Thread>> {\n return this.ctx.transport.listThreads(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Fetch one thread (+ its messages) in an inbox in `projectId`. */\n thread(\n projectId: string,\n inboxId: string,\n threadId: string,\n signal?: AbortSignal,\n ): Promise<ThreadDetail> {\n return this.ctx.transport.getThread(this.ref(projectId, inboxId), threadId, signal);\n }\n\n /** Read recipient transport and Sent-copy status for an accepted submission. */\n getSubmission(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.ctx.transport.getSubmissionInProject(projectId, inboxId, submissionId, signal);\n }\n\n /**\n * Block until a matching message arrives in an inbox in `projectId` and return it\n * with an extracted OTP / verification link.\n */\n waitForEmail(\n projectId: string,\n inboxId: string,\n req: WaitForEmailRequest = {},\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n const serverTimeoutSeconds = req.timeout_seconds ?? 300;\n const readTimeoutMs = Math.max(\n serverTimeoutSeconds * 1000 + 5000,\n this.ctx.handleOptions.defaultWaitTimeoutMs,\n );\n return this.ctx.transport.waitForEmail(this.ref(projectId, inboxId), req, readTimeoutMs, signal);\n }\n\n /**\n * The inbox reference the message/send/thread transport methods key on.\n *\n * The frozen contract project-prefixes ONLY the inbox collection/item/credentials\n * routes (`/v1/projects/{project_id}/inboxes[/{inbox_id}][/credentials]`); the\n * send/reply/forward/message/thread/wait sub-ops have NO project-prefixed path :\n * they address the inbox by its opaque id directly (`/v1/inboxes/{inbox_id}/…`),\n * where the project is implicit in (and enforced by) the inbox id server-side.\n *\n * So for these sub-ops `projectId` cannot be carried on the URL and is NOT a URL\n * selector. The adversarial review flagged that silently discarding it makes the\n * signature misleading. CHOICE: keep the arg (dropping it would break the chain's\n * symmetry with create/list/get/update/delete: the more disruptive option) but\n * VALIDATE it rather than ignore it. We reject the two client mistakes we can catch\n * without a round-trip:\n * - a blank / whitespace-only `projectId` (a required selector everywhere else in\n * the chain), and\n * - the org wildcard `-`, which is meaningless for a single-inbox op (there is no\n * breadth to pick).\n * The inbox-id ↔ project binding itself is enforced server-side by the opaque id.\n */\n private ref(projectId: string, inboxId: string): string {\n if (projectId.trim() === \"\") {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"projectId is required for the x.projects.inboxes sub-operations. Pass the concrete \" +\n \"project id (or use the bare x.inboxes / x.inbox(id) surface for the key's default project).\",\n });\n }\n if (projectId === \"-\") {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"The org wildcard \\\"-\\\" is only valid for list/create breadth, not a single-inbox \" +\n \"operation. Pass the concrete project id (or use the bare x.inboxes / x.inbox(id) surface).\",\n });\n }\n return inboxId;\n }\n}\n\n/**\n * `extrovert.projects`: the canonical project-scoped resource namespace. Today it\n * exposes the `inboxes` chain (`x.projects.inboxes.*`); future project-scoped\n * resources (domains, agents) hang off the same namespace.\n */\nexport class Projects {\n /** `x.projects.inboxes.*`: the canonical inbox chain. */\n readonly inboxes: ProjectInboxes;\n\n constructor(ctx: ProjectsContext) {\n this.inboxes = new ProjectInboxes(ctx);\n }\n}\n","/**\n * Resource namespaces: `extrovert.inboxes`, `extrovert.messages`, `extrovert.threads`,\n * `extrovert.webhooks`, `extrovert.contactLists`, `extrovert.domains`. Each is a thin,\n * typed facade over the {@link Transport}.\n */\n\nimport type { AttachmentDownload, Transport } from \"../transport.js\";\nimport { BreadthRequiredError, ValidationError } from \"../errors.js\";\nimport { waitForDomain, type DomainWaitResult } from \"../domain-wait.js\";\nimport { tierNeedsExplicitBreadth, type KeyTier } from \"../key-tier.js\";\nimport { InboxHandle, type InboxHandleOptions } from \"./inbox-handle.js\";\nimport type {\n AckReviewEventRequest,\n AckReviewEventResult,\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainStatusEventPage,\n DomainQuote,\n DomainOffboard,\n Inbox,\n ListCategoriesParams,\n ListCommerceRequestsParams,\n ListInboxesParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ReplyRequest,\n Page,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n RestampReviewRequest,\n CategoryPacingState,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SearchMessagesParams,\n SendOutcome,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n ThreadDetail,\n Submission,\n Thread,\n UpdateCategoryRequest,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n WaitForReviewEventParams,\n Webhook,\n} from \"../models.js\";\n\nexport { InboxHandle } from \"./inbox-handle.js\";\nexport { Projects, ProjectInboxes } from \"./projects.js\";\n\ninterface ResourceContext {\n transport: Transport;\n handleOptions: InboxHandleOptions;\n /**\n * The CEILING tier derived from the configured key prefix. Advisory client-side\n * hint ONLY (the server stays authoritative); lets the bare sugar surface fail\n * fast for an org-tier key that must pick a breadth, matching the MCP surface.\n */\n keyTier: KeyTier;\n}\n\n/** `extrovert.inboxes`: create, list, get, update, delete inboxes. */\nexport class Inboxes {\n constructor(private readonly ctx: ResourceContext) {}\n\n /**\n * Create an inbox. The default path creates an address on `extrovertmail.com`\n * for paid accounts or `free.extrovertmail.com` for free signups, so it returns\n * a live inbox in one call.\n *\n * Pass `metadata` to attach arbitrary key-value data, and `client_id` for idempotent creation\n * (re-calling with the same id returns the same inbox, with its metadata replayed verbatim).\n */\n async create(req: CreateInboxRequest = {}, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.createInbox(req, req.client_id, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * List inboxes visible to the calling key (the bare curl-sugar surface: resolves\n * to the key's default project). An org-tier key has no single default project, so\n * the bare list is ambiguous: fail fast client-side with a BreadthRequiredError that\n * names the next call, matching the MCP surface, instead of round-tripping to a 400.\n * Use `extrovert.projects.inboxes.list(\"<project_id>\")` or `\"-\"` (org subtree) for\n * an org key. The check is advisory: the server stays authoritative.\n */\n list(params: ListInboxesParams = {}, signal?: AbortSignal): Promise<Page<Inbox>> {\n if (tierNeedsExplicitBreadth(this.ctx.keyTier)) {\n return Promise.reject(\n new BreadthRequiredError({\n status: 400,\n code: \"breadth_required\",\n message:\n \"An org-tier key must pick a list breadth: use extrovert.projects.inboxes.list(\\\"<project_id>\\\") \" +\n \"or extrovert.projects.inboxes.list(\\\"-\\\") (the org subtree).\",\n }),\n );\n }\n return this.ctx.transport.listInboxes(params, signal);\n }\n\n /** Fetch a single inbox and return an ergonomic handle bound to it. */\n async get(address: string, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.getInbox(address, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * Update an inbox's settings in place without delete+recreate: rename the sender\n * `display_name`, change the `webhook_url`, patch arbitrary `metadata` (shallow\n * merge; a key set to `null` deletes it, top-level `metadata: null` clears all),\n * or set the effective `daily_send_limit` (1–10,000 recipients per rolling 24h).\n * Updating the daily limit requires the opt-in `mailbox:quota` scope.\n * Returns a handle bound to the updated record.\n */\n async update(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.updateInbox(address, req, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * Permanently delete an inbox by address. Requires `mailbox:delete`; the inbox,\n * messages, and sender identity cannot be recovered.\n */\n delete(address: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteInbox(address, signal);\n }\n}\n\n/**\n * `extrovert.messages`: read a message, fetch its raw bytes, mark it read.\n *\n * Reply and forward are inbox-scoped (the server resolves the parent and derives\n * recipients), so they live on the {@link InboxHandle} (`inbox.reply(...)`,\n * `inbox.forward(...)`), not here.\n */\nexport class Messages {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Fetch a single message by its opaque id; the owning inbox is resolved from the id. */\n get(messageId: string, signal?: AbortSignal): Promise<Message> {\n return this.ctx.transport.getMessage(messageId, signal);\n }\n\n /**\n * Download the raw RFC822 `.eml` bytes for a message. `inbox` is the owning\n * address (needed to open the inbox); the id identifies the message.\n */\n raw(inbox: string, messageId: string, signal?: AbortSignal): Promise<string> {\n return this.ctx.transport.getMessageRaw(inbox, messageId, signal);\n }\n\n /**\n * Mark a message read/unread via the native IMAP \\Seen flag (Extrovert's\n * label-free read state). `inbox` is the owning address.\n */\n markRead(\n inbox: string,\n messageId: string,\n req: MarkReadRequest,\n signal?: AbortSignal,\n ): Promise<Message> {\n return this.ctx.transport.markRead(inbox, messageId, req, signal);\n }\n\n /**\n * Delete a message: move it to Trash (default, recoverable) or permanently\n * remove it when `expunge` is true. `inbox` is the owning address.\n */\n delete(\n inbox: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteMessage(inbox, messageId, expunge, signal);\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of message ids in one\n * inbox. At least one of `read` / `folder` must be set; returns the per-id\n * `{updated, failed}` split.\n */\n batchUpdate(\n inbox: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.ctx.transport.batchUpdateMessages(inbox, req, signal);\n }\n\n /**\n * List a message's attachment metadata ({id, filename, content_type, size}).\n * `inbox` is the owning address; the message id identifies the message.\n */\n listAttachments(inbox: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.ctx.transport.listAttachments(inbox, messageId, signal);\n }\n\n /**\n * Download one attachment's bytes (base64) plus its filename and content type.\n * The \"easy attachment fetch\": `inbox` is the owning address, `messageId` the\n * message, and `attachmentId` the opaque id from {@link listAttachments}.\n */\n getAttachment(\n inbox: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.ctx.transport.getAttachment(inbox, messageId, attachmentId, signal);\n }\n}\n\n/**\n * `extrovert.threads`: list, search, read, reply to, and delete conversations,\n * scoped to their owning inbox.\n */\nexport class Threads {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** List conversations newest-active first. Pass `next_cursor` back as `cursor` for the next page. */\n list(inbox: string, params: ListThreadsParams = {}, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.ctx.transport.listThreads(inbox, params, signal);\n }\n\n /** Search thread subjects, snippets, and participants. Cursor pagination matches {@link list}. */\n search(\n inbox: string,\n params: SearchMessagesParams,\n signal?: AbortSignal,\n ): Promise<Page<Thread>> {\n return this.ctx.transport.searchThreads(inbox, params, signal);\n }\n\n /** Fetch one thread (+ its messages, oldest-first) by id under its owning inbox address. */\n get(inbox: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.ctx.transport.getThread(inbox, threadId, signal);\n }\n\n /** Reply in a thread; recipients and RFC reply headers are derived server-side. */\n reply(inbox: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.ctx.transport.reply(inbox, req, signal);\n }\n\n /**\n * Delete an entire thread (every message): move to Trash (default) or\n * permanently remove when `expunge` is true. `inbox` is the owning address.\n */\n delete(\n inbox: string,\n threadId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteThread(inbox, threadId, expunge, signal);\n }\n}\n\n/** `extrovert.submissions`: read transport status; never resubmits a message. */\nexport class Submissions {\n constructor(private readonly ctx: ResourceContext) {}\n get(inbox: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.ctx.transport.getSubmission(inbox, submissionId, signal);\n }\n}\n\n/** `extrovert.webhooks`: register / list / get / update / delete HMAC-signed inbound webhooks. */\nexport class Webhooks {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Register an HMAC-signed, timestamped webhook. The signing `secret` is returned once. */\n register(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.ctx.transport.registerWebhook(req, signal);\n }\n\n /** List registered webhooks (the one-time signing `secret` is omitted). */\n list(signal?: AbortSignal): Promise<Page<Webhook>> {\n return this.ctx.transport.listWebhooks(signal);\n }\n\n /** Fetch one webhook by id (the signing `secret` is omitted). */\n get(webhookId: string, signal?: AbortSignal): Promise<Webhook> {\n return this.ctx.transport.getWebhook(webhookId, signal);\n }\n\n /**\n * Update a webhook in place: change the delivery `url`, the subscribed\n * `events`, the `inbox` filter (empty string clears it), or `active` to\n * enable/disable delivery. Omitted fields are left unchanged (PATCH\n * semantics). The signing `secret` is immutable and stays redacted.\n */\n update(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.ctx.transport.updateWebhook(webhookId, req, signal);\n }\n\n /** Delete a webhook by id. */\n delete(webhookId: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteWebhook(webhookId, signal);\n }\n}\n\n/**\n * `extrovert.contactLists`: per-inbox allow/block lists of addresses/domains.\n * A `block` entry rejects a send to a matching recipient; once an `allow` entry\n * exists for an inbox, sends from it are restricted to matching recipients\n * (allowlist mode). Entries are addressable by their opaque id (`lst_…`).\n */\nexport class ContactLists {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Add an allow/block entry to an inbox. */\n add(inbox: string, req: AddContactListRequest, signal?: AbortSignal): Promise<ContactListEntry> {\n return this.ctx.transport.addContactListEntry(inbox, req, signal);\n }\n\n /** List the entries governing an inbox (inbox-specific + account-wide). */\n list(inbox: string, signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.ctx.transport.listContactLists(inbox, signal);\n }\n\n /** Delete an entry on an inbox by id. */\n delete(inbox: string, entryId: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteContactListEntry(inbox, entryId, signal);\n }\n}\n\n/**\n * `extrovert.suppressions`: recipient opt-outs (list-unsubscribe). A recipient\n * that has unsubscribed cannot be mailed by this org: a send to them is rejected\n * with `recipient_suppressed` ({@link RecipientSuppressedError}). Use `precheck`\n * before composing to skip a would-be-rejected recipient, `list` to browse the\n * org's opt-outs, and `revoke` (reason required, audit-logged) to re-enable a\n * recipient. All reads/writes are scoped to the caller's OWN org: a\n * platform-global or shared-domain opt-out is never surfaced here.\n */\nexport class Suppressions {\n constructor(private readonly ctx: ResourceContext) {}\n\n /**\n * Pre-check whether the caller's org already suppresses a recipient, BEFORE\n * composing. `suppressed: true` means a send to them would be rejected: skip\n * that recipient. Returns the matching org rows too (never a global/shared row).\n */\n precheck(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck> {\n return this.ctx.transport.precheckSuppression(recipient, signal);\n }\n\n /** List the org's suppression rows (active by default; `include_revoked` for all). */\n list(params: ListSuppressionsParams = {}, signal?: AbortSignal): Promise<Page<SuppressionEntry>> {\n return this.ctx.transport.listSuppressions(params, signal);\n }\n\n /**\n * Revoke one org-scope suppression row (re-enable sending to that recipient). A\n * `reason` is REQUIRED (empty/whitespace is a 400) and is audit-logged. A\n * foreign/global/shared id is an indistinguishable 404.\n */\n revoke(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry> {\n return this.ctx.transport.revokeSuppression(id, reason, signal);\n }\n}\n\n/**\n * `extrovert.domains`: read with domain:read or domain:manage; changes require\n * domain:manage. Add delegated inbox domains the customer\n * controls, read status + nameserver records inline, trigger/refresh\n * verification, and offboard. New registrations use `extrovert.commerce`: quote\n * first, create a request, then poll its status. Set `scope: \"project\"` to bind a\n * customer-controlled domain to the key's project; it defaults to `org`.\n */\nexport class Domains {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** List the customer's onboarded domains and their status. */\n list(paramsOrSignal: { page?: string; limit?: number } | AbortSignal = {}, signal?: AbortSignal): Promise<Page<Domain>> {\n if (\"aborted\" in paramsOrSignal) return this.ctx.transport.listDomains(paramsOrSignal);\n return this.ctx.transport.listDomains(signal, paramsOrSignal);\n }\n\n /** Get one domain's detail, verification status, and nameserver records. */\n get(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.getDomain(domain, signal);\n }\n\n /** Wait up to 50 seconds, then return an explicit resumable outcome. No DNS writes. */\n wait(domain: string, options: { timeout_seconds?: number; signal?: AbortSignal } = {}): Promise<DomainWaitResult> {\n return waitForDomain((signal) => this.ctx.transport.getDomain(domain, signal), options);\n }\n\n /** Resume durable updates for this domain using the previous next_cursor as after. */\n events(domain: string, params: { after?: string; limit?: number } = {}, signal?: AbortSignal): Promise<DomainStatusEventPage> {\n return this.ctx.transport.listDomainEvents(domain, params, signal);\n }\n\n /**\n * Add a delegated inbox domain the customer controls. Returns the nameserver\n * records to publish and never spends money.\n */\n onboard(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.onboardDomain(req, signal);\n }\n\n /** Trigger or refresh verification for a domain; returns its (possibly advanced) status. */\n verify(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.verifyDomain(domain, signal);\n }\n\n /**\n * Offboard (remove) a domain from the customer. Async: the API accepts the\n * request (HTTP 202) and tears the domain down as a job. Returns the accepted\n * job's id + poll URL (`status_url`); poll it with `extrovert.getJob(job_id)`\n * until the status is terminal (succeeded/failed/cancelled).\n */\n offboard(domain: string, signal?: AbortSignal): Promise<DomainOffboard> {\n return this.ctx.transport.offboardDomain(domain, signal);\n }\n}\n\n/**\n * `extrovert.commerce`: quote, request, cancel, and poll financial operations. Agents\n * can never approve a request through this resource; approval is a human console\n * action. Every create requires a stable idempotency key.\n */\nexport class Commerce {\n constructor(private readonly ctx: ResourceContext) {}\n\n private requireIdempotencyKey(value: string): void {\n if (value.trim().length < 8) {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"idempotency_key must be a stable value of at least 8 characters; reuse it for retries of the same intent.\",\n });\n }\n }\n\n /** Quote a domain without purchasing, reserving, or approving it. */\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote> {\n return this.ctx.transport.quoteDomain(req, signal);\n }\n\n /** Create a durable domain-purchase request for human approval. */\n requestDomainPurchase(\n req: RequestDomainPurchaseRequest,\n signal?: AbortSignal,\n ): Promise<CommerceRequest> {\n this.requireIdempotencyKey(req.idempotency_key);\n return this.ctx.transport.requestDomainPurchase(req, signal);\n }\n\n /** Create a durable plan-upgrade or downgrade request for human approval. */\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest> {\n this.requireIdempotencyKey(req.idempotency_key);\n return this.ctx.transport.requestPlanChange(req, signal);\n }\n\n /** Poll one request's exact blockers, approval URL, and next-action guidance. */\n get(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.ctx.transport.getCommerceRequest(requestId, signal);\n }\n\n /** Withdraw this agent's request while its durable state still permits cancellation. */\n cancel(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.ctx.transport.cancelCommerceRequest(requestId, signal);\n }\n\n /** List visible commerce requests using the API's opaque page token. */\n list(\n params: ListCommerceRequestsParams = {},\n signal?: AbortSignal,\n ): Promise<Page<CommerceRequest>> {\n return this.ctx.transport.listCommerceRequests(params, signal);\n }\n}\n\n/**\n * `extrovert.reviews`: the Review Loop (HITL) agent-plane reads. A sending agent\n * monitors its submissions in the human-review queue: list/get a review request and\n * read its append-only thread of turns (intent, drafts, human comments/edits/\n * decisions, captured diffs). Submitting FOR review rides `inbox.send` /\n * `inbox.reply` with `mode`/`intent`/`category_id`. Human-authority actions\n * (approve/reject/edit-send) are console-only (D17) and never exposed here.\n */\nexport class Reviews {\n /**\n * `extrovert.reviews.events`: the Review Loop (HITL) realtime plane: drain,\n * long-poll, and ack the durable nudge queue (the AUTHORITATIVE liveness source;\n * SSE/webhook are best-effort fast paths on top of it).\n */\n readonly events: ReviewEvents;\n\n constructor(private readonly ctx: ResourceContext) {\n this.events = new ReviewEvents(ctx);\n }\n\n /** List review requests (customer-scoped). Filter by state / category / inbox. */\n list(params: ListReviewsParams = {}, signal?: AbortSignal): Promise<Page<Review>> {\n return this.ctx.transport.listReviews(params, signal);\n }\n\n /** Get one review request by id (rr_…): current draft + intent + state. */\n get(reviewId: string, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.getReview(reviewId, signal);\n }\n\n /** Get a review's append-only thread turns by id (rr_…). */\n turns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>> {\n return this.ctx.transport.getReviewTurns(reviewId, signal);\n }\n\n /**\n * Get the human's assembled feedback (M5): the diff + comments + decision + the\n * rules born from this review. Read it after a rejected/edited nudge to learn what\n * the human wanted. $0 LLM: pure assembly on our side.\n */\n feedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback> {\n return this.ctx.transport.getReviewFeedback(reviewId, signal);\n }\n\n /**\n * Post a chat turn on a review's thread (M5): an agent question to the human\n * reviewer; flips in_review -> chatting on the first turn. Idempotent on the\n * optional `idempotencyKey` (the `Idempotency-Key` header). $0 LLM: you compose it.\n */\n chat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Review> {\n return this.ctx.transport.postReviewChat(reviewId, req, idempotencyKey, signal);\n }\n\n /**\n * Post a new agent draft under a parent_revision CAS (M5; D17). parent_revision\n * must equal the draft's current revision, else a 409 STALE with NO mutation (the\n * human always wins: re-read, re-apply, retry). On success the draft is re-rendered\n * in place (revision++) and returns to needs_review. $0 LLM: you compose the redraft.\n */\n revise(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.submitRevision(reviewId, req, signal);\n }\n\n /**\n * Withdraw your own pending review (M5) to the terminal cancelled state. Only the\n * composing agent may cancel; a terminal (already sent) review 409s.\n */\n cancel(\n reviewId: string,\n idempotencyKeyOrSignal?: string | AbortSignal,\n signal?: AbortSignal,\n ): Promise<Review> {\n const idempotencyKey = typeof idempotencyKeyOrSignal === \"string\" ? idempotencyKeyOrSignal : undefined;\n const effectiveSignal = typeof idempotencyKeyOrSignal === \"string\" ? signal : idempotencyKeyOrSignal;\n return this.ctx.transport.cancelReview(reviewId, idempotencyKey, effectiveSignal);\n }\n\n /**\n * Re-stamp a draft's rules-version WITHOUT redrafting (M7; D19/§8 $0 escape valve):\n * assert \"I reviewed this against rules vX and no change is needed\", advancing the\n * draft's composed_* versions with no new draft, no revision bump, no nudge. A\n * born-stale draft re-stamped to the current version becomes current-enough and\n * releasable on the next reconciliation sweep: the cheap counterpart to revise().\n * against_version above the category's current rules-version is 400; a terminal draft\n * 409s. $0 LLM: you judged.\n */\n restamp(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.restampReview(reviewId, req, signal);\n }\n\n /**\n * Get the REVIEWER's decision context for a review (M8 Slice B; D5/§9). The reviewer\n * is an AGENT granted review:act, authorized for THIS review ONLY via a matching\n * ACTIVE review-link (per-inbox beats account-wide). The context is the intent +\n * current draft + thread + the two-circuit-breaker budget (hop_count vs max_hops, the\n * hard review_deadline). `force_to_human` is true when a reject would be FORCED to the\n * human regardless of intent (the human is the only terminal authority, D17). A\n * cross-tenant id is 404; a non-reviewer is 403. Read-only, $0 LLM.\n */\n decisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext> {\n return this.ctx.transport.getReviewDecisionContext(reviewId, signal);\n }\n\n /**\n * Submit a reviewer decision (M8 Slice B; reviewer_decide, D5/§9). approve/edit → the\n * PLATFORM sends with the COMPOSER's credentials (the reviewer NEVER holds\n * mailbox:send on an inbox it doesn't own: the credential boundary); reject → back to\n * the composer (needs_review, hop_count++); escalate → the human queue. revision/\n * version are the CAS (409 STALE on mismatch, NO mutation: the human always wins,\n * D17). The two circuit breakers (hop_count ≥ max_hops, or the hard review_deadline)\n * FORCE a reject to the human regardless of intent: `forced_by_breaker` names it. $0\n * LLM: you judged; we route, send, and enforce the breakers.\n */\n decide(\n reviewId: string,\n req: ReviewerDecisionRequest,\n signal?: AbortSignal,\n ): Promise<ReviewerDecisionResult> {\n return this.ctx.transport.reviewerDecide(reviewId, req, signal);\n }\n}\n\n/**\n * `extrovert.reviews.events`: drain / long-poll / ack the durable review nudge\n * queue (spec §5.9). `list` is a non-blocking, side-effect-free drain of the next\n * un-acked nudges in FIFO seq order (strict per review); `wait` long-polls\n * (~25–55s) for the next one; `ack` advances the per-(agent, review) cursor\n * monotonically (idempotent: re-acking an older seq is a no-op).\n */\nexport class ReviewEvents {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Drain the next un-acked review events (non-blocking). */\n list(params: ListReviewEventsParams = {}, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.ctx.transport.listReviewEvents(params, signal);\n }\n\n /** Long-poll for the next review event (empty on timeout). */\n wait(params: WaitForReviewEventParams = {}, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.ctx.transport.waitForReviewEvent(params, signal);\n }\n\n /** Advance the per-review cursor(s) and/or mark broadcast nudges done. */\n ack(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult> {\n return this.ctx.transport.ackReviewEvent(req, signal);\n }\n}\n\n/**\n * `extrovert.categories`: the Review Loop category registry (D9/D10). Browse and\n * MATCH an existing category before composing (like a skills registry), or propose\n * a new one. Categories are CUSTOMER-scoped and agent-attributed (the deliberate\n * cross-agent-404 exception); identity is opaque cat_ ids: nothing keys on the\n * name, so renames never break a reference. `match` is a pure lexical filter (NO\n * LLM on our side); the agent does the semantic matching. Merging / deleting a\n * category is a human (console) action, not exposed here (D17).\n */\nexport class Categories {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Browse the registry. `match` lexically filters name+description (NO LLM). */\n list(params: ListCategoriesParams = {}, signal?: AbortSignal): Promise<Page<Category>> {\n return this.ctx.transport.listCategories(params, signal);\n }\n\n /** Get one category by id (cat_…): name + description + scope + state. */\n get(categoryId: string, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.getCategory(categoryId, signal);\n }\n\n /** Propose a new category; it stands immediately and writes a create audit row. */\n propose(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.proposeCategory(req, signal);\n }\n\n /** Rename / re-describe a category: metadata only (D10). */\n update(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.updateCategory(categoryId, req, signal);\n }\n\n /**\n * Read the effective risk dial (D4/D12): the account default + every category's\n * overrides (each with its resolved effective value; null override = inherit).\n * Read-only: agents read but NEVER flip the dial; setting it is a human (console)\n * action (D16).\n */\n riskDial(signal?: AbortSignal): Promise<RiskDial> {\n return this.ctx.transport.getRiskDial(signal);\n }\n\n /**\n * Read a category's graduation gate status (D16): the gates passed / still needed\n * toward the next rung (approvals N/needed, age, maturity gate, drift vs K,\n * can_graduate). Read-only.\n */\n graduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.ctx.transport.getGraduationStatus(categoryId, signal);\n }\n\n /**\n * Propose graduating a category (D16/D6): RECORDS the request (durable evidence) and\n * returns the current gate status. It does NOT change the category state: flipping\n * the bit is a human (console) action; an agent only proposes.\n */\n proposeGraduation(\n categoryId: string,\n req: ProposeGraduationRequest = {},\n signal?: AbortSignal,\n ): Promise<GraduationStatus> {\n return this.ctx.transport.proposeGraduation(categoryId, req, signal);\n }\n\n /**\n * Read the D19/§8 backlog-reconciliation status: how many of the category's QUEUED\n * drafts are stale vs current-enough against the current rules-version (a pure\n * integer compare, $0 LLM). Read-only: you READ the picture; the human (console\n * scan-backlog) or the graduate/rule-change hooks TRIGGER the actual reconciliation\n * sweep that releases current-enough drafts and nudges stale ones to redraft.\n */\n backlogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus> {\n return this.ctx.transport.getScanBacklogStatus(categoryId, signal);\n }\n\n /**\n * Read the demand-driven pacing state (M7 Slice B/§8): the human review cursor, the\n * effective lookahead window (freshness is guaranteed only for the next few drafts\n * after the cursor), the HARD per-nudge fan-out ceiling (rework_batch_max), the\n * per-agent nudge interval, and each queued draft's classification (behind_cursor |\n * in_window_fresh | in_window_redrafting | ahead). Read-only; the cursor advances\n * from the human's console approve/reject/edit actions.\n */\n pacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState> {\n return this.ctx.transport.getCategoryPacingState(categoryId, signal);\n }\n}\n\n/**\n * `extrovert.rules`: the Review Loop writing-rule store + house-style + the §7\n * precedence ladder + audit/undo (D2/D11). ANY agent in the customer may write,\n * edit, promote, retire, and undo rules (the deliberate cross-agent exception: the\n * shared house-style is the whole pitch). `get()` returns the ORDERED active rule\n * set with the precedence ladder applied SERVER-SIDE (NO LLM on our side); the agent\n * reconciles the list semantically. Rules are append-only by supersession; undo\n * restores the prior version as a forward 'restore' supersession. Identity is opaque\n * rule_/rln_/udo_ ids: nothing keys on a name.\n */\nexport class Rules {\n /** Learn category or organization house rules from verified human review feedback. */\n learnFromReview(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule> {\n return this.ctx.transport.learnReviewRule(reviewId, req, signal);\n }\n\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Get the ORDERED active rule set (precedence ladder applied; NO LLM). */\n get(params: GetRulesParams = {}, signal?: AbortSignal): Promise<RuleSnapshot> {\n return this.ctx.transport.getRules(params, signal);\n }\n\n /**\n * Save / edit a rule (append-only by supersession; D11). An agent-plane save is\n * ALWAYS project-layer: the saved rule's `rule_layer` is `project`, bound to the\n * key's project. For all authenticated reviewer feedback use learnFromReview at the intended\n * organization, project, or category scope. This method is project maintenance only.\n */\n save(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.saveRule(req, signal);\n }\n\n /** Promote a rule between the category and general/house-style layers. */\n promote(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.promoteRule(ruleId, toScope, signal);\n }\n\n /** Retire a rule: soft delete; the history survives as training data. */\n retire(ruleId: string, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.retireRule(ruleId, signal);\n }\n\n /** Read the rule/category change audit log (the safety net, D11). */\n audit(params: GetRuleAuditParams = {}, signal?: AbortSignal): Promise<Page<RuleAuditEntry>> {\n return this.ctx.transport.getRuleAudit(params, signal);\n }\n\n /** Undo a rule change by its audit-row id (udo_…): restore the prior version. */\n undo(udoId: string, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.undoRuleChange(udoId, signal);\n }\n}\n","/**\n * ExtrovertClient - the entry point.\n *\n * ```ts\n * import { Extrovert } from \"@extrovert.dev/sdk\";\n * const extrovert = new Extrovert({ apiKey: process.env.EXTROVERT_API_KEY! });\n * const inbox = await extrovert.inboxes.create(); // a real inbox, in one call\n * const outcome = await inbox.send({\n * to: \"ops@acme.test\",\n * subject: \"hi\",\n * text: \"from an agent\",\n * intent: { summary: \"send the requested status update\" },\n * });\n * if (outcome.kind === \"queued_for_review\") console.log(outcome.review.id);\n * ```\n */\n\nimport { HttpClient, type HttpClientConfig, type RetryOptions } from \"./http.js\";\nimport { HttpTransport, MockTransport, type Transport } from \"./transport.js\";\nimport { MockBackend } from \"./fixtures.js\";\nimport { Inboxes, Messages, Threads, Submissions, Webhooks, ContactLists, Suppressions, Domains, Commerce, Reviews, Categories, Rules, Projects, InboxHandle } from \"./resources/index.js\";\nimport type { InboxHandleOptions } from \"./resources/inbox-handle.js\";\nimport { CURRENT_API_VERSION } from \"./version.js\";\nimport { parseKeyTier, type KeyTier } from \"./key-tier.js\";\nimport type {\n CreateInboxRequest,\n EnrollRequest,\n EnrollResponse,\n Job,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n StreamOptions,\n VerifyRequest,\n VerifyResponse,\n WhoAmI,\n} from \"./models.js\";\n\n/** Default production API base URL. Overridable via `baseUrl` or `EXTROVERT_API_BASE_URL`. */\nexport const DEFAULT_BASE_URL = \"https://api.extrovert.dev\";\n\n/** The sentinel that routes the client to the offline mock instead of the network. */\nexport const MOCK_BASE_URL = \"mock\";\n\nexport interface ExtrovertClientOptions {\n /**\n * Scoped agent key (`pk_agent_...`) or, for `enroll`, any bearer credential the server accepts.\n * Falls back to `EXTROVERT_API_KEY` when omitted.\n */\n apiKey?: string;\n /**\n * API base URL. Falls back to `EXTROVERT_API_BASE_URL`, then {@link DEFAULT_BASE_URL}. Set to\n * `\"mock\"` (or `transport: \"mock\"`) to run fully offline against the built-in fixtures.\n */\n baseUrl?: string;\n /** Force a transport. `\"mock\"` ignores `baseUrl` and never touches the network. */\n transport?: \"http\" | \"mock\";\n /** Default request timeout in ms. Default 30000. (wait_for_email manages its own, longer timeout.) */\n timeoutMs?: number;\n /** Retry policy for idempotent requests on 429/5xx/network errors. */\n retry?: Partial<RetryOptions>;\n /** Custom fetch implementation (tests, proxies, instrumentation). Defaults to global `fetch`. */\n fetch?: typeof fetch;\n /** Extra headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Dated API version to pin (sent as the `Extrovert-Version` header on every\n * request; redesign §5.4). Defaults to {@link CURRENT_API_VERSION}. Pin an older\n * dated version to opt into the server's transform shim for that version.\n */\n apiVersion?: string;\n /** Inject a pre-built mock backend (shares state across clients in tests). */\n mockBackend?: MockBackend;\n}\n\nfunction readEnv(name: string): string | undefined {\n // Guarded so the SDK works in edge runtimes where `process` is undefined.\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n ?.env;\n return env?.[name];\n}\n\nconst DEFAULT_RETRY: RetryOptions = { maxRetries: 2, baseDelayMs: 250, maxDelayMs: 8000 };\n\nexport class ExtrovertClient {\n /** `extrovert.inboxes` - create / list / get / update / delete inboxes. */\n readonly inboxes: Inboxes;\n /** `extrovert.messages` - read a message, reply to it (threaded). */\n readonly messages: Messages;\n /** `extrovert.threads` - fetch a conversation thread. */\n readonly threads: Threads;\n readonly submissions: Submissions;\n /** `extrovert.webhooks` - register HMAC-signed inbound webhooks. */\n readonly webhooks: Webhooks;\n /** `extrovert.contactLists` - per-inbox allow/block lists of addresses/domains. */\n readonly contactLists: ContactLists;\n /** `extrovert.suppressions` - recipient opt-outs (list-unsubscribe); precheck/list/revoke. */\n readonly suppressions: Suppressions;\n /** `extrovert.domains` - domain readiness and setup (domain:read or domain:manage to read; domain:manage to change). */\n readonly domains: Domains;\n /** `extrovert.commerce` - quote/request/cancel/poll financial actions; no agent approval methods. */\n readonly commerce: Commerce;\n /** `extrovert.reviews` - the Review Loop (HITL) agent-plane reads. */\n readonly reviews: Reviews;\n /** `extrovert.categories` - the Review Loop category registry (browse/propose/curate). */\n readonly categories: Categories;\n /** `extrovert.rules` - the Review Loop writing-rule store + house-style + audit/undo. */\n readonly rules: Rules;\n /**\n * `extrovert.projects` - the CANONICAL project-scoped chain. The headline is\n * `extrovert.projects.inboxes.*` (create/list/get/update/delete/send/...), keyed by\n * the opaque `inbox_id` and scoped to a `{project_id}` path (or `-` for the org\n * wildcard on an org-tier key). The bare `extrovert.inboxes` surface is curl sugar\n * that resolves to the key's default project.\n */\n readonly projects: Projects;\n\n /** The resolved API base URL (or `\"mock\"`). */\n readonly baseUrl: string;\n /**\n * The dated API version pinned on every request (`Extrovert-Version`). Defaults to\n * {@link CURRENT_API_VERSION}.\n */\n readonly apiVersion: string;\n /**\n * The CEILING tier derived from the configured agent key prefix (`org` | `project`\n * | `inbox` | `unknown`). Advisory client-side hint only - the server is the source\n * of truth. Lets an app branch (e.g. require a project pick for an org-tier key).\n */\n readonly keyTier: KeyTier;\n\n private readonly transport: Transport;\n private readonly handleOptions: InboxHandleOptions;\n\n constructor(options: ExtrovertClientOptions = {}) {\n const apiKey = options.apiKey ?? readEnv(\"EXTROVERT_API_KEY\") ?? \"\";\n const resolvedBaseUrl =\n options.baseUrl ?? readEnv(\"EXTROVERT_API_BASE_URL\") ?? DEFAULT_BASE_URL;\n const useMock =\n options.transport === \"mock\" || resolvedBaseUrl === MOCK_BASE_URL;\n\n this.baseUrl = useMock ? MOCK_BASE_URL : resolvedBaseUrl;\n this.apiVersion = options.apiVersion ?? CURRENT_API_VERSION;\n this.keyTier = parseKeyTier(apiKey);\n const timeoutMs = options.timeoutMs ?? 30_000;\n this.handleOptions = { defaultWaitTimeoutMs: timeoutMs };\n\n if (useMock) {\n this.transport = new MockTransport(options.mockBackend);\n } else {\n if (!apiKey) {\n throw new Error(\n \"Extrovert: no apiKey provided. Pass { apiKey } or set EXTROVERT_API_KEY (or use transport: \\\"mock\\\").\",\n );\n }\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new Error(\n \"Extrovert: global fetch is unavailable. Use Node 18+, an edge runtime, or pass a custom { fetch }.\",\n );\n }\n const config: HttpClientConfig = {\n baseUrl: resolvedBaseUrl,\n apiKey,\n timeoutMs,\n retry: { ...DEFAULT_RETRY, ...options.retry },\n fetch: fetchImpl,\n defaultHeaders: options.defaultHeaders ?? {},\n apiVersion: this.apiVersion,\n };\n this.transport = new HttpTransport(new HttpClient(config));\n }\n\n const ctx = { transport: this.transport, handleOptions: this.handleOptions, keyTier: this.keyTier };\n this.inboxes = new Inboxes(ctx);\n this.messages = new Messages(ctx);\n this.threads = new Threads(ctx);\n this.submissions = new Submissions(ctx);\n this.webhooks = new Webhooks(ctx);\n this.contactLists = new ContactLists(ctx);\n this.suppressions = new Suppressions(ctx);\n this.domains = new Domains(ctx);\n this.commerce = new Commerce(ctx);\n this.reviews = new Reviews(ctx);\n this.categories = new Categories(ctx);\n this.rules = new Rules(ctx);\n this.projects = new Projects(ctx);\n }\n\n /**\n * Redeem an enrollment token (`pk_enroll_...`) and issue a scoped agent key.\n *\n * Idempotent on `agent_handle`: redeeming twice with the same handle returns the same agent.\n * Returns the raw `EnrollResponse` - to immediately use the issued key, prefer\n * {@link ExtrovertClient.enrolled}.\n */\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse> {\n return this.transport.enroll(req, signal);\n }\n\n /**\n * Request a free account in one unauthenticated call. When free signup is\n * enabled, this provisions a tenant plus a first inbox and returns a\n * verification-only agent key. That key can only call {@link verify}; it cannot\n * read or send mail. A one-time code is emailed to `human_email`. Call\n * {@link verify} with the code to activate the account and receive full scopes.\n * Idempotent on `human_email`: re-calling rotates the key and resends the code.\n * When free signup is paused, this throws an `ApiError` with status 403 and\n * code `signup_disabled` without creating account state.\n */\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse> {\n return this.transport.signUp(req, signal);\n }\n\n /**\n * Confirm the emailed signup code and receive a NEW full-scope agent key (shown\n * once). Must be called with the limited key from {@link signUp} as the bearer.\n * The result repeats the ready inbox address and includes MCP-first list/read/wait\n * calls; SDK callers can pass `address` directly to `inboxes` and `messages`.\n * Pending verification is also fail-closed with 403 `signup_disabled` while\n * free signup is paused.\n */\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse> {\n return this.transport.verify(req, signal);\n }\n\n /** Introspect the principal behind the current key (`GET /v1/auth/me`). */\n whoami(signal?: AbortSignal): Promise<WhoAmI> {\n return this.transport.whoami(signal);\n }\n\n /**\n * Poll the status of an async job (`GET /v1/jobs/{job_id}`) - currently only\n * the domain-offboard teardown started by {@link Domains.offboard} enqueues\n * one. `status` is terminal on succeeded/failed/cancelled; keep polling\n * otherwise. An unknown or foreign job id is a {@link NotFoundError}.\n */\n getJob(jobId: string, signal?: AbortSignal): Promise<Job> {\n return this.transport.getJob(jobId, signal);\n }\n\n /**\n * Redeem an enrollment token and return a *new* client already authenticated with the issued\n * agent key - the natural \"redeem then act\" flow for an agent.\n *\n * ```ts\n * const bootstrap = new Extrovert({ apiKey: enrollmentToken });\n * const { client, enrollment } = await bootstrap.enrolled({\n * token: enrollmentToken,\n * agent_handle: \"support-bot\",\n * });\n * const inbox = await client.inboxes.create();\n * ```\n */\n async enrolled(\n req: EnrollRequest,\n options?: Pick<ExtrovertClientOptions, \"timeoutMs\" | \"retry\" | \"fetch\" | \"defaultHeaders\">,\n signal?: AbortSignal,\n ): Promise<{ client: ExtrovertClient; enrollment: EnrollResponse }> {\n const enrollment = await this.enroll(req, signal);\n const client = new ExtrovertClient({\n apiKey: enrollment.agent_key,\n ...(this.baseUrl === MOCK_BASE_URL\n ? { transport: \"mock\", mockBackend: (this.transport as MockTransport).backend }\n : { baseUrl: this.baseUrl }),\n ...options,\n });\n return { client, enrollment };\n }\n\n /**\n * Get an ergonomic handle to an existing inbox by address - without an extra round-trip. Use this\n * when you already know the address (e.g. from a previous create) and want to send/wait/reply.\n * Call {@link InboxHandle.refresh} to load the full record.\n */\n inbox(address: string): InboxHandle {\n return new InboxHandle(this.transport, address, this.handleOptions);\n }\n\n /**\n * The headline shortcut: provision a real inbox in one call and get a handle bound to it.\n * Equivalent to `extrovert.inboxes.create(req)`, named to match the docs/marketing promise.\n */\n createInbox(req: CreateInboxRequest = {}, signal?: AbortSignal): Promise<InboxHandle> {\n return this.inboxes.create(req, signal);\n }\n\n /**\n * Watch events across EVERY inbox the agent owns (Server-Sent Events, `GET\n * /v1/events`). Returns an async iterator of {@link StreamEvent}; pass\n * `lastEventId` (the `seq` of the last event you saw) to resume after a reconnect\n * and a `signal` to close the stream. To watch a single inbox, use\n * {@link InboxHandle.stream} instead.\n *\n * ```ts\n * for await (const ev of extrovert.stream()) {\n * if (ev.event === \"message.received\") console.log(ev.inbox, ev.message?.subject);\n * }\n * ```\n */\n stream(options: StreamOptions = {}): AsyncGenerator<StreamEvent, void, unknown> {\n return this.transport.stream(null, options.lastEventId, options.signal);\n }\n\n /**\n * Convenience wrapper over {@link stream}: invoke `onEvent` for every event\n * across all owned inboxes until the stream closes (or `signal` aborts).\n */\n async subscribe(\n onEvent: (event: StreamEvent) => void | Promise<void>,\n options: StreamOptions = {},\n ): Promise<void> {\n for await (const ev of this.stream(options)) {\n await onEvent(ev);\n }\n }\n}\n","/**\n * Narrowing helpers for {@link SendOutcome} - the three shapes a send can answer.\n *\n * `inbox.send()` used to be typed as one struct with a REQUIRED `thread_id`, which\n * the direct-send response has never carried. The type checked; the value was\n * `undefined`. Now the return type is an honest union, and these helpers exist so\n * that reading it does not turn into a `\"kind\" in res` puzzle at every call site.\n *\n * The one rule worth internalizing: a `queued_for_review` outcome means **nothing\n * has been delivered**. A human has to approve it first, and the delivery outcome\n * arrives later as a `sent` / `send_failed` review event. Code that treats every\n * 2xx from `send()` as \"the mail went out\" is wrong under the default\n * `require_review` policy - which is every account that has not changed it.\n */\n\nimport type {\n QueuedForReviewResult,\n SendOutcome,\n SendResult,\n SentResult,\n} from \"./models.js\";\n\n/**\n * True when the message was PARKED for a human and nothing has been delivered.\n * Narrow with this before reading `res.review.id`, then monitor the review via\n * `extrovert.reviewEvents.wait({ review_id })`.\n */\nexport function isQueuedForReview(res: SendOutcome): res is QueuedForReviewResult {\n return res.kind === \"queued_for_review\";\n}\n\n/**\n * True when the message was delivered immediately - either the review-loop\n * `{kind:\"sent\"}` body or the legacy body a bare send gets under `allow_direct`.\n */\nexport function isSentImmediately(res: SendOutcome): res is SendResult | SentResult {\n return !isQueuedForReview(res);\n}\n\n/**\n * A saved message selector, or `undefined` while queued for review / without a Sent copy.\n *\n * `undefined` here is NOT an error - it is the normal answer under\n * `require_review`. Pair it with {@link reviewIdOf} to follow the message to its\n * outcome.\n */\nexport function sentMessageIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return undefined;\n const candidate = res.sent_message_id !== undefined ? res.sent_message_id : res.kind === \"sent\" ? res.message.id : res.message_id;\n return candidate?.startsWith(\"msg_\") ? candidate : undefined;\n}\n\n/**\n * The thread id when one is known.\n *\n * Absent on a direct `send` (the server assigns the thread at delivery and the\n * legacy body does not echo it) and on a queued outcome (there is no message\n * yet). Reply and forward do return it.\n */\nexport function threadIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return undefined;\n return res.kind === \"sent\" ? res.message.thread_id : res.thread_id;\n}\n\n/**\n * The opaque review id (rr_…) that governed this send, on EVERY branch.\n *\n * This is the crash-recovery handle: an agent that issued a send and then died\n * can call `reviews.get(id)` and read `closed` / `send_error` / `sent_message_id`\n * rather than guessing whether the message went out. It is `undefined` only\n * against a server old enough to predate the field.\n */\nexport function reviewIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return res.review.id;\n return res.kind === \"sent\" ? res.review?.id : res.review_id;\n}\n","/**\n * Inbound webhook verification.\n *\n * Extrovert signs every inbound delivery with an HMAC-SHA256 over `${timestamp}.${rawBody}` and sends\n * `X-Extrovert-Signature: t=<unix>,v1=<hex>` (§6, §14). Verify with the per-webhook `secret` returned\n * once at registration. Uses Web Crypto (`crypto.subtle`), so it works in Node 18+, Cloudflare\n * Workers, Vercel Edge, Deno, and the browser without any dependency.\n */\n\nimport type { Message, WebhookEvent } from \"./models.js\";\n\n/** The decoded body of a `message.received` (and similar) webhook delivery. */\nexport interface WebhookPayload {\n event: WebhookEvent;\n /** Delivery id, unique per attempt. */\n id: string;\n created_at: string;\n /** The message that triggered the event (present for message.* events). */\n message?: Message;\n /** The inbox address the event concerns. */\n inbox?: string;\n}\n\nexport interface VerifyWebhookOptions {\n /** Raw request body, exactly as received (do not re-serialize JSON before verifying). */\n payload: string;\n /** The `X-Extrovert-Signature` header value. */\n signature: string;\n /** The webhook signing secret (`whsec_...`). */\n secret: string;\n /** Reject deliveries whose timestamp is older than this many seconds. Default 300 (5 min). */\n toleranceSeconds?: number;\n /** Override the clock (unix seconds) for deterministic testing. */\n nowSeconds?: number;\n}\n\nfunction parseSignatureHeader(header: string): { t: number; v1: string[] } {\n let t = 0;\n const v1: string[] = [];\n for (const part of header.split(\",\")) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const value = part.slice(eq + 1).trim();\n if (key === \"t\") t = Number(value);\n else if (key === \"v1\") v1.push(value);\n }\n return { t, v1 };\n}\n\nfunction toHex(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let out = \"\";\n for (const b of bytes) out += b.toString(16).padStart(2, \"0\");\n return out;\n}\n\n/** Constant-time string compare to avoid leaking the signature via timing. */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n}\n\nasync function hmacSha256Hex(secret: string, message: string): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error(\n \"Web Crypto (crypto.subtle) is unavailable in this runtime; cannot verify webhook signatures.\",\n );\n }\n const enc = new TextEncoder();\n const key = await subtle.importKey(\n \"raw\",\n enc.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const sig = await subtle.sign(\"HMAC\", key, enc.encode(message));\n return toHex(sig);\n}\n\n/**\n * Verify an inbound webhook signature. Returns true when the signature is valid and within the\n * timestamp tolerance. Throws only if the runtime lacks Web Crypto.\n *\n * @example\n * ```ts\n * const ok = await verifyWebhookSignature({\n * payload: rawBody,\n * signature: req.headers[\"x-extrovert-signature\"],\n * secret: process.env.EXTROVERT_WEBHOOK_SECRET!,\n * });\n * if (!ok) return new Response(\"bad signature\", { status: 400 });\n * ```\n */\nexport async function verifyWebhookSignature(options: VerifyWebhookOptions): Promise<boolean> {\n const { payload, signature, secret } = options;\n const tolerance = options.toleranceSeconds ?? 300;\n const now = options.nowSeconds ?? Math.floor(Date.now() / 1000);\n\n const { t, v1 } = parseSignatureHeader(signature);\n if (!t || v1.length === 0) return false;\n if (Math.abs(now - t) > tolerance) return false;\n\n const expected = await hmacSha256Hex(secret, `${t}.${payload}`);\n return v1.some((candidate) => timingSafeEqual(candidate, expected));\n}\n\n/**\n * Verify a webhook and parse its JSON body in one step. Returns the typed payload on success, or\n * null when the signature is invalid (so callers can branch without a try/catch on the common path).\n */\nexport async function parseWebhook(options: VerifyWebhookOptions): Promise<WebhookPayload | null> {\n const ok = await verifyWebhookSignature(options);\n if (!ok) return null;\n return JSON.parse(options.payload) as WebhookPayload;\n}\n\n/**\n * Produce the canonical `X-Extrovert-Signature` header value for a body - the exact format the Go\n * delivery engine emits: `t=<unix>,v1=<hex hmac-sha256(\"<t>.<rawbody>\")>`. Mainly useful for tests\n * and self-hosted senders; the platform signs deliveries server-side. The Go `SignWebhook` and this\n * helper are pinned to the same fixed conformance vector across languages.\n */\nexport async function signWebhook(\n secret: string,\n body: string,\n timestampSeconds: number,\n): Promise<string> {\n const t = Math.floor(timestampSeconds);\n const v1 = await hmacSha256Hex(secret, `${t}.${body}`);\n return `t=${t},v1=${v1}`;\n}\n","/**\n * The Extrovert Review-Loop **open contract** (HITL D14, spec §11).\n *\n * This module is the single, documented, *versioned* publication of the stable\n * agent-facing JSON shapes that the Review Loop exposes - the shapes agents and\n * third-party harnesses code against. It does **not** redesign any types: it\n * re-exports the canonical models built across M1–M8 (see `./models`) under one\n * named contract surface, stamps a {@link CONTRACT_VERSION}, and publishes a\n * machine-readable {@link CONTRACT_MANIFEST} so a harness can pin the exact set of\n * shapes + the version it built against.\n *\n * ## This is a contract, NOT a protocol (D14)\n *\n * Per resolved decision **D14**, the open surface is published **now** as an open,\n * documented **skill + SDK contract** - explicitly **not** a wire protocol and\n * **not** a standalone `/v1/contract` endpoint. The contract is exactly: these SDK\n * types + the agent skills (`extrovert-send-email`, `extrovert-writing-rules`) + the\n * docs, **versioned with the SDK** (this package). Formal protocol\n * standardization is deferred (spec §12).\n *\n * ## Provisional, pre-1.0 (0.x)\n *\n * {@link CONTRACT_VERSION} is **`0.1.0-pre.10`** - a deliberately **provisional**, pre-1.0\n * contract. It is open and documented, but it MAY still evolve before 1.0: there\n * are no external users yet, and the **D20 shared-pool auto-send governor** is a\n * hard prerequisite before onboarding external users. Pin the version; expect\n * additive 0.x changes. See {@link CONTRACT_MANIFEST}.`stability`.\n *\n * ## Identity (D10)\n *\n * Every shape keys on **opaque, typed ids** (`rr_`, `turn_`, `cat_`, `rule_`,\n * `rln_`, `ndg_`, …) and never on names. Names/descriptions are mutable display\n * metadata; renaming never breaks a reference. $0-LLM on our side - the contract\n * is pure deterministic JSON; all judgment lives in the agent skills.\n *\n * The canonical example payloads for the §11 core shapes (Intent, ReviewFeedback,\n * DiffJson, Rule, Nudge) are the conformance golden fixtures - see\n * `golang/internal/extrovertapi/testdata/contract/` and the SDK\n * `contract.test.ts` (both assert these examples parse/validate without loss).\n *\n * @packageDocumentation\n */\n\n// ---------------------------------------------------------------------------\n// §11 CORE - the canonical shapes, named verbatim from the spec.\n//\n// Four of the five §11 core shapes already exist as M1–M8 model types; we\n// re-export them here under their canonical names (NOT redefinitions), so the\n// existing tests + the openapi component schemas stay the single source of truth.\n// ---------------------------------------------------------------------------\n\n/** §11 \"Intent (submit time)\". The agent's for-the-reviewer summary (D3). */\nexport type { ReviewIntent } from \"./models.js\";\n/** §11 \"Feedback\". Returned by `get_review_feedback`. */\nexport type { ReviewFeedback, ReviewFeedbackComment } from \"./models.js\";\n/** §11 \"Rule (`get_rules` element)\". A learned writing preference. */\nexport type { Rule } from \"./models.js\";\n/** §11 \"Nudge (`list_review_events` element)\". A durable liveness nudge. */\nexport type { ReviewEvent } from \"./models.js\";\n\n/**\n * One structured hunk of a `diff_json` (spec §11 \"Diff (`diff_json`)\"). A single\n * deterministic field change computed server-side in Go ($0 LLM). `op` is the\n * change verb; `before`/`after` carry the literal text.\n */\nexport interface DiffHunk {\n /** The Review field this hunk changed (e.g. `subject`, `body_text`). */\n field: string;\n /** The change verb (e.g. `replace`, `insert`, `delete`). */\n op: string;\n /** The text before the change. */\n before?: string;\n /** The text after the change. */\n after?: string;\n}\n\n/**\n * §11 \"Diff (`diff_json`)\". The structured proposed-vs-sent diff, computed\n * deterministically in Go ($0 LLM). `fields_changed` names the changed Review\n * fields; `hunks` carry the per-field before/after.\n *\n * This is the named publication of the `diff_json` object that already appears\n * (as `diff_json`) on `ReviewFeedback` and `ReviewTurn`; those fields keep their\n * permissive `Record<string, unknown>` wire type for back-compat, and a harness\n * MAY narrow them to this shape.\n */\nexport interface DiffJson {\n /** The Review fields that changed (e.g. `[\"subject\",\"body_text\"]`). */\n fields_changed: string[];\n /** Per-field structured before/after hunks. */\n hunks: DiffHunk[];\n}\n\n// ---------------------------------------------------------------------------\n// FULL SURFACE - the rest of the published M1–M8 contract, re-exported as ONE\n// provisional-0.x contract (no tiering; D14 \"the full built surface\").\n// ---------------------------------------------------------------------------\n\nexport type {\n // submit / states / intent (M1/M2)\n ReviewMode,\n ReviewState,\n Review,\n ReviewTurn,\n SubmitForReviewResult,\n QueuedForReviewResult,\n SentResult,\n // realtime / nudge queue (M3)\n ReviewEventReason,\n ReviewEventsResult,\n ReviewEventCursor,\n // chat / revision / restamp (M5, M7)\n PostReviewChatRequest,\n SubmitRevisionRequest,\n RestampReviewRequest,\n // category registry (M4)\n Category,\n ProposeCategoryRequest,\n UpdateCategoryRequest,\n // graduation + risk dial (M6)\n AccountRiskDial,\n EffectiveRiskDial,\n CategoryRiskDial,\n RiskDial,\n GraduationStatus,\n ProposeGraduationRequest,\n // reconciliation + pacing (M7)\n ScanBacklogStatus,\n CategoryPacingState,\n PacingItem,\n // rules + audit (M4)\n SaveRuleRequest,\n RuleAuditEntry,\n // BYO reviewer decision (M8)\n ReviewerAction,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n // agent commerce request plane\n CommerceBlocker,\n QuoteDomainRequest,\n DomainQuote,\n CommerceRequestKind,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCommerceRequestsParams,\n CommerceRequest,\n} from \"./models.js\";\n\n// ---------------------------------------------------------------------------\n// Contract version + machine-readable manifest.\n// ---------------------------------------------------------------------------\n\n/**\n * The published version of the Extrovert Review-Loop open contract (D14).\n *\n * **`0.1.0-pre.10` - PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's\n * `package.json` version) and aligned to the openapi `info.version`. Open and\n * documented, but MAY still evolve before 1.0 (no external users yet; the D20\n * shared-pool governor is required before external users). Pin it.\n */\nexport const CONTRACT_VERSION = \"0.1.0-pre.10\" as const;\n\n/** The stability posture of a published contract version. */\nexport type ContractStability = \"provisional\" | \"stable\";\n\n/**\n * The machine-readable manifest of the open contract (D14) - what a harness pins.\n *\n * It enumerates the canonical §11 **core** shapes and the **full** M1–M8 surface\n * by name, stamps {@link CONTRACT_VERSION}, and marks the {@link ContractStability}\n * posture so a consumer can reason about evolution risk. It carries no runtime\n * behavior (M9 adds none - types + a version + a test + docs) and no LLM.\n */\nexport interface ContractManifest {\n /** Stable contract name (NOT a protocol name - D14). */\n readonly name: \"extrovert.review-loop\";\n /** The published contract version (== {@link CONTRACT_VERSION}). */\n readonly version: string;\n /**\n * `provisional` (0.x) until the D20 shared-pool governor lands + external users\n * exist. Provisional ⇒ additive evolution before 1.0 is expected.\n */\n readonly stability: ContractStability;\n /**\n * D14: this is an SDK + skill contract, versioned WITH the SDK - never a wire\n * protocol or a standalone protocol endpoint.\n */\n readonly kind: \"sdk+skill-contract\";\n /** Cross-reference to the spec section that froze these shapes. */\n readonly spec_ref: \"hitl-spec.md#11\";\n /** The five canonical §11 shapes, named verbatim from the spec. */\n readonly core_shapes: readonly string[];\n /** The full published M1–M8 agent-facing contract surface (one 0.x contract; no tiering). */\n readonly shapes: readonly string[];\n /** The agent skills that are part of the contract (D14 - \"skill + SDK\"). */\n readonly skills: readonly string[];\n}\n\n/**\n * The published manifest instance. Frozen so a harness can compare it\n * structurally. The `core_shapes` are the five §11 canonical shapes; `shapes` is\n * the full provisional-0.x surface. Keep this list in sync with the re-exports\n * above - the `contract.test.ts` drift test asserts every named shape resolves.\n */\nexport const CONTRACT_MANIFEST: ContractManifest = {\n name: \"extrovert.review-loop\",\n version: CONTRACT_VERSION,\n stability: \"provisional\",\n kind: \"sdk+skill-contract\",\n spec_ref: \"hitl-spec.md#11\",\n // §11 core - the five canonical example shapes.\n core_shapes: [\"ReviewIntent\", \"ReviewFeedback\", \"DiffJson\", \"Rule\", \"ReviewEvent\"],\n // The FULL published surface (the §11 core plus the rest of M1–M8). Adding a\n // name here without a matching re-export (or vice-versa) breaks the drift test.\n shapes: [\n // §11 core\n \"ReviewIntent\",\n \"ReviewFeedback\",\n \"ReviewFeedbackComment\",\n \"DiffJson\",\n \"DiffHunk\",\n \"Rule\",\n \"ReviewEvent\",\n // submit / states (M1/M2)\n \"ReviewMode\",\n \"ReviewState\",\n \"Review\",\n \"ReviewTurn\",\n \"SubmitForReviewResult\",\n \"QueuedForReviewResult\",\n \"SentResult\",\n // realtime (M3)\n \"ReviewEventReason\",\n \"ReviewEventsResult\",\n \"LearnReviewRuleRequest\",\n \"LearnedReviewRule\",\n \"ReviewEventCursor\",\n // chat / revision / restamp (M5/M7)\n \"PostReviewChatRequest\",\n \"SubmitRevisionRequest\",\n \"RestampReviewRequest\",\n // category registry (M4)\n \"Category\",\n \"ProposeCategoryRequest\",\n \"UpdateCategoryRequest\",\n // graduation + risk dial (M6)\n \"AccountRiskDial\",\n \"EffectiveRiskDial\",\n \"CategoryRiskDial\",\n \"RiskDial\",\n \"GraduationStatus\",\n \"ProposeGraduationRequest\",\n // reconciliation + pacing (M7)\n \"ScanBacklogStatus\",\n \"CategoryPacingState\",\n \"PacingItem\",\n // rules + audit (M4)\n \"SaveRuleRequest\",\n \"RuleAuditEntry\",\n // BYO reviewer decision (M8)\n \"ReviewerAction\",\n \"ReviewDecisionContext\",\n \"ReviewerDecisionRequest\",\n \"ReviewerDecisionResult\",\n // agent commerce request plane\n \"CommerceBlocker\",\n \"QuoteDomainRequest\",\n \"DomainQuote\",\n \"CommerceRequestKind\",\n \"RequestDomainPurchaseRequest\",\n \"RequestPlanChangeRequest\",\n \"ListCommerceRequestsParams\",\n \"CommerceRequest\",\n ],\n // The complete Review Loop behavior lives in the send skill; writing-rule\n // governance remains independently installable and part of this contract.\n skills: [\"extrovert-send-email\", \"extrovert-writing-rules\"],\n} as const;\n\nexport type { LearnReviewRuleRequest, LearnedReviewRule } from \"./models.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/administration.generated.ts","../src/administration.ts","../src/errors.ts","../src/problem.ts","../src/version.ts","../src/http.ts","../src/inbox-page.ts","../src/administration-fixtures.ts","../src/extract.ts","../src/recipients.ts","../src/fixtures.ts","../src/include.ts","../src/transport.ts","../src/domain-wait.ts","../src/key-tier.ts","../src/resources/inbox-handle.ts","../src/pagination.ts","../src/resources/projects.ts","../src/resources/index.ts","../src/client.ts","../src/send-result.ts","../src/webhook.ts","../src/contract.ts"],"names":["invalid","actions","inbox","now","summary"],"mappings":";;;AACO,IAAM,qBAAA,GAAwB,CAAC,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,4BAAA,EAA6B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,wDAAA,EAAyD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,+DAAA,EAA+D,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,gCAAA,EAAiC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,gEAAA,EAAiE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,6BAAA,EAA8B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,+BAAA,EAA+B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,0BAAA,EAA2B,EAAC,aAAA,EAAc,iEAAA,EAAkE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,aAAA,EAAc,4JAAA,EAA6J,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,uBAAA,EAAwB,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,uEAAA,EAAuE,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kCAAA,EAAmC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,eAAc,4JAAA,EAA6J,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,2DAAA,EAA4D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,uFAAA,EAAuF,EAAE,EAAC,aAAA,EAAc,+HAAA,EAAgI,IAAA,EAAK,mCAAA,EAAoC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAA,EAAgB,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,kFAAA,EAAmF,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6EAAA,EAA6E,EAAE,EAAC,aAAA,EAAc,6MAAA,EAA8M,IAAA,EAAK,4BAAA,EAA6B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,mDAAA,EAAoD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,8CAAA,EAA8C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,aAAA,EAAc,4JAAA,EAA6J,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,8CAAA,EAA+C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6CAAA,EAA6C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,8CAAA,EAA+C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gEAAA,EAAgE,EAAE,EAAC,aAAA,EAAc,mSAAA,EAAoS,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,8BAAA,EAA+B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,mDAAA,EAAmD,EAAE,EAAC,aAAA,EAAc,oPAAA,EAAqP,IAAA,EAAK,SAAA,EAAU,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,cAAA,EAAe,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAA,EAA0D,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,8BAAA,EAA+B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,4BAAA,EAA6B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,wCAAA,EAAwC,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,sCAAA,EAAuC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,8BAA6B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,2EAAA,EAA2E,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,6BAAA,EAA8B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,oCAAA,EAAqC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4DAAA,EAA4D,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,2BAAA,EAA4B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,+CAAA,EAAgD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6DAAA,EAA6D,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,QAAO,2BAAA,EAA4B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gCAAA,EAAgC,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,0BAAA,EAA2B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,6CAAA,EAA6C,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,2BAAA,EAA4B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4EAAA,EAAuE,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,sCAAA,EAAuC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qEAAA,EAAgE,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAA,EAAG,UAAA,EAAW,CAAA,EAAE,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,UAAA,EAAW,CAAC,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,gCAAA,EAAiC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kEAAA,EAAkE,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,uCAAA,EAAwC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iCAAA,EAAiC,EAAE,EAAC,aAAA,EAAc,oOAAA,EAAqO,IAAA,EAAK,0BAAA,EAA2B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,uCAAA,EAAwC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,wBAAA,EAAwB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,UAAA,EAAW,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,gBAAA,EAAiB,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,oCAAA,EAAoC,EAAE,EAAC,aAAA,EAAc,2NAAA,EAA4N,IAAA,EAAK,WAAA,EAAY,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,MAAA,EAAO,uCAAA,EAAuC,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,gBAAA,EAAiB,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,2CAAA,EAA2C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,UAAA,EAAW,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,yBAAA,EAA0B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,wCAAA,EAAwC,EAAE,EAAC,aAAA,EAAc,yKAAA,EAA0K,IAAA,EAAK,YAAA,EAAa,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,yBAAA,EAA0B,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,sCAAA,EAAsC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,aAAA,EAAc,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,SAAA,EAAU,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,iCAAA,EAAkC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6CAAA,EAA6C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,4BAAA,EAA6B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,mDAAA,EAAmD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,0CAAA,EAA2C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6DAAA,EAA6D,EAAE,EAAC,aAAA,EAAc,uOAAA,EAAwO,IAAA,EAAK,kCAAA,EAAmC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,yDAAA,EAAyD,EAAE,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iDAAA,EAAkD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4EAAA,EAA4E,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,0BAAA,EAA2B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,iDAAA,EAAiD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,wCAAA,EAAyC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yFAAA,EAAyF,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,2BAAA,EAA4B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,2CAAA,EAA4C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,oCAAA,EAAoC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kCAAA,EAAmC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,kDAAA,EAAkD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,4DAAA,EAA6D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,sEAAA,EAAsE,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,8BAAA,EAA+B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,wDAAA,EAAyD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,2DAAA,EAA2D,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,wDAAA,EAAyD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iCAAA,EAAiC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,6BAAA,EAA8B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,4CAAA,EAA4C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,gEAAA,EAAiE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6DAAA,EAA6D,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,4BAAA,EAA6B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,oDAAA,EAAoD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,0BAAA,EAA2B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,4CAAA,EAA4C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iCAAA,EAAiC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,6BAAA,EAA8B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,qEAAA,EAAsE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6DAAA,EAA6D,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,2BAAA,EAA4B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,8DAAA,EAA+D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gEAAA,EAAgE,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,8BAAA,EAA+B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,+CAAA,EAAgD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,+CAAA,EAA+C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,+BAAA,EAAgC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iDAAgD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iDAAA,EAAiD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,+BAAA,EAAgC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6CAAA,EAA6C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,+BAAA,EAAgC,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yBAAA,EAAyB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,iCAAA,EAAkC,gBAAA,EAAiB,QAAO,SAAA,EAAU,wBAAA,EAAwB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iCAAA,EAAkC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qCAAA,EAAqC,EAAE,EAAC,aAAA,EAAc,2cAAA,EAA4c,IAAA,EAAK,gBAAA,EAAiB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,0CAAA,EAA2C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gDAAA,EAAgD,EAAE,EAAC,aAAA,EAAc,mWAAA,EAAoW,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iDAAA,EAAkD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,0NAAA,EAA2N,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,qCAAA,EAAsC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iDAAA,EAAiD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,4DAAA,EAA6D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qCAAA,EAAqC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,aAAA,EAAc,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,iCAAA,EAAkC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iCAAA,EAAiC,EAAE,EAAC,aAAA,EAAc,sIAAA,EAAuI,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,2CAAA,EAA4C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iEAAA,EAAiE,EAAE,EAAC,aAAA,EAAc,gFAAA,EAAiF,IAAA,EAAK,cAAA,EAAe,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,2CAAA,EAA4C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAA,EAA0D,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,cAAA,EAAe,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,kCAAA,EAAmC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,oJAAA,EAAqJ,IAAA,EAAK,eAAA,EAAgB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,kCAAA,EAAmC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qCAAA,EAAqC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,cAAA,EAAe,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,0CAAA,EAA0C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,+CAAA,EAAgD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,2CAAA,EAA2C,EAAE,EAAC,aAAA,EAAc,oJAAA,EAAqJ,IAAA,EAAK,gBAAA,EAAiB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,+CAAA,EAAgD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yCAAA,EAAyC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4BAAA,EAA4B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4CAAA,EAA4C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,gBAAA,EAAiB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yBAAA,EAAyB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,YAAA,EAAa,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,sDAAA,EAAuD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,aAAA,EAAa,EAAE,EAAC,aAAA,EAAc,wGAAA,EAAyG,IAAA,EAAK,aAAA,EAAc,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,sDAAA,EAAuD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,sDAAA,EAAsD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,cAAA,EAAe,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,mEAAA,EAAoE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,mDAAA,EAAmD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,aAAA,EAAc,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,kEAAA,EAAmE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4BAAA,EAA4B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,qDAAA,EAAsD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,oSAAA,EAAqS,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,uFAAA,EAAwF,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,4EAAA,EAA6E,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,SAAA,EAAU,SAAA,EAAU,aAAA,EAAc,6GAAA,EAA8G,MAAA,EAAO,CAAC,SAAA,EAAU,eAAc,cAAA,EAAe,WAAA,EAAY,iBAAA,EAAkB,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,8CAAA,EAA8C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,iDAAA,EAAiD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,0DAAA,EAA2D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,oCAAA,EAAoC,EAAE,EAAC,aAAA,EAAc,0SAAA,EAA2S,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,wMAAA,EAAyM,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,4CAAA,EAA4C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kEAAA,EAAkE,EAAE,EAAC,aAAA,EAAc,ySAAA,EAA0S,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yDAAA,EAAyD,EAAE,EAAC,aAAA,EAAc,oYAAA,EAAkY,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,8EAAA,EAA+E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iEAAA,EAAiE,EAAE,EAAC,aAAA,EAAc,gWAAA,EAAuV,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,sEAAA,EAAuE,kBAAiB,MAAA,EAAO,SAAA,EAAU,kEAAA,EAAkE,EAAE,EAAC,aAAA,EAAc,6gBAAA,EAA0f,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,wEAAA,EAAyE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kEAAA,EAAkE,EAAE,EAAC,aAAA,EAAc,mTAAA,EAAoT,IAAA,EAAK,0BAAA,EAA2B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,iFAAA,EAAkF,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAA,EAA0D,EAAE,EAAC,aAAA,EAAc,oWAAA,EAAqW,IAAA,EAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,qEAAA,EAAsE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gEAAA,EAAgE,EAAE,EAAC,aAAA,EAAc,0WAAA,EAA2W,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,8EAAA,EAA+E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kFAAA,EAAkF,EAAE,EAAC,aAAA,EAAc,CAAA;AAAA,CAAA,EAA2Y,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,cAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,4EAAA,EAA6E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,8DAAA,IAAgE,EAAC,aAAA,EAAc,oRAAA,EAAqR,IAAA,EAAK,6BAAA,EAA8B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,cAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,OAAA,EAAQ,MAAA,EAAO,yEAAA,EAA0E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yEAAuE,EAAE,EAAC,aAAA,EAAc,2kBAAA,EAAykB,IAAA,EAAK,kBAAA,EAAmB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,MAAA,EAAO,MAAA,EAAO,4EAAA,EAA6E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,sEAAoE,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,mBAAkB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,WAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,mMAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,QAAO,iEAAA,EAAkE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,wBAAA,EAAwB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,kDAAA,IAAoD,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,QAAO,iEAAA,EAAkE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,+CAAA,EAA+C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,cAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,QAAA,EAAS,MAAA,EAAO,sEAAA,EAAuE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4BAAA,EAA4B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,SAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,KAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iMAAA,EAAkM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAM,MAAA,EAAO,uDAAA,EAAwD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6BAAA,IAA+B,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,uDAAA,EAAwD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,8DAAA,EAA+D,kBAAiB,MAAA,EAAO,SAAA,EAAU,kDAAA,EAAkD,EAAE,EAAC,aAAA,EAAc,MAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,cAAa,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,UAAS,MAAA,EAAO,8DAAA,EAA+D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAA,IAA4D,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,aAAA,EAAc,sCAAA,EAAuC,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,WAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,uEAAA,EAAwE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,yCAAuC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,4EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,aAAA,EAAc,4DAA2D,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAA,EAAO,IAAI,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,8EAA6E,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kEAAA,EAAkE,EAAE,EAAC,eAAc,IAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,aAAA,EAAc,0DAAA,EAA2D,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,YAAA,EAAa,MAAA,EAAO,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,wFAAA,EAAyF,gBAAA,EAAiB,MAAA,EAAO,WAAU,uDAAA,EAAuD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,sBAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,eAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,eAAc,6DAAA,EAA8D,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,eAAc,0DAAA,EAA2D,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAA,EAAO,MAAK,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,gGAAA,EAAiG,gBAAA,EAAiB,QAAA,EAAS,SAAA,EAAU,kDAAA,IAAoD,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,oEAAA,EAAqE,gBAAA,EAAiB,QAAO,SAAA,EAAU,8CAAA,EAA8C,EAAE,EAAC,aAAA,EAAc,oPAAA,EAAqP,MAAK,8BAAA,EAA+B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,+CAAA,EAA+C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,4EAAA,EAA6E,kBAAiB,MAAA,EAAO,SAAA,EAAU,iFAAA,EAAiF,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,kCAAA,EAAkC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,eAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,QAAO,mEAAA,EAAoE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,cAAa,MAAA,EAAO,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,0FAAA,EAA2F,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,mEAAiE,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,uBAAA,EAAwB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,4EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,aAAA,EAAc,4JAAA,EAA6J,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,8FAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,sEAAA,EAAuE,gBAAA,EAAiB,MAAA,EAAO,WAAU,0CAAA,EAA0C,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,eAAc,0EAAA,EAA2E,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,MAAA,EAAO,WAAW,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,kFAAA,EAAmF,kBAAiB,MAAA,EAAO,SAAA,EAAU,4CAAA,EAA4C,EAAE,EAAC,aAAA,EAAc,yWAAmW,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAO,MAAA,EAAO,+DAAA,EAAgE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4DAAA,EAA4D,EAAE,EAAC,aAAA,EAAc,wGAAA,EAAyG,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,4DAAA,EAA6D,gBAAA,EAAiB,MAAA,EAAO,WAAU,6CAAA,EAA6C,EAAE,EAAC,aAAA,EAAc,ugBAAA,EAAqgB,IAAA,EAAK,yBAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,MAAA,EAAO,8CAAA,EAA8C,EAAE,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,4DAAA,EAA6D,kBAAiB,MAAA,EAAO,SAAA,EAAU,qDAAA,EAAqD,EAAE,EAAC,aAAA,EAAc,gSAAA,EAA8R,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,QAAQ,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,uEAAsE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gDAAA,EAAgD,EAAE,EAAC,eAAc,+WAAA,EAAgX,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAwD,EAAE,EAAC,aAAA,EAAc,sHAAA,EAAuH,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,0CAAA,EAA0C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,MAAA,EAAO,WAAU,wEAAA,EAAwE,EAAE,EAAC,aAAA,EAAc,6WAAA,EAA8W,IAAA,EAAK,oBAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,aAAA,EAAc,EAAC,aAAA,EAAc,4CAAA,EAAwC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,mCAAA,EAAoC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,QAAO,EAAC,aAAA,EAAc,qBAAA,EAAsB,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,aAAA,EAAc,kDAAA,EAAmD,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,uDAAA,EAAwD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gDAA8C,EAAE,EAAC,aAAA,EAAc,4NAAA,EAA6N,IAAA,EAAK,gBAAA,EAAiB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,4DAAA,EAA6D,gBAAA,EAAiB,QAAO,SAAA,EAAU,wDAAA,EAAwD,EAAE,EAAC,aAAA,EAAc,oXAAA,EAAqX,MAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,oEAAA,EAAqE,kBAAiB,MAAA,EAAO,SAAA,EAAU,+CAAA,EAA+C,EAAE,EAAC,aAAA,EAAc,yYAAkY,IAAA,EAAK,iBAAA,EAAkB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,6CAAA,EAA6C,EAAE,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iEAAA,EAAkE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qEAAA,EAAqE,EAAE,EAAC,aAAA,EAAc,gXAA+W,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,wEAAuE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4DAAA,EAA4D,EAAE,EAAC,eAAc,+SAAA,EAAgT,IAAA,EAAK,uBAAA,EAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,IAAA,EAAK,QAAA,EAAS,YAAA,EAAa,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,0FAAyF,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,qDAAA,EAAqD,EAAE,EAAC,eAAc,+MAAA,EAAgN,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,QAAO,mEAAA,EAAoE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,kCAAA,EAAkC,EAAE,EAAC,aAAA,EAAc,uXAAA,EAAwX,IAAA,EAAK,kBAAA,EAAmB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,yDAAA,EAA0D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gDAA8C,EAAE,EAAC,aAAA,EAAc,iSAAA,EAAkS,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,yDAAA,EAA0D,gBAAA,EAAiB,QAAO,SAAA,EAAU,oEAAA,EAAoE,EAAE,EAAC,aAAA,EAAc,iTAAA,EAA+S,IAAA,EAAK,eAAA,EAAgB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,aAAA,EAAc,EAAC,aAAA,EAAc,6EAAA,EAAyE,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,iEAAA,EAAkE,MAAA,EAAO,CAAC,SAAA,EAAU,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,qDAAA,EAAsD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,iDAA+C,EAAE,EAAC,aAAA,EAAc,wXAAA,EAAyX,IAAA,EAAK,sBAAA,EAAuB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,kDAAA,EAAkD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,qDAAA,EAAsD,gBAAA,EAAiB,QAAO,SAAA,EAAU,qDAAA,EAAqD,EAAE,EAAC,aAAA,EAAc,mQAAA,EAAoQ,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,WAAA,EAAY,EAAC,aAAA,EAAc,mDAAA,EAA0C,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,4BAAA,EAA6B,MAAA,EAAO,CAAC,MAAA,EAAO,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,2DAAA,EAA4D,gBAAA,EAAiB,MAAA,EAAO,WAAU,yDAAA,EAAyD,EAAE,EAAC,aAAA,EAAc,8WAAA,EAA+W,IAAA,EAAK,qBAAA,EAAsB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,yEAAA,EAA0E,gBAAA,EAAiB,QAAO,SAAA,EAAU,qDAAA,EAAqD,EAAE,EAAC,aAAA,EAAc,wKAAA,EAAyK,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,kEAAA,EAAmE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,8CAAA,EAA8C,EAAE,EAAC,aAAA,EAAc,wKAAA,EAAyK,MAAK,wBAAA,EAAyB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,iEAAA,EAAkE,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6CAAA,EAA6C,EAAE,EAAC,aAAA,EAAc,qIAAoI,IAAA,EAAK,wBAAA,EAAyB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,eAAc,4JAAA,EAA6J,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,CAAA,EAAE,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,uDAAA,EAAwD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0DAAA,EAA0D,EAAE,EAAC,aAAA,EAAc,MAAK,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAM,MAAA,EAAO,wDAAA,EAAyD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,uBAAA,IAAyB,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,sBAAA,EAAuB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,kDAAA,EAAkD,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,wDAAA,EAAyD,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4BAAA,EAA4B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,QAAO,SAAA,EAAU,yBAAA,EAAyB,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,MAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,2CAAA,EAA2C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,6DAAA,EAA8D,gBAAA,EAAiB,QAAO,SAAA,EAAU,0BAAA,EAA0B,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,MAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,YAAA,EAAa,IAAI,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,+DAA8D,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,0BAAA,EAA0B,EAAE,EAAC,eAAc,sIAAA,EAAuI,IAAA,EAAK,oBAAA,EAAqB,aAAA,EAAc,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,oCAAA,EAAqC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,2CAAA,EAA2C,EAAE,EAAC,aAAA,EAAc,gJAAA,EAAiJ,IAAA,EAAK,6BAAA,EAA8B,eAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,WAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,KAAA,EAAM,QAAO,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,EAAC,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,6CAAA,EAA8C,gBAAA,EAAiB,QAAO,SAAA,EAAU,kDAAA,EAAkD,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,gBAAA,EAAiB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,KAAA,EAAM,QAAO,kCAAA,EAAmC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,gCAAA,EAAgC,EAAE,EAAC,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,mBAAA,EAAoB,aAAA,EAAc,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,gDAA8C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,kCAAA,EAAmC,gBAAA,EAAiB,MAAA,EAAO,WAAU,+CAAA,EAA+C,EAAE,EAAC,aAAA,EAAc,8NAAA,EAA+N,IAAA,EAAK,yBAAwB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,iBAAA,EAAkB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,EAAA,EAAG,aAAA,EAAc,4FAAA,EAA6F,SAAA,EAAU,GAAA,EAAI,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,wCAAuC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,KAAK,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,KAAA,EAAM,MAAA,EAAO,sCAAA,EAAuC,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,4CAA0C,EAAE,EAAC,aAAA,EAAc,wIAAA,EAAyI,IAAA,EAAK,yBAAA,EAA0B,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,wBAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,iBAAA,EAAkB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,KAAK,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,OAAM,MAAA,EAAO,6CAAA,EAA8C,gBAAA,EAAiB,QAAA,EAAS,SAAA,EAAU,0CAAA,IAA4C,EAAC,aAAA,EAAc,gKAAA,EAAsK,IAAA,EAAK,wBAAA,EAAyB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,QAAO,+CAAA,EAA+C,EAAE,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,IAAI,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,kDAAA,EAAmD,gBAAA,EAAiB,MAAA,EAAO,WAAU,oDAAA,EAAoD,EAAE,EAAC,aAAA,EAAc,2SAAA,EAA4S,IAAA,EAAK,qBAAoB,aAAA,EAAc,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAU,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,MAAA,EAAO,MAAA,EAAO,2CAAA,EAA4C,gBAAA,EAAiB,MAAA,EAAO,SAAA,EAAU,6DAAA,EAA8D,CAAA;AAC9gxF,IAAM,qBAAA,GAAwB,EAAC,yBAAA,EAA0B,EAAC,eAAc,yNAAA,EAA0N,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,eAAc,kRAAA,EAAmR,YAAA,EAAa,EAAC,uBAAA,EAAwB,EAAC,aAAA,EAAc,mDAAA,EAAoD,MAAA,EAAO,SAAA,IAAW,aAAA,EAAc,EAAC,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,aAAA,EAAc,2BAAA,EAA4B,MAAA,EAAO,SAAA,IAAW,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,IAAW,wBAAA,EAAyB,EAAC,aAAA,EAAc,qCAAA,EAAsC,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,aAAA,EAAc,oCAAA,EAAqC,MAAA,EAAO,SAAA,IAAW,gBAAA,EAAiB,EAAC,QAAA,EAAS,QAAA,EAAS,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,gBAAA,EAAiB,oBAAA,EAAqB,oBAAA,EAAqB,eAAc,wBAAA,EAAyB,wBAAA,EAAyB,uBAAuB,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,cAAa,EAAC,kBAAA,EAAmB,EAAC,aAAA,EAAc,yDAAA,EAA0D,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,uCAAA,EAAuC,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,QAAO,WAAA,EAAY,SAAA,EAAU,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAQ,EAAC,MAAA,EAAO,uCAAA,EAAuC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,mBAAA,EAAoB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,MAAM,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,+CAAA,EAA+C,EAAE,SAAQ,EAAC,MAAA,EAAO,wCAAA,EAAwC,IAAG,UAAA,EAAW,CAAC,QAAA,EAAS,aAAA,EAAc,oBAAmB,aAAA,EAAc,mBAAA,EAAoB,WAAA,EAAY,cAAA,EAAe,OAAA,EAAQ,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,kBAAA,EAAmB,EAAC,YAAA,EAAa,EAAC,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,mBAAA,EAAoB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,mCAAA,EAAoC,EAAC,aAAA,EAAc,6GAAA,EAA8G,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,aAAA,EAAc,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,2BAAA,EAA4B,EAAC,eAAc,yDAAA,EAA0D,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,uBAAsB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,iBAAgB,EAAC,aAAA,EAAc,gCAAA,EAAiC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,aAAY,SAAA,EAAU,YAAY,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,eAAA,EAAgB,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,YAAW,CAAC,MAAA,EAAO,MAAA,EAAO,qBAAA,EAAsB,qCAAoC,2BAAA,EAA4B,aAAA,EAAc,qBAAA,EAAsB,eAAA,EAAgB,aAAY,eAAA,EAAgB,cAAc,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,0BAAA,EAA2B,EAAC,YAAA,EAAa,EAAC,sBAAA,EAAuB,EAAC,MAAA,EAAO,WAAS,EAAE,oBAAA,EAAqB,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,WAAA,EAAY,SAAA,EAAU,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAqB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,QAAA,IAAU,6BAAA,EAA8B,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,eAAc,WAAA,EAAY,QAAA,EAAS,sBAAsB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,yGAAA,EAA0G,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,yBAAA,EAA0B,EAAC,eAAc,oEAAA,EAAqE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,WAAU,SAAA,EAAU,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAoB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,qBAAA,EAAsB,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,iBAAA,EAAkB,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,aAAA,EAAc,6CAAA,EAA8C,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,0BAAyB,EAAC,aAAA,EAAc,2EAAA,EAA4E,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,yBAAwB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,4BAA2B,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,+BAAA,EAAgC,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,2BAA0B,EAAC,aAAA,EAAc,+BAAA,EAAgC,QAAA,EAAS,SAAQ,iEAAA,EAAkE,IAAA,EAAK,MAAA,EAAO,SAAA,IAAW,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,oBAAA,EAAqB,EAAC,aAAA,EAAc,oEAAmE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,gBAAA,EAAiB,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAA,EAAmB,aAAA,EAAc,OAAA,EAAQ,iBAAgB,iBAAA,EAAkB,mBAAA,EAAoB,qBAAA,EAAsB,eAAA,EAAgB,sBAAqB,yBAAA,EAA0B,wBAAA,EAAyB,0BAAA,EAA2B,+BAAA,EAAgC,yBAAwB,wBAAA,EAAyB,gBAAA,EAAiB,qBAAA,EAAsB,yBAAA,EAA0B,wBAAwB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,4BAAA,EAA6B,EAAC,aAAA,EAAc,2DAAA,EAA4D,cAAa,EAAC,aAAA,EAAc,EAAC,aAAA,EAAc,uDAAsD,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,yDAAA,EAA0D,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,2BAA0B,MAAA,EAAO,CAAC,YAAA,EAAa,eAAe,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,yBAAA,EAA0B,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,aAAA,EAAc,uCAAA,EAAwC,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,aAAA,EAAc,iDAAA,EAAkD,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,aAAA,EAAc,0CAAA,EAA2C,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,yWAAA,EAA0W,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,UAAU,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,YAAA,EAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,MAAA,EAAO,SAAA,IAAW,iBAAA,EAAkB,EAAC,aAAA,EAAc,gDAAA,EAAiD,QAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,eAAc,4IAAA,EAA6I,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,aAAA,EAAc,uDAAA,EAAwD,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,cAAa,EAAC,SAAA,EAAU,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,iCAAA,EAAiC,EAAE,MAAA,EAAO,SAAO,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,SAAA,EAAU,EAAC,aAAA,EAAc,8UAAA,EAA+U,cAAa,EAAC,iBAAA,EAAkB,EAAC,aAAA,EAAc,0CAAyC,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,4CAAA,EAA6C,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,sCAAoC,EAAE,qBAAA,EAAsB,EAAC,sBAAA,EAAuB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,0DAAA,EAAgE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAwB,EAAC,aAAA,EAAc,2LAAA,EAA4L,OAAA,EAAQ,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,SAAO,EAAE,iBAAA,EAAkB,EAAC,sBAAA,EAAuB,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,4CAA0C,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,eAAc,8DAAA,EAA+D,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,MAAA,EAAO,OAAA,IAAQ,EAAE,UAAA,EAAW,CAAC,UAAA,EAAW,uBAAsB,gBAAA,EAAiB,iBAAA,EAAkB,uBAAuB,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,0DAAA,EAA2D,YAAA,EAAa,EAAC,QAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,WAAU,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,WAAS,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,QAAO,qCAAA,EAAqC,EAAE,iBAAA,EAAkB,EAAC,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,KAAA,EAAM,EAAC,MAAA,EAAO,QAAA,IAAU,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,UAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,wCAAsC,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,OAAA,EAAQ,CAAC,EAAC,MAAA,EAAO,8BAAA,EAA8B,EAAE,EAAC,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,SAAQ,EAAC,MAAA,EAAO,iCAAA,EAAiC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,QAAO,QAAA,EAAS,CAAA,EAAC,EAAE,oBAAmB,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,OAAA,EAAO,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,YAAA,EAAa,EAAC,gBAAA,EAAiB,EAAC,QAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,eAAc,mEAAA,EAAoE,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,8CAAA,EAA+C,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,aAAA,EAAc,wCAAA,EAAyC,QAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,aAAA,EAAc,qBAAA,EAAsB,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,qCAAA,IAAuC,eAAA,EAAgB,EAAC,aAAA,EAAc,sBAAA,EAAuB,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,SAAQ,OAAA,EAAQ,QAAA,EAAS,QAAA,EAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,aAAA,EAAc,oCAAA,EAAqC,MAAA,EAAO,CAAC,QAAA,EAAS,WAAA,EAAY,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,IAAA,EAAK,aAAA,EAAc,cAAA,EAAe,eAAc,MAAA,EAAO,QAAA,EAAS,OAAA,EAAQ,YAAA,EAAa,aAAY,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,6BAAA,EAA8B,EAAC,OAAA,EAAQ,CAAC,EAAC,MAAA,EAAO,6CAAA,EAA6C,EAAE,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,eAAc,kDAAA,EAAmD,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAU,GAAE,MAAA,EAAO,QAAA,EAAS,CAAA,IAAG,mBAAA,EAAoB,EAAC,aAAA,EAAc,2QAAA,EAA4Q,cAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,oCAAA,EAAqC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,aAAA,EAAc,gDAAA,EAAiD,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,WAAS,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,oCAAmC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,YAAW,CAAC,UAAA,EAAW,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,aAAA,EAAc,wJAAA,EAAsJ,YAAA,EAAa,EAAC,QAAO,EAAC,aAAA,EAAc,8CAAA,EAA+C,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,wIAAA,EAAyI,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,+BAA6B,EAAE,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,iCAAA,EAAiC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,2JAA0J,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,yMAAqM,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,4IAAA,EAAuJ,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,uHAAsH,MAAA,EAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,SAAQ,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,UAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,IAAW,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,cAAA,EAAe,WAAA,EAAY,UAAA,EAAW,OAAA,EAAQ,YAAW,MAAA,EAAO,WAAA,EAAY,UAAA,EAAW,SAAA,EAAU,aAAY,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,OAAA,EAAQ,QAAO,gBAAA,EAAiB,MAAA,EAAO,UAAA,EAAW,SAAS,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,0CAAA,IAA4C,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAA,EAA0B,EAAC,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,SAAA,EAAU,UAAA,EAAW,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,aAAY,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,uBAAA,EAAwB,EAAC,aAAA,EAAc,6JAA4J,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,QAAO,qCAAA,EAAqC,EAAE,iBAAA,EAAkB,EAAC,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,SAAA,EAAU,MAAA,EAAO,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,sCAAA,EAAsC,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,WAAA,EAAY,OAAA,EAAQ,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,+BAA8B,EAAC,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAuB,EAAC,SAAA,EAAU,KAAA,EAAM,MAAA,EAAO,SAAA,EAAS,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,QAAO,CAAC,SAAA,EAAU,UAAU,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,WAAW,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,mBAAA,EAAoB,EAAC,YAAA,EAAa,EAAC,iBAAA,EAAkB,EAAC,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,UAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,WAAS,EAAE,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,mCAAA,EAAmC,EAAE,QAAO,OAAA,EAAO,EAAE,cAAA,EAAe,EAAC,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,OAAA,EAAO,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,eAAc,6DAAA,EAA8D,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,SAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,aAAA,EAAc,iEAAA,EAAkE,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,iBAAA,EAAkB,EAAC,MAAA,EAAO,QAAA,IAAU,8BAAA,EAA+B,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,UAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,WAAS,EAAE,cAAA,EAAe,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,eAAc,6EAAA,EAA8E,YAAA,EAAa,EAAC,gBAAA,EAAiB,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,eAAc,EAAC,aAAA,EAAc,mDAAA,EAAoD,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,WAAS,EAAE,SAAA,EAAU,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,yCAAA,EAAyC,EAAE,MAAA,EAAO,SAAO,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,WAAS,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,yBAAA,EAA0B,EAAC,sBAAA,EAAuB,KAAA,EAAM,eAAA,EAAgB,CAAA,EAAE,YAAA,EAAa,EAAC,oBAAmB,EAAC,SAAA,EAAU,GAAA,EAAM,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,uRAAA,EAAwR,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,YAAA,EAAa,EAAC,QAAO,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,wCAAsC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,OAAM,SAAA,EAAU,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,SAAQ,EAAC,MAAA,EAAO,mCAAA,EAAmC,EAAE,QAAO,OAAA,EAAO,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,cAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,UAAU,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,wCAAA,EAAyC,QAAA,EAAS,WAAA,EAAY,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,aAAA,EAAc,oDAAA,EAAqD,WAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,QAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,UAAS,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,aAAA,EAAc,uEAAA,EAAwE,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,SAAA,EAAU,mBAAkB,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,gBAAA,EAAiB,MAAA,EAAO,WAAS,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,iBAAA,EAAkB,EAAC,aAAA,EAAc,+CAAA,EAAgD,cAAa,EAAC,gBAAA,EAAiB,EAAC,aAAA,EAAc,6CAA4C,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,gBAAgB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,cAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,iCAAA,EAAiC,EAAE,MAAA,EAAO,SAAO,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,sBAAA,EAAuB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,QAAO,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,YAAA,EAAa,EAAC,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,mCAAiC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,aAAA,EAAc,qTAAA,EAAiT,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,OAAA,EAAQ,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,eAAc,iEAAA,EAAkE,MAAA,EAAO,SAAA,EAAS,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,wFAAoF,MAAA,EAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,0DAAA,EAA2D,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,gEAAA,EAA2E,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,aAAA,EAAc,kCAAA,EAA8B,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,iEAAA,EAAkE,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,eAAc,0EAAA,EAAsE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,kFAAA,EAAmF,QAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,eAAc,iFAAA,EAAkF,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAoB,EAAC,aAAA,EAAc,kFAAA,EAAmF,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,QAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,eAAc,yEAAA,EAA0E,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAuB,EAAC,aAAA,EAAc,yEAAA,EAA0E,MAAA,EAAO,SAAA,EAAS,EAAE,iBAAA,EAAkB,EAAC,QAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,QAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,QAAO,CAAC,YAAA,EAAa,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,YAAA,EAAa,aAAA,EAAc,aAAa,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,MAAA,EAAO,aAAA,EAAc,OAAA,EAAQ,SAAQ,aAAA,EAAc,iBAAA,EAAkB,eAAe,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,eAAc,6VAAA,EAA2V,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,uBAAA,EAAwB,EAAC,aAAA,EAAc,qCAAA,EAAsC,MAAA,EAAO,SAAA,IAAW,kBAAA,EAAmB,EAAC,aAAA,EAAc,2FAAA,EAA4F,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,iEAAA,EAAkE,MAAA,EAAO,SAAA,IAAW,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,QAAO,iCAAA,EAAiC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,kBAAA,EAAmB,EAAC,aAAA,EAAc,yEAAwE,MAAA,EAAO,SAAA,EAAS,EAAE,uBAAA,EAAwB,EAAC,aAAA,EAAc,gFAAA,EAAiF,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,aAAA,EAAc,2EAAA,EAA4E,MAAA,EAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,qFAAA,EAAsF,MAAA,EAAO,SAAA,IAAW,kBAAA,EAAmB,EAAC,aAAA,EAAc,4GAAA,EAA6G,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,aAAA,EAAc,uBAAA,EAAwB,kBAAA,EAAmB,oBAAmB,uBAAA,EAAwB,QAAA,EAAS,WAAA,EAAY,YAAA,EAAa,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,iCAA+B,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,eAAc,EAAC,aAAA,EAAc,0BAAA,EAA2B,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,kBAAA,EAAmB,EAAC,aAAA,EAAc,8MAA6M,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,QAAA,EAAS,QAAA,EAAS,UAAA,EAAW,IAAA,EAAK,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,YAAW,IAAA,EAAK,MAAA,EAAO,SAAA,EAAS,EAAE,aAAY,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,sBAAqB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,WAAS,EAAE,wBAAA,EAAyB,EAAC,UAAA,EAAW,MAAK,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,WAAS,EAAE,gBAAA,EAAiB,EAAC,QAAA,EAAS,UAAS,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,aAAA,EAAc,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,yBAAA,EAA0B,EAAC,aAAA,EAAc,qMAAA,EAAsM,cAAa,EAAC,aAAA,EAAc,EAAC,QAAA,EAAS,UAAS,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,UAAA,EAAW,MAAK,MAAA,EAAO,SAAA,EAAS,EAAE,oBAAA,EAAqB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,SAAA,IAAW,wBAAA,EAAyB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,SAAA,IAAW,gBAAA,EAAiB,EAAC,QAAA,EAAS,QAAA,EAAS,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,gBAAA,EAAiB,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,IAAG,UAAA,EAAW,CAAC,MAAA,EAAO,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,aAAA,EAAc,8CAAA,EAA+C,MAAA,EAAO,QAAA,IAAU,mBAAA,EAAoB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAA,EAAS,OAAM,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,SAAO,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,CAAC,OAAM,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,iBAAA,EAAkB,aAAa,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAA,EAA0B,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,kBAAkB,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,IAAU,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,2BAAA,EAA4B,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,UAAA,EAAW,eAAc,eAAA,EAAgB,YAAA,EAAa,UAAA,EAAW,mBAAA,EAAoB,YAAA,EAAa,oBAAA,EAAqB,SAAA,EAAU,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,uBAAsB,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,eAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,IAAG,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,OAAA,EAAQ,CAAC,EAAC,MAAA,EAAO,gDAA8C,EAAE,EAAC,YAAA,EAAa,EAAC,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAiB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,eAAc,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAU,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAC,EAAE,UAAA,EAAW,CAAC,MAAK,QAAA,EAAS,UAAA,EAAW,cAAA,EAAe,aAAA,EAAc,gBAAA,EAAiB,iBAAA,EAAkB,gBAAA,EAAiB,QAAA,EAAS,WAAU,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,UAAS,CAAA,EAAC,EAAE,yBAAA,EAA0B,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,gBAAe,EAAC,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,CAAC,iBAAA,EAAkB,QAAA,EAAS,WAAU,WAAA,EAAY,UAAU,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,SAAA,EAAU,OAAM,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,sBAAqB,EAAC,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,KAAA,EAAM,SAAA,EAAU,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,QAAO,SAAA,EAAU,cAAA,EAAe,gBAAA,EAAiB,wBAAA,EAAyB,wBAAuB,oBAAA,EAAqB,sBAAA,EAAuB,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,uCAAA,EAAwC,MAAA,EAAO,CAAC,OAAM,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,wBAAA,EAAyB,EAAC,aAAA,EAAc,6GAAA,EAA8G,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,oBAAA,EAAqB,iBAAiB,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,GAAA,EAAI,MAAA,EAAO,OAAA,IAAS,MAAA,EAAO,EAAC,WAAA,EAAY,GAAA,EAAI,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,SAAA,EAAU,SAAA,EAAU,gBAAe,cAAc,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAA,EAAG,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,YAAW,CAAC,MAAA,EAAO,UAAA,EAAW,OAAA,EAAQ,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,2BAA0B,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,gBAAe,EAAC,aAAA,EAAc,sEAAA,EAAuE,MAAA,EAAO,UAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,6BAAA,EAA8B,EAAC,aAAA,EAAc,wHAAA,EAAyH,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,eAAc,qFAAA,EAAsF,MAAA,EAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,0BAAA,EAA2B,EAAC,QAAO,QAAA,EAAQ,EAAE,2BAAA,EAA4B,EAAC,QAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,aAAA,EAAc,2BAAA,EAA4B,QAAA,EAAS,OAAA,EAAQ,QAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,CAAC,WAAA,EAAY,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,YAAW,CAAC,IAAA,EAAK,0BAAA,EAA2B,eAAA,EAAgB,MAAA,EAAO,QAAA,EAAS,YAAA,EAAa,MAAA,EAAO,UAAS,eAAA,EAAgB,eAAA,EAAgB,SAAA,EAAU,UAAU,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iCAAA,EAAkC,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,kDAAA,IAAoD,MAAA,EAAO,OAAA,EAAO,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,QAAO,UAAA,EAAW,aAAa,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,cAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,mDAAkD,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,SAAO,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,WAAS,EAAE,aAAA,EAAc,EAAC,UAAA,EAAW,MAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,MAAA,EAAO,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,gIAAA,EAAiI,YAAA,EAAa,EAAC,YAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,iBAAA,EAAkB,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,0BAAA,EAA2B,EAAC,aAAA,EAAc,mEAAA,EAAoE,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,aAAA,EAAc,sEAAA,EAAuE,UAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,sBAAqB,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,KAAI,MAAA,EAAO,OAAA,EAAO,EAAE,iBAAA,EAAkB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,SAAA,EAAU,SAAA,EAAU,cAAA,EAAe,cAAc,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,SAAO,EAAC,EAAE,UAAA,EAAW,CAAC,MAAK,eAAA,EAAgB,WAAA,EAAY,MAAA,EAAO,UAAA,EAAW,SAAQ,QAAA,EAAS,eAAA,EAAgB,eAAA,EAAgB,eAAe,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,sCAAA,IAAwC,MAAA,EAAO,OAAA,EAAO,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,MAAA,EAAO,UAAU,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,oBAAA,EAAqB,EAAC,sBAAA,EAAuB,OAAM,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,eAAc,qEAAA,EAAsE,WAAA,EAAY,GAAA,EAAI,WAAA,EAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,8BAAA,EAA+B,EAAC,cAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,CAAC,WAAA,EAAY,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,WAAA,EAAY,aAAA,EAAc,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,+BAAA,EAAgC,EAAC,cAAa,EAAC,IAAA,EAAK,EAAC,aAAA,EAAc,6BAAA,EAA8B,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,CAAC,WAAA,EAAY,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,+CAAA,EAA+C,EAAE,OAAM,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,KAAA,EAAM,QAAA,EAAS,WAAA,EAAY,QAAO,cAAc,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,4BAAA,EAA6B,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,KAAA,EAAM,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,6BAAA,EAA8B,EAAC,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,aAAA,EAAc,mCAAA,EAAoC,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,KAAA,EAAM,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,OAAM,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,oCAAA,EAAqC,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,KAAA,EAAM,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,WAAU,cAAA,EAAe,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,aAAA,EAAc,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,qCAAA,EAAsC,EAAC,cAAa,EAAC,yBAAA,EAA0B,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,YAAW,EAAC,SAAA,EAAU,KAAA,EAAM,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,UAAQ,EAAE,2BAAA,EAA4B,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,aAAA,EAAc,6BAAA,EAA8B,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,QAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,WAAA,EAAY,SAAS,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,sBAAA,EAAuB,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAM,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,KAAA,EAAM,QAAA,EAAS,MAAA,EAAO,UAAS,WAAA,EAAY,UAAA,EAAW,sBAAA,EAAuB,yBAAA,EAA0B,6BAA4B,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,6BAAA,EAA8B,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,IAAA,EAAK,QAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,WAAA,EAAY,GAAA,EAAK,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,SAAA,EAAU,KAAA,EAAM,QAAO,CAAC,KAAA,EAAM,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,yBAAA,EAA0B,EAAC,aAAA,EAAc,qNAAoN,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,uBAAA,EAAwB,QAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,QAAO,CAAC,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAS,UAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,6SAAA,EAA8S,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAe,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAA,EAA0B,EAAC,YAAA,EAAa,EAAC,cAAa,EAAC,aAAA,EAAc,8EAAA,EAA+E,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,WAAA,EAAY,KAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,aAAY,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,aAAa,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,aAAA,EAAc,6LAAA,EAA8L,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,2BAA0B,EAAC,aAAA,EAAc,iSAAA,EAAkS,YAAA,EAAa,EAAC,kBAAA,EAAmB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,qDAAoD,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,aAAA,EAAc,uBAAA,EAAwB,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,mBAAA,EAAoB,EAAC,MAAA,EAAO,WAAS,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,mCAA6B,8BAAA,EAA+B,IAAA,EAAK,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,aAAA,EAAc,mBAAA,EAAoB,QAAO,CAAC,SAAA,EAAU,KAAA,EAAM,WAAW,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,qCAAA,EAAsC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,mBAAmB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAwB,EAAC,YAAA,EAAa,EAAC,oBAAA,EAAqB,EAAC,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,CAAA,EAAE,QAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,kBAAA,EAAmB,EAAC,MAAA,EAAO,8CAAA,IAAgD,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,8KAAA,EAA+K,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,WAAU,WAAA,EAAY,YAAA,EAAa,eAAA,EAAgB,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,aAAA,EAAc,+EAAA,EAAgF,YAAA,EAAa,EAAC,eAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,SAAA,EAAU,SAAA,EAAU,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,aAAa,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,eAAc,wHAAA,EAAsH,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,8DAAA,EAA+D,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,SAAA,EAAU,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,oCAAA,EAAoC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,aAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,+WAAA,EAAgX,YAAA,EAAa,EAAC,oBAAA,EAAqB,EAAC,MAAA,EAAO,CAAC,YAAW,WAAA,EAAY,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,gGAAA,EAAiG,YAAA,EAAa,EAAC,iBAAA,EAAkB,EAAC,SAAA,EAAU,CAAA,EAAE,QAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,WAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,SAAQ,OAAA,EAAQ,kBAAA,EAAmB,SAAA,EAAU,cAAc,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,YAAW,CAAC,OAAA,EAAQ,OAAA,EAAQ,OAAA,EAAQ,cAAa,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,mBAAA,EAAoB,aAAA,EAAc,MAAA,EAAO,cAAA,EAAe,aAAY,2BAA2B,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,IAAW,mBAAA,EAAoB,EAAC,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,mBAAkB,UAAA,EAAW,YAAA,EAAa,OAAA,EAAQ,iBAAA,EAAkB,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,SAAQ,SAAA,EAAU,QAAA,EAAS,oBAAA,EAAqB,aAAA,EAAc,qBAAoB,oBAAoB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,uCAAA,IAAyC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,UAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,sCAAA,EAAsC,EAAE,QAAA,EAAS,EAAC,eAAc,kEAAA,EAAmE,MAAA,EAAO,SAAA,EAAS,EAAE,uBAAsB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAoB,EAAC,aAAA,EAAc,wLAAA,EAAyL,YAAA,EAAa,EAAC,uBAAA,EAAwB,EAAC,MAAA,EAAO,SAAA,IAAW,aAAA,EAAc,EAAC,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAiB,EAAC,QAAA,EAAS,QAAA,EAAS,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAiB,oBAAA,EAAqB,oBAAA,EAAqB,aAAA,EAAc,wBAAA,EAAyB,0BAAyB,uBAAuB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,aAAA,EAAc,+BAAA,EAAgC,cAAa,EAAC,OAAA,EAAQ,EAAC,SAAA,EAAU,qBAAoB,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,SAAA,EAAU,gBAAe,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,6CAAA,EAA6C,EAAE,MAAA,EAAO,SAAO,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,QAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,WAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,SAAA,IAAU,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,2BAA0B,EAAC,aAAA,EAAc,mEAAA,EAAoE,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,aAAA,EAAc,aAAa,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,wTAAA,EAAyT,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,QAAA,EAAS,QAAA,EAAS,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,QAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,0BAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,0BAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAoB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,0CAAA,EAA2C,QAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,eAAc,oDAAA,EAAqD,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,CAAC,YAAA,EAAa,aAAA,EAAc,aAAa,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAc,OAAA,EAAQ,YAAA,EAAa,gBAAA,EAAiB,sBAAA,EAAuB,0BAAyB,eAAA,EAAgB,WAAA,EAAY,wBAAA,EAAyB,SAAA,EAAU,mBAAA,EAAoB,aAAA,EAAc,oBAAA,EAAqB,cAAc,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,+NAAA,EAAgO,YAAA,EAAa,EAAC,WAAU,EAAC,MAAA,EAAO,CAAC,gBAAA,EAAiB,cAAA,EAAe,qBAAqB,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,gBAAA,EAAiB,cAAA,EAAe,qBAAqB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,0DAAA,EAA2D,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,SAAA,EAAU,YAAW,SAAA,EAAU,WAAW,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,0BAAA,EAA2B,EAAC,aAAA,EAAc,8HAA6H,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,eAAc,iEAAA,EAAkE,MAAA,EAAO,CAAC,gBAAA,EAAiB,gBAAe,qBAAqB,CAAA,EAAE,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,cAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,UAAQ,EAAE,kBAAA,EAAmB,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,IAAG,UAAA,EAAW,CAAC,UAAA,EAAW,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,uBAAsB,EAAC,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAM,EAAC,aAAA,EAAc,mBAAA,EAAoB,aAAA,EAAc,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,MAAA,EAAO,CAAC,KAAA,EAAM,WAAU,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,SAAO,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,6BAAA,EAA8B,EAAC,YAAA,EAAa,EAAC,mBAAkB,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,oBAAmB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,oBAAmB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,MAAA,EAAO,SAAA,IAAW,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,SAAO,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,4BAAA,EAA6B,EAAC,YAAA,EAAa,EAAC,oBAAmB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,SAAO,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,wBAAuB,aAAA,EAAc,IAAA,EAAK,MAAA,EAAO,QAAA,IAAS,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,aAAA,EAAc,2OAAA,EAA4O,cAAa,EAAC,kBAAA,EAAmB,EAAC,aAAA,EAAc,0CAAoC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,eAAc,6EAAA,EAA8E,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,+BAAA,EAA+B,EAAE,2BAAA,EAA4B,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,yBAAA,EAA0B,EAAC,MAAA,EAAO,SAAA,EAAS,IAAG,UAAA,EAAW,CAAC,UAAA,EAAW,2BAAA,EAA4B,yBAAyB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAU,EAAC,aAAA,EAAc,iDAAA,EAAkD,YAAA,EAAa,EAAC,IAAA,EAAK,EAAC,OAAA,EAAQ,EAAC,QAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,OAAA,IAAS,MAAA,EAAO,EAAC,aAAA,EAAc,6BAAA,EAA8B,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,uCAAA,EAAwC,MAAA,EAAO,CAAC,WAAU,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,aAAA,EAAc,wJAAA,EAAyJ,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,qJAAA,EAAsJ,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iGAAA,EAAkG,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,aAAA,EAAc,QAAA,EAAS,SAAA,EAAU,WAAU,sBAAA,EAAuB,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,+BAA8B,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAA,EAAU,0BAAA,EAA2B,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,aAAA,EAAc,qBAAA,EAAsB,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,kCAAA,EAAmC,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,QAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,yCAAwC,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,qCAAA,EAAqC,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,2DAAA,EAA4D,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,aAAA,EAAc,yDAAA,EAA0D,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,aAAA,EAAc,mHAAA,EAAoH,YAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,SAAA,EAAU,SAAA,EAAU,MAAA,EAAO,UAAQ,EAAE,IAAA,EAAK,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,mCAAA,EAAmC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,WAAA,EAAY,EAAC,QAAO,sCAAA,EAAsC,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,sBAAA,EAAuB,EAAC,aAAA,EAAc,yEAAwE,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,aAAA,EAAc,gFAAA,EAAiF,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,QAAQ,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAA,EAAuB,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,cAAA,EAAe,WAAW,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAO,uCAAA,EAAuC,EAAE,eAAA,EAAgB,EAAC,SAAQ,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,cAAA,EAAe,QAAA,EAAS,WAAW,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,UAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,SAAA,EAAU,EAAC,SAAQ,EAAC,MAAA,EAAO,wCAAA,EAAwC,EAAE,QAAO,OAAA,EAAO,EAAE,qBAAA,EAAsB,EAAC,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,KAAA,EAAM,EAAC,aAAA,EAAc,yMAAwM,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,IAAU,kBAAA,EAAmB,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,UAAA,EAAW,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,QAAO,SAAA,EAAS,EAAE,cAAA,EAAe,EAAC,QAAO,SAAA,EAAS,EAAE,eAAA,EAAgB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,yBAAA,EAA0B,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,aAAA,EAAc,aAAA,EAAc,cAAA,EAAe,MAAA,EAAO,oBAAmB,WAAA,EAAY,gBAAA,EAAiB,cAAA,EAAe,SAAA,EAAU,cAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,aAAA,EAAc,6JAAA,EAA8J,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,CAAC,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAS,UAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,WAAU,UAAA,EAAW,SAAA,EAAU,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,uDAAA,EAAwD,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,UAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAS,cAAA,EAAe,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,SAAA,EAAU,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,OAAA,EAAQ,EAAC,QAAO,0BAAA,EAA0B,EAAE,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,aAAA,EAAc,yBAAA,EAA0B,cAAa,EAAC,eAAA,EAAgB,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,SAAQ,QAAA,EAAS,QAAA,EAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,eAAA,EAAgB,SAAQ,MAAA,EAAO,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,SAAQ,EAAC,MAAA,EAAO,gCAAA,EAAgC,EAAE,QAAO,OAAA,EAAO,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,cAAa,EAAC,gBAAA,EAAiB,EAAC,MAAA,EAAO,UAAQ,EAAE,qBAAA,EAAsB,EAAC,MAAA,EAAO,WAAS,EAAE,yBAAA,EAA0B,EAAC,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,WAAS,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,UAAQ,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,qKAAiK,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,kSAAA,EAAmS,MAAA,EAAO,CAAC,iBAAgB,iBAAA,EAAkB,sBAAA,EAAuB,OAAO,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,WAAA,EAAY,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,eAAc,oFAAA,EAAqF,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,aAAA,EAAc,kDAAA,EAAmD,MAAA,EAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,yBAAA,EAA0B,EAAC,aAAA,EAAc,+DAAA,EAAgE,cAAa,EAAC,gBAAA,EAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,QAAO,SAAA,EAAS,EAAE,yBAAA,EAA0B,EAAC,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,wBAAA,EAAyB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,oCAAA,EAAqC,YAAA,EAAa,EAAC,eAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,kDAAA,EAAmD,MAAA,EAAO,WAAS,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,oBAAA,EAAqB,EAAC,YAAA,EAAa,EAAC,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,IAAG,UAAA,EAAW,CAAC,IAAA,EAAK,QAAA,EAAS,QAAO,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,cAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,WAAS,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,mBAAA,EAAoB,oBAAA,EAAqB,oBAAmB,iBAAA,EAAkB,eAAA,EAAgB,cAAA,EAAe,gBAAA,EAAiB,iBAAiB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,SAAQ,aAAA,EAAc,MAAA,EAAO,OAAO,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAO,SAAA,EAAS,EAAE,MAAA,EAAO,EAAC,eAAc,cAAA,EAAe,0BAAA,EAA2B,IAAA,EAAK,YAAA,EAAa,IAAA,EAAK,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,UAAS,wBAAA,EAAyB,IAAA,EAAI,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,cAAA,EAAe,EAAC,MAAA,EAAO,CAAC,OAAM,SAAA,EAAU,MAAA,EAAO,QAAA,EAAS,YAAY,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,OAAM,SAAA,EAAU,MAAA,EAAO,QAAA,EAAS,YAAY,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,WAAS,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAK,WAAA,EAAY,MAAA,EAAO,WAAA,EAAY,gBAAA,EAAiB,QAAA,EAAS,YAAA,EAAa,UAAA,EAAW,OAAA,EAAQ,QAAO,aAAA,EAAc,YAAA,EAAa,YAAA,EAAa,aAAA,EAAc,cAAc,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,6BAA4B,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,WAAU,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,QAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,SAAQ,EAAC,MAAA,EAAO,qCAAA,EAAqC,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,IAAA,EAAK,SAAA,EAAU,QAAA,EAAS,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,+BAA8B,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,qCAAA,IAAuC,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,OAAO,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,8BAAA,EAA+B,EAAC,cAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,CAAC,UAAA,EAAW,aAAa,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,0CAAA,EAA0C,EAAE,gBAAA,EAAiB,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,gBAAgB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,2BAA0B,EAAC,sBAAA,EAAuB,KAAA,EAAM,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,WAAS,EAAE,kBAAA,EAAmB,EAAC,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,CAAC,CAAA,EAAE,CAAA,EAAE,EAAE,CAAA,EAAE,MAAA,EAAO,SAAA,IAAW,MAAA,EAAO,EAAC,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,kBAAkB,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,uCAAA,IAAyC,MAAA,EAAO,OAAA,EAAO,EAAE,kBAAA,EAAmB,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,CAAC,CAAA,EAAE,CAAA,EAAE,EAAE,CAAA,EAAE,QAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,WAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,IAAG,UAAA,EAAW,CAAC,kBAAA,EAAmB,SAAA,EAAU,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,sBAAqB,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,uGAAsG,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,WAAA,EAAY,EAAA,EAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,aAAA,EAAc,iEAAgE,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,UAAS,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,YAAW,CAAC,IAAA,EAAK,UAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAS,SAAA,EAAU,YAAA,EAAa,cAAa,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,yBAAA,EAA0B,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,SAAA,EAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,WAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,SAAQ,EAAC,WAAA,EAAY,EAAA,EAAG,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,wBAAA,EAAyB,EAAC,sBAAA,EAAuB,KAAA,EAAM,cAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,oDAAmD,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,qDAAA,EAAsD,WAAA,EAAY,MAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,WAAA,EAAY,EAAA,EAAG,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,aAAA,EAAc,kDAAA,EAAmD,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAA,EAAW,QAAA,EAAS,MAAA,EAAO,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,oIAAA,EAAqI,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,UAAA,EAAW,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,yBAAA,EAA0B,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,UAAS,aAAA,EAAc,MAAA,EAAO,MAAA,EAAO,aAAA,EAAc,YAAA,EAAa,kBAAA,EAAmB,SAAA,EAAU,YAAA,EAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,8BAAA,EAA8B,EAAE,MAAA,EAAO,OAAA,EAAO,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,aAAA,EAAc,uFAAA,EAAwF,YAAA,EAAa,EAAC,YAAW,EAAC,MAAA,EAAO,CAAC,SAAA,EAAU,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,UAAU,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,sXAAA,EAAuX,YAAA,EAAa,EAAC,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,aAAA,EAAc,4CAAsC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,yBAAA,EAA0B,EAAC,aAAA,EAAc,mPAAA,EAAoP,YAAA,EAAa,EAAC,mCAAkC,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,gCAA+B,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,gCAAA,EAAiC,EAAC,MAAA,EAAO,SAAA,IAAW,6BAAA,EAA8B,EAAC,MAAA,EAAO,SAAA,IAAW,cAAA,EAAe,EAAC,aAAA,EAAc,8FAAA,EAAyG,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,6DAAA,EAA8D,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,aAAA,EAAc,gGAAA,EAAiG,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,QAAO,SAAA,EAAS,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,CAAC,gBAAA,EAAiB,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,WAAA,EAAY,SAAA,EAAU,UAAA,EAAW,iCAAA,EAAkC,8BAAA,EAA+B,gCAAA,EAAiC,6BAAA,EAA8B,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,aAAA,EAAc,mOAAA,EAAiO,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gCAAA,EAAiC,EAAC,MAAA,EAAO,WAAS,EAAE,6BAAA,EAA8B,EAAC,MAAA,EAAO,WAAS,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,6EAA4E,MAAA,EAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,gDAA8C,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,YAAW,EAAC,aAAA,EAAc,iEAAA,EAAkE,MAAA,EAAO,WAAS,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,WAAS,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,8EAA6E,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,4BAAA,EAA6B,MAAA,EAAO,CAAC,UAAA,EAAW,aAAA,EAAc,cAAc,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,aAAA,EAAc,SAAA,EAAU,SAAA,EAAU,UAAA,EAAW,SAAQ,cAAA,EAAe,gCAAA,EAAiC,6BAAA,EAA8B,qBAAA,EAAsB,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,mBAAA,EAAoB,EAAC,aAAA,EAAc,2DAAA,EAA4D,cAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,SAAA,EAAS,EAAE,OAAM,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,QAAO,EAAC,SAAA,EAAU,KAAA,EAAM,MAAA,EAAO,UAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,wBAAA,EAAyB,EAAC,YAAA,EAAa,EAAC,SAAA,EAAU,EAAC,aAAA,EAAc,2BAAA,EAA4B,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,2IAAA,EAA4I,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,aAAA,EAAc,0CAAA,EAA2C,SAAQ,EAAC,MAAA,EAAO,CAAC,kBAAkB,GAAE,SAAA,EAAU,kBAAA,EAAmB,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,kBAAkB,CAAA,EAAE,SAAA,EAAU,kBAAA,EAAmB,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,OAAA,EAAQ,EAAC,aAAA,EAAc,uCAAsC,MAAA,EAAO,QAAA,EAAQ,EAAE,KAAA,EAAM,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,KAAK,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,aAAA,EAAc,yJAAA,EAA0J,OAAA,EAAQ,CAAC,EAAC,UAAA,EAAW,CAAC,WAAW,CAAA,IAAG,EAAC,UAAA,EAAW,CAAC,YAAY,CAAA,EAAE,CAAA,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,OAAA,EAAQ,EAAC,QAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,OAAA,IAAS,KAAA,EAAM,EAAC,OAAA,EAAQ,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,OAAA,EAAO,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,wKAAA,EAAyK,QAAA,EAAS,OAAA,EAAQ,WAAU,CAAA,EAAE,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,eAAc,4DAAA,EAAwD,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,OAAA,EAAQ,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,mBAAA,EAAoB,EAAC,eAAc,4FAAA,EAA6F,MAAA,EAAO,QAAA,EAAQ,EAAE,4BAA2B,EAAC,aAAA,EAAc,sGAAA,EAAuG,MAAA,EAAO,UAAQ,EAAE,SAAA,EAAU,EAAC,sBAAA,EAAuB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,QAAA,EAAQ,EAAE,iBAAA,EAAkB,EAAC,cAAa,IAAA,EAAK,aAAA,EAAc,4HAAA,EAA6H,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,mCAAA,EAAmC,EAAE,YAAA,EAAa,EAAC,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,eAAc,wDAAA,EAAyD,MAAA,EAAO,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,aAAA,EAAc,wDAAA,EAAyD,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,oDAAmD,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,CAAC,KAAA,EAAM,MAAA,EAAO,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,CAAC,MAAA,EAAO,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,iGAAA,EAAkG,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,MAAA,EAAO,UAAA,EAAW,QAAA,EAAS,OAAA,EAAQ,UAAS,eAAA,EAAgB,cAAc,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,wBAAA,EAAyB,EAAC,aAAA,EAAc,uEAAsE,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,wCAAA,IAA0C,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,2DAAA,EAA4D,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,SAAQ,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,mBAAA,EAAoB,EAAC,aAAA,EAAc,kEAAA,EAAmE,cAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,UAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,WAAS,EAAE,gBAAA,EAAiB,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,WAAS,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,SAAA,EAAU,YAAA,EAAa,aAAA,EAAc,gBAAgB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,gIAAA,EAAiI,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,aAAA,EAAc,gCAAA,EAAiC,MAAA,EAAO,SAAA,EAAS,EAAE,iBAAA,EAAkB,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,SAAA,EAAU,EAAC,MAAA,EAAO,wCAAA,IAA0C,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,aAAA,EAAc,qCAAA,EAAsC,QAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,QAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,qCAAA,EAAsC,MAAA,EAAO,QAAA,IAAU,QAAA,EAAS,EAAC,aAAA,EAAc,oDAAA,EAAqD,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAA,EAAS,QAAA,EAAS,QAAA,EAAS,gBAAA,EAAiB,YAAA,EAAa,SAAA,EAAU,eAAe,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,eAAc,wNAAA,EAAoN,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,aAAA,EAAc,0XAAA,EAA6X,MAAA,EAAO,WAAS,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,aAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,mBAAA,EAAoB,EAAC,MAAA,EAAO,QAAA,IAAU,cAAA,EAAe,EAAC,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,MAAA,EAAO,UAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,wBAAuB,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,EAAC,MAAA,EAAO,CAAC,MAAA,EAAO,OAAA,EAAQ,SAAS,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,cAAA,EAAe,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAO,OAAA,EAAO,EAAE,oBAAA,EAAqB,EAAC,QAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,IAAU,MAAA,EAAO,OAAA,EAAO,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,YAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,cAAa,EAAC,aAAA,EAAc,+DAAA,EAAgE,MAAA,EAAO,UAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,0CAAA,EAA2C,MAAA,EAAO,CAAC,gBAAA,EAAiB,sBAAqB,mBAAA,EAAoB,gBAAA,EAAiB,cAAc,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAe,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,gBAAe,WAAA,EAAY,UAAA,EAAW,OAAA,EAAQ,UAAA,EAAW,QAAO,WAAA,EAAY,UAAA,EAAW,SAAA,EAAU,WAAA,EAAY,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,OAAA,EAAQ,MAAA,EAAO,gBAAA,EAAiB,MAAA,EAAO,UAAA,EAAW,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,eAAc,mIAAA,EAAqI,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,aAAA,EAAc,4BAAA,EAA6B,YAAA,EAAa,EAAC,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,IAAU,eAAA,EAAgB,EAAC,MAAA,EAAO,SAAA,IAAW,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,IAAU,SAAA,EAAU,EAAC,aAAA,EAAc,0CAAA,EAA2C,QAAO,QAAA,EAAQ,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,icAAA,EAA0b,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,wFAAA,EAAyF,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAA,EAAmB,EAAC,aAAA,EAAc,yFAAA,EAA0F,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,aAAA,EAAc,mFAAA,EAAoF,QAAO,SAAA,EAAS,EAAE,IAAA,EAAK,EAAC,eAAc,qCAAA,EAAiC,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,aAAA,EAAc,gDAAA,EAAiD,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,uGAAsG,MAAA,EAAO,SAAA,EAAS,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,uEAAA,EAAwE,MAAA,EAAO,WAAS,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,2CAAqC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,SAAA,EAAU,KAAA,EAAM,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,eAAc,wCAAA,EAAyC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,qBAAoB,WAAA,EAAY,kBAAA,EAAmB,UAAA,EAAW,mBAAA,EAAoB,UAAS,iBAAA,EAAkB,YAAA,EAAa,YAAA,EAAa,YAAY,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,YAAA,EAAa,EAAC,cAAA,EAAe,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,iCAAA,IAAmC,MAAA,EAAO,OAAA,EAAO,EAAC,EAAE,YAAW,CAAC,cAAc,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,eAAc,6IAAA,EAA8I,YAAA,EAAa,EAAC,WAAA,EAAY,EAAC,MAAA,EAAO,CAAC,gBAAA,EAAiB,cAAA,EAAe,qBAAqB,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,kBAAiB,cAAA,EAAe,qBAAqB,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,UAAS,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,wEAAuE,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,CAAC,gBAAA,EAAiB,cAAA,EAAe,qBAAqB,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,YAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,sEAAgE,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,OAAA,EAAQ,gBAAe,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,UAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,sBAAA,EAAuB,IAAA,EAAK,MAAA,EAAO,UAAQ,EAAE,IAAA,EAAK,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,sBAAA,EAAuB,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAM,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,aAAY,EAAC,MAAA,EAAO,CAAC,aAAA,EAAc,gBAAA,EAAiB,YAAA,EAAa,eAAA,EAAgB,gBAAA,EAAiB,cAAa,eAAA,EAAgB,cAAA,EAAe,iBAAA,EAAkB,aAAA,EAAc,gBAAe,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,IAAS,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,KAAA,EAAM,WAAA,EAAY,YAAA,EAAa,YAAY,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,0BAAA,EAA2B,EAAC,aAAA,EAAc,oFAAA,EAAqF,YAAA,EAAa,EAAC,UAAS,EAAC,aAAA,EAAc,gEAAA,EAAiE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,UAAA,EAAW,EAAC,aAAA,EAAc,wOAAA,EAAyO,cAAa,EAAC,SAAA,EAAU,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,YAAA,EAAa,EAAC,SAAQ,EAAC,MAAA,EAAO,uCAAA,EAAuC,EAAE,QAAO,OAAA,EAAO,EAAC,EAAE,UAAA,EAAW,CAAC,SAAA,EAAU,YAAY,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,sGAAqG,YAAA,EAAa,EAAC,uBAAA,EAAwB,EAAC,QAAO,SAAA,EAAS,EAAE,aAAA,EAAc,EAAC,UAAS,QAAA,EAAS,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,IAAW,oBAAA,EAAqB,EAAC,MAAA,EAAO,SAAA,IAAW,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,IAAW,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,QAAA,EAAS,UAAS,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,eAAc,+XAAA,EAA2X,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,SAAQ,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,aAAA,EAAc,sCAAA,EAAkC,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,aAAA,EAAc,+BAAA,EAA2B,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,eAAc,yBAAA,EAA0B,MAAA,EAAO,CAAC,MAAA,EAAO,MAAM,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,aAAA,EAAc,qDAAA,EAAiD,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,eAAc,+BAAA,EAAgC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,SAAA,IAAW,YAAA,EAAa,EAAC,aAAA,EAAc,gEAAA,EAAiE,QAAO,QAAA,EAAQ,EAAE,KAAA,EAAM,EAAC,QAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,0RAAA,EAA2R,MAAA,EAAO,CAAC,OAAM,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,WAAA,EAAY,EAAC,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,aAAA,EAAc,6BAAA,EAA8B,QAAO,CAAC,SAAA,EAAU,UAAU,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,eAAc,uDAAA,EAAwD,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAmB,EAAC,aAAA,EAAc,wCAAA,EAAyC,MAAA,EAAO,QAAA,EAAQ,EAAE,gBAAA,EAAiB,EAAC,eAAc,iCAAA,EAAkC,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,MAAA,EAAO,CAAC,UAAA,EAAW,UAAS,YAAA,EAAa,SAAS,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,eAAc,kDAAA,EAA8C,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,YAAA,EAAa,KAAA,EAAM,OAAA,EAAQ,aAAY,MAAA,EAAO,UAAA,EAAW,QAAA,EAAS,aAAA,EAAc,cAAa,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,gBAAA,EAAiB,EAAC,aAAA,EAAc,2NAAA,EAA4N,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,CAAC,QAAA,EAAS,WAAA,EAAY,QAAA,EAAS,UAAS,YAAA,EAAa,OAAA,EAAQ,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,OAAA,EAAQ,UAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,aAAA,EAAc,mCAAA,EAAoC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,qCAAA,EAAsC,MAAA,EAAO,QAAA,IAAU,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,aAAA,EAAc,2CAAA,EAAkC,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,MAAA,EAAO,CAAC,QAAO,UAAU,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,IAAA,EAAK,EAAC,aAAA,EAAc,+BAAA,EAA2B,QAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,aAAA,EAAc,WAAA,EAAY,QAAA,EAAS,cAAa,QAAA,EAAS,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,cAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,qCAAA,EAAqC,EAAE,MAAA,EAAO,SAAO,EAAE,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,EAAC,aAAA,EAAc,oPAAA,EAAkP,YAAA,EAAa,EAAC,wBAAA,EAAyB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,qGAAA,EAAsG,MAAA,EAAO,QAAA,IAAU,8BAAA,EAA+B,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,2BAAA,IAA6B,MAAA,EAAO,OAAA,EAAO,EAAE,iBAAA,EAAkB,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,SAAQ,EAAC,MAAA,EAAO,SAAA,EAAS,IAAG,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,aAAA,EAAc,wKAAA,EAAsK,YAAA,EAAa,EAAC,qBAAA,EAAsB,EAAC,aAAA,EAAc,iFAAA,EAAkF,QAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,4TAAA,EAA0T,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,gCAAA,EAAiC,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,0FAAA,EAA2F,MAAA,EAAO,SAAA,IAAW,6BAAA,EAA8B,EAAC,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,aAAA,EAAc,2EAAA,EAA4E,QAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,eAAc,6EAAA,EAA8E,MAAA,EAAO,SAAA,EAAS,EAAE,qBAAA,EAAsB,EAAC,aAAA,EAAc,iFAAA,EAAkF,QAAO,SAAA,EAAS,EAAE,OAAA,EAAQ,EAAC,QAAO,CAAC,YAAA,EAAa,aAAA,EAAc,aAAA,EAAc,WAAW,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,aAAA,EAAc,SAAQ,QAAA,EAAS,gBAAA,EAAiB,OAAA,EAAQ,gCAAA,EAAiC,+BAA8B,qBAAqB,CAAA,EAAE,MAAA,EAAO,QAAA,IAAU,aAAA,EAAc,EAAC,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,OAAA,EAAQ,EAAC,QAAO,sCAAA,EAAsC,EAAE,MAAA,EAAO,OAAA,IAAS,KAAA,EAAM,EAAC,OAAA,EAAQ,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,MAAA,EAAO,EAAC,YAAA,EAAa,IAAA,EAAK,aAAA,EAAc,8VAAA,EAA+V,QAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,eAAc,4SAAA,EAA6S,QAAA,EAAS,OAAA,EAAQ,SAAA,EAAU,CAAA,EAAE,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,4EAAsE,MAAA,EAAO,QAAA,EAAQ,EAAE,IAAA,EAAK,EAAC,OAAA,EAAQ,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,SAAO,EAAE,mBAAA,EAAoB,EAAC,aAAA,EAAc,8FAA6F,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,sBAAA,EAAuB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,sEAAA,EAAuE,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,sBAAqB,uDAAA,EAAwD,IAAA,EAAK,MAAA,EAAO,QAAA,IAAU,iBAAA,EAAkB,EAAC,YAAA,EAAa,IAAA,EAAK,eAAc,udAAA,EAA6d,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAc,EAAC,aAAA,EAAc,wCAAA,EAAyC,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,qCAAmC,EAAE,MAAA,EAAO,EAAC,aAAA,EAAc,+SAAA,EAAgT,MAAA,EAAO,CAAC,QAAA,EAAS,QAAQ,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAW,EAAC,aAAA,EAAc,+BAAA,EAAgC,MAAA,EAAO,UAAQ,EAAE,SAAA,EAAU,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,eAAc,oHAAA,EAAqH,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,OAAA,EAAQ,EAAC,QAAA,EAAS,SAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAA,EAAW,CAAA,EAAE,MAAA,EAAO,OAAA,EAAO,IAAG,UAAA,EAAW,CAAC,IAAI,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,eAAc,oCAAA,EAAqC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,aAAA,EAAc,+SAAA,EAA2S,MAAA,EAAO,UAAQ,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,uCAAqC,EAAE,iBAAA,EAAkB,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,aAAA,EAAc,oGAAA,EAAqG,MAAA,EAAO,CAAC,SAAA,EAAU,QAAA,EAAS,aAAa,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,cAAA,EAAe,EAAC,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,eAAc,sQAAA,EAAyQ,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,aAAA,EAAc,gHAAA,EAA4G,MAAA,EAAO,UAAQ,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,uCAAqC,EAAE,iBAAA,EAAkB,EAAC,UAAA,EAAW,MAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,MAAA,EAAO,sCAAA,EAAsC,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,4FAAA,EAA6F,YAAA,EAAa,EAAC,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAA,EAAQ,EAAC,UAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,4CAA0C,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,kBAAA,EAAmB,EAAC,MAAA,EAAO,qCAAA,IAAuC,iBAAA,EAAkB,EAAC,aAAA,EAAc,0BAAA,EAA2B,YAAW,IAAA,EAAK,2CAAA,EAA4C,IAAA,EAAK,MAAA,EAAO,UAAQ,EAAE,eAAA,EAAgB,EAAC,aAAA,EAAc,qDAAA,EAAsD,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAY,EAAC,MAAA,EAAO,sCAAA,EAAsC,EAAE,cAAa,EAAC,QAAA,EAAS,WAAA,EAAY,MAAA,EAAO,UAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,eAAA,EAAgB,OAAA,EAAQ,iBAAA,EAAkB,kBAAA,EAAmB,aAAY,YAAA,EAAa,YAAA,EAAa,YAAY,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAE,qBAAA,EAAsB,EAAC,cAAa,EAAC,WAAA,EAAY,EAAC,QAAA,EAAS,OAAA,EAAQ,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,MAAA,EAAO,+CAAA,EAA+C,IAAG,UAAA,EAAW,CAAC,WAAA,EAAY,OAAO,GAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,0BAAA,EAA2B,EAAC,aAAA,EAAc,wPAAA,EAAyP,MAAA,EAAO,CAAC,QAAA,EAAS,oBAAA,EAAqB,cAAA,EAAe,UAAA,EAAW,UAAS,mBAAA,EAAoB,SAAS,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,4SAA2S,YAAA,EAAa,EAAC,YAAA,EAAa,EAAC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAK,EAAC,aAAA,EAAc,qCAAA,EAAiC,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,0DAAA,EAA2D,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,kBAAiB,EAAC,aAAA,EAAc,wDAAA,EAAyD,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAA,EAAoB,EAAC,QAAO,QAAA,EAAQ,EAAE,oBAAA,EAAqB,EAAC,eAAc,sFAAA,EAA0E,MAAA,EAAO,SAAA,EAAS,EAAE,aAAY,EAAC,aAAA,EAAc,sEAAA,EAAuE,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,eAAc,qCAAA,EAAsC,MAAA,EAAO,QAAA,EAAQ,EAAE,iBAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAU,EAAC,MAAA,EAAO,SAAA,EAAS,EAAE,YAAA,EAAa,EAAC,aAAA,EAAc,oCAAA,EAAqC,UAAS,WAAA,EAAY,MAAA,EAAO,QAAA,EAAQ,EAAE,cAAa,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,aAAA,EAAc,wEAAA,EAAyE,MAAA,EAAO,CAAC,KAAK,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,MAAA,EAAO,CAAC,WAAA,EAAY,MAAA,EAAO,QAAA,EAAS,YAAA,EAAa,UAAS,WAAA,EAAY,YAAY,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,IAAA,EAAK,WAAA,EAAY,OAAA,EAAQ,QAAA,EAAS,sBAAqB,YAAA,EAAa,SAAS,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,iBAAA,EAAkB,EAAC,aAAA,EAAc,yEAAA,EAA0E,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,kCAAA,IAAoC,MAAA,EAAO,OAAA,EAAO,EAAE,aAAA,EAAc,EAAC,aAAA,EAAc,2DAAA,EAA4D,MAAA,EAAO,QAAA,IAAU,OAAA,EAAQ,EAAC,MAAA,EAAO,SAAA,IAAU,EAAE,UAAA,EAAW,CAAC,OAAA,EAAQ,OAAO,CAAA,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,mBAAkB,EAAC,aAAA,EAAc,yEAAA,EAA0E,YAAA,EAAa,EAAC,UAAA,EAAW,EAAC,SAAA,EAAU,GAAE,MAAA,EAAO,SAAA,EAAS,EAAE,mBAAA,EAAoB,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,IAAW,QAAA,EAAS,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,EAAS,EAAE,QAAA,EAAS,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,IAAW,cAAA,EAAe,EAAC,SAAA,EAAU,CAAA,EAAE,QAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,SAAA,EAAU,CAAA,EAAE,MAAA,EAAO,SAAA,IAAW,oBAAA,EAAqB,EAAC,SAAA,EAAU,CAAA,EAAE,QAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAE,uBAAA,EAAwB,EAAC,aAAA,EAAc,gGAAA,EAAiG,YAAA,EAAa,EAAC,aAAA,EAAc,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAC,EAAE,QAAO,QAAA,EAAQ,EAAE,yBAAA,EAA0B,EAAC,aAAA,EAAc,gKAAA,EAAiK,YAAA,EAAa,EAAC,QAAO,EAAC,MAAA,EAAO,CAAC,OAAA,EAAQ,SAAQ,QAAA,EAAS,QAAA,EAAS,SAAS,CAAA,EAAE,QAAO,QAAA,EAAQ,EAAC,EAAE,UAAA,EAAW,CAAC,MAAM,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,sBAAA,EAAuB,EAAC,aAAA,EAAc,6PAA4P,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,eAAc,8CAAA,EAA+C,MAAA,EAAO,SAAA,EAAS,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,2BAAA,EAA4B,QAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,eAAc,0CAAA,EAA2C,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,kBAAkB,CAAA,EAAE,SAAA,EAAU,kBAAA,EAAmB,QAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,IAAS,QAAA,EAAS,EAAC,OAAA,EAAQ,EAAC,QAAO,CAAC,kBAAkB,CAAA,EAAE,SAAA,EAAU,oBAAmB,MAAA,EAAO,QAAA,EAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,OAAA,EAAQ,EAAC,eAAc,uDAAA,EAAwD,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAM,EAAC,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,UAAQ,EAAC,EAAE,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAA,EAAU,EAAC,aAAA,EAAc,gXAA+W,YAAA,EAAa,EAAC,QAAA,EAAS,EAAC,QAAO,SAAA,EAAS,EAAE,UAAA,EAAW,EAAC,eAAc,sCAAA,EAAuC,MAAA,EAAO,QAAA,EAAQ,EAAE,YAAA,EAAa,EAAC,QAAA,EAAS,WAAA,EAAY,QAAO,QAAA,EAAQ,EAAE,0BAAA,EAA2B,EAAC,eAAc,yCAAA,EAA0C,MAAA,EAAO,QAAA,EAAQ,EAAE,UAAS,EAAC,OAAA,EAAQ,EAAC,MAAA,EAAO,CAAC,kBAAkB,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,MAAA,EAAO,OAAA,EAAO,EAAE,MAAK,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,SAAQ,EAAC,UAAA,EAAW,IAAA,EAAK,MAAA,EAAO,QAAA,EAAQ,EAAE,WAAA,EAAY,EAAC,eAAc,sDAAA,EAAuD,OAAA,EAAQ,EAAC,MAAA,EAAO,UAAQ,EAAE,UAAA,EAAW,GAAA,EAAI,MAAA,EAAO,SAAO,EAAE,gBAAA,EAAiB,EAAC,aAAA,EAAc,mKAAA,EAAoK,MAAA,EAAO,CAAC,OAAA,EAAQ,WAAU,SAAA,EAAU,cAAc,CAAA,EAAE,MAAA,EAAO,UAAQ,EAAE,QAAA,EAAS,EAAC,aAAA,EAAc,8CAA6C,MAAA,EAAO,QAAA,EAAQ,EAAE,eAAA,EAAgB,EAAC,MAAA,EAAO,QAAA,EAAQ,EAAE,OAAM,EAAC,MAAA,EAAO,QAAA,EAAQ,IAAG,MAAA,EAAO,QAAA,EAAQ,EAAE,aAAA,EAAc,EAAC,YAAA,EAAa,EAAC,OAAA,EAAQ,EAAC,SAAQ,EAAC,MAAA,EAAO,8BAAA,EAA8B,EAAE,QAAO,OAAA,EAAO,EAAE,OAAA,EAAQ,EAAC,QAAO,SAAA,EAAS,EAAC,EAAE,MAAA,EAAO,UAAQ,EAAC;;;ACkCj/hG,IAAM,OAAA,GAAU,qBAAA;AAChB,IAAM,OAAA,GAAU,qBAAA;AAChB,IAAM,IAAA,GAAO,CAAC,CAAA,EAAW,GAAA,KAAgB,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA;AACpF,IAAM,UAAU,CAAC,CAAA,MAA4C,EAAE,EAAA,EAAI,CAAA,CAAE,IAAI,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,IAAA,EAAM,EAAE,MAAA,KAAW,KAAA,GAAQ,SAAS,QAAA,EAAS,CAAA;AAIrJ,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,OAAA,EAA+D;AAA/D,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAgE;AAAA,EAE7F,IAAA,CAAK,OAAA,GAA2F,EAAC,EAAG;AAClG,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA;AAC3G,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,EAAQ,IAAA,EAAK,CAAE,aAAY,IAAK,EAAA;AACvD,IAAA,IAAI,OAAO,MAAA,GAAS,GAAA,EAAK,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAChF,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,CAAA,EAAG,MAAM;AAAA,EAAK,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA,CAAE,CAAA,GAAI,GAAA;AACxE,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,WAAW,MAAM,CAAA,IAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,uDAAuD,CAAA;AACrK,MAAA,MAAA,GAAS,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA;AACnD,MAAA,IAAI,CAAC,OAAO,aAAA,CAAc,MAAM,GAAG,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAA,CAAO,CAAC,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,KAAS,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAC5J,IAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA,CAAE,IAAI,OAAO,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA;AAC/C,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAiB,IAAA,EAAM,UAAU,OAAA,EAAS,WAAA,EAAa,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA,EAAG,MAAA,GAAS,IAAA,CAAK,MAAM,KAAK,IAAA,EAAK;AAAA,EAC9H;AAAA,EAEA,SAAS,EAAA,EAAY;AACnB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AACxB,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAA4B;AAC3C,MAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,OAAO,CAAA;AAClD,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAChD,MAAA,MAAM,MAAA,GAAS,KAAA;AACf,MAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,yBAAyB,EAAE,CAAA;AAC5D,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AACjF,QAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAa,IAAI,CAAA,EAAG;AAAE,UAAA,WAAA,CAAY,IAAI,IAAI,EAAC;AAAG,UAAA,WAAA,CAAY,IAAI,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,QAAa;AAC9G,QAAA,OAAO,EAAE,IAAA,EAAM,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAG;AAAA,MACnC;AACA,MAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAC,GAAA,EAAK,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAA;AAAA,IAC/F,CAAA;AACA,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,CAAA,CAAE,WAAW,CAAA;AACzC,IAAA,OAAO;AAAA,MAAE,GAAG,QAAQ,CAAC,CAAA;AAAA,MAAG,WAAA,EAAa,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,OAAA;AAAA,MAAS,YAAA,EAAc,EAAE,GAAG,WAAA,EAAa,OAAO,WAAA,EAAY;AAAA,MAClH,kBAAA,EAAoB,6HAAA;AAAA,MACpB,aAAA,EAAe,CAAA,CAAE,cAAA,KAAmB,QAAA,GAAW,wDAAA,GAA2D,4CAAA;AAAA,MAC1G,mBAAA,EAAqB;AAAA,KAA2G;AAAA,EACpI;AAAA;AAAA,EAGA,IAAA,CAAuC,EAAA,EAAO,KAAA,EAA6C,MAAA,EAAsE;AAC/J,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,KAAA,EAA8B,QAAW,MAAM,CAAA;AAAA,EACrE;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,QAA6B,EAAC,EAAG,MAA2B,MAAA,EAAwC;AACxH,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AACxB,IAAA,IAAI,IAAA,IAAQ,QAAQ,CAAC,CAAA,CAAE,SAAS,IAAA,EAAM,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,MAAA,EAAS,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAI,oBAAoB,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAI,CAAA,aAAA,CAAe,CAAA;AAErI,IAAA,IAAI,IAAA,CAAK,UAAU,KAAK,CAAA,CAAE,SAAS,GAAA,EAAW,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA;AACjG,IAAA,QAAA,CAAS,CAAA,CAAE,WAAA,EAAa,KAAA,EAAO,OAAO,CAAA;AACtC,IAAA,MAAM,OAAO,CAAA,CAAE,IAAA,CAAK,QAAQ,cAAA,EAAgB,CAAC,GAAG,IAAA,KAAiB;AAC/D,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,GAAO,IAAI,CAAA;AAC/B,MAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,IAAA,IAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,IAAK,KAAA,KAAU,OAAO,KAAA,KAAU,IAAA,QAAY,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAE,CAAA;AACzL,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,MAAM,KAAA,CAAM,IAAA,EAAM,gBAAgB,CAAA,CAAE,cAAA,EAAgB,QAAQ,CAAA;AAAA,EAChI;AAAA,EAEQ,OAAO,EAAA,EAAoB;AACjC,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC9C,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,EAAE,CAAA,iCAAA,CAAmC,CAAA;AACnG,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,QAAA,CAAS,CAAA,EAAW,KAAA,EAAgB,EAAA,EAAY,QAAQ,CAAA,EAAS;AACxE,EAAA,IAAI,QAAQ,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,2BAAA,CAA6B,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAA2B;AAAE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EAAG,CAAA;AACjF,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,CAAA,CAAE,QAAA,KAAa,IAAA,EAAM;AAC3C,EAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,EAAU;AAC9B,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,yBAAyB,EAAE,CAAA;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA,OAAQ,gBAAgB,CAAA;AAC/C,IAAA,OAAO,SAAS,OAAA,CAAQ,IAAI,GAAI,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,IAAK,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,OAAQ,CAAA,gBAAA,EAAmB,CAAA,CAAE,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACjG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,KAAK,GAAG,KAAA,MAAW,KAAA,IAAS,CAAA,CAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAiB,KAAA,EAAO,EAAA,EAAI,QAAQ,CAAC,CAAA;AACvG,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,OAAA,EAAS,OAAO,CAAA,EAAG;AACpC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC5B,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,KAAA,MAAW,KAAA,IAAS,CAAA,CAAE,GAAG,CAAA,EAAG;AAAE,MAAA,IAAI;AAAE,QAAA,QAAA,CAAS,KAAA,EAAiB,KAAA,EAAO,EAAA,EAAI,KAAA,GAAQ,CAAC,CAAA;AAAG,QAAA,OAAA,EAAA;AAAA,MAAW,CAAA,CAAA,MAAQ;AAAA,MAA6C;AAAA,IAAE;AACvJ,IAAA,IAAI,OAAA,KAAY,CAAA,IAAM,GAAA,KAAQ,OAAA,IAAW,OAAA,KAAY,CAAA,EAAI,IAAA,CAAK,CAAA,WAAA,EAAc,GAAA,KAAQ,OAAA,GAAU,aAAA,GAAgB,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,EACrI;AACA,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,CAAA,CAAE,UAAA,EAAY;AACvC,IAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,IAAA,CAAK,oBAAoB,CAAA;AAC1F,IAAA,MAAM,MAAA,GAAS,KAAA;AACf,IAAA,MAAM,UAAA,GAAc,CAAA,CAAE,UAAA,IAAc,EAAC;AACrC,IAAA,KAAA,MAAW,OAAQ,CAAA,CAAE,QAAA,IAAY,EAAC,EAAgB,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,IAAK,OAAO,GAAG,CAAA,KAAM,QAAW,IAAA,CAAK,CAAA,QAAA,EAAW,GAAG,CAAA,CAAE,CAAA;AAC5H,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,IAAI,IAAA,CAAK,UAAA,EAAY,GAAG,CAAA,WAAY,UAAA,CAAW,GAAG,CAAA,EAAI,KAAA,EAAO,GAAG,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,WAAA,IAC7E,EAAE,oBAAA,KAAyB,KAAA,EAAO,IAAA,CAAK,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AAAA,WAAA,IAC7D,EAAE,oBAAA,IAAwB,OAAO,CAAA,CAAE,oBAAA,KAAyB,UAAU,QAAA,CAAS,CAAA,CAAE,oBAAA,EAAgC,KAAA,EAAO,GAAG,EAAE,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,IAC5J;AAAA,EACF,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,OAAA,EAAS;AAC7B,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,OAAQ,mBAAmB,CAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,IAAI,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,CAAE,QAAA,EAAU,IAAA,CAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,QAAQ,CAAA,MAAA,CAAQ,CAAA;AAC7G,IAAA,IAAI,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA,CAAE,QAAA,EAAU,IAAA,CAAK,CAAA,eAAA,EAAkB,CAAA,CAAE,QAAQ,CAAA,MAAA,CAAQ,CAAA;AAC1G,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,EAAO,QAAA,CAAU,CAAA,CAAE,KAAA,IAAS,EAAC,EAAc,KAAA,EAAO,EAAA,GAAK,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,EAC5F,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,IAAA,CAAK,mBAAmB,CAAA;AACvD,IAAA,MAAM,IAAA,GAAO,KAAA;AACb,IAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,IAAY,IAAA,CAAK,MAAA,GAAS,CAAA,CAAE,SAAA,EAAW,IAAA,CAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,SAAS,CAAA,WAAA,CAAa,CAAA;AACpH,IAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,IAAY,IAAA,CAAK,MAAA,GAAS,CAAA,CAAE,SAAA,EAAW,IAAA,CAAK,CAAA,eAAA,EAAkB,CAAA,CAAE,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,EACnH,WAAW,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,CAAA,CAAE,SAAS,QAAA,EAAU;AACtD,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,KAAK,KAAM,CAAA,CAAE,IAAA,KAAS,aAAa,CAAC,MAAA,CAAO,UAAU,KAAK,CAAA,OAAS,CAAA,WAAA,EAAc,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAC3I,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,IAAa,KAAA,GAAmB,CAAA,CAAE,OAAA,EAAS,IAAA,CAAK,CAAA,WAAA,EAAc,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAClG,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,IAAa,KAAA,GAAmB,CAAA,CAAE,OAAA,EAAS,IAAA,CAAK,CAAA,WAAA,EAAc,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,EACpG,CAAA,MAAA,IAAW,EAAE,IAAA,KAAS,SAAA,IAAa,OAAO,KAAA,KAAU,SAAA,OAAgB,oBAAoB,CAAA;AAC1F;;;AC9HO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAqBlC,YAAY,IAAA,EAQT;AACD,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,KAAA,KAAU,MAAA,GAAY,SAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAChF,IAAA,IAAA,CAAK,OAAO,GAAA,CAAA,MAAA,CAAW,IAAA;AACvB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,KAAK,OAAA,EAAS,IAAA;AAEjC,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA,EAGA,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA,IAAU,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,GAAA;AAAA,EAC7C;AAAA;AAAA,EAGA,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,MAAA,IAAU,GAAA;AAAA,EACxB;AACF;AAGO,IAAM,mBAAA,GAAN,cAAkC,QAAA,CAAS;AAAC;AAG5C,IAAM,eAAA,GAAN,cAA8B,QAAA,CAAS;AAAC;AAQxC,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAC;AAOnD,IAAM,oBAAA,GAAN,cAAmC,QAAA,CAAS;AAAC;AAG7C,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAC;AAGtC,IAAM,aAAA,GAAN,cAA4B,QAAA,CAAS;AAAC;AAGtC,IAAM,eAAA,GAAN,cAA8B,QAAA,CAAS;AAAC;AAUxC,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAG5D,YAAY,IAAA,EAAiD;AAC3D,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,oBAAA,GAAuB,+BAAA,CAAgC,IAAA,CAAK,OAAO,CAAA;AAAA,EAC1E;AACF;AAOA,SAAS,gCAAgC,OAAA,EAAwC;AAC/E,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,EAAS,MAAA,IAAU,EAAC,EAAG;AACzC,IAAA,IAAI,KAAA,CAAM,UAAU,WAAA,IAAe,OAAO,MAAM,MAAA,KAAW,QAAA,IAAY,MAAM,MAAA,EAAQ;AACnF,MAAA,GAAA,CAAI,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAsBA,SAAS,UAAA,CAAW,SAA8B,KAAA,EAAmC;AACnF,EAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,MAAA,IAAU,EAAC,EAAG;AACrC,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,OAAO,CAAA,CAAE,WAAW,QAAA,IAAY,CAAA,CAAE,MAAA,EAAQ,OAAO,CAAA,CAAE,MAAA;AAAA,EAC9E;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,QAAA,CAAS,SAA8B,KAAA,EAAmC;AACjF,EAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,MAAA,IAAU,EAAC,EAAG;AACrC,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,OAAO,CAAA,CAAE,SAAS,QAAA,IAAY,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA;AAAA,EAC1E;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,SAAA,CAAU,SAA8B,KAAA,EAAyB;AACxE,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,MAAA,IAAU,EAAC,EAAG;AACrC,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,CAAA,CAAE,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,OAAA,CAAQ,SAA8B,KAAA,EAAmC;AAChF,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AACnC,EAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,MAAA;AAC9B,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,GAAI,CAAA,GAAI,MAAA;AACnC;AAkBO,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAA,EAOvD,YAAY,IAAA,EAAiD;AAC3D,IAAA,KAAA,CAAM,IAAI,CAAA;AAGV,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AACpD,IAAA,MAAM,KAAA,GAAQ,UAAA,EAAY,KAAA,CAAM,2CAA2C,CAAA;AAC3E,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,CAAC,CAAA;AACvB,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,CAAC,CAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,YAAY,CAAA;AAAA,EACxD;AACF;AAWO,IAAM,mBAAA,GAAN,cAAkC,aAAA,CAAc;AAAA,EASrD,YAAY,IAAA,EAAiD;AAC3D,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AAClD,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AACvD,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA;AACrD,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAA,CAAU,IAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAYO,IAAM,UAAA,GAAN,cAAyB,mBAAA,CAAoB;AAAA,EAClD,IAAa,WAAA,GAAuB;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AASO,IAAM,eAAA,GAAN,cAA8B,mBAAA,CAAoB;AAAC;AAWnD,IAAM,aAAA,GAAN,cAA4B,mBAAA,CAAoB;AAAA,EAGrD,YAAY,IAAA,EAAiD;AAC3D,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,aAAA,GAAgB,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,iBAAiB,CAAA;AAAA,EAC/D;AACF;AAYO,IAAM,cAAA,GAAN,cAA6B,mBAAA,CAAoB;AAAA,EACtD,IAAa,WAAA,GAAuB;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAWO,IAAM,4BAAA,GAAN,cAA2C,mBAAA,CAAoB;AAAC;AAUhE,IAAM,wBAAA,GAAN,cAAuC,aAAA,CAAc;AAAC;AAYtD,IAAM,gBAAA,GAAN,cAA+B,QAAA,CAAS;AAAA,EAG7C,YAAY,IAAA,EAA2E;AACrF,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AAAA,EACzB;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,QAAA,CAAS;AAAA,EAGjD,YAAY,IAAA,EAAgF;AAC1F,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,eAAA;AAAA,EAC9B;AACF;AAGO,IAAM,cAAA,GAAN,cAA6B,QAAA,CAAS;AAAA,EAG3C,YAAY,IAAA,EAA2E;AACrF,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AAAA,EACzB;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,QAAA,CAAS;AAAA,EAC5C,WAAA,CAAY,SAAiB,KAAA,EAAiB;AAC5C,IAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,kBAAA,EAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,EAC/D;AACF;AAGO,IAAM,YAAA,GAAN,cAA2B,QAAA,CAAS;AAAA,EACzC,WAAA,CAAY,OAAA,GAAU,mBAAA,EAAqB,KAAA,EAAiB;AAC1D,IAAA,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,SAAA,EAAW,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AACF;AAGO,SAAS,eAAe,IAAA,EASlB;AAGX,EAAA,QAAQ,IAAA,CAAK,SAAS,IAAA;AAAM,IAC1B,KAAK,iBAAA;AACH,MAAA,OAAO,IAAI,oBAAoB,IAAI,CAAA;AAAA,IACrC,KAAK,kBAAA;AACH,MAAA,OAAO,IAAI,qBAAqB,IAAI,CAAA;AAAA,IACtC,KAAK,sBAAA;AACH,MAAA,OAAO,IAAI,yBAAyB,IAAI,CAAA;AAAA,IAC1C,KAAK,sBAAA;AACH,MAAA,OAAO,IAAI,yBAAyB,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA,IAI1C,KAAK,iBAAA;AACH,MAAA,OAAO,IAAI,oBAAoB,IAAI,CAAA;AAAA,IACrC,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,WAAW,IAAI,CAAA;AAAA,IAC5B,KAAK,aAAA;AACH,MAAA,OAAO,IAAI,gBAAgB,IAAI,CAAA;AAAA,IACjC,KAAK,UAAA;AACH,MAAA,OAAO,IAAI,cAAc,IAAI,CAAA;AAAA,IAC/B,KAAK,YAAA;AACH,MAAA,OAAO,IAAI,eAAe,IAAI,CAAA;AAAA,IAChC,KAAK,2BAAA;AACH,MAAA,OAAO,IAAI,6BAA6B,IAAI,CAAA;AAAA,IAC9C,KAAK,mBAAA;AAAA,IACL,KAAK,qBAAA;AAAA,IACL,KAAK,aAAA;AAGH,MAAA,OAAO,IAAI,oBAAoB,IAAI,CAAA;AAAA,IACrC,KAAK,aAAA;AACH,MAAA,OAAO,IAAI,iBAAiB,IAAI,CAAA;AAEhC;AAEJ,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,oBAAoB,IAAI,CAAA;AAAA,IACrC,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,qBAAqB,IAAI,CAAA;AAAA,IACtC,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,gBAAgB,IAAI,CAAA;AAAA,IACjC,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,cAAc,IAAI,CAAA;AAAA,IAC/B,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,cAAc,IAAI,CAAA;AAAA,IAC/B,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,gBAAgB,IAAI,CAAA;AAAA,IACjC,KAAK,GAAA;AACH,MAAA,OAAO,IAAI,eAAe,IAAI,CAAA;AAAA,IAChC;AACE,MAAA,OAAO,IAAI,SAAS,IAAI,CAAA;AAAA;AAE9B;;;AC7ZO,IAAM,aAAA,GAAwC;AAAA,EACnD,aAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,2BAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAoBO,IAAM,wBAAA,GAA8D;AAAA,EACzE,KAAA,EAAO,IAAA;AAAA,EACP,UAAA,EAAY,IAAA;AAAA,EACZ,WAAA,EAAa,KAAA;AAAA,EACb,QAAA,EAAU,KAAA;AAAA,EACV,yBAAA,EAA2B,KAAA;AAAA,EAC3B,eAAA,EAAiB,KAAA;AAAA,EACjB,oBAAA,EAAsB;AACxB;AA4BO,SAAS,cAAc,KAAA,EAAsC;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAa,aAAA,CAAoC,SAAS,KAAK,CAAA;AACzF;AAQO,SAAS,aAAa,IAAA,EAAkE;AAC7F,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,MAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,IAAA;AAEV,EAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AACvC,EAAA,MAAM,UAAU,CAAA,CAAE,IAAA;AAClB,EAAA,MAAM,IAAA,GAAoB,aAAA,CAAc,OAAO,CAAA,GAAI,OAAA,GAAU,UAAA;AAC7D,EAAA,MAAM,OAAA,GAAmB;AAAA,IACvB,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA,KAAS,WAAW,CAAA,CAAE,IAAA,GAAO,kCAAkC,OAAO,CAAA,CAAA;AAAA,IACrF,OAAO,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,GAAQ,OAAA;AAAA,IAC/C,QAAQ,OAAO,CAAA,CAAE,MAAA,KAAW,QAAA,GAAW,EAAE,MAAA,GAAS,CAAA;AAAA,IAClD,IAAA;AAAA,IACA,QAAQ,OAAO,CAAA,CAAE,MAAA,KAAW,QAAA,GAAW,EAAE,MAAA,GAAS,MAAA;AAAA,IAClD,YAAY,OAAO,CAAA,CAAE,UAAA,KAAe,QAAA,GAAW,EAAE,UAAA,GAAa,MAAA;AAAA,IAC9D,QAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,MAAM,CAAA,GAAK,EAAE,MAAA,GAA4B;AAAA,GACnE;AACA,EAAA,OAAO,EAAE,SAAS,OAAA,EAAQ;AAC5B;;;ACtJO,IAAM,mBAAA,GAAsB;AAG5B,IAAM,kBAAA,GAAqB;;;ACI3B,IAAM,WAAA,GAAc;AA+D3B,SAAS,QAAA,CACP,OAAA,EACA,IAAA,EACA,KAAA,EACQ;AACR,EAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,CAAS,GAAG,IAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,OAAA;AAC5D,EAAA,MAAM,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AAClD,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,GAAO,GAAG,CAAA;AAC9B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACzC;AAAA,EACF;AACA,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAEA,SAAS,kBAAkB,MAAA,EAAyB;AAClD,EAAA,OAAO,MAAA,KAAW,GAAA,IAAQ,MAAA,IAAU,GAAA,IAAO,MAAA,IAAU,GAAA;AACvD;AAEA,SAAS,KAAA,CAAM,IAAY,MAAA,EAAqC;AAC9D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,QAAQ,OAAA,EAAS,OAAO,OAAO,IAAI,YAAA,CAAa,wBAAwB,CAAC,CAAA;AAC7E,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,OAAA,EAAS,EAAE,CAAA;AACjC,IAAA,MAAA,EAAQ,gBAAA;AAAA,MACN,OAAA;AAAA,MACA,MAAM;AACJ,QAAA,YAAA,CAAa,EAAE,CAAA;AACf,QAAA,MAAA,CAAO,IAAI,YAAA,CAAa,wBAAwB,CAAC,CAAA;AAAA,MACnD,CAAA;AAAA,MACA,EAAE,MAAM,IAAA;AAAK,KACf;AAAA,EACF,CAAC,CAAA;AACH;AAGA,SAAS,WAAA,CAAY,WAAmB,MAAA,EAAmE;AACzG,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,KAAA,CAAO,QAA+C,MAAM,CAAA;AAC7F,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,UAAA,CAAW,KAAA,EAAM;AAAA,gBACzB,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,KAAA,GAAQ,WAAW,MAAM,UAAA,CAAW,MAAM,IAAI,YAAA,EAAc,CAAA,EAAG,SAAS,CAAA;AAC9E,EAAA,OAAO;AAAA,IACL,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,QAAQ,MAAM;AACZ,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,IAC9C;AAAA,GACF;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,MAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA2B;AAAA,EAExD,MAAM,QAAW,OAAA,EAAqC;AACpD,IAAA,MAAM,GAAA,GAAM,SAAS,IAAA,CAAK,MAAA,CAAO,SAAS,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAK,CAAA;AACrE,IAAA,MAAM,YACJ,OAAA,CAAQ,SAAA,KAAc,QAAQ,MAAA,KAAW,KAAA,IAAS,QAAQ,MAAA,KAAW,QAAA,CAAA;AACvE,IAAA,MAAM,cAAc,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,GAAI,CAAA;AACnE,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,SAAA;AAEnD,IAAA,IAAI,SAAA;AACJ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,WAAA,EAAa,OAAA,EAAA,EAAW;AACtD,MAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,KAAW,WAAA,CAAY,SAAA,EAAW,QAAQ,MAAM,CAAA;AAChE,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAkC;AAAA,UACtC,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA;AAAA,UAE3C,MAAA,EAAQ,4CAAA;AAAA,UACR,YAAA,EAAc,oBAAoB,WAAW,CAAA,CAAA;AAAA;AAAA,UAE7C,CAAC,kBAAkB,GAAG,IAAA,CAAK,OAAO,UAAA,IAAc,mBAAA;AAAA,UAChD,GAAG,KAAK,MAAA,CAAO;AAAA,SACjB;AACA,QAAA,IAAI,OAAA,CAAQ,cAAA,EAAgB,OAAA,CAAQ,iBAAiB,IAAI,OAAA,CAAQ,cAAA;AACjE,QAAA,IAAI,QAAA;AACJ,QAAA,IAAI,OAAA,CAAQ,SAAS,KAAA,CAAA,EAAW;AAC9B,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAC1B,UAAA,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA;AAAA,QACxC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,GAAA,EAAK;AAAA,UAC5C,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,QAAA,EAAU,OAAA;AAAA,UACV,OAAA;AAAA,UACA,IAAA,EAAM,QAAA;AAAA,UACN;AAAA,SACD,CAAA;AAED,QAAA,IAAI,SAAS,EAAA,EAAI;AACf,UAAA,MAAA,EAAO;AACP,UAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK,OAAO,KAAA,CAAA;AAGpC,UAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,YAAA,MAAM,MAAM,IAAI,UAAA,CAAW,MAAM,QAAA,CAAS,aAAa,CAAA;AACvD,YAAA,MAAM,MAAA,GAAyB;AAAA,cAC7B,KAAA,EAAO,GAAA;AAAA,cACP,WAAA,EAAa,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,0BAAA;AAAA,cACrD,kBAAA,EAAoB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA,IAAK;AAAA,aACrE;AACA,YAAA,OAAO,MAAA;AAAA,UACT;AACA,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,UAAA,IAAI,OAAA,CAAQ,KAAK,OAAO,IAAA;AACxB,UAAA,OAAQ,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,QACpC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,QAAQ,CAAA;AAC1C,QAAA,MAAA,EAAO;AAEP,QAAA,IAAI,aAAa,OAAA,GAAU,WAAA,GAAc,KAAK,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAA,EAAG;AAChF,UAAA,SAAA,GAAY,QAAA;AACZ,UAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,QAAQ,CAAA,EAAG,QAAQ,MAAM,CAAA;AAC3D,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAA;AAAA,MACR,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,EAAO;AACP,QAAA,IAAI,eAAe,QAAA,EAAU;AAE3B,UAAA,IAAI,EAAE,GAAA,CAAI,aAAA,IAAiB,aAAa,OAAA,GAAU,WAAA,GAAc,IAAI,MAAM,GAAA;AAC1E,UAAA,SAAA,GAAY,GAAA;AACZ,UAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,GAAG,CAAA,EAAG,QAAQ,MAAM,CAAA;AACtD,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,sBAAA,CAAuB,GAAG,CAAA;AACtD,QAAA,IAAI,SAAA,IAAa,OAAA,GAAU,WAAA,GAAc,CAAA,IAAK,0BAA0B,eAAA,EAAiB;AACvF,UAAA,SAAA,GAAY,cAAA;AACZ,UAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,EAAG,QAAQ,MAAM,CAAA;AACjD,UAAA;AAAA,QACF;AACA,QAAA,MAAM,cAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,IAAa,IAAI,eAAA,CAAgB,8BAA8B,CAAA;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,OAAO,OAAA,EAK8B;AAC1C,IAAA,MAAM,GAAA,GAAM,SAAS,IAAA,CAAK,MAAA,CAAO,SAAS,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAK,CAAA;AACrE,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,MAC3C,MAAA,EAAQ,mBAAA;AAAA,MACR,YAAA,EAAc,oBAAoB,WAAW,CAAA,CAAA;AAAA,MAC7C,CAAC,kBAAkB,GAAG,IAAA,CAAK,OAAO,UAAA,IAAc,mBAAA;AAAA,MAChD,GAAG,KAAK,MAAA,CAAO;AAAA,KACjB;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,OAAA,CAAQ,eAAe,IAAI,OAAA,CAAQ,WAAA;AAE5D,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AAGF,MAAA,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,IAC5F,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAA,CAAK,uBAAuB,GAAG,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,MAAM,WAAW,QAAQ,CAAA;AAAA,IACjC;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,gBAAgB,mCAAmC,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI;AACF,MAAA,WAAS;AACP,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAEhD,QAAA,IAAI,GAAA;AACJ,QAAA,OAAA,CAAQ,GAAA,GAAM,qBAAA,CAAsB,MAAM,CAAA,MAAO,CAAA,CAAA,EAAI;AACnD,UAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACpC,UAAA,MAAA,GAAS,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,eAAe,EAAE,CAAA;AACpD,UAAA,MAAM,KAAA,GAAQ,cAAc,QAAQ,CAAA;AACpC,UAAA,IAAI,OAAO,MAAM,KAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,MAAA,EAAO;AAAA,MACtB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,OAAA,CAAQ,SAAiB,KAAA,EAA0B;AACzD,IAAA,IAAI,SAAS,YAAA,IAAgB,KAAA,IAAS,OAAO,KAAA,CAAM,eAAe,QAAA,EAAU;AAC1E,MAAA,OAAO,IAAA,CAAK,IAAI,KAAA,CAAM,UAAA,GAAa,KAAM,IAAA,CAAK,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,IACvE;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA,IAAK,OAAA;AACjD,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,EAAO,GAAI,IAAA,CAAK,OAAO,KAAA,CAAM,WAAA;AACjD,IAAA,OAAO,KAAK,GAAA,CAAI,GAAA,GAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,EAC5D;AAAA,EAEQ,uBAAuB,GAAA,EAAwB;AACrD,IAAA,IAAI,GAAA,YAAe,cAAc,OAAO,GAAA;AACxC,IAAA,MAAM,OAAQ,GAAA,EAA2B,IAAA;AACzC,IAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,cAAA,EAAgB;AACpD,MAAA,OAAO,IAAI,YAAA,CAAa,kCAAA,EAAoC,GAAG,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,IAAA,OAAO,IAAI,eAAA,CAAgB,CAAA,wBAAA,EAA2B,OAAO,IAAI,GAAG,CAAA;AAAA,EACtE;AACF,CAAA;AAaA,SAAS,sBAAsB,GAAA,EAAqB;AAClD,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,UAAU,CAAA;AACnC,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,IAAA;AACtB,EAAA,IAAI,IAAA,KAAS,IAAI,OAAO,EAAA;AACxB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAC1B;AAOA,SAAS,cAAc,GAAA,EAAmC;AACxD,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,KAAA,GAAQ,SAAA;AACZ,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AACrC,IAAA,IAAI,IAAA,KAAS,EAAA,IAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACzC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,MAAM,QAAQ,KAAA,KAAU,EAAA,GAAK,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,KAAK,CAAA;AAEvD,IAAA,IAAI,QAAQ,KAAA,KAAU,EAAA,GAAK,KAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AACpD,IAAA,IAAI,MAAM,UAAA,CAAW,GAAG,GAAG,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAChD,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,IAAA;AACH,QAAA,EAAA,GAAK,KAAA;AACL,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,KAAA,GAAQ,KAAA;AACR,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AACpB,QAAA;AAGA;AACJ,EACF;AACA,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACnC,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAE;AACjD;AAGA,eAAe,WAAW,QAAA,EAAuC;AAC/D,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,MAAA;AAC1D,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,aAAA,GAAgB,MAAA,CAAO,aAAa,CAAA,GAAI,MAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,IAAK,MAAA;AAEpE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,IAAA,GAAO,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AAClC,EAAA,IAAI,OAAA,GAAU,CAAA,yCAAA,EAA4C,QAAA,CAAS,MAAM,CAAA,CAAA;AACzE,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE9B,MAAA,MAAM,aAAA,GAAgB,aAAa,MAAM,CAAA;AACzC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAA,GAAU,aAAA,CAAc,OAAA;AACxB,QAAA,IAAA,GAAO,cAAc,OAAA,IAAW,IAAA;AAChC,QAAA,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,MAAA,IAAU,aAAA,CAAc,QAAQ,KAAA,IAAS,OAAA;AAEzE,QAAA,IAAA,GAAO,EAAE,OAAO,EAAE,IAAA,EAAM,SAAQ,EAAG,UAAA,EAAY,aAAA,CAAc,OAAA,CAAQ,UAAA,EAAW;AAAA,MAClF,CAAA,MAAA,IAAW,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AAe/C,QAAA,MAAM,MAAA,GAAS,MAAA;AAKf,QAAA,MAAM,UAAA,GACJ,OAAO,MAAA,CAAO,KAAA,KAAU,WAAW,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,EAAO,IAAA;AAClE,QAAA,MAAM,aAAA,GAAA,CACH,OAAO,MAAA,CAAO,KAAA,KAAU,WAAW,MAAA,CAAO,KAAA,EAAO,OAAA,GAAU,KAAA,CAAA,KAAc,MAAA,CAAO,OAAA;AACnF,QAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,UAAA,IAAA,GAAO,UAAA,IAAc,IAAA;AACrB,UAAA,OAAA,GAAU,aAAA,IAAiB,OAAA;AAG3B,UAAA,IAAA,GAAO;AAAA,YACL,KAAA,EAAO;AAAA,cACL,IAAA;AAAA,cACA,OAAA;AAAA,cACA,GAAI,OAAO,MAAA,CAAO,KAAA,KAAU,YAAY,MAAA,CAAO,KAAA,EAAO,OAAA,GAClD,EAAE,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,KACxB;AAAC,aACP;AAAA,YACA,GAAI,OAAO,UAAA,GAAa,EAAE,YAAY,MAAA,CAAO,UAAA,KAAe;AAAC,WAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,IAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA,EAAW,SAAS,UAAA,IAAc,SAAA;AAAA,IAClC,IAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA,EAAY,MAAA,CAAO,QAAA,CAAS,UAAU,IAAI,UAAA,GAAa,MAAA;AAAA,IACvD;AAAA,GACD,CAAA;AACH;;;AC/bO,SAAS,kBAAA,CAAsB,GAAA,EAAc,QAAA,GAAW,OAAA,EAE7D;AACA,EAAA,MAAMA,WAAU,MAAM;AAAE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,QAAQ,CAAA,oDAAA,CAAsD,CAAA;AAAA,EAAG,CAAA;AACpH,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAM,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAOA,QAAAA,EAAQ;AAC1E,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,SAAA,GAAY,QAAA,IAAY,KAAA,IAAS,MAAA,IAAU,KAAA;AACjD,EAAA,MAAM,QAAQ,SAAA,GAAY,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,WAAW,KAAA,CAAM,KAAA;AAC9D,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,SAAUA,QAAAA,EAAQ;AAC1C,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,SAAA;AAC1C,EAAA,IAAI,MAAA,IAAU,SAAS,OAAO,MAAA,KAAW,YAAa,SAAA,IAAa,CAAC,MAAA,CAAA,EAAU,OAAOA,QAAAA,EAAQ;AAC7F,EAAA,IAAI,cAAc,EAAG,aAAA,IAAiB,KAAA,CAAA,IAAU,KAAA,CAAM,WAAW,MAAA,IAAU,OAAO,KAAA,CAAM,QAAA,KAAa,aACjG,KAAA,CAAM,QAAA,KAAa,QAAQ,MAAM,CAAA,CAAA,SAAWA,QAAAA,EAAQ;AACxD,EAAA,IAAI,MAAM,KAAA,KAAU,MAAA,KACf,OAAO,KAAA,CAAM,KAAA,KAAU,YAAY,CAAC,MAAA,CAAO,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,IAAK,KAAA,CAAM,QAAQ,KAAA,CAAM,MAAA,CAAA,SAAgBA,QAAAA,EAAQ;AAC1H,EAAA,MAAM,IAAA,GAAgF;AAAA,IACpF,KAAA;AAAA,IAAqB,QAAA,EAAU,QAAQ,MAAM;AAAA,GAC/C;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,OAAa,WAAA,GAAc,MAAA;AAC7D,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AACxD,EAAA,OAAO,IAAA;AACT;;;ACnBO,IAAM,0BAAA,GAA6B;AACnC,IAAM,yBAAN,MAA6B;AAAA,EAElC,WAAA,CAA6B,aAAa,EAAA,EAAI;AAAjB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAD7B,IAAA,IAAA,CAAQ,QAAA,GAAW,CAAC,EAAE,EAAA,EAAI,UAAA,EAAY,QAAQ,UAAA,EAAY,WAAA,EAAa,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,WAAA,EAAa,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,gBAAA,EAAkB,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,sBAAA,EAAwB,UAAA,EAAY,sBAAA,EAAwB,CAAA;AAAA,EACnN;AAAA,EAE/C,MAAM,QAAQ,OAAA,EAAkD;AAC9D,IAAA,IAAI,KAAK,UAAA,KAAe,0BAAA,EAA4B,MAAM,IAAI,MAAM,8FAA8F,CAAA;AAClK,IAAA,MAAM,MAAM,EAAE,EAAA,EAAI,YAAY,IAAA,EAAM,mBAAA,EAAqB,MAAM,OAAA,EAAQ;AACvE,IAAA,IAAI,QAAQ,MAAA,KAAW,KAAA,IAAS,QAAQ,IAAA,KAAS,cAAA,SAAuB,EAAE,OAAA,EAAS,WAAA,EAAa,QAAA,EAAU,OAAO,IAAA,EAAM,CAAC,GAAG,CAAA,EAAG,QAAA,EAAU,KAAK,QAAA,EAAS;AACtJ,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,KAAA,IAAS,OAAA,CAAQ,IAAA,KAAS,gBAAA,EAAkB,OAAO,EAAE,IAAA,EAAM,CAAC,GAAG,CAAA,EAAE;AACxF,IAAA,IAAI,OAAA,CAAQ,SAAS,kCAAA,EAAoC;AACvD,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,KAAA,EAAO,OAAO,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,GAAI,CAAA,EAAE;AACtF,MAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7B,QAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,QAAA,MAAM,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,EAAI,EAAA,EAAI,CAAA,SAAA,EAAY,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,EAAG,UAAA,EAAY,KAAA,EAAM;AACpL,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC1B,QAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,MACtB;AAAA,IACF;AACA,IAAA,MAAM,IAAI,MAAM,CAAA,sCAAA,EAAyC,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,kEAAA,CAAoE,CAAA;AAAA,EAC7J;AACF,CAAA;;;ACXA,IAAM,oBAAA,GAAiC;AAAA,EACrC,yMAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,gBAAA,GAAmB,wCAAA;AAGzB,IAAM,iBAAA,GACJ,kFAAA;AAEF,IAAM,WAAA,GAAc,4BAAA;AAGpB,SAAS,cAAc,GAAA,EAAqB;AAC1C,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACjC;AAGO,SAAS,WAAW,IAAA,EAA6B;AACtD,EAAA,KAAA,MAAW,WAAW,oBAAA,EAAsB;AAC1C,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,EAAG;AACb,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC,CAAA;AAC/B,MAAA,IAAI,KAAK,MAAA,IAAU,CAAA,IAAK,IAAA,CAAK,MAAA,IAAU,IAAI,OAAO,IAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,IAAI,KAAA;AACJ,EAAA,gBAAA,CAAiB,SAAA,GAAY,CAAA;AAC7B,EAAA,OAAA,CAAQ,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AACrD,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,CAAA,IAAK,IAAA,IAAQ,KAAK,IAAA,EAAM;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,YAAY,IAAA,EAA6B;AACvD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,IAAA;AACvC,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAC,CAAA;AAC1D,EAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,iBAAA,CAAkB,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5D,EAAA,OAAO,MAAA,IAAU,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AACjC;AAMO,SAAS,mBAAmB,OAAA,EAAwC;AACzE,EAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,GAAO,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,EAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,MAAK,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA,CAAQ,IAAA,GAAO,QAAA;AAC7E,EAAA,MAAM,QAAA,GAAW,GAAG,IAAI;AAAA,EAAK,QAAQ,CAAA,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,UAAA,CAAW,IAAI,CAAA,IAAK,WAAW,QAAQ,CAAA;AAAA;AAAA,IAE5C,MAAM,WAAA,CAAY,OAAA,CAAQ,QAAQ,EAAE,CAAA,IAAK,YAAY,QAAQ;AAAA,GAC/D;AACF;AAGA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,OAAO,IAAA,CACJ,QAAQ,2BAAA,EAA6B,GAAG,EACxC,OAAA,CAAQ,6BAAA,EAA+B,GAAG,CAAA,CAC1C,OAAA,CAAQ,YAAY,GAAG,CAAA,CACvB,QAAQ,UAAA,EAAY,GAAG,EACvB,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,UAAU,GAAG,CAAA,CACrB,QAAQ,QAAA,EAAU,GAAG,EACrB,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA,EAAG,CAAA,KAAc,OAAO,YAAA,CAAa,MAAA,CAAO,CAAC,CAAC,CAAC,EACrE,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,EAAK;AACV;;;AC1EO,SAAS,QAAQ,CAAA,EAA4C;AAClE,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,OAAO,MAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AAClC;AAUO,SAAS,YAAY,CAAA,EAAwD;AAClF,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,MAAA;AAC5B,EAAA,OAAO,MAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AAClC;;;AC+FA,SAAS,iBAAiB,MAAA,EAAwB;AAChD,EAAA,MAAM,IAAA,GAAO,KAAK,SAAA,CAAU,EAAE,GAAG,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA;AAC/C,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,KAAS,UAAA,GAAa,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AACjG,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtE;AACA,SAAS,iBAAiB,MAAA,EAAwB;AAChD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACvD,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,KAAS,UAAA,GAAa,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA,CAAE,SAAS,MAAM,CAAA;AAChG,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,IAAA,OAAO,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,IAAK,CAAA,GAAI,OAAO,CAAA,GAAI,CAAA;AAAA,EACpE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,OAAA,EAAuD;AAChF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,eAAA;AAAA,MACN,WAAW,EAAE,KAAA,EAAO,SAAS,KAAA,EAAO,EAAA,EAAI,aAAa,KAAA;AAAM,KAC7D;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,aAAA;AAAA,MACN,WAAW,EAAE,EAAA,EAAI,mCAAmC,MAAA,EAAQ,MAAA,EAAQ,SAAS,WAAA;AAAY,KAC3F;AAAA,IACA,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,gBAAA;AAAA,MACN,SAAA,EAAW,EAAE,KAAA,EAAO,OAAA,EAAS,WAAW,IAAA;AAAK;AAC/C,GACF;AACF;AAEA,IAAM,kBAAA,GAAqB,mBAAA;AAC3B,IAAM,kBAAA,GAAqB,wBAAA;AAC3B,IAAM,2BAAA,uBAAkC,GAAA,CAAI;AAAA,EAC1C,YAAA;AAAA,EAAc,OAAA;AAAA,EAAS,UAAA;AAAA,EAAY,OAAA;AAAA,EAAS,WAAA;AAAA,EAAa,WAAA;AAAA,EAAa,OAAA;AAAA,EACtE,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ;AACjD,CAAC,CAAA;AASD,IAAM,WAAA,GAAc,UAAA;AACpB,IAAM,eAAA,GAAkB,UAAA;AAExB,IAAM,wBAAA,GAA2B,EAAA;AAGjC,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,sBAAA,GAAyB,GAAA;AAE/B,SAAS,GAAA,GAAoB;AAC3B,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAEA,SAAS,IAAI,MAAA,EAAwB;AACnC,EAAA,MAAM,CAAA,GAAI,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAChD,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AACvB;AAEA,SAAS,YAAA,GAAuB;AAC9B,EAAA,OAAO,CAAA,KAAA,EAAQ,KAAK,KAAA,CAAM,GAAA,GAAO,KAAK,MAAA,EAAO,GAAI,GAAI,CAAC,CAAA,CAAA;AACxD;AAEA,SAAS,yBAAyB,KAAA,EAAuB;AACvD,EAAA,MAAM,aAAa,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,GAAO,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA,CAAE,QAAQ,kBAAA,EAAoB,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACtH,EAAA,IAAI,WAAW,MAAA,GAAS,CAAA,IAAK,2BAAA,CAA4B,GAAA,CAAI,UAAU,CAAA,EAAG;AACxE,IAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,iGAAA,EAAmG,CAAA;AAAA,EACxK;AACA,EAAA,OAAO,UAAA;AACT;AAOA,SAAS,mBAAmB,SAAA,EAAqC;AAC/D,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,eAAA,EAAiB;AAC5D,IAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,MACxB,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EAAS,eAAe,SAAS,CAAA,yCAAA;AAAA,KAClC,CAAA;AAAA,EACH;AACF;AAOA,SAAS,sBAAsB,KAAA,EAAiC;AAC9D,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACnC,IAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,MACxB,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,mCAAmC,iBAAiB,CAAA,EAAA;AAAA,KAC9D,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,GAAA,CAAI,SAAS,oBAAA,EAAsB;AACrC,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,iBAAiB,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,mBAAc,oBAAoB,CAAA,OAAA;AAAA,OAC7E,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,IAAA,IAAI,UAAU,IAAA,EAAM;AACpB,IAAA,MAAM,IAAI,OAAO,KAAA;AACjB,IAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,QAAA,IAAY,MAAM,SAAA,EAAW;AACvD,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,uBAAuB,GAAG,CAAA,uCAAA;AAAA,OACpC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,CAAA,KAAM,QAAA,IAAa,KAAA,CAAiB,MAAA,GAAS,sBAAA,EAAwB;AACvE,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,CAAA,oBAAA,EAAuB,GAAG,CAAA,UAAA,EAAa,sBAAsB,CAAA,OAAA;AAAA,OACvE,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAQA,SAAS,aAAA,CACP,SACA,KAAA,EACe;AACf,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,OAAA;AAChC,EAAA,IAAI,KAAA,KAAU,IAAA,EAAM,OAAO,EAAC;AAC5B,EAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAsB,EAAE,GAAG,OAAA,EAAQ;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,KAAK,GAAG,CAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,iBAAiB,CAAA,EAAiB;AACzC,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,WAAW,CAAA,CAAE,SAAA;AAAA,IACb,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,QAAQ,CAAA,CAAE;AAAA,GACX,CAAA;AACH;AAkGA,SAAS,UAAA,GAAwB;AAC/B,EAAA,OAAO;AAAA,IACL,MAAA,sBAAY,GAAA,EAAI;AAAA,IAChB,aAAA,sBAAmB,GAAA,EAAI;AAAA,IACvB,eAAA,sBAAqB,GAAA,EAAI;AAAA,IACzB,iBAAA,sBAAuB,GAAA,EAAI;AAAA,IAC3B,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,QAAA,sBAAc,GAAA,EAAI;AAAA,IAClB,WAAA,sBAAiB,GAAA,EAAI;AAAA,IACrB,QAAA,sBAAc,GAAA,EAAI;AAAA,IAClB,YAAA,sBAAkB,GAAA,EAAI;AAAA,IACtB,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,IAAA,sBAAU,GAAA,EAAI;AAAA,IACd,gBAAA,sBAAsB,GAAA,EAAI;AAAA,IAC1B,qBAAA,sBAA2B,GAAA,EAAI;AAAA,IAC/B,cAAc,gBAAA,EAAiB;AAAA,IAC/B,eAAA,EAAiB,gBAAA;AAAA,IACjB,iBAAA,sBAAuB,GAAA,EAAI;AAAA,IAC3B,OAAA,sBAAa,GAAA,EAAI;AAAA,IACjB,WAAA,sBAAiB,GAAA,EAAI;AAAA,IACrB,iBAAA,sBAAuB,GAAA,EAAI;AAAA,IAC3B,eAAA,sBAAqB,GAAA,EAAI;AAAA,IACzB,YAAA,sBAAkB,GAAA,EAAI;AAAA,IACtB,kBAAA,sBAAwB,GAAA,EAAI;AAAA,IAC5B,oBAAA,sBAA0B,GAAA,EAAI;AAAA,IAC9B,UAAA,sBAAgB,GAAA,EAAI;AAAA,IACpB,KAAA,sBAAW,GAAA,EAAI;AAAA,IACf,SAAA,sBAAe,GAAA,EAAI;AAAA,IACnB,aAAA,sBAAmB,GAAA,EAAI;AAAA,IACvB,QAAQ,EAAC;AAAA,IACT,QAAA,EAAU,CAAA;AAAA,IACV,aAAA,EAAe,CAAA;AAAA,IACf,YAAA,EAAc;AAAA,GAChB;AACF;AAOO,IAAM,2BAAA,GAA8B,0BAAA;AAG3C,SAAS,gBAAA,GAAkD;AACzD,EAAA,MAAM,CAAA,uBAAQ,GAAA,EAA8B;AAC5C,EAAA,MAAM,EAAA,GAAK,IAAI,KAAK,CAAA;AACpB,EAAA,CAAA,CAAE,IAAI,EAAA,EAAI;AAAA,IACR,EAAA;AAAA,IACA,SAAA,EAAW,2BAAA;AAAA,IACX,aAAA,EAAe,2BAAA;AAAA,IACf,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,kBAAA,EAAoB,CAAA;AAAA,IACpB,YAAY,GAAA,EAAI;AAAA,IAChB,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,OAAO,CAAA;AACT;AAuBA,SAAS,oBAAA,CAAqB,QAAsB,IAAA,EAAoC;AACtF,EAAA,IAAI,MAAA,KAAW,cAAA,IAAkB,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AAC3D,EAAA,OAAO,IAAA;AACT;AAGA,IAAM,oBAAA,uBAAqD,GAAA,CAAiB;AAAA,EAC1E,MAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA;AAAA;AAAA;AAAA,EAIA;AACF,CAAC,CAAA;AAQD,IAAM,sBAAA,uBAAuD,GAAA,CAAiB;AAAA,EAC5E,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAWD,SAAS,oBAAoB,KAAA,EAA8B;AACzD,EAAA,MAAMC,WAAoB,EAAC;AAG3B,EAAA,IAAI,KAAA,KAAU,kBAAkB,KAAA,KAAU,WAAA,IAAe,UAAU,UAAA,IAC/D,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,UAAA,EAAY;AAC7C,IAAAA,QAAAA,CAAQ,KAAK,iBAAiB,CAAA;AAAA,EAChC;AAIA,EAAA,IAAI,KAAA,KAAU,cAAA,IAAkB,KAAA,KAAU,WAAA,IAAe,UAAU,UAAA,EAAY;AAC7E,IAAAA,QAAAA,CAAQ,KAAK,kBAAkB,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,UAAU,cAAA,IAAkB,KAAA,KAAU,eAAe,KAAA,KAAU,UAAA,IAAc,UAAU,OAAA,EAAS;AAClG,IAAAA,QAAAA,CAAQ,KAAK,gBAAgB,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,KAAA,KAAU,cAAA,IAAkB,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,UAAA,IAC/D,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,UAAA,IAAc,KAAA,KAAU,QAAA,EAAU;AACnE,IAAAA,QAAAA,CAAQ,KAAK,eAAe,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,CAAC,GAAGA,QAAAA,EAAS,YAAA,EAAc,oBAAoB,CAAA;AACxD;AAGA,SAAS,WAAA,CACP,IAAA,EACA,MAAA,EACA,KAAA,EACA,QACA,MAAA,EACS;AACT,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kCAAkC,IAAI,CAAA,CAAA;AAAA,IAC5C,KAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA,EAAY,IAAI,KAAK,CAAA;AAAA,IACrB,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,MAAA,GAAS;AAAA,GACnC;AACF;AASA,SAAS,YAAA,CAAa,SAAkB,OAAA,EAA4B;AAClE,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAA,EAAoB,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,KAAA;AAAA,IAC9C,WAAW,OAAA,CAAQ,UAAA;AAAA,IACnB;AAAA,GACD,CAAA;AACH;AAWA,SAAS,mBAAA,CAAoB,QAAsB,aAAA,EAAkC;AACnF,EAAA,MAAM,MAAA,GAAS,gBACX,oCAAA,GACA,4CAAA;AACJ,EAAA,MAAM,MAAA,GACJ,CAAA,gEAAA,EAAmE,MAAM,CAAA,OAAA,EAAU,MAAM,CAAA,6kBAAA,CAAA;AAS3F,EAAA,OAAO,YAAA;AAAA,IACL,WAAA,CAAY,iBAAA,EAAmB,GAAA,EAAK,iBAAA,EAAmB,MAAA,EAAQ;AAAA,MAC7D;AAAA,QAAE,KAAA,EAAO,gBAAA;AAAA,QAAkB,IAAA,EAAM,UAAA;AAAA,QAC/B,MAAA,EAAQ;AAAA,OAAsE;AAAA,MAChF;AAAA,QAAE,KAAA,EAAO,aAAA;AAAA,QAAe,IAAA,EAAM,UAAA;AAAA,QAC5B,MAAA,EAAQ;AAAA,OAAwF;AAAA,MAClG;AAAA,QAAE,KAAA,EAAO,aAAA;AAAA,QAAe,IAAA,EAAM,UAAA;AAAA,QAC5B,MAAA,EAAQ;AAAA,OAAoF;AAAA,MAC9F,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,eAAA,EAAiB,QAAQ,CAAA,EAAG,MAAM,CAAA,UAAA,EAAa,MAAM,CAAA,CAAA,CAAA,EAAI;AAAA,MAClF,EAAE,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM,SAAA,EAAW,QAAQ,oBAAA;AAAqB,KACtE;AAAA,GACH;AACF;AAGO,IAAM,oBAAA,GACX,sFAAA;AAQF,SAAS,cAAA,CACP,IAAA,EACA,MAAA,EACA,MAAA,EACU;AACV,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,EAAO,QAAQ,2BAAA;AAA4B,GAC5E;AACA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,iBAAA;AAAA,QACP,MAAM,MAAA,CAAO,eAAA;AAAA,QACb,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,EAAE,OAAO,UAAA,EAAY,IAAA,EAAM,OAAO,MAAA,CAAO,QAAQ,CAAA,EAAG,MAAA,EAAQ,2CAAA,EAA4C;AAAA,MACxG,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,OAAO,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,EAAQ,qBAAA;AAAsB,KAClF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,MAAA,IAAU,mBAAA,CAAoB,MAAA,CAAO,KAAK,CAAA,EAAG;AACtD,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,qBAAA,CAAsB,MAAM,CAAA,IAAK,EAAA,EAAI,CAAA;AAAA,EACpG;AACA,EAAA,OAAO,aAAa,WAAA,CAAY,IAAA,EAAM,KAAK,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAC,CAAA;AACxE;AAGA,IAAM,qBAAA,GAA0D;AAAA,EAC9D,eAAA,EAAiB,wCAAA;AAAA,EACjB,gBAAA,EAAkB,wCAAA;AAAA,EAClB,cAAA,EAAgB,kEAAA;AAAA,EAChB,aAAA,EAAe,sBAAA;AAAA,EACf,UAAA,EAAY,mBAAA;AAAA,EACZ,kBAAA,EAAoB;AACtB,CAAA;AAGA,SAAS,YAAA,CAAa,MAAc,EAAA,EAA2B;AAC7D,EAAA,OAAO,IAAI,aAAA,CAAc;AAAA,IACvB,MAAA,EAAQ,GAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,CAAA,GAAA,EAAM,IAAI,CAAA,YAAA,EAAe,EAAE,CAAA,sBAAA;AAAA,GACrC,CAAA;AACH;AAGA,SAAS,eAAA,CAAgB,MAAc,MAAA,EAAyB;AAC9D,EAAA,OAAO,GAAG,IAAI;;AAAA;AAAA,MAAA,EAAsD,MAAA,CAAO,KAAK,KAAK;AAAA,SAAA,EAAc,OAAO,OAAO;;AAAA,EAAO,OAAO,IAAI,CAAA,CAAA;AACrI;AAMO,IAAM,cAAN,MAAkB;AAAA,EAAlB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,sBAAA,GAAyB,IAAI,sBAAA,EAAuB;AAI5D,IAAA,IAAA,CAAQ,QAAmB,UAAA,EAAW;AAi3CtC;AAAA,IAAA,IAAA,CAAQ,YAAA,uBAAmB,GAAA,EAA8D;AAAA,EAAA;AAAA,EAp3CzF,+BAA+B,UAAA,EAA0B;AAAE,IAAA,IAAA,CAAK,sBAAA,GAAyB,IAAI,sBAAA,CAAuB,UAAU,CAAA;AAAA,EAAG;AAAA,EACjI,sBAAsB,OAAA,EAAkD;AAAE,IAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,OAAA,CAAQ,OAAO,CAAA;AAAA,EAAG;AAAA,EAI/H,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,QAAQ,UAAA,EAAW;AAAA,EAC1B;AAAA,EAEA,OAAO,GAAA,EAAoC;AACzC,IAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,IAAI,YAAY,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,UAAA,IAAc,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,KAAA,GAAe;AAAA,QACnB,EAAA,EAAI,OAAA;AAAA,QACJ,IAAA,EAAM,IAAI,UAAA,IAAc,IAAA;AAAA,QACxB,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,CAAC,gBAAA,EAAkB,cAAA,EAAgB,gBAAgB,eAAe,CAAA;AAAA,QAC1E,YAAY,GAAA,EAAI;AAAA,QAChB,UAAU;AAAC,OACb;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AACpC,MAAA,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,cAAc,OAAO,CAAA;AAAA,IACxD;AAIA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,CAAA,cAAA,EAAiB,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,MAClE,MAAA,EAAQ,CAAC,gBAAA,EAAkB,cAAA,EAAgB,gBAAgB,eAAe,CAAA;AAAA;AAAA,MAE1E,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAA,EAAoC;AACzC,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,IAAA,GAAO,WAAA,EAAY;AACjD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,IAAI,KAAK,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,UAAU,UAAA,IAAc,CAAA,cAAA,EAAiB,IAAI,GAAG,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC7E,IAAA,MAAM,OAAA,GAAU,QAAA,EAAU,OAAA,IAAW,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,MAAM,OAAA,GACJ,QAAA,EAAU,OAAA,IAAW,CAAA,EAAG,wBAAA,CAAyB,GAAA,CAAI,QAAA,IAAY,YAAA,EAAc,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA;AAGxG,IAAA,MAAM,GAAA,GAAM,QAAA;AACZ,IAAA,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,CAAA;AAC1F,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,UAAA;AAAA,MACb,QAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,CAAA,SAAA,EAAY,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,MAC7D,YAAY,CAAA,SAAA,EAAY,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MAC3C,MAAA,EAAQ,CAAC,eAAe,CAAA;AAAA,MACxB,OAAA;AAAA,MACA,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa,KAAA;AAAA,MACb,cAAA,EAAgB,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,KAAQ,EAAA,GAAK,EAAA,GAAK,GAAI,CAAA,CAAE,WAAA,EAAY;AAAA,MAClE,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAAA;AAAA,EAGA,OAAO,GAAA,EAAoC;AAEzC,IAAA,KAAA,MAAW,GAAG,CAAC,CAAA,IAAK,IAAA,CAAK,MAAM,aAAA,EAAe;AAC5C,MAAA,IAAI,CAAC,EAAE,QAAA,IAAY,CAAA,CAAE,QAAQ,GAAA,CAAI,GAAA,CAAI,MAAK,EAAG;AAC3C,QAAA,CAAA,CAAE,QAAA,GAAW,IAAA;AACb,QAAA,OAAO;AAAA,UACL,UAAU,CAAA,CAAE,OAAA;AAAA,UACZ,SAAA,EAAW,CAAA,SAAA,EAAY,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,UAC/D,YAAY,CAAA,SAAA,EAAY,CAAA,CAAE,QAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,UAC7C,MAAA,EAAQ,CAAC,gBAAA,EAAkB,cAAA,EAAgB,cAAc,CAAA;AAAA,UACzD,SAAS,CAAA,CAAE,OAAA;AAAA,UACX,QAAA,EAAU,IAAA;AAAA,UACV,OAAA,EACE,+FAAA;AAAA,UACF,kBAAA,EAAoB,iBAAA,CAAkB,CAAA,CAAE,OAAO;AAAA,SACjD;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAAA;AAAA,EAGA,MAAA,GAAiB;AACf,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,aAAA;AAAA,MACb,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,KAAK,KAAA,CAAM,MAAA,CAAO,MAAK,CAAE,IAAA,GAAO,KAAA,IAAS,UAAA;AAAA,MACnD,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,CAAC,gBAAA,EAAkB,cAAA,EAAgB,gBAAgB,eAAe;AAAA,KAC5E;AAAA,EACF;AAAA,EAEA,YAAY,GAAA,EAAgC;AAE1C,IAAA,kBAAA,CAAmB,IAAI,UAAU,CAAA;AACjC,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,IAAI,SAAS,CAAA;AAC7D,MAAA,IAAI,QAAA,EAAU;AAEZ,QAAA,MAAMC,MAAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC7C,QAAA,IAAIA,QAAO,OAAOA,MAAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,GAAW,aAAA,CAAc,EAAC,EAAG,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAC;AACnE,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,IAAU,kBAAA;AAC7B,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACnD,IAAA,MAAM,cAAA,GAAiB,gBAAA,KAAqB,kBAAA,IAAsB,gBAAA,KAAqB,kBAAA;AACvF,IAAA,MAAM,QAAA,GAAW,cAAA,GAAiB,wBAAA,CAAyB,GAAA,CAAI,QAAA,IAAY,cAAc,CAAA,GAAK,GAAA,CAAI,QAAA,IAAY,YAAA,EAAa;AAC3H,IAAA,MAAM,EAAA,GAAK,IAAI,KAAK,CAAA;AACpB,IAAA,MAAM,KAAA,GAAe;AAAA,MACnB,MAAA,EAAQ,OAAA;AAAA,MACR,EAAA;AAAA,MACA,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY,eAAA;AAAA,MACZ,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC9B,QAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA,EAAc,IAAI,YAAA,IAAgB,IAAA;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,eAAA,EAAiB,GAAA,CAAI,MAAA,GAAS,cAAA,GAAiB,QAAA;AAAA,MAC/C,QAAA,EAAU,IAAA;AAAA,MACV,gBAAA,EAAkB,wBAAA;AAAA,MAClB,mBAAA,EAAqB,KAAA;AAAA,MACrB,WAAA,EAAa,IAAI,WAAA,IAAe,IAAA;AAAA,MAChC,QAAA;AAAA,MACA,YAAY,GAAA,EAAI;AAAA,MAChB,GAAI,IAAI,kBAAA,GACJ;AAAA,QACE,WAAA,EAAa;AAAA,UACX,SAAA,EAAW,oBAAA;AAAA,UACX,SAAA,EAAW,GAAA;AAAA,UACX,SAAA,EAAW,oBAAA;AAAA,UACX,SAAA,EAAW,GAAA;AAAA,UACX,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,UAC/B,QAAA,EAAU,GAAA,CAAI,MAAM,CAAA,CAAE,MAAM,CAAC;AAAA;AAC/B,UAEF;AAAC,KACP;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAM,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,EAAE,CAAA;AACzC,IAAA,IAAI,GAAA,CAAI,WAAW,IAAA,CAAK,KAAA,CAAM,gBAAgB,GAAA,CAAI,GAAA,CAAI,WAAW,EAAE,CAAA;AACnE,IAAA,IAAA,CAAK,MAAM,aAAA,IAAiB,CAAA;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAgB;AACvD,IAAA,IAAI,KAAA,GAAQ,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA,CAAE,MAAA;AAAA,MACpD,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAA,CAAG,WAAW,KAAK;AAAA,KAClC;AACA,IAAA,IAAI,OAAO,MAAA,EAAQ,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,WAAA,OAAkB,MAAA,CAAO,MAAA,CAAQ,IAAA,EAAK,CAAE,aAAa,CAAA;AAC7G,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,MAAA,CAAO,MAAM,CAAA;AACzE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,KAAK,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AACzF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,OAAO,KAAA,IAAS,EAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA;AAC3D,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,GAAS,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,MAAA,GAAS,KAAA,GAAQ,KAAA,CAAM,MAAA;AACxC,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,QAAQ,QAAA,EAAU,GAAI,QAAA,GAAW,EAAE,aAAa,gBAAA,CAAiB,MAAA,GAAS,KAAK,CAAA,EAAE,GAAI,EAAC,EAAG;AAAA,EAC/H;AAAA,EAEA,SAAS,OAAA,EAAoC;AAC3C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAMnB,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,uBAAA,EAAyB,KAAK,eAAA,CAAgB,KAAA,CAAM,OAAO,CAAA,EAAE;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,OAAO,GAAA,EAAqB;AAClC,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,GAAG,OAAA,IAAW,GAAA;AAAA,EACjD;AAAA,EAEA,WAAA,CAAY,SAAiB,GAAA,EAA4C;AAEvE,IAAA,kBAAA,CAAmB,IAAI,UAAU,CAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,IAAI,GAAA,CAAI,iBAAiB,MAAA,EAAW;AAClC,MAAA,KAAA,CAAM,YAAA,GAAe,GAAA,CAAI,YAAA,KAAiB,EAAA,GAAK,OAAO,GAAA,CAAI,YAAA;AAAA,IAC5D;AACA,IAAA,IAAI,GAAA,CAAI,gBAAgB,MAAA,EAAW;AACjC,MAAA,KAAA,CAAM,WAAA,GAAc,GAAA,CAAI,WAAA,KAAgB,EAAA,GAAK,OAAO,GAAA,CAAI,WAAA;AAAA,IAC1D;AACA,IAAA,IAAI,GAAA,CAAI,qBAAqB,MAAA,EAAW;AACtC,MAAA,IACE,CAAC,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,gBAAgB,CAAA,IACtC,GAAA,CAAI,gBAAA,GAAmB,CAAA,IACvB,GAAA,CAAI,gBAAA,GAAmB,GAAA,EACvB;AACA,QAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,UACxB,MAAA,EAAQ,GAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,KAAA,CAAM,mBAAmB,GAAA,CAAI,gBAAA;AAAA,IAC/B;AAGA,IAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAC9B,MAAA,KAAA,CAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,IAAI,QAAQ,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,YAAY,OAAA,EAAuB;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA;AAClC,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AACvC,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,sBAAsB,SAAA,EAAyB;AACrD,IAAA,IAAI,SAAA,KAAc,GAAA,IAAO,SAAA,KAAc,eAAA,EAAiB;AAExD,IAAA,MAAM,IAAI,aAAA,CAAc;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,YAAY,SAAS,CAAA,gCAAA;AAAA,KAC/B,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CAAqB,WAAmB,GAAA,EAAgC;AAGtE,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,EAC7B;AAAA,EAEA,oBAAA,CAAqB,SAAA,EAAmB,MAAA,GAAiC,EAAC,EAAgB;AACxF,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,IAAI,QAAQ,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,MAAM,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA,CAAE,OAAO,CAAC,GAAA,KAAQ,IAAI,EAAA,CAAG,UAAA,CAAW,KAAK,CAAC,CAAA;AAC9F,IAAA,IAAI,OAAO,MAAA,EAAQ,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,WAAA,OAAkB,MAAA,CAAO,MAAA,CAAQ,IAAA,EAAK,CAAE,aAAa,CAAA;AAC7G,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,KAAK,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AAEzF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,OAAO,KAAA,IAAS,EAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA;AAC3D,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,GAAS,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,MAAA,GAAS,KAAA,GAAQ,KAAA,CAAM,MAAA;AACvC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAa,OAAA,GAAU,gBAAA,CAAiB,MAAA,GAAS,KAAK,CAAA,GAAI;AAAA,KAC5D;AAAA,EACF;AAAA,EAEA,iBAAA,CAAkB,WAAmB,OAAA,EAAoC;AACvE,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AAAA,EACvC;AAAA,EAEA,oBAAA,CAAqB,SAAA,EAAmB,OAAA,EAAiB,GAAA,EAA4C;AACnG,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAA,EAAS,GAAG,CAAA;AAAA,EAC5C;AAAA,EAEA,oBAAA,CAAqB,WAAmB,OAAA,EAA0B;AAChE,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,IAAA,CAAK,WAAA,CAAY,MAAM,OAAO,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,4BAAA,CAA6B,WAAmB,OAAA,EAA+C;AAC7F,IAAA,IAAA,CAAK,sBAAsB,SAAS,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,OACE,MAAM,WAAA,IAAe;AAAA,MACnB,SAAA,EAAW,oBAAA;AAAA,MACX,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW,oBAAA;AAAA,MACX,SAAA,EAAW,GAAA;AAAA,MACX,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,QAAA,EAAU,GAAA,CAAI,MAAM,CAAA,CAAE,MAAM,CAAC;AAAA,KAC/B;AAAA,EAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BA,gBAAgB,OAAA,EAA+B;AAC7C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,OAAO,OAAO,CAAC,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,eAAA;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,MAAA,EAA4B;AAC1C,IAAA,IAAA,CAAK,MAAM,eAAA,GAAkB,MAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,oBAAA,CAAqB,SAAiB,MAAA,EAAwC;AAC5E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAChC,IAAA,IAAI,WAAW,MAAA,EAAW,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,OAAO,IAAI,CAAA;AAAA,SAC7D,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,MAAM,MAAM,CAAA;AAAA,EACpD;AAAA,EAEA,IAAA,CAAK,SAAiB,GAAA,EAA+B;AACnD,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,OAAO,KAAK,cAAA,CAAe;AAAA,MACzB,OAAA;AAAA,MACA,IAAA,EAAM,MAAA;AAAA,MACN,GAAA;AAAA,MACA,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAAA,MACpB,OAAA,EAAS,IAAI,OAAA,IAAW,EAAA;AAAA,MACxB,IAAA,EAAM,IAAI,IAAA,IAAQ,EAAA;AAAA,MAClB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAA,EAAS,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,GAAG;AAAA,KAC7C,CAAA;AAAA,EACH;AAAA,EAEA,KAAA,CAAM,SAAiB,GAAA,EAAgC;AACrD,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAK7B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,mBAAA,CAAoB,OAAA,EAAS,GAAG,CAAA;AACjD,IAAA,OAAO,KAAK,cAAA,CAAe;AAAA,MACzB,OAAA;AAAA,MACA,IAAA,EAAM,OAAA;AAAA,MACN,GAAA;AAAA,MACA,IAAI,GAAA,CAAI,EAAA;AAAA,MACR,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAAA,MACpB,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,IAAA,EAAM,IAAI,IAAA,IAAQ,EAAA;AAAA,MAClB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,KAAK,GAAG;AAAA,KACnD,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,CAAQ,OAAA,EAAiB,SAAA,EAAmB,GAAA,EAAkC;AAC5E,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,OAAO,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACtF,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,YAAA,CAAa,WAAW,SAAS,CAAA;AAKpD,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,IAAA,IAAQ,IAAI,MAAM,CAAA;AACnD,IAAA,OAAO,KAAK,cAAA,CAAe;AAAA,MACzB,OAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,GAAA;AAAA,MACA,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAAA,MACpB,OAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,MACP,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS;AAAA,QACvB,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,QAClB,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,QAClB,OAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAU,MAAA,CAAO;AAAA,OAClB;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAA,CAAgB,SAAiB,GAAA,EAA+B;AAC9D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,oBAAA,CAAqB,SAAiB,GAAA,EAAgC;AACpE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,GAAG,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,MAAA,EAeP;AACd,IAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAM,GAAA,EAAI,GAAI,MAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAI3C,IAAA,MAAM,OAAA,GACJ,IAAI,IAAA,KAAS,MAAA,IAAa,IAAI,MAAA,KAAW,MAAA,IAAA,CAAc,GAAA,CAAI,WAAA,IAAe,EAAA,MAAQ,EAAA;AASpF,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAW,IAAA,GAAO,GAAA,CAAI,IAAA;AAAA,SAAA,IAC9B,SAAS,IAAA,GAAO,QAAA;AAAA,SAAA,IAChB,MAAA,KAAW,gBAAgB,IAAA,GAAO,QAAA;AAAA,SACtC,IAAA,GAAO,QAAA;AAGZ,IAAA,MAAM,UAAA,GAAa,CAAC,GAAG,MAAA,CAAO,EAAA,EAAI,GAAG,MAAA,CAAO,EAAA,EAAI,GAAG,MAAA,CAAO,GAAG,CAAA;AAC7D,IAAA,IAAA,CAAK,iBAAA,CAAkB,SAAS,UAAU,CAAA;AAC1C,IAAA,IAAA,CAAK,mBAAmB,UAAU,CAAA;AAIlC,IAAA,IAAI,oBAAA,CAAqB,QAAQ,IAAI,CAAA,IAAK,CAAC,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK,EAAG;AACtE,MAAA,MAAM,oBAAoB,MAAA,EAAQ,IAAA,CAAK,MAAM,iBAAA,CAAkB,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS;AAAA,MAC9C,IAAA;AAAA,MACA,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,YAAY,GAAA,CAAI,WAAA;AAAA,MAChB;AAAA,KACD,CAAA;AAOD,IAAA,MAAM,UAAA,GAAa,MAAA,KAAW,cAAA,IAAkB,IAAA,KAAS,QAAA;AACzD,IAAA,MAAM,aAAA,GAAgB,MAAA,KAAW,qBAAA,IAAA,CAA0B,GAAA,CAAI,eAAe,EAAA,MAAQ,EAAA;AACtF,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,aAAA,EAAe;AACjC,MAAA,IAAI,MAAA,KAAW,qBAAA,EAAuB,MAAA,CAAO,YAAA,GAAe,kBAAA;AAC5D,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAI,MAAM,CAAA;AACxC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,MAAA,EAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA,CAAO,KAAA,EAAO,cAAA,EAAgB,MAAA,CAAO,cAAA;AAAe,OACtF;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,OAAO,OAAA,EAAQ;AAC5B,IAAA,MAAM,QAAA,GAAW;AAAA,MAAE,eAAe,IAAA,CAAK,aAAA;AAAA,MAAe,iBAAiB,IAAA,CAAK,eAAA;AAAA,MAC1E,kBAAkB,IAAA,CAAK,gBAAA;AAAA,MAAkB,WAAW,IAAA,CAAK;AAAA,KAAU;AACrE,IAAA,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,IAAA,EAAM,UAAA,GAAa,iBAAiB,gBAAgB,CAAA;AAEpF,IAAA,IAAI,CAAC,OAAA,EAAS;AAOZ,MAAA,OAAO,IAAA,KAAS,MAAA,GACZ,EAAE,UAAA,EAAY,IAAA,CAAK,YAAY,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,GAAG,UAAS,GACjF,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,GAAG,QAAA,EAAS;AAAA,IAClG;AACA,IAAA,MAAM,OAAA,GAA8C,EAAE,EAAA,EAAI,IAAA,CAAK,UAAA,EAAW;AAC1E,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,OAAA,CAAQ,SAAA,GAAY,IAAA,CAAK,SAAA;AAC7C,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,QAAQ,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,EAAG,GAAG,QAAA,EAAS;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,cAAA,CAAe,QAAgB,KAAA,EAA0B;AAC/D,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,IAAA,MAAA,CAAO,MAAA,GAAS,oBAAA,CAAqB,GAAA,CAAI,KAAK,CAAA;AAAA,EAChD;AAAA;AAAA,EAGQ,kBAAA,CAAmB,MAAA,EAAgB,IAAA,EAAkB,QAAA,EAAwB;AACnF,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,WAAW,CAAA;AACvC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,eAAA,GAAkB,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,UAAA;AACxD,IAAA,MAAA,CAAO,SAAA,GAAY,QAAA;AACnB,IAAA,MAAA,CAAO,UAAU,GAAA,EAAI;AACrB,IAAA,MAAA,CAAO,aAAa,MAAA,CAAO,OAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAI,MAAM,CAAA;AACxC,IAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAAA,EAClC;AAAA;AAAA,EAGQ,WAAA,CAAY,SAAiB,GAAA,EAA8B;AACjE,IAAA,OAAO,IAAA,CAAK,WAAW,OAAA,EAAS;AAAA,MAC9B,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,IAAA,EAAM,IAAI,IAAA,IAAQ,EAAA;AAAA,MAClB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,QAAA,EAAU,IAAI,KAAK,CAAA;AAAA,MACnB,aAAa,GAAA,CAAI;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,YAAA,CAAa,OAAA,EAAiB,GAAA,EAAmB,GAAA,EAAgC;AACvF,IAAA,OAAO,IAAA,CAAK,WAAW,OAAA,EAAS;AAAA,MAC9B,IAAI,GAAA,CAAI,EAAA;AAAA,MACR,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AAAA,MAClB,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,IAAA,EAAM,IAAI,IAAA,IAAQ,EAAA;AAAA,MAClB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,aAAa,GAAA,CAAI;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,UAAA,CACN,SACA,IAAA,EASY;AACZ,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS;AAAA,MACtC,SAAA,EAAW,UAAA;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,OAAO;AAAA,MACL,YAAY,GAAA,CAAI,EAAA;AAAA,MAChB,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,aAAA,EAAgB,GAAA,CAAI,aAAA,GAAgB,CAAA,IAAA,EAAO,IAAI,EAAE,CAAA,CAAA;AAAA,MACjD,eAAA,EAAkB,GAAA,CAAI,eAAA,GAAkB,GAAA,CAAI,EAAA;AAAA,MAC5C,gBAAA,EAAmB,IAAI,gBAAA,GAAmB,QAAA;AAAA,MAC1C,SAAA,EAAY,GAAA,CAAI,SAAA,GAAY,EAAE,QAAA,EAAU,IAAA,CAAK,EAAA,CAAG,MAAA,IAAU,IAAA,CAAK,EAAA,EAAI,MAAA,IAAU,CAAA,CAAA,EAAG;AAAA,MAChF,mBAAmB,GAAA,CAAI,UAAA;AAAA,MACvB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,GAAA;AAAI,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAA,CAAoB,SAAiB,GAAA,EAAkC;AAC7E,IAAA,IAAI,QAAQ,GAAA,CAAI,SAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,EAAG;AACtD,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,CAAI,OAAO,KAAK,EAAC;AACjD,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,WAAW,GAAA,CAAI,SAAA;AACnB,IAAA,IAAI,IAAI,UAAA,EAAY;AAClB,MAAA,MAAA,GAAS,IAAI,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,IAAI,UAAU,CAAA;AAChD,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,YAAA,CAAa,SAAA,EAAW,IAAI,UAAU,CAAA;AACzD,MAAA,QAAA,GAAW,MAAA,CAAO,SAAA;AAAA,IACpB,CAAA,MAAA,IAAW,IAAI,SAAA,EAAW;AACxB,MAAA,MAAM,QAAA,GAAW,IAAI,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,IAAI,SAAS,CAAA;AAChE,MAAA,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAAA,IACvC,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAI,SAAA,IAAa,GAAA,CAAI,4BAA4B,MAAA,EAAQ,EAAA,KAAO,IAAI,wBAAA,EAA0B;AAChG,MAAA,MAAM,IAAI,aAAA,CAAc;AAAA,QACtB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,CAAA,mCAAA,EAAsC,MAAA,EAAQ,EAAA,IAAM,SAAS,CAAA;AAAA,OACvE,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAe,EAAC;AACtB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,OAAO,IAAA,CAAK,KAAA,CAAM,aAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AAC7D,QAAA,EAAA,CAAG,IAAA,CAAK,GAAG,MAAA,CAAO,EAAA,CAAG,IAAI,CAAC,EAAE,OAAM,KAAM,KAAK,EAAE,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,WAAA,OAAkB,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA;AAAA,MACjH,CAAA,MAAO;AACL,QAAA,EAAA,CAAG,KAAK,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU,MAAA,GAAS,OAAO,QAAA,GAAW,CAAC,MAAA,CAAO,IAAI,GAAG,GAAA,CAAI,CAAC,EAAE,KAAA,EAAM,KAAM,KAAK,CAAC,CAAA;AAAA,MAClG;AACA,MAAA,IAAI,GAAA,CAAI,SAAA,EAAA;AAAW,QAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,EAAA,EAAI,IAAI,CAAA,CAAE,UAAU,OAAA,EAAS,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA;AAAA,MAAA;AAAA,IACxF;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,EAAA,CAAG,MAAA,GAAS,EAAA,GAAK,CAAC,mBAAmB,CAAA;AAAA,MACzC,OAAA,EAAS,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,GAAI,KAAA;AAAA,MAC9C,QAAA,EAAU,QAAA,IAAY,GAAA,CAAI,KAAK;AAAA,KACjC;AAAA,EACF;AAAA;AAAA,EAGA,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAiB;AACxD,IAAA,IAAI,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,CAAA,EAAG,CAAA,KACpD,EAAE,UAAA,CAAW,aAAA,CAAc,EAAE,UAAU;AAAA,KACzC;AACA,IAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,IAAI,MAAA,CAAO,KAAA,GAAQ,CAAC,MAAA,CAAO,KAAK,CAAA;AACzE,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,OAAO,QAAA,CAAS,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,MAAA,CAAO,WAAA,EAAa,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,MAAA,CAAO,WAAW,CAAA;AACxF,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,WAAA,EAAY;AACvC,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,EAAE,YAAA,CAAa,WAAA,OAAkB,KAAK,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA,EAGA,UAAU,QAAA,EAAsC;AAC9C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,eAAe,QAAA,EAAgD;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,CAAI,QAAQ,GAAG,OAAO,MAAA;AAC9C,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,QAAA,EAA8C;AAC9D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,MAAM,WAAW,KAAA,CACd,MAAA;AAAA,MACC,CAAC,CAAA,KAAA,CACE,CAAA,CAAE,SAAA,KAAc,mBACf,CAAA,CAAE,SAAA,KAAc,cAAA,IAChB,CAAA,CAAE,cAAc,gBAAA,KAAA,CACjB,CAAA,CAAE,IAAA,IAAQ,EAAA,EAAI,MAAK,KAAM;AAAA,KAC9B,CACC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,SAAS,CAAA,CAAE,EAAA;AAAA,MACX,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,IAAA,EAAM,EAAE,IAAA,IAAQ,EAAA;AAAA,MAChB,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,YAAY,CAAA,CAAE;AAAA,KAChB,CAAE,CAAA;AACJ,IAAA,IAAI,QAAA;AACJ,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,IAAA,CAAK,EAAE,SAAA,KAAc,YAAA,IAAgB,EAAE,SAAA,KAAc,aAAA,KAAkB,EAAE,SAAA,EAAW;AAClF,QAAA,QAAA,GAAW,CAAA,CAAE,SAAA;AAAA,MACf;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,CAAC,CAAC,MAAA,CAAO,cAAA,IAAkB,CAAC,CAAC,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAC,MAAA,CAAO,YAAA;AAC5E,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,MAAA,CAAO,UAAU,MAAA,IAAU,MAAA,CAAO,UAAU,WAAA,IAAe,MAAA,CAAO,UAAU,UAAA,EAAY;AAC1F,MAAA,QAAA,GAAW,SAAS,QAAA,GAAW,UAAA;AAAA,IACjC,CAAA,MAAA,IAAW,MAAA,CAAO,KAAA,KAAU,UAAA,EAAY;AACtC,MAAA,QAAA,GAAW,UAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,MAAA,CAAO,KAAA;AAAA,IACpB;AACA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,QAAA;AAAA,MACX,QAAA;AAAA,MACA,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,SAAA,EAAW,QAAA;AAAA,MACX,QAAA;AAAA,MACA,WAAW;AAAC,KACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,CACE,QAAA,EACA,GAAA,EACA,cAAA,EACoB;AACpB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,GAAA,GAAM,gBAAgB,IAAA,EAAK;AACjC,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,oBAAA,CAAqB,IAAI,GAAG,CAAA;AACxD,MAAA,IAAI,UAAU,OAAO,QAAA;AAAA,IACvB;AACA,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AACjD,MAAA,MAAM,cAAA;AAAA,QACJ,UAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,mFAAA;AAAA,OAChC;AAAA,IACF;AAQA,IAAA,IACE,MAAA,CAAO,UAAU,WAAA,IACjB,MAAA,CAAO,UAAU,UAAA,IACjB,MAAA,CAAO,UAAU,cAAA,EACjB;AACA,MAAA,MAAM,cAAA;AAAA,QACJ,aAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,qDAAA,EAAwD,OAAO,KAAK,CAAA,EAAA;AAAA,OACtE;AAAA,IACF;AACA,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,GAAA,EAAK,MAAM,MAAA,GAAS,CAAA;AAAA,MACpB,SAAA,EAAW,gBAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,YAAY,GAAA;AAAI,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAC1C,IAAA,IAAI,MAAA,CAAO,UAAU,WAAA,EAAa;AAChC,MAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,UAAU,CAAA;AACtC,MAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,MAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,KAAK,IAAA,CAAK,KAAA,CAAM,oBAAA,CAAqB,GAAA,CAAI,KAAK,MAAM,CAAA;AACxD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,CAAe,UAAkB,GAAA,EAAgD;AAC/E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAMpB,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,GAAA,CAAI,eAAe,CAAA;AACrD,MAAA,MAAM,cAAA;AAAA,QACJ,UAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,eAAA,EAAkB,OAAO,KAAK,CAAA,gFAAA;AAAA,OAChC;AAAA,IACF;AAMA,IAAA,IACE,MAAA,CAAO,KAAA,KAAU,cAAA,IACjB,MAAA,CAAO,UAAU,WAAA,IACjB,MAAA,CAAO,KAAA,KAAU,UAAA,IACjB,MAAA,CAAO,KAAA,KAAU,UAAA,IACjB,MAAA,CAAO,UAAU,OAAA,EACjB;AACA,MAAA,MAAM,cAAA;AAAA,QACJ,aAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,oDAAA,EAAuD,OAAO,KAAK,CAAA,+CAAA;AAAA,OACrE;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,QAAA,KAAa,GAAA,CAAI,eAAA,EAAiB;AAC3C,MAAA,MAAM,cAAA;AAAA,QACJ,OAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,IAAI,OAAA,KAAY,MAAA,IAAa,MAAA,CAAO,OAAA,KAAY,IAAI,OAAA,EAAS;AAC/D,MAAA,MAAM,cAAA;AAAA,QACJ,OAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAA,CAAO,QAAA,IAAY,CAAA;AACnB,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,cAAc,CAAA;AAC1C,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,EAAW,MAAA,CAAO,mBAAmB,GAAA,CAAI,OAAA;AAK7D,IAAA,IACE,GAAA,CAAI,SAAS,MAAA,IACb,GAAA,CAAI,SAAS,MAAA,IACb,GAAA,CAAI,IAAA,KAAS,GAAA,CAAI,IAAA,EACjB;AACA,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,IAAA;AACpC,IAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,MAAA,CAAO,kBAAA,GAAqB,WAAA;AAC3D,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,qBAAqB,GAAA,CAAI,IAAA;AAK5D,IAAA,IAAI,GAAA,CAAI,gBAAgB,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,QAAA,EAAU,IAAI,WAAW,CAAA;AAAA,IAC5D;AACA,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,GAAA,EAAK,MAAM,MAAA,GAAS,CAAA;AAAA,MACpB,SAAA,EAAW,aAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,IAAA,EAAM,eAAe,MAAA,CAAO,kBAAA;AAAA,MAC5B,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,GAAA;AAAI,KACjB,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAI1C,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,aAAa,QAAA,EAAsC;AACjD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AACjD,MAAA,MAAM,eAAe,UAAA,EAAY,MAAA,EAAQ,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,WAAW,CAAA;AACvC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,CAAc,UAAkB,GAAA,EAA+C;AAC7E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,oBAAA,CAAqB,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AACjD,MAAA,MAAM,eAAe,UAAA,EAAY,MAAA,EAAQ,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IACpF;AAIA,IAAA,IACE,MAAA,CAAO,KAAA,KAAU,cAAA,IACjB,MAAA,CAAO,KAAA,KAAU,WAAA,IACjB,MAAA,CAAO,KAAA,KAAU,UAAA,IACjB,MAAA,CAAO,KAAA,KAAU,OAAA,EACjB;AACA,MAAA,MAAM,cAAA;AAAA,QACJ,aAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,mDAAA,EAAsD,OAAO,KAAK,CAAA,EAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,kBAAkB,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,sBAAA,CAAuB,IAAA,GAAsD,EAAE,WAAA,EAAa,8BAA6B,EAAW;AAClI,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,WAAA,EAAa;AAAA,MACvD,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,gBAAA;AAAA,MACT,IAAA,EAAM,gCAAA;AAAA,MACN,EAAA,EAAI,CAAC,aAAa,CAAA;AAAA,MAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,qBAAA,EAAuB,MAAM,EAAE,IAAA,EAAM,gBAAe;AAAE,KAC1E,CAAA;AACD,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,WAAW,CAAA;AACvC,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAClC,MAAA,MAAA,CAAO,aAAa,IAAI,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,WAAA,EAAY;AAAA,IAC7D;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAI,MAAM,CAAA;AACxC,IAAA,OAAO,MAAA,CAAO,EAAA;AAAA,EAChB;AAAA;AAAA,EAGA,yBAAyB,QAAA,EAAqD;AAC5E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,IAAK,CAAA;AAC7D,IAAA,MAAM,OAAA,GAAU,CAAA;AAChB,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAE,OAAA,KAAY,KAAA,GAAQ,GAAA;AACnE,IAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,UAAU,EAAE,WAAA,EAAY;AAClD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,EAAI,IAAK,UAAA;AACrC,IAAA,MAAM,gBAAgB,QAAA,IAAY,OAAA;AAClC,IAAA,MAAM,eAAe,aAAA,IAAiB,cAAA;AACtC,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,QAAA,EAAU,OAAA;AAAA,MACV,eAAA,EAAiB,QAAA;AAAA,MACjB,eAAA,EAAiB,cAAA;AAAA,MACjB,cAAA,EAAgB,aAAA;AAAA,MAChB,cAAA,EAAgB,YAAA;AAAA,MAChB,YAAA,EAAc,aAAA,GACV,kBAAA,GACA,cAAA,GACE,wBAAA,GACA;AAAA,KACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAA,CAAe,UAAkB,GAAA,EAAkE;AACjG,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AAC5C,MAAA,MAAM,eAAe,UAAA,EAAY,MAAA,EAAQ,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,WAAA,IAAe,MAAA,CAAO,UAAU,UAAA,EAAY;AAC/D,MAAA,MAAM,cAAA;AAAA,QACJ,aAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAA,mDAAA,EAAsD,OAAO,KAAK,CAAA,GAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,KAAa,GAAA,CAAI,QAAA,EAAU;AACpC,MAAA,MAAM,cAAA;AAAA,QACJ,OAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,IAAI,OAAA,KAAY,MAAA,IAAa,MAAA,CAAO,OAAA,KAAY,IAAI,OAAA,EAAS;AAC/D,MAAA,MAAM,cAAA;AAAA,QACJ,OAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,IAAK,CAAA;AAC7D,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAE,OAAA,KAAY,KAAA,GAAQ,GAAA;AACnE,IAAA,MAAM,cAAA,GAAiB,QAAA,IAAY,CAAA,IAAK,IAAA,CAAK,KAAI,IAAK,UAAA;AAEtD,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,SAAA,IAAa,GAAA,CAAI,WAAW,MAAA,EAAQ;AACrD,MAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAQ;AACzB,QAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,EAAW,MAAA,CAAO,eAAe,GAAA,CAAI,OAAA;AACzD,QAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,iBAAiB,GAAA,CAAI,IAAA;AAAA,MAC1D;AACA,MAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,MAAM,CAAA;AAClC,MAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,MAAA,MAAA,CAAO,eAAA,GAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,KAAK,CAAC,CAAA,WAAA,CAAA;AAGvC,MAAA,MAAA,CAAO,SAAA,GAAY,mBAAA;AACjB,MAAA,MAAA,CAAO,UAAU,GAAA,EAAI;AACvB,MAAA,MAAA,CAAO,aAAa,MAAA,CAAO,OAAA;AAC3B,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,MAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAChC,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,UAAA,EAAY,MAAA,CAAO,eAAA,EAAiB,aAAA,EAAe,KAAA,EAAM;AAAA,IACtG;AAIA,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,cAAc,CAAA;AAC1C,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAW,MAAA,CAAO,oBAAoB,GAAA,CAAI,QAAA;AAC/D,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AAEvC,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,QAAA,IAAY,CAAC,cAAA,EAAgB;AAC9C,MAAA,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,QAAA,EAAU,WAAW,CAAC,CAAA;AAAA,IACvD,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,QAAA,IAAY,cAAA,EAAgB;AACpD,MAAA,eAAA,GAAkB,QAAA,IAAY,IAAI,kBAAA,GAAqB,wBAAA;AAAA,IACzD;AACA,IAAA,OAAO,EAAE,MAAM,eAAA,EAAiB,MAAA,EAAQ,MAAM,KAAA,EAAO,aAAA,EAAe,IAAA,EAAM,iBAAA,EAAmB,eAAA,EAAgB;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,cAAc,QAAA,EAA8B;AAClD,IAAA,MAAMC,IAAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,MAAM,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,OAAK,CAAA,CAAE,WAAA,KAAgB,SAAS,EAAA,IAAM,IAAA,CAAK,MAAM,CAAA,CAAE,UAAU,KAAKA,IAAG,CAAA;AAC1H,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAiB,IAAA,CAAK,OAAO,CAAA,CAAA,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,UAAU,CAAA,IAAKA,IAAAA,GAAM,IAAA,GAAO,KAAU,CAAA,CAAE,MAAA;AACtG,IAAA,OAAO;AAAA,MAAE,GAAG,QAAA;AAAA,MAAU,gBAAA,EAAkB,MAAM,CAAC,CAAA;AAAA,MAAG,iBAAA,EAAmB,MAAM,EAAE,CAAA;AAAA,MAAG,iBAAA,EAAmB,MAAM,EAAE,CAAA;AAAA,MACzG,YAAA,EAAc,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,EAAK,CAAE,KAAA,CAAM,EAAE,CAAA,CAAE,CAAC,CAAA;AAAA,MAC5D,sBAAsB,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,gBAAe,WAAA,EAAY,UAAA,EAAW,UAAA,EAAW,OAAA,EAAQ,UAAU,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE;AAAA,KAAO;AAAA,EAC3I;AAAA,EAEA,cAAA,CAAe,MAAA,GAA+B,EAAC,EAAmB;AAChE,IAAA,IAAI,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,UAAA,CAAW,MAAA,EAAQ,CAAA,CAC3C,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,EAAE,WAAW,CAAA,CAC5B,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,aAAA,CAAc,CAAC,CAAC,EAC9B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AAC1D,IAAA,MAAM,MAAA,GAAA,CAAU,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACpF,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM;AAC1B,QAAA,MAAM,GAAA,GAAM,GAAG,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,WAAW,GAAG,WAAA,EAAY;AACrD,QAAA,OAAO,OAAO,KAAA,CAAM,CAAC,MAAM,GAAA,CAAI,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA,GAAS,EAAE,WAAA,EAAa,kBAAA,EAAoB,YAAA,EAAc,mBAAA,EAAqB,eAAA,EAAiB,sBAAA,EAAuB,CAAY,MAAA,CAAO,IAAqB,CAAA,IAAK,mBAAA;AAC1K,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,IAAA,KAAS,SAAS,CAAA,CAAE,IAAA,CAAK,aAAY,CAAE,aAAA,CAAc,EAAE,IAAA,CAAK,WAAA,EAAa,CAAA,GAAI,MAAA,CAAO,SAAS,WAAA,GAAc,CAAA,GAAA,CAAK,CAAA,CAAE,KAAK,KAAK,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA,CAAA,KAAA,CAAQ,EAAE,YAAA,IAAgB,EAAA,EAAI,cAAc,CAAA,CAAE,YAAA,IAAgB,EAAE,CAAA,IAAK,CAAA,CAAE,GAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AACxQ,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,WAAW,CAAA,CAAE,QAAA,EAAU,EAAE,CAAA,GAAI,CAAA;AAC9F,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,KAAA,GAAQ,OAAO,KAAA,IAAS,GAAA;AACpD,IAAA,MAAM,OAAO,MAAA,GAAS,KAAA,GAAQ,QAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,GAAG,MAAA,GAAS,KAAA,EAAO,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,QAAA,CAAS,WAAW,CAAA,GAAI,MAAA;AACvH,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA,EAAG,KAAA,EAAO,WAAA,EAAa,IAAA,EAAK;AAAA,EAChF;AAAA;AAAA,EAGA,YAAY,UAAA,EAA0C;AACpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,UAAU,CAAA;AACrD,IAAA,OAAO,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA,GAAI,MAAA;AAAA,EACnD;AAAA;AAAA,EAGA,gBAAgB,GAAA,EAAuC;AACrD,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,eAAe,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,IAAA,CAAK,WAAA,EAAa,CAAA,QAAS,IAAI,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,sDAAsD,CAAA;AAC1O,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,kBAAA,EAAoB,CAAA;AAAA,IACzF;AACA,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,MAAM,GAAA,GAAgB;AAAA,MACpB,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,IAAA;AAAA,MACA,WAAA,EAAA,CAAc,GAAA,CAAI,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AAAA,MAC1C,KAAA,EAAO,IAAI,KAAA,IAAS,YAAA;AAAA,MACpB,KAAA,EAAO,YAAA;AAAA,MACP,mBAAA,EAAqB,UAAA;AAAA,MACrB,WAAA,EAAa,OAAA;AAAA,MACb,eAAA,EAAiB,CAAA;AAAA,MACjB,aAAA,EAAe,CAAA;AAAA,MACf,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,IAAI,GAAG,CAAA;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,cAAA,CAAe,YAAoB,GAAA,EAAkD;AACnF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,IAAI,IAAI,IAAA,KAAS,MAAA,MAAe,IAAA,GAAO,GAAA,CAAI,KAAK,IAAA,EAAK;AACrD,IAAA,IAAI,IAAI,WAAA,KAAgB,MAAA,MAAe,WAAA,GAAc,GAAA,CAAI,YAAY,IAAA,EAAK;AAC1E,IAAA,GAAA,CAAI,aAAa,GAAA,EAAI;AACrB,IAAA,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,IAAI,GAAG,CAAA;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAmC;AACzC,IAAA,OAAO;AAAA,MACL,cAAA,EAAgB,GAAA;AAAA,MAChB,kBAAA,EAAoB,IAAA;AAAA,MACpB,kBAAA,EAAoB,CAAA;AAAA,MACpB,WAAA,EAAa,IAAA;AAAA,MACb,sBAAA,EAAwB,EAAA;AAAA,MACxB,sBAAA,EAAwB,EAAA;AAAA,MACxB,qBAAA,EAAuB;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAAwB;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,WAAA,EAAY;AACjC,IAAA,MAAM,aAAa,CAAC,GAAG,KAAK,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,CAClD,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,WAAW,CAAA,CAC5B,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,aAAa,CAAA,CAAE,EAAA;AAAA,MACf,cAAA,EAAgB,IAAA;AAAA,MAChB,kBAAA,EAAoB,IAAA;AAAA,MACpB,kBAAA,EAAoB,IAAA;AAAA,MACpB,WAAA,EAAa,IAAA;AAAA,MACb,sBAAA,EAAwB,IAAA;AAAA,MACxB,sBAAA,EAAwB,IAAA;AAAA,MACxB,SAAA,EAAW,EAAE,GAAG,OAAA;AAAQ,KAC1B,CAAE,CAAA;AACJ,IAAA,OAAO,EAAE,SAAS,UAAA,EAAW;AAAA,EAC/B;AAAA,EAEQ,oBAAoB,KAAA,EAAkC;AAC5D,IAAA,IAAI,KAAA,KAAU,cAAc,OAAO,aAAA;AACnC,IAAA,IAAI,KAAA,KAAU,eAAe,OAAO,aAAA;AACpC,IAAA,OAAO,EAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,UAAA,EAAkD;AACpE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,KAAK,CAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,KAAK,IAAA,CAAK,sBAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAA;AACf,IAAA,MAAM,cAAc,YAAA,IAAgB,MAAA;AACpC,IAAA,MAAM,cACJ,IAAA,KAAS,aAAA,GAAgB,IAAA,GAAO,IAAA,KAAS,gBAAgB,WAAA,GAAc,KAAA;AACzE,IAAA,OAAO;AAAA,MACL,aAAa,GAAA,CAAI,EAAA;AAAA,MACjB,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,UAAA,EAAY,IAAA;AAAA,MACZ,cAAA,EAAgB,KAAA;AAAA,MAChB,oBAAA,EAAsB,CAAA;AAAA,MACtB,wBAAwB,IAAA,CAAK,sBAAA;AAAA,MAC7B,aAAA,EAAe,YAAA;AAAA,MACf,SAAA,EAAW,CAAA;AAAA,MACX,wBAAwB,IAAA,CAAK,sBAAA;AAAA,MAC7B,OAAA,EAAS,MAAA;AAAA,MACT,iBAAA,EAAmB,WAAA;AAAA,MACnB,WAAA,EAAa,CAAA;AAAA,MACb,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,CAAkB,YAAoB,IAAA,EAA8D;AAClG,IAAA,OAAO,IAAA,CAAK,oBAAoB,UAAU,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,UAAA,EAAmD;AACtE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,QAAO,EAAG;AAChD,MAAA,IACE,MAAA,CAAO,WAAA,KAAgB,UAAA,KACtB,MAAA,CAAO,KAAA,KAAU,cAAA,IAChB,MAAA,CAAO,KAAA,KAAU,WAAA,IACjB,MAAA,CAAO,KAAA,KAAU,UAAA,CAAA,EACnB;AACA,QAAA,MAAA,IAAU,CAAA;AAAA,MACZ;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,aAAa,GAAA,CAAI,EAAA;AAAA,MACjB,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,MAAA;AAAA,MACA,cAAA,EAAgB,MAAA;AAAA,MAChB,KAAA,EAAO,CAAA;AAAA,MACP,gCAAgC,GAAA,CAAI,aAAA;AAAA,MACpC,2BAAA,EAA6B,CAAA;AAAA,MAC7B,mBAAA,EAAqB;AAAA,KACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,UAAA,EAAqD;AAC1E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,MAAM,eAAA,GAAkB,CAAA;AACxB,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,QAAO,EAAG;AAChD,MAAA,IACE,MAAA,CAAO,WAAA,KAAgB,UAAA,KACtB,MAAA,CAAO,KAAA,KAAU,cAAA,IAChB,MAAA,CAAO,KAAA,KAAU,WAAA,IACjB,MAAA,CAAO,KAAA,KAAU,UAAA,CAAA,EACnB;AACA,QAAA,SAAA,CAAU,IAAA,CAAK,OAAO,EAAE,CAAA;AAAA,MAC1B;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAsB,SAAA,CAAU,GAAA,CAAI,CAAC,IAAI,CAAA,MAAO;AAAA,MACpD,SAAA,EAAW,EAAA;AAAA,MACX,KAAA,EAAO,CAAA,GAAI,eAAA,GAAkB,iBAAA,GAAoB;AAAA,KACnD,CAAE,CAAA;AACF,IAAA,OAAO;AAAA,MACL,aAAa,GAAA,CAAI,EAAA;AAAA,MACjB,qBAAA,EAAuB,CAAA;AAAA,MACvB,gBAAA,EAAkB,eAAA;AAAA,MAClB,gBAAA,EAAkB,EAAA;AAAA,MAClB,qBAAA,EAAuB,GAAA;AAAA,MACvB,QAAQ,SAAA,CAAU,MAAA;AAAA,MAClB,SAAA,EAAW,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,QAAQ,eAAe,CAAA;AAAA,MACrD,UAAA,EAAY,CAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKQ,SAAS,CAAA,EAAmB;AAClC,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,CAAA,GAAI,CAAA;AACrC,IAAA,MAAM,OAAO,CAAA,CAAE,cAAA,GAAiB,IAAI,CAAA,CAAE,KAAA,KAAU,aAAa,CAAA,GAAI,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,WAAA,KAAgB,OAAA,GAAU,CAAA,GAAI,CAAA;AAC9C,IAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA,CAAE,GAAA,EAAK,EAAE,QAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,QAAA,CAAS,MAAA,GAAyB,EAAC,EAAiB;AAClD,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,IAAA,CAAK,MAAM,KAAA,CAAM,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ,CAAA;AACjF,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,EAAS,CAAA,KAAoB;AAC3C,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC1B,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC1B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,MAAA,EAAQ,KAAK,CAAA,EAAG;AACrC,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,IAAK,CAAA;AACpB,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAC,CAAA,IAAK,CAAA;AACpB,QAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,EAAA,GAAK,EAAA;AAAA,MAC7B;AACA,MAAA,OAAO,CAAA,CAAE,EAAA,GAAK,CAAA,CAAE,EAAA,GAAK,EAAA,GAAK,CAAA;AAAA,IAC5B,CAAA;AACA,IAAA,IAAI,UAAkB,EAAC;AACvB,IAAA,IAAI,WAAmB,EAAC;AACxB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,UAAU,SAAA,EAAW;AAC/C,MAAA,OAAA,GAAU,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,EAAE,KAAA,KAAU,SAAS,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,OAAO,WAAA,KAAgB,CAAC,OAAO,KAAA,IAAS,MAAA,CAAO,UAAU,UAAA,CAAA,EAAa;AACxE,MAAA,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,UAAA,IAAc,CAAA,CAAE,WAAA,KAAgB,MAAA,CAAO,WAAW,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,IAC7G;AACA,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,EAAU,GAAG,OAAO,CAAA;AACtC,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,mBAAA,EAAqB,CAAA;AAAA,MACrB,sBAAA,EAAwB,MAAA,CAAO,WAAA,GAAc,CAAA,GAAI,CAAA;AAAA,MACjD,eAAA,EAAiB,MAAA,CAAO,WAAA,GAAc,CAAA,GAAI,CAAA;AAAA,MAC1C,mBAAmB,MAAA,CAAO,KAAA,GAAQ,SAAY,CAAA,YAAA,EAAe,MAAA,CAAO,eAAe,SAAS,CAAA,CAAA;AAAA,MAC5F,4BAAA,EAA8B,MAAA,CAAO,KAAA,GAAQ,MAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,GAAI,GAAO,CAAA,CAAE,WAAA;AAAY,KACtG;AAAA,EACF;AAAA,EAIA,eAAA,CAAgB,UAAkB,GAAA,EAAgD;AAChF,IAAA,MAAM,cAAc,IAAA,CAAK,SAAA,CAAU,EAAC,QAAA,EAAU,KAAI,CAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,SAAS,CAAA;AACjD,IAAA,IAAI,KAAA,EAAO;AAAE,MAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,WAAA,EAAa,MAAM,IAAI,eAAA,CAAgB,EAAC,MAAA,EAAO,GAAA,EAAI,IAAA,EAAK,UAAA,EAAW,OAAA,EAAQ,mCAAkC,CAAA;AAAG,MAAA,OAAO,eAAA,CAAgB,MAAM,MAAM,CAAA;AAAA,IAAG;AAC7L,IAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAI,QAAQ,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,IAAI,cAAc,CAAA;AAC/F,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,eAAe,OAAA,IAAW,CAAC,KAAK,QAAA,EAAU,MAAM,IAAI,eAAA,CAAgB,EAAC,MAAA,EAAO,GAAA,EAAI,MAAK,iBAAA,EAAkB,OAAA,EAAQ,kDAAiD,CAAA;AAClL,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,EAAC,GAAG,KAAK,KAAA,EAAM,GAAA,CAAI,MAAA,KAAW,UAAA,GAAa,aAAa,SAAA,EAAW,gBAAA,EAAiB,UAAS,cAAA,EAAe,IAAA,CAAK,IAAG,CAAA;AAC/I,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,EAAA;AAC3B,IAAA,IAAA,CAAK,UAAA,GAAa,GAAA,CAAI,MAAA,KAAW,WAAA,GAAc,KAAA,GAAQ,SAAA;AACvD,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA,CAAK,UAAA;AAC5C,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAA;AACxB,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,EAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,SAAA,KAAc,KAAK,EAAE,CAAA;AAC1F,IAAA,KAAA,CAAM,UAAA,GAAa,iBAAiB,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAA4B,EAAC,IAAA,EAAM,gBAAA,EAAiB,UAAU,cAAA,EAAe,IAAA,CAAK,EAAA,EAAI,QAAA,EAAS,KAAK,QAAA,EAAU,QAAA,EAAS,KAAA,CAAM,EAAA,EAAI,aAAY,QAAA,EAAQ;AAC3J,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,SAAA,EAAU,EAAC,aAAY,MAAA,EAAO,eAAA,CAAgB,MAAM,CAAA,EAAE,CAAA;AAChF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,SAAS,GAAA,EAA4B;AACnC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,CAAU,IAAA,EAAK;AAChC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,uBAAA,EAAyB,CAAA;AAAA,IAC9F;AACA,IAAA,MAAM,UAAA,GAAA,CAAc,GAAA,CAAI,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AAChD,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,KAAU,UAAA,GAAa,UAAA,GAAa,SAAA,CAAA;AACtD,IAAA,IAAI,KAAA,KAAU,aAAa,UAAA,EAAY;AACrC,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,qCAAA,EAAuC,CAAA;AAAA,IAC5G;AACA,IAAA,IAAI,KAAA,KAAU,UAAA,IAAc,CAAC,UAAA,EAAY;AACvC,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,uCAAA,EAAyC,CAAA;AAAA,IAC9G;AACA,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,IAAI,IAAI,aAAA,EAAe;AACrB,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAI,aAAa,CAAA;AACpD,MAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,gBAAA,EAAkB,CAAA;AACjG,MAAA,KAAA,CAAM,MAAA,GAAS,YAAA;AACf,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,KAAK,CAAA;AACpC,MAAA,MAAM,IAAA,GAAa;AAAA,QACjB,GAAG,KAAA;AAAA,QACH,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,QACd,GAAA,EAAK,MAAM,GAAA,GAAM,CAAA;AAAA,QACjB,SAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,KAAA,CAAM,IAAA;AAAA,QACxB,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,QAChC,MAAA,EAAQ,QAAA;AAAA,QACR,eAAe,KAAA,CAAM,EAAA;AAAA,QACrB,WAAA,EAAa,OAAA;AAAA,QACb,UAAA,EAAY,EAAA;AAAA,QACZ,UAAA,EAAY;AAAA,OACd;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,MAAA,IAAA,CAAK,eAAA,CAAgB,aAAa,IAAA,CAAK,EAAA,EAAI,iBAAiB,KAAK,CAAA,EAAG,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAC1F,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,IAAA,GAAa;AAAA,MACjB,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,UAAA,EAAY,IAAI,KAAK,CAAA;AAAA,MACrB,GAAA,EAAK,CAAA;AAAA;AAAA;AAAA,MAGL,UAAA,EAAY,SAAA;AAAA,MACZ,MAAA,EAAQ,WAAA;AAAA,MACR,UAAA,EAAY,eAAA;AAAA,MACZ,KAAA;AAAA,MACA,WAAA,EAAa,KAAA,KAAU,UAAA,GAAa,UAAA,GAAa,MAAA;AAAA,MACjD,cAAA,EAAgB,IAAI,cAAA,IAAkB,MAAA;AAAA,MACtC,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAI,IAAA,IAAQ,MAAA;AAAA,MAClB,QAAA,EAAU,IAAI,QAAA,IAAY,CAAA;AAAA,MAC1B,MAAA,EAAQ,QAAA;AAAA,MACR,WAAA,EAAa,OAAA;AAAA,MACb,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,gBAAgB,QAAA,EAAU,IAAA,CAAK,IAAI,IAAA,EAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,WAAA,CAAY,QAAgB,OAAA,EAAmD;AAC7E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,OAAA,EAAS,OAAO,KAAA;AACpC,IAAA,IAAI,OAAA,KAAY,UAAA,IAAc,CAAC,KAAA,CAAM,WAAA,EAAa;AAChD,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,sCAAA,EAAwC,CAAA;AAAA,IAC7G;AACA,IAAA,KAAA,CAAM,MAAA,GAAS,YAAA;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,KAAK,CAAA;AACpC,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,MAAM,IAAA,GAAa;AAAA,MACjB,GAAG,KAAA;AAAA,MACH,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,UAAA,EAAY,IAAI,KAAK,CAAA;AAAA,MACrB,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,WAAA,EAAa,OAAA,KAAY,UAAA,GAAa,KAAA,CAAM,WAAA,GAAc,MAAA;AAAA,MAC1D,MAAA,EAAQ,QAAA;AAAA,MACR,eAAe,KAAA,CAAM,EAAA;AAAA,MACrB,WAAA,EAAa,OAAA;AAAA,MACb,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,eAAA,CAAgB,aAAa,IAAA,CAAK,EAAA,EAAI,iBAAiB,KAAK,CAAA,EAAG,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,MAAA,EAAkC;AAC3C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,MAAM,CAAA;AACxC,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,SAAA,EAAW,OAAO,IAAA;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,IAAA,IAAA,CAAK,aAAa,GAAA,EAAI;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,eAAA,CAAgB,UAAU,IAAA,CAAK,EAAA,EAAI,iBAAiB,IAAI,CAAA,EAAG,gBAAA,CAAiB,IAAI,CAAC,CAAA;AACtF,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,YAAA,CAAa,MAAA,GAA6B,EAAC,EAAyB;AAClE,IAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,WAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AACtG,IAAA,IAAI,MAAA,CAAO,WAAA,EAAa,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,MAAA,CAAO,WAAW,CAAA;AACxF,IAAA,IAAI,MAAA,CAAO,SAAA,EAAW,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,MAAA,CAAO,SAAS,CAAA;AAClF,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA,EAGA,eAAe,KAAA,EAAqB;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,KAAK,CAAA;AAC5C,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,qBAAA,EAAuB,CAAA;AACtG,IAAA,IAAI,KAAA,CAAM,gBAAgB,MAAA,EAAQ;AAChC,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,wCAAA,EAA0C,CAAA;AAAA,IAC/G;AACA,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,gBAAA,EAAkB,CAAA;AACtG,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,MAAM,SAAS,CAAA;AACjD,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,qBAAA,EAAuB,CAAA;AACrG,IAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,IAAI,KAAK,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,eAAe,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AACd,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAI,IAAI,CAAA;AAClC,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,MAAM,QAAA,GAAiB;AAAA,MACrB,GAAG,IAAA;AAAA,MACH,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,GAAA,EAAK,KAAK,GAAA,GAAM,CAAA;AAAA,MAChB,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA,MACpC,MAAA,EAAQ,MAAA,CAAO,SAAA,GAAY,QAAA,GAAW,SAAA;AAAA,MACtC,eAAe,IAAA,CAAK,EAAA;AAAA,MACpB,UAAA,EAAY,EAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,IAAI,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,eAAA,CAAgB,WAAW,QAAA,CAAS,EAAA,EAAI,iBAAiB,IAAI,CAAA,EAAG,gBAAA,CAAiB,QAAQ,CAAC,CAAA;AAC/F,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA,EAGQ,eAAA,CAAgB,MAAA,EAAkC,QAAA,EAAkB,MAAA,EAAgB,KAAA,EAAqB;AAC/G,IAAA,MAAM,KAAA,GAAwB;AAAA,MAC5B,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,WAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,QAAA;AAAA,MACX,MAAA;AAAA,MACA,UAAA,EAAY,OAAA;AAAA,MACZ,QAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,UAAA,EAAY,KAAA;AAAA,MACZ,MAAA,EAAQ,KAAA;AAAA,MACR,YAAY,GAAA;AAAI,KAClB;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAA,CACN,QAAA,EACA,MAAA,EACA,OAAA,EACa;AACb,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,aAAa,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,MAAM,EAAA,GAAkB;AAAA,MACtB,GAAA,EAAK,IAAA,GAAO,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,CAAA;AAAA,MAC3B,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,MAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,aAAa,MAAA,EAAQ,WAAA;AAAA,MACrB,OAAA;AAAA,MACA,YAAY,GAAA;AAAI,KAClB;AACA,IAAA,IAAA,CAAK,KAAK,EAAE,CAAA;AACZ,IAAA,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAC1C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,qBAAqB,MAAA,EAAyC;AACpE,IAAA,QAAQ,OAAO,KAAA;AAAO,MACpB,KAAK,MAAA;AAAA,MACL,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,OAAA,GAAmC;AAAA,UACvC,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,UAAA,EAAY,OAAO,eAAA,IAAmB,EAAA;AAAA,UACtC,SAAA,EAAW,OAAO,SAAA,IAAa,EAAA;AAAA,UAC/B,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,GAAA;AAAI,SACjC;AACA,QAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAQ;AAI3B,UAAA,OAAA,CAAQ,WACN,MAAA,CAAO,cAAA,IAAkB,OAAO,YAAA,IAAgB,MAAA,CAAO,eACnD,QAAA,GACA,UAAA;AAAA,QACR,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,YAAA,GAAe,OAAO,YAAA,IAAgB,EAAA;AAAA,QAChD;AACA,QAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,EAAA,EAAI,QAAQ,OAAO,CAAA;AAAA,MAC3D;AAAA,MACA,KAAK,QAAA;AAIH,QAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,EAAA,EAAI,aAAA,EAAe;AAAA,UACvD,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO,OAAO,UAAA,IAAc,EAAA;AAAA,UAC5B,eAAA,EAAiB,KAAA;AAAA,UACjB,WAAA,EAAa;AAAA,SACd,CAAA;AAAA,MACH,KAAK,WAAA;AACH,QAAA,OAAO,IAAA,CAAK,mBAAmB,MAAA,CAAO,EAAA,EAAI,aAAa,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,MAC/E;AACE,QAAA,OAAO,MAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,oBAAA,CAAqB,QAAgB,cAAA,EAA8B;AACzE,IAAA,MAAM,GAAA,GAAM,YAAY,MAAA,CAAO,EAAE,IAAI,MAAA,CAAO,KAAK,IAAI,cAAc,CAAA,CAAA;AACnE,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CAAM,YAAA,CAAa,IAAI,MAAA,CAAO,EAAE,KAAK,EAAC;AACxD,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,gBAAA,IAAoB,CAAA,CAAE,OAAA,EAAS,UAAA,KAAe,GAAG,CAAA,EAAG;AACtF,IAAA,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,EAAA,EAAI,gBAAA,EAAkB;AAAA,MACnD,UAAA,EAAY,GAAA;AAAA,MACZ,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,iBAAiB,MAAA,CAAO,eAAA;AAAA,MACxB,oBAAA,EAAsB,cAAA;AAAA,MACtB,kBAAkB,MAAA,CAAO,QAAA;AAAA,MACzB,cAAA,EAAA,CAAiB,MAAA,CAAO,YAAA,IAAgB,EAAA,EAAI,MAAK,KAAM;AAAA,KACxD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAA,CAAuB,QAAA,EAAkB,IAAA,GAA6B,EAAC,EAAuB;AAC5F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,MAAA,CAAO,cAAA,GAAiB,MAAA,CAAO,kBAAA;AAChD,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,MAAM,CAAA;AAClC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,eAAA,GAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,KAAK,CAAC,CAAA,WAAA,CAAA;AACvC,IAAA,MAAA,CAAO,SAAA,GAAY,gBAAA;AACnB,IAAA,MAAA,CAAO,UAAU,GAAA,EAAI;AACrB,IAAA,MAAA,CAAO,aAAa,MAAA,CAAO,OAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAA,CAAmB,QAAA,EAAkB,KAAA,GAAQ,+BAAA,EAAqD;AAChG,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,QAAQ,CAAA;AACpC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,UAAA,GAAa,KAAA;AACpB,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,qBAAqB,MAAM,CAAA;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAA,CAAuB,QAAA,EAAkB,OAAA,GAAU,iBAAA,EAAgC;AACjF,IAAA,OAAO,IAAA,CAAK,mBAAmB,QAAA,EAAU,UAAA,EAAY,EAAE,QAAA,EAAU,UAAA,EAAY,SAAS,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,QAAA,EAAsC;AACzD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,WAAW,CAAA;AACvC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,MAAA,CAAO,aAAa,GAAA,EAAI;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA;AACvC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAA,CAAqB,UAAkB,IAAA,EAAsC;AAC3E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,GAAA,CAAI,QAAQ,KAAK,EAAC;AACvD,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,GAAA,EAAK,MAAM,MAAA,GAAS,CAAA;AAAA,MACpB,SAAA,EAAW,eAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,QAAA,EAAU,WAAA;AAAA,MACV,IAAA;AAAA,MACA,YAAY,GAAA;AAAI,KAClB;AACA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,gBAAA,CAAiB,MAAA,GAAiC,EAAC,EAAuB;AACxE,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK;AACpC,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,CAAA,IAAK,IAAA,CAAK,MAAM,YAAA,EAAc;AACtD,MAAA,IAAI,IAAA,IAAQ,aAAa,IAAA,EAAM;AAC/B,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA,IAAK,CAAA;AAC7D,MAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,QAAA,IAAI,EAAA,CAAG,MAAM,KAAA,EAAO;AAClB,UAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AACd,UAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,SAAA,IAAa,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,aAAa,EAAE,CAAA,IAAK,CAAA,CAAE,GAAA,GAAM,EAAE,GAAG,CAAA;AAC3F,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AACnF,IAAA,MAAM,UAAU,CAAC,GAAG,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,MAC9C,SAAA,EAAW,QAAA;AAAA,MACX,gBAAgB,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA,IAAK;AAAA,KACjE,CAAE,CAAA;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAQ;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAA,CAAmB,MAAA,GAAmC,EAAC,EAAuB;AAC5E,IAAA,OAAO,IAAA,CAAK,iBAAiB,EAAE,SAAA,EAAW,OAAO,SAAA,EAAW,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,EACnF;AAAA;AAAA,EAGA,eAAe,GAAA,EAAkD;AAC/D,IAAA,MAAM,UAA2D,EAAC;AAClE,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,IAAA,IAAQ,EAAC,EAAG;AAC9B,MAAA,MAAM,QAAA,GAAW,CAAA,CAAE,SAAA,EAAW,IAAA,EAAK;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA,IAAK,CAAA;AAC5D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,EAAE,WAAW,CAAA;AACzC,MAAA,IAAA,CAAK,KAAA,CAAM,kBAAA,CAAmB,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,EAAE,SAAA,EAAW,QAAA,EAAU,cAAA,EAAgB,MAAM,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,EAAE,OAAA,EAAQ;AAAA,EACnB;AAAA;AAAA,EAGQ,kBAAA,CACN,SACA,IAAA,EAaQ;AACR,IAAA,MAAM,EAAA,GAAK,IAAI,IAAI,CAAA;AACnB,IAAA,MAAM,UAAU,GAAA,EAAI;AACpB,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,QAAA;AAC1B,IAAA,MAAM,MAAA,GAAiB;AAAA,MACrB,EAAA;AAAA,MACA,KAAA,EAAO,cAAA;AAAA,MACP,IAAA;AAAA,MACA,cAAA,EAAgB,IAAA;AAAA,MAChB,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,IAAI,KAAK,CAAA;AAAA,MACnB,aAAa,IAAA,CAAK,UAAA;AAAA,MAClB,cAAA,EAAgB,IAAA,CAAK,MAAA,EAAQ,OAAA,IAAW,EAAA;AAAA,MACxC,WAAA,EAAa,KAAK,MAAA,EAAQ,IAAA;AAAA,MAC1B,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,CAAA;AAAA,MACT,kBAAkB,IAAA,CAAK,OAAA;AAAA,MACvB,oBAAoB,IAAA,CAAK,IAAA;AAAA,MACzB,oBAAoB,IAAA,CAAK,IAAA;AAAA,MACzB,aAAa,IAAA,CAAK,EAAA;AAAA,MAClB,aAAa,IAAA,CAAK,EAAA;AAAA,MAClB,cAAc,IAAA,CAAK,GAAA;AAAA,MACnB,UAAA,EAAY,OAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AACjC,IAAA,MAAM,QAAsB,EAAC;AAC7B,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAK,EAAG;AAChC,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,QACd,GAAA,EAAK,MAAM,MAAA,GAAS,CAAA;AAAA,QACpB,SAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAY,OAAA;AAAA,QACZ,IAAA,EAAM,KAAK,MAAA,CAAO,OAAA;AAAA,QAClB,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QAC3B,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AACA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,IAAI,MAAM,CAAA;AAAA,MACd,GAAA,EAAK,MAAM,MAAA,GAAS,CAAA;AAAA,MACpB,SAAA,EAAW,aAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACb,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AACpC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGQ,aAAA,CACN,SACA,IAAA,EAWS;AACT,IAAA,MAAM,EAAA,GAAK,IAAI,KAAK,CAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAe;AAAA,MACnB,EAAA;AAAA,MACA,WAAW,IAAA,CAAK,QAAA;AAAA,MAChB,KAAA,EAAO,OAAO,OAAA,IAAW,OAAA;AAAA,MACzB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,IAAA,EAAM,KAAA,EAAO,YAAA,GACT,EAAE,OAAO,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,YAAA,EAAa,GAC7C,EAAE,KAAA,EAAO,KAAK,IAAA,EAAK;AAAA,MACvB,EAAA,EAAI,KAAK,EAAA,CAAG,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,OAAM,CAAE,CAAA;AAAA,MACtC,EAAA,EAAA,CAAK,IAAA,CAAK,EAAA,IAAM,EAAC,EAAG,IAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAM,CAAE,CAAA;AAAA,MAC9C,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,IAAA,EAAM,KAAK,IAAA,IAAQ,IAAA;AAAA,MACnB,cAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,IAAK,IAAA;AAAA,MACpC,cAAA,EAAgB,IAAA,CAAK,IAAA,EAAM,IAAA,EAAK,IAAK,IAAA;AAAA,MACrC,UAAA,EAAY,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,kBAAkB,CAAA,CAAA,CAAA;AAAA,MACjE,MAAA,EAAQ,IAAA,CAAK,SAAA,KAAc,SAAA,GAAY,OAAA,GAAU,MAAA;AAAA,MACjD,IAAA,EAAM,KAAK,SAAA,KAAc,UAAA;AAAA,MACzB,MAAM,GAAA;AAAI,KACZ;AACA,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,CAAI,OAAO,KAAK,EAAC;AACjD,IAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AACZ,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,GAAG,CAAA;AACpC,IAAA,IAAI,KAAK,SAAA,KAAc,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,oBAAoB,GAAG,CAAA;AACxE,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACnD,MAAA,MAAM,SAA6B,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,QACjE,IAAA,EAAM;AAAA,UACJ,EAAA,EAAI,CAAA,IAAA,EAAO,CAAA,GAAI,CAAC,IAAI,EAAE,CAAA,CAAA;AAAA,UACtB,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,YAAA,EAAc,EAAE,YAAA,IAAgB,0BAAA;AAAA,UAChC,IAAA,EAAM,gBAAA,CAAiB,CAAA,CAAE,cAAc;AAAA,SACzC;AAAA,QACA,gBAAgB,CAAA,CAAE;AAAA,OACpB,CAAE,CAAA;AACF,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,EAAA,EAAI,MAAM,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,SAAA,EAAqC;AACnD,IAAA,IAAA,CAAK,WAAW,SAAS,CAAA;AACzB,IAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,SAAS,CAAA,IAAK,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7E,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA,EAGA,aAAA,CAAc,WAAmB,YAAA,EAA0C;AACzE,IAAA,MAAM,MAAA,GAAA,CAAU,KAAK,KAAA,CAAM,WAAA,CAAY,IAAI,SAAS,CAAA,IAAK,EAAC,EAAG,IAAA;AAAA,MAC3D,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,EAAA,KAAO;AAAA,KACvB;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAE,CAAA;AACpE,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAAA,MACtB,YAAA,EAAc,OAAO,IAAA,CAAK,YAAA;AAAA,MAC1B,gBAAgB,MAAA,CAAO;AAAA,KACzB;AAAA,EACF;AAAA,EAEA,YAAA,CAAa,OAAA,EAAiB,MAAA,GAA6B,EAAC,EAAkB;AAC5E,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,KAAA,GAAQ,CAAC,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,IAAK,EAAG,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,CAAA,EAAG,CAAA,KACjE,EAAE,IAAA,CAAK,aAAA,CAAc,EAAE,IAAI;AAAA,KAC7B;AACA,IAAA,IAAI,MAAA,CAAO,QAAQ,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAI,CAAA;AACtD,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,WAAA,EAAY;AAClC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,EAAA,CAAG,WAAA,EAAY;AAChC,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA;AAAA,IACjF;AACA,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAY;AACrC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAwB,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AACnD,IAAA,IAAI,MAAA,GAAS,KAAK,MAAA,GAAS,KAAA,SAAc,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA;AAClF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,SAAA,EAA4B;AACrC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,QAAO,EAAG;AAC/C,MAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACjD,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,EACnD;AAAA;AAAA,EAGA,QAAA,CAAS,WAAmB,IAAA,EAAwB;AAClD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACrC,IAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AACX,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,cAAc,SAAA,EAA2B;AACvC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACnC,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,EAAA,CAAG,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA,GAAM,EAAE,IAAA,CAAK,KAAA;AACvE,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,IAAA,IAAQ,EAAA;AACjC,IAAA,MAAM,WAAA,GAAc,CAAA,CAAE,IAAA,KAAS,IAAA,GAAO,YAAA,GAAe,WAAA;AACrD,IAAA,OAAO;AAAA,MACL,SAAS,IAAI,CAAA,CAAA;AAAA,MACb,OAAO,EAAE,CAAA,CAAA;AAAA,MACT,CAAA,SAAA,EAAY,EAAE,OAAO,CAAA,CAAA;AAAA,MACrB,CAAA,YAAA,EAAe,EAAE,UAAU,CAAA,CAAA;AAAA,MAC3B,CAAA,MAAA,EAAS,EAAE,IAAI,CAAA,CAAA;AAAA,MACf,mBAAA;AAAA,MACA,iBAAiB,WAAW,CAAA,eAAA,CAAA;AAAA,MAC5B,EAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,MAAM,CAAA;AAAA,EACf;AAAA;AAAA,EAGA,cAAA,CAAe,SAAiB,MAAA,EAA6C;AAC3E,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,WAAA,EAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,IAAK,EAAG,CAAA,CACvD,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAA,CAAE,OAAA,CAAQ,WAAA,GAAc,QAAA,CAAS,CAAC,CAAA,IAClC,CAAC,EAAE,IAAA,EAAM,CAAA,CAAE,IAAI,CAAA,CACZ,MAAA,CAAO,CAAC,IAAA,KAAyB,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,MAAA,GAAS,CAAC,EAC5E,IAAA,CAAK,IAAI,EACT,WAAA,EAAY,CACZ,QAAA,CAAS,CAAC,KACb,CAAA,CAAE,IAAA,CAAK,MAAM,WAAA,EAAY,CAAE,SAAS,CAAC;AAAA,KACzC,CACC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAC9C,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAwB,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AACnD,IAAA,IAAI,MAAA,GAAS,KAAK,MAAA,GAAS,KAAA,SAAc,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA;AAClF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,MAAA,GAA4B,EAAC,EAAiB;AACzE,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,aAAA,CAAc,SAAiB,MAAA,EAA4C;AACzE,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,WAAA,EAAY;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,CAAE,MAAA;AAAA,MACrC,CAAC,CAAA,KACC,CAAA,CAAE,OAAA,CAAQ,WAAA,GAAc,QAAA,CAAS,CAAC,CAAA,IAClC,CAAA,CAAE,OAAA,CAAQ,WAAA,GAAc,QAAA,CAAS,CAAC,CAAA,IAClC,CAAA,CAAE,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC;AAAA,KACrD;AACA,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AAAA,EAC3C;AAAA,EAEQ,eAAA,CACN,OACA,MAAA,EACc;AACd,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,IAAA,MAAM,eAAe,MAAA,CAAO,MAAA,KAAW,SAAY,MAAA,GAAY,MAAA,CAAO,OAAO,MAAM,CAAA;AACnF,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,KAAW,OAAO,QAAA,CAAS,YAAY,IAAI,YAAA,GAAgB,CAAA,CAAA;AACjF,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAuB,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAClD,IAAA,IAAI,MAAA,GAAS,KAAK,MAAA,GAAS,KAAA,SAAc,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA;AAClF,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAA,CAAU,SAAiB,QAAA,EAAgC;AACzD,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,IAAK,EAAC,EACpD,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,QAAQ,CAAA,CACtC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAC9C,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAE,CAAA;AAC1E,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,WAAA,CAAY,SAAS,QAAA,EAAU,QAAQ,GAAG,QAAA,EAAS;AAAA,EACtE;AAAA,EAEA,aAAA,CAAc,SAAiB,YAAA,EAA8C;AAC3E,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAA,CAAW,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,OAAO,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,kBAAkB,YAAY,CAAA;AAC3G,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,IAAA,OAAO;AAAA,MAAE,aAAA,EAAe,YAAA;AAAA,MAAc,KAAA,EAAO,OAAA;AAAA,MAAS,iBAAiB,OAAA,CAAQ,EAAA;AAAA,MAAI,gBAAA,EAAkB,QAAA;AAAA,MACnG,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,EAAC;AAAA,MAAG,UAAA,EAAY,CAAC,GAAG,OAAA,CAAQ,IAAI,GAAI,OAAA,CAAQ,MAAM,EAAG,EAAE,GAAA,CAAI,CAAC,EAAE,KAAA,EAAM,MAAO,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,UAAA,EAAW,CAAE,CAAA;AAAA,MACnJ,YAAY,OAAA,CAAQ,IAAA;AAAA,MAAM,YAAY,OAAA,CAAQ;AAAA,KAAK;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAA,CAAc,OAAA,EAAiB,SAAA,EAAmB,OAAA,EAA4C;AAC5F,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,CAAI,OAAO,KAAK,EAAC;AAClD,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AAC/C,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,MAAM,IAAA,GAAO,OAAA,IAAW,GAAA,CAAI,MAAA,KAAW,OAAA;AACvC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,SAAS,CAAC,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,MAAA,GAAS,OAAA;AAAA,IACf;AACA,IAAA,OAAO,EAAE,IAAI,SAAA,EAAW,OAAA,EAAS,MAAM,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA,EAAE;AAAA,EAClE;AAAA;AAAA,EAGA,YAAA,CAAa,OAAA,EAAiB,QAAA,EAAkB,OAAA,EAA4C;AAC1F,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,CAAI,OAAO,KAAK,EAAC;AAClD,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,QAAQ,CAAA;AAC5D,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAClC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,QAAQ,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,CAAA,CAAE,MAAA,GAAS,OAAA;AAAA,IACvC;AACA,IAAA,OAAO,EAAE,IAAI,QAAA,EAAU,OAAA,EAAS,MAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,QAAA,CAAS,MAAA,EAAO;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAA,CACE,OAAA,EACA,GAAA,EACA,IAAA,EACA,MAAA,EAC+B;AAC/B,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,OAAO,MAAA;AACpC,IAAA,MAAM,OAAO,IAAI,GAAA,CAAA,CAAK,KAAK,KAAA,CAAM,QAAA,CAAS,IAAI,OAAO,CAAA,IAAK,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,EAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AACnF,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,MAAA,IAAI,CAAC,CAAA,EAAG;AACN,QAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AACd,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,CAAA,CAAE,IAAA,GAAO,IAAA;AACjC,MAAA,IAAI,MAAA,IAAU,MAAA,GAAS,MAAA;AACvB,MAAA,OAAA,CAAQ,KAAK,EAAE,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAAA,EAC3B;AAAA;AAAA,EAGQ,WAAW,OAAA,EAA2B;AAC5C,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAuB;AAC5C,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,CAAM,QAAA,CAAS,IAAI,OAAO,CAAA,IAAK,EAAC,EAAG;AACtD,MAAA,MAAM,MAAM,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,SAAS,KAAK,EAAC;AAC1C,MAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,MAAA,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,GAAG,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,QAAQ,CAAC,GAAG,SAAS,OAAA,EAAS,EAAE,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,EAAE,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,EAAA,EAAI,EAAA,EAAI,IAAI,CAAC,CAAA;AAC/F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,eAAA,CAAgB,aAAA,CAAc,CAAA,CAAE,eAAe,CAAC,CAAA;AACvE,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,WAAA,CAAY,OAAA,EAAiB,EAAA,EAAY,EAAA,EAAeC,WAAU,KAAA,EAAe;AACvF,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,EAAE,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAClE,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACrC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,MAAM,mBAAA,GAAsBA,QAAAA,GAAU,CAAC,IAAI,CAAA,GAAI,MAAA;AAC/C,IAAA,KAAA,MAAW,KAAK,mBAAA,EAAqB;AACnC,MAAA,KAAA,MAAW,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,GAAG,EAAE,EAAA,EAAI,GAAI,CAAA,CAAE,EAAA,IAAM,EAAC,EAAI,GAAI,EAAE,QAAA,IAAY,EAAG,CAAA,EAAG;AACzE,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY;AAChC,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,QAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,QAAA,YAAA,CAAa,IAAA,CAAK,CAAA,CAAE,IAAA,GAAO,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAA,CAAA,GAAM,CAAA,CAAE,KAAK,CAAA;AAAA,MAC/D;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,UAAU,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,CAAI,OAAO,GAAG,OAAA,IAAW,OAAA;AAAA,MACtD,SAAS,sBAAA,CAAuB,MAAA,CAAO,CAAC,CAAA,EAAG,WAAW,cAAc,CAAA;AAAA,MACpE,YAAA;AAAA,MACA,eAAe,MAAA,CAAO,MAAA;AAAA,MACtB,iBAAiB,IAAA,CAAK,IAAA;AAAA,MACtB,OAAA,EAAA,CAAU,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAQ,EAAA,EAAI,KAAA,CAAM,GAAG,GAAG,CAAA;AAAA,MACpD,MAAA,EAAQ,CAAC,IAAA,CAAK,IAAA;AAAA,MACd,4BAAA,EAAA,CAA+B,KAAK,KAAA,CAAM,WAAA,CAAY,IAAI,IAAA,CAAK,EAAE,CAAA,EAAG,MAAA,IAAU,CAAA,IAAK,CAAA;AAAA,MACnF,iBAAiB,IAAA,CAAK;AAAA,KACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CAAa,OAAA,EAAiB,GAAA,EAAuD;AACzF,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5C,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,GAAQ,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AACxD,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,MAAM,GAAA,CAAI,eAAA,IAAmB,OAAO,GAAI,CAAA;AACjE,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,OAAO,CAAC,CAAA;AAC/C,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,CAAK,KAAA,CAAM,MAAS,IAAA,CAAK,MAAA,EAAO,GAAI,GAAM,CAAC,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,oBAAA;AACzB,IAAA,MAAM,IAAA,GAAO,kCAAkC,IAAI,CAAA;;AAAA,+CAAA,EAAiF,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA;AAC7I,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,IAAW,wBAAA;AAC/B,IAAA,IAAI,KAAA,IAAS,CAAC,KAAA,CAAM,IAAA,CAAK,GAAG,OAAO;AAAA,EAAK,IAAI,EAAE,CAAA,EAAG;AAC/C,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAW,EAAE,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK,EAAE;AAAA,IAChF;AACA,IAAA,MAAM,OAAA,GAAmB;AAAA,MACvB,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,SAAA,EAAW,IAAI,KAAK,CAAA;AAAA,MACpB,KAAA,EAAO,OAAO,OAAA,IAAW,OAAA;AAAA,MACzB,SAAA,EAAW,SAAA;AAAA,MACX,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,MAAM,MAAA,EAAO;AAAA,MAClC,EAAA,EAAI,CAAC,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,MACvB,IAAI,EAAC;AAAA,MACL,OAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAM,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAC,CAAA,IAAA,CAAA;AAAA,MACxC,cAAA,EAAgB,IAAA;AAAA,MAChB,gBAAgB,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAC,CAAA,IAAA,CAAA;AAAA,MAClD,UAAA,EAAY,CAAA,CAAA,EAAI,GAAA,CAAI,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,MAC1B,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,MAAM,GAAA;AAAI,KACZ;AACA,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,SAAS,GAAA,CAAI,OAAO,KAAK,EAAC;AACtD,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,SAAA,CAAU,oBAAoB,OAAO,CAAA;AAC1C,IAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,SAAS,SAAA,EAAW,kBAAA,CAAmB,OAAO,CAAA,EAAE;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAA,CAAU,OAAe,OAAA,EAAwB;AACvD,IAAA,MAAM,GAAA,GAAM,EAAE,IAAA,CAAK,KAAA,CAAM,QAAA;AACzB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK;AAAA,MACrB,KAAA;AAAA,MACA,GAAA;AAAA,MACA,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,YAAY,GAAA,EAAI;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,YAAA,CACL,OAAA,EACA,WAAA,EAC4C;AAC5C,IAAA,MAAM,QAAQ,WAAA,IAAe,CAAA;AAG7B,IAAA,MAAM,QAAQ,OAAA,KAAY,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAC3D,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AAClC,MAAA,IAAI,EAAA,CAAG,OAAO,KAAA,EAAO;AACrB,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,EAAA,CAAG,KAAA,KAAU,KAAA,EAAO;AAC1C,MAAA,MAAM,EAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,gBAAgB,GAAA,EAAsC;AAEpD,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,IAAI,SAAS,CAAA;AACjE,MAAA,MAAM,WAAW,UAAA,GAAa,IAAA,CAAK,MAAM,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA;AACpE,MAAA,IAAI,QAAA,EAAU,OAAO,EAAE,GAAG,QAAA,EAAS;AAAA,IACrC;AACA,IAAA,MAAM,EAAA,GAAK,IAAI,IAAI,CAAA;AACnB,IAAA,MAAM,OAAA,GAAmB;AAAA,MACvB,EAAA;AAAA,MACA,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,CAAC,kBAAkB,CAAA;AAAA,MACzC,KAAA,EAAO,IAAI,KAAA,IAAS,IAAA;AAAA,MACpB,QAAA,EAAU,KAAK,KAAA,CAAM,MAAA,CAAO,MAAK,CAAE,IAAA,GAAO,KAAA,IAAS,UAAA;AAAA,MACnD,MAAA,EAAQ,CAAA,MAAA,EAAS,GAAA,CAAI,GAAG,EAAE,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,MACtD,aAAA,EAAe,SAAS,GAAA,CAAI,GAAG,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MAC5C,MAAA,EAAQ,IAAA;AAAA,MACR,YAAY,GAAA;AAAI,KAClB;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA;AACnC,IAAA,IAAI,GAAA,CAAI,WAAW,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAA,CAAI,GAAA,CAAI,WAAW,EAAE,CAAA;AAErE,IAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,YAAA,CAAa,MAAA,GAA6B,EAAC,EAAkB;AAC3D,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAC,CAAA;AAC1E,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA;AACtG,IAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAC,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,wBAAwB,CAAA;AACpG,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,MAAA,CAAO,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,CAAA;AAChE,IAAA,MAAM,IAAA,GAAO,SAAS,KAAA,GAAQ,KAAA,CAAM,SAAS,CAAA,SAAA,EAAY,MAAA,GAAS,KAAK,CAAA,CAAA,GAAK,MAAA;AAC5E,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,QAAQ,QAAA,EAAU,CAAC,CAAC,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,EAChH;AAAA;AAAA,EAGA,WAAW,SAAA,EAAwC;AACjD,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,SAAS,CAAA;AAC3C,IAAA,OAAO,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,GAAI,MAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAA,CAAc,WAAmB,GAAA,EAAgD;AAC/E,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,SAAS,CAAA;AAC3C,IAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,IAAA,IAAI,GAAA,CAAI,GAAA,KAAQ,MAAA,EAAW,CAAA,CAAE,MAAM,GAAA,CAAI,GAAA;AACvC,IAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAC5B,MAAA,CAAA,CAAE,SAAS,GAAA,CAAI,MAAA,CAAO,SAAS,GAAA,CAAI,MAAA,GAAS,CAAC,kBAAkB,CAAA;AAAA,IACjE;AACA,IAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW,CAAA,CAAE,QAAQ,GAAA,CAAI,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,GAAA,CAAI,KAAA;AACrE,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,EAAW,CAAA,CAAE,SAAS,GAAA,CAAI,MAAA;AAC7C,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,CAAC,CAAA;AACpC,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AAAA;AAAA,EAGA,cAAc,SAAA,EAA4B;AACxC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA,EAKA,mBAAA,CAAoB,SAAiB,GAAA,EAA0D;AAC7F,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,CAAI,OAAO,GAAG,OAAO,MAAA;AAC7C,IAAA,MAAM,KAAA,GAA0B;AAAA,MAC9B,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,KAAA,EAAO,OAAA;AAAA,MACP,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAA,EAAW,IAAI,SAAA,IAAa,MAAA;AAAA,MAC5B,OAAA,EAAS,uBAAA,CAAwB,GAAA,CAAI,OAAO,CAAA;AAAA,MAC5C,YAAY,GAAA;AAAI,KAClB;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,IAAI,KAAK,CAAA;AAC3C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAM;AAAA,EACpB;AAAA;AAAA,EAGA,iBAAiB,OAAA,EAAqD;AACpE,IAAA,OAAA,GAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAQ,GAAA,CAAI,OAAO,GAAG,OAAO,MAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,YAAA,CAAa,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAClD,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,IAAA,IAAQ,EAAE,KAAA,KAAU;AAAA,KACzC;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA,EAGA,sBAAA,CAAuB,UAAkB,OAAA,EAA0B;AACjE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,OAAO,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA,EAKA,cAAc,GAAA,EAAmC;AAG/C,IAAA,kBAAA,CAAmB,IAAI,UAAU,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,IAAA,GAAO,WAAA,EAAY;AAC3C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC5C,IAAA,IAAI,QAAA,EAAU,OAAO,EAAE,GAAG,QAAA,EAAS;AACnC,IAAA,MAAM,IAAA,GAAO,cAAA;AACb,IAAA,MAAM,MAAA,GAAiB;AAAA,MACrB,EAAA,EAAI,IAAI,KAAK,CAAA;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA;AAAA,MACA,mBAAA,EAAqB,WAAA;AAAA,MACrB,WAAA,EAAa,YAAA;AAAA,MACb,MAAA,EAAQ,KAAA;AAAA,MACR,YAAY,GAAA,EAAI;AAAA,MAChB,aAAA,EAAe,mBAAmB,IAAI,CAAA;AAAA,MACtC,WAAA,EAAa,qHAAA;AAAA,MACb,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ,iBAAA;AAAA,QAAmB,KAAA,EAAO,iBAAA;AAAA,QAAmB,OAAA,EAAS,0HAAA;AAAA,QAC9D,MAAA,EAAQ,yBAAA;AAAA,QAA2B,kBAAA,EAAoB,UAAA;AAAA,QAAY,WAAA,EAAa,mBAAA;AAAA,QAChF,iBAAA,EAAmB,KAAA;AAAA,QAAO,kBAAA,EAAoB,EAAA;AAAA,QAC9C,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,eAAA,EAAiB,CAAA;AAAE;AACnF,KACF;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AACnC,IAAA,OAAO,EAAE,GAAG,MAAA,EAAO;AAAA,EACrB;AAAA;AAAA,EAGA,WAAA,GAA4B;AAC1B,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,aAAA,CAAc,CAAC,CAAC,CAAA;AAC1E,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AAAA,EACtC;AAAA;AAAA,EAGA,UAAU,MAAA,EAAoC;AAC5C,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAC5D,IAAA,OAAO,CAAA,GAAI,EAAE,GAAG,CAAA,EAAE,GAAI,MAAA;AAAA,EACxB;AAAA;AAAA,EAGA,aAAa,MAAA,EAAoC;AAC/C,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA;AAC5D,IAAA,OAAO,CAAA,GAAI,EAAE,GAAG,CAAA,EAAE,GAAI,MAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,MAAA,EAAyB;AACtC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACvC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,IAAI,CAAA;AAC5C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAK,GAAA,EAAI;AACf,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA,EAAI;AAAA,QAC1C,MAAA,EAAQ,KAAA;AAAA,QACR,EAAA,EAAI,gBAAgB,IAAI,CAAA,CAAA;AAAA,QACxB,IAAA,EAAM,iBAAA;AAAA,QACN,MAAA,EAAQ,WAAA;AAAA,QACR,UAAA,EAAY,EAAA;AAAA,QACZ,UAAA,EAAY,EAAA;AAAA,QACZ,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,KAAA,EAAgC;AACrC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,KAAK,CAAA;AACrC,IAAA,OAAO,GAAA,GAAM,EAAE,GAAG,GAAA,EAAI,GAAI,MAAA;AAAA,EAC5B;AAAA;AAAA,EAIA,YAAY,GAAA,EAAsC;AAChD,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,IAAA,GAAO,WAAA,EAAY;AAC7C,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA;AAAA,MACA,SAAA,EAAW,CAAC,MAAA,CAAO,UAAA,CAAW,cAAc,CAAA;AAAA,MAC5C,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa,IAAA;AAAA,MACb,aAAA,EAAe,IAAA;AAAA,MACf,OAAA,EAAS,KAAA;AAAA,MACT,gBAAA,EAAkB,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,KAAQ,EAAA,GAAK,EAAA,GAAK,GAAI,CAAA,CAAE,WAAA,EAAY;AAAA,MACpE,UAAU;AAAC,KACb;AAAA,EACF;AAAA,EAEA,sBAAsB,GAAA,EAAoD;AACxE,IAAA,MAAM,IAAA,GAAO,CAAA,gBAAA,EAAmB,GAAA,CAAI,eAAA,CAAgB,MAAM,CAAA,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,qBAAA,CAAsB,IAAI,IAAI,CAAA;AAC1D,IAAA,IAAI,QAAA,SAAiB,EAAE,GAAG,KAAK,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACrE,IAAA,MAAM,QAAQ,IAAA,CAAK,WAAA,CAAY,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AACrD,IAAA,MAAM,YAAY,GAAA,EAAI;AACtB,IAAA,MAAM,EAAA,GAAK,IAAI,MAAM,CAAA;AACrB,IAAA,MAAM,WAAA,GAAc,+CAA+C,EAAE,CAAA,CAAA;AACrE,IAAA,MAAM,OAAA,GAA2B;AAAA,MAC/B,MAAA,EAAQ,kBAAA;AAAA,MACR,EAAA;AAAA,MACA,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO,yBAAA;AAAA,MACP,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,YAAA,EAAc,IAAI,KAAA,IAAS,KAAA;AAAA,MAC3B,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,UAAA,EAAY,IAAI,UAAA,IAAc,IAAA;AAAA,MAC9B,YAAA,EAAc,yBAAA;AAAA,MACd,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAS,kEAAA;AAAA,UACT,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,YAAA,EAAc,WAAA;AAAA,MACd,iBAAA,EAAmB,2EAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,kBAAA,EAAoB,EAAA;AAAA,MACpB,OAAA,EAAS,CAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,qBAAA,CAAsB,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAC7C,IAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,kBAAkB,GAAA,EAAgD;AAChE,IAAA,MAAM,IAAA,GAAO,CAAA,YAAA,EAAe,GAAA,CAAI,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,qBAAA,CAAsB,IAAI,IAAI,CAAA;AAC1D,IAAA,IAAI,QAAA,SAAiB,EAAE,GAAG,KAAK,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACrE,IAAA,MAAM,YAAY,GAAA,EAAI;AACtB,IAAA,MAAM,EAAA,GAAK,IAAI,MAAM,CAAA;AACrB,IAAA,MAAM,WAAA,GAAc,+CAA+C,EAAE,CAAA,CAAA;AACrE,IAAA,MAAM,OAAA,GAA2B;AAAA,MAC/B,MAAA,EAAQ,kBAAA;AAAA,MACR,EAAA;AAAA,MACA,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,yBAAA;AAAA,MACP,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,YAAA,EAAc,WAAA;AAAA,MACd,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa,CAAA;AAAA,MACb,aAAA,EAAe,CAAA;AAAA,MACf,UAAA,EAAY,IAAA;AAAA,MACZ,YAAA,EAAc,yBAAA;AAAA,MACd,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAS,8DAAA;AAAA,UACT,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA,YAAA,EAAc,WAAA;AAAA,MACd,iBAAA,EAAmB,2EAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,kBAAA,EAAoB,EAAA;AAAA,MACpB,OAAA,EAAS,CAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,qBAAA,CAAsB,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAC7C,IAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,mBAAmB,SAAA,EAAgD;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,IAAI,SAAS,CAAA;AACzD,IAAA,OAAO,OAAA,GAAU,EAAE,GAAG,OAAA,EAAQ,GAAI,MAAA;AAAA,EACpC;AAAA,EAEA,sBAAsB,SAAA,EAAgD;AACpE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,gBAAA,CAAiB,IAAI,SAAS,CAAA;AACzD,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,IAAA,IAAI,CAAC,CAAC,yBAAA,EAA2B,SAAA,EAAW,UAAA,EAAY,yBAAA,EAA2B,gBAAgB,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC5H,MAAA,MAAM,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,yCAAA,EAA2C,CAAA;AAAA,IACjH;AACA,IAAA,OAAA,CAAQ,KAAA,GAAQ,WAAA;AAChB,IAAA,OAAA,CAAQ,YAAA,GAAe,MAAA;AACvB,IAAA,OAAA,CAAQ,WAAW,EAAC;AACpB,IAAA,OAAA,CAAQ,iBAAA,GAAoB,sFAAA;AAC5B,IAAA,OAAA,CAAQ,OAAA,IAAW,CAAA;AACnB,IAAA,OAAA,CAAQ,aAAa,GAAA,EAAI;AACzB,IAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,oBAAA,CAAqB,MAAA,GAAqC,EAAC,EAA0B;AACnF,IAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,KAAA,CAAM,gBAAA,CAAiB,QAAQ,CAAA;AACpD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AAC7D,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,EAAE,CAAA,IAAK,CAAC,CAAA,GAAI,CAAA;AAClF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,MAAA,CAAO,KAAA,IAAS,EAAA,EAAI,GAAG,CAAC,CAAA;AAC3D,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,MAAa,EAAE,GAAG,SAAQ,CAAE,CAAA;AAClF,IAAA,MAAM,IAAA,GAAO,SAAS,IAAA,CAAK,MAAA;AAC3B,IAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,WAAA,EAAa,OAAO,KAAA,GAAQ,MAAA,CAAO,IAAI,CAAA,GAAI,MAAA,EAAU;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,SAAA,EAAwC;AAC1D,IAAA,MAAM,SAAA,GAAY,mBAAmB,SAAS,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,aAAa,MAAA,EAAQ,CAAA,CAC9C,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,SAAA,KAAc,SAAS,CAAA,CACrD,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAE,CAAE,CAAA;AACxB,IAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,YAAY,IAAA,CAAK,MAAA,GAAS,GAAG,IAAA,EAAK;AAAA,EACnE;AAAA;AAAA,EAGA,iBAAiB,MAAA,EAAwD;AACvE,IAAA,IAAI,OAAO,CAAC,GAAG,KAAK,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA;AAC/C,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAK,CAAA;AACpE,IAAA,IAAI,CAAC,MAAA,CAAO,eAAA,EAAiB,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAO,CAAA;AACjE,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5D,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,EAAE,CAAA,IAAK,CAAC,CAAA,GAAI,CAAA;AACtF,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,GAAE,CAAE,CAAA;AACtE,IAAA,MAAM,IAAA,GAA+B,EAAE,KAAA,EAAO,KAAA,EAAM;AACpD,IAAA,IAAI,MAAA,GAAS,MAAM,MAAA,GAAS,KAAA,OAAY,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,MAAM,CAAA;AAClF,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAA,CAAkB,IAAY,MAAA,EAA8C;AAC1E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAI,EAAE,CAAA;AAG1C,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,UAAU,KAAA,IAAS,GAAA,CAAI,SAAS,OAAO,MAAA;AACvD,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AACd,IAAA,GAAA,CAAI,aAAa,GAAA,EAAI;AACrB,IAAA,GAAA,CAAI,UAAA,GAAa,gBAAA;AACjB,IAAA,GAAA,CAAI,aAAA,GAAgB,MAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,EAAA,EAAI,GAAG,CAAA;AACnC,IAAA,OAAO,EAAE,GAAG,GAAA,EAAI;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAmB,UAAA,EAA4B;AACrD,IAAA,MAAM,SAAS,IAAI,GAAA;AAAA,MACjB,CAAC,GAAG,IAAA,CAAK,MAAM,YAAA,CAAa,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,EAAE,OAAO,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,SAAS;AAAA,KACxF;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,MAAA,MAAM,SAAA,GAAY,mBAAmB,IAAI,CAAA;AACzC,MAAA,IAAI,SAAA,IAAa,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAAA,IACxF;AACA,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,wBAAA,CAAyB;AAAA,MACjC,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,sBAAA;AAAA,MACN,OAAA,EAAS,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,mDAAA,CAAA;AAAA,MACtB,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,qDAAA;AAAA,QACN,KAAA,EAAO,sBAAA;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,+DAAA;AAAA,QACR,MAAA,EAAQ,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,sBAAA,EAAwB,MAAA,EAAQ,CAAA,EAAE,CAAE;AAAA;AAC1F,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAA,CAAkB,MAAc,UAAA,EAA4B;AAClE,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,CAAK,MAAM,YAAA,CAAa,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MACpD,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,WAAW,CAAA,CAAE,KAAA,KAAU,IAAA,IAAQ,CAAA,CAAE,KAAA,KAAU,IAAA;AAAA,KACpE;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AACvD,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AACvD,IAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,MAAA,MAAM,IAAA,GAAO,wBAAwB,IAAI,CAAA;AACzC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,oBAAoB,CAAA,CAAE,OAAA,EAAS,IAAI,CAAC,CAAA,EAAG;AAC5D,QAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,UACxB,MAAA,EAAQ,GAAA;AAAA,UACR,IAAA,EAAM,mBAAA;AAAA,UACN,OAAA,EAAS,GAAG,IAAI,CAAA,gBAAA;AAAA,SACjB,CAAA;AAAA,MACH;AACA,MAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,OAAA,EAAS,IAAI,CAAC,CAAA,EAAG;AAClF,QAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,UACxB,MAAA,EAAQ,GAAA;AAAA,UACR,IAAA,EAAM,mBAAA;AAAA,UACN,OAAA,EAAS,GAAG,IAAI,CAAA,yBAAA;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,mBAAmB,GAAA,EAAqB;AAC/C,EAAA,IAAI,KAAA,GAAQ,IAAI,IAAA,EAAK;AACrB,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA;AACjC,EAAA,IAAI,KAAK,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,GAAQ,EAAE,CAAC,CAAA;AAC1B,EAAA,OAAO,MAAM,SAAA,CAAU,KAAK,CAAA,CAAE,IAAA,GAAO,WAAA,EAAY;AACnD;AAMA,SAAS,wBAAwB,GAAA,EAAqB;AACpD,EAAA,IAAI,KAAA,GAAQ,IAAI,IAAA,EAAK;AACrB,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA;AACjC,EAAA,IAAI,KAAK,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,GAAQ,EAAE,CAAC,CAAA;AAC1B,EAAA,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACjC,EAAA,OAAO,MAAM,UAAA,CAAW,GAAG,IAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA;AAClD;AAMA,SAAS,mBAAA,CAAoB,SAAiB,IAAA,EAAuB;AACnE,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,EAAM,OAAO,KAAA;AAC9B,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,SAAU,OAAA,KAAY,IAAA;AAC9C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAC/B,EAAA,MAAM,SAAS,EAAA,IAAM,CAAA,GAAI,KAAK,KAAA,CAAM,EAAA,GAAK,CAAC,CAAA,GAAI,IAAA;AAC9C,EAAA,OAAO,MAAA,KAAW,OAAA;AACpB;AAGA,SAAS,aAAa,CAAA,EAAqB;AACzC,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAG,MAAK,GAAI,CAAA;AACnC,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,mBAAmB,MAAA,EAAgC;AAC1D,EAAA,OAAO;AAAA,IACL,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAO,mBAAA,EAAqB,KAAK,GAAA,EAAI;AAAA,IACjE,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAO,mBAAA,EAAqB,KAAK,GAAA;AAAI,GACnE;AACF;AAGA,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,aAAA,EAAe,IAAI,WAAA,EAAa,EAAA,EAAI,GAAG,IAAA,EAAK,GAAI,CAAA;AACrE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAU,OAAA,EAAyB;AAC1C,EAAA,OAAO,OAAA,CAAQ,KAAK,OAAO,CAAA,GAAI,UAAU,CAAA,IAAA,EAAO,sBAAA,CAAuB,OAAO,CAAC,CAAA,CAAA;AACjF;AAEA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,OAAO,SAAA,CAAU,KAAK,OAAO,CAAA,GAAI,UAAU,CAAA,KAAA,EAAQ,sBAAA,CAAuB,OAAO,CAAC,CAAA,CAAA;AACpF;AAGA,SAAS,uBAAuB,OAAA,EAAyB;AACvD,EAAA,IAAI,CAAA,GAAI,QAAQ,IAAA,EAAK;AACrB,EAAA,WAAS;AACP,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,CAAQ,sBAAA,EAAwB,EAAE,CAAA;AACjD,IAAA,IAAI,SAAS,CAAA,EAAG;AAChB,IAAA,CAAA,GAAI,IAAA;AAAA,EACN;AACA,EAAA,OAAO,EAAE,IAAA,EAAK;AAChB;AAEA,SAAS,iBAAiB,OAAA,EAAyB;AACjD,EAAA,MAAM,mBAAA,GAAsB,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,mBAAA,GAAsB,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,OAAA;AACxD,EAAA,OAAO,IAAI,MAAA,CAAO,MAAA,EAAQ,mBAAA,GAAsB,MAAM,MAAS,CAAA;AACjE;AAGA,SAAS,iBAAiB,GAAA,EAAqB;AAC7C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AACzC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,GAAI,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,GAAI,CAAA;AACrE,EAAA,OAAO,KAAK,KAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAK,CAAC,CAAA,GAAI,OAAA;AAC9C;;;ACr3GO,SAAS,iBAAiB,OAAA,EAAiD;AAChF,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,MAAA;AAC7C,EAAA,OAAO,OAAA,CAAQ,KAAK,GAAG,CAAA;AACzB;;;ACmTA,SAAS,sBAA8D,GAAA,EAAoC;AACzG,EAAA,MAAM,EAAE,eAAA,EAAiB,WAAA,EAAa,GAAG,MAAK,GAAI,GAAA;AAClD,EAAA,OAAO,IAAA;AACT;AAQA,SAAS,cAAiD,GAAA,EAAW;AACnE,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AACxE,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,SAAS,GAAA,EAA2C;AAC3D,EAAA,OAAO,aAAA,CAAc;AAAA,IACnB,GAAG,sBAAsB,GAAG,CAAA;AAAA,IAC5B,EAAA,EAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,IACtB,EAAA,EAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,IACtB,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,GAAG;AAAA,GACzB,CAAA;AACH;AAGA,SAAS,UAAU,GAAA,EAA4C;AAC7D,EAAA,OAAO,aAAA,CAAc;AAAA,IACnB,GAAG,sBAAsB,GAAG,CAAA;AAAA,IAC5B,EAAA,EAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,IACtB,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,GAAG;AAAA,GACzB,CAAA;AACH;AAGA,SAAS,YAAY,GAAA,EAA8C;AACjE,EAAA,OAAO,aAAA,CAAc;AAAA,IACnB,GAAG,sBAAsB,GAAG,CAAA;AAAA,IAC5B,EAAA,EAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,IACtB,EAAA,EAAI,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,IACtB,GAAA,EAAK,WAAA,CAAY,GAAA,CAAI,GAAG;AAAA,GACzB,CAAA;AACH;AAGO,IAAM,gBAAN,MAAyC;AAAA,EAC9C,YAA6B,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,sBAAsB,OAAA,EAAkD;AAC5E,IAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAQ,IAAA,EAAM,OAAA,CAAQ,MAAM,KAAA,EAAO,OAAA,CAAQ,OAAO,IAAA,EAAM,OAAA,CAAQ,MAAM,MAAA,EAAQ,OAAA,CAAQ,QAAQ,SAAA,EAAW,OAAA,CAAQ,WAAW,KAAA,EAAM;AACpK,IAAA,IAAI,QAAQ,cAAA,KAAmB,QAAA,SAAiB,IAAA,CAAK,IAAA,CAAK,QAAQ,OAAO,CAAA;AACzE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAwB,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,CAAA;AACnF,IAAA,OAAO,EAAE,YAAA,EAAc,MAAA,CAAO,WAAA,EAAa,cAAA,EAAgB,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,EAAG,QAAA,EAAU,uBAAA,CAAwB,MAAA,CAAO,kBAAkB,CAAA,EAAE;AAAA,EACvJ;AAAA,EAEQ,cAAc,OAAA,EAAyB;AAC7C,IAAA,OAAO,mBAAmB,OAAO,CAAA;AAAA,EACnC;AAAA,EAEQ,KAAQ,IAAA,EAAkC;AAChD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAW,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,GAAA,EAAK,cAAA,EAAgB,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC3G;AAAA,EAEA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,mBAAA,EAAqB,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,CAAA;AAAA,EACnF;AAAA,EAEA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,kBAAA,EAAoB,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,CAAA;AAAA,EAClF;AAAA,EAEA,OAAO,MAAA,EAAuC;AAC5C,IAAA,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,aAAA,EAAe,QAAQ,CAAA;AAAA,EACjE;AAAA,EAEA,WAAA,CAAY,GAAA,EAAyB,cAAA,EAAyB,MAAA,EAAsC;AAClG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,cAAA,EAAgB,kBAAkB,GAAA,CAAI,SAAA;AAAA,MACtC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,MAAA,EAA4C;AACvF,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,aAAA,EAAe,OAAO,EAAE,GAAG,MAAA,EAAO,EAAG,QAAQ,CAAA;AACzG,IAAA,OAAO,mBAA0B,GAAG,CAAA;AAAA,EACtC;AAAA,EAEA,QAAA,CAAS,SAAiB,MAAA,EAAsC;AAC9D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AAAA,EAChG;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,GAAA,EAAyB,MAAA,EAAsC;AAC1F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA;AAAA,MAChD,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAqC;AACtE,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AAAA,EAClG;AAAA;AAAA,EAIA,oBAAA,CACE,SAAA,EACA,GAAA,EACA,cAAA,EACA,MAAA,EACgB;AAChB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA;AAAA,MACnD,IAAA,EAAM,GAAA;AAAA,MACN,cAAA,EAAgB,kBAAkB,GAAA,CAAI,SAAA;AAAA,MACtC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CACE,SAAA,EACA,MAAA,EACA,MAAA,EACsB;AACtB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA;AAAA,MACnD,KAAA,EAAO;AAAA,QACL,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,OAAA,EAAS,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA;AAAA,QACxC,QAAQ,MAAA,CAAO;AAAA,OACjB;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,iBAAA,CACE,SAAA,EACA,OAAA,EACA,MAAA,EACA,MAAA,EACgB;AAChB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAC1F,OAAO,EAAE,OAAA,EAAS,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA,EAAE;AAAA,MACnD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CACE,SAAA,EACA,OAAA,EACA,GAAA,EACA,MAAA,EACgB;AAChB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAC1F,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,oBAAA,CAAqB,SAAA,EAAmB,OAAA,EAAiB,MAAA,EAAqC;AAClG,IAAA,MAAM,KAAK,IAAA,CAAK;AAAA,MACd,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAC1F;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,4BAAA,CACE,SAAA,EACA,OAAA,EACA,MAAA,EAC2B;AAC3B,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,YAAA,CAAA;AAAA,MAC1F;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,IAAA,CAAK,OAAA,EAAiB,GAAA,EAAkB,MAAA,EAA4C;AAClF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,MAChD,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,MAClB,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,KAAA,CAAM,OAAA,EAAiB,GAAA,EAAmB,MAAA,EAA4C;AACpF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,MAChD,IAAA,EAAM,UAAU,GAAG,CAAA;AAAA,MACnB,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,CAAQ,OAAA,EAAiB,SAAA,EAAmB,GAAA,EAAqB,MAAA,EAA4C;AAC3G,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA;AAAA,MAC1F,IAAA,EAAM,YAAY,GAAG,CAAA;AAAA,MACrB,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,YAAA,CAAa,OAAA,EAAiB,MAAA,EAA4B,MAAA,EAA8C;AACtG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,SAAA,CAAA;AAAA,MAChD,KAAA,EAAO,EAAE,GAAG,MAAA,EAAO;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,UAAA,CAAW,WAAmB,MAAA,EAAwC;AACpE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EACnG;AAAA,EAEA,aAAA,CAAc,OAAA,EAAiB,SAAA,EAAmB,MAAA,EAAuC;AACvF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,IAAA,CAAA;AAAA,MAC1F,GAAA,EAAK,IAAA;AAAA,MACL;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,eAAA,CAAgB,OAAA,EAAiB,SAAA,EAAmB,MAAA,EAAiD;AACnG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,YAAA,CAAA;AAAA,MAC1F;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAA,CACJ,OAAA,EACA,SAAA,EACA,cACA,MAAA,EAC6B;AAC7B,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAwB;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AAAA,MAC1I,MAAA,EAAQ,IAAA;AAAA,MACR;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,uBAAA,CAAwB,GAAA,CAAI,kBAAkB,CAAA;AAAA,MACxD,cAAc,GAAA,CAAI,WAAA;AAAA,MAClB,cAAA,EAAgB,aAAA,CAAc,GAAA,CAAI,KAAK;AAAA,KACzC;AAAA,EACF;AAAA,EAEA,QAAA,CAAS,OAAA,EAAiB,SAAA,EAAmB,GAAA,EAAsB,MAAA,EAAwC;AACzG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MAC1F,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,aAAA,CACE,OAAA,EACA,SAAA,EACA,OAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MAC1F,KAAA,EAAO,OAAA,GAAU,EAAE,OAAA,EAAS,MAAK,GAAI,MAAA;AAAA,MACrC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,mBAAA,CACE,OAAA,EACA,GAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,eAAA,CAAA;AAAA,MAChD,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,OAAA,EAAiB,MAAA,EAA8B,MAAA,EAA8C;AAC1G,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,gBAAA,CAAA;AAAA,MAChD,KAAA,EAAO,EAAE,GAAG,MAAA,EAAO;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CAAY,OAAA,EAAiB,MAAA,EAA2B,MAAA,EAA6C;AACnG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,QAAA,CAAA;AAAA,MAChD,KAAA,EAAO,EAAE,GAAG,MAAA,EAAO;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,aAAA,CAAc,OAAA,EAAiB,MAAA,EAA8B,MAAA,EAA6C;AACxG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,eAAA,CAAA;AAAA,MAChD,KAAA,EAAO,EAAE,GAAG,MAAA,EAAO;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,SAAA,CAAU,OAAA,EAAiB,QAAA,EAAkB,MAAA,EAA6C;AACxF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxF;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,aAAA,CAAc,OAAA,EAAiB,YAAA,EAAsB,MAAA,EAA2C;AAC9F,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AAAA,EAChJ;AAAA,EACA,sBAAA,CAAuB,SAAA,EAAmB,OAAA,EAAiB,YAAA,EAAsB,MAAA,EAA2C;AAC1H,IAAA,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,CAAA,aAAA,EAAgB,mBAAmB,SAAS,CAAC,YAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AAAA,EAC1L;AAAA,EAEA,YAAA,CACE,OAAA,EACA,QAAA,EACA,OAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxF,KAAA,EAAO,OAAA,GAAU,EAAE,OAAA,EAAS,MAAK,GAAI,MAAA;AAAA,MACrC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,YAAA,CACE,OAAA,EACA,GAAA,EACA,SAAA,EACA,MAAA,EAC6B;AAC7B,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,MAChD,IAAA,EAAM,GAAA;AAAA;AAAA,MAEN,SAAA;AAAA,MACA,SAAA,EAAW,KAAA;AAAA,MACX;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,eAAA,CAAgB,KAA6B,MAAA,EAAwC;AACnF,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,GAAG,MAAK,GAAI,GAAA;AACxC,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,cAAA,EAAgB,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAW,EAAG,IAAA,EAAM,gBAAgB,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAA;AAAA,EACvI;AAAA,EAEA,MAAM,YAAA,CAAa,MAAA,EAAsB,MAAA,GAA6B,EAAC,EAA2B;AAChG,IAAA,OAAO,mBAA4B,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,QAAQ,KAAA,EAAO,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,EAAE,GAAG,MAAA,IAAU,MAAA,EAAQ,GAAG,SAAS,CAAA;AAAA,EACtI;AAAA,EAEA,UAAA,CAAW,SAAA,EAAmB,MAAA,EAAsB,SAAA,EAA2D;AAC7G,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,IAAI,KAAA,EAAO,EAAE,GAAG,SAAA,EAAU,EAAG,QAAQ,CAAA;AAAA,EAC5H;AAAA,EAEA,aAAA,CAAc,SAAA,EAAmB,GAAA,EAA2B,MAAA,EAAwC;AAClG,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,GAAG,MAAK,GAAI,GAAA;AACxC,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,QAAQ,OAAA,EAAS,IAAA,EAAM,gBAAgB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA,EAAI,OAAO,EAAE,MAAA,EAAQ,YAAW,EAAG,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC1I;AAAA,EAEA,MAAM,aAAA,CAAc,SAAA,EAAmB,MAAA,EAAsB,SAAA,EAAwD;AACnH,IAAA,MAAM,KAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,SAAS,CAAC,IAAI,KAAA,EAAO,EAAE,GAAG,SAAA,EAAU,EAAG,QAAQ,CAAA;AAAA,EAC9H;AAAA,EAEA,mBAAA,CACE,OAAA,EACA,GAAA,EACA,MAAA,EAC2B;AAC3B,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,MAChD,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,gBAAA,CAAiB,SAAiB,MAAA,EAAuD;AACvF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,MAAA,CAAA,EAAU,QAAQ,CAAA;AAAA,EACtG;AAAA,EAEA,MAAM,sBAAA,CAAuB,OAAA,EAAiB,OAAA,EAAiB,MAAA,EAAqC;AAClG,IAAA,MAAM,KAAK,IAAA,CAAK;AAAA,MACd,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACrF;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,mBAAA,CAAoB,WAAmB,MAAA,EAAoD;AAGzF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,EAAE,SAAA,EAAU,EAAG,MAAA,EAAQ,CAAA;AAAA,EAC5F;AAAA,EAEA,gBAAA,CAAiB,QAAgC,MAAA,EAAuD;AAEtG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,eAAA,EAAiB,MAAA,CAAO,eAAA,GAAkB,MAAA,GAAS,MAAA;AAAA,QACnD,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAQ,MAAA,CAAO;AAAA,OACjB;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,iBAAA,CAAkB,EAAA,EAAY,MAAA,EAAgB,MAAA,EAAiD;AAC7F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,iBAAA,EAAoB,kBAAA,CAAmB,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,MAChD,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CAAY,MAAA,EAAsB,MAAA,GAA4C,EAAC,EAA0B;AACvG,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,EAChF;AAAA,EAEA,gBAAA,CAAiB,MAAA,EAAgB,MAAA,EAA4C,MAAA,EAAsD;AACjI,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,CAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACrH;AAAA,EAEA,SAAA,CAAU,QAAgB,MAAA,EAAuC;AAC/D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EAC/F;AAAA,EAEA,aAAA,CAAc,KAA2B,MAAA,EAAuC;AAC9E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,aAAA,EAAe,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA,EAIA,YAAA,CAAa,QAAgB,MAAA,EAAuC;AAClE,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,CAAA;AAAA,MAC/C;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,cAAA,CAAe,MAAA,EAAgB,MAAA,EAA+C;AAGlF,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAA8B;AAAA,MACnD,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC/C;AAAA,KACD,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,IAAU,EAAA;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,KAAK,MAAA,IAAU,QAAA;AAAA,MACvB,YAAY,GAAA,EAAK,UAAA,KAAe,KAAA,GAAQ,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,GAAK,EAAA;AAAA,KAChE;AAAA,EACF;AAAA,EAEA,MAAA,CAAO,OAAe,MAAA,EAAoC;AACxD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EAC3F;AAAA,EAEA,WAAA,CAAY,KAAyB,MAAA,EAA4C;AAC/E,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,4BAAA,EAA8B,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,CAAA;AAAA,EAC5F;AAAA,EAEA,qBAAA,CACE,KACA,MAAA,EAC0B;AAC1B,IAAA,MAAM,EAAE,eAAA,EAAiB,GAAG,IAAA,EAAK,GAAI,GAAA;AACrC,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,wCAAA;AAAA,MACN,IAAA;AAAA,MACA,cAAA,EAAgB,eAAA;AAAA,MAChB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,iBAAA,CAAkB,KAA+B,MAAA,EAAgD;AAC/F,IAAA,MAAM,EAAE,eAAA,EAAiB,GAAG,IAAA,EAAK,GAAI,GAAA;AACrC,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oCAAA;AAAA,MACN,IAAA;AAAA,MACA,cAAA,EAAgB,eAAA;AAAA,MAChB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,kBAAA,CAAmB,WAAmB,MAAA,EAAgD;AACpF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MAC5D;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,qBAAA,CAAsB,WAAmB,MAAA,EAAgD;AACvF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,SAAS,CAAC,CAAA,OAAA,CAAA;AAAA,MAC5D;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CACE,QACA,MAAA,EACgC;AAChC,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,uBAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAM,MAAA,CAAO;AAAA,OACf;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,eAAA,CAAgB,OAAA,EAAiB,GAAA,EAAkB,MAAA,EAA4C;AAC7F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,MAChD,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,MAClB,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CACE,OAAA,EACA,GAAA,EACA,MAAA,EACsB;AACtB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,MAAA,CAAA;AAAA,MAChD,IAAA,EAAM,UAAU,GAAG,CAAA;AAAA,MACnB,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CAAY,QAA2B,MAAA,EAA6C;AAClF,IAAA,MAAM,KAAA,GAAqD;AAAA,MACzD,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,KAAA;AAAA,MACrE,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAM,MAAA,CAAO;AAAA,KACf;AACA,IAAA,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,EACxE;AAAA,EAEA,SAAA,CAAU,UAAkB,MAAA,EAAuC;AACjE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EACjG;AAAA,EAEA,cAAA,CAAe,UAAkB,MAAA,EAAiD;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,MAAA,CAAA;AAAA,MACjD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,iBAAA,CAAkB,UAAkB,MAAA,EAA+C;AACjF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,SAAA,CAAA;AAAA,MACjD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CACE,QAAA,EACA,GAAA,EACA,cAAA,EACA,MAAA,EACiB;AACjB,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,KAAA,CAAA;AAAA,MACjD,IAAA,EAAM,GAAA;AAAA,MACN,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,QAAA,EAAkB,GAAA,EAA4B,MAAA,EAAuC;AAClG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,SAAA,CAAA;AAAA,MACjD,IAAA,EAAM,sBAAsB,GAAG,CAAA;AAAA,MAC/B,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,YAAA,CAAa,QAAA,EAAkB,cAAA,EAAyB,MAAA,EAAuC;AAC7F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,OAAA,CAAA;AAAA,MACjD,MAAM,EAAC;AAAA,MACP,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,aAAA,CAAc,QAAA,EAAkB,GAAA,EAA2B,MAAA,EAAuC;AAChG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,QAAA,CAAA;AAAA,MACjD,IAAA,EAAM,sBAAsB,GAAG,CAAA;AAAA,MAC/B,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,wBAAA,CAAyB,UAAkB,MAAA,EAAsD;AAC/F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,iBAAA,CAAA;AAAA,MACjD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,QAAA,EAAkB,GAAA,EAA8B,MAAA,EAAuD;AACpH,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,SAAA,CAAA;AAAA,MACjD,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,gBAAA,CAAiB,QAAgC,MAAA,EAAmD;AAClG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,oBAAA;AAAA,MACN,OAAO,EAAE,SAAA,EAAW,OAAO,SAAA,EAAW,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,MAC1D;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,kBAAA,CAAmB,QAAkC,MAAA,EAAmD;AACtG,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,CAAO,YAAA,IAAgB,EAAE,CAAC,CAAA;AACvE,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,yBAAA;AAAA,MACN,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,YAAA,EAAc,WAAA,EAAY;AAAA,MACrF,SAAA,EAAA,CAAY,cAAc,EAAA,IAAM,GAAA;AAAA,MAChC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,KAA4B,MAAA,EAAqD;AAC9F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,wBAAA;AAAA,MACN,IAAA,EAAM,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,EAAC,EAAG,aAAA,EAAe,GAAA,CAAI,aAAA,IAAiB,EAAC,EAAE;AAAA,MACrE;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,QAA8B,MAAA,EAA+C;AAC1F,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,EAAE,GAAG,MAAA,EAAO,EAAG,QAAQ,CAAA;AAAA,EAC1F;AAAA,EAEA,WAAA,CAAY,YAAoB,MAAA,EAAyC;AACvE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EACtG;AAAA,EAEA,eAAA,CAAgB,KAA6B,MAAA,EAAyC;AACpF,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,gBAAA,EAAkB,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,CAAA;AAAA,EAChF;AAAA,EAEA,cAAA,CAAe,UAAA,EAAoB,GAAA,EAA4B,MAAA,EAAyC;AACtG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAM,GAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,YAAY,MAAA,EAAyC;AACnD,IAAA,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,eAAA,EAAiB,QAAQ,CAAA;AAAA,EACnE;AAAA,EAEA,mBAAA,CAAoB,YAAoB,MAAA,EAAiD;AACvF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,kBAAA,CAAA;AAAA,MACtD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,oBAAA,CAAqB,YAAoB,MAAA,EAAkD;AACzF,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,eAAA,CAAA;AAAA,MACtD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,sBAAA,CAAuB,YAAoB,MAAA,EAAoD;AAC7F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,aAAA,CAAA;AAAA,MACtD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,iBAAA,CAAkB,UAAA,EAAoB,GAAA,EAA+B,MAAA,EAAiD;AACpH,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,eAAA,EAAkB,kBAAA,CAAmB,UAAU,CAAC,CAAA,mBAAA,CAAA;AAAA,MACtD,MAAM,EAAE,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY,EAAC,EAAE;AAAA,MACrC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,CAAS,QAAwB,MAAA,EAA6C;AAC5E,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,WAAA;AAAA,MACN,OAAO,EAAE,WAAA,EAAa,OAAO,WAAA,EAAa,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,MAC9D;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,eAAA,CAAgB,QAAA,EAAkB,GAAA,EAA6B,MAAA,EAAkD;AAC/G,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAC,MAAA,EAAQ,QAAQ,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,QAAQ,CAAC,CAAA,cAAA,CAAA,EAAkB,IAAA,EAAM,GAAA,EAAK,QAAO,CAAA;AAAA,EACzH;AAAA,EACA,QAAA,CAAS,KAAsB,MAAA,EAAqC;AAClE,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,sBAAsB,GAAG,CAAA;AAAA,MAC/B,gBAAgB,GAAA,CAAI,eAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAiC,MAAA,EAAqC;AAChG,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,MAAM,CAAC,CAAA,QAAA,CAAA;AAAA,MAC7C,IAAA,EAAM,EAAE,QAAA,EAAU,OAAA,EAAQ;AAAA,MAC1B;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,UAAA,CAAW,QAAgB,MAAA,EAAqC;AAC9D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,MAAM,CAAC,CAAA,OAAA,CAAA,EAAW,IAAA,EAAM,EAAC,EAAG,QAAQ,CAAA;AAAA,EAC/G;AAAA,EAEA,YAAA,CAAa,QAA4B,MAAA,EAAqD;AAC5F,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,iBAAA;AAAA,MACN,OAAO,EAAE,WAAA,EAAa,OAAO,WAAA,EAAa,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,MACtE;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,cAAA,CAAe,OAAe,MAAA,EAAqC;AACjE,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA,KAAA,CAAA;AAAA,MAClD,MAAM,EAAC;AAAA,MACP;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,MAAA,CACL,OAAA,EACA,WAAA,EACA,MAAA,EAC4C;AAC5C,IAAA,MAAM,IAAA,GACJ,YAAY,IAAA,GAAO,YAAA,GAAe,eAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA,OAAA,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO;AAAA,MAC9B,IAAA;AAAA,MACA,WAAA,EAAa,WAAA,KAAgB,MAAA,GAAY,MAAA,CAAO,WAAW,CAAA,GAAI,MAAA;AAAA,MAC/D;AAAA,KACD,CAAA;AACD,IAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAGhC,MAAA,IAAI,WAAoC,EAAC;AACzC,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAM,KAAA,CAAM,EAAA,KAAO,SAAY,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,GAAI,GAAA;AACxD,MAAA,MAAM;AAAA,QACJ,GAAI,QAAA;AAAA,QACJ,KAAA,EAAQ,QAAA,CAAS,KAAA,IAAoB,KAAA,CAAM,KAAA;AAAA,QAC3C,GAAA,EAAK,MAAA,CAAO,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM;AAAA,OACpC;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAGO,IAAM,gBAAN,MAAyC;AAAA,EAE9C,YAAY,OAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,IAAW,IAAI,WAAA,EAAY;AAAA,EAC5C;AAAA,EAEA,MAAM,sBAAsB,OAAA,EAAkD;AAC5E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,qBAAA,CAAsB,OAAO,CAAA;AAAA,EACnD;AAAA,EAEA,MAAM,OAAO,GAAA,EAA6C;AACxD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,EAChC;AAAA,EACA,MAAM,OAAO,GAAA,EAA6C;AACxD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,EAChC;AAAA,EACA,MAAM,OAAO,GAAA,EAA6C;AACxD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,EAChC;AAAA,EACA,MAAM,MAAA,GAA0B;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,EAAO;AAAA,EAC7B;AAAA,EACA,MAAM,YAAY,GAAA,EAAyC;AACzD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AAAA,EACrC;AAAA,EACA,MAAM,YAAY,MAAA,EAAiD;AACjE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,MAAM,CAAA;AAAA,EACxC;AAAA,EACA,MAAM,SAAS,OAAA,EAAiC;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,WAAA,CAAY,OAAA,EAAiB,GAAA,EAAyC;AAC1E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,SAAS,GAAG,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,YAAY,OAAA,EAAgC;AAChD,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAAA,EAClC;AAAA,EACA,MAAM,oBAAA,CAAqB,SAAA,EAAmB,GAAA,EAAyC;AACrF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,SAAA,EAAW,GAAG,CAAA;AAAA,EACzD;AAAA,EACA,MAAM,oBAAA,CAAqB,SAAA,EAAmB,MAAA,EAAsD;AAClG,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,SAAA,EAAW,MAAM,CAAA;AAAA,EAC5D;AAAA,EACA,MAAM,iBAAA,CAAkB,SAAA,EAAmB,OAAA,EAAiC;AAC1E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,WAAW,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,oBAAA,CACJ,SAAA,EACA,OAAA,EACA,GAAA,EACgB;AAChB,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,SAAA,EAAW,SAAS,GAAG,CAAA;AACvE,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,oBAAA,CAAqB,SAAA,EAAmB,OAAA,EAAgC;AAC5E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,SAAA,EAAW,OAAO,CAAA,EAAG,MAAM,QAAA,CAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAC7F;AAAA,EACA,MAAM,4BAAA,CAA6B,SAAA,EAAmB,OAAA,EAA4C;AAChG,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,4BAAA,CAA6B,WAAW,OAAO,CAAA;AAC1E,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,IAAA,CAAK,OAAA,EAAiB,GAAA,EAAwC;AAClE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA;AAAA,EACvC;AAAA,EACA,MAAM,KAAA,CAAM,OAAA,EAAiB,GAAA,EAAyC;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,GAAG,CAAA;AAAA,EACxC;AAAA,EACA,MAAM,OAAA,CAAQ,OAAA,EAAiB,SAAA,EAAmB,GAAA,EAA2C;AAC3F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS,WAAW,GAAG,CAAA;AAAA,EACrD;AAAA,EACA,MAAM,YAAA,CAAa,OAAA,EAAiB,MAAA,EAAoD;AACtF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAAA,EAClD;AAAA,EACA,MAAM,WAAW,SAAA,EAAqC;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EACA,MAAM,aAAA,CAAc,QAAA,EAAkB,SAAA,EAAoC;AACxE,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EACA,MAAM,eAAA,CAAgB,QAAA,EAAkB,SAAA,EAA8C;AACpF,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC/C,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EACA,MAAM,aAAA,CACJ,QAAA,EACA,SAAA,EACA,YAAA,EAC6B;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,SAAA,EAAW,YAAY,CAAA;AAAA,IAC3D,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,cAAc,YAAY,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EACA,MAAM,QAAA,CAAS,QAAA,EAAkB,SAAA,EAAmB,GAAA,EAAwC;AAC1F,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,SAAA,EAAW,IAAI,IAAI,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EACA,MAAM,aAAA,CAAc,OAAA,EAAiB,SAAA,EAAmB,OAAA,EAA0C;AAChG,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,cAAc,OAAA,EAAS,SAAA,EAAW,WAAW,KAAK,CAAA;AAC3E,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAC7C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,mBAAA,CACJ,OAAA,EACA,GAAA,EAC4B;AAC5B,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAa,GAAA,CAAI,WAAW,MAAA,EAAW;AACtD,MAAA,MAAM,QAAQ,kCAAkC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAoB,OAAA,EAAS,IAAI,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA;AACnF,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AACzC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,cAAA,CAAe,OAAA,EAAiB,MAAA,EAAsD;AAC1F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,OAAA,EAAS,MAAM,CAAA;AAAA,EACpD;AAAA,EACA,MAAM,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAkD;AACnF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,OAAA,EAAS,MAAM,CAAA;AAAA,EACjD;AAAA,EACA,MAAM,aAAA,CAAc,OAAA,EAAiB,MAAA,EAAqD;AACxF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,OAAA,EAAS,MAAM,CAAA;AAAA,EACnD;AAAA,EACA,MAAM,SAAA,CAAU,OAAA,EAAiB,QAAA,EAAyC;AACxE,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,OAAA,EAAS,QAAQ,CAAA;AAAA,IACjD,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AAAA,EACA,MAAM,aAAA,CAAc,OAAA,EAAiB,YAAA,EAA2C;AAC9E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,SAAS,YAAY,CAAA;AAC/D,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,QAAA,CAAS,cAAc,YAAY,CAAA;AACtD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,MAAM,sBAAA,CAAuB,SAAA,EAAmB,OAAA,EAAiB,YAAA,EAA2C;AAC1G,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,OAAO,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,OAAA,EAAS,YAAY,CAAA;AAAA,EACvD;AAAA,EACA,MAAM,YAAA,CAAa,OAAA,EAAiB,QAAA,EAAkB,OAAA,EAA0C;AAC9F,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,aAAa,OAAA,EAAS,QAAA,EAAU,WAAW,KAAK,CAAA;AACzE,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,YAAA,CACJ,OAAA,EACA,GAAA,EACA,YACA,MAAA,EAC6B;AAC7B,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AACpD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS,GAAG,CAAA;AAAA,EAC/C;AAAA,EACA,MAAM,gBAAgB,GAAA,EAA+C;AACnE,IAAA,6BAAA,CAA8B,GAAG,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB,GAAG,CAAA;AAAA,EACzC;AAAA,EACA,MAAM,YAAA,CAAa,OAAA,EAAuB,MAAA,GAA6B,EAAC,EAA2B;AACjG,IAAA,6BAAA,CAA8B,MAAM,CAAA;AACpC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,MAAM,UAAA,CAAW,SAAA,EAAmB,OAAA,EAAuB,SAAA,GAAyC,EAAC,EAAqB;AACxH,IAAA,6BAAA,CAA8B,SAAS,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA;AAC9C,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,aAAA,CAAc,SAAA,EAAmB,GAAA,EAA6C;AAClF,IAAA,6BAAA,CAA8B,GAAG,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,WAAW,GAAG,CAAA;AACtD,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,QAAA,CAAS,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,aAAA,CAAc,SAAA,EAAmB,OAAA,EAAuB,SAAA,GAAyC,EAAC,EAAkB;AACxH,IAAA,6BAAA,CAA8B,SAAS,CAAA;AACvC,IAAA,IAAI,CAAC,KAAK,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA,EAAG,MAAM,QAAA,CAAS,SAAA,EAAW,SAAS,CAAA;AAAA,EACjF;AAAA,EACA,MAAM,mBAAA,CAAoB,OAAA,EAAiB,GAAA,EAAuD;AAChG,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAoB,SAAS,GAAG,CAAA;AAC3D,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC3C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,iBAAiB,OAAA,EAAkD;AACvE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,QAAA,CAAS,SAAS,OAAO,CAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,sBAAA,CAAuB,OAAA,EAAiB,OAAA,EAAgC;AAC5E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,sBAAA,CAAuB,OAAA,EAAS,OAAO,CAAA,EAAG,MAAM,QAAA,CAAS,oBAAA,EAAsB,OAAO,CAAA;AAAA,EAC1G;AAAA,EACA,MAAM,oBAAoB,SAAA,EAAiD;AACzE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAoB,SAAS,CAAA;AAAA,EACnD;AAAA,EACA,MAAM,iBAAiB,MAAA,EAAiE;AACtF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC7C;AAAA,EACA,MAAM,iBAAA,CAAkB,EAAA,EAAY,MAAA,EAA2C;AAC7E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,IAAI,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,eAAe,EAAE,CAAA;AAC1C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,WAAA,CAAY,OAAA,EAAuB,MAAA,GAA4C,EAAC,EAA0B;AAC9G,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY;AACtC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAA,IAAQ,CAAC,CAAA;AACtC,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA,IAAK,SAAS,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA;AACtF,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,MAAA,IAAU,MAAA,CAAO,SAAS,EAAA,CAAG,CAAA;AACpE,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,aAAa,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAM,MAAA,GAAS,MAAA,CAAO,SAAS,KAAA,CAAM,MAAM,IAAI,MAAA,EAAU;AAAA,EACxI;AAAA,EAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgB,MAAA,EAA4E;AACjH,IAAA,IAAI,CAAC,KAAK,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,EAAG,MAAM,QAAA,CAAS,QAAA,EAAU,MAAM,CAAA;AACpE,IAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,WAAA,EAAa,MAAA,CAAO,KAAA,IAAS,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,kBAAA,EAAoB,EAAA,EAAG;AAAA,EAChG;AAAA,EACA,MAAM,UAAU,MAAA,EAAiC;AAC/C,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,MAAM,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,cAAc,GAAA,EAA4C;AAC9D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,GAAG,CAAA;AAAA,EACvC;AAAA,EACA,MAAM,aAAa,MAAA,EAAiC;AAClD,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA;AAC1C,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,MAAM,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,eAAe,MAAA,EAAyC;AAC5D,IAAA,IAAI,CAAC,KAAK,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,EAAG,MAAM,QAAA,CAAS,QAAA,EAAU,MAAM,CAAA;AAGzE,IAAA,MAAM,QAAQ,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAA,EAAK,CAAE,aAAa,CAAA,CAAA;AACzD,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,KAAA,EAAO,QAAQ,WAAA,EAAa,UAAA,EAAY,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,EAAG;AAAA,EACvF;AAAA,EACA,MAAM,OAAO,KAAA,EAA6B;AACxC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,OAAO,KAAK,CAAA;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,YAAY,GAAA,EAA+C;AAC/D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AAAA,EACrC;AAAA,EACA,MAAM,sBAAsB,GAAA,EAA6D;AACvF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,qBAAA,CAAsB,GAAG,CAAA;AAAA,EAC/C;AAAA,EACA,MAAM,kBAAkB,GAAA,EAAyD;AAC/E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,GAAG,CAAA;AAAA,EAC3C;AAAA,EACA,MAAM,mBAAmB,SAAA,EAA6C;AACpE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,SAAS,CAAA;AACzD,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,QAAA,CAAS,oBAAoB,SAAS,CAAA;AAC1D,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EACA,MAAM,sBAAsB,SAAA,EAA6C;AACvE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,qBAAA,CAAsB,SAAS,CAAA;AAC5D,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,QAAA,CAAS,oBAAoB,SAAS,CAAA;AAC1D,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EACA,MAAM,qBAAqB,MAAA,EAAoE;AAC7F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,MAAM,CAAA;AAAA,EACjD;AAAA,EACA,MAAM,eAAA,CAAgB,OAAA,EAAiB,GAAA,EAAwC;AAC7E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB,OAAA,EAAS,GAAG,CAAA;AAAA,EAClD;AAAA,EACA,MAAM,oBAAA,CAAqB,OAAA,EAAiB,GAAA,EAAyC;AACnF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,OAAA,EAAS,GAAG,CAAA;AAAA,EACvD;AAAA,EACA,MAAM,YAAY,MAAA,EAAkD;AAClE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,MAAM,CAAA;AAAA,EACxC;AAAA,EACA,MAAM,UAAU,QAAA,EAAmC;AACjD,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AACzC,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,eAAe,QAAA,EAA6C;AAChE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,kBAAkB,QAAA,EAA2C;AACjE,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAC1C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,cAAA,CAAe,QAAA,EAAkB,GAAA,EAA4B,cAAA,EAA0C;AAC3G,IAAA,MAAM,IAAI,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,QAAA,EAAU,KAAK,cAAc,CAAA;AACnE,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,cAAA,CAAe,QAAA,EAAkB,GAAA,EAA6C;AAClF,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,UAAU,GAAG,CAAA;AACnD,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,YAAA,CAAa,QAAA,EAAkB,eAAA,EAA2C;AAC9E,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,aAAA,CAAc,QAAA,EAAkB,GAAA,EAA4C;AAChF,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,UAAU,GAAG,CAAA;AAClD,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AACzC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,yBAAyB,QAAA,EAAkD;AAC/E,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,wBAAA,CAAyB,QAAQ,CAAA;AACzD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAC1C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,cAAA,CAAe,QAAA,EAAkB,GAAA,EAA+D;AACpG,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,UAAU,GAAG,CAAA;AACrD,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,QAAA,CAAS,UAAU,QAAQ,CAAA;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EACA,MAAM,iBAAiB,MAAA,EAA6D;AAClF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC7C;AAAA,EACA,MAAM,mBAAmB,MAAA,EAA+D;AACtF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,MAAM,CAAA;AAAA,EAC/C;AAAA,EACA,MAAM,eAAe,GAAA,EAA2D;AAC9E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,GAAG,CAAA;AAAA,EACxC;AAAA,EACA,MAAM,eAAe,MAAA,EAAuD;AAC1E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AAAA,EAC3C;AAAA,EACA,MAAM,YAAY,UAAA,EAAuC;AACvD,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA;AAC7C,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC7C,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,gBAAgB,GAAA,EAAgD;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB,GAAG,CAAA;AAAA,EACzC;AAAA,EACA,MAAM,cAAA,CAAe,UAAA,EAAoB,GAAA,EAA+C;AACtF,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,YAAY,GAAG,CAAA;AACrD,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC7C,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,WAAA,GAAiC;AACrC,IAAA,OAAO,IAAA,CAAK,QAAQ,WAAA,EAAY;AAAA,EAClC;AAAA,EACA,MAAM,oBAAoB,UAAA,EAA+C;AACvE,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,mBAAA,CAAoB,UAAU,CAAA;AACtD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC9C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,iBAAA,CAAkB,UAAA,EAAoB,GAAA,EAA0D;AACpG,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,YAAY,GAAG,CAAA;AACzD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC9C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,qBAAqB,UAAA,EAAgD;AACzE,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,UAAU,CAAA;AACvD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC9C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,uBAAuB,UAAA,EAAkD;AAC7E,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,sBAAA,CAAuB,UAAU,CAAA;AACzD,IAAA,IAAI,CAAC,EAAA,EAAI,MAAM,QAAA,CAAS,YAAY,UAAU,CAAA;AAC9C,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EACA,MAAM,SAAS,MAAA,EAA+C;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AAAA,EACrC;AAAA,EACA,MAAM,eAAA,CAAgB,QAAA,EAAkB,GAAA,EAAyD;AAC/F,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAU,GAAG,CAAA;AAAA,EACnD;AAAA,EACA,MAAM,SAAS,GAAA,EAAqC;AAClD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;AAAA,EAClC;AAAA,EACA,MAAM,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAgD;AAChF,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,QAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,QAAQ,MAAM,CAAA;AACrC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,WAAW,MAAA,EAA+B;AAC9C,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA;AACxC,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,QAAA,CAAS,QAAQ,MAAM,CAAA;AACrC,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACA,MAAM,aAAa,MAAA,EAA2D;AAC5E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,MAAM,eAAe,KAAA,EAA8B;AACjD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,KAAK,CAAA;AAAA,EAC1C;AAAA,EACA,OAAO,MAAA,CACL,OAAA,EACA,WAAA,EACA,MAAA,EAC4C;AAC5C,IAAA,WAAA,MAAiB,MAAM,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS,WAAW,CAAA,EAAG;AACtE,MAAA,IAAI,QAAQ,OAAA,EAAS;AACrB,MAAA,MAAM,EAAA;AAAA,IACR;AAAA,EACF;AACF,CAAA;AAEA,SAAS,QAAA,CAAS,MAAc,EAAA,EAA2B;AACzD,EAAA,OAAO,IAAI,aAAA,CAAc;AAAA,IACvB,MAAA,EAAQ,GAAA;AAAA,IACR,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,CAAA,GAAA,EAAM,IAAI,CAAA,YAAA,EAAe,EAAE,CAAA,sBAAA;AAAA,GACrC,CAAA;AACH;AAEA,SAAS,QAAQ,OAAA,EAAkC;AACjD,EAAA,OAAO,IAAI,gBAAgB,EAAE,MAAA,EAAQ,KAAK,IAAA,EAAM,SAAA,EAAW,SAAS,CAAA;AACtE;AAGA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAE,CAAA;AAC9E,EAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,OAAO,KAAK,MAAM,CAAA;AAElD,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,MAAA,EAAQ,QAAQ,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AACtE,EAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAChE;AAGA,SAAS,wBAAwB,WAAA,EAA6B;AAC5D,EAAA,MAAM,CAAA,GAAI,uCAAA,CAAwC,IAAA,CAAK,WAAW,CAAA;AAClE,EAAA,OAAO,IAAI,kBAAA,CAAmB,CAAA,CAAE,CAAC,CAAA,CAAG,IAAA,EAAM,CAAA,GAAI,EAAA;AAChD;AAEA,SAAS,8BAA8B,SAAA,EAA8C;AACnF,EAAA,IAAI,UAAU,MAAA,IAAU,SAAA,CAAU,YAAY,MAAM,IAAI,MAAM,kHAAkH,CAAA;AAClL;;;AC5lDA,eAAsB,aAAA,CACpB,GAAA,EACA,OAAA,GAA8D,EAAC,EACpC;AAC3B,EAAA,MAAM,OAAA,GAAU,QAAQ,eAAA,IAAmB,EAAA;AAC3C,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,IAAK,OAAA,GAAU,CAAA,IAAK,OAAA,GAAU,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,qDAAqD,CAAA;AACpI,EAAA,MAAM,QAAA,GAAW,YAAY,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,GAAU,GAAI,CAAC,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,QAAQ,CAAC,CAAA,GAAI,QAAA;AAC9E,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,MAAA,GAAS,CAAC,OAAA,MAA4D;AAAA,IAC1E,MAAA,EAAQ,MAAA;AAAA,IAAS,OAAA;AAAA,IACjB,oBAAA,EAAsB,OAAA,KAAY,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,kBAAA,IAAsB,EAAE,CAAC,CAAA,GAAI;AAAA,GAC3H,CAAA;AACA,EAAA,IAAI;AAEF,IAAA,MAAM,sBAAsB,OAAA,KAAY,CAAA,GAAI,WAAA,CAAY,OAAA,CAAQ,GAAM,CAAA,GAAI,KAAA,CAAA;AAC1E,IAAA,MAAA,GAAS,MAAM,GAAA,CAAI,mBAAA,GACd,OAAA,CAAQ,SAAS,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,mBAAmB,CAAC,CAAA,GAAI,sBAC3E,MAAM,CAAA;AACV,IAAA,WAAS;AACP,MAAA,MAAM,IAAI,MAAA,CAAO,SAAA;AACjB,MAAA,IAAI,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,oBAAoB,CAAA;AAC1C,MAAA,IAAI,CAAA,CAAE,iBAAA,EAAmB,OAAO,MAAA,CAAO,OAAO,CAAA;AAC9C,MAAA,IAAI,CAAA,CAAE,kBAAA,KAAuB,UAAA,EAAY,OAAO,OAAO,iBAAiB,CAAA;AACxE,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,iBAAA,EAAmB,OAAO,OAAO,iBAAiB,CAAA;AACnE,MAAA,IAAI,OAAA,KAAY,CAAA,EAAG,OAAO,MAAA,CAAO,WAAW,CAAA;AAC5C,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC3C,QAAA,MAAA,CAAO,cAAA,EAAe;AACtB,QAAA,MAAM,QAAQ,MAAM;AAAE,UAAA,YAAA,CAAa,KAAK,CAAA;AAAG,UAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,QAAG,CAAA;AAClE,QAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAAE,UAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAAG,UAAA,OAAA,EAAQ;AAAA,QAAG,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,kBAAA,IAAsB,EAAE,CAAC,CAAA,GAAI,GAAI,CAAA;AACvJ,QAAA,MAAA,CAAO,iBAAiB,OAAA,EAAS,KAAA,EAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,MACxD,CAAC,CAAA;AACD,MAAA,MAAA,GAAS,MAAM,IAAI,MAAM,CAAA;AAAA,IAC3B;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,MAAM,QAAQ,MAAA,CAAO,MAAA;AAClD,IAAA,IAAI,QAAA,CAAS,OAAA,IAAW,MAAA,EAAQ,OAAO,OAAO,WAAW,CAAA;AACzD,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;AC7BA,IAAM,UAAA,GAAa,WAAA;AAQZ,SAAS,aAAa,MAAA,EAAqC;AAChE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAO,UAAA,CAAW,UAAU,GAAG,OAAO,SAAA;AACtD,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAC3C,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,SAAA;AACrC,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,OAAA;AAEtC,EAAA,OAAO,SAAA;AACT;AAOO,SAAS,sBAAsB,IAAA,EAAwB;AAC5D,EAAA,OAAO,IAAA,KAAS,KAAA;AAClB;AAOO,SAAS,yBAAyB,IAAA,EAAwB;AAC/D,EAAA,OAAO,IAAA,KAAS,KAAA;AAClB;;;ACNO,IAAM,cAAN,MAAkB;AAAA,EAMvB,WAAA,CACmB,SAAA,EACjB,OAAA,EACiB,OAAA,EACjB,MAAA,EACA;AAJiB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGjB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,EAAA,GAAyB;AAC3B,IAAA,OAAO,KAAK,MAAA,EAAQ,EAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAY,GAAA,GAAc;AACxB,IAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,EAAA,IAAM,IAAA,CAAK,OAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAA,GAA0C;AAC5C,IAAA,OAAO,KAAK,MAAA,EAAQ,QAAA;AAAA,EACtB;AAAA;AAAA,EAGA,IAAI,cAAA,GAAqC;AACvC,IAAA,OAAO,KAAK,MAAA,EAAQ,gBAAA;AAAA,EACtB;AAAA;AAAA,EAGA,IAAI,MAAA,GAAkC;AACpC,IAAA,OAAO,KAAK,MAAA,EAAQ,MAAA;AAAA,EACtB;AAAA;AAAA,EAGA,IAAI,cAAA,GAA6C;AAC/C,IAAA,OAAO,KAAK,MAAA,EAAQ,eAAA;AAAA,EACtB;AAAA;AAAA,EAGA,IAAI,WAAA,GAA4C;AAC9C,IAAA,OAAO,KAAK,MAAA,EAAQ,WAAA;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ,MAAA,EAAsC;AAC5C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAA,CAAO,KAAyB,MAAA,EAAsC;AACpE,IAAA,OAAO,KAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAA,CAAK,KAAkB,MAAA,EAA4C;AACjE,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAA,CAAM,KAAmB,MAAA,EAA4C;AACnE,IAAA,OAAO,KAAK,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAA,CAAQ,SAAA,EAAmB,GAAA,EAAqB,MAAA,EAA4C;AAC1F,IAAA,OAAO,KAAK,SAAA,CAAU,OAAA,CAAQ,KAAK,GAAA,EAAK,SAAA,EAAW,KAAK,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAA,CAAgB,KAAkB,MAAA,EAA4C;AAC5E,IAAA,OAAO,KAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAA,CAAqB,KAAmB,MAAA,EAA4C;AAClF,IAAA,OAAO,KAAK,SAAA,CAAU,oBAAA,CAAqB,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,CAAS,MAAA,GAA6B,EAAC,EAAG,MAAA,EAA8C;AACtF,IAAA,OAAO,KAAK,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,MAAA,CAAO,QAA8B,MAAA,EAA8C;AACjF,IAAA,OAAO,KAAK,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA,EAGA,UAAA,CAAW,WAAmB,MAAA,EAAuC;AACnE,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,GAAA,EAAK,WAAW,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,QAAA,CAAS,SAAA,EAAmB,GAAA,EAAsB,MAAA,EAAwC;AACxF,IAAA,OAAO,KAAK,SAAA,CAAU,QAAA,CAAS,KAAK,GAAA,EAAK,SAAA,EAAW,KAAK,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAA,CAAc,SAAA,EAAmB,OAAA,EAAmB,MAAA,EAA6C;AAC/F,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA,CAAc,KAAK,GAAA,EAAK,SAAA,EAAW,SAAS,MAAM,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAA,CAAoB,KAAiC,MAAA,EAAkD;AACrG,IAAA,OAAO,KAAK,SAAA,CAAU,mBAAA,CAAoB,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,WAAA,CAAY,WAAmB,MAAA,EAAiD;AAC9E,IAAA,OAAO,KAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,WAAW,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA,EAGA,UAAA,CACE,SAAA,EACA,YAAA,EACA,MAAA,EAC6B;AAC7B,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA,CAAc,KAAK,GAAA,EAAK,SAAA,EAAW,cAAc,MAAM,CAAA;AAAA,EAC/E;AAAA;AAAA,EAGA,OAAA,CAAQ,MAAA,GAA4B,EAAC,EAAG,MAAA,EAA6C;AACnF,IAAA,OAAO,KAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,EAC5D;AAAA;AAAA,EAGA,aAAA,CAAc,QAA8B,MAAA,EAA6C;AACvF,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,EAC9D;AAAA;AAAA,EAGA,MAAA,CAAO,UAAkB,MAAA,EAA6C;AACpE,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,GAAA,EAAK,UAAU,MAAM,CAAA;AAAA,EAC5D;AAAA;AAAA,EAGA,aAAA,CAAc,cAAsB,MAAA,EAA2C;AAC7E,IAAA,OAAO,KAAK,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,GAAA,EAAK,cAAc,MAAM,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAA,CAAa,QAAA,EAAkB,OAAA,EAAmB,MAAA,EAA6C;AAC7F,IAAA,OAAO,KAAK,SAAA,CAAU,YAAA,CAAa,KAAK,GAAA,EAAK,QAAA,EAAU,SAAS,MAAM,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAA,CAAa,GAAA,GAA2B,EAAC,EAAG,MAAA,EAAmD;AAC7F,IAAA,MAAM,oBAAA,GAAuB,IAAI,eAAA,IAAmB,GAAA;AAGpD,IAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA;AAAA,MACzB,uBAAuB,GAAA,GAAO,GAAA;AAAA,MAC9B,KAAK,OAAA,CAAQ;AAAA,KACf;AACA,IAAA,OAAO,KAAK,SAAA,CAAU,YAAA,CAAa,KAAK,GAAA,EAAK,GAAA,EAAK,eAAe,MAAM,CAAA;AAAA,EACzE;AAAA;AAAA,EAGA,eAAA,CACE,KACA,MAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,EAAE,GAAG,KAAK,KAAA,EAAO,IAAA,CAAK,OAAA,EAAQ,EAAG,MAAM,CAAA;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAA,CAAoB,KAA4B,MAAA,EAAiD;AAC/F,IAAA,OAAO,KAAK,SAAA,CAAU,mBAAA,CAAoB,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,iBAAiB,MAAA,EAAuD;AACtE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,gBAAA,CAAiB,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EACzD;AAAA;AAAA,EAGA,sBAAA,CAAuB,SAAiB,MAAA,EAAqC;AAC3E,IAAA,OAAO,KAAK,SAAA,CAAU,sBAAA,CAAuB,IAAA,CAAK,GAAA,EAAK,SAAS,MAAM,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAA,CAAO,OAAA,GAAyB,EAAC,EAA+C;AAC9E,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,CAAO,IAAA,CAAK,KAAK,OAAA,CAAQ,WAAA,EAAa,QAAQ,MAAM,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAA,CACJ,OAAA,EACA,OAAA,GAAyB,EAAC,EACX;AACf,IAAA,WAAA,MAAiB,EAAA,IAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAG;AAC3C,MAAA,MAAM,QAAQ,EAAE,CAAA;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAA,EAAqC;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EACpD;AACF;;;ACvSO,IAAM,SAAA,GAAN,MAAM,SAAA,CAAwC;AAAA,EAYnD,YACE,GAAA,EACiB,OAAA,EACA,OAAA,mBAA+B,IAAI,KAAI,EACxD;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AALnB;AAAA,IAAA,IAAA,CAAS,MAAA,GAAS,MAAA;AAOhB,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,UAAU,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IACxD,OAAO,GAAA,CAAI,aAAa,SAAA,IACxB,EAAE,GAAA,CAAI,WAAA,KAAgB,IAAA,IAAS,OAAO,GAAA,CAAI,WAAA,KAAgB,YAAY,GAAA,CAAI,WAAA,CAAY,MAAA,GAAS,CAAA,CAAA,IAC/F,GAAA,CAAI,QAAA,KAAa,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,IAC1F;AACA,IAAA,IAAI,GAAA,CAAI,WAAA,IAAe,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA;AAC7G,IAAA,IAAA,CAAK,OAAO,GAAA,CAAI,IAAA;AAChB,IAAA,IAAA,CAAK,UAAU,GAAA,CAAI,QAAA;AACnB,IAAA,IAAA,CAAK,aAAa,GAAA,CAAI,WAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,MAAA,EAA4C;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,eAAe,IAAA,EAAM;AAC7C,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,GAAO,CAAA,IAAK,UAAS,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,kFAAkF,CAAA;AAClJ,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACpC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,UAAU,CAAA;AAC3B,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,YAAY,MAAM,CAAA;AACtD,IAAA,OAAO,IAAI,SAAA,CAAS,GAAA,EAAK,IAAA,CAAK,SAAS,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,MAAA,CAAO,aAAa,CAAA,GAAsB;AAChD,IAAA,IAAI,IAAA,GAAoB,IAAA;AACxB,IAAA,WAAS;AACP,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAM,MAAM,IAAA;AACpC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,eAAe,IAAA,EAAM;AAC/C,MAAA,IAAA,GAAO,MAAM,KAAK,QAAA,EAAS;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QAAQ,MAAA,EAAoC;AAChD,IAAA,MAAM,GAAA,GAAW,CAAC,GAAG,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,IAAA,GAAoB,IAAA;AACxB,IAAA,OAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,UAAA,KAAe,IAAA,EAAM;AAC/C,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACjC,MAAA,GAAA,CAAI,IAAA,CAAK,GAAG,IAAA,CAAK,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAAA;AAlEa,SAAA,CAEK,QAAA,GAAW,GAAA;AAFtB,IAAM,QAAA,GAAN;AAqEA,SAAS,QAAA,CAAY,KAAc,OAAA,EAAsC;AAC9E,EAAA,OAAO,IAAI,QAAA,CAAS,GAAA,EAAK,OAAO,CAAA;AAClC;;;ACrDO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,OACE,SAAA,EACA,GAAA,GAA0B,EAAC,EAC3B,gBACA,MAAA,EACgB;AAChB,IAAA,OAAO,IAAA,CAAK,IAAI,SAAA,CAAU,oBAAA;AAAA,MACxB,SAAA;AAAA,MACA,GAAA;AAAA,MACA,kBAAkB,GAAA,CAAI,SAAA;AAAA,MACtB;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAA,CACJ,SAAA,EACA,MAAA,GAAiC,IACjC,MAAA,EAC0B;AAC1B,IAAA,MAAM,OAAA,GAAU,CAAC,MAAA,EAA4B,CAAA,KAC3C,KAAK,GAAA,CAAI,SAAA,CAAU,oBAAA,CAAqB,SAAA,EAAW,EAAE,GAAG,MAAA,EAAQ,MAAA,IAAU,CAAC,CAAA;AAC7E,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,MAAM,CAAA;AACjD,IAAA,OAAO,IAAI,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,IACE,SAAA,EACA,OAAA,EACA,MAAA,GAAyB,IACzB,MAAA,EACgB;AAChB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,kBAAkB,SAAA,EAAW,OAAA,EAAS,QAAQ,MAAM,CAAA;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CACE,SAAA,EACA,OAAA,EACA,GAAA,EACA,MAAA,EACgB;AAChB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,qBAAqB,SAAA,EAAW,OAAA,EAAS,KAAK,MAAM,CAAA;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CAAO,SAAA,EAAmB,OAAA,EAAiB,MAAA,EAAqC;AAC9E,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,oBAAA,CAAqB,SAAA,EAAW,SAAS,MAAM,CAAA;AAAA,EAC3E;AAAA;AAAA,EAGA,WAAA,CAAY,SAAA,EAAmB,OAAA,EAAiB,MAAA,EAAiD;AAC/F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,4BAAA,CAA6B,SAAA,EAAW,SAAS,MAAM,CAAA;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAA,CACE,SAAA,EACA,OAAA,EACA,GAAA,EACA,MAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,GAAA,EAAK,MAAM,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,KAAA,CACE,SAAA,EACA,OAAA,EACA,GAAA,EACA,MAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,GAAA,EAAK,MAAM,CAAA;AAAA,EAC3E;AAAA;AAAA,EAGA,OAAA,CACE,SAAA,EACA,OAAA,EACA,SAAA,EACA,KACA,MAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG,SAAA,EAAW,GAAA,EAAK,MAAM,CAAA;AAAA,EACxF;AAAA;AAAA,EAGA,SACE,SAAA,EACA,OAAA,EACA,MAAA,GAA6B,IAC7B,MAAA,EACwB;AACxB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAA;AAAA,EACrF;AAAA;AAAA,EAGA,cAAA,CACE,SAAA,EACA,OAAA,EACA,MAAA,EACA,MAAA,EACwB;AACxB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAA;AAAA,EACvF;AAAA;AAAA,EAGA,QAAA,CACE,SAAA,EACA,OAAA,EACA,SAAA,EACA,KACA,MAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG,SAAA,EAAW,GAAA,EAAK,MAAM,CAAA;AAAA,EACzF;AAAA;AAAA,EAGA,aAAA,CACE,SAAA,EACA,OAAA,EACA,SAAA,EACA,SACA,MAAA,EACuB;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAClG;AAAA;AAAA,EAGA,mBAAA,CACE,SAAA,EACA,OAAA,EACA,GAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,mBAAA,CAAoB,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,GAAA,EAAK,MAAM,CAAA;AAAA,EACzF;AAAA;AAAA,EAGA,WAAA,CACE,SAAA,EACA,OAAA,EACA,SAAA,EACA,MAAA,EAC2B;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,SAAA,EAAW,MAAM,CAAA;AAAA,EAC3F;AAAA;AAAA,EAGA,UAAA,CACE,SAAA,EACA,OAAA,EACA,SAAA,EACA,cACA,MAAA,EAC6B;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG,SAAA,EAAW,YAAA,EAAc,MAAM,CAAA;AAAA,EACvG;AAAA;AAAA,EAGA,QACE,SAAA,EACA,OAAA,EACA,MAAA,GAA4B,IAC5B,MAAA,EACuB;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAA;AAAA,EACpF;AAAA;AAAA,EAGA,MAAA,CACE,SAAA,EACA,OAAA,EACA,QAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,IAAI,SAAA,EAAW,OAAO,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AAAA,EACpF;AAAA;AAAA,EAGA,aAAA,CAAc,SAAA,EAAmB,OAAA,EAAiB,YAAA,EAAsB,MAAA,EAA2C;AACjH,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,uBAAuB,SAAA,EAAW,OAAA,EAAS,cAAc,MAAM,CAAA;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aACE,SAAA,EACA,OAAA,EACA,GAAA,GAA2B,IAC3B,MAAA,EAC6B;AAC7B,IAAA,MAAM,oBAAA,GAAuB,IAAI,eAAA,IAAmB,GAAA;AACpD,IAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA;AAAA,MACzB,uBAAuB,GAAA,GAAO,GAAA;AAAA,MAC9B,IAAA,CAAK,IAAI,aAAA,CAAc;AAAA,KACzB;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG,GAAA,EAAK,aAAA,EAAe,MAAM,CAAA;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBQ,GAAA,CAAI,WAAmB,OAAA,EAAyB;AACtD,IAAA,IAAI,SAAA,CAAU,IAAA,EAAK,KAAM,EAAA,EAAI;AAC3B,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EACE;AAAA,OAEH,CAAA;AAAA,IACH;AACA,IAAA,IAAI,cAAc,GAAA,EAAK;AACrB,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EACE;AAAA,OAEH,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAOO,IAAM,WAAN,MAAe;AAAA,EAIpB,YAAY,GAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,CAAe,GAAG,CAAA;AAAA,EACvC;AACF;;;AC1PO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUpD,MAAM,MAAA,CAAO,GAAA,GAA0B,IAAI,MAAA,EAA4C;AACrF,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,UAAU,WAAA,CAAY,GAAA,EAAK,GAAA,CAAI,SAAA,EAAW,MAAM,CAAA;AAC7E,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,MAAM,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,KAAK,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAA,CAAK,MAAA,GAA4B,EAAC,EAAG,MAAA,EAA4C;AAC/E,IAAA,IAAI,wBAAA,CAAyB,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AAC9C,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,QACb,IAAI,oBAAA,CAAqB;AAAA,UACvB,MAAA,EAAQ,GAAA;AAAA,UACR,IAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EACE;AAAA,SAEH;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,QAAQ,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,OAAA,EAAiB,MAAA,EAA4C;AACrE,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,IAAI,SAAA,CAAU,QAAA,CAAS,SAAS,MAAM,CAAA;AAC/D,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,MAAM,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,KAAK,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,MAAA,CAAO,OAAA,EAAiB,GAAA,EAAyB,MAAA,EAA4C;AACjG,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,UAAU,WAAA,CAAY,OAAA,EAAS,KAAK,MAAM,CAAA;AACvE,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,MAAM,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAe,KAAK,CAAA;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CAAO,SAAiB,MAAA,EAAqC;AAC3D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,EACvD;AACF;AASO,IAAM,WAAN,MAAe;AAAA,EACpB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,GAAA,CAAI,WAAmB,MAAA,EAAwC;AAC7D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,UAAA,CAAW,WAAW,MAAM,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,GAAA,CAAI,KAAA,EAAe,SAAA,EAAmB,MAAA,EAAuC;AAC3E,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,KAAA,EAAO,WAAW,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAA,CACE,KAAA,EACA,SAAA,EACA,GAAA,EACA,MAAA,EACkB;AAClB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,SAAS,KAAA,EAAO,SAAA,EAAW,KAAK,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CACE,KAAA,EACA,SAAA,EACA,OAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,cAAc,KAAA,EAAO,SAAA,EAAW,SAAS,MAAM,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,CACE,KAAA,EACA,GAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,mBAAA,CAAoB,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAA,CAAgB,KAAA,EAAe,SAAA,EAAmB,MAAA,EAAiD;AACjG,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,KAAA,EAAO,WAAW,MAAM,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAA,CACE,KAAA,EACA,SAAA,EACA,YAAA,EACA,MAAA,EAC6B;AAC7B,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,cAAc,KAAA,EAAO,SAAA,EAAW,cAAc,MAAM,CAAA;AAAA,EAChF;AACF;AAMO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,IAAA,CAAK,KAAA,EAAe,MAAA,GAA4B,IAAI,MAAA,EAA6C;AAC/F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,KAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,MAAA,CACE,KAAA,EACA,MAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,KAAA,EAAO,QAAQ,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA,EAGA,GAAA,CAAI,KAAA,EAAe,QAAA,EAAkB,MAAA,EAA6C;AAChF,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,KAAA,EAAO,UAAU,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,KAAA,CAAM,KAAA,EAAe,GAAA,EAAmB,MAAA,EAA4C;AAClF,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CACE,KAAA,EACA,QAAA,EACA,OAAA,EACA,MAAA,EACuB;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAa,KAAA,EAAO,QAAA,EAAU,SAAS,MAAM,CAAA;AAAA,EACzE;AACF;AAGO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA,EACpD,GAAA,CAAI,KAAA,EAAe,YAAA,EAAsB,MAAA,EAA2C;AAClF,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,KAAA,EAAO,cAAc,MAAM,CAAA;AAAA,EACrE;AACF;AAGO,IAAM,WAAN,MAAe;AAAA,EACpB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,QAAA,CAAS,KAA6B,MAAA,EAAwC;AAC5E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA,EAGA,IAAA,CAAK,cAAA,GAAmD,EAAC,EAAG,MAAA,EAA8C;AACxG,IAAA,IAAI,aAAa,cAAA,EAAgB,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAa,cAAc,CAAA;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,QAAQ,cAAc,CAAA;AAAA,EAC/D;AAAA;AAAA,EAGA,GAAA,CAAI,SAAA,EAAmB,iBAAA,GAA+D,IAAI,MAAA,EAAwC;AAChI,IAAA,IAAI,SAAA,IAAa,mBAAmB,OAAO,IAAA,CAAK,IAAI,SAAA,CAAU,UAAA,CAAW,WAAW,iBAAiB,CAAA;AACrG,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,UAAA,CAAW,SAAA,EAAW,QAAQ,iBAAiB,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,CAAO,SAAA,EAAmB,GAAA,EAA2B,MAAA,EAAwC;AAC3F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,SAAA,EAAW,KAAK,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA,EAGA,MAAA,CAAO,SAAA,EAAmB,iBAAA,GAA+D,IAAI,MAAA,EAAqC;AAChI,IAAA,IAAI,SAAA,IAAa,mBAAmB,OAAO,IAAA,CAAK,IAAI,SAAA,CAAU,aAAA,CAAc,WAAW,iBAAiB,CAAA;AACxG,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,SAAA,EAAW,QAAQ,iBAAiB,CAAA;AAAA,EAC9E;AACF;AAQO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,GAAA,CAAI,KAAA,EAAe,GAAA,EAA4B,MAAA,EAAiD;AAC9F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,mBAAA,CAAoB,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA,EAGA,IAAA,CAAK,OAAe,MAAA,EAAuD;AACzE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA,EAC1D;AAAA;AAAA,EAGA,MAAA,CAAO,KAAA,EAAe,OAAA,EAAiB,MAAA,EAAqC;AAC1E,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,sBAAA,CAAuB,KAAA,EAAO,SAAS,MAAM,CAAA;AAAA,EACzE;AACF;AAWO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpD,QAAA,CAAS,WAAmB,MAAA,EAAoD;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,mBAAA,CAAoB,WAAW,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,IAAA,CAAK,MAAA,GAAiC,EAAC,EAAG,MAAA,EAAuD;AAC/F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,CAAO,EAAA,EAAY,MAAA,EAAgB,MAAA,EAAiD;AAClF,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,EAAA,EAAI,QAAQ,MAAM,CAAA;AAAA,EAChE;AACF;AAUO,IAAM,UAAN,MAAc;AAAA,EACnB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,IAAA,CAAK,cAAA,GAAkE,EAAC,EAAG,MAAA,EAA6C;AACtH,IAAA,IAAI,aAAa,cAAA,EAAgB,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,YAAY,cAAc,CAAA;AACrF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,QAAQ,cAAc,CAAA;AAAA,EAC9D;AAAA;AAAA,EAGA,GAAA,CAAI,QAAgB,MAAA,EAAuC;AACzD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,QAAQ,MAAM,CAAA;AAAA,EACpD;AAAA;AAAA,EAGA,IAAA,CAAK,MAAA,EAAgB,OAAA,GAA8D,EAAC,EAA8B;AAChH,IAAA,OAAO,aAAA,CAAc,CAAC,MAAA,KAAW,IAAA,CAAK,GAAA,CAAI,UAAU,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAA,EAAG,OAAO,CAAA;AAAA,EACxF;AAAA;AAAA,EAGA,MAAA,CAAO,MAAA,EAAgB,MAAA,GAA6C,IAAI,MAAA,EAAsD;AAC5H,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,CAAQ,KAA2B,MAAA,EAAuC;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,KAAK,MAAM,CAAA;AAAA,EACrD;AAAA;AAAA,EAGA,MAAA,CAAO,QAAgB,MAAA,EAAuC;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,QAAQ,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAA,CAAS,QAAgB,MAAA,EAA+C;AACtE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,EACzD;AACF;AAOO,IAAM,WAAN,MAAe;AAAA,EACpB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA,EAE5C,sBAAsB,KAAA,EAAqB;AACjD,IAAA,IAAI,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,QACxB,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAGA,WAAA,CAAY,KAAyB,MAAA,EAA4C;AAC/E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA,EAGA,qBAAA,CACE,KACA,MAAA,EAC0B;AAC1B,IAAA,IAAA,CAAK,qBAAA,CAAsB,IAAI,eAAe,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,qBAAA,CAAsB,KAAK,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,iBAAA,CAAkB,KAA+B,MAAA,EAAgD;AAC/F,IAAA,IAAA,CAAK,qBAAA,CAAsB,IAAI,eAAe,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAAA,EACzD;AAAA;AAAA,EAGA,GAAA,CAAI,WAAmB,MAAA,EAAgD;AACrE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,kBAAA,CAAmB,WAAW,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA,EAGA,MAAA,CAAO,WAAmB,MAAA,EAAgD;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,qBAAA,CAAsB,WAAW,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA,EAGA,IAAA,CACE,MAAA,GAAqC,EAAC,EACtC,MAAA,EACgC;AAChC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AAAA,EAC/D;AACF;AAUO,IAAM,UAAN,MAAc;AAAA,EAQnB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,GAAG,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,IAAA,CAAK,MAAA,GAA4B,EAAC,EAAG,MAAA,EAA6C;AAChF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,QAAQ,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,GAAA,CAAI,UAAkB,MAAA,EAAuC;AAC3D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,KAAA,CAAM,UAAkB,MAAA,EAAiD;AACvE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,UAAU,MAAM,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,CAAS,UAAkB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,UAAU,MAAM,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAA,CACE,QAAA,EACA,GAAA,EACA,cAAA,EACA,MAAA,EACiB;AACjB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,eAAe,QAAA,EAAU,GAAA,EAAK,gBAAgB,MAAM,CAAA;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,CAAO,QAAA,EAAkB,GAAA,EAA4B,MAAA,EAAuC;AAC1F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CACE,QAAA,EACA,sBAAA,EACA,MAAA,EACiB;AACjB,IAAA,MAAM,cAAA,GAAiB,OAAO,sBAAA,KAA2B,QAAA,GAAW,sBAAA,GAAyB,MAAA;AAC7F,IAAA,MAAM,eAAA,GAAkB,OAAO,sBAAA,KAA2B,QAAA,GAAW,MAAA,GAAS,sBAAA;AAC9E,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,QAAA,EAAU,gBAAgB,eAAe,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAA,CAAQ,QAAA,EAAkB,GAAA,EAA2B,MAAA,EAAuC;AAC1F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,aAAA,CAAc,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAA,CAAgB,UAAkB,MAAA,EAAsD;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,UAAU,MAAM,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAA,CACE,QAAA,EACA,GAAA,EACA,MAAA,EACiC;AACjC,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,EAChE;AACF;AASO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,IAAA,CAAK,MAAA,GAAiC,EAAC,EAAG,MAAA,EAAmD;AAC3F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AAAA,EAC3D;AAAA;AAAA,EAGA,IAAA,CAAK,MAAA,GAAmC,EAAC,EAAG,MAAA,EAAmD;AAC7F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,GAAA,CAAI,KAA4B,MAAA,EAAqD;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,EACtD;AACF;AAWO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAGpD,IAAA,CAAK,MAAA,GAA+B,EAAC,EAAG,MAAA,EAA+C;AACrF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,EACzD;AAAA;AAAA,EAGA,GAAA,CAAI,YAAoB,MAAA,EAAyC;AAC/D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,YAAY,MAAM,CAAA;AAAA,EAC1D;AAAA;AAAA,EAGA,OAAA,CAAQ,KAA6B,MAAA,EAAyC;AAC5E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA,EAGA,MAAA,CAAO,UAAA,EAAoB,GAAA,EAA4B,MAAA,EAAyC;AAC9F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,UAAA,EAAY,KAAK,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,MAAA,EAAyC;AAChD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,MAAM,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,CAAiB,YAAoB,MAAA,EAAiD;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,mBAAA,CAAoB,YAAY,MAAM,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAA,CACE,UAAA,EACA,GAAA,GAAgC,IAChC,MAAA,EAC2B;AAC3B,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,UAAA,EAAY,KAAK,MAAM,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,CAAc,YAAoB,MAAA,EAAkD;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,oBAAA,CAAqB,YAAY,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAA,CAAY,YAAoB,MAAA,EAAoD;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,sBAAA,CAAuB,YAAY,MAAM,CAAA;AAAA,EACrE;AACF;AAYO,IAAM,QAAN,MAAY;AAAA,EAMjB,YAA6B,GAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAuB;AAAA;AAAA,EAJpD,eAAA,CAAgB,QAAA,EAAkB,GAAA,EAA6B,MAAA,EAAkD;AAC/G,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,QAAA,EAAU,KAAK,MAAM,CAAA;AAAA,EACjE;AAAA;AAAA,EAKA,GAAA,CAAI,MAAA,GAAyB,EAAC,EAAG,MAAA,EAA6C;AAC5E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,QAAQ,MAAM,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAA,CAAK,KAAsB,MAAA,EAAqC;AAC9D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,EAChD;AAAA;AAAA,EAGA,OAAA,CAAQ,MAAA,EAAgB,OAAA,EAAiC,MAAA,EAAqC;AAC5F,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,EAC/D;AAAA;AAAA,EAGA,MAAA,CAAO,QAAgB,MAAA,EAAqC;AAC1D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA,EACrD;AAAA;AAAA,EAGA,KAAA,CAAM,MAAA,GAA6B,EAAC,EAAG,MAAA,EAAqD;AAC1F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,QAAQ,MAAM,CAAA;AAAA,EACvD;AAAA;AAAA,EAGA,IAAA,CAAK,OAAe,MAAA,EAAqC;AACvD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,OAAO,MAAM,CAAA;AAAA,EACxD;AACF;;;AChwBO,IAAM,gBAAA,GAAmB;AAGzB,IAAM,aAAA,GAAgB;AAkC7B,SAAS,QAAQ,IAAA,EAAkC;AAEjD,EAAA,MAAM,GAAA,GAAO,WAA0E,OAAA,EACnF,GAAA;AACJ,EAAA,OAAO,MAAM,IAAI,CAAA;AACnB;AAEA,IAAM,gBAA8B,EAAE,UAAA,EAAY,GAAG,WAAA,EAAa,GAAA,EAAK,YAAY,GAAA,EAAK;AAEjF,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAoD3B,WAAA,CAAY,OAAA,GAAkC,EAAC,EAAG;AAChD,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,mBAAmB,CAAA,IAAK,EAAA;AACjE,IAAA,MAAM,eAAA,GACJ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,wBAAwB,CAAA,IAAK,gBAAA;AAC1D,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,SAAA,KAAc,MAAA,IAAU,eAAA,KAAoB,aAAA;AAEtD,IAAA,IAAA,CAAK,OAAA,GAAU,UAAU,aAAA,GAAgB,eAAA;AACzC,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACxC,IAAA,IAAA,CAAK,OAAA,GAAU,aAAa,MAAM,CAAA;AAClC,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,IAAA,CAAK,aAAA,GAAgB,EAAE,oBAAA,EAAsB,SAAA,EAAU;AAEvD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,aAAA,CAAc,OAAA,CAAQ,WAAW,CAAA;AACtD,MAAC,IAAA,CAAK,SAAA,CAA4B,OAAA,CAAQ,8BAAA,CAA+B,MAAM,CAAA;AAAA,IACjF,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAC9C,MAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACnC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAA2B;AAAA,QAC/B,OAAA,EAAS,eAAA;AAAA,QACT,MAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAO,EAAE,GAAG,aAAA,EAAe,GAAG,QAAQ,KAAA,EAAM;AAAA,QAC5C,KAAA,EAAO,SAAA;AAAA,QACP,cAAA,EAAgB,OAAA,CAAQ,cAAA,IAAkB,EAAC;AAAA,QAC3C,YAAY,IAAA,CAAK;AAAA,OACnB;AACA,MAAA,IAAA,CAAK,YAAY,IAAI,aAAA,CAAc,IAAI,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,cAAA,CAAe,CAAC,YAAY,IAAA,CAAK,SAAA,CAAU,qBAAA,CAAsB,OAAO,CAAC,CAAA;AACnG,IAAA,MAAM,GAAA,GAAM,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,eAAe,IAAA,CAAK,aAAA,EAAe,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ;AAClG,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,WAAA,CAAY,GAAG,CAAA;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,CAAA;AAChC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,YAAA,CAAa,GAAG,CAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,YAAA,CAAa,GAAG,CAAA;AACxC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,GAAG,CAAA;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAA,CAAO,KAAoB,MAAA,EAA+C;AACxE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,OAAO,MAAA,EAAuC;AAC5C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAA,CAAO,OAAe,MAAA,EAAoC;AACxD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAA,EAAO,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,QAAA,CACJ,GAAA,EACA,OAAA,EACA,MAAA,EACkE;AAClE,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,MAAM,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,IAAI,gBAAA,CAAgB;AAAA,MACjC,QAAQ,UAAA,CAAW,SAAA;AAAA,MACnB,GAAI,IAAA,CAAK,OAAA,KAAY,aAAA,GACjB,EAAE,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAc,IAAA,CAAK,UAA4B,OAAA,EAAQ,GAC5E,EAAE,OAAA,EAAS,KAAK,OAAA,EAAQ;AAAA,MAC5B,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAA,EAA8B;AAClC,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,SAAA,EAAW,OAAA,EAAS,KAAK,aAAa,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,CAAY,GAAA,GAA0B,EAAC,EAAG,MAAA,EAA4C;AACpF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAA,EAAK,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAA,CAAO,OAAA,GAAyB,EAAC,EAA+C;AAC9E,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,MAAM,OAAA,CAAQ,WAAA,EAAa,QAAQ,MAAM,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAA,CACJ,OAAA,EACA,OAAA,GAAyB,EAAC,EACX;AACf,IAAA,WAAA,MAAiB,EAAA,IAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAG;AAC3C,MAAA,MAAM,QAAQ,EAAE,CAAA;AAAA,IAClB;AAAA,EACF;AACF;;;ACvSO,SAAS,kBAAkB,GAAA,EAAgD;AAChF,EAAA,OAAO,IAAI,IAAA,KAAS,mBAAA;AACtB;AAMO,SAAS,kBAAkB,GAAA,EAAkD;AAClF,EAAA,OAAO,CAAC,kBAAkB,GAAG,CAAA;AAC/B;AASO,SAAS,gBAAgB,GAAA,EAAsC;AACpE,EAAA,IAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG,OAAO,MAAA;AACnC,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,eAAA,KAAoB,MAAA,GAAY,GAAA,CAAI,eAAA,GAAkB,GAAA,CAAI,IAAA,KAAS,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,EAAA,GAAK,GAAA,CAAI,UAAA;AACvH,EAAA,OAAO,SAAA,EAAW,UAAA,CAAW,MAAM,CAAA,GAAI,SAAA,GAAY,MAAA;AACrD;AASO,SAAS,WAAW,GAAA,EAAsC;AAC/D,EAAA,IAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG,OAAO,MAAA;AACnC,EAAA,OAAO,IAAI,IAAA,KAAS,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,YAAY,GAAA,CAAI,SAAA;AAC3D;AAUO,SAAS,WAAW,GAAA,EAAsC;AAC/D,EAAA,IAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG,OAAO,IAAI,MAAA,CAAO,EAAA;AAC9C,EAAA,OAAO,IAAI,IAAA,KAAS,MAAA,GAAS,GAAA,CAAI,MAAA,EAAQ,KAAK,GAAA,CAAI,SAAA;AACpD;;;ACvCA,SAAS,qBAAqB,MAAA,EAA6C;AACzE,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,KAAe,EAAC;AACtB,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACpC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC3B,IAAA,IAAI,OAAO,EAAA,EAAI;AACf,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AACnC,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,CAAC,EAAE,IAAA,EAAK;AACtC,IAAA,IAAI,GAAA,KAAQ,GAAA,EAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAAA,SAAA,IACxB,GAAA,KAAQ,IAAA,EAAM,EAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,EAAE,GAAG,EAAA,EAAG;AACjB;AAEA,SAAS,MAAM,MAAA,EAA6B;AAC1C,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAM,CAAA;AACnC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,GAAA,IAAO,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC5D,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,eAAA,CAAgB,GAAW,CAAA,EAAoB;AACtD,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK,IAAA,IAAQ,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,GAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAC3E,EAAA,OAAO,IAAA,KAAS,CAAA;AAClB;AAEA,eAAe,aAAA,CAAc,QAAgB,OAAA,EAAkC;AAC7E,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,EAAQ,MAAA;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,EAAY;AAC5B,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,SAAA;AAAA,IACvB,KAAA;AAAA,IACA,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,IACjB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,IAChC,KAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,IAAA,CAAK,QAAQ,GAAA,EAAK,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA;AAC9D,EAAA,OAAO,MAAM,GAAG,CAAA;AAClB;AAgBA,eAAsB,uBAAuB,OAAA,EAAiD;AAC5F,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,MAAA,EAAO,GAAI,OAAA;AACvC,EAAA,MAAM,SAAA,GAAY,QAAQ,gBAAA,IAAoB,GAAA;AAC9C,EAAA,MAAMD,IAAAA,GAAM,QAAQ,UAAA,IAAc,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAE9D,EAAA,MAAM,EAAE,CAAA,EAAG,EAAA,EAAG,GAAI,qBAAqB,SAAS,CAAA;AAChD,EAAA,IAAI,CAAC,CAAA,IAAK,EAAA,CAAG,MAAA,KAAW,GAAG,OAAO,KAAA;AAClC,EAAA,IAAI,KAAK,GAAA,CAAIA,IAAAA,GAAM,CAAC,CAAA,GAAI,WAAW,OAAO,KAAA;AAE1C,EAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAC9D,EAAA,OAAO,GAAG,IAAA,CAAK,CAAC,cAAc,eAAA,CAAgB,SAAA,EAAW,QAAQ,CAAC,CAAA;AACpE;AAMA,eAAsB,aAAa,OAAA,EAA+D;AAChG,EAAA,MAAM,EAAA,GAAK,MAAM,sBAAA,CAAuB,OAAO,CAAA;AAC/C,EAAA,IAAI,CAAC,IAAI,OAAO,IAAA;AAChB,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AACnC;AAQA,eAAsB,WAAA,CACpB,MAAA,EACA,IAAA,EACA,gBAAA,EACiB;AACjB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AACrC,EAAA,MAAM,EAAA,GAAK,MAAM,aAAA,CAAc,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AACrD,EAAA,OAAO,CAAA,EAAA,EAAK,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,CAAA;AACxB;;;AC0BO,IAAM,gBAAA,GAAmB;AA4CzB,IAAM,iBAAA,GAAsC;AAAA,EACjD,IAAA,EAAM,uBAAA;AAAA,EACN,OAAA,EAAS,gBAAA;AAAA,EACT,SAAA,EAAW,aAAA;AAAA,EACX,IAAA,EAAM,oBAAA;AAAA,EACN,QAAA,EAAU,iBAAA;AAAA;AAAA,EAEV,aAAa,CAAC,cAAA,EAAgB,gBAAA,EAAkB,UAAA,EAAY,QAAQ,aAAa,CAAA;AAAA;AAAA;AAAA,EAGjF,MAAA,EAAQ;AAAA;AAAA,IAEN,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,uBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA;AAAA,IAEA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,uBAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA;AAAA,IAEA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,wBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA;AAAA,IAEA,uBAAA;AAAA,IACA,uBAAA;AAAA,IACA,sBAAA;AAAA;AAAA,IAEA,UAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA;AAAA,IAEA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,0BAAA;AAAA;AAAA,IAEA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,YAAA;AAAA;AAAA,IAEA,iBAAA;AAAA,IACA,gBAAA;AAAA;AAAA,IAEA,gBAAA;AAAA,IACA,uBAAA;AAAA,IACA,yBAAA;AAAA,IACA,wBAAA;AAAA;AAAA,IAEA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,8BAAA;AAAA,IACA,0BAAA;AAAA,IACA,4BAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,CAAC,sBAAA,EAAwB,yBAAyB;AAC5D","file":"index.cjs","sourcesContent":["// Generated by go run ./cmd/extrovert-admin-contract. Do not edit.\nexport const administrativeCatalog = [{\"description\":null,\"id\":\"getConnectionAuthorization\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"authorization_id\":{\"type\":\"string\"}},\"required\":[\"authorization_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/connection-authorizations/{authorization_id}\",\"responseFormat\":\"json\",\"summary\":\"Inspect the application and requested resource before consent\"},{\"description\":null,\"id\":\"approveConnectionAuthorization\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/ConnectionConsent\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"authorization_id\":{\"type\":\"string\"}},\"required\":[\"authorization_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/connection-authorizations/{authorization_id}/approve\",\"responseFormat\":\"json\",\"summary\":\"Authorize a new connection grant\"},{\"description\":null,\"id\":\"denyConnectionAuthorization\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"authorization_id\":{\"type\":\"string\"}},\"required\":[\"authorization_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/connection-authorizations/{authorization_id}/deny\",\"responseFormat\":\"json\",\"summary\":\"Deny an authorization request\"},{\"description\":null,\"id\":\"listConnections\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"query\":{\"additionalProperties\":false,\"properties\":{\"created_by_connection_id\":{\"description\":\"Show independently surviving access created by this connection.\",\"type\":\"string\"},\"cursor\":{\"description\":\"Opaque pagination cursor echoed back from a prior `next_cursor`. Treat it as an opaque token; pass it back verbatim as `?cursor` to fetch the next page.\\n\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/connections\",\"responseFormat\":\"json\",\"summary\":\"List your connections and independently surviving created credentials\"},{\"description\":null,\"id\":\"listConnectionCreatedCredentials\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"connection_id\":{\"type\":\"string\"}},\"required\":[\"connection_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"description\":\"Opaque pagination cursor echoed back from a prior `next_cursor`. Treat it as an opaque token; pass it back verbatim as `?cursor` to fetch the next page.\\n\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/connections/{connection_id}/created-credentials\",\"responseFormat\":\"json\",\"summary\":\"List independently surviving agent keys and enrollment tokens created by a connection\"},{\"description\":\"Revoking an enrollment token does not revoke keys it already issued. Each issued key has its own record and revoke operation.\",\"id\":\"revokeConnectionCreatedCredential\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"connection_id\":{\"type\":\"string\"},\"credential_id\":{\"type\":\"string\"}},\"required\":[\"connection_id\",\"credential_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/connections/{connection_id}/created-credentials/{credential_id}/revoke\",\"responseFormat\":\"json\",\"summary\":\"Revoke one created agent key or enrollment token separately from its parent\"},{\"description\":\"Requires an active full-account connection matching connection_id. The new credential has its own expiry and revocation, and records the source connection as provenance. The secret is returned only once.\",\"id\":\"createConnectionCredential\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/ConnectionConsent\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"connection_id\":{\"type\":\"string\"}},\"required\":[\"connection_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/connections/{connection_id}/credentials\",\"responseFormat\":\"json\",\"summary\":\"Create an independently surviving credential\"},{\"description\":null,\"id\":\"listConnectionEvents\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"connection_id\":{\"type\":\"string\"}},\"required\":[\"connection_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"description\":\"Opaque pagination cursor echoed back from a prior `next_cursor`. Treat it as an opaque token; pass it back verbatim as `?cursor` to fetch the next page.\\n\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/connections/{connection_id}/events\",\"responseFormat\":\"json\",\"summary\":\"List activity attributed to this connection\"},{\"description\":null,\"id\":\"revokeConnection\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"connection_id\":{\"type\":\"string\"}},\"required\":[\"connection_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/connections/{connection_id}/revoke\",\"responseFormat\":\"json\",\"summary\":\"Revoke this connection without revoking credentials it created\"},{\"description\":\"Accepts an invitation by its raw token. IDENTITY-ONLY (no {org_id}; the token carries the org). The accept binds to the authenticated user's VERIFIED Clerk email == the normalized invitation email (else 403). Idempotent for the same user; a revoked/expired invitation cannot be accepted.\\n\",\"id\":\"acceptInvitation\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AcceptInvitationRequest\"}},\"required\":[\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/invitations/accept\",\"responseFormat\":\"json\",\"summary\":\"Accept an invitation (identity-only; email-bound)\"},{\"description\":\"Returns the authenticated Clerk identity plus the orgs/projects it can reach (derived from membership). The console uses this to render the org/project switchers and to revalidate cookie landing hints. IDENTITY-ONLY; no {org_id} in the URL.\\n\",\"id\":\"adminMe\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me\",\"responseFormat\":\"json\",\"summary\":\"The identity's reachable orgs + projects (landing scope)\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"personalNotificationSettings\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me/notifications\",\"responseFormat\":\"json\",\"summary\":\"Read personal notification preferences\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"patchPersonalNotificationPreferences\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PersonalPreferencePatch\"}},\"required\":[\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/me/notifications\",\"responseFormat\":\"json\",\"summary\":\"Change one category or grouping interval with optimistic version checking\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"personalNotificationHistory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"maxLength\":1024,\"type\":\"string\"},\"limit\":{\"default\":50,\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me/notifications/history\",\"responseFormat\":\"json\",\"summary\":\"List current authorized notifications across organizations\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"personalNotificationBatch\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"batch_id\":{\"type\":\"string\"}},\"required\":[\"batch_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me/notifications/history/{batch_id}\",\"responseFormat\":\"json\",\"summary\":\"View a grouped notification after rechecking current access\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"personalPushDevices\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me/push-devices\",\"responseFormat\":\"json\",\"summary\":\"List up to 20 personal devices\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"enrollPersonalPushDevice\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PersonalPushEnrollment\"}},\"required\":[\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/me/push-devices\",\"responseFormat\":\"json\",\"summary\":\"Enroll or refresh this user’s browser subscription without duplicates\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"personalPushPublicKey\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/me/push-devices/public-key\",\"responseFormat\":\"json\",\"summary\":\"Read the deployment’s shared VAPID public key and availability\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"testPersonalPushDevices\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"additionalProperties\":false,\"properties\":{\"device_ids\":{\"items\":{\"type\":\"string\"},\"maxItems\":20,\"minItems\":1,\"type\":\"array\"}},\"required\":[\"device_ids\"],\"type\":\"object\"}},\"required\":[\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/me/push-devices/test\",\"responseFormat\":\"json\",\"summary\":\"Send an explicit test to selected owned devices, once per minute\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"patchPersonalPushDevice\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PersonalPushDevicePatch\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"device_id\":{\"type\":\"string\"}},\"required\":[\"device_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/me/push-devices/{device_id}\",\"responseFormat\":\"json\",\"summary\":\"Rename or pause an owned device\"},{\"description\":\"Clerk identity only. Preferences and devices belong to the person across all current and future organizations. Agent credentials are not accepted. Request bodies are limited to 16 KB. Responses use private, no-store caching.\\n\",\"id\":\"removePersonalPushDevice\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"device_id\":{\"type\":\"string\"}},\"required\":[\"device_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/me/push-devices/{device_id}\",\"responseFormat\":\"json\",\"summary\":\"Remove an owned device\"},{\"description\":null,\"id\":\"listOrgs\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{},\"required\":null,\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs\",\"responseFormat\":\"json\",\"summary\":\"List the identity's reachable orgs\"},{\"description\":\"Create a CHILD org under parent_org_id (required). Requires admin+ on the parent. The child inherits the root org's tier/limits and is capped by the root's max_child_orgs. Client org/customer ids are never accepted.\\n\",\"id\":\"createOrg\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateOrgRequest\"}},\"required\":[\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs\",\"responseFormat\":\"json\",\"summary\":\"Create a child org (admin+ on the parent)\"},{\"description\":null,\"id\":\"patchOrg\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PatchOrgRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}\",\"responseFormat\":\"json\",\"summary\":\"Update an org's display fields (admin)\"},{\"description\":\"Soft-deletes (archives) the org. Guarded: an org with active child orgs or active projects cannot be archived. The compatibility customers row is never hard-deleted.\\n\",\"id\":\"archiveOrg\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}\",\"responseFormat\":\"json\",\"summary\":\"Archive (soft-delete) an org (owner)\"},{\"description\":null,\"id\":\"adminGetBilling\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"month\":{\"example\":\"2026-06\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/billing\",\"responseFormat\":\"json\",\"summary\":\"Get org billing state and plan entitlements\"},{\"description\":null,\"id\":\"adminCreateBillingCheckout\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateBillingCheckoutRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/billing/checkout\",\"responseFormat\":\"json\",\"summary\":\"Create a Stripe Checkout Session for an Extrovert paid plan\"},{\"description\":\"Quotes the requested domain and a configured .com baseline with the registrar, reuses or creates a lookup-keyed annual Stripe Price, then returns a Checkout Session. Registration is queued only after the domain Checkout succeeds.\",\"id\":\"adminCreateDomainBillingCheckout\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateDomainBillingCheckoutRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/billing/domain-checkout\",\"responseFormat\":\"json\",\"summary\":\"Create a Stripe Checkout Session for an annual managed-domain registration\"},{\"description\":null,\"id\":\"adminCreateBillingPortal\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateBillingPortalRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/billing/portal\",\"responseFormat\":\"json\",\"summary\":\"Create a Stripe Billing Portal Session for payment recovery and subscription management\"},{\"description\":null,\"id\":\"adminListCommerceRequests\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"kind\":{\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"},\"state\":{\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests\",\"responseFormat\":\"json\",\"summary\":\"List commerce approvals for an org\"},{\"description\":null,\"id\":\"adminCreateDomainPurchaseRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateDomainPurchaseRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/domain-purchases\",\"responseFormat\":\"json\",\"summary\":\"Create an exact-price domain request without charging or registering\"},{\"description\":null,\"id\":\"adminCreatePlanChangeRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreatePlanChangeRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/plan-changes\",\"responseFormat\":\"json\",\"summary\":\"Create a reviewable upgrade or downgrade without charging\"},{\"description\":null,\"id\":\"adminGetCommerceRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}\",\"responseFormat\":\"json\",\"summary\":\"Get a commerce approval request\"},{\"description\":null,\"id\":\"adminApproveCommerceRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/DecideCommerceRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}/approve\",\"responseFormat\":\"json\",\"summary\":\"Approve once and optionally create bounded future authority\"},{\"description\":null,\"id\":\"adminCancelCommerceRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}/cancel\",\"responseFormat\":\"json\",\"summary\":\"Cancel a commerce request before irreversible work\"},{\"description\":null,\"id\":\"adminDenyCommerceRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/DecideCommerceRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}/deny\",\"responseFormat\":\"json\",\"summary\":\"Deny a pending commerce request\"},{\"description\":null,\"id\":\"adminGetCommercePaymentLink\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}/payment-link\",\"responseFormat\":\"json\",\"summary\":\"Get Stripe's hosted payment-authentication link for a human\"},{\"description\":null,\"id\":\"adminRetryCommerceRequest\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"request_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"request_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/requests/{request_id}/retry\",\"responseFormat\":\"json\",\"summary\":\"Resume the same idempotent request after a recoverable blocker\"},{\"description\":null,\"id\":\"adminListCommerceSpendLimits\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/spend-limits\",\"responseFormat\":\"json\",\"summary\":\"List bounded future domain-purchase authority\"},{\"description\":null,\"id\":\"adminCreateCommerceSpendLimit\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CommerceSpendLimitInput\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/spend-limits\",\"responseFormat\":\"json\",\"summary\":\"Create bounded future domain-purchase authority\"},{\"description\":null,\"id\":\"adminUpdateCommerceSpendLimit\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CommerceSpendLimitInput\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"limit_id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"limit_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PUT\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/spend-limits/{limit_id}\",\"responseFormat\":\"json\",\"summary\":\"Update a spend control with version fencing\"},{\"description\":null,\"id\":\"adminDeleteCommerceSpendLimit\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"limit_id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"limit_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/commerce/spend-limits/{limit_id}\",\"responseFormat\":\"json\",\"summary\":\"Disable a spend control\"},{\"description\":null,\"id\":\"adminListDomains\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/domains\",\"responseFormat\":\"json\",\"summary\":\"List onboarded domains\"},{\"description\":null,\"id\":\"adminOnboardDomain\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/OnboardDomainRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/domains\",\"responseFormat\":\"json\",\"summary\":\"Add a delegated or purchased domain\"},{\"description\":\"Read one onboarded domain the caller's org owns, including the DNS nameserver records the customer must publish for `ns_delegated` mode. The list endpoint omits records to stay lightweight, so the console reads this when a domain row is expanded so the delegation reappears after the onboarding dialog is dismissed or the page reloaded. Tenant-scoped: an unknown domain, or one owned by a different org, is a 404 (records are never leaked across tenants).\\n\",\"id\":\"adminGetDomain\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"domain\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"domain\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/domains/{domain}\",\"responseFormat\":\"json\",\"summary\":\"Get one domain's detail and nameserver records\"},{\"description\":\"Requires org admin membership and ownership. Checks authoritative DNS immediately (bounded to 30 seconds), persists the result, and returns current detail. DNS confirmation does not imply completed mail setup. Concurrent checks and repeats within 10 seconds return 429 with Retry-After. Inconclusive DNS results return delegation.status check_delayed.\\n\",\"id\":\"adminVerifyDomain\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"domain\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"domain\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/domains/{domain}/verify\",\"responseFormat\":\"json\",\"summary\":\"Recheck delegated domain DNS now\"},{\"description\":\"Creates (or idempotently reuses an existing pending) org invitation. The raw token is returned ONCE on a fresh create (201); a reused pending invite returns 200 with no token. Role-capped to the inviter's own role.\\n\",\"id\":\"createInvitation\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateInvitationRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/invitations\",\"responseFormat\":\"json\",\"summary\":\"Invite a member to the org (admin; role-capped)\"},{\"description\":null,\"id\":\"revokeInvitation\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"invitation_id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"invitation_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/invitations/{invitation_id}/revoke\",\"responseFormat\":\"json\",\"summary\":\"Revoke a pending invitation (admin)\"},{\"description\":null,\"id\":\"listMembers\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/members\",\"responseFormat\":\"json\",\"summary\":\"List the org's members (viewer)\"},{\"description\":\"Changes a member's role. Role-capped to the actor's own effective role; demoting the org's LAST owner is refused (409 last_owner).\\n\",\"id\":\"updateMemberRole\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/UpdateMemberRoleRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"user_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"user_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/members/{user_id}\",\"responseFormat\":\"json\",\"summary\":\"Change a member's role (admin; role-capped, last-owner guarded)\"},{\"description\":\"Removes a member. Removing the org's LAST owner is refused (409 last_owner).\\n\",\"id\":\"removeMember\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"user_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"user_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/members/{user_id}\",\"responseFormat\":\"json\",\"summary\":\"Remove a member from the org (admin; last-owner guarded)\"},{\"description\":null,\"id\":\"listProjects\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"include_archived\":{\"type\":\"boolean\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects\",\"responseFormat\":\"json\",\"summary\":\"List the org's projects (viewer)\"},{\"description\":\"Create a project under the org. The org's max_projects cap is enforced inside the same transaction as the create. Client ids are never accepted.\\n\",\"id\":\"createProject\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateProjectRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects\",\"responseFormat\":\"json\",\"summary\":\"Create a project in the org (admin)\"},{\"description\":null,\"id\":\"patchProject\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PatchProjectRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}\",\"responseFormat\":\"json\",\"summary\":\"Update a project's display fields (admin)\"},{\"description\":\"Soft-deletes (archives) the project. Guarded: the default project can never be archived, and a project with active resources cannot be archived.\\n\",\"id\":\"archiveProject\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}\",\"responseFormat\":\"json\",\"summary\":\"Archive (soft-delete) a project (admin)\"},{\"description\":null,\"id\":\"listAgentKeys\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"agent_id\":{\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agent-keys\",\"responseFormat\":\"json\",\"summary\":\"List issued agent API keys\"},{\"description\":null,\"id\":\"issueAgentKey\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/IssueAgentKeyRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agent-keys\",\"responseFormat\":\"json\",\"summary\":\"Issue an agent API key (secret shown once)\"},{\"description\":null,\"id\":\"revokeAgentKey\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agent-keys/{id}\",\"responseFormat\":\"json\",\"summary\":\"Revoke an agent API key\"},{\"description\":null,\"id\":\"listAgents\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agents\",\"responseFormat\":\"json\",\"summary\":\"List agents\"},{\"description\":\"Creates an active, project-bound agent for console-managed inboxes. API keys can be issued separately.\",\"id\":\"createAgent\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateAgentRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agents\",\"responseFormat\":\"json\",\"summary\":\"Create an agent identity without issuing credentials\"},{\"description\":null,\"id\":\"disableAgent\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agents/{id}/disable\",\"responseFormat\":\"json\",\"summary\":\"Disable an agent (instantly invalidates its keys)\"},{\"description\":null,\"id\":\"enableAgent\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/agents/{id}/enable\",\"responseFormat\":\"json\",\"summary\":\"Re-enable a disabled agent\"},{\"description\":null,\"id\":\"listAuditEvents\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/audit\",\"responseFormat\":\"json\",\"summary\":\"List the org's console audit log\"},{\"description\":\"List the shared category registry, scoped to the resolved org/project. The agent-plane read (GET /v1/categories) is AgentKey-only, so the console reads the SAME view here (Clerk session). The optional `match` is a pure lexical/substring filter (NO LLM); identity is opaque cat_ ids (D10).\\n\",\"id\":\"adminListCategories\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"limit\":{\"default\":100,\"maximum\":200,\"minimum\":1,\"type\":\"integer\"},\"match\":{\"description\":\"Lexical substring filter over name+description+slug (every token must match; NO LLM).\",\"type\":\"string\"},\"page\":{\"description\":\"Opaque next_cursor from the preceding page. Keep match and sort unchanged.\",\"type\":\"string\"},\"sort\":{\"default\":\"popular\",\"description\":\"30-day popularity by default; last use and category ID break ties. Semantic fit remains the agent's choice.\",\"enum\":[\"popular\",\"messages_7d\",\"messages_90d\",\"last_used\",\"pending_reviews\",\"name\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories\",\"responseFormat\":\"json\",\"summary\":\"Browse the category registry (console plane)\"},{\"description\":null,\"id\":\"adminCreateCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminCreateCategoryRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories\",\"responseFormat\":\"json\",\"summary\":\"Create a category from the console\"},{\"description\":\"Read one category from the shared registry, scoped to the resolved org/project. The agent-plane read (GET /v1/categories/{id}) is AgentKey-only, so the console reads the SAME view here (Clerk session). The console re-reads after a soft-delete to reflect the self-tombstone. A foreign id is 404.\\n\",\"id\":\"adminGetCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}\",\"responseFormat\":\"json\",\"summary\":\"Get one category (console plane)\"},{\"description\":\"Rename / re-describe a category with author_kind=human (metadata only, D10); writes a rename/redescribe audit/undo row. Console-only (never an MCP tool, D17). Customer-scoped; a foreign id is 404.\\n\",\"id\":\"adminUpdateCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/UpdateCategoryRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}\",\"responseFormat\":\"json\",\"summary\":\"Rename / re-describe a category (console plane, human authority)\"},{\"description\":\"SOFT delete the category (D9 never-hard-delete): the row + its references + history survive as training data. The soft-delete is a self-tombstone (merged_into = self) so it drops out of the default registry list; an audit/undo row (action=retire) records it. Console-only; a foreign id is 404.\\n\",\"id\":\"adminDeleteCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}\",\"responseFormat\":\"json\",\"summary\":\"Soft-delete a category (console plane, human authority)\"},{\"description\":\"Read the $0-LLM, read-only D19 snapshot of how many queued drafts are stale vs current-enough against the current rules-version (§8). The agent-plane read (GET /v1/categories/{id}/backlog-status) is AgentKey-only, so the console reads the SAME view here (Clerk session) for its reconciliation panel; the human scan-backlog button TRIGGERS the sweep. Read-only; a foreign id is 404.\\n\",\"id\":\"adminGetBacklogStatus\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/backlog-status\",\"responseFormat\":\"json\",\"summary\":\"Read a category's backlog reconciliation status (console plane)\"},{\"description\":\"Flip the graduation bit ONE rung down (auto_silent→auto_notify→supervised). Demoting from supervised is 409 (nowhere below). On success it clears the graduated provenance, writes a ctr_ transition (reason regressed), emits category.demoted, and enqueues recheck_category nudges. Console-only (never an MCP tool, D17). A foreign id is 404.\\n\",\"id\":\"adminDemoteCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/demote\",\"responseFormat\":\"json\",\"summary\":\"Demote a category one rung down (console plane, human authority)\"},{\"description\":\"Flip the graduation bit ONE rung up: supervised→auto_notify→auto_silent (D16). never_graduate is locked at supervised (409 graduation_locked); a non-adjacent target is 400; graduating to auto_silent requires the MATURITY GATE (clean_approval_count ≥ N AND category age ≥ min_age_hours) or it is 409 maturity_gate_unmet. On success it writes a ctr_ transition, emits category.graduated, and enqueues recheck_category nudges to pending drafts. Console-only (never an MCP tool, D17). A foreign id is 404.\\n\",\"id\":\"adminGraduateCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/GraduateCategoryRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/graduate\",\"responseFormat\":\"json\",\"summary\":\"Graduate a category one rung up (console plane, human authority)\"},{\"description\":\"Read the gate status toward the next rung (the maturity gate + drift tripwire counters that drive the console graduation controls). The agent-plane read (GET /v1/categories/{id}/graduation-status) is AgentKey-only, so the console reads the SAME view here (Clerk session). Read-only; a foreign id is 404.\\n\",\"id\":\"adminGetGraduationStatus\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/graduation-status\",\"responseFormat\":\"json\",\"summary\":\"Read a category's graduation gate status (console plane)\"},{\"description\":\"Merge the path category (the loser) into into_category_id (the survivor), repointing all rr_/rule_ references BY cat_ id and setting merged_into on the loser in ONE transaction (D9/D10), plus a merge transition + audit/undo row. A cross-tenant or unknown into_category_id is 404 (never a cross-customer merge); merging into itself is 400. Console-only.\\n\",\"id\":\"adminMergeCategory\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/MergeCategoryRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/merge\",\"responseFormat\":\"json\",\"summary\":\"Merge a category into another (console plane, human authority)\"},{\"description\":\"Pin a category at supervised (locked=true) or release the pin (locked=false; D16). Locking a graduated category FIRST demotes it down to supervised (each rung writes its own ctr_ transition) so a locked category can never sit in a live auto-send state. Clearing the lock leaves the state untouched. Console-only (never an MCP tool, D17). A foreign id is 404.\\n\",\"id\":\"adminSetNeverGraduate\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/NeverGraduateRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/never-graduate\",\"responseFormat\":\"json\",\"summary\":\"Set/clear the never-graduate lock on a category (console plane, human authority)\"},{\"description\":\"Read the demand-driven pacing snapshot: the human review cursor, the effective window/ceiling/interval, the queued count, and each draft's in-window / redrafting / behind-cursor classification (the \\\"redrafting…\\\" shimmer). The agent-plane read (GET /v1/categories/{id}/pacing-state) is AgentKey-only, so the console reads the SAME view here (Clerk session). Read-only; a foreign id is 404.\\n\",\"id\":\"adminGetPacingState\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/pacing-state\",\"responseFormat\":\"json\",\"summary\":\"Read a category's demand-driven pacing state (console plane)\"},{\"description\":\"Set / clear the per-category risk-dial OVERRIDES (D12). For each field, a non-null value SETS the override; an explicit JSON null RESETS it back to inherit (null = account default); an omitted field is unchanged. Console-only (never an MCP tool, D17). A foreign id is 404.\\n\",\"id\":\"adminUpdateCategoryRiskDial\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CategoryRiskDialRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/risk-dial\",\"responseFormat\":\"json\",\"summary\":\"Set a category's risk-dial overrides (console plane, human authority)\"},{\"description\":\"Run the D19/§8 on-demand reconciliation sweep for a category: walk every QUEUED draft and INTEGER-COMPARE its composed_* rules-versions against the category's CURRENT versions (with a tunable staleness tolerance). A current-enough draft is released through the M6 submit-time gate (the agent re-submits to deliver; the gate is re-run, never bypassed); a stale draft is nudged to redraft against current rules and stays queued. The human never hand-touches the backlog and no stale draft slips out. Deterministic, $0-LLM. Console-only (never an MCP tool, D17). A foreign id is 404.\\n\",\"id\":\"adminScanBacklog\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/ScanBacklogRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/categories/{id}/scan-backlog\",\"responseFormat\":\"json\",\"summary\":\"Run the D19 backlog reconciliation sweep on demand (console plane)\"},{\"description\":null,\"id\":\"listEnrollmentTokens\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"include_revoked\":{\"type\":\"boolean\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/enrollment-tokens\",\"responseFormat\":\"json\",\"summary\":\"List enrollment tokens\"},{\"description\":null,\"id\":\"issueEnrollmentToken\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/IssueEnrollmentTokenRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/enrollment-tokens\",\"responseFormat\":\"json\",\"summary\":\"Issue an enrollment token (secret shown once)\"},{\"description\":null,\"id\":\"revokeEnrollmentToken\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/enrollment-tokens/{id}\",\"responseFormat\":\"json\",\"summary\":\"Revoke an enrollment token\"},{\"description\":null,\"id\":\"adminListInboxes\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page token echoed back from a prior `next_page`. Used by the legacy offset-paginated admin/console list surface; the cursor-paginated agent surface uses `Cursor` (`?cursor`) instead.\\n\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes\",\"responseFormat\":\"json\",\"summary\":\"List every inbox in the org\"},{\"description\":null,\"id\":\"adminCreateInbox\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminCreateInboxRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes\",\"responseFormat\":\"json\",\"summary\":\"Create an inbox from the console\"},{\"description\":null,\"id\":\"adminUpdateInbox\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminUpdateInboxRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}\",\"responseFormat\":\"json\",\"summary\":\"Update an inbox's enforced daily recipient limit\"},{\"description\":null,\"id\":\"adminDeleteInbox\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}\",\"responseFormat\":\"json\",\"summary\":\"Permanently delete an inbox and its authenticated sender\"},{\"description\":null,\"id\":\"adminListMessages\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"folder\":{\"description\":\"IMAP folder to read (default INBOX).\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/messages\",\"responseFormat\":\"json\",\"summary\":\"List recent messages for an org inbox\"},{\"description\":null,\"id\":\"adminGetMessage\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque message id (`msg_...`). Encodes its owning inbox.\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/messages/{id}\",\"responseFormat\":\"json\",\"summary\":\"Get a single message (with attachment metadata) for an org inbox\"},{\"description\":null,\"id\":\"adminListAttachments\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque message id (`msg_...`). Encodes its owning inbox.\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/messages/{id}/attachments\",\"responseFormat\":\"json\",\"summary\":\"List a message's attachment metadata for an org inbox\"},{\"description\":null,\"id\":\"adminGetAttachment\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"attId\":{\"description\":\"Opaque attachment id locating one MIME part of the message.\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque message id (`msg_...`). Encodes its owning inbox.\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\",\"id\",\"attId\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/messages/{id}/attachments/{attId}\",\"responseFormat\":\"binary\",\"summary\":\"Download one attachment's bytes for an org inbox\"},{\"description\":null,\"id\":\"adminReplyMessage\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/ReplyRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/reply\",\"responseFormat\":\"json\",\"summary\":\"Thread-aware console reply from an org inbox\"},{\"description\":\"Set the per-inbox review-policy override (a non-null policy) or clear it back to inherit the account default (explicit JSON null; D6). A foreign address is 404; an invalid non-null policy value is 400. Console-only (never an MCP tool, D17).\\n\",\"id\":\"adminUpdateInboxReviewPolicy\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/InboxReviewPolicyRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/review-policy\",\"responseFormat\":\"json\",\"summary\":\"Set/clear the per-inbox review-policy override (console plane, human authority)\"},{\"description\":null,\"id\":\"adminSendMessage\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/SendRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/send\",\"responseFormat\":\"json\",\"summary\":\"Send a message from an org inbox\"},{\"description\":null,\"id\":\"adminGetSubmission\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"submission_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\",\"submission_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/submissions/{submission_id}\",\"responseFormat\":\"json\",\"summary\":\"Read transport and Sent-copy status for an org inbox submission\"},{\"description\":null,\"id\":\"adminListInboxThreads\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"description\":\"Opaque pagination cursor echoed back from a prior `next_cursor`. Treat it as an opaque token; pass it back verbatim as `?cursor` to fetch the next page.\\n\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/threads\",\"responseFormat\":\"json\",\"summary\":\"List persistent threads for an org inbox\"},{\"description\":null,\"id\":\"adminGetInboxThread\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"addr\":{\"description\":\"The full inbox address, URL-encoded (e.g. `agent7%40extrovertmail.com`).\",\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"addr\",\"thread_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/inboxes/{addr}/threads/{thread_id}\",\"responseFormat\":\"json\",\"summary\":\"Get one persistent thread and its messages\"},{\"description\":\"Create a short-lived, single-use ticket bound to the Clerk session's customer scope, for opening the live Approvals SSE stream (`GET /v1/admin/reviews/stream?ticket=…`). A browser EventSource cannot set an Authorization header, so this ticket carries the customer scope instead. The ticket is consumed on first stream connect and self-expires (~60s).\\n\",\"id\":\"adminMintRealtimeTicket\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/realtime/ticket\",\"responseFormat\":\"json\",\"summary\":\"Create a single-use ticket for the console realtime stream\"},{\"description\":\"The customer's review links (D5). Secrets are elided (has_secret only). Console-only (Clerk-authed).\\n\",\"id\":\"adminListReviewLinks\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/review-links\",\"responseFormat\":\"json\",\"summary\":\"List BYO review-agent links (console plane)\"},{\"description\":\"Link a reviewer agent to an inbox (inbox_address empty = account-wide) so reviewed drafts on that scope route to the linked review-agent instead of straight to the human queue (D5; §9). One link per scope (the UNIQUE scope index); a duplicate scope is 409. The reviewer holds review:act, never mailbox:send; the platform sends with the COMPOSER's creds. Console-only (Clerk-authed); configuring WHO reviews is a human-authority setup decision, NEVER an MCP tool (the reviewer DECISION endpoints are agent-plane).\\n\",\"id\":\"adminCreateReviewLink\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/CreateReviewLinkRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/review-links\",\"responseFormat\":\"json\",\"summary\":\"Link a BYO review-agent to an inbox (console plane)\"},{\"description\":\"Remove a review link AND sweep every in-flight review currently routed through it back to the HUMAN queue; no orphan deliveries (§9): a review held by the deleted reviewer must not stay assigned to a reviewer that no longer exists. Console-only (Clerk-authed). A foreign id is 404.\\n\",\"id\":\"adminDeleteReviewLink\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"rvl_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"rvl_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/review-links/{rvl_id}\",\"responseFormat\":\"json\",\"summary\":\"Delete a BYO review-agent link (console plane)\"},{\"description\":\"The authoritative account-default review policy (D6): require_review, allow_direct, or auto_send_graduated. require_review always downgrades an agent's per-send mode assertion (an agent can never override it). effective is the account policy with the safe require_review floor applied. Console-only (Clerk-authed); the agent plane only READS the effective policy.\\n\",\"id\":\"adminGetReviewPolicy\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/review-policy\",\"responseFormat\":\"json\",\"summary\":\"Read the account-default review policy (console plane)\"},{\"description\":\"Set the account-default review policy (D6). An invalid policy value is 400. Console-only (never an MCP tool, D17).\\n\",\"id\":\"adminUpdateReviewPolicy\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/ReviewPolicyRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/review-policy\",\"responseFormat\":\"json\",\"summary\":\"Set the account-default review policy (console plane, human authority)\"},{\"description\":\"The human Approvals queue: pending reviews across ALL the tenant's inboxes, newest-first and paginated, each with an intent summary + a body snippet (never the full body). Filter by state (repeatable / comma-separated), inbox, and category_id. Customer-scoped to the Clerk session; these human-authority reads/actions are console-only and never MCP tools (D17).\\n\",\"id\":\"adminListReviews\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"category_id\":{\"description\":\"Filter by opaque category id (cat_…).\",\"type\":\"string\"},\"inbox\":{\"description\":\"Filter by composer inbox address.\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"page\":{\"description\":\"Opaque page cursor.\",\"type\":\"string\"},\"state\":{\"description\":\"Filter by state (repeatable or comma-separated).\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews\",\"responseFormat\":\"json\",\"summary\":\"Approvals queue (Review Loop, console plane)\"},{\"description\":\"The full review for the console detail view: intent, the current draft (subject/body), the append-only thread turns, and the diff if the draft was revised. Customer-scoped; a foreign id is 404 (no cross-tenant leak).\\n\",\"id\":\"adminGetReview\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}\",\"responseFormat\":\"json\",\"summary\":\"Get one review (intent + current draft + turns + diff)\"},{\"description\":\"Approve the draft as-is under the revision+version CAS (D17), with the staleness check run INSIDE approve (a stale draft 409s; reconfirm first). The platform then performs the authenticated send using the COMPOSER's inbox credentials (credential boundary) and records terminal success, returning the sent message id + thread id. The send is irreversible once returned.\\n\",\"id\":\"adminApproveReview\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminReviewAction\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}/approve\",\"responseFormat\":\"json\",\"summary\":\"Approve a draft and send it (human authority)\"},{\"description\":\"The console chat side-panel (M5; spec §5.3, §10): a human_comment turn whose OTHER party is the COMPOSING agent; it enqueues a feedback_added durable nudge to the composer (the agent wakes to answer/redraft) and emits a review.chat event; when the draft is in_review it flips to chatting. CONSOLE-ONLY (Clerk- authed); NEVER an MCP tool (D17). $0 LLM; the human writes the comment.\\n\",\"id\":\"adminReviewChat\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminReviewChatRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}/chat\",\"responseFormat\":\"json\",\"summary\":\"Post a human comment on a review's chat thread (console side-panel)\"},{\"description\":\"The human supplies an edited subject/body. The platform captures the proposed-vs-sent diff into a system_diff turn (deterministic Go diff, $0 LLM), approves under the revision+version CAS, then performs the authenticated send of the EDITED content via the COMPOSER's inbox and records terminal success. Irreversible once returned; a stale draft or CAS race 409s.\\n\",\"id\":\"adminEditSendReview\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminReviewAction\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}/edit-send\",\"responseFormat\":\"json\",\"summary\":\"Edit a draft, capture the diff, and send (human authority)\"},{\"description\":\"Restore the prior version recorded in an audit row with author_kind=human (D11). UNDO = a forward 'restore' supersession; the source row is marked undone. Idempotent: a re-undo of an already-undone row is a clean 409. Only the source reviewer or an organization administrator may undo this learning.\\n\",\"id\":\"undoLearnedReviewRule\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"udo_id\":{\"type\":\"string\"}},\"required\":[\"id\",\"org_id\",\"project_id\",\"udo_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}/learned-rules/{udo_id}/undo\",\"responseFormat\":\"json\",\"summary\":\"Undo a rule change (console plane, human authority)\"},{\"description\":\"Reject the draft under the revision+version CAS, with an optional feedback comment persisted as the raw rule-birth signal (D7; empty allowed). The composing agent may redraft from rejected. Console-only.\\n\",\"id\":\"adminRejectReview\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminReviewAction\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/reviews/{id}/reject\",\"responseFormat\":\"json\",\"summary\":\"Reject a draft (human authority)\"},{\"description\":\"Read the effective brand-risk dial; the account-wide default plus every category's per-category overrides (each with its resolved effective value; null override = inherit, D12). The agent-plane read (GET /v1/risk-dial) is AgentKey-only, so the console reads the SAME view here (Clerk session) to render the risk-dial panel. Read-only; setting the dial is the PATCH above.\\n\",\"id\":\"adminGetRiskDial\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/risk-dial\",\"responseFormat\":\"json\",\"summary\":\"Read the effective risk dial (console plane)\"},{\"description\":\"Set the account-wide risk-dial defaults every inheriting category uses (D4): min_confidence, first_contact_gate, drift_demote_after (K), canary_rate, graduate_min_approvals, graduate_min_age_hours, auto_send_cap_per_day. A nil field is unchanged. Console-only (never an MCP tool, D17).\\n\",\"id\":\"adminUpdateRiskDial\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/RiskDialRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/risk-dial\",\"responseFormat\":\"json\",\"summary\":\"Set the account-default risk dial (console plane, human authority)\"},{\"description\":\"Read the §7 precedence-ordered effective writing-rule stack for the resolved org/project (and optional category), applied SERVER-SIDE (deterministic, NO LLM). The agent-plane read (GET /v1/rules) is AgentKey-only, so the console reads the SAME ordered list here (Clerk session) for its rules panel.\\n\",\"id\":\"adminGetRules\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"category_id\":{\"description\":\"Category id (cat_…). Empty returns ONLY the house-style/general layer.\",\"type\":\"string\"},\"scope\":{\"description\":\"Narrow to one layer (general | category). Default returns both.\",\"enum\":[\"general\",\"category\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules\",\"responseFormat\":\"json\",\"summary\":\"Read the effective rule stack (console plane)\"},{\"description\":\"Requires org and project admin authority. Ownership comes from the path; inherited organization rules and rules in other projects cannot be changed. Records human authorship and revision history. Scope/category changes are applied on edit. Per-agent targeting and review provenance are not accepted. This operation does not automatically retry or support client_id replay.\\n\",\"id\":\"adminSaveProjectRule\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminSaveProjectRuleRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PUT\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules\",\"responseFormat\":\"json\",\"summary\":\"Create or edit a shared project rule (console only)\"},{\"description\":\"The human-facing change/undo audit log spanning rules AND categories (D11), optionally narrowed to one entity. Console-only (Clerk-authed); the safety net for the shared/house-style rule governance. Undo a row via POST /v1/admin/rules/audit/{udo_id}/undo.\\n\",\"id\":\"adminGetRuleAudit\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"entity_id\":{\"description\":\"Narrow to one entity (rule_… or cat_…).\",\"type\":\"string\"},\"entity_kind\":{\"description\":\"Narrow to one entity kind.\",\"enum\":[\"rule\",\"category\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules/audit\",\"responseFormat\":\"json\",\"summary\":\"Read the rule/category change audit log (console plane)\"},{\"description\":\"Restore the prior version recorded in an audit row with author_kind=human (D11). UNDO = a forward 'restore' supersession; the source row is marked undone. Idempotent: a re-undo of an already-undone row is a clean 409. Console-only. Only rules belonging to the addressed project can be undone; category changes and inherited organization rules are read-only here.\\n\",\"id\":\"adminUndoRuleChange\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"udo_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"udo_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules/audit/{udo_id}/undo\",\"responseFormat\":\"json\",\"summary\":\"Undo a rule change (console plane, human authority)\"},{\"description\":\"Requires org and project admin authority; inherited organization rules and other projects are read-only here. Preserves revision history and records human authorship.\",\"id\":\"adminPromoteProjectRule\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PromoteRuleRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules/{id}/promote\",\"responseFormat\":\"json\",\"summary\":\"Promote a shared project rule (console only)\"},{\"description\":\"Requires org and project admin authority; inherited organization rules and other projects are read-only here. Preserves revision history and records human authorship.\",\"id\":\"adminRetireProjectRule\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/rules/{id}/retire\",\"responseFormat\":\"json\",\"summary\":\"Retire a shared project rule (console only)\"},{\"description\":\"Uses bounded per-inbox fan-out, tags each thread with its inbox, and merges them newest-first with a stable global keyset cursor.\",\"id\":\"listSharedInboxThreads\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"description\":\"Opaque pagination cursor echoed back from a prior `next_cursor`. Treat it as an opaque token; pass it back verbatim as `?cursor` to fetch the next page.\\n\",\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/threads\",\"responseFormat\":\"json\",\"summary\":\"Shared-inbox feed; recent threads across every org inbox\"},{\"description\":null,\"id\":\"adminListWebhooks\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/webhooks\",\"responseFormat\":\"json\",\"summary\":\"List project webhooks\"},{\"description\":null,\"id\":\"adminRegisterWebhook\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/AdminRegisterWebhookRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/webhooks\",\"responseFormat\":\"json\",\"summary\":\"Register a project webhook\"},{\"description\":null,\"id\":\"adminGetWebhook\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/webhooks/{id}\",\"responseFormat\":\"json\",\"summary\":\"Get one project webhook\"},{\"description\":null,\"id\":\"adminUpdateWebhook\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/UpdateWebhookRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/webhooks/{id}\",\"responseFormat\":\"json\",\"summary\":\"Update a project webhook\"},{\"description\":null,\"id\":\"adminDeleteWebhook\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"project_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"DELETE\",\"path\":\"/v1/admin/orgs/{org_id}/projects/{project_id}/webhooks/{id}\",\"responseFormat\":\"json\",\"summary\":\"Delete a project webhook\"},{\"description\":\"Read-only deliverability rollup for the org (viewer): status badge, sending status, latest metrics window, and open-finding count.\\n\",\"id\":\"adminGetReputation\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/reputation\",\"responseFormat\":\"json\",\"summary\":\"The org's deliverability rollup (console)\"},{\"description\":\"The org's deliverability findings, newest-first (viewer). Supports ?status=, ?severity=, ?domain=, ?sender= filters and limit/cursor paging.\\n\",\"id\":\"adminListReputationFindings\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"type\":\"string\"},\"domain\":{\"type\":\"string\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"sender\":{\"type\":\"string\"},\"severity\":{\"enum\":[\"low\",\"high\",\"unknown\"],\"type\":\"string\"},\"status\":{\"enum\":[\"open\",\"resolved\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/reputation/findings\",\"responseFormat\":\"json\",\"summary\":\"List the org's deliverability findings (console)\"},{\"description\":null,\"id\":\"getOrgSettings\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/settings\",\"responseFormat\":\"json\",\"summary\":\"Get the org's console settings\"},{\"description\":null,\"id\":\"updateOrgSettings\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/PatchOrgSettingsRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"PATCH\",\"path\":\"/v1/admin/orgs/{org_id}/settings\",\"responseFormat\":\"json\",\"summary\":\"Update a subset of the org's console settings\"},{\"description\":\"The org's recipient opt-out (suppression) rows, newest-first. Only org-scope rows are visible; global/shared-domain rows are operator-only. Supports ?recipient=, ?scope=, ?include_revoked=true, and limit/cursor paging.\\n\",\"id\":\"adminListSuppressions\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"cursor\":{\"type\":\"string\"},\"include_revoked\":{\"type\":\"boolean\"},\"limit\":{\"default\":50,\"description\":\"Page size for the cursor-paginated agent surface (default 50; clamped to the 1-100 range).\",\"maximum\":100,\"minimum\":1,\"type\":\"integer\"},\"recipient\":{\"description\":\"Filter by (canonicalized) recipient.\",\"type\":\"string\"},\"scope\":{\"enum\":[\"org\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/suppressions\",\"responseFormat\":\"json\",\"summary\":\"List / search the org's suppression rows\"},{\"description\":\"A CSV of the org's suppression rows (viewer). ?include_revoked=true adds soft-revoked rows; ?recipient= / ?scope= narrow the export.\\n\",\"id\":\"adminExportSuppressions\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\"],\"type\":\"object\"},\"query\":{\"additionalProperties\":false,\"properties\":{\"include_revoked\":{\"type\":\"boolean\"},\"recipient\":{\"type\":\"string\"},\"scope\":{\"enum\":[\"org\"],\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"GET\",\"path\":\"/v1/admin/orgs/{org_id}/suppressions/export\",\"responseFormat\":\"binary\",\"summary\":\"Export the org's suppression rows as CSV\"},{\"description\":\"An org admin (role \\u003e= admin) revokes ONE org-scope row with a REQUIRED reason (audit-logged). A foreign/global/shared id is a 404; an empty reason is a 400.\\n\",\"id\":\"adminRevokeSuppression\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"body\":{\"$ref\":\"#/components/schemas/RevokeSuppressionRequest\"},\"path\":{\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"id\"],\"type\":\"object\"}},\"required\":[\"path\",\"body\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/orgs/{org_id}/suppressions/{id}/revoke\",\"responseFormat\":\"json\",\"summary\":\"Revoke (un-suppress) one org-scope suppression row\"},{\"description\":\"Accepts a live system-seeded owner claim previously discovered through GET /v1/admin/me. IDENTITY-ONLY: the claim id is only a selector and the server accepts it only when its normalized email matches the authenticated user's VERIFIED Clerk email. No raw invitation token is required or exposed.\\n\",\"id\":\"acceptSignupClaim\",\"inputSchema\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"additionalProperties\":false,\"properties\":{\"claim_id\":{\"type\":\"string\"}},\"required\":[\"claim_id\"],\"type\":\"object\"}},\"required\":[\"path\"],\"type\":\"object\"},\"method\":\"POST\",\"path\":\"/v1/admin/signup-claims/{claim_id}/accept\",\"responseFormat\":\"json\",\"summary\":\"Claim an agent-created account (identity-only; email-bound)\"}];\nexport const administrativeSchemas = {\"AcceptInvitationRequest\":{\"description\":\"Accept an invitation with its raw token. IDENTITY-ONLY: the accept binds to the authenticated user's VERIFIED Clerk email, which must equal the normalized invitation email (else 403). Idempotent for the same user.\\n\",\"properties\":{\"token\":{\"type\":\"string\"}},\"required\":[\"token\"],\"type\":\"object\"},\"AccountRiskDial\":{\"description\":\"The account-wide default risk dial (org_settings; D4/D12); the values a per-category null override inherits. The single user-configurable brand-risk lever (canary rate, drift-demote K, maturity-gate thresholds, min confidence, first-contact gate, per-day auto-send cap).\\n\",\"properties\":{\"auto_send_cap_per_day\":{\"description\":\"Plan-tier per-customer auto-send volume cap (D1).\",\"type\":\"integer\"},\"canary_rate\":{\"format\":\"double\",\"type\":\"number\"},\"drift_demote_after\":{\"description\":\"Drift-demote threshold K.\",\"type\":\"integer\"},\"first_contact_gate\":{\"type\":\"boolean\"},\"graduate_min_age_hours\":{\"description\":\"Maturity-gate minimum category age.\",\"type\":\"integer\"},\"graduate_min_approvals\":{\"description\":\"Maturity-gate N (clean approvals).\",\"type\":\"integer\"},\"min_confidence\":{\"format\":\"double\",\"type\":\"number\"}},\"required\":[\"min_confidence\",\"first_contact_gate\",\"drift_demote_after\",\"canary_rate\",\"graduate_min_approvals\",\"graduate_min_age_hours\",\"auto_send_cap_per_day\"],\"type\":\"object\"},\"AdminBilling\":{\"properties\":{\"billing_owner_id\":{\"description\":\"The org id used for plan and monthly usage enforcement.\",\"type\":\"string\"},\"customer_id\":{\"type\":\"string\"},\"entitlements\":{\"$ref\":\"#/components/schemas/AdminBillingPlan\"},\"org_id\":{\"type\":\"string\"},\"plan_tier\":{\"enum\":[\"free\",\"developer\",\"startup\",\"enterprise\"],\"type\":\"string\"},\"plans\":{\"items\":{\"$ref\":\"#/components/schemas/AdminBillingPlan\"},\"type\":\"array\"},\"stripe_configured\":{\"type\":\"boolean\"},\"stripe_mode\":{\"enum\":[\"test\",\"live\"],\"type\":\"string\"},\"subscription\":{\"$ref\":\"#/components/schemas/AdminBillingSubscription\"},\"usage\":{\"$ref\":\"#/components/schemas/AdminBillingUsage\"}},\"required\":[\"org_id\",\"customer_id\",\"billing_owner_id\",\"stripe_mode\",\"stripe_configured\",\"plan_tier\",\"entitlements\",\"usage\",\"plans\"],\"type\":\"object\"},\"AdminBillingPlan\":{\"properties\":{\"checkout_available\":{\"type\":\"boolean\"},\"custom\":{\"type\":\"boolean\"},\"custom_domain_limit\":{\"format\":\"int64\",\"type\":\"integer\"},\"daily_message_cap\":{\"format\":\"int64\",\"type\":\"integer\"},\"domain_annual_com_reference_cents\":{\"description\":\"Reference annual managed-domain price for .com; other TLDs are quoted from live registrar cost at checkout.\",\"format\":\"int64\",\"type\":\"integer\"},\"inbox_limit\":{\"format\":\"int64\",\"type\":\"integer\"},\"included_messages_monthly\":{\"description\":\"Combined inbound plus outbound recipient/message quota.\",\"format\":\"int64\",\"type\":\"integer\"},\"member_limit\":{\"format\":\"int64\",\"type\":\"integer\"},\"monthly_price_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"pod_limit\":{\"format\":\"int64\",\"type\":\"integer\"},\"storage_bytes\":{\"description\":\"Decimal GB converted to bytes.\",\"format\":\"int64\",\"type\":\"integer\"},\"tier\":{\"enum\":[\"free\",\"developer\",\"startup\",\"enterprise\"],\"type\":\"string\"},\"webhook_limit\":{\"format\":\"int64\",\"type\":\"integer\"}},\"required\":[\"tier\",\"name\",\"monthly_price_cents\",\"domain_annual_com_reference_cents\",\"included_messages_monthly\",\"inbox_limit\",\"custom_domain_limit\",\"storage_bytes\",\"pod_limit\",\"webhook_limit\",\"member_limit\"],\"type\":\"object\"},\"AdminBillingSubscription\":{\"properties\":{\"cancel_at_period_end\":{\"type\":\"boolean\"},\"current_period_end\":{\"format\":\"date-time\",\"type\":\"string\"},\"current_period_start\":{\"format\":\"date-time\",\"type\":\"string\"},\"customer_id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"plan_tier\":{\"enum\":[\"free\",\"developer\",\"startup\",\"enterprise\"],\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"stripe_customer_id\":{\"type\":\"string\"},\"stripe_price_id\":{\"type\":\"string\"},\"stripe_subscription_id\":{\"type\":\"string\"},\"stripe_subscription_item_id\":{\"type\":\"string\"}},\"required\":[\"org_id\",\"customer_id\",\"plan_tier\",\"status\",\"cancel_at_period_end\"],\"type\":\"object\"},\"AdminBillingUsage\":{\"properties\":{\"billing_owner_id\":{\"type\":\"string\"},\"customer_id\":{\"type\":\"string\"},\"message_quota_exceeded\":{\"type\":\"boolean\"},\"message_quota_limit\":{\"description\":\"Combined monthly inbound plus outbound message quota for the effective plan; -1 means unlimited/custom.\",\"format\":\"int64\",\"type\":\"integer\"},\"message_quota_remaining\":{\"description\":\"Remaining included messages this month; -1 means unlimited/custom.\",\"format\":\"int64\",\"type\":\"integer\"},\"month\":{\"example\":\"2026-06\",\"type\":\"string\"},\"received_messages\":{\"format\":\"int64\",\"type\":\"integer\"},\"received_recipients\":{\"format\":\"int64\",\"type\":\"integer\"},\"sent_messages\":{\"format\":\"int64\",\"type\":\"integer\"},\"sent_recipients\":{\"format\":\"int64\",\"type\":\"integer\"},\"storage_bytes\":{\"description\":\"Compatibility alias for storage_used_bytes.\",\"format\":\"int64\",\"type\":\"integer\"},\"storage_captured_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"storage_included_bytes\":{\"description\":\"Included storage bytes for the effective plan; -1 means unlimited/custom.\",\"format\":\"int64\",\"type\":\"integer\"},\"storage_mailbox_count\":{\"type\":\"integer\"},\"storage_over_limit_bytes\":{\"format\":\"int64\",\"type\":\"integer\"},\"storage_peak_over_limit_bytes\":{\"format\":\"int64\",\"type\":\"integer\"},\"storage_peak_used_bytes\":{\"description\":\"Billing-month high-water mark\",\"format\":\"int64\",\"summed from the peak observed bytes per durable storage object.\":null,\"type\":\"integer\"},\"storage_quota_exceeded\":{\"type\":\"boolean\"},\"storage_used_bytes\":{\"description\":\"Current owner-level storage gauge from latest mailbox snapshots.\",\"format\":\"int64\",\"type\":\"integer\"},\"total_messages\":{\"format\":\"int64\",\"type\":\"integer\"}},\"required\":[\"billing_owner_id\",\"customer_id\",\"month\",\"sent_messages\",\"sent_recipients\",\"received_messages\",\"received_recipients\",\"storage_bytes\",\"storage_used_bytes\",\"storage_peak_used_bytes\",\"storage_included_bytes\",\"storage_over_limit_bytes\",\"storage_peak_over_limit_bytes\",\"storage_mailbox_count\",\"storage_quota_exceeded\",\"total_messages\",\"message_quota_limit\",\"message_quota_remaining\",\"message_quota_exceeded\"],\"type\":\"object\"},\"AdminCreateCategoryRequest\":{\"description\":\"Create a human-authored shared category from the console.\",\"properties\":{\"description\":{\"description\":\"Skill-style matcher text the agent reads (mutable).\",\"type\":\"string\"},\"name\":{\"description\":\"Display name (mutable metadata; never a reference key).\",\"type\":\"string\"},\"scope\":{\"description\":\"Defaults to org_shared.\",\"enum\":[\"org_shared\",\"agent_private\"],\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"AdminCreateInboxRequest\":{\"properties\":{\"agent_id\":{\"description\":\"Active agent that owns the new inbox.\",\"type\":\"string\"},\"display_name\":{\"type\":\"string\"},\"domain\":{\"description\":\"Domain name fallback when domain_id is omitted.\",\"type\":\"string\"},\"domain_id\":{\"description\":\"Domain id from the console domains list.\",\"type\":\"string\"},\"username\":{\"description\":\"Local part. On `extrovertmail.com` and `free.extrovertmail.com` it is normalized to lowercase, must contain at least five characters, and must not be postmaster, admin, webadmin, legal, fraudmark, fraudmarc, keith, melissa, richard, sydney, syd, john, or johnny. These restrictions do not apply to customer-owned domains. Omit it for a generated local part.\\n\",\"type\":\"string\"},\"webhook_url\":{\"type\":\"string\"}},\"required\":[\"agent_id\"],\"type\":\"object\"},\"AdminIdentity\":{\"properties\":{\"clerk_user_id\":{\"type\":\"string\"},\"email\":{\"type\":\"string\"}},\"type\":\"object\"},\"AdminInbox\":{\"properties\":{\"address\":{\"type\":\"string\"},\"agent_id\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"daily_send_cap\":{\"type\":\"integer\"},\"daily_send_used\":{\"description\":\"Recipients sent in the rolling 24-hour window.\",\"type\":\"integer\"},\"direct_smtp_enabled\":{\"description\":\"Whether this inbox is configured for direct SMTP outside the review pipeline. Effective access also requires an active paid entitlement.\\n\",\"type\":\"boolean\"},\"domain\":{\"type\":\"string\"},\"id\":{\"description\":\"Stable inbox ID used for explicit connection consent.\",\"type\":\"string\"},\"webhook_url\":{\"type\":\"string\"}},\"type\":\"object\"},\"AdminInboxList\":{\"properties\":{\"inboxes\":{\"items\":{\"$ref\":\"#/components/schemas/AdminInbox\"},\"type\":\"array\"},\"next_page\":{\"type\":\"string\"}},\"type\":\"object\"},\"AdminMe\":{\"description\":\"The authenticated console identity's reachable orgs + projects (GET /v1/admin/me). IDENTITY-ONLY: the reachable set is derived from the user's membership rows, never from a preselected/cookie customer. The *_hint fields are landing hints only; the console revalidates them against reachable_orgs/projects_by_org before using them.\\n\",\"properties\":{\"active_org_hint\":{\"description\":\"Landing hint (the user's default org).\",\"type\":\"string\"},\"active_project_hint\":{\"description\":\"Landing hint (the user's default project).\",\"type\":\"string\"},\"identity\":{\"$ref\":\"#/components/schemas/AdminIdentity\"},\"last_project_by_org\":{\"additionalProperties\":{\"type\":\"string\"},\"description\":\"Per-org remembered/default project (orgId -\\u003e projectId).\",\"type\":\"object\"},\"pending_signup_claims\":{\"description\":\"Live system-seeded owner claims matching the authenticated identity's verified email. Claim ids are selectors, not bearer credentials; no invitation token or hash material is exposed.\\n\",\"items\":{\"$ref\":\"#/components/schemas/PendingSignupClaim\"},\"type\":\"array\"},\"projects_by_org\":{\"additionalProperties\":{\"items\":{\"$ref\":\"#/components/schemas/AdminProjectSummary\"},\"type\":\"array\"},\"description\":\"The active projects for each reachable org, keyed by org id.\",\"type\":\"object\"},\"reachable_orgs\":{\"items\":{\"$ref\":\"#/components/schemas/AdminReachableOrg\"},\"type\":\"array\"}},\"required\":[\"identity\",\"last_project_by_org\",\"reachable_orgs\",\"projects_by_org\",\"pending_signup_claims\"],\"type\":\"object\"},\"AdminMessage\":{\"description\":\"A source-preserving message shape for the console plane.\",\"properties\":{\"body\":{\"type\":\"string\"},\"cc\":{\"type\":\"string\"},\"date\":{\"type\":\"string\"},\"direction\":{\"enum\":[\"inbound\",\"outbound\"],\"type\":\"string\"},\"extracted_html\":{\"type\":\"string\"},\"extracted_text\":{\"type\":\"string\"},\"from\":{\"type\":\"string\"},\"has_attachments\":{\"type\":\"boolean\"},\"html\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"in_reply_to\":{\"type\":\"string\"},\"message_id\":{\"type\":\"string\"},\"references\":{\"type\":\"string\"},\"reply_to\":{\"type\":\"string\"},\"seen\":{\"type\":\"boolean\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"nullable\":true,\"type\":\"string\"},\"seq\":{\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"submission_id\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"}},\"type\":\"object\"},\"AdminMessageDetail\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Message\"},{\"properties\":{\"attachments\":{\"items\":{\"$ref\":\"#/components/schemas/Attachment\"},\"type\":\"array\"}},\"type\":\"object\"}]},\"AdminMessageList\":{\"properties\":{\"messages\":{\"items\":{\"$ref\":\"#/components/schemas/AdminMessage\"},\"type\":\"array\"}},\"type\":\"object\"},\"AdminOrgLimits\":{\"properties\":{\"max_child_orgs\":{\"type\":\"integer\"},\"max_projects\":{\"type\":\"integer\"}},\"type\":\"object\"},\"AdminReachableOrg\":{\"description\":\"One org the identity can reach, with the effective role + source.\",\"properties\":{\"breadcrumb\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"customer_id\":{\"description\":\"Compatibility customer id linked to the org.\",\"type\":\"string\"},\"depth\":{\"description\":\"Distance from the root org (0 = root).\",\"type\":\"integer\"},\"display_name\":{\"type\":\"string\"},\"id\":{\"description\":\"Canonical org UUID.\",\"type\":\"string\"},\"limits\":{\"$ref\":\"#/components/schemas/AdminOrgLimits\"},\"parent_org_id\":{\"description\":\"Null for a root org.\",\"nullable\":true,\"type\":\"string\"},\"plan_tier\":{\"type\":\"string\"},\"role\":{\"enum\":[\"owner\",\"admin\",\"member\",\"viewer\",\"billing\"],\"type\":\"string\"},\"root_org_id\":{\"type\":\"string\"},\"source\":{\"description\":\"How the identity reaches this org.\",\"enum\":[\"direct\",\"inherited\",\"msp_grant\"],\"type\":\"string\"}},\"required\":[\"id\",\"customer_id\",\"display_name\",\"root_org_id\",\"role\",\"source\",\"depth\",\"breadcrumb\",\"plan_tier\",\"limits\"],\"type\":\"object\"},\"AdminRegisterWebhookRequest\":{\"allOf\":[{\"$ref\":\"#/components/schemas/RegisterWebhookRequest\"},{\"properties\":{\"agent_id\":{\"description\":\"Active agent that owns the webhook registration.\",\"type\":\"string\"}},\"required\":[\"agent_id\"],\"type\":\"object\"}]},\"AdminReviewAction\":{\"description\":\"A human-authority review action body (console plane, D17). revision + version are the CAS naming the draft the human acted on (a mismatch is a 409 STALE). subject/body are supplied only on edit-send; feedback is the optional rule-birth signal (D7, empty allowed).\\n\",\"properties\":{\"body\":{\"description\":\"Edited body text (edit-send only).\",\"type\":\"string\"},\"feedback\":{\"description\":\"Optional decision comment / rule-birth signal.\",\"type\":\"string\"},\"revision\":{\"type\":\"integer\"},\"subject\":{\"description\":\"Edited subject (edit-send only).\",\"type\":\"string\"},\"version\":{\"type\":\"integer\"}},\"required\":[\"revision\",\"version\"],\"type\":\"object\"},\"AdminReviewChatRequest\":{\"description\":\"The console chat side-panel body (M5; spec §10): a human comment whose OTHER party is the composing agent. CONSOLE-ONLY (never an MCP tool, D17).\\n\",\"properties\":{\"text\":{\"description\":\"The human's comment for the composing agent.\",\"type\":\"string\"}},\"required\":[\"text\"],\"type\":\"object\"},\"AdminReviewDetail\":{\"description\":\"Full console review detail (console plane): the review (intent + current draft + diff if revised) plus the append-only thread turns.\\n\",\"properties\":{\"review\":{\"$ref\":\"#/components/schemas/Review\"},\"turns\":{\"items\":{\"$ref\":\"#/components/schemas/ReviewTurn\"},\"type\":\"array\"}},\"required\":[\"review\",\"turns\"],\"type\":\"object\"},\"AdminReviewListItem\":{\"description\":\"One Approvals-queue row (console plane, D17). Metadata + intent summary + subject + a body snippet only; never the full body (loaded on detail open).\\n\",\"properties\":{\"agent_id\":{\"type\":\"string\"},\"category_id\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"effective_mode\":{\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"escalation_reason\":{\"description\":\"Why a reviewer-loop draft landed back in the human queue (M8; §9): a reviewer's escalate, or a circuit breaker (max_hops / review_deadline) forcing it to the human. Empty for an ordinary review.\",\"type\":\"string\"},\"from_address\":{\"type\":\"string\"},\"gate_outcome\":{\"description\":\"The auto-send divert reason (held:\\u003creason\\u003e) when the submit-time gate routed this message to the human (M6); empty for an ordinary review.\",\"type\":\"string\"},\"hop_count\":{\"description\":\"The monotonic reviewer hand-back counter (M8 breaker (a)); surfaced so a maxed-out review reads as forced-to-human.\",\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"intent_summary\":{\"type\":\"string\"},\"kind\":{\"enum\":[\"send\",\"reply\",\"forward\"],\"type\":\"string\"},\"mode\":{\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"revision\":{\"type\":\"integer\"},\"snippet\":{\"type\":\"string\"},\"stale_reason\":{\"type\":\"string\"},\"state\":{\"enum\":[\"needs_review\",\"in_review\",\"chatting\",\"stale\",\"approved\",\"sent\",\"auto_sent\",\"rejected\",\"stalled\",\"cancelled\",\"failed\"],\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"type\":\"integer\"}},\"required\":[\"id\",\"state\",\"mode\",\"effective_mode\",\"kind\",\"revision\",\"version\"],\"type\":\"object\"},\"AdminReviewPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/AdminReviewListItem\"},\"type\":\"array\"},\"next_cursor\":{\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"AdminReviewRejectResult\":{\"properties\":{\"review_id\":{\"type\":\"string\"},\"state\":{\"type\":\"string\"},\"status\":{\"example\":\"rejected\",\"type\":\"string\"}},\"required\":[\"status\",\"review_id\",\"state\"],\"type\":\"object\"},\"AdminReviewSendResult\":{\"description\":\"The approve / edit-send success result. The platform performed the authenticated send via the COMPOSER's inbox; the send is irreversible once returned.\\n\",\"properties\":{\"message_id\":{\"type\":\"string\"},\"review_id\":{\"type\":\"string\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"nullable\":true,\"type\":\"string\"},\"state\":{\"type\":\"string\"},\"status\":{\"example\":\"sent\",\"type\":\"string\"},\"submission_id\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"}},\"required\":[\"status\",\"review_id\",\"state\",\"message_id\"],\"type\":\"object\"},\"AdminSaveProjectRuleRequest\":{\"properties\":{\"category_id\":{\"type\":\"string\"},\"kind\":{\"enum\":[\"soft\",\"hard\"],\"type\":\"string\"},\"priority\":{\"type\":\"integer\"},\"propagate_to_pending\":{\"default\":false,\"type\":\"boolean\"},\"rule_text\":{\"type\":\"string\"},\"scope\":{\"enum\":[\"general\",\"category\"],\"type\":\"string\"},\"suggested_batch\":{\"type\":\"integer\"},\"supersedes_id\":{\"type\":\"string\"}},\"required\":[\"rule_text\"],\"type\":\"object\"},\"AdminThreadDetail\":{\"properties\":{\"last_message_at\":{\"type\":\"string\"},\"last_message_id\":{\"type\":\"string\"},\"message_count\":{\"type\":\"integer\"},\"messages\":{\"items\":{\"$ref\":\"#/components/schemas/AdminMessage\"},\"type\":\"array\"},\"participants\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"snippet\":{\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"},\"unread\":{\"type\":\"boolean\"}},\"type\":\"object\"},\"AdminThreadList\":{\"description\":\"A cursor page of persistent thread summaries for one inbox.\",\"properties\":{\"next_cursor\":{\"type\":\"string\"},\"threads\":{\"items\":{\"$ref\":\"#/components/schemas/AdminUnifiedThread\"},\"type\":\"array\"},\"total\":{\"type\":\"integer\"}},\"type\":\"object\"},\"AdminUnifiedThread\":{\"description\":\"One row in the shared-inbox feed, tagged with its owning inbox.\",\"properties\":{\"id\":{\"type\":\"string\"},\"inbox\":{\"type\":\"string\"},\"last_message_at\":{\"type\":\"string\"},\"last_message_has_attachments\":{\"type\":\"boolean\"},\"last_message_id\":{\"type\":\"string\"},\"message_count\":{\"type\":\"integer\"},\"participants\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"snippet\":{\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"unread\":{\"type\":\"boolean\"}},\"type\":\"object\"},\"AdminUnifiedThreadFeed\":{\"description\":\"Stable keyset page merged newest-first across the active project's inboxes.\",\"properties\":{\"failed_inboxes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"inbox_count\":{\"type\":\"integer\"},\"next_cursor\":{\"description\":\"Opaque global keyset cursor; pass back unchanged.\",\"type\":\"string\"},\"partial_failure\":{\"type\":\"boolean\"},\"threads\":{\"items\":{\"$ref\":\"#/components/schemas/AdminUnifiedThread\"},\"type\":\"array\"},\"total\":{\"type\":\"integer\"}},\"type\":\"object\"},\"AdminUpdateInboxRequest\":{\"additionalProperties\":false,\"minProperties\":1,\"properties\":{\"daily_send_limit\":{\"maximum\":10000,\"minimum\":1,\"type\":\"integer\"},\"direct_smtp_enabled\":{\"description\":\"Explicit per-inbox raw SMTP bypass. It is disabled by default and can be enabled only by a human for an account with an active paid entitlement. Disabling is always allowed. Agent API, SDK, and MCP sends continue through the normal review controls regardless of this setting.\\n\",\"type\":\"boolean\"}},\"type\":\"object\"},\"AgentKeyList\":{\"properties\":{\"keys\":{\"items\":{\"$ref\":\"#/components/schemas/AgentKeySummary\"},\"type\":\"array\"},\"next_page\":{\"type\":\"string\"}},\"type\":\"object\"},\"AgentKeySummary\":{\"properties\":{\"agent_handle\":{\"type\":\"string\"},\"agent_id\":{\"type\":\"string\"},\"agent_name\":{\"type\":\"string\"},\"ceiling_inbox_id\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"enrollment_token_id\":{\"type\":\"string\"},\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"key_tier\":{\"enum\":[\"org\",\"project\",\"inbox\"],\"type\":\"string\"},\"last_used_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"prefix\":{\"type\":\"string\"},\"revoked\":{\"type\":\"boolean\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"AgentList\":{\"properties\":{\"agents\":{\"items\":{\"$ref\":\"#/components/schemas/AgentSummary\"},\"type\":\"array\"},\"next_page\":{\"type\":\"string\"}},\"type\":\"object\"},\"AgentStatusResult\":{\"properties\":{\"agent_id\":{\"type\":\"string\"},\"status\":{\"enum\":[\"active\",\"disabled\"],\"type\":\"string\"}},\"type\":\"object\"},\"AgentSummary\":{\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"handle\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"last_seen_at\":{\"description\":\"Latest authenticated API-key activity.\",\"format\":\"date-time\",\"nullable\":true,\"type\":\"string\"},\"mailbox_count\":{\"description\":\"Inboxes owned by this agent in the active project.\",\"minimum\":0,\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"status\":{\"enum\":[\"active\",\"disabled\"],\"type\":\"string\"}},\"type\":\"object\"},\"Attachment\":{\"description\":\"Attachment metadata. Download the bytes from the attachment endpoint.\",\"properties\":{\"content_type\":{\"example\":\"application/pdf\",\"type\":\"string\"},\"filename\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"size\":{\"description\":\"Size in bytes.\",\"type\":\"integer\"}},\"type\":\"object\"},\"AttachmentInput\":{\"description\":\"An outbound attachment on send/reply/forward.\",\"properties\":{\"content_base64\":{\"description\":\"Standard base64-encoded attachment bytes.\",\"type\":\"string\"},\"content_type\":{\"type\":\"string\"},\"filename\":{\"type\":\"string\"}},\"required\":[\"content_base64\"],\"type\":\"object\"},\"AttachmentPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/Attachment\"},\"type\":\"array\"},\"total\":{\"type\":\"integer\"}},\"type\":\"object\"},\"AuditEvent\":{\"properties\":{\"action\":{\"type\":\"string\"},\"actor\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"metadata\":{\"additionalProperties\":{\"type\":\"string\"},\"type\":\"object\"},\"severity\":{\"enum\":[\"info\",\"warn\",\"error\"],\"type\":\"string\"},\"target\":{\"type\":\"string\"}},\"type\":\"object\"},\"AuditList\":{\"properties\":{\"events\":{\"items\":{\"$ref\":\"#/components/schemas/AuditEvent\"},\"type\":\"array\"},\"next_page\":{\"type\":\"string\"}},\"type\":\"object\"},\"Category\":{\"description\":\"A category (cat_…) in the registry (Review Loop, D9/D10). name + description are the skill-style metadata an agent fuzzy-matches against (NO LLM on our side; the agent does the matching). Categories are CUSTOMER-scoped and agent-attributed; nothing keys on the name (renames never break a reference).\\n\",\"properties\":{\"author_kind\":{\"enum\":[\"agent\",\"human\",\"connection\"],\"type\":\"string\"},\"clean_approval_count\":{\"description\":\"Clean human-approve-as-is count toward the maturity gate (D16).\",\"type\":\"integer\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"created_by_agent_id\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"drift_count\":{\"description\":\"Human edit/reject count in a graduated category toward drift auto-demote (K; §7).\",\"type\":\"integer\"},\"graduated_at\":{\"description\":\"When the category was last graduated (omitted if never).\",\"format\":\"date-time\",\"type\":\"string\"},\"graduated_by\":{\"description\":\"Who last graduated it ('human:\\u003csub\\u003e'); empty if never/demoted.\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque category id (cat_…).\",\"type\":\"string\"},\"last_used_at\":{\"description\":\"Most recent accepted message creation time; absent when unused.\",\"format\":\"date-time\",\"type\":\"string\"},\"merged_into\":{\"description\":\"Survivor category id when this one was merged/soft-deleted (cat_…).\",\"type\":\"string\"},\"message_count_30d\":{\"description\":\"Logical accepted messages created in the last 30 days in the authorized project.\",\"type\":\"integer\"},\"message_count_7d\":{\"description\":\"Logical accepted messages created in the last 7 days in the authorized project.\",\"type\":\"integer\"},\"message_count_90d\":{\"description\":\"Logical accepted messages created in the last 90 days in the authorized project.\",\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"never_graduate\":{\"description\":\"Human lock pinning the category at supervised (no live auto-send; D16).\",\"type\":\"boolean\"},\"pending_review_count\":{\"description\":\"Current nonterminal reviews across composers in the authorized project.\",\"type\":\"integer\"},\"rule_high_water\":{\"type\":\"integer\"},\"rules_version\":{\"type\":\"integer\"},\"scope\":{\"enum\":[\"org_shared\",\"agent_private\"],\"type\":\"string\"},\"state\":{\"enum\":[\"supervised\",\"auto_notify\",\"auto_silent\"],\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"}},\"required\":[\"id\",\"name\",\"description\",\"scope\",\"state\",\"author_kind\",\"rule_high_water\",\"rules_version\"],\"type\":\"object\"},\"CategoryPacingState\":{\"description\":\"The demand-driven pacing snapshot for a category (agent-readable, $0-LLM, M7 Slice B/§8): the human review cursor position, the effective window/ceiling/ interval, the queued count, and each queued draft's in-window/redrafting/ behind-cursor classification. Read-only; the cursor advances from the human's console approve/reject/edit actions.\\n\",\"properties\":{\"category_id\":{\"type\":\"string\"},\"cursor_advanced_count\":{\"description\":\"Monotonic count of cursor advances.\",\"type\":\"integer\"},\"cursor_review_id\":{\"description\":\"The last queued draft the human acted on (the cursor); omitted when nothing reviewed yet.\",\"type\":\"string\"},\"in_window\":{\"description\":\"Of the queued, how many sit in the freshness-guaranteed window.\",\"type\":\"integer\"},\"items\":{\"items\":{\"$ref\":\"#/components/schemas/PacingItem\"},\"type\":\"array\"},\"lookahead_window\":{\"description\":\"Effective freshness window (default org_settings.lookahead_window=3).\",\"type\":\"integer\"},\"nudge_min_interval_ms\":{\"description\":\"Per-agent token-bucket interval that coalesces feedback storms (default 5000).\",\"type\":\"integer\"},\"queued\":{\"description\":\"How many drafts are in the human queue (needs_review|in_review|chatting).\",\"type\":\"integer\"},\"redrafting\":{\"description\":\"Of the in-window, how many are stale and being redrafted (the console shimmer set).\",\"type\":\"integer\"},\"rework_batch_max\":{\"description\":\"HARD per-nudge fan-out ceiling (default org_settings.rework_batch_max=10); one nudge can never fan to 500.\",\"type\":\"integer\"}},\"required\":[\"category_id\",\"cursor_advanced_count\",\"lookahead_window\",\"rework_batch_max\",\"nudge_min_interval_ms\",\"queued\",\"in_window\",\"redrafting\",\"items\"],\"type\":\"object\"},\"CategoryPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/Category\"},\"type\":\"array\"},\"next_cursor\":{\"description\":\"Opaque next page cursor.\",\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"CategoryRiskDial\":{\"description\":\"One category's risk-dial OVERRIDE columns (null = inherit the account default; D12) alongside the resolved effective dial. A null field means the category inherits that value from the account default.\\n\",\"properties\":{\"canary_rate\":{\"format\":\"double\",\"nullable\":true,\"type\":\"number\"},\"category_id\":{\"type\":\"string\"},\"drift_demote_after\":{\"nullable\":true,\"type\":\"integer\"},\"effective\":{\"$ref\":\"#/components/schemas/EffectiveRiskDial\"},\"first_contact_gate\":{\"nullable\":true,\"type\":\"boolean\"},\"graduate_min_age_hours\":{\"nullable\":true,\"type\":\"integer\"},\"graduate_min_approvals\":{\"nullable\":true,\"type\":\"integer\"},\"min_confidence\":{\"format\":\"double\",\"nullable\":true,\"type\":\"number\"}},\"required\":[\"category_id\",\"effective\"],\"type\":\"object\"},\"CategoryRiskDialRequest\":{\"description\":\"Set / clear a category's risk-dial overrides (console plane, D12). For each field, a non-null value SETS the override; an explicit JSON null RESETS it to inherit; an omitted field is unchanged.\\n\",\"properties\":{\"canary_rate\":{\"format\":\"double\",\"nullable\":true,\"type\":\"number\"},\"drift_demote_after\":{\"nullable\":true,\"type\":\"integer\"},\"first_contact_gate\":{\"nullable\":true,\"type\":\"boolean\"},\"graduate_min_age_hours\":{\"nullable\":true,\"type\":\"integer\"},\"graduate_min_approvals\":{\"nullable\":true,\"type\":\"integer\"},\"min_confidence\":{\"format\":\"double\",\"nullable\":true,\"type\":\"number\"}},\"type\":\"object\"},\"CommerceBlocker\":{\"properties\":{\"code\":{\"type\":\"string\"},\"limit_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"limit_count\":{\"format\":\"int64\",\"type\":\"integer\"},\"limit_id\":{\"type\":\"string\"},\"manage_url\":{\"format\":\"uri\",\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"requested_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"reserved_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"reserved_count\":{\"format\":\"int64\",\"type\":\"integer\"},\"reset_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"scope\":{\"type\":\"string\"},\"used_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"used_count\":{\"format\":\"int64\",\"type\":\"integer\"}},\"required\":[\"code\",\"message\"],\"type\":\"object\"},\"CommerceRequest\":{\"properties\":{\"agent_id\":{\"description\":\"Present when an agent initiated the request.\",\"type\":\"string\"},\"agent_next_action\":{\"type\":\"string\"},\"approval_url\":{\"format\":\"uri\",\"type\":\"string\"},\"approved_max_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"auto_renew\":{\"type\":\"boolean\"},\"blocker_code\":{\"type\":\"string\"},\"blockers\":{\"items\":{\"$ref\":\"#/components/schemas/CommerceBlocker\"},\"type\":\"array\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"currency\":{\"type\":\"string\"},\"current_plan\":{\"type\":\"string\"},\"domain\":{\"type\":\"string\"},\"domain_scope\":{\"enum\":[\"org\",\"project\"],\"type\":\"string\"},\"effective_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"external_job_id\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"kind\":{\"enum\":[\"domain_purchase\",\"plan_change\"],\"type\":\"string\"},\"notification_last_error\":{\"type\":\"string\"},\"notification_state\":{\"type\":\"string\"},\"object\":{\"enum\":[\"commerce_request\"],\"type\":\"string\"},\"payment_action_url\":{\"format\":\"uri\",\"type\":\"string\"},\"poll_after_seconds\":{\"type\":\"integer\"},\"project_id\":{\"type\":\"string\"},\"quote_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"quote_expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"rationale\":{\"type\":\"string\"},\"renewal_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"required_plan\":{\"type\":\"string\"},\"required_plan_price_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"retry_safe\":{\"type\":\"boolean\"},\"state\":{\"type\":\"string\"},\"target_plan\":{\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"format\":\"int64\",\"type\":\"integer\"}},\"required\":[\"object\",\"id\",\"kind\",\"state\",\"currency\",\"quote_cents\",\"renewal_cents\",\"auto_renew\",\"blockers\",\"agent_next_action\",\"retry_safe\",\"poll_after_seconds\",\"version\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"CommerceRequestPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/CommerceRequest\"},\"type\":\"array\"},\"next_cursor\":{\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"CommerceSpendLimit\":{\"allOf\":[{\"$ref\":\"#/components/schemas/CommerceSpendLimitInput\"},{\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"period_end\":{\"format\":\"date-time\",\"type\":\"string\"},\"period_start\":{\"format\":\"date-time\",\"type\":\"string\"},\"purchased_count\":{\"format\":\"int64\",\"type\":\"integer\"},\"reserved_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"reserved_count\":{\"format\":\"int64\",\"type\":\"integer\"},\"spent_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"format\":\"int64\",\"type\":\"integer\"}},\"required\":[\"id\",\"org_id\",\"currency\",\"period_start\",\"spent_cents\",\"reserved_cents\",\"purchased_count\",\"reserved_count\",\"active\",\"version\",\"created_at\",\"updated_at\"],\"type\":\"object\"}]},\"CommerceSpendLimitInput\":{\"properties\":{\"active\":{\"type\":\"boolean\"},\"agent_id\":{\"type\":\"string\"},\"allow_premium\":{\"type\":\"boolean\"},\"allowed_tlds\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"budget_cents\":{\"format\":\"int64\",\"minimum\":0,\"type\":\"integer\"},\"budget_enabled\":{\"type\":\"boolean\"},\"cadence\":{\"enum\":[\"does_not_repeat\",\"weekly\",\"monthly\",\"quarterly\",\"annually\"],\"type\":\"string\"},\"currency\":{\"default\":\"usd\",\"type\":\"string\"},\"domain_count_enabled\":{\"type\":\"boolean\"},\"domain_count_limit\":{\"format\":\"int64\",\"minimum\":0,\"type\":\"integer\"},\"expected_version\":{\"format\":\"int64\",\"type\":\"integer\"},\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"per_purchase_enabled\":{\"type\":\"boolean\"},\"per_purchase_max_cents\":{\"format\":\"int64\",\"minimum\":0,\"type\":\"integer\"},\"project_id\":{\"type\":\"string\"},\"scope\":{\"enum\":[\"org\",\"project\",\"agent\"],\"type\":\"string\"}},\"required\":[\"scope\",\"name\",\"cadence\",\"budget_cents\",\"budget_enabled\",\"per_purchase_max_cents\",\"per_purchase_enabled\",\"domain_count_limit\",\"domain_count_enabled\",\"allow_premium\"],\"type\":\"object\"},\"ConnectionConsent\":{\"properties\":{\"agent_id\":{\"type\":\"string\"},\"agent_org_id\":{\"type\":\"string\"},\"duration\":{\"description\":\"Full account control defaults to 24h.\",\"enum\":[\"24h\",\"until_revoked\"],\"type\":\"string\"},\"full_control_confirmed\":{\"description\":\"Required explicit consent for full account control including self-approval and lasting created credentials.\",\"type\":\"boolean\"},\"identity\":{\"enum\":[\"personal_assistant\",\"dedicated_agent\"],\"type\":\"string\"},\"inbox_ids\":{\"items\":{\"type\":\"string\"},\"maxItems\":100,\"type\":\"array\"},\"name\":{\"maxLength\":100,\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"reach\":{\"enum\":[\"inboxes\",\"project\",\"organization\",\"full_account\"],\"type\":\"string\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"maxItems\":64,\"type\":\"array\"}},\"required\":[\"name\",\"identity\",\"reach\",\"scopes\"],\"type\":\"object\"},\"ConnectionConsentResult\":{\"properties\":{\"connection\":{\"$ref\":\"#/components/schemas/ConnectionGrant\"},\"redirect_url\":{\"description\":\"Registered OAuth callback with a single-use PKCE authorization code.\",\"type\":\"string\"}},\"type\":\"object\"},\"ConnectionCreatedCredential\":{\"description\":\"Provenance and current status of an independently surviving agent key or enrollment token. Contains no secret or hash.\",\"properties\":{\"agent_id\":{\"type\":\"string\"},\"authorizer_id\":{\"type\":\"string\"},\"consumed\":{\"description\":\"A non-reusable enrollment token has already been redeemed. Its issued keys survive.\",\"type\":\"boolean\"},\"created_at_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"created_by_connection_id\":{\"type\":\"string\"},\"created_via_enrollment_id\":{\"type\":\"string\"},\"expires_at_ms\":{\"description\":\"Zero means until revoked.\",\"format\":\"int64\",\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"kind\":{\"enum\":[\"agent_key\",\"enrollment_token\"],\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"revoked\":{\"type\":\"boolean\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"created_by_connection_id\",\"authorizer_id\",\"kind\",\"org_id\",\"project_id\",\"name\",\"scopes\",\"created_at_ms\",\"expires_at_ms\",\"revoked\",\"consumed\"],\"type\":\"object\"},\"ConnectionCreatedCredentialList\":{\"properties\":{\"data\":{\"items\":{\"$ref\":\"#/components/schemas/ConnectionCreatedCredential\"},\"type\":\"array\"},\"has_more\":{\"type\":\"boolean\"},\"next_cursor\":{\"nullable\":true,\"type\":\"string\"},\"object\":{\"enum\":[\"list\"],\"type\":\"string\"}},\"required\":[\"object\",\"data\",\"has_more\",\"next_cursor\"],\"type\":\"object\"},\"ConnectionEvent\":{\"properties\":{\"action\":{\"type\":\"string\"},\"actor\":{\"description\":\"Explicit user or delegated connection identity.\",\"type\":\"string\"},\"authorizer_id\":{\"type\":\"string\"},\"connection_id\":{\"type\":\"string\"},\"created_at_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"outcome\":{\"type\":\"string\"},\"target\":{\"type\":\"string\"}},\"type\":\"object\"},\"ConnectionEventList\":{\"properties\":{\"data\":{\"items\":{\"$ref\":\"#/components/schemas/ConnectionEvent\"},\"type\":\"array\"},\"has_more\":{\"type\":\"boolean\"},\"next_cursor\":{\"nullable\":true,\"type\":\"string\"},\"object\":{\"enum\":[\"list\"],\"type\":\"string\"}},\"required\":[\"object\",\"data\",\"has_more\"],\"type\":\"object\"},\"ConnectionGrant\":{\"description\":\"Explicit consent bound to one connection; token refresh never extends grant expiry. Created credentials survive independently.\",\"properties\":{\"agent_id\":{\"type\":\"string\"},\"agent_org_id\":{\"type\":\"string\"},\"authorizer_id\":{\"type\":\"string\"},\"client_id\":{\"type\":\"string\"},\"consent_version\":{\"type\":\"string\"},\"created_at_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"created_by_connection_id\":{\"description\":\"Creation provenance; parent expiry and revocation do not cascade.\",\"type\":\"string\"},\"expires_at_ms\":{\"description\":\"Fixed grant deadline in Unix milliseconds. Zero means until revoked.\",\"format\":\"int64\",\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"identity\":{\"enum\":[\"personal_assistant\",\"dedicated_agent\"],\"type\":\"string\"},\"inbox_ids\":{\"items\":{\"type\":\"string\"},\"maxItems\":100,\"type\":\"array\"},\"last_used_at_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"reach\":{\"enum\":[\"inboxes\",\"project\",\"organization\",\"full_account\"],\"type\":\"string\"},\"revoked_at_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"id\",\"authorizer_id\",\"client_id\",\"name\",\"identity\",\"reach\",\"scopes\",\"created_at_ms\",\"expires_at_ms\",\"revoked_at_ms\"],\"type\":\"object\"},\"ConnectionGrantList\":{\"properties\":{\"data\":{\"items\":{\"$ref\":\"#/components/schemas/ConnectionGrant\"},\"type\":\"array\"},\"has_more\":{\"type\":\"boolean\"},\"next_cursor\":{\"nullable\":true,\"type\":\"string\"},\"object\":{\"enum\":[\"list\"],\"type\":\"string\"}},\"required\":[\"object\",\"data\",\"has_more\"],\"type\":\"object\"},\"CreateAgentRequest\":{\"additionalProperties\":false,\"properties\":{\"name\":{\"description\":\"Human-facing agent name. The server generates its technical handle.\",\"maxLength\":120,\"minLength\":1,\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"CreateBillingCheckoutRequest\":{\"properties\":{\"cancel_url\":{\"format\":\"uri\",\"type\":\"string\"},\"plan_tier\":{\"enum\":[\"developer\",\"startup\"],\"type\":\"string\"},\"success_url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"plan_tier\",\"success_url\",\"cancel_url\"],\"type\":\"object\"},\"CreateBillingCheckoutResponse\":{\"properties\":{\"id\":{\"description\":\"Stripe Checkout Session id.\",\"type\":\"string\"},\"mode\":{\"enum\":[\"test\",\"live\"],\"type\":\"string\"},\"plan_tier\":{\"enum\":[\"developer\",\"startup\"],\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"subscription\":{\"$ref\":\"#/components/schemas/AdminBillingSubscription\"},\"url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"id\",\"url\",\"status\",\"plan_tier\",\"mode\",\"subscription\"],\"type\":\"object\"},\"CreateBillingPortalRequest\":{\"properties\":{\"return_url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"return_url\"],\"type\":\"object\"},\"CreateBillingPortalResponse\":{\"properties\":{\"id\":{\"description\":\"Stripe Billing Portal Session id.\",\"type\":\"string\"},\"mode\":{\"enum\":[\"test\",\"live\"],\"type\":\"string\"},\"url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"id\",\"url\",\"mode\"],\"type\":\"object\"},\"CreateDomainBillingCheckoutRequest\":{\"properties\":{\"cancel_url\":{\"format\":\"uri\",\"type\":\"string\"},\"domain\":{\"example\":\"agent.agency\",\"type\":\"string\"},\"success_url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"domain\",\"success_url\",\"cancel_url\"],\"type\":\"object\"},\"CreateDomainBillingCheckoutResponse\":{\"properties\":{\"baseline_com_cost_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"currency\":{\"example\":\"usd\",\"type\":\"string\"},\"domain\":{\"type\":\"string\"},\"domain_annual_price_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"id\":{\"description\":\"Stripe Checkout Session id.\",\"type\":\"string\"},\"mode\":{\"enum\":[\"test\",\"live\"],\"type\":\"string\"},\"plan_tier\":{\"enum\":[\"developer\",\"startup\"],\"type\":\"string\"},\"registrar_cost_cents\":{\"format\":\"int64\",\"type\":\"integer\"},\"status\":{\"type\":\"string\"},\"stripe_price_id\":{\"type\":\"string\"},\"url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"id\",\"url\",\"status\",\"mode\",\"domain\",\"plan_tier\",\"currency\",\"registrar_cost_cents\",\"baseline_com_cost_cents\",\"domain_annual_price_cents\",\"stripe_price_id\"],\"type\":\"object\"},\"CreateDomainPurchaseRequest\":{\"properties\":{\"auto_renew\":{\"default\":true,\"type\":\"boolean\"},\"domain\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"rationale\":{\"maxLength\":2000,\"type\":\"string\"},\"scope\":{\"default\":\"org\",\"enum\":[\"org\",\"project\"],\"type\":\"string\"}},\"required\":[\"domain\"],\"type\":\"object\"},\"CreateInvitationRequest\":{\"description\":\"Invite an email to the org. Role-capped: the inviter cannot grant a role above their own effective role. Idempotent: one pending invitation per (org, email). The raw token is returned ONCE on a fresh create.\\n\",\"properties\":{\"email\":{\"format\":\"email\",\"type\":\"string\"},\"expires_in_days\":{\"description\":\"Optional TTL in days.\",\"type\":\"integer\"},\"role\":{\"enum\":[\"owner\",\"admin\",\"member\",\"viewer\",\"billing\"],\"type\":\"string\"}},\"required\":[\"email\",\"role\"],\"type\":\"object\"},\"CreateOrgRequest\":{\"description\":\"Create a CHILD org. parent_org_id is required (only child orgs are creatable from the console in v1; a user's single root org is bootstrapped on first sign-in). admin+ on the parent is required. Client-supplied org ids are NEVER accepted; the server creates a UUID and a compatibility customer id.\\n\",\"properties\":{\"display_name\":{\"type\":\"string\"},\"parent_org_id\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"parent_org_id\"],\"type\":\"object\"},\"CreatePlanChangeRequest\":{\"properties\":{\"project_id\":{\"description\":\"Required on the console creation route; agent routes derive it from the key.\",\"type\":\"string\"},\"rationale\":{\"maxLength\":2000,\"type\":\"string\"},\"target_plan\":{\"enum\":[\"free\",\"developer\",\"startup\"],\"type\":\"string\"}},\"required\":[\"target_plan\"],\"type\":\"object\"},\"CreateProjectRequest\":{\"description\":\"Create a project under the org. Enforced against the org's max_projects cap inside the same transaction as the create. Client-supplied ids are never accepted; the server creates a UUID.\\n\",\"properties\":{\"description\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"required\":[\"name\"],\"type\":\"object\"},\"CreateReviewLinkRequest\":{\"description\":\"Link a reviewer agent to an inbox (or account-wide). transport defaults to webhook; a webhook transport REQUIRES webhook_url. The timing knobs default at the server when omitted (escalate_after_s=300, max_hops=3, review_deadline_s= 86400). One link per scope; a duplicate scope is 409.\\n\",\"properties\":{\"escalate_after_s\":{\"type\":\"integer\"},\"hmac_secret\":{\"description\":\"Write-only signing secret for webhook deliveries.\",\"type\":\"string\"},\"inbox_address\":{\"description\":\"Empty = account-wide.\",\"type\":\"string\"},\"max_hops\":{\"type\":\"integer\"},\"review_deadline_s\":{\"type\":\"integer\"},\"reviewer_agent_id\":{\"description\":\"The reviewer agent (agt_…)\",\"must belong to the customer.\":null,\"type\":\"string\"},\"transport\":{\"description\":\"Defaults webhook.\",\"enum\":[\"webhook\",\"sse\",\"websocket\"],\"type\":\"string\"},\"webhook_url\":{\"description\":\"Required for the webhook transport.\",\"type\":\"string\"}},\"required\":[\"reviewer_agent_id\"],\"type\":\"object\"},\"DecideCommerceRequest\":{\"properties\":{\"approved_max_cents\":{\"format\":\"int64\",\"minimum\":0,\"type\":\"integer\"},\"auto_renew\":{\"type\":\"boolean\"},\"expected_version\":{\"format\":\"int64\",\"type\":\"integer\"},\"future_authority\":{\"$ref\":\"#/components/schemas/CommerceSpendLimitInput\"},\"reason\":{\"type\":\"string\"}},\"required\":[\"expected_version\"],\"type\":\"object\"},\"DelegationHealth\":{\"description\":\"Customer nameserver health, independent of mail setup. Confirmed DNS is not mail readiness. Action required means restore the instructed nameservers; mail may be disrupted.\",\"properties\":{\"checked_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"confirmed_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"status\":{\"enum\":[\"pending\",\"confirmed\",\"rechecking\",\"check_delayed\",\"action_required\"],\"type\":\"string\"}},\"type\":\"object\"},\"DeleteCategoryResult\":{\"description\":\"The result of a soft-delete (the row + history survive as training data; D9).\",\"properties\":{\"category_id\":{\"type\":\"string\"},\"merged_into\":{\"type\":\"string\"},\"status\":{\"example\":\"deleted\",\"type\":\"string\"}},\"required\":[\"status\",\"category_id\"],\"type\":\"object\"},\"DeleteReviewLinkResult\":{\"description\":\"The delete outcome plus how many in-flight reviews were swept back to the human queue (no orphan deliveries; §9).\\n\",\"properties\":{\"deleted\":{\"type\":\"boolean\"},\"swept\":{\"description\":\"In-flight reviews returned to the human queue by the delete.\",\"type\":\"integer\"}},\"required\":[\"deleted\",\"swept\"],\"type\":\"object\"},\"DomainList\":{\"properties\":{\"domains\":{\"items\":{\"$ref\":\"#/components/schemas/DomainSummary\"},\"type\":\"array\"},\"next_page\":{\"type\":\"string\"}},\"type\":\"object\"},\"DomainReadiness\":{\"description\":\"Authoritative domain outcome shared by the console, API, MCP and SDK. Show summary and next_action instead of interpreting verification_status, mode or dkim_status. ready_for_inboxes describes domain configuration only; creating an inbox still requires permission and available plan capacity. checked_at is the latest DNS observation, not an end-to-end mail test.\\n\",\"properties\":{\"action_required_by\":{\"enum\":[\"customer\",\"extrovert\",\"none\"],\"type\":\"string\"},\"checked_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"inboxes\":{\"description\":\"Omitted without inbox-read permission. Agent counts include only that agent's visible inboxes.\",\"properties\":{\"needs_attention\":{\"minimum\":0,\"type\":\"integer\"},\"ready\":{\"minimum\":0,\"type\":\"integer\"},\"scope\":{\"enum\":[\"agent\",\"inbox\",\"selected_inboxes\",\"project\",\"organization\"],\"type\":\"string\"},\"setting_up\":{\"minimum\":0,\"type\":\"integer\"},\"total\":{\"minimum\":0,\"type\":\"integer\"}},\"required\":[\"scope\",\"total\",\"ready\",\"setting_up\",\"needs_attention\"],\"type\":\"object\"},\"label\":{\"type\":\"string\"},\"next_action\":{\"enum\":[\"check_dns_entries\",\"restore_dns\",\"wait\",\"create_inbox\",\"use_inbox\",\"ask_owner_to_create_inbox\"],\"type\":\"string\"},\"next_check_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"poll_after_seconds\":{\"minimum\":1,\"type\":\"integer\"},\"ready_for_inboxes\":{\"type\":\"boolean\"},\"reason\":{\"type\":\"string\"},\"status\":{\"enum\":[\"waiting_for_dns\",\"checking\",\"setting_up\",\"ready\",\"action_required\",\"needs_attention\"],\"type\":\"string\"},\"summary\":{\"type\":\"string\"}},\"required\":[\"status\",\"label\",\"summary\",\"reason\",\"action_required_by\",\"next_action\",\"ready_for_inboxes\",\"poll_after_seconds\"],\"type\":\"object\"},\"DomainSummary\":{\"properties\":{\"delegation\":{\"$ref\":\"#/components/schemas/DelegationHealth\"},\"dkim_status\":{\"type\":\"string\"},\"domain\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"mode\":{\"type\":\"string\"},\"provisioning_error\":{\"type\":\"string\"},\"provisioning_phase\":{\"type\":\"string\"},\"readiness\":{\"$ref\":\"#/components/schemas/DomainReadiness\"},\"shared\":{\"description\":\"True for the hosted inbox domain included with the current plan.\",\"type\":\"boolean\"},\"verification_status\":{\"type\":\"string\"}},\"type\":\"object\"},\"EffectiveRiskDial\":{\"description\":\"The RESOLVED risk dial for a category: the account default with any per- category override applied (null override = inherit; D12). Every field is a concrete value already in force.\\n\",\"properties\":{\"auto_send_cap_per_day\":{\"type\":\"integer\"},\"canary_rate\":{\"format\":\"double\",\"type\":\"number\"},\"drift_demote_after\":{\"type\":\"integer\"},\"first_contact_gate\":{\"type\":\"boolean\"},\"graduate_min_age_hours\":{\"type\":\"integer\"},\"graduate_min_approvals\":{\"type\":\"integer\"},\"min_confidence\":{\"format\":\"double\",\"type\":\"number\"}},\"required\":[\"min_confidence\",\"first_contact_gate\",\"drift_demote_after\",\"canary_rate\",\"graduate_min_approvals\",\"graduate_min_age_hours\",\"auto_send_cap_per_day\"],\"type\":\"object\"},\"EmailAddress\":{\"description\":\"A structured RFC5322 address.\",\"properties\":{\"email\":{\"example\":\"support@acme.test\",\"format\":\"email\",\"type\":\"string\"},\"name\":{\"example\":\"Acme Support\",\"type\":\"string\"}},\"required\":[\"email\"],\"type\":\"object\"},\"EnrollmentTokenList\":{\"properties\":{\"next_page\":{\"type\":\"string\"},\"tokens\":{\"items\":{\"$ref\":\"#/components/schemas/EnrollmentTokenSummary\"},\"type\":\"array\"}},\"type\":\"object\"},\"EnrollmentTokenSummary\":{\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"daily_send_limit\":{\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"max_mailboxes\":{\"type\":\"integer\"},\"prefix\":{\"type\":\"string\"},\"reusable\":{\"type\":\"boolean\"},\"revoked\":{\"type\":\"boolean\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"used_count\":{\"type\":\"integer\"}},\"type\":\"object\"},\"GraduateCategoryRequest\":{\"description\":\"Graduate a category ONE rung up to to_state (console plane, D16).\",\"properties\":{\"to_state\":{\"enum\":[\"auto_notify\",\"auto_silent\"],\"type\":\"string\"}},\"required\":[\"to_state\"],\"type\":\"object\"},\"GraduationStatus\":{\"description\":\"The graduation gate status toward the NEXT rung (Review Loop, D16). Reports clean approvals (N / needed), category age, the maturity gate (auto_silent precondition), the drift counter vs K, and whether a human graduate would succeed right now (can_graduate). Read-only; agents propose but never flip the bit.\\n\",\"properties\":{\"age_hours\":{\"format\":\"double\",\"type\":\"number\"},\"age_met\":{\"type\":\"boolean\"},\"approvals_met\":{\"type\":\"boolean\"},\"can_graduate\":{\"type\":\"boolean\"},\"category_id\":{\"type\":\"string\"},\"clean_approval_count\":{\"type\":\"integer\"},\"drift_count\":{\"type\":\"integer\"},\"drift_demote_after\":{\"type\":\"integer\"},\"graduate_min_age_hours\":{\"type\":\"integer\"},\"graduate_min_approvals\":{\"type\":\"integer\"},\"maturity_gate_met\":{\"type\":\"boolean\"},\"never_graduate\":{\"description\":\"Pinned at supervised (high-stakes lock).\",\"type\":\"boolean\"},\"next_state\":{\"description\":\"The rung a graduate would move to (empty if none).\",\"type\":\"string\"},\"state\":{\"enum\":[\"supervised\",\"auto_notify\",\"auto_silent\"],\"type\":\"string\"}},\"required\":[\"category_id\",\"state\",\"next_state\",\"never_graduate\",\"clean_approval_count\",\"graduate_min_approvals\",\"approvals_met\",\"age_hours\",\"graduate_min_age_hours\",\"age_met\",\"maturity_gate_met\",\"drift_count\",\"drift_demote_after\",\"can_graduate\"],\"type\":\"object\"},\"InboxReviewPolicy\":{\"description\":\"The per-inbox review-policy override view after a set/clear: the raw override (empty = inherit), the account default it inherits from, and the resolved effective policy for this inbox (override-or-account-or-floor; D6).\\n\",\"properties\":{\"account\":{\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"type\":\"string\"},\"address\":{\"type\":\"string\"},\"effective\":{\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"type\":\"string\"},\"override\":{\"description\":\"Per-inbox override; empty = inherit the account default.\",\"type\":\"string\"}},\"required\":[\"address\",\"override\",\"account\",\"effective\"],\"type\":\"object\"},\"InboxReviewPolicyRequest\":{\"description\":\"Set the per-inbox override (a non-null policy) or clear it back to inherit the account default (explicit JSON null; D6).\\n\",\"properties\":{\"policy\":{\"description\":\"A value SETS the override; explicit null CLEARS it (= inherit).\",\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"nullable\":true,\"type\":\"string\"}},\"type\":\"object\"},\"IssueAgentKeyRequest\":{\"properties\":{\"agent_id\":{\"type\":\"string\"},\"expires_in_hours\":{\"minimum\":0,\"type\":\"integer\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"required\":[\"agent_id\",\"scopes\"],\"type\":\"object\"},\"IssueAgentKeyResult\":{\"properties\":{\"agent_handle\":{\"type\":\"string\"},\"agent_id\":{\"type\":\"string\"},\"agent_name\":{\"type\":\"string\"},\"ceiling_inbox_id\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"enrollment_token_id\":{\"type\":\"string\"},\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"key\":{\"description\":\"Raw agent API key\",\"shown once.\":null,\"type\":\"string\"},\"key_tier\":{\"enum\":[\"org\",\"project\",\"inbox\"],\"type\":\"string\"},\"prefix\":{\"type\":\"string\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"IssueEnrollmentTokenRequest\":{\"properties\":{\"allowed_domains\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"daily_send_limit\":{\"type\":\"integer\"},\"expires_in_hours\":{\"type\":\"integer\"},\"label\":{\"type\":\"string\"},\"max_mailboxes\":{\"type\":\"integer\"},\"reusable\":{\"type\":\"boolean\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"}},\"type\":\"object\"},\"IssueEnrollmentTokenResult\":{\"properties\":{\"daily_send_limit\":{\"type\":\"integer\"},\"id\":{\"type\":\"string\"},\"max_mailboxes\":{\"type\":\"integer\"},\"prefix\":{\"type\":\"string\"},\"scopes\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"token\":{\"description\":\"Raw enrollment token\",\"shown once.\":null,\"type\":\"string\"}},\"type\":\"object\"},\"MergeCategoryRequest\":{\"description\":\"Merge the path category (the loser) into into_category_id (the survivor), repointing all rr_/rule_ references by cat_ id in one transaction (D9/D10). A cross-tenant or unknown into_category_id is 404 (never a cross-customer merge).\\n\",\"properties\":{\"into_category_id\":{\"description\":\"The survivor category id (cat_…).\",\"type\":\"string\"}},\"required\":[\"into_category_id\"],\"type\":\"object\"},\"MergeCategoryResult\":{\"description\":\"The survivor category plus how many references were repointed by the merge.\",\"properties\":{\"category\":{\"$ref\":\"#/components/schemas/Category\"},\"review_requests_repointed\":{\"type\":\"integer\"},\"writing_rules_repointed\":{\"type\":\"integer\"}},\"required\":[\"category\",\"review_requests_repointed\",\"writing_rules_repointed\"],\"type\":\"object\"},\"Message\":{\"description\":\"The canonical message wire shape (agent plane).\",\"properties\":{\"cc\":{\"items\":{\"$ref\":\"#/components/schemas/EmailAddress\"},\"type\":\"array\"},\"date\":{\"description\":\"Original Date header value.\",\"type\":\"string\"},\"direction\":{\"description\":\"Derived relative to the owning inbox.\",\"enum\":[\"inbound\",\"outbound\"],\"type\":\"string\"},\"extracted_html\":{\"description\":\"Best-effort derivative of html with common quoted-history containers removed; null when html is absent or no authored HTML remains. Not authoritative.\",\"nullable\":true,\"type\":\"string\"},\"extracted_text\":{\"description\":\"Best-effort derivative of text with quoted history and signatures removed; null when text is absent or no authored text remains. Not authoritative.\",\"nullable\":true,\"type\":\"string\"},\"folder\":{\"type\":\"string\"},\"from\":{\"$ref\":\"#/components/schemas/EmailAddress\"},\"html\":{\"description\":\"Decoded text/html MIME alternative; null for text-only mail. Never synthesized from plain text.\",\"nullable\":true,\"type\":\"string\"},\"id\":{\"description\":\"Opaque\",\"example\":\"msg_8Tz\",\"inbox-resolvable id.\":null,\"type\":\"string\"},\"in_reply_to\":{\"description\":\"RFC5322 In-Reply-To header.\",\"type\":\"string\"},\"inbox\":{\"example\":\"agent7@extrovertmail.com\",\"type\":\"string\"},\"message_id\":{\"description\":\"RFC5322 Message-ID.\",\"type\":\"string\"},\"references\":{\"description\":\"RFC5322 References header chain.\",\"type\":\"string\"},\"reply_to\":{\"items\":{\"$ref\":\"#/components/schemas/EmailAddress\"},\"type\":\"array\"},\"seen\":{\"description\":\"Native IMAP \\\\Seen flag (read state).\",\"type\":\"boolean\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"description\":\"Resolvable msg_ selector when the Sent copy is available.\",\"nullable\":true,\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"submission_id\":{\"description\":\"Opaque status handle for a tracked outbound submission.\",\"type\":\"string\"},\"text\":{\"description\":\"Decoded UTF-8 text/plain MIME alternative; null when the message had no plain-text part. Never derived from HTML.\",\"nullable\":true,\"type\":\"string\"},\"thread_id\":{\"example\":\"thr_9aB\",\"type\":\"string\"},\"to\":{\"items\":{\"$ref\":\"#/components/schemas/EmailAddress\"},\"type\":\"array\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"}},\"type\":\"object\"},\"NeverGraduateRequest\":{\"description\":\"Set/clear the never-graduate lock on a category (console plane, D16).\",\"properties\":{\"locked\":{\"description\":\"true pins at supervised (demoting first if graduated); false releases the pin.\",\"type\":\"boolean\"}},\"required\":[\"locked\"],\"type\":\"object\"},\"OnboardDomainRequest\":{\"properties\":{\"domain\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"ns_delegated\",\"purchased\"],\"type\":\"string\"}},\"required\":[\"domain\",\"mode\"],\"type\":\"object\"},\"OnboardDomainResult\":{\"properties\":{\"delegation\":{\"$ref\":\"#/components/schemas/DelegationHealth\"},\"delegation_ns\":{\"items\":{\"$ref\":\"#/components/schemas/RecordInstruction\"},\"type\":\"array\"},\"domain\":{\"type\":\"string\"},\"instruction\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"shared\",\"ns_delegated\",\"manual\",\"purchased\"],\"type\":\"string\"},\"provisioning_error\":{\"type\":\"string\"},\"provisioning_phase\":{\"type\":\"string\"},\"readiness\":{\"$ref\":\"#/components/schemas/DomainReadiness\"},\"records\":{\"items\":{\"$ref\":\"#/components/schemas/RecordInstruction\"},\"type\":\"array\"},\"verification_status\":{\"type\":\"string\"},\"zone_id\":{\"type\":\"string\"}},\"type\":\"object\"},\"Org\":{\"description\":\"An Extrovert organization (the authority/billing boundary). org ids are plain server-created UUIDs (never client-supplied). A root org has a null parent_org_id; child orgs reference their parent.\\n\",\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"customer_id\":{\"type\":\"string\"},\"display_name\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"lifecycle_status\":{\"enum\":[\"active\",\"archived\",\"deleted\"],\"type\":\"string\"},\"max_child_orgs\":{\"type\":\"integer\"},\"max_projects\":{\"type\":\"integer\"},\"parent_org_id\":{\"nullable\":true,\"type\":\"string\"},\"plan_tier\":{\"type\":\"string\"},\"root_org_id\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"description\":\"Optimistic-CAS version.\",\"type\":\"integer\"}},\"required\":[\"id\",\"customer_id\",\"root_org_id\",\"display_name\",\"slug\",\"lifecycle_status\",\"plan_tier\",\"max_child_orgs\",\"max_projects\",\"version\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"OrgInvitation\":{\"description\":\"An org invitation. `token` is the raw secret returned ONCE on a fresh create (empty when an existing pending invitation was reused, or on accept/revoke).\\n\",\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"email\":{\"type\":\"string\"},\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"role\":{\"enum\":[\"owner\",\"admin\",\"member\",\"viewer\",\"billing\"],\"type\":\"string\"},\"status\":{\"enum\":[\"pending\",\"accepted\",\"revoked\",\"expired\"],\"type\":\"string\"},\"token\":{\"description\":\"Raw invitation token; present only on a fresh create.\",\"type\":\"string\"},\"token_prefix\":{\"type\":\"string\"}},\"required\":[\"id\",\"org_id\",\"email\",\"role\",\"status\",\"token_prefix\",\"expires_at\",\"created_at\"],\"type\":\"object\"},\"OrgList\":{\"properties\":{\"orgs\":{\"items\":{\"$ref\":\"#/components/schemas/Org\"},\"type\":\"array\"}},\"type\":\"object\"},\"OrgMember\":{\"description\":\"One org membership row.\",\"properties\":{\"clerk_user_id\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"email\":{\"type\":\"string\"},\"role\":{\"enum\":[\"owner\",\"admin\",\"member\",\"viewer\",\"billing\"],\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"}},\"required\":[\"clerk_user_id\",\"email\",\"role\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"OrgMemberList\":{\"properties\":{\"members\":{\"items\":{\"$ref\":\"#/components/schemas/OrgMember\"},\"type\":\"array\"}},\"type\":\"object\"},\"OrgSettings\":{\"properties\":{\"default_domain\":{\"type\":\"string\"},\"default_mailbox_cap\":{\"type\":\"integer\"},\"default_onboarding_mode\":{\"type\":\"string\"},\"early_access\":{\"type\":\"boolean\"},\"org_name\":{\"type\":\"string\"},\"webhook_signing_prefix\":{\"type\":\"string\"},\"x402_mode\":{\"type\":\"string\"}},\"type\":\"object\"},\"PacingItem\":{\"description\":\"One queued draft's pacing classification relative to the human review cursor + lookahead window (M7 Slice B/§8). $0-LLM (a cheap integer staleness compare).\\n\",\"properties\":{\"review_id\":{\"type\":\"string\"},\"state\":{\"description\":\"behind_cursor = the human has reviewed past it; in_window_fresh = in the freshness-guaranteed window and current-enough; in_window_redrafting = in the window but stale (a redraft is in flight; the console shows a shimmer); ahead = queued beyond the window, not yet freshness-guaranteed.\\n\",\"enum\":[\"behind_cursor\",\"in_window_fresh\",\"in_window_redrafting\",\"ahead\"],\"type\":\"string\"}},\"required\":[\"review_id\",\"state\"],\"type\":\"object\"},\"PatchOrgRequest\":{\"description\":\"Update an org's display fields. Plan/limit fields are not console-patchable in v1.\",\"properties\":{\"display_name\":{\"type\":\"string\"},\"expected_version\":{\"description\":\"Optimistic-CAS version of the row being updated.\",\"type\":\"integer\"},\"slug\":{\"type\":\"string\"}},\"type\":\"object\"},\"PatchOrgSettingsRequest\":{\"description\":\"Any subset of the org settings; omitted fields are unchanged.\",\"properties\":{\"default_domain\":{\"type\":\"string\"},\"default_mailbox_cap\":{\"type\":\"integer\"},\"default_onboarding_mode\":{\"type\":\"string\"},\"early_access\":{\"type\":\"boolean\"},\"org_name\":{\"type\":\"string\"},\"webhook_signing_prefix\":{\"type\":\"string\"},\"x402_mode\":{\"type\":\"string\"}},\"type\":\"object\"},\"PatchProjectRequest\":{\"description\":\"Update a project's display fields.\",\"properties\":{\"description\":{\"type\":\"string\"},\"expected_version\":{\"description\":\"Optimistic-CAS version of the row being updated.\",\"type\":\"integer\"},\"name\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"}},\"type\":\"object\"},\"PendingSignupClaim\":{\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"role\":{\"enum\":[\"owner\"],\"type\":\"string\"}},\"required\":[\"id\",\"org_id\",\"role\",\"created_at\",\"expires_at\"],\"type\":\"object\"},\"PersonalCategory\":{\"properties\":{\"description\":{\"type\":\"string\"},\"email\":{\"type\":\"boolean\"},\"id\":{\"enum\":[\"review\",\"purchase_approval\",\"purchase_completed\",\"purchase_problem\",\"domain_progress\",\"domain_action\",\"domain_ready\",\"domain_problem\",\"sending_problem\"],\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"push\":{\"type\":\"boolean\"}},\"required\":[\"id\",\"label\",\"description\",\"push\",\"email\"],\"type\":\"object\"},\"PersonalNotice\":{\"properties\":{\"action_path\":{\"type\":\"string\"},\"actionable\":{\"type\":\"boolean\"},\"body\":{\"description\":\"Safe summary\",\"or provider diagnostics.\":null,\"recipients\":null,\"subjects\":null,\"type\":\"string\",\"without message bodies\":null},\"category\":{\"type\":\"string\"},\"created_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"email_status\":{\"enum\":[\"off\",\"pending\",\"sent\",\"failed\",\"suppressed\"],\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"kind\":{\"type\":\"string\"},\"notice_id\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"project_id\":{\"type\":\"string\"},\"push_status\":{\"enum\":[\"off\",\"pending\",\"sent\",\"failed\",\"suppressed\"],\"type\":\"string\"},\"source_id\":{\"type\":\"string\"},\"source_version\":{\"format\":\"int64\",\"type\":\"integer\"},\"title\":{\"type\":\"string\"}},\"required\":[\"id\",\"notice_id\",\"kind\",\"source_id\",\"source_version\",\"org_id\",\"project_id\",\"category\",\"title\",\"body\",\"action_path\",\"actionable\",\"created_ms\",\"push_status\",\"email_status\"],\"type\":\"object\"},\"PersonalNotificationBatch\":{\"properties\":{\"attempt\":{\"type\":\"integer\"},\"channel\":{\"enum\":[\"push\",\"email\"],\"type\":\"string\"},\"created_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"device_id\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"items\":{\"items\":{\"$ref\":\"#/components/schemas/PersonalNotice\"},\"type\":\"array\"},\"status\":{\"type\":\"string\"}},\"required\":[\"id\",\"channel\",\"status\",\"items\"],\"type\":\"object\"},\"PersonalNotificationHistory\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/PersonalNotice\"},\"type\":\"array\"},\"next_cursor\":{\"type\":\"string\"}},\"required\":[\"items\"],\"type\":\"object\"},\"PersonalNotificationSettings\":{\"properties\":{\"email\":{\"type\":\"string\"},\"email_status\":{\"enum\":[\"verified\",\"unavailable\"],\"type\":\"string\"},\"preferences\":{\"$ref\":\"#/components/schemas/PersonalPreferences\"},\"push_available\":{\"type\":\"boolean\"}},\"required\":[\"preferences\",\"email\",\"email_status\",\"push_available\"],\"type\":\"object\"},\"PersonalPreferencePatch\":{\"additionalProperties\":false,\"properties\":{\"category\":{\"type\":\"string\"},\"email\":{\"type\":\"boolean\"},\"expected_version\":{\"minimum\":0,\"type\":\"integer\"},\"grouping_minutes\":{\"enum\":[1,5,15],\"type\":\"integer\"},\"push\":{\"type\":\"boolean\"}},\"required\":[\"expected_version\"],\"type\":\"object\"},\"PersonalPreferences\":{\"properties\":{\"categories\":{\"items\":{\"$ref\":\"#/components/schemas/PersonalCategory\"},\"type\":\"array\"},\"grouping_minutes\":{\"default\":5,\"enum\":[1,5,15],\"type\":\"integer\"},\"version\":{\"minimum\":0,\"type\":\"integer\"}},\"required\":[\"grouping_minutes\",\"version\",\"categories\"],\"type\":\"object\"},\"PersonalPushDevice\":{\"properties\":{\"created_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"enabled\":{\"type\":\"boolean\"},\"endpoint\":{\"description\":\"Owner-only endpoint used to identify this browser. Subscription encryption keys are never returned.\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"label\":{\"maxLength\":80,\"type\":\"string\"},\"last_accepted_ms\":{\"description\":\"Push provider acceptance time; does not prove device display.\",\"format\":\"int64\",\"type\":\"integer\"},\"status\":{\"enum\":[\"active\",\"expired\"],\"type\":\"string\"},\"updated_ms\":{\"format\":\"int64\",\"type\":\"integer\"},\"version\":{\"type\":\"integer\"}},\"required\":[\"id\",\"endpoint\",\"label\",\"enabled\",\"status\",\"version\",\"created_ms\",\"updated_ms\",\"last_accepted_ms\"],\"type\":\"object\"},\"PersonalPushDevicePatch\":{\"additionalProperties\":false,\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"expected_version\":{\"minimum\":1,\"type\":\"integer\"},\"label\":{\"maxLength\":80,\"type\":\"string\"}},\"required\":[\"expected_version\"],\"type\":\"object\"},\"PersonalPushEnrollment\":{\"additionalProperties\":false,\"properties\":{\"auth\":{\"description\":\"Base64url encoded 16-byte authentication secret.\",\"type\":\"string\"},\"endpoint\":{\"description\":\"HTTPS endpoint on a supported browser push service.\",\"maxLength\":4096,\"type\":\"string\"},\"label\":{\"maxLength\":80,\"type\":\"string\"},\"p256dh\":{\"description\":\"Base64url encoded uncompressed P-256 public key.\",\"type\":\"string\"}},\"required\":[\"endpoint\",\"p256dh\",\"auth\",\"label\"],\"type\":\"object\"},\"Project\":{\"description\":\"An Extrovert project (the resource namespace inside an org). project ids are plain server-created UUIDs (never client-supplied).\\n\",\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"customer_id\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"is_default\":{\"type\":\"boolean\"},\"lifecycle_status\":{\"enum\":[\"active\",\"archived\",\"deleted\"],\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"org_id\":{\"type\":\"string\"},\"slug\":{\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"description\":\"Optimistic-CAS version.\",\"type\":\"integer\"}},\"required\":[\"id\",\"org_id\",\"customer_id\",\"name\",\"slug\",\"description\",\"is_default\",\"lifecycle_status\",\"version\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"ProjectList\":{\"properties\":{\"projects\":{\"items\":{\"$ref\":\"#/components/schemas/Project\"},\"type\":\"array\"}},\"type\":\"object\"},\"PromoteRuleRequest\":{\"description\":\"Move a rule between the category and general/house-style layers (via a supersession).\",\"properties\":{\"to_scope\":{\"enum\":[\"general\",\"category\"],\"type\":\"string\"}},\"required\":[\"to_scope\"],\"type\":\"object\"},\"RealtimeTicket\":{\"description\":\"A short-lived, single-use ticket the console creates (under its Clerk session) to open the live Approvals SSE stream; EventSource cannot set an Authorization header, so the customer scope is carried by this opaque ticket in the stream's `ticket` query parameter. Bound to the session's customer at create time, consumed on first stream connect, and self-expiring (~60s).\\n\",\"properties\":{\"expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"ticket\":{\"description\":\"Opaque single-use ticket (`rtk_…`).\",\"type\":\"string\"}},\"required\":[\"ticket\",\"expires_at\"],\"type\":\"object\"},\"ReconcileMessageOutcome\":{\"description\":\"One per-message reconciliation outcome (D19); WHY a queued draft released or was held. verdict is the integer-compare result; released is true only when a current-enough draft also passed the M6 gate; a stale draft is NEVER released as-is.\\n\",\"properties\":{\"composed_category_rules_version\":{\"type\":\"integer\"},\"composed_house_style_version\":{\"type\":\"integer\"},\"current_category_rules_version\":{\"type\":\"integer\"},\"current_house_style_version\":{\"type\":\"integer\"},\"gate_outcome\":{\"description\":\"The M6 gate decision for a current-enough draft (auto_silent|auto_notify, or held:\\u003creason\\u003e).\",\"type\":\"string\"},\"held_reason\":{\"description\":\"The held token when a gate diverted a current-enough draft.\",\"type\":\"string\"},\"nudged\":{\"description\":\"Whether a reprocess nudge was enqueued (redraft a stale draft, or re-submit a releasable one).\",\"type\":\"boolean\"},\"released\":{\"type\":\"boolean\"},\"review_id\":{\"type\":\"string\"},\"verdict\":{\"enum\":[\"current_enough\",\"stale\"],\"type\":\"string\"}},\"required\":[\"review_id\",\"verdict\",\"released\",\"composed_category_rules_version\",\"composed_house_style_version\",\"current_category_rules_version\",\"current_house_style_version\",\"nudged\"],\"type\":\"object\"},\"ReconcileResult\":{\"description\":\"The D19/§8 reconciliation sweep summary (console scan-backlog / graduate / rule-change). Records every per-message decision so the human never hand-touches the backlog and no stale draft slips out. Deterministic, $0-LLM.\\n\",\"properties\":{\"category_id\":{\"type\":\"string\"},\"current_category_rules_version\":{\"type\":\"integer\"},\"current_house_style_version\":{\"type\":\"integer\"},\"held_by_gate\":{\"description\":\"Current-enough drafts that a M6 gate diverted (transient re-supervision).\",\"type\":\"integer\"},\"outcomes\":{\"items\":{\"$ref\":\"#/components/schemas/ReconcileMessageOutcome\"},\"type\":\"array\"},\"released\":{\"description\":\"Current-enough drafts released through the M6 gate (re-submit).\",\"type\":\"integer\"},\"scanned\":{\"type\":\"integer\"},\"stale\":{\"description\":\"Stale drafts nudged to redraft against current rules (held, not released).\",\"type\":\"integer\"},\"staleness_tolerance\":{\"type\":\"integer\"},\"trigger\":{\"description\":\"What kicked off the sweep.\",\"enum\":[\"graduate\",\"rule_change\",\"scan_backlog\"],\"type\":\"string\"}},\"required\":[\"category_id\",\"trigger\",\"scanned\",\"released\",\"stale\",\"held_by_gate\",\"current_category_rules_version\",\"current_house_style_version\",\"staleness_tolerance\",\"outcomes\"],\"type\":\"object\"},\"RecordInstruction\":{\"description\":\"A DNS record the customer must add for domain onboarding.\",\"properties\":{\"name\":{\"type\":\"string\"},\"priority\":{\"nullable\":true,\"type\":\"integer\"},\"ttl\":{\"type\":\"integer\"},\"type\":{\"example\":\"TXT\",\"type\":\"string\"},\"value\":{\"type\":\"string\"}},\"type\":\"object\"},\"RegisterWebhookRequest\":{\"properties\":{\"address\":{\"description\":\"Legacy alias for `inbox`.\",\"type\":\"string\"},\"client_id\":{\"description\":\"Optional idempotency key (alias for the `Idempotency-Key` header). A retry with the same key replays the original webhook registration.\\n\",\"type\":\"string\"},\"event_types\":{\"description\":\"AgentMail-compatible alias for `events`.\",\"items\":{\"enum\":[\"message.received\"],\"example\":\"message.received\",\"type\":\"string\"},\"type\":\"array\"},\"events\":{\"items\":{\"enum\":[\"message.received\"],\"example\":\"message.received\",\"type\":\"string\"},\"type\":\"array\"},\"inbox\":{\"description\":\"Scope to one mailbox; omit for all.\",\"type\":\"string\"},\"url\":{\"format\":\"uri\",\"type\":\"string\"}},\"required\":[\"url\"],\"type\":\"object\"},\"ReplyRequest\":{\"description\":\"Thread-aware reply. Exactly one of `thread_id` / `message_id` selects the parent; recipients, subject, and threading headers are derived server-side.\\n\",\"oneOf\":[{\"required\":[\"thread_id\"]},{\"required\":[\"message_id\"]}],\"properties\":{\"attachments\":{\"items\":{\"$ref\":\"#/components/schemas/AttachmentInput\"},\"type\":\"array\"},\"bcc\":{\"items\":{\"format\":\"email\",\"type\":\"string\"},\"type\":\"array\"},\"category_confidence\":{\"description\":\"Agent-supplied confidence (0..1) in the category match (see SendRequest.category_confidence). Feeds the min_confidence auto-send gate only; the server never scores.\\n\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"type\":\"number\"},\"category_id\":{\"description\":\"Opaque category id (cat_…) matched from the registry.\",\"type\":\"string\"},\"cc\":{\"items\":{\"format\":\"email\",\"type\":\"string\"},\"type\":\"array\"},\"composition_token\":{\"description\":\"Opaque token from a fresh, unfiltered GET /v1/rules for this agent, project, and category.\",\"type\":\"string\"},\"expected_last_message_id\":{\"description\":\"Optional stale-context guard; returns 409 if the thread head changed before request materialization.\",\"type\":\"string\"},\"headers\":{\"additionalProperties\":{\"type\":\"string\"},\"type\":\"object\"},\"html\":{\"type\":\"string\"},\"idempotency_key\":{\"deprecated\":true,\"description\":\"DEPRECATED body-level alias for the `Idempotency-Key` header (see SendRequest.idempotency_key). Send the header instead.\\n\",\"type\":\"string\"},\"intent\":{\"$ref\":\"#/components/schemas/ReviewIntent\"},\"message_id\":{\"type\":\"string\"},\"mode\":{\"description\":\"Review Loop per-send assertion (see SendRequest.mode).\",\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"reply_all\":{\"description\":\"Include all original recipients (reply-all) when true.\",\"type\":\"boolean\"},\"reply_to\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"}},\"type\":\"object\"},\"ReputationFinding\":{\"description\":\"One deliverability finding for the organization.\",\"properties\":{\"detail\":{\"type\":\"string\"},\"domain\":{\"type\":\"string\"},\"first_seen_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"last_seen_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"resolved_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"sender\":{\"type\":\"string\"},\"severity\":{\"enum\":[\"low\",\"high\",\"unknown\"],\"type\":\"string\"},\"status\":{\"enum\":[\"open\",\"resolved\"],\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"type\":{\"description\":\"bounce/complaint/feedback_3p/ip_listing/dkim/dmarc/spf/bimi/suppression/account_health/unknown.\",\"type\":\"string\"}},\"required\":[\"id\",\"type\",\"severity\",\"status\",\"title\",\"detail\",\"first_seen_at\",\"last_seen_at\"],\"type\":\"object\"},\"ReputationFindingsPage\":{\"description\":\"The paged list of the org's deliverability findings (newest-first).\",\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/ReputationFinding\"},\"type\":\"array\"},\"next_cursor\":{\"description\":\"Opaque cursor for the next page; absent on the last page.\",\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"ReputationMetrics\":{\"description\":\"The latest window's Sends/Bounces/Complaints rollup for the org.\",\"properties\":{\"bounce_rate\":{\"type\":\"number\"},\"bounces\":{\"type\":\"integer\"},\"complaint_rate\":{\"type\":\"number\"},\"complaints\":{\"type\":\"integer\"},\"sends\":{\"type\":\"integer\"},\"window_end\":{\"format\":\"date-time\",\"type\":\"string\"},\"window_start\":{\"format\":\"date-time\",\"type\":\"string\"}},\"required\":[\"sends\",\"bounces\",\"complaints\",\"bounce_rate\",\"complaint_rate\"],\"type\":\"object\"},\"ReputationRollup\":{\"description\":\"The org's deliverability rollup: derived status badge, sending readiness, the latest metrics window, and open-finding count.\\n\",\"properties\":{\"configured\":{\"description\":\"Whether sending is configured.\",\"type\":\"boolean\"},\"last_checked_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"metrics\":{\"$ref\":\"#/components/schemas/ReputationMetrics\"},\"object\":{\"enum\":[\"reputation\"],\"type\":\"string\"},\"open_findings\":{\"description\":\"Count of open findings for the org.\",\"type\":\"integer\"},\"org_id\":{\"type\":\"string\"},\"sending_status\":{\"description\":\"The org's effective sending status.\",\"type\":\"string\"},\"status\":{\"description\":\"UI badge: healthy/at_risk/paused/enforced/unknown.\",\"type\":\"string\"}},\"required\":[\"object\",\"org_id\",\"status\",\"sending_status\",\"configured\",\"metrics\",\"open_findings\"],\"type\":\"object\"},\"Review\":{\"description\":\"A review request (rr_…); the server-owned pre-send record of a message under the Review Loop. Carries intent, the current proposed draft, category, state machine fields, and (once sent) the sent body + diff.\\n\",\"properties\":{\"agent_id\":{\"type\":\"string\"},\"category_id\":{\"type\":\"string\"},\"closed\":{\"description\":\"True once this review will never move again; `sent`, `auto_sent`, `cancelled` OR `failed`. It is the definitive per-review \\\"am I done?\\\" answer and the poll-side companion to the terminal review events; use it after a restart when your event cursor is gone. `failed` is included deliberately: nothing re-approves a failed review, so treating it as open means waiting forever.\\n\",\"type\":\"boolean\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"decided_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"decision_feedback\":{\"type\":\"string\"},\"diff_unified\":{\"type\":\"string\"},\"effective_mode\":{\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"from_address\":{\"type\":\"string\"},\"gate_outcome\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"intent_meta\":{\"additionalProperties\":true,\"type\":\"object\"},\"intent_summary\":{\"type\":\"string\"},\"kind\":{\"enum\":[\"send\",\"reply\",\"forward\"],\"type\":\"string\"},\"mode\":{\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"proposed_bcc\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"proposed_body_html\":{\"type\":\"string\"},\"proposed_body_text\":{\"type\":\"string\"},\"proposed_cc\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"proposed_subject\":{\"type\":\"string\"},\"proposed_to\":{\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"revision\":{\"type\":\"integer\"},\"send_error\":{\"description\":\"Vendor-scrubbed delivery failure, present on a failed review.\",\"type\":\"string\"},\"send_path\":{\"description\":\"How the message was released, once sent.\",\"enum\":[\"human_reviewed\",\"delegated_reviewed\",\"reviewer_approved\",\"graduated_auto\",\"agent_direct\"],\"type\":\"string\"},\"sent_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"sent_body_text\":{\"type\":\"string\"},\"sent_message_id\":{\"type\":\"string\"},\"sent_subject\":{\"type\":\"string\"},\"stale_reason\":{\"type\":\"string\"},\"state\":{\"enum\":[\"needs_review\",\"in_review\",\"chatting\",\"stale\",\"approved\",\"sent\",\"auto_sent\",\"rejected\",\"stalled\",\"cancelled\",\"failed\"],\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"version\":{\"type\":\"integer\"}},\"required\":[\"id\",\"state\",\"mode\",\"effective_mode\",\"kind\",\"revision\",\"version\"],\"type\":\"object\"},\"ReviewIntent\":{\"description\":\"The agent's \\\"for the human reviewer\\\" summary. `summary` is REQUIRED when the resolved mode is review (else the submit is 422).\\n\",\"properties\":{\"meta\":{\"description\":\"Structured intent payload.\",\"properties\":{\"goal\":{\"type\":\"string\"},\"prior_touches\":{\"type\":\"integer\"},\"recipient\":{\"type\":\"string\"},\"urgency\":{\"type\":\"string\"}},\"type\":\"object\"},\"summary\":{\"description\":\"Free-text intent summary (who/what/why).\",\"type\":\"string\"}},\"type\":\"object\"},\"ReviewLink\":{\"description\":\"A BYO review-agent link (rvl_…); the subscription that routes a reviewed draft to a linked review-agent (D5; §9). One link per scope: inbox_address set = that inbox, empty = account-wide (per-inbox overrides account-wide). The reviewer holds review:act, NEVER mailbox:send; on approve/edit the platform sends with the COMPOSER's creds (credential boundary). hmac_secret is write-only; reads return has_secret only. Opaque ids only (D10).\\n\",\"properties\":{\"active\":{\"type\":\"boolean\"},\"consec_failures\":{\"description\":\"Consecutive delivery failures; an unhealthy link is skipped by routing until recovery.\",\"type\":\"integer\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"escalate_after_s\":{\"description\":\"Seconds before the reviewer-liveness sweeper auto-escalates to the human (default 300).\",\"type\":\"integer\"},\"has_secret\":{\"description\":\"Whether an hmac signing secret is configured (the secret itself is never echoed).\",\"type\":\"boolean\"},\"id\":{\"description\":\"Opaque review-link id (rvl_…).\",\"type\":\"string\"},\"inbox_address\":{\"description\":\"Scope: a specific inbox; empty = account-wide.\",\"type\":\"string\"},\"max_hops\":{\"description\":\"Circuit breaker: max reviewer hand-backs before the next action is forced to the human (default 3).\",\"type\":\"integer\"},\"review_deadline_s\":{\"description\":\"Circuit breaker: hard per-review deadline in seconds (default 86400).\",\"type\":\"integer\"},\"reviewer_agent_id\":{\"description\":\"The linked reviewer agent (agt_…).\",\"type\":\"string\"},\"transport\":{\"enum\":[\"webhook\",\"sse\",\"websocket\"],\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"webhook_url\":{\"description\":\"Delivery URL (webhook transport only).\",\"type\":\"string\"}},\"required\":[\"id\",\"reviewer_agent_id\",\"transport\",\"escalate_after_s\",\"max_hops\",\"review_deadline_s\",\"active\",\"consec_failures\",\"has_secret\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"ReviewLinkList\":{\"properties\":{\"review_links\":{\"items\":{\"$ref\":\"#/components/schemas/ReviewLink\"},\"type\":\"array\"}},\"required\":[\"review_links\"],\"type\":\"object\"},\"ReviewPolicy\":{\"description\":\"The account-default review policy (D6) plus the effective floor an inbox with no override resolves to (require_review is the safe floor).\\n\",\"properties\":{\"effective\":{\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"type\":\"string\"},\"policy\":{\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"type\":\"string\"}},\"required\":[\"policy\",\"effective\"],\"type\":\"object\"},\"ReviewPolicyRequest\":{\"description\":\"Set the account-default review policy (D6). An invalid value is 400.\",\"properties\":{\"policy\":{\"enum\":[\"require_review\",\"allow_direct\",\"auto_send_graduated\"],\"type\":\"string\"}},\"required\":[\"policy\"],\"type\":\"object\"},\"ReviewTurn\":{\"description\":\"One immutable turn in a review's append-only thread (turn_…).\",\"properties\":{\"actor_id\":{\"type\":\"string\"},\"actor_kind\":{\"enum\":[\"agent\",\"human\",\"review_agent\",\"system\",\"connection\"],\"type\":\"string\"},\"body\":{\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"diff_json\":{\"additionalProperties\":true,\"type\":\"object\"},\"id\":{\"type\":\"string\"},\"metadata\":{\"additionalProperties\":true,\"type\":\"object\"},\"revision\":{\"type\":\"integer\"},\"seq\":{\"type\":\"integer\"},\"turn_type\":{\"enum\":[\"agent_draft\",\"agent_question\",\"agent_note\",\"human_comment\",\"human_question\",\"human_edit\",\"human_approve\",\"human_reject\",\"human_reconfirm\",\"system_diff\",\"state_change\",\"nudge\"],\"type\":\"string\"}},\"required\":[\"id\",\"seq\",\"turn_type\",\"actor_kind\",\"created_at\"],\"type\":\"object\"},\"RevokeSuppressionRequest\":{\"description\":\"Revoke (un-suppress) one org-scope row. The reason is REQUIRED and audit-logged.\\n\",\"properties\":{\"reason\":{\"description\":\"Why the suppression is being revoked (required, audit-logged).\",\"type\":\"string\"}},\"required\":[\"reason\"],\"type\":\"object\"},\"RiskDial\":{\"description\":\"The effective risk dial (Review Loop, agent plane; D4/D12): the account default plus every category's overrides (each with its resolved effective value). Read-only for agents; flipping the dial is a console (human) action (D16).\\n\",\"properties\":{\"account\":{\"$ref\":\"#/components/schemas/AccountRiskDial\"},\"categories\":{\"items\":{\"$ref\":\"#/components/schemas/CategoryRiskDial\"},\"type\":\"array\"}},\"required\":[\"account\",\"categories\"],\"type\":\"object\"},\"RiskDialRequest\":{\"description\":\"Set the account-default risk dial (console plane, D4). A nil field leaves that column unchanged.\\n\",\"properties\":{\"auto_send_cap_per_day\":{\"type\":\"integer\"},\"canary_rate\":{\"format\":\"double\",\"type\":\"number\"},\"drift_demote_after\":{\"type\":\"integer\"},\"first_contact_gate\":{\"type\":\"boolean\"},\"graduate_min_age_hours\":{\"type\":\"integer\"},\"graduate_min_approvals\":{\"type\":\"integer\"},\"min_confidence\":{\"format\":\"double\",\"type\":\"number\"}},\"type\":\"object\"},\"Rule\":{\"description\":\"A learned writing rule (rule_…) in the Review Loop (D2/D11). House-style/ general (scope='general', applies across all categories) or category-scoped. Append-only by supersession: an edit is a new rev (same lineage_id) with the prior flipped to superseded. Read by the agent at compose/redraft time via the ordered get_rules ladder; we never apply it. Opaque ids only (D10).\\n\",\"properties\":{\"author_kind\":{\"enum\":[\"agent\",\"human\",\"connection\"],\"type\":\"string\"},\"category_id\":{\"description\":\"Set iff scope=category (cat_…).\",\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque rule id (rule_…).\",\"type\":\"string\"},\"kind\":{\"description\":\"hard = non-overridable.\",\"enum\":[\"soft\",\"hard\"],\"type\":\"string\"},\"lineage_id\":{\"description\":\"Stable lineage handle across versions (rln_…).\",\"type\":\"string\"},\"org_id\":{\"description\":\"The org this rule belongs to.\",\"type\":\"string\"},\"priority\":{\"type\":\"integer\"},\"project_id\":{\"description\":\"The project this rule belongs to; empty for an org-layer rule.\",\"type\":\"string\"},\"rev\":{\"type\":\"integer\"},\"rule_layer\":{\"description\":\"Ownership layer (org/project model). `org` = house-style inherited by every project in the org; `project` = layered on top (the agent-plane default). Hard organization house rules remain mandatory across narrower scopes; the remaining rules follow the ordered precedence ladder.\\n\",\"enum\":[\"org\",\"project\"],\"type\":\"string\"},\"rule_text\":{\"type\":\"string\"},\"scope\":{\"description\":\"general = house-style (D2).\",\"enum\":[\"general\",\"category\"],\"type\":\"string\"},\"scope_agent_id\":{\"description\":\"Set for a per-agent override; empty = all org agents.\",\"type\":\"string\"},\"source_review_id\":{\"description\":\"Review containing the source feedback.\",\"type\":\"string\"},\"source_turn_id\":{\"description\":\"Immutable source feedback turn.\",\"type\":\"string\"},\"status\":{\"enum\":[\"proposed\",\"active\",\"superseded\",\"retired\"],\"type\":\"string\"},\"supersedes_id\":{\"description\":\"The prior rev this row superseded (rule_…).\",\"type\":\"string\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"}},\"required\":[\"id\",\"lineage_id\",\"rev\",\"scope\",\"rule_text\",\"kind\",\"priority\",\"status\",\"author_kind\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"RuleAuditEntry\":{\"description\":\"One append-only rule/category change \\u0026 undo audit row (udo_…). before_json / after_json carry the snapshot enabling an undo. undo = a later 'restore' entry; this row's undone flips true when it has been undone.\\n\",\"properties\":{\"action\":{\"enum\":[\"create\",\"supersede\",\"retire\",\"rename\",\"redescribe\",\"merge\",\"restore\"],\"type\":\"string\"},\"actor_id\":{\"type\":\"string\"},\"actor_kind\":{\"enum\":[\"agent\",\"human\",\"system\",\"connection\"],\"type\":\"string\"},\"after_json\":{\"description\":\"JSON snapshot of the new version.\",\"type\":\"string\"},\"before_json\":{\"description\":\"JSON snapshot of the prior version.\",\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"entity_id\":{\"description\":\"rule_… (lineage head) or cat_….\",\"type\":\"string\"},\"entity_kind\":{\"enum\":[\"rule\",\"category\"],\"type\":\"string\"},\"id\":{\"description\":\"Opaque audit id (udo_…).\",\"type\":\"string\"},\"undone\":{\"type\":\"boolean\"}},\"required\":[\"id\",\"entity_kind\",\"entity_id\",\"action\",\"actor_kind\",\"undone\",\"created_at\"],\"type\":\"object\"},\"RuleAuditPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/RuleAuditEntry\"},\"type\":\"array\"},\"next_cursor\":{\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"RulePage\":{\"description\":\"The ORDERED active rule set (the §7 precedence ladder applied SERVER-SIDE, capped). Category rules precede general/house-style rules; within each, highest precedence first. The agent reconciles the list semantically (NO LLM on our side).\\n\",\"properties\":{\"category_rules_version\":{\"type\":\"integer\"},\"composition_token\":{\"description\":\"Opaque short-lived proof of this exact effective rules snapshot. Omitted on filtered scope queries.\",\"type\":\"string\"},\"composition_token_expires_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"house_style_version\":{\"type\":\"integer\"},\"items\":{\"items\":{\"$ref\":\"#/components/schemas/Rule\"},\"type\":\"array\"},\"rule_high_water\":{\"type\":\"integer\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"ScanBacklogRequest\":{\"description\":\"The D19/§8 on-demand reconciliation sweep request (console). staleness_tolerance overrides the strict default (0 = must be at/above current); null = the default.\\n\",\"properties\":{\"staleness_tolerance\":{\"description\":\"How many rules-versions behind current a queued draft may be and still release.\",\"type\":\"integer\"}},\"type\":\"object\"},\"ScanBacklogStatus\":{\"description\":\"The D19/§8 backlog-reconciliation snapshot for a category (agent-readable, $0-LLM). Counts the QUEUED drafts that are stale vs current-enough against the current category rules-version + house-style version (a pure integer compare). Read-only; the agent READS the picture; the human / hooks TRIGGER the sweep.\\n\",\"properties\":{\"category_id\":{\"type\":\"string\"},\"current_category_rules_version\":{\"type\":\"integer\"},\"current_enough\":{\"description\":\"Of the queued, how many are within the staleness tolerance of the current rules-version.\",\"type\":\"integer\"},\"current_house_style_version\":{\"type\":\"integer\"},\"queued\":{\"description\":\"How many drafts are in the human queue (needs_review|in_review|chatting).\",\"type\":\"integer\"},\"stale\":{\"description\":\"Of the queued, how many were composed under older rules and need a redraft.\",\"type\":\"integer\"},\"staleness_tolerance\":{\"description\":\"How many versions behind current a draft may be and still count current-enough.\",\"type\":\"integer\"},\"state\":{\"enum\":[\"supervised\",\"auto_notify\",\"auto_silent\",\"probation\"],\"type\":\"string\"}},\"required\":[\"category_id\",\"state\",\"queued\",\"current_enough\",\"stale\",\"current_category_rules_version\",\"current_house_style_version\",\"staleness_tolerance\"],\"type\":\"object\"},\"SendRequest\":{\"properties\":{\"attachments\":{\"items\":{\"$ref\":\"#/components/schemas/AttachmentInput\"},\"type\":\"array\"},\"bcc\":{\"items\":{\"format\":\"email\",\"type\":\"string\"},\"type\":\"array\"},\"body\":{\"deprecated\":true,\"description\":\"DEPRECATED alias for `text`, kept accepted indefinitely so already-deployed callers keep working; it will never be removed. Send `text` in new code. Supplying BOTH with different content is a 400 (code bad_request, errors[].code conflicting_alias); the server never guesses which bytes to relay; supplying both with identical content is accepted.\\n\",\"type\":\"string\"},\"category_confidence\":{\"description\":\"Agent-supplied confidence (0..1) in the category match. Feeds the submit-time min_confidence auto-send gate ONLY; the server never scores ($0 LLM). Below the effective threshold (or omitted when a threshold is set) the would-be auto-send routes to needs_review (gate_outcome held:low_confidence).\\n\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"type\":\"number\"},\"category_id\":{\"description\":\"Opaque category id (cat_…) matched from the registry. Never a name.\",\"type\":\"string\"},\"cc\":{\"items\":{\"format\":\"email\",\"type\":\"string\"},\"type\":\"array\"},\"composition_token\":{\"description\":\"Opaque token from a fresh, unfiltered GET /v1/rules for this agent, project, and category.\",\"type\":\"string\"},\"headers\":{\"additionalProperties\":{\"type\":\"string\"},\"description\":\"Arbitrary custom headers (reserved/unsafe header names are dropped).\",\"type\":\"object\"},\"html\":{\"description\":\"Optional HTML body\",\"sent as an alternative alongside the plain-text part.\":null,\"type\":\"string\"},\"idempotency_key\":{\"deprecated\":true,\"description\":\"DEPRECATED body-level alias for the `Idempotency-Key` header, tolerated for @extrovert.dev/sdk \\u003c= 0.1.0 builds that serialize the whole request object. Send the header instead; when both are present the header wins. Note that the replay key is scoped to a hash of the RAW request body, so the same logical message retried once as `body` and once as `text` under one key is a body mismatch and answers 409 idempotency_conflict. Different bytes are a different request.\\n\",\"type\":\"string\"},\"in_reply_to\":{\"description\":\"Message-ID to thread under (optional).\",\"type\":\"string\"},\"intent\":{\"$ref\":\"#/components/schemas/ReviewIntent\"},\"mode\":{\"description\":\"Review Loop (HITL) per-send assertion. `review` (default) routes the message into the human-review queue; `direct` requests an immediate send. The authoritative account/inbox review policy may downgrade `direct` to `review`. Setting any of mode/intent/category_id opts the send into the Review Loop.\\n\",\"enum\":[\"review\",\"direct\"],\"type\":\"string\"},\"reply_to\":{\"description\":\"Override the Reply-To header.\",\"type\":\"string\"},\"subject\":{\"type\":\"string\"},\"text\":{\"description\":\"Plain-text body. This is the canonical name and matches ReplyRequest.text, ForwardRequest.text and Message.text.\\n\",\"type\":\"string\"},\"to\":{\"items\":{\"format\":\"email\",\"type\":\"string\"},\"minItems\":1,\"type\":\"array\"}},\"required\":[\"to\"],\"type\":\"object\"},\"SendResult\":{\"description\":\"The outcome of a reply or forward.\",\"properties\":{\"message_id\":{\"type\":\"string\"},\"review_id\":{\"description\":\"Opaque review id (rr_…) for the review row that governed this send. ADDITIVE. Every agent-plane send now creates one, so an agent that crashes after issuing the request can still call `GET /v1/reviews/{id}` and read `closed` / `sent_message_id` instead of guessing whether the message went out.\\n\",\"type\":\"string\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"nullable\":true,\"type\":\"string\"},\"submission_id\":{\"type\":\"string\"},\"thread_id\":{\"type\":\"string\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"}},\"type\":\"object\"},\"SentCopyStatus\":{\"description\":\"Whether the accepted message has a resolvable saved Sent copy. Archive failure never resends mail.\",\"enum\":[\"pending\",\"stored\",\"unavailable\"],\"type\":\"string\"},\"StatusResult\":{\"properties\":{\"message_id\":{\"description\":\"A stable identifier for the submitted message the sender can self-correlate on: the opaque msg_ id when the Sent append resolved, else the bracketed RFC5322 Message-ID header value. Present on the direct-send response; always non-empty when status is \\\"sent\\\".\\n\",\"type\":\"string\"},\"review_id\":{\"description\":\"Opaque review id (rr_…) for the review row that governed this send. ADDITIVE; see SendResult.review_id.\\n\",\"type\":\"string\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"nullable\":true,\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"submission_id\":{\"type\":\"string\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"}},\"type\":\"object\"},\"Submission\":{\"description\":\"Durable status of an accepted outbound submission. Reading this resource never sends mail.\",\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"inbox\":{\"format\":\"email\",\"type\":\"string\"},\"recipients\":{\"items\":{\"$ref\":\"#/components/schemas/SubmissionRecipient\"},\"type\":\"array\"},\"sent_copy_status\":{\"$ref\":\"#/components/schemas/SentCopyStatus\"},\"sent_message_id\":{\"description\":\"Resolvable msg_ selector\",\"nullable\":true,\"or null until a saved Sent copy is found.\":null,\"type\":\"string\"},\"submission_id\":{\"description\":\"Opaque submission handle returned by send or reply.\",\"type\":\"string\"},\"transport\":{\"$ref\":\"#/components/schemas/TransportCounts\"},\"updated_at\":{\"format\":\"date-time\",\"type\":\"string\"}},\"required\":[\"submission_id\",\"inbox\",\"sent_message_id\",\"sent_copy_status\",\"transport\",\"recipients\",\"created_at\",\"updated_at\"],\"type\":\"object\"},\"SubmissionRecipient\":{\"properties\":{\"recipient\":{\"format\":\"email\",\"type\":\"string\"},\"state\":{\"$ref\":\"#/components/schemas/SubmissionRecipientState\"}},\"required\":[\"recipient\",\"state\"],\"type\":\"object\"},\"SubmissionRecipientState\":{\"description\":\"accepted means accepted for onward delivery, not arrival in the recipient inbox. waiting_for_parent retries automatically when the earlier message's identity is ready. unknown is an uncertain outcome that needs reconciliation; do not resend it.\\n\",\"enum\":[\"queued\",\"waiting_for_parent\",\"transmitting\",\"accepted\",\"failed\",\"dependency_failed\",\"unknown\"],\"type\":\"string\"},\"Suppression\":{\"description\":\"One recipient opt-out (suppression) row visible to the caller's own org. Only org-scope rows are ever returned to the agent/console planes; global and shared_domain rows are operator-only. Rows soft-revoke (revoked_at/by/reason) rather than delete, so opt-out history outlives tenant lifecycle.\\n\",\"properties\":{\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"id\":{\"description\":\"Opaque suppression id (sup_…).\",\"type\":\"string\"},\"narrow_agent_id\":{\"description\":\"Set on a recipient-chosen 'just this sender' narrow row.\",\"type\":\"string\"},\"narrow_mailbox\":{\"type\":\"string\"},\"origin_agent_id\":{\"type\":\"string\"},\"origin_mailbox\":{\"description\":\"The sending mailbox that prompted the opt-out (audit).\",\"type\":\"string\"},\"origin_message_id\":{\"type\":\"string\"},\"reactivation_count\":{\"description\":\"Cumulative unsub→revoke→unsub cycles for this row (the §7 abuse input).\",\"type\":\"integer\"},\"recipient\":{\"description\":\"Canonicalized recipient address (NFC, punycode domain, lower-cased).\",\"type\":\"string\"},\"recipient_raw\":{\"description\":\"The address as originally received.\",\"type\":\"string\"},\"revoke_reason\":{\"type\":\"string\"},\"revoked\":{\"type\":\"boolean\"},\"revoked_at\":{\"description\":\"Set when the row was soft-revoked.\",\"format\":\"date-time\",\"type\":\"string\"},\"revoked_by\":{\"type\":\"string\"},\"scope\":{\"description\":\"Always 'org' on these planes (global/shared_domain are operator-only).\",\"enum\":[\"org\"],\"type\":\"string\"},\"source\":{\"enum\":[\"one_click\",\"page\",\"mailto\",\"reply_stop\",\"manual\",\"complaint\",\"escalation\"],\"type\":\"string\"}},\"required\":[\"id\",\"recipient\",\"scope\",\"source\",\"reactivation_count\",\"created_at\",\"revoked\"],\"type\":\"object\"},\"SuppressionPage\":{\"description\":\"The paged list of the caller's own org suppression rows (newest-first).\",\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/Suppression\"},\"type\":\"array\"},\"next_cursor\":{\"description\":\"Opaque cursor for the next page; absent on the last page.\",\"type\":\"string\"},\"total\":{\"type\":\"integer\"}},\"required\":[\"items\",\"total\"],\"type\":\"object\"},\"TransportCounts\":{\"description\":\"Per-recipient counts by transport state. Absent states have count zero.\",\"properties\":{\"accepted\":{\"minimum\":0,\"type\":\"integer\"},\"dependency_failed\":{\"minimum\":0,\"type\":\"integer\"},\"failed\":{\"minimum\":0,\"type\":\"integer\"},\"queued\":{\"minimum\":0,\"type\":\"integer\"},\"transmitting\":{\"minimum\":0,\"type\":\"integer\"},\"unknown\":{\"minimum\":0,\"type\":\"integer\"},\"waiting_for_parent\":{\"minimum\":0,\"type\":\"integer\"}},\"type\":\"object\"},\"UpdateCategoryRequest\":{\"description\":\"Rename / re-describe a category; metadata ONLY (D10). Either field may be omitted (unchanged).\",\"properties\":{\"description\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}},\"type\":\"object\"},\"UpdateMemberRoleRequest\":{\"description\":\"Change an existing member's role. Role-capped: the actor cannot grant a role above their own effective role. Demoting the org's last owner is refused (409).\\n\",\"properties\":{\"role\":{\"enum\":[\"owner\",\"admin\",\"member\",\"viewer\",\"billing\"],\"type\":\"string\"}},\"required\":[\"role\"],\"type\":\"object\"},\"UpdateWebhookRequest\":{\"description\":\"PATCH body for a webhook. Every field is optional; an omitted field leaves the stored value unchanged (PATCH semantics). The signing secret and id are immutable. `inbox` empty-string clears the per-inbox filter (covers all inboxes the agent owns).\\n\",\"properties\":{\"active\":{\"description\":\"Enable or disable delivery without deleting.\",\"type\":\"boolean\"},\"address\":{\"description\":\"Legacy alias for `inbox`.\",\"type\":\"string\"},\"event_types\":{\"description\":\"AgentMail-compatible alias for `events`.\",\"items\":{\"enum\":[\"message.received\"],\"example\":\"message.received\",\"type\":\"string\"},\"type\":\"array\"},\"events\":{\"items\":{\"enum\":[\"message.received\"],\"example\":\"message.received\",\"type\":\"string\"},\"type\":\"array\"},\"inbox\":{\"description\":\"Scope to one mailbox; empty string clears the filter.\",\"type\":\"string\"},\"url\":{\"format\":\"uri\",\"type\":\"string\"}},\"type\":\"object\"},\"Webhook\":{\"description\":\"A webhook registration. `secret` is present only on the create response (shown once); list/get redact it. The durable `resource_scope` defines the delivery boundary. `inbox` is an additional address filter; null removes that filter without widening selected stable inbox IDs. Registrations survive the creating connection's expiry and must be deleted separately.\\n\",\"properties\":{\"active\":{\"type\":\"boolean\"},\"agent_id\":{\"description\":\"Agent identity recorded at creation.\",\"type\":\"string\"},\"created_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"created_by_connection_id\":{\"description\":\"Creating connection ID when applicable.\",\"type\":\"string\"},\"events\":{\"items\":{\"enum\":[\"message.received\"],\"type\":\"string\"},\"type\":\"array\"},\"id\":{\"type\":\"string\"},\"inbox\":{\"nullable\":true,\"type\":\"string\"},\"inbox_ids\":{\"description\":\"Stable inbox IDs for an inboxes-scoped registration.\",\"items\":{\"type\":\"string\"},\"maxItems\":100,\"type\":\"array\"},\"resource_scope\":{\"description\":\"Agent-owned inboxes for legacy keys; stable selected inbox IDs, project, or organization for connections. Project and organization scopes include future inboxes.\",\"enum\":[\"agent\",\"inboxes\",\"project\",\"organization\"],\"type\":\"string\"},\"secret\":{\"description\":\"HMAC signing secret. Create response only.\",\"type\":\"string\"},\"secret_prefix\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"}},\"type\":\"object\"},\"WebhookPage\":{\"properties\":{\"items\":{\"items\":{\"$ref\":\"#/components/schemas/Webhook\"},\"type\":\"array\"},\"total\":{\"type\":\"integer\"}},\"type\":\"object\"}};\nexport interface AdministrativeDownload { content_type: string; content_base64: string; filename?: string }\nexport interface AdministrativeOperations {\n \"getConnectionAuthorization\": { input: { \"path\": { \"authorization_id\": string } }; output: Record<string, unknown> };\n \"approveConnectionAuthorization\": { input: { \"body\": AdministrativeSchemas[\"ConnectionConsent\"]; \"path\": { \"authorization_id\": string } }; output: AdministrativeSchemas[\"ConnectionConsentResult\"] };\n \"denyConnectionAuthorization\": { input: { \"path\": { \"authorization_id\": string } }; output: Record<string, unknown> };\n \"listConnections\": { input: { \"query\"?: { \"created_by_connection_id\"?: string; \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"ConnectionGrantList\"] };\n \"listConnectionCreatedCredentials\": { input: { \"path\": { \"connection_id\": string }; \"query\"?: { \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"ConnectionCreatedCredentialList\"] };\n \"revokeConnectionCreatedCredential\": { input: { \"path\": { \"connection_id\": string; \"credential_id\": string } }; output: void };\n \"createConnectionCredential\": { input: { \"body\": AdministrativeSchemas[\"ConnectionConsent\"]; \"path\": { \"connection_id\": string } }; output: { \"connection\": AdministrativeSchemas[\"ConnectionGrant\"]; \"credential\": string; \"resource\": string; [key: string]: unknown } };\n \"listConnectionEvents\": { input: { \"path\": { \"connection_id\": string }; \"query\"?: { \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"ConnectionEventList\"] };\n \"revokeConnection\": { input: { \"path\": { \"connection_id\": string } }; output: void };\n \"acceptInvitation\": { input: { \"body\": AdministrativeSchemas[\"AcceptInvitationRequest\"] }; output: AdministrativeSchemas[\"OrgInvitation\"] };\n \"adminMe\": { input: Record<string, unknown>; output: AdministrativeSchemas[\"AdminMe\"] };\n \"personalNotificationSettings\": { input: Record<string, unknown>; output: AdministrativeSchemas[\"PersonalNotificationSettings\"] };\n \"patchPersonalNotificationPreferences\": { input: { \"body\": AdministrativeSchemas[\"PersonalPreferencePatch\"] }; output: AdministrativeSchemas[\"PersonalPreferences\"] };\n \"personalNotificationHistory\": { input: { \"query\"?: { \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"PersonalNotificationHistory\"] };\n \"personalNotificationBatch\": { input: { \"path\": { \"batch_id\": string } }; output: AdministrativeSchemas[\"PersonalNotificationBatch\"] };\n \"personalPushDevices\": { input: Record<string, unknown>; output: { \"items\": Array<AdministrativeSchemas[\"PersonalPushDevice\"]>; [key: string]: unknown } };\n \"enrollPersonalPushDevice\": { input: { \"body\": AdministrativeSchemas[\"PersonalPushEnrollment\"] }; output: AdministrativeSchemas[\"PersonalPushDevice\"] };\n \"personalPushPublicKey\": { input: Record<string, unknown>; output: { \"account_id\"?: string; \"available\": boolean; \"public_key\": string; [key: string]: unknown } };\n \"testPersonalPushDevices\": { input: { \"body\": { \"device_ids\": Array<string> } }; output: { \"items\": Array<{ \"id\": string; \"label\": string; \"message\": string; \"status\": (\"accepted\" | \"failed\"); [key: string]: unknown }>; [key: string]: unknown } };\n \"patchPersonalPushDevice\": { input: { \"body\": AdministrativeSchemas[\"PersonalPushDevicePatch\"]; \"path\": { \"device_id\": string } }; output: AdministrativeSchemas[\"PersonalPushDevice\"] };\n \"removePersonalPushDevice\": { input: { \"path\": { \"device_id\": string } }; output: void };\n \"listOrgs\": { input: Record<string, unknown>; output: AdministrativeSchemas[\"OrgList\"] };\n \"createOrg\": { input: { \"body\": AdministrativeSchemas[\"CreateOrgRequest\"] }; output: AdministrativeSchemas[\"Org\"] };\n \"patchOrg\": { input: { \"body\": AdministrativeSchemas[\"PatchOrgRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"Org\"] };\n \"archiveOrg\": { input: { \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"Org\"] };\n \"adminGetBilling\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"month\"?: string } }; output: AdministrativeSchemas[\"AdminBilling\"] };\n \"adminCreateBillingCheckout\": { input: { \"body\": AdministrativeSchemas[\"CreateBillingCheckoutRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CreateBillingCheckoutResponse\"] };\n \"adminCreateDomainBillingCheckout\": { input: { \"body\": AdministrativeSchemas[\"CreateDomainBillingCheckoutRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CreateDomainBillingCheckoutResponse\"] };\n \"adminCreateBillingPortal\": { input: { \"body\": AdministrativeSchemas[\"CreateBillingPortalRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CreateBillingPortalResponse\"] };\n \"adminListCommerceRequests\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"kind\"?: string; \"limit\"?: number; \"page\"?: string; \"state\"?: string } }; output: AdministrativeSchemas[\"CommerceRequestPage\"] };\n \"adminCreateDomainPurchaseRequest\": { input: { \"body\": AdministrativeSchemas[\"CreateDomainPurchaseRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminCreatePlanChangeRequest\": { input: { \"body\": AdministrativeSchemas[\"CreatePlanChangeRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminGetCommerceRequest\": { input: { \"path\": { \"org_id\": string; \"request_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminApproveCommerceRequest\": { input: { \"body\": AdministrativeSchemas[\"DecideCommerceRequest\"]; \"path\": { \"org_id\": string; \"request_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminCancelCommerceRequest\": { input: { \"path\": { \"org_id\": string; \"request_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminDenyCommerceRequest\": { input: { \"body\": AdministrativeSchemas[\"DecideCommerceRequest\"]; \"path\": { \"org_id\": string; \"request_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminGetCommercePaymentLink\": { input: { \"path\": { \"org_id\": string; \"request_id\": string } }; output: { \"expires_at\"?: string; \"url\"?: string; [key: string]: unknown } };\n \"adminRetryCommerceRequest\": { input: { \"path\": { \"org_id\": string; \"request_id\": string } }; output: AdministrativeSchemas[\"CommerceRequest\"] };\n \"adminListCommerceSpendLimits\": { input: { \"path\": { \"org_id\": string } }; output: { \"items\"?: Array<AdministrativeSchemas[\"CommerceSpendLimit\"]>; \"total\"?: number; [key: string]: unknown } };\n \"adminCreateCommerceSpendLimit\": { input: { \"body\": AdministrativeSchemas[\"CommerceSpendLimitInput\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"CommerceSpendLimit\"] };\n \"adminUpdateCommerceSpendLimit\": { input: { \"body\": AdministrativeSchemas[\"CommerceSpendLimitInput\"]; \"path\": { \"limit_id\": string; \"org_id\": string } }; output: AdministrativeSchemas[\"CommerceSpendLimit\"] };\n \"adminDeleteCommerceSpendLimit\": { input: { \"path\": { \"limit_id\": string; \"org_id\": string } }; output: void };\n \"adminListDomains\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"DomainList\"] };\n \"adminOnboardDomain\": { input: { \"body\": AdministrativeSchemas[\"OnboardDomainRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"OnboardDomainResult\"] };\n \"adminGetDomain\": { input: { \"path\": { \"domain\": string; \"org_id\": string } }; output: AdministrativeSchemas[\"OnboardDomainResult\"] };\n \"adminVerifyDomain\": { input: { \"path\": { \"domain\": string; \"org_id\": string } }; output: AdministrativeSchemas[\"OnboardDomainResult\"] };\n \"createInvitation\": { input: { \"body\": AdministrativeSchemas[\"CreateInvitationRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"OrgInvitation\"] };\n \"revokeInvitation\": { input: { \"path\": { \"invitation_id\": string; \"org_id\": string } }; output: AdministrativeSchemas[\"OrgInvitation\"] };\n \"listMembers\": { input: { \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"OrgMemberList\"] };\n \"updateMemberRole\": { input: { \"body\": AdministrativeSchemas[\"UpdateMemberRoleRequest\"]; \"path\": { \"org_id\": string; \"user_id\": string } }; output: AdministrativeSchemas[\"OrgMember\"] };\n \"removeMember\": { input: { \"path\": { \"org_id\": string; \"user_id\": string } }; output: void };\n \"listProjects\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"include_archived\"?: boolean } }; output: AdministrativeSchemas[\"ProjectList\"] };\n \"createProject\": { input: { \"body\": AdministrativeSchemas[\"CreateProjectRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"Project\"] };\n \"patchProject\": { input: { \"body\": AdministrativeSchemas[\"PatchProjectRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Project\"] };\n \"archiveProject\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Project\"] };\n \"listAgentKeys\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"agent_id\"?: string; \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"AgentKeyList\"] };\n \"issueAgentKey\": { input: { \"body\"?: AdministrativeSchemas[\"IssueAgentKeyRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"IssueAgentKeyResult\"] };\n \"revokeAgentKey\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: void };\n \"listAgents\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"AgentList\"] };\n \"createAgent\": { input: { \"body\": AdministrativeSchemas[\"CreateAgentRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AgentSummary\"] };\n \"disableAgent\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AgentStatusResult\"] };\n \"enableAgent\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AgentStatusResult\"] };\n \"listAuditEvents\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"AuditList\"] };\n \"adminListCategories\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"limit\"?: number; \"match\"?: string; \"page\"?: string; \"sort\"?: (\"popular\" | \"messages_7d\" | \"messages_90d\" | \"last_used\" | \"pending_reviews\" | \"name\") } }; output: AdministrativeSchemas[\"CategoryPage\"] };\n \"adminCreateCategory\": { input: { \"body\": AdministrativeSchemas[\"AdminCreateCategoryRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminGetCategory\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminUpdateCategory\": { input: { \"body\": AdministrativeSchemas[\"UpdateCategoryRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminDeleteCategory\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"DeleteCategoryResult\"] };\n \"adminGetBacklogStatus\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ScanBacklogStatus\"] };\n \"adminDemoteCategory\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminGraduateCategory\": { input: { \"body\": AdministrativeSchemas[\"GraduateCategoryRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminGetGraduationStatus\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"GraduationStatus\"] };\n \"adminMergeCategory\": { input: { \"body\": AdministrativeSchemas[\"MergeCategoryRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"MergeCategoryResult\"] };\n \"adminSetNeverGraduate\": { input: { \"body\": AdministrativeSchemas[\"NeverGraduateRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Category\"] };\n \"adminGetPacingState\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"CategoryPacingState\"] };\n \"adminUpdateCategoryRiskDial\": { input: { \"body\": AdministrativeSchemas[\"CategoryRiskDialRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"CategoryRiskDial\"] };\n \"adminScanBacklog\": { input: { \"body\"?: AdministrativeSchemas[\"ScanBacklogRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ReconcileResult\"] };\n \"listEnrollmentTokens\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"include_revoked\"?: boolean; \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"EnrollmentTokenList\"] };\n \"issueEnrollmentToken\": { input: { \"body\"?: AdministrativeSchemas[\"IssueEnrollmentTokenRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"IssueEnrollmentTokenResult\"] };\n \"revokeEnrollmentToken\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: void };\n \"adminListInboxes\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"limit\"?: number; \"page\"?: string } }; output: AdministrativeSchemas[\"AdminInboxList\"] };\n \"adminCreateInbox\": { input: { \"body\": AdministrativeSchemas[\"AdminCreateInboxRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminInbox\"] };\n \"adminUpdateInbox\": { input: { \"body\": AdministrativeSchemas[\"AdminUpdateInboxRequest\"]; \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminInbox\"] };\n \"adminDeleteInbox\": { input: { \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string } }; output: void };\n \"adminListMessages\": { input: { \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string }; \"query\"?: { \"folder\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"AdminMessageList\"] };\n \"adminGetMessage\": { input: { \"path\": { \"addr\": string; \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminMessageDetail\"] };\n \"adminListAttachments\": { input: { \"path\": { \"addr\": string; \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AttachmentPage\"] };\n \"adminGetAttachment\": { input: { \"path\": { \"addr\": string; \"attId\": string; \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeDownload };\n \"adminReplyMessage\": { input: { \"body\": AdministrativeSchemas[\"ReplyRequest\"]; \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"SendResult\"] };\n \"adminUpdateInboxReviewPolicy\": { input: { \"body\": AdministrativeSchemas[\"InboxReviewPolicyRequest\"]; \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"InboxReviewPolicy\"] };\n \"adminSendMessage\": { input: { \"body\": AdministrativeSchemas[\"SendRequest\"]; \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"StatusResult\"] };\n \"adminGetSubmission\": { input: { \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string; \"submission_id\": string } }; output: AdministrativeSchemas[\"Submission\"] };\n \"adminListInboxThreads\": { input: { \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string }; \"query\"?: { \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"AdminThreadList\"] };\n \"adminGetInboxThread\": { input: { \"path\": { \"addr\": string; \"org_id\": string; \"project_id\": string; \"thread_id\": string } }; output: AdministrativeSchemas[\"AdminThreadDetail\"] };\n \"adminMintRealtimeTicket\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"RealtimeTicket\"] };\n \"adminListReviewLinks\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ReviewLinkList\"] };\n \"adminCreateReviewLink\": { input: { \"body\": AdministrativeSchemas[\"CreateReviewLinkRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ReviewLink\"] };\n \"adminDeleteReviewLink\": { input: { \"path\": { \"org_id\": string; \"project_id\": string; \"rvl_id\": string } }; output: AdministrativeSchemas[\"DeleteReviewLinkResult\"] };\n \"adminGetReviewPolicy\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ReviewPolicy\"] };\n \"adminUpdateReviewPolicy\": { input: { \"body\": AdministrativeSchemas[\"ReviewPolicyRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"ReviewPolicy\"] };\n \"adminListReviews\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"category_id\"?: string; \"inbox\"?: string; \"limit\"?: number; \"page\"?: string; \"state\"?: string } }; output: AdministrativeSchemas[\"AdminReviewPage\"] };\n \"adminGetReview\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminReviewDetail\"] };\n \"adminApproveReview\": { input: { \"body\": AdministrativeSchemas[\"AdminReviewAction\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminReviewSendResult\"] };\n \"adminReviewChat\": { input: { \"body\": AdministrativeSchemas[\"AdminReviewChatRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: { \"review_id\"?: string; \"state\"?: string; \"status\"?: string; [key: string]: unknown } };\n \"adminEditSendReview\": { input: { \"body\": AdministrativeSchemas[\"AdminReviewAction\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminReviewSendResult\"] };\n \"undoLearnedReviewRule\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string; \"udo_id\": string } }; output: AdministrativeSchemas[\"Rule\"] };\n \"adminRejectReview\": { input: { \"body\": AdministrativeSchemas[\"AdminReviewAction\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AdminReviewRejectResult\"] };\n \"adminGetRiskDial\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"RiskDial\"] };\n \"adminUpdateRiskDial\": { input: { \"body\": AdministrativeSchemas[\"RiskDialRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"AccountRiskDial\"] };\n \"adminGetRules\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"category_id\"?: string; \"scope\"?: (\"general\" | \"category\") } }; output: AdministrativeSchemas[\"RulePage\"] };\n \"adminSaveProjectRule\": { input: { \"body\": AdministrativeSchemas[\"AdminSaveProjectRuleRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Rule\"] };\n \"adminGetRuleAudit\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"entity_id\"?: string; \"entity_kind\"?: (\"rule\" | \"category\") } }; output: AdministrativeSchemas[\"RuleAuditPage\"] };\n \"adminUndoRuleChange\": { input: { \"path\": { \"org_id\": string; \"project_id\": string; \"udo_id\": string } }; output: AdministrativeSchemas[\"Rule\"] };\n \"adminPromoteProjectRule\": { input: { \"body\": AdministrativeSchemas[\"PromoteRuleRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Rule\"] };\n \"adminRetireProjectRule\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Rule\"] };\n \"listSharedInboxThreads\": { input: { \"path\": { \"org_id\": string; \"project_id\": string }; \"query\"?: { \"cursor\"?: string; \"limit\"?: number } }; output: AdministrativeSchemas[\"AdminUnifiedThreadFeed\"] };\n \"adminListWebhooks\": { input: { \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"WebhookPage\"] };\n \"adminRegisterWebhook\": { input: { \"body\": AdministrativeSchemas[\"AdminRegisterWebhookRequest\"]; \"path\": { \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Webhook\"] };\n \"adminGetWebhook\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Webhook\"] };\n \"adminUpdateWebhook\": { input: { \"body\": AdministrativeSchemas[\"UpdateWebhookRequest\"]; \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: AdministrativeSchemas[\"Webhook\"] };\n \"adminDeleteWebhook\": { input: { \"path\": { \"id\": string; \"org_id\": string; \"project_id\": string } }; output: void };\n \"adminGetReputation\": { input: { \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"ReputationRollup\"] };\n \"adminListReputationFindings\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"cursor\"?: string; \"domain\"?: string; \"limit\"?: number; \"sender\"?: string; \"severity\"?: (\"low\" | \"high\" | \"unknown\"); \"status\"?: (\"open\" | \"resolved\") } }; output: AdministrativeSchemas[\"ReputationFindingsPage\"] };\n \"getOrgSettings\": { input: { \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"OrgSettings\"] };\n \"updateOrgSettings\": { input: { \"body\": AdministrativeSchemas[\"PatchOrgSettingsRequest\"]; \"path\": { \"org_id\": string } }; output: AdministrativeSchemas[\"OrgSettings\"] };\n \"adminListSuppressions\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"cursor\"?: string; \"include_revoked\"?: boolean; \"limit\"?: number; \"recipient\"?: string; \"scope\"?: (\"org\") } }; output: AdministrativeSchemas[\"SuppressionPage\"] };\n \"adminExportSuppressions\": { input: { \"path\": { \"org_id\": string }; \"query\"?: { \"include_revoked\"?: boolean; \"recipient\"?: string; \"scope\"?: (\"org\") } }; output: AdministrativeDownload };\n \"adminRevokeSuppression\": { input: { \"body\": AdministrativeSchemas[\"RevokeSuppressionRequest\"]; \"path\": { \"id\": string; \"org_id\": string } }; output: AdministrativeSchemas[\"Suppression\"] };\n \"acceptSignupClaim\": { input: { \"path\": { \"claim_id\": string } }; output: AdministrativeSchemas[\"OrgInvitation\"] };\n}\nexport interface AdministrativeSchemas {\n \"AcceptInvitationRequest\": { \"token\": string; [key: string]: unknown };\n \"AccountRiskDial\": { \"auto_send_cap_per_day\": number; \"canary_rate\": number; \"drift_demote_after\": number; \"first_contact_gate\": boolean; \"graduate_min_age_hours\": number; \"graduate_min_approvals\": number; \"min_confidence\": number; [key: string]: unknown };\n \"AdminBilling\": { \"billing_owner_id\": string; \"customer_id\": string; \"entitlements\": AdministrativeSchemas[\"AdminBillingPlan\"]; \"org_id\": string; \"plan_tier\": (\"free\" | \"developer\" | \"startup\" | \"enterprise\"); \"plans\": Array<AdministrativeSchemas[\"AdminBillingPlan\"]>; \"stripe_configured\": boolean; \"stripe_mode\": (\"test\" | \"live\"); \"subscription\"?: AdministrativeSchemas[\"AdminBillingSubscription\"]; \"usage\": AdministrativeSchemas[\"AdminBillingUsage\"]; [key: string]: unknown };\n \"AdminBillingPlan\": { \"checkout_available\"?: boolean; \"custom\"?: boolean; \"custom_domain_limit\": number; \"daily_message_cap\"?: number; \"domain_annual_com_reference_cents\": number; \"inbox_limit\": number; \"included_messages_monthly\": number; \"member_limit\": number; \"monthly_price_cents\": number; \"name\": string; \"pod_limit\": number; \"storage_bytes\": number; \"tier\": (\"free\" | \"developer\" | \"startup\" | \"enterprise\"); \"webhook_limit\": number; [key: string]: unknown };\n \"AdminBillingSubscription\": { \"cancel_at_period_end\": boolean; \"current_period_end\"?: string; \"current_period_start\"?: string; \"customer_id\": string; \"org_id\": string; \"plan_tier\": (\"free\" | \"developer\" | \"startup\" | \"enterprise\"); \"status\": string; \"stripe_customer_id\"?: string; \"stripe_price_id\"?: string; \"stripe_subscription_id\"?: string; \"stripe_subscription_item_id\"?: string; [key: string]: unknown };\n \"AdminBillingUsage\": { \"billing_owner_id\": string; \"customer_id\": string; \"message_quota_exceeded\": boolean; \"message_quota_limit\": number; \"message_quota_remaining\": number; \"month\": string; \"received_messages\": number; \"received_recipients\": number; \"sent_messages\": number; \"sent_recipients\": number; \"storage_bytes\": number; \"storage_captured_at\"?: string; \"storage_included_bytes\": number; \"storage_mailbox_count\": number; \"storage_over_limit_bytes\": number; \"storage_peak_over_limit_bytes\": number; \"storage_peak_used_bytes\": number; \"storage_quota_exceeded\": boolean; \"storage_used_bytes\": number; \"total_messages\": number; [key: string]: unknown };\n \"AdminCreateCategoryRequest\": { \"description\"?: string; \"name\": string; \"scope\"?: (\"org_shared\" | \"agent_private\"); [key: string]: unknown };\n \"AdminCreateInboxRequest\": { \"agent_id\": string; \"display_name\"?: string; \"domain\"?: string; \"domain_id\"?: string; \"username\"?: string; \"webhook_url\"?: string; [key: string]: unknown };\n \"AdminIdentity\": { \"clerk_user_id\"?: string; \"email\"?: string; [key: string]: unknown };\n \"AdminInbox\": { \"address\"?: string; \"agent_id\"?: string; \"created_at\"?: string; \"daily_send_cap\"?: number; \"daily_send_used\"?: number; \"direct_smtp_enabled\"?: boolean; \"domain\"?: string; \"id\"?: string; \"webhook_url\"?: string; [key: string]: unknown };\n \"AdminInboxList\": { \"inboxes\"?: Array<AdministrativeSchemas[\"AdminInbox\"]>; \"next_page\"?: string; [key: string]: unknown };\n \"AdminMe\": { \"active_org_hint\"?: string; \"active_project_hint\"?: string; \"identity\": AdministrativeSchemas[\"AdminIdentity\"]; \"last_project_by_org\": Record<string, unknown>; \"pending_signup_claims\": Array<AdministrativeSchemas[\"PendingSignupClaim\"]>; \"projects_by_org\": Record<string, unknown>; \"reachable_orgs\": Array<AdministrativeSchemas[\"AdminReachableOrg\"]>; [key: string]: unknown };\n \"AdminMessage\": { \"body\"?: string; \"cc\"?: string; \"date\"?: string; \"direction\"?: (\"inbound\" | \"outbound\"); \"extracted_html\"?: string; \"extracted_text\"?: string; \"from\"?: string; \"has_attachments\"?: boolean; \"html\"?: string; \"id\"?: string; \"in_reply_to\"?: string; \"message_id\"?: string; \"references\"?: string; \"reply_to\"?: string; \"seen\"?: boolean; \"sent_copy_status\"?: AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\"?: string | null; \"seq\"?: string; \"subject\"?: string; \"submission_id\"?: string; \"text\"?: string; \"thread_id\"?: string; \"to\"?: string; \"transport\"?: AdministrativeSchemas[\"TransportCounts\"]; [key: string]: unknown };\n \"AdminMessageDetail\": (AdministrativeSchemas[\"Message\"] & { \"attachments\"?: Array<AdministrativeSchemas[\"Attachment\"]>; [key: string]: unknown });\n \"AdminMessageList\": { \"messages\"?: Array<AdministrativeSchemas[\"AdminMessage\"]>; [key: string]: unknown };\n \"AdminOrgLimits\": { \"max_child_orgs\"?: number; \"max_projects\"?: number; [key: string]: unknown };\n \"AdminReachableOrg\": { \"breadcrumb\": Array<string>; \"customer_id\": string; \"depth\": number; \"display_name\": string; \"id\": string; \"limits\": AdministrativeSchemas[\"AdminOrgLimits\"]; \"parent_org_id\"?: string | null; \"plan_tier\": string; \"role\": (\"owner\" | \"admin\" | \"member\" | \"viewer\" | \"billing\"); \"root_org_id\": string; \"source\": (\"direct\" | \"inherited\" | \"msp_grant\"); [key: string]: unknown };\n \"AdminRegisterWebhookRequest\": (AdministrativeSchemas[\"RegisterWebhookRequest\"] & { \"agent_id\": string; [key: string]: unknown });\n \"AdminReviewAction\": { \"body\"?: string; \"feedback\"?: string; \"revision\": number; \"subject\"?: string; \"version\": number; [key: string]: unknown };\n \"AdminReviewChatRequest\": { \"text\": string; [key: string]: unknown };\n \"AdminReviewDetail\": { \"review\": AdministrativeSchemas[\"Review\"]; \"turns\": Array<AdministrativeSchemas[\"ReviewTurn\"]>; [key: string]: unknown };\n \"AdminReviewListItem\": { \"agent_id\"?: string; \"category_id\"?: string; \"created_at\"?: string; \"effective_mode\": (\"review\" | \"direct\"); \"escalation_reason\"?: string; \"from_address\"?: string; \"gate_outcome\"?: string; \"hop_count\"?: number; \"id\": string; \"intent_summary\"?: string; \"kind\": (\"send\" | \"reply\" | \"forward\"); \"mode\": (\"review\" | \"direct\"); \"revision\": number; \"snippet\"?: string; \"stale_reason\"?: string; \"state\": (\"needs_review\" | \"in_review\" | \"chatting\" | \"stale\" | \"approved\" | \"sent\" | \"auto_sent\" | \"rejected\" | \"stalled\" | \"cancelled\" | \"failed\"); \"subject\"?: string; \"updated_at\"?: string; \"version\": number; [key: string]: unknown };\n \"AdminReviewPage\": { \"items\": Array<AdministrativeSchemas[\"AdminReviewListItem\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"AdminReviewRejectResult\": { \"review_id\": string; \"state\": string; \"status\": string; [key: string]: unknown };\n \"AdminReviewSendResult\": { \"message_id\": string; \"review_id\": string; \"sent_copy_status\"?: AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\"?: string | null; \"state\": string; \"status\": string; \"submission_id\"?: string; \"thread_id\"?: string; \"transport\"?: AdministrativeSchemas[\"TransportCounts\"]; [key: string]: unknown };\n \"AdminSaveProjectRuleRequest\": { \"category_id\"?: string; \"kind\"?: (\"soft\" | \"hard\"); \"priority\"?: number; \"propagate_to_pending\"?: boolean; \"rule_text\": string; \"scope\"?: (\"general\" | \"category\"); \"suggested_batch\"?: number; \"supersedes_id\"?: string; [key: string]: unknown };\n \"AdminThreadDetail\": { \"last_message_at\"?: string; \"last_message_id\"?: string; \"message_count\"?: number; \"messages\"?: Array<AdministrativeSchemas[\"AdminMessage\"]>; \"participants\"?: Array<string>; \"snippet\"?: string; \"subject\"?: string; \"thread_id\"?: string; \"unread\"?: boolean; [key: string]: unknown };\n \"AdminThreadList\": { \"next_cursor\"?: string; \"threads\"?: Array<AdministrativeSchemas[\"AdminUnifiedThread\"]>; \"total\"?: number; [key: string]: unknown };\n \"AdminUnifiedThread\": { \"id\"?: string; \"inbox\"?: string; \"last_message_at\"?: string; \"last_message_has_attachments\"?: boolean; \"last_message_id\"?: string; \"message_count\"?: number; \"participants\"?: Array<string>; \"snippet\"?: string; \"subject\"?: string; \"unread\"?: boolean; [key: string]: unknown };\n \"AdminUnifiedThreadFeed\": { \"failed_inboxes\"?: Array<string>; \"inbox_count\"?: number; \"next_cursor\"?: string; \"partial_failure\"?: boolean; \"threads\"?: Array<AdministrativeSchemas[\"AdminUnifiedThread\"]>; \"total\"?: number; [key: string]: unknown };\n \"AdminUpdateInboxRequest\": { \"daily_send_limit\"?: number; \"direct_smtp_enabled\"?: boolean };\n \"AgentKeyList\": { \"keys\"?: Array<AdministrativeSchemas[\"AgentKeySummary\"]>; \"next_page\"?: string; [key: string]: unknown };\n \"AgentKeySummary\": { \"agent_handle\"?: string; \"agent_id\"?: string; \"agent_name\"?: string; \"ceiling_inbox_id\"?: string; \"created_at\"?: string; \"enrollment_token_id\"?: string; \"expires_at\"?: string; \"id\"?: string; \"key_tier\"?: (\"org\" | \"project\" | \"inbox\"); \"last_used_at\"?: string; \"prefix\"?: string; \"revoked\"?: boolean; \"scopes\"?: Array<string>; [key: string]: unknown };\n \"AgentList\": { \"agents\"?: Array<AdministrativeSchemas[\"AgentSummary\"]>; \"next_page\"?: string; [key: string]: unknown };\n \"AgentStatusResult\": { \"agent_id\"?: string; \"status\"?: (\"active\" | \"disabled\"); [key: string]: unknown };\n \"AgentSummary\": { \"created_at\"?: string; \"handle\"?: string; \"id\"?: string; \"last_seen_at\"?: string | null; \"mailbox_count\"?: number; \"name\"?: string; \"status\"?: (\"active\" | \"disabled\"); [key: string]: unknown };\n \"Attachment\": { \"content_type\"?: string; \"filename\"?: string; \"id\"?: string; \"size\"?: number; [key: string]: unknown };\n \"AttachmentInput\": { \"content_base64\": string; \"content_type\"?: string; \"filename\"?: string; [key: string]: unknown };\n \"AttachmentPage\": { \"items\"?: Array<AdministrativeSchemas[\"Attachment\"]>; \"total\"?: number; [key: string]: unknown };\n \"AuditEvent\": { \"action\"?: string; \"actor\"?: string; \"created_at\"?: string; \"id\"?: string; \"metadata\"?: Record<string, unknown>; \"severity\"?: (\"info\" | \"warn\" | \"error\"); \"target\"?: string; [key: string]: unknown };\n \"AuditList\": { \"events\"?: Array<AdministrativeSchemas[\"AuditEvent\"]>; \"next_page\"?: string; [key: string]: unknown };\n \"Category\": { \"author_kind\": (\"agent\" | \"human\" | \"connection\"); \"clean_approval_count\"?: number; \"created_at\"?: string; \"created_by_agent_id\"?: string; \"description\": string; \"drift_count\"?: number; \"graduated_at\"?: string; \"graduated_by\"?: string; \"id\": string; \"last_used_at\"?: string; \"merged_into\"?: string; \"message_count_30d\"?: number; \"message_count_7d\"?: number; \"message_count_90d\"?: number; \"name\": string; \"never_graduate\"?: boolean; \"pending_review_count\"?: number; \"rule_high_water\": number; \"rules_version\": number; \"scope\": (\"org_shared\" | \"agent_private\"); \"state\": (\"supervised\" | \"auto_notify\" | \"auto_silent\"); \"updated_at\"?: string; [key: string]: unknown };\n \"CategoryPacingState\": { \"category_id\": string; \"cursor_advanced_count\": number; \"cursor_review_id\"?: string; \"in_window\": number; \"items\": Array<AdministrativeSchemas[\"PacingItem\"]>; \"lookahead_window\": number; \"nudge_min_interval_ms\": number; \"queued\": number; \"redrafting\": number; \"rework_batch_max\": number; [key: string]: unknown };\n \"CategoryPage\": { \"items\": Array<AdministrativeSchemas[\"Category\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"CategoryRiskDial\": { \"canary_rate\"?: number | null; \"category_id\": string; \"drift_demote_after\"?: number | null; \"effective\": AdministrativeSchemas[\"EffectiveRiskDial\"]; \"first_contact_gate\"?: boolean | null; \"graduate_min_age_hours\"?: number | null; \"graduate_min_approvals\"?: number | null; \"min_confidence\"?: number | null; [key: string]: unknown };\n \"CategoryRiskDialRequest\": { \"canary_rate\"?: number | null; \"drift_demote_after\"?: number | null; \"first_contact_gate\"?: boolean | null; \"graduate_min_age_hours\"?: number | null; \"graduate_min_approvals\"?: number | null; \"min_confidence\"?: number | null; [key: string]: unknown };\n \"CommerceBlocker\": { \"code\": string; \"limit_cents\"?: number; \"limit_count\"?: number; \"limit_id\"?: string; \"manage_url\"?: string; \"message\": string; \"requested_cents\"?: number; \"reserved_cents\"?: number; \"reserved_count\"?: number; \"reset_at\"?: string; \"scope\"?: string; \"used_cents\"?: number; \"used_count\"?: number; [key: string]: unknown };\n \"CommerceRequest\": { \"agent_id\"?: string; \"agent_next_action\": string; \"approval_url\"?: string; \"approved_max_cents\"?: number; \"auto_renew\": boolean; \"blocker_code\"?: string; \"blockers\": Array<AdministrativeSchemas[\"CommerceBlocker\"]>; \"created_at\": string; \"currency\": string; \"current_plan\"?: string; \"domain\"?: string; \"domain_scope\"?: (\"org\" | \"project\"); \"effective_at\"?: string; \"external_job_id\"?: string; \"id\": string; \"kind\": (\"domain_purchase\" | \"plan_change\"); \"notification_last_error\"?: string; \"notification_state\"?: string; \"object\": (\"commerce_request\"); \"payment_action_url\"?: string; \"poll_after_seconds\": number; \"project_id\"?: string; \"quote_cents\": number; \"quote_expires_at\"?: string; \"rationale\"?: string; \"renewal_cents\": number; \"required_plan\"?: string; \"required_plan_price_cents\"?: number; \"retry_safe\": boolean; \"state\": string; \"target_plan\"?: string; \"updated_at\": string; \"version\": number; [key: string]: unknown };\n \"CommerceRequestPage\": { \"items\": Array<AdministrativeSchemas[\"CommerceRequest\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"CommerceSpendLimit\": (AdministrativeSchemas[\"CommerceSpendLimitInput\"] & { \"created_at\": string; \"id\": string; \"org_id\": string; \"period_end\"?: string; \"period_start\": string; \"purchased_count\": number; \"reserved_cents\": number; \"reserved_count\": number; \"spent_cents\": number; \"updated_at\": string; \"version\": number; [key: string]: unknown });\n \"CommerceSpendLimitInput\": { \"active\"?: boolean; \"agent_id\"?: string; \"allow_premium\": boolean; \"allowed_tlds\"?: Array<string>; \"budget_cents\": number; \"budget_enabled\": boolean; \"cadence\": (\"does_not_repeat\" | \"weekly\" | \"monthly\" | \"quarterly\" | \"annually\"); \"currency\"?: string; \"domain_count_enabled\": boolean; \"domain_count_limit\": number; \"expected_version\"?: number; \"expires_at\"?: string; \"name\": string; \"per_purchase_enabled\": boolean; \"per_purchase_max_cents\": number; \"project_id\"?: string; \"scope\": (\"org\" | \"project\" | \"agent\"); [key: string]: unknown };\n \"ConnectionConsent\": { \"agent_id\"?: string; \"agent_org_id\"?: string; \"duration\"?: (\"24h\" | \"until_revoked\"); \"full_control_confirmed\"?: boolean; \"identity\": (\"personal_assistant\" | \"dedicated_agent\"); \"inbox_ids\"?: Array<string>; \"name\": string; \"org_id\"?: string; \"project_id\"?: string; \"reach\": (\"inboxes\" | \"project\" | \"organization\" | \"full_account\"); \"scopes\": Array<string>; [key: string]: unknown };\n \"ConnectionConsentResult\": { \"connection\"?: AdministrativeSchemas[\"ConnectionGrant\"]; \"redirect_url\"?: string; [key: string]: unknown };\n \"ConnectionCreatedCredential\": { \"agent_id\"?: string; \"authorizer_id\": string; \"consumed\": boolean; \"created_at_ms\": number; \"created_by_connection_id\": string; \"created_via_enrollment_id\"?: string; \"expires_at_ms\": number; \"id\": string; \"kind\": (\"agent_key\" | \"enrollment_token\"); \"name\": string; \"org_id\": string; \"project_id\": string; \"revoked\": boolean; \"scopes\": Array<string>; [key: string]: unknown };\n \"ConnectionCreatedCredentialList\": { \"data\": Array<AdministrativeSchemas[\"ConnectionCreatedCredential\"]>; \"has_more\": boolean; \"next_cursor\": string | null; \"object\": (\"list\"); [key: string]: unknown };\n \"ConnectionEvent\": { \"action\"?: string; \"actor\"?: string; \"authorizer_id\"?: string; \"connection_id\"?: string; \"created_at_ms\"?: number; \"id\"?: string; \"outcome\"?: string; \"target\"?: string; [key: string]: unknown };\n \"ConnectionEventList\": { \"data\": Array<AdministrativeSchemas[\"ConnectionEvent\"]>; \"has_more\": boolean; \"next_cursor\"?: string | null; \"object\": (\"list\"); [key: string]: unknown };\n \"ConnectionGrant\": { \"agent_id\"?: string; \"agent_org_id\"?: string; \"authorizer_id\": string; \"client_id\": string; \"consent_version\"?: string; \"created_at_ms\": number; \"created_by_connection_id\"?: string; \"expires_at_ms\": number; \"id\": string; \"identity\": (\"personal_assistant\" | \"dedicated_agent\"); \"inbox_ids\"?: Array<string>; \"last_used_at_ms\"?: number; \"name\": string; \"org_id\"?: string; \"project_id\"?: string; \"reach\": (\"inboxes\" | \"project\" | \"organization\" | \"full_account\"); \"revoked_at_ms\": number; \"scopes\": Array<string>; [key: string]: unknown };\n \"ConnectionGrantList\": { \"data\": Array<AdministrativeSchemas[\"ConnectionGrant\"]>; \"has_more\": boolean; \"next_cursor\"?: string | null; \"object\": (\"list\"); [key: string]: unknown };\n \"CreateAgentRequest\": { \"name\": string };\n \"CreateBillingCheckoutRequest\": { \"cancel_url\": string; \"plan_tier\": (\"developer\" | \"startup\"); \"success_url\": string; [key: string]: unknown };\n \"CreateBillingCheckoutResponse\": { \"id\": string; \"mode\": (\"test\" | \"live\"); \"plan_tier\": (\"developer\" | \"startup\"); \"status\": string; \"subscription\": AdministrativeSchemas[\"AdminBillingSubscription\"]; \"url\": string; [key: string]: unknown };\n \"CreateBillingPortalRequest\": { \"return_url\": string; [key: string]: unknown };\n \"CreateBillingPortalResponse\": { \"id\": string; \"mode\": (\"test\" | \"live\"); \"url\": string; [key: string]: unknown };\n \"CreateDomainBillingCheckoutRequest\": { \"cancel_url\": string; \"domain\": string; \"success_url\": string; [key: string]: unknown };\n \"CreateDomainBillingCheckoutResponse\": { \"baseline_com_cost_cents\": number; \"currency\": string; \"domain\": string; \"domain_annual_price_cents\": number; \"id\": string; \"mode\": (\"test\" | \"live\"); \"plan_tier\": (\"developer\" | \"startup\"); \"registrar_cost_cents\": number; \"status\": string; \"stripe_price_id\": string; \"url\": string; [key: string]: unknown };\n \"CreateDomainPurchaseRequest\": { \"auto_renew\"?: boolean; \"domain\": string; \"project_id\"?: string; \"rationale\"?: string; \"scope\"?: (\"org\" | \"project\"); [key: string]: unknown };\n \"CreateInvitationRequest\": { \"email\": string; \"expires_in_days\"?: number; \"role\": (\"owner\" | \"admin\" | \"member\" | \"viewer\" | \"billing\"); [key: string]: unknown };\n \"CreateOrgRequest\": { \"display_name\"?: string; \"parent_org_id\": string; \"slug\"?: string; [key: string]: unknown };\n \"CreatePlanChangeRequest\": { \"project_id\"?: string; \"rationale\"?: string; \"target_plan\": (\"free\" | \"developer\" | \"startup\"); [key: string]: unknown };\n \"CreateProjectRequest\": { \"description\"?: string; \"name\": string; \"slug\"?: string; [key: string]: unknown };\n \"CreateReviewLinkRequest\": { \"escalate_after_s\"?: number; \"hmac_secret\"?: string; \"inbox_address\"?: string; \"max_hops\"?: number; \"review_deadline_s\"?: number; \"reviewer_agent_id\": string; \"transport\"?: (\"webhook\" | \"sse\" | \"websocket\"); \"webhook_url\"?: string; [key: string]: unknown };\n \"DecideCommerceRequest\": { \"approved_max_cents\"?: number; \"auto_renew\"?: boolean; \"expected_version\": number; \"future_authority\"?: AdministrativeSchemas[\"CommerceSpendLimitInput\"]; \"reason\"?: string; [key: string]: unknown };\n \"DelegationHealth\": { \"checked_at\"?: string; \"confirmed_at\"?: string; \"status\"?: (\"pending\" | \"confirmed\" | \"rechecking\" | \"check_delayed\" | \"action_required\"); [key: string]: unknown };\n \"DeleteCategoryResult\": { \"category_id\": string; \"merged_into\"?: string; \"status\": string; [key: string]: unknown };\n \"DeleteReviewLinkResult\": { \"deleted\": boolean; \"swept\": number; [key: string]: unknown };\n \"DomainList\": { \"domains\"?: Array<AdministrativeSchemas[\"DomainSummary\"]>; \"next_page\"?: string; [key: string]: unknown };\n \"DomainReadiness\": { \"action_required_by\": (\"customer\" | \"extrovert\" | \"none\"); \"checked_at\"?: string; \"inboxes\"?: { \"needs_attention\": number; \"ready\": number; \"scope\": (\"agent\" | \"inbox\" | \"selected_inboxes\" | \"project\" | \"organization\"); \"setting_up\": number; \"total\": number; [key: string]: unknown }; \"label\": string; \"next_action\": (\"check_dns_entries\" | \"restore_dns\" | \"wait\" | \"create_inbox\" | \"use_inbox\" | \"ask_owner_to_create_inbox\"); \"next_check_at\"?: string; \"poll_after_seconds\": number; \"ready_for_inboxes\": boolean; \"reason\": string; \"status\": (\"waiting_for_dns\" | \"checking\" | \"setting_up\" | \"ready\" | \"action_required\" | \"needs_attention\"); \"summary\": string; [key: string]: unknown };\n \"DomainSummary\": { \"delegation\"?: AdministrativeSchemas[\"DelegationHealth\"]; \"dkim_status\"?: string; \"domain\"?: string; \"id\"?: string; \"mode\"?: string; \"provisioning_error\"?: string; \"provisioning_phase\"?: string; \"readiness\"?: AdministrativeSchemas[\"DomainReadiness\"]; \"shared\"?: boolean; \"verification_status\"?: string; [key: string]: unknown };\n \"EffectiveRiskDial\": { \"auto_send_cap_per_day\": number; \"canary_rate\": number; \"drift_demote_after\": number; \"first_contact_gate\": boolean; \"graduate_min_age_hours\": number; \"graduate_min_approvals\": number; \"min_confidence\": number; [key: string]: unknown };\n \"EmailAddress\": { \"email\": string; \"name\"?: string; [key: string]: unknown };\n \"EnrollmentTokenList\": { \"next_page\"?: string; \"tokens\"?: Array<AdministrativeSchemas[\"EnrollmentTokenSummary\"]>; [key: string]: unknown };\n \"EnrollmentTokenSummary\": { \"created_at\"?: string; \"daily_send_limit\"?: number; \"id\"?: string; \"label\"?: string; \"max_mailboxes\"?: number; \"prefix\"?: string; \"reusable\"?: boolean; \"revoked\"?: boolean; \"scopes\"?: Array<string>; \"used_count\"?: number; [key: string]: unknown };\n \"GraduateCategoryRequest\": { \"to_state\": (\"auto_notify\" | \"auto_silent\"); [key: string]: unknown };\n \"GraduationStatus\": { \"age_hours\": number; \"age_met\": boolean; \"approvals_met\": boolean; \"can_graduate\": boolean; \"category_id\": string; \"clean_approval_count\": number; \"drift_count\": number; \"drift_demote_after\": number; \"graduate_min_age_hours\": number; \"graduate_min_approvals\": number; \"maturity_gate_met\": boolean; \"never_graduate\": boolean; \"next_state\": string; \"state\": (\"supervised\" | \"auto_notify\" | \"auto_silent\"); [key: string]: unknown };\n \"InboxReviewPolicy\": { \"account\": (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); \"address\": string; \"effective\": (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); \"override\": string; [key: string]: unknown };\n \"InboxReviewPolicyRequest\": { \"policy\"?: (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); [key: string]: unknown };\n \"IssueAgentKeyRequest\": { \"agent_id\": string; \"expires_in_hours\"?: number; \"scopes\": Array<string>; [key: string]: unknown };\n \"IssueAgentKeyResult\": { \"agent_handle\"?: string; \"agent_id\"?: string; \"agent_name\"?: string; \"ceiling_inbox_id\"?: string; \"created_at\"?: string; \"enrollment_token_id\"?: string; \"expires_at\"?: string; \"id\"?: string; \"key\"?: string; \"key_tier\"?: (\"org\" | \"project\" | \"inbox\"); \"prefix\"?: string; \"scopes\"?: Array<string>; [key: string]: unknown };\n \"IssueEnrollmentTokenRequest\": { \"allowed_domains\"?: Array<string>; \"daily_send_limit\"?: number; \"expires_in_hours\"?: number; \"label\"?: string; \"max_mailboxes\"?: number; \"reusable\"?: boolean; \"scopes\"?: Array<string>; [key: string]: unknown };\n \"IssueEnrollmentTokenResult\": { \"daily_send_limit\"?: number; \"id\"?: string; \"max_mailboxes\"?: number; \"prefix\"?: string; \"scopes\"?: Array<string>; \"token\"?: string; [key: string]: unknown };\n \"MergeCategoryRequest\": { \"into_category_id\": string; [key: string]: unknown };\n \"MergeCategoryResult\": { \"category\": AdministrativeSchemas[\"Category\"]; \"review_requests_repointed\": number; \"writing_rules_repointed\": number; [key: string]: unknown };\n \"Message\": { \"cc\"?: Array<AdministrativeSchemas[\"EmailAddress\"]>; \"date\"?: string; \"direction\"?: (\"inbound\" | \"outbound\"); \"extracted_html\"?: string | null; \"extracted_text\"?: string | null; \"folder\"?: string; \"from\"?: AdministrativeSchemas[\"EmailAddress\"]; \"html\"?: string | null; \"id\"?: string; \"in_reply_to\"?: string; \"inbox\"?: string; \"message_id\"?: string; \"references\"?: string; \"reply_to\"?: Array<AdministrativeSchemas[\"EmailAddress\"]>; \"seen\"?: boolean; \"sent_copy_status\"?: AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\"?: string | null; \"subject\"?: string; \"submission_id\"?: string; \"text\"?: string | null; \"thread_id\"?: string; \"to\"?: Array<AdministrativeSchemas[\"EmailAddress\"]>; \"transport\"?: AdministrativeSchemas[\"TransportCounts\"]; [key: string]: unknown };\n \"NeverGraduateRequest\": { \"locked\": boolean; [key: string]: unknown };\n \"OnboardDomainRequest\": { \"domain\": string; \"mode\": (\"ns_delegated\" | \"purchased\"); [key: string]: unknown };\n \"OnboardDomainResult\": { \"delegation\"?: AdministrativeSchemas[\"DelegationHealth\"]; \"delegation_ns\"?: Array<AdministrativeSchemas[\"RecordInstruction\"]>; \"domain\"?: string; \"instruction\"?: string; \"mode\"?: (\"shared\" | \"ns_delegated\" | \"manual\" | \"purchased\"); \"provisioning_error\"?: string; \"provisioning_phase\"?: string; \"readiness\"?: AdministrativeSchemas[\"DomainReadiness\"]; \"records\"?: Array<AdministrativeSchemas[\"RecordInstruction\"]>; \"verification_status\"?: string; \"zone_id\"?: string; [key: string]: unknown };\n \"Org\": { \"created_at\": string; \"customer_id\": string; \"display_name\": string; \"id\": string; \"lifecycle_status\": (\"active\" | \"archived\" | \"deleted\"); \"max_child_orgs\": number; \"max_projects\": number; \"parent_org_id\"?: string | null; \"plan_tier\": string; \"root_org_id\": string; \"slug\": string; \"updated_at\": string; \"version\": number; [key: string]: unknown };\n \"OrgInvitation\": { \"created_at\": string; \"email\": string; \"expires_at\": string; \"id\": string; \"org_id\": string; \"role\": (\"owner\" | \"admin\" | \"member\" | \"viewer\" | \"billing\"); \"status\": (\"pending\" | \"accepted\" | \"revoked\" | \"expired\"); \"token\"?: string; \"token_prefix\": string; [key: string]: unknown };\n \"OrgList\": { \"orgs\"?: Array<AdministrativeSchemas[\"Org\"]>; [key: string]: unknown };\n \"OrgMember\": { \"clerk_user_id\": string; \"created_at\": string; \"email\": string; \"role\": (\"owner\" | \"admin\" | \"member\" | \"viewer\" | \"billing\"); \"updated_at\": string; [key: string]: unknown };\n \"OrgMemberList\": { \"members\"?: Array<AdministrativeSchemas[\"OrgMember\"]>; [key: string]: unknown };\n \"OrgSettings\": { \"default_domain\"?: string; \"default_mailbox_cap\"?: number; \"default_onboarding_mode\"?: string; \"early_access\"?: boolean; \"org_name\"?: string; \"webhook_signing_prefix\"?: string; \"x402_mode\"?: string; [key: string]: unknown };\n \"PacingItem\": { \"review_id\": string; \"state\": (\"behind_cursor\" | \"in_window_fresh\" | \"in_window_redrafting\" | \"ahead\"); [key: string]: unknown };\n \"PatchOrgRequest\": { \"display_name\"?: string; \"expected_version\"?: number; \"slug\"?: string; [key: string]: unknown };\n \"PatchOrgSettingsRequest\": { \"default_domain\"?: string; \"default_mailbox_cap\"?: number; \"default_onboarding_mode\"?: string; \"early_access\"?: boolean; \"org_name\"?: string; \"webhook_signing_prefix\"?: string; \"x402_mode\"?: string; [key: string]: unknown };\n \"PatchProjectRequest\": { \"description\"?: string; \"expected_version\"?: number; \"name\"?: string; \"slug\"?: string; [key: string]: unknown };\n \"PendingSignupClaim\": { \"created_at\": string; \"expires_at\": string; \"id\": string; \"org_id\": string; \"role\": (\"owner\"); [key: string]: unknown };\n \"PersonalCategory\": { \"description\": string; \"email\": boolean; \"id\": (\"review\" | \"purchase_approval\" | \"purchase_completed\" | \"purchase_problem\" | \"domain_progress\" | \"domain_action\" | \"domain_ready\" | \"domain_problem\" | \"sending_problem\"); \"label\": string; \"push\": boolean; [key: string]: unknown };\n \"PersonalNotice\": { \"action_path\": string; \"actionable\": boolean; \"body\": string; \"category\": string; \"created_ms\": number; \"email_status\": (\"off\" | \"pending\" | \"sent\" | \"failed\" | \"suppressed\"); \"id\": string; \"kind\": string; \"notice_id\": string; \"org_id\": string; \"project_id\": string; \"push_status\": (\"off\" | \"pending\" | \"sent\" | \"failed\" | \"suppressed\"); \"source_id\": string; \"source_version\": number; \"title\": string; [key: string]: unknown };\n \"PersonalNotificationBatch\": { \"attempt\"?: number; \"channel\": (\"push\" | \"email\"); \"created_ms\"?: number; \"device_id\"?: string; \"id\": string; \"items\": Array<AdministrativeSchemas[\"PersonalNotice\"]>; \"status\": string; [key: string]: unknown };\n \"PersonalNotificationHistory\": { \"items\": Array<AdministrativeSchemas[\"PersonalNotice\"]>; \"next_cursor\"?: string; [key: string]: unknown };\n \"PersonalNotificationSettings\": { \"email\": string; \"email_status\": (\"verified\" | \"unavailable\"); \"preferences\": AdministrativeSchemas[\"PersonalPreferences\"]; \"push_available\": boolean; [key: string]: unknown };\n \"PersonalPreferencePatch\": { \"category\"?: string; \"email\"?: boolean; \"expected_version\": number; \"grouping_minutes\"?: (1 | 5 | 15); \"push\"?: boolean };\n \"PersonalPreferences\": { \"categories\": Array<AdministrativeSchemas[\"PersonalCategory\"]>; \"grouping_minutes\": (1 | 5 | 15); \"version\": number; [key: string]: unknown };\n \"PersonalPushDevice\": { \"created_ms\": number; \"enabled\": boolean; \"endpoint\": string; \"id\": string; \"label\": string; \"last_accepted_ms\": number; \"status\": (\"active\" | \"expired\"); \"updated_ms\": number; \"version\": number; [key: string]: unknown };\n \"PersonalPushDevicePatch\": { \"enabled\"?: boolean; \"expected_version\": number; \"label\"?: string };\n \"PersonalPushEnrollment\": { \"auth\": string; \"endpoint\": string; \"label\": string; \"p256dh\": string };\n \"Project\": { \"created_at\": string; \"customer_id\": string; \"description\": string; \"id\": string; \"is_default\": boolean; \"lifecycle_status\": (\"active\" | \"archived\" | \"deleted\"); \"name\": string; \"org_id\": string; \"slug\": string; \"updated_at\": string; \"version\": number; [key: string]: unknown };\n \"ProjectList\": { \"projects\"?: Array<AdministrativeSchemas[\"Project\"]>; [key: string]: unknown };\n \"PromoteRuleRequest\": { \"to_scope\": (\"general\" | \"category\"); [key: string]: unknown };\n \"RealtimeTicket\": { \"expires_at\": string; \"ticket\": string; [key: string]: unknown };\n \"ReconcileMessageOutcome\": { \"composed_category_rules_version\": number; \"composed_house_style_version\": number; \"current_category_rules_version\": number; \"current_house_style_version\": number; \"gate_outcome\"?: string; \"held_reason\"?: string; \"nudged\": boolean; \"released\": boolean; \"review_id\": string; \"verdict\": (\"current_enough\" | \"stale\"); [key: string]: unknown };\n \"ReconcileResult\": { \"category_id\": string; \"current_category_rules_version\": number; \"current_house_style_version\": number; \"held_by_gate\": number; \"outcomes\": Array<AdministrativeSchemas[\"ReconcileMessageOutcome\"]>; \"released\": number; \"scanned\": number; \"stale\": number; \"staleness_tolerance\": number; \"trigger\": (\"graduate\" | \"rule_change\" | \"scan_backlog\"); [key: string]: unknown };\n \"RecordInstruction\": { \"name\"?: string; \"priority\"?: number | null; \"ttl\"?: number; \"type\"?: string; \"value\"?: string; [key: string]: unknown };\n \"RegisterWebhookRequest\": { \"address\"?: string; \"client_id\"?: string; \"event_types\"?: Array<(\"message.received\")>; \"events\"?: Array<(\"message.received\")>; \"inbox\"?: string; \"url\": string; [key: string]: unknown };\n \"ReplyRequest\": (unknown | unknown);\n \"ReputationFinding\": { \"detail\": string; \"domain\"?: string; \"first_seen_at\": string; \"id\": string; \"last_seen_at\": string; \"resolved_at\"?: string; \"sender\"?: string; \"severity\": (\"low\" | \"high\" | \"unknown\"); \"status\": (\"open\" | \"resolved\"); \"title\": string; \"type\": string; [key: string]: unknown };\n \"ReputationFindingsPage\": { \"items\": Array<AdministrativeSchemas[\"ReputationFinding\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"ReputationMetrics\": { \"bounce_rate\": number; \"bounces\": number; \"complaint_rate\": number; \"complaints\": number; \"sends\": number; \"window_end\"?: string; \"window_start\"?: string; [key: string]: unknown };\n \"ReputationRollup\": { \"configured\": boolean; \"last_checked_at\"?: string; \"metrics\": AdministrativeSchemas[\"ReputationMetrics\"]; \"object\": (\"reputation\"); \"open_findings\": number; \"org_id\": string; \"sending_status\": string; \"status\": string; [key: string]: unknown };\n \"Review\": { \"agent_id\"?: string; \"category_id\"?: string; \"closed\"?: boolean; \"created_at\"?: string; \"decided_at\"?: string; \"decision_feedback\"?: string; \"diff_unified\"?: string; \"effective_mode\": (\"review\" | \"direct\"); \"from_address\"?: string; \"gate_outcome\"?: string; \"id\": string; \"intent_meta\"?: Record<string, unknown>; \"intent_summary\"?: string; \"kind\": (\"send\" | \"reply\" | \"forward\"); \"mode\": (\"review\" | \"direct\"); \"proposed_bcc\"?: Array<string>; \"proposed_body_html\"?: string; \"proposed_body_text\"?: string; \"proposed_cc\"?: Array<string>; \"proposed_subject\"?: string; \"proposed_to\"?: Array<string>; \"revision\": number; \"send_error\"?: string; \"send_path\"?: (\"human_reviewed\" | \"delegated_reviewed\" | \"reviewer_approved\" | \"graduated_auto\" | \"agent_direct\"); \"sent_at\"?: string; \"sent_body_text\"?: string; \"sent_message_id\"?: string; \"sent_subject\"?: string; \"stale_reason\"?: string; \"state\": (\"needs_review\" | \"in_review\" | \"chatting\" | \"stale\" | \"approved\" | \"sent\" | \"auto_sent\" | \"rejected\" | \"stalled\" | \"cancelled\" | \"failed\"); \"updated_at\"?: string; \"version\": number; [key: string]: unknown };\n \"ReviewIntent\": { \"meta\"?: { \"goal\"?: string; \"prior_touches\"?: number; \"recipient\"?: string; \"urgency\"?: string; [key: string]: unknown }; \"summary\"?: string; [key: string]: unknown };\n \"ReviewLink\": { \"active\": boolean; \"consec_failures\": number; \"created_at\": string; \"escalate_after_s\": number; \"has_secret\": boolean; \"id\": string; \"inbox_address\"?: string; \"max_hops\": number; \"review_deadline_s\": number; \"reviewer_agent_id\": string; \"transport\": (\"webhook\" | \"sse\" | \"websocket\"); \"updated_at\": string; \"webhook_url\"?: string; [key: string]: unknown };\n \"ReviewLinkList\": { \"review_links\": Array<AdministrativeSchemas[\"ReviewLink\"]>; [key: string]: unknown };\n \"ReviewPolicy\": { \"effective\": (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); \"policy\": (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); [key: string]: unknown };\n \"ReviewPolicyRequest\": { \"policy\": (\"require_review\" | \"allow_direct\" | \"auto_send_graduated\"); [key: string]: unknown };\n \"ReviewTurn\": { \"actor_id\"?: string; \"actor_kind\": (\"agent\" | \"human\" | \"review_agent\" | \"system\" | \"connection\"); \"body\"?: string; \"created_at\": string; \"diff_json\"?: Record<string, unknown>; \"id\": string; \"metadata\"?: Record<string, unknown>; \"revision\"?: number; \"seq\": number; \"turn_type\": (\"agent_draft\" | \"agent_question\" | \"agent_note\" | \"human_comment\" | \"human_question\" | \"human_edit\" | \"human_approve\" | \"human_reject\" | \"human_reconfirm\" | \"system_diff\" | \"state_change\" | \"nudge\"); [key: string]: unknown };\n \"RevokeSuppressionRequest\": { \"reason\": string; [key: string]: unknown };\n \"RiskDial\": { \"account\": AdministrativeSchemas[\"AccountRiskDial\"]; \"categories\": Array<AdministrativeSchemas[\"CategoryRiskDial\"]>; [key: string]: unknown };\n \"RiskDialRequest\": { \"auto_send_cap_per_day\"?: number; \"canary_rate\"?: number; \"drift_demote_after\"?: number; \"first_contact_gate\"?: boolean; \"graduate_min_age_hours\"?: number; \"graduate_min_approvals\"?: number; \"min_confidence\"?: number; [key: string]: unknown };\n \"Rule\": { \"author_kind\": (\"agent\" | \"human\" | \"connection\"); \"category_id\"?: string; \"created_at\": string; \"id\": string; \"kind\": (\"soft\" | \"hard\"); \"lineage_id\": string; \"org_id\"?: string; \"priority\": number; \"project_id\"?: string; \"rev\": number; \"rule_layer\"?: (\"org\" | \"project\"); \"rule_text\": string; \"scope\": (\"general\" | \"category\"); \"scope_agent_id\"?: string; \"source_review_id\"?: string; \"source_turn_id\"?: string; \"status\": (\"proposed\" | \"active\" | \"superseded\" | \"retired\"); \"supersedes_id\"?: string; \"updated_at\": string; [key: string]: unknown };\n \"RuleAuditEntry\": { \"action\": (\"create\" | \"supersede\" | \"retire\" | \"rename\" | \"redescribe\" | \"merge\" | \"restore\"); \"actor_id\"?: string; \"actor_kind\": (\"agent\" | \"human\" | \"system\" | \"connection\"); \"after_json\"?: string; \"before_json\"?: string; \"created_at\": string; \"entity_id\": string; \"entity_kind\": (\"rule\" | \"category\"); \"id\": string; \"undone\": boolean; [key: string]: unknown };\n \"RuleAuditPage\": { \"items\": Array<AdministrativeSchemas[\"RuleAuditEntry\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"RulePage\": { \"category_rules_version\"?: number; \"composition_token\"?: string; \"composition_token_expires_at\"?: string; \"house_style_version\"?: number; \"items\": Array<AdministrativeSchemas[\"Rule\"]>; \"rule_high_water\"?: number; \"total\": number; [key: string]: unknown };\n \"ScanBacklogRequest\": { \"staleness_tolerance\"?: number; [key: string]: unknown };\n \"ScanBacklogStatus\": { \"category_id\": string; \"current_category_rules_version\": number; \"current_enough\": number; \"current_house_style_version\": number; \"queued\": number; \"stale\": number; \"staleness_tolerance\": number; \"state\": (\"supervised\" | \"auto_notify\" | \"auto_silent\" | \"probation\"); [key: string]: unknown };\n \"SendRequest\": { \"attachments\"?: Array<AdministrativeSchemas[\"AttachmentInput\"]>; \"bcc\"?: Array<string>; \"body\"?: string; \"category_confidence\"?: number; \"category_id\"?: string; \"cc\"?: Array<string>; \"composition_token\"?: string; \"headers\"?: Record<string, unknown>; \"html\"?: string; \"idempotency_key\"?: string; \"in_reply_to\"?: string; \"intent\"?: AdministrativeSchemas[\"ReviewIntent\"]; \"mode\"?: (\"review\" | \"direct\"); \"reply_to\"?: string; \"subject\"?: string; \"text\"?: string; \"to\": Array<string>; [key: string]: unknown };\n \"SendResult\": { \"message_id\"?: string; \"review_id\"?: string; \"sent_copy_status\"?: AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\"?: string | null; \"submission_id\"?: string; \"thread_id\"?: string; \"transport\"?: AdministrativeSchemas[\"TransportCounts\"]; [key: string]: unknown };\n \"SentCopyStatus\": (\"pending\" | \"stored\" | \"unavailable\");\n \"StatusResult\": { \"message_id\"?: string; \"review_id\"?: string; \"sent_copy_status\"?: AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\"?: string | null; \"status\"?: string; \"submission_id\"?: string; \"transport\"?: AdministrativeSchemas[\"TransportCounts\"]; [key: string]: unknown };\n \"Submission\": { \"created_at\": string; \"inbox\": string; \"recipients\": Array<AdministrativeSchemas[\"SubmissionRecipient\"]>; \"sent_copy_status\": AdministrativeSchemas[\"SentCopyStatus\"]; \"sent_message_id\": string | null; \"submission_id\": string; \"transport\": AdministrativeSchemas[\"TransportCounts\"]; \"updated_at\": string; [key: string]: unknown };\n \"SubmissionRecipient\": { \"recipient\": string; \"state\": AdministrativeSchemas[\"SubmissionRecipientState\"]; [key: string]: unknown };\n \"SubmissionRecipientState\": (\"queued\" | \"waiting_for_parent\" | \"transmitting\" | \"accepted\" | \"failed\" | \"dependency_failed\" | \"unknown\");\n \"Suppression\": { \"created_at\": string; \"id\": string; \"narrow_agent_id\"?: string; \"narrow_mailbox\"?: string; \"origin_agent_id\"?: string; \"origin_mailbox\"?: string; \"origin_message_id\"?: string; \"reactivation_count\": number; \"recipient\": string; \"recipient_raw\"?: string; \"revoke_reason\"?: string; \"revoked\": boolean; \"revoked_at\"?: string; \"revoked_by\"?: string; \"scope\": (\"org\"); \"source\": (\"one_click\" | \"page\" | \"mailto\" | \"reply_stop\" | \"manual\" | \"complaint\" | \"escalation\"); [key: string]: unknown };\n \"SuppressionPage\": { \"items\": Array<AdministrativeSchemas[\"Suppression\"]>; \"next_cursor\"?: string; \"total\": number; [key: string]: unknown };\n \"TransportCounts\": { \"accepted\"?: number; \"dependency_failed\"?: number; \"failed\"?: number; \"queued\"?: number; \"transmitting\"?: number; \"unknown\"?: number; \"waiting_for_parent\"?: number; [key: string]: unknown };\n \"UpdateCategoryRequest\": { \"description\"?: string; \"name\"?: string; [key: string]: unknown };\n \"UpdateMemberRoleRequest\": { \"role\": (\"owner\" | \"admin\" | \"member\" | \"viewer\" | \"billing\"); [key: string]: unknown };\n \"UpdateWebhookRequest\": { \"active\"?: boolean; \"address\"?: string; \"event_types\"?: Array<(\"message.received\")>; \"events\"?: Array<(\"message.received\")>; \"inbox\"?: string; \"url\"?: string; [key: string]: unknown };\n \"Webhook\": { \"active\"?: boolean; \"agent_id\"?: string; \"created_at\"?: string; \"created_by_connection_id\"?: string; \"events\"?: Array<(\"message.received\")>; \"id\"?: string; \"inbox\"?: string | null; \"inbox_ids\"?: Array<string>; \"resource_scope\"?: (\"agent\" | \"inboxes\" | \"project\" | \"organization\"); \"secret\"?: string; \"secret_prefix\"?: string; \"url\"?: string; [key: string]: unknown };\n \"WebhookPage\": { \"items\"?: Array<AdministrativeSchemas[\"Webhook\"]>; \"total\"?: number; [key: string]: unknown };\n}\n","/** Customer administration through an explicitly approved full-control connection.\n * Source of this runtime: sdk/ts/src/administration.ts. The contract generator\n * copies it into the independently published MCP package.\n */\nimport { administrativeCatalog, administrativeSchemas } from \"./administration.generated.js\";\nimport type { AdministrativeOperations } from \"./administration.generated.js\";\n\nexport type { AdministrativeOperations, AdministrativeDownload } from \"./administration.generated.js\";\nexport type AdministrativeActionID = keyof AdministrativeOperations;\nexport type AdministrativeMode = \"read\" | \"change\";\ntype Schema = Record<string, unknown>;\nexport interface AdministrativeInput {\n path?: Record<string, string>;\n query?: Record<string, string | number | boolean>;\n body?: unknown;\n}\nexport interface AdministrativeRequest {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n query?: Record<string, string | number | boolean>;\n body?: unknown;\n responseFormat: \"json\" | \"binary\";\n signal?: AbortSignal;\n}\nexport interface AdministrativeActionSummary {\n id: AdministrativeActionID;\n summary: string;\n method: AdministrativeRequest[\"method\"];\n mode: AdministrativeMode;\n}\ninterface Action extends Omit<AdministrativeActionSummary, \"mode\"> {\n path: string;\n description?: string | null;\n inputSchema: Schema;\n responseFormat: AdministrativeRequest[\"responseFormat\"];\n}\nconst actions = administrativeCatalog as unknown as Action[];\nconst schemas = administrativeSchemas as unknown as Record<string, Schema>;\nconst owns = (o: object, key: string) => Object.prototype.hasOwnProperty.call(o, key);\nconst summary = (a: Action): AdministrativeActionSummary => ({ id: a.id, summary: a.summary, method: a.method, mode: a.method === \"GET\" ? \"read\" : \"change\" });\n\n/** Local discovery never grants authority. Every execution is authorized and\n * attributed by the API, using the current connection and current human roles. */\nexport class Administration {\n constructor(private readonly execute: (request: AdministrativeRequest) => Promise<unknown>) {}\n\n list(options: { search?: string; mode?: AdministrativeMode; limit?: number; cursor?: string } = {}) {\n const limit = options.limit ?? 20;\n if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error(\"limit must be between 1 and 100\");\n const search = options.search?.trim().toLowerCase() ?? \"\";\n if (search.length > 200) throw new Error(\"search must be at most 200 characters\");\n const prefix = encodeURIComponent(`${search}\\n${options.mode ?? \"\"}`) + \":\";\n let offset = 0;\n if (options.cursor !== undefined) {\n if (!options.cursor.startsWith(prefix) || !/^\\d+$/.test(options.cursor.slice(prefix.length))) throw new Error(\"Invalid catalog cursor; keep the same search and mode\");\n offset = Number(options.cursor.slice(prefix.length));\n if (!Number.isSafeInteger(offset)) throw new Error(\"Invalid catalog cursor\");\n }\n const matched = actions.filter((a) => (!options.mode || summary(a).mode === options.mode) && `${a.id} ${a.summary} ${a.path}`.toLowerCase().includes(search));\n const data = matched.slice(offset, offset + limit).map(summary);\n const hasMore = offset + data.length < matched.length;\n return { object: \"list\" as const, data, has_more: hasMore, next_cursor: hasMore ? `${prefix}${offset + data.length}` : null };\n }\n\n describe(id: string) {\n const a = this.action(id);\n const definitions: Record<string, Schema> = {};\n const rewrite = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(rewrite);\n if (!value || typeof value !== \"object\") return value;\n const object = value as Schema;\n if (typeof object.$ref === \"string\") {\n const name = object.$ref.replace(\"#/components/schemas/\", \"\");\n if (!owns(schemas, name)) throw new Error(`Unknown administrative schema ${name}`);\n if (!owns(definitions, name)) { definitions[name] = {}; definitions[name] = rewrite(schemas[name]) as Schema; }\n return { $ref: `#/$defs/${name}` };\n }\n return Object.fromEntries(Object.entries(object).map(([key, child]) => [key, rewrite(child)]));\n };\n const inputSchema = rewrite(a.inputSchema) as Schema;\n return { ...summary(a), description: a.description ?? a.summary, input_schema: { ...inputSchema, $defs: definitions },\n required_authority: \"Explicit full account control (account:admin); current human customer-admin authority. Private platform access is excluded.\",\n result_format: a.responseFormat === \"binary\" ? \"Base64 content with content_type and optional filename\" : \"API response JSON; list cursors are opaque\",\n credential_lifetime: \"Created credentials survive independently, including administrative credentials; revoke them separately.\" };\n }\n\n /** Typed SDK execution. MCP/CLI use run with an explicit read/change mode. */\n call<K extends AdministrativeActionID>(id: K, input: AdministrativeOperations[K][\"input\"], signal?: AbortSignal): Promise<AdministrativeOperations[K][\"output\"]> {\n return this.run(id, input as AdministrativeInput, undefined, signal) as Promise<AdministrativeOperations[K][\"output\"]>;\n }\n\n async run(id: string, input: AdministrativeInput = {}, mode?: AdministrativeMode, signal?: AbortSignal): Promise<unknown> {\n const a = this.action(id);\n if (mode && summary(a).mode !== mode) throw new Error(`${id} is a ${summary(a).mode} action; use the ${summary(a).mode} tool/command`);\n // Bound data before recursive validation or any network request.\n if (JSON.stringify(input).length > 1_000_000) throw new Error(\"Administrative input exceeds 1 MB\");\n validate(a.inputSchema, input, \"input\");\n const path = a.path.replace(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = input.path?.[name];\n if (typeof value !== \"string\" || value.length === 0 || value.length > 1024 || /[/\\\\\\u0000-\\u001f]/.test(value) || value === \".\" || value === \"..\") throw new Error(`Invalid path.${name}`);\n return encodeURIComponent(value);\n });\n return this.execute({ method: a.method, path, query: input.query, body: input.body, responseFormat: a.responseFormat, signal });\n }\n\n private action(id: string): Action {\n const action = actions.find((a) => a.id === id);\n if (!action) throw new Error(`Unknown administrative action ${id}; search the action catalog first`);\n return action;\n }\n}\n\nfunction validate(s: Schema, value: unknown, at: string, depth = 0): void {\n if (depth > 64) throw new Error(`${at}: input nesting is too deep`);\n const fail = (message: string): never => { throw new Error(`${at}: ${message}`); };\n if (value === null && s.nullable === true) return;\n if (typeof s.$ref === \"string\") {\n const name = s.$ref.replace(\"#/components/schemas/\", \"\");\n if (!owns(schemas, name)) fail(\"unknown schema\");\n return validate(schemas[name]!, value, at, depth + 1);\n }\n if (Array.isArray(s.enum) && !s.enum.includes(value)) fail(`expected one of ${s.enum.join(\", \")}`);\n if (Array.isArray(s.allOf)) for (const child of s.allOf) validate(child as Schema, value, at, depth + 1);\n for (const key of [\"oneOf\", \"anyOf\"]) {\n if (!Array.isArray(s[key])) continue;\n let matches = 0;\n for (const child of s[key]) { try { validate(child as Schema, value, at, depth + 1); matches++; } catch { /* Try the next documented alternative. */ } }\n if (matches === 0 || (key === \"oneOf\" && matches !== 1)) fail(`must match ${key === \"oneOf\" ? \"exactly one\" : \"an\"} allowed schema`);\n }\n if (s.type === \"object\" || s.properties) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(\"expected an object\");\n const object = value as Record<string, unknown>;\n const properties = (s.properties ?? {}) as Record<string, Schema>;\n for (const key of (s.required ?? []) as string[]) if (!owns(object, key) || object[key] === undefined) fail(`missing ${key}`);\n for (const [key, child] of Object.entries(object)) {\n if (child === undefined) continue;\n if (owns(properties, key)) validate(properties[key]!, child, `${at}.${key}`, depth + 1);\n else if (s.additionalProperties === false) fail(`unknown field ${key}`);\n else if (s.additionalProperties && typeof s.additionalProperties === \"object\") validate(s.additionalProperties as Schema, child, `${at}.${key}`, depth + 1);\n }\n } else if (s.type === \"array\") {\n if (!Array.isArray(value)) fail(\"expected an array\");\n const array = value as unknown[];\n if (typeof s.minItems === \"number\" && array.length < s.minItems) fail(`requires at least ${s.minItems} items`);\n if (typeof s.maxItems === \"number\" && array.length > s.maxItems) fail(`allows at most ${s.maxItems} items`);\n for (const child of array) validate((s.items ?? {}) as Schema, child, at + \"[]\", depth + 1);\n } else if (s.type === \"string\") {\n if (typeof value !== \"string\") fail(\"expected a string\");\n const text = value as string;\n if (typeof s.minLength === \"number\" && text.length < s.minLength) fail(`requires at least ${s.minLength} characters`);\n if (typeof s.maxLength === \"number\" && text.length > s.maxLength) fail(`allows at most ${s.maxLength} characters`);\n } else if (s.type === \"integer\" || s.type === \"number\") {\n if (typeof value !== \"number\" || !Number.isFinite(value) || (s.type === \"integer\" && !Number.isInteger(value))) fail(`expected a ${s.type}`);\n if (typeof s.minimum === \"number\" && (value as number) < s.minimum) fail(`minimum is ${s.minimum}`);\n if (typeof s.maximum === \"number\" && (value as number) > s.maximum) fail(`maximum is ${s.maximum}`);\n } else if (s.type === \"boolean\" && typeof value !== \"boolean\") fail(\"expected a boolean\");\n}\n","/**\n * Extrovert error types. Every non-2xx response is surfaced as an {@link ApiError} (or a subclass),\n * so callers can branch on `status` / `code` without inspecting raw responses.\n *\n * The redesigned surface returns RFC-9457 `application/problem+json` with a CLOSED\n * machine {@link ProblemCode} enum. When that body is present, the thrown error\n * carries the parsed {@link Problem} on `.problem` and a typed `.problemCode`; the\n * legacy `{ error, message }` envelope is still parsed for back-compat.\n */\n\nimport type { Problem, ProblemCode } from \"./problem.js\";\n\n/** The machine-readable error envelope the Extrovert API returns on failures. */\nexport interface ApiErrorBody {\n error: {\n /** Stable, machine-readable code, e.g. `enrollment_token_exhausted`, `not_found`. */\n code: string;\n /** Human-readable message safe to surface to developers. */\n message: string;\n /** Optional per-field validation detail. */\n details?: Record<string, unknown>;\n };\n /** Request id for support correlation, echoed from the `X-Request-Id` header. */\n request_id?: string;\n}\n\n/**\n * Base error for any failed Extrovert API call. Carries the HTTP `status`, the stable `code`, the\n * `request_id` for support, and the raw `body` for forward-compatible inspection.\n */\nexport class ApiError extends Error {\n /** HTTP status code (e.g. 401, 404, 409, 429). 0 when the request never reached the server. */\n readonly status: number;\n /** Stable machine-readable error code from the body, or a synthesized one for transport errors. */\n readonly code: string;\n /** Request id for support correlation, when present. */\n readonly requestId: string | undefined;\n /** The parsed error body, when the server returned one. */\n readonly body: ApiErrorBody | undefined;\n /**\n * The parsed RFC-9457 problem+json body, when the server returned one. Present on\n * the redesigned surface; `undefined` for the legacy `{ error }` envelope.\n */\n readonly problem: Problem | undefined;\n /**\n * The typed closed-enum problem code, when the server returned problem+json. An\n * unknown/legacy code is coerced to `\"internal\"`; the raw string is always on\n * {@link ApiError.code}.\n */\n readonly problemCode: ProblemCode | undefined;\n\n constructor(args: {\n status: number;\n code: string;\n message: string;\n requestId?: string | undefined;\n body?: ApiErrorBody | undefined;\n problem?: Problem | undefined;\n cause?: unknown;\n }) {\n super(args.message, args.cause === undefined ? undefined : { cause: args.cause });\n this.name = new.target.name;\n this.status = args.status;\n this.code = args.code;\n this.requestId = args.requestId;\n this.body = args.body;\n this.problem = args.problem;\n this.problemCode = args.problem?.code;\n // Maintain prototype chain across transpile targets.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /** True for 4xx responses (client errors that retrying won't fix). */\n get isClientError(): boolean {\n return this.status >= 400 && this.status < 500;\n }\n\n /** True for 5xx responses (server errors that may succeed on retry). */\n get isServerError(): boolean {\n return this.status >= 500;\n }\n}\n\n/** 401 - the agent key / enrollment token was missing, malformed, expired, or revoked. */\nexport class AuthenticationError extends ApiError {}\n\n/** 403 - authenticated, but the key's scopes don't permit this action (capability denied). */\nexport class PermissionError extends ApiError {}\n\n/**\n * 403 `forbidden_scope` - the call is outside the key's CEILING (e.g. a non-org key\n * on the org-wide wildcard, or an issuance that would escalate). A redesign-specific\n * subclass of {@link PermissionError} so existing `instanceof PermissionError`\n * branches keep working.\n */\nexport class ForbiddenScopeError extends PermissionError {}\n\n/**\n * 400 `breadth_required` - an org-tier key/operator issued a bare list that needs a\n * breadth pick; the problem `errors`/`detail` name the next call\n * (`/v1/projects/{id}/inboxes` or `/v1/projects/-/inboxes`).\n */\nexport class BreadthRequiredError extends ApiError {}\n\n/** 404 - the inbox, message, thread, or webhook does not exist (or isn't visible to this tenant). */\nexport class NotFoundError extends ApiError {}\n\n/** 409 - a conflicting state, e.g. an enrollment token that already created its maximum number of inboxes. */\nexport class ConflictError extends ApiError {}\n\n/** 422 - the request body failed validation; see `body.error.details`. */\nexport class ValidationError extends ApiError {}\n\n/**\n * 422 `recipient_suppressed` - a send/reply/forward was rejected because one or\n * more recipients have opted out (list-unsubscribe / suppression). The whole send\n * is rejected (never a silent partial drop). {@link suppressedRecipients} lists the\n * exact addresses to drop; retry the send without them. The scope/origin of the\n * opt-out is deliberately NOT surfaced. A subclass of {@link ValidationError} so\n * existing `instanceof ValidationError` branches keep working.\n */\nexport class RecipientSuppressedError extends ValidationError {\n /** The recipient addresses that are suppressed - drop these and retry. */\n readonly suppressedRecipients: string[];\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.suppressedRecipients = suppressedRecipientsFromProblem(args.problem);\n }\n}\n\n/**\n * Pull the suppressed recipient addresses out of a problem+json body. The server\n * attaches them as per-field hints (`{field:\"recipient\", code:\"recipient_suppressed\",\n * detail:\"<address>\"}`) so the caller can drop exactly those and retry.\n */\nfunction suppressedRecipientsFromProblem(problem: Problem | undefined): string[] {\n const out: string[] = [];\n for (const field of problem?.errors ?? []) {\n if (field.field === \"recipient\" && typeof field.detail === \"string\" && field.detail) {\n out.push(field.detail);\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Review Loop taxonomy - the 422 remediation and the split 409.\n//\n// The server carries an error's recovery FACTS as repeated `{field, code,\n// detail}` problem hints (the same triple `breadth_required` and\n// `recipient_suppressed` already use), so the classes below read them off\n// `.problem.errors` instead of forcing every caller to re-GET the review. Two\n// rules the shapes encode:\n//\n// 1. Every new class extends an EXISTING one (ValidationError / ConflictError),\n// so code already written as `catch (e) { if (e instanceof ConflictError) }`\n// keeps working unchanged and only code that WANTS the distinction has to\n// learn it.\n// 2. Only StaleError and BornStaleError are retryable, and each only a bounded\n// number of times. TerminalError and WrongStateError must never be retried\n// with the same verb - that infinite loop is the bug this taxonomy exists to\n// make impossible.\n// ---------------------------------------------------------------------------\n\n/** First `detail` whose hint `field` matches, or undefined. */\nfunction hintDetail(problem: Problem | undefined, field: string): string | undefined {\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.detail === \"string\" && f.detail) return f.detail;\n }\n return undefined;\n}\n\n/** First `code` whose hint `field` matches, or undefined. */\nfunction hintCode(problem: Problem | undefined, field: string): string | undefined {\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.code === \"string\" && f.code) return f.code;\n }\n return undefined;\n}\n\n/** Every hint `code` under the repeated `field` (e.g. the `allowed_action` list). */\nfunction hintCodes(problem: Problem | undefined, field: string): string[] {\n const out: string[] = [];\n for (const f of problem?.errors ?? []) {\n if (f.field === field && typeof f.code === \"string\" && f.code) out.push(f.code);\n }\n return out;\n}\n\n/** Parse a hint whose `code` carries an integer (revision / version). */\nfunction hintInt(problem: Problem | undefined, field: string): number | undefined {\n const raw = hintCode(problem, field);\n if (raw === undefined) return undefined;\n const n = Number(raw);\n return Number.isInteger(n) ? n : undefined;\n}\n\n/**\n * 422 `intent_required` - the inbox's resolved review policy requires a human to\n * see this message before it goes out, and the request carried no `intent`.\n *\n * **Nothing was sent and nothing was queued.** The server checks this before it\n * writes any row, which is what makes the amended retry safe: add an `intent`\n * and re-POST the SAME request. {@link retryWith} is the literal JSON fragment to\n * splice in, and the human-readable remediation (the full recipe, including how\n * to monitor the resulting review) is on `.message` / `.problem.detail`.\n *\n * Under `require_review` - the default for every account - this is the FIRST\n * thing most agents hit. Read `effective_review_policy` on\n * `GET /v1/inboxes/{id}` once at start-up and compose an intent up front instead\n * of learning the policy by being refused. A subclass of {@link ValidationError}\n * so existing `instanceof ValidationError` branches keep working.\n */\nexport class IntentRequiredError extends ValidationError {\n /** The resolved review policy, e.g. `require_review`. */\n readonly policy: string | undefined;\n /** Where the policy came from - a per-inbox override or the account default. */\n readonly policySource: string | undefined;\n /** Literal JSON to merge into the original request body, then retry once. */\n readonly retryWith: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n // The server ships `policy` as `<policy> (source: <source>)` so one hint\n // carries both halves; split rather than demand a second field.\n const policyHint = hintDetail(args.problem, \"policy\");\n const match = policyHint?.match(/^([^\\s(]+)\\s*(?:\\(source:\\s*(.*?)\\s*\\))?$/);\n this.policy = match?.[1];\n this.policySource = match?.[2];\n this.retryWith = hintDetail(args.problem, \"retry_with\");\n }\n}\n\n/**\n * Base for the review-loop 409s. Carries the live state and CAS keys the server\n * attached so a retry (where one is legal at all) needs no extra `get_review`,\n * and the `allowed_action` verbs that ARE legal from the current state so an\n * agent is told what to do instead of guessing.\n *\n * Extends {@link ConflictError}: every one of these used to be a bare 409, and\n * nothing that catches `ConflictError` should have to change.\n */\nexport class ReviewConflictError extends ConflictError {\n /** The review's CURRENT state (`needs_review`, `approved`, `sent`, …). */\n readonly currentState: string | undefined;\n /** The current revision - pass it as `parent_revision` on a legal retry. */\n readonly currentRevision: number | undefined;\n /** The current row version (the optional belt-and-braces CAS). */\n readonly currentVersion: number | undefined;\n /** The verbs that ARE legal from {@link currentState}, e.g. `submit_revision`. */\n readonly allowedActions: string[];\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.currentState = hintCode(args.problem, \"state\");\n this.currentRevision = hintInt(args.problem, \"revision\");\n this.currentVersion = hintInt(args.problem, \"version\");\n this.allowedActions = hintCodes(args.problem, \"allowed_action\");\n }\n /**\n * Whether retrying the same call could ever succeed. False for every subclass\n * except {@link StaleError} and {@link BornStaleError} - and true there only\n * after re-reading and re-applying on top of the other party's change.\n */\n get isRetryable(): boolean {\n return false;\n }\n}\n\n/**\n * 409 `stale` - the `(revision[, version])` you named is no longer current\n * because a human or reviewer moved the draft. **Nothing was mutated.**\n *\n * The one genuinely retryable conflict, and bounded (≤3): re-read the draft and\n * the feedback, re-apply your edit on top of theirs, resubmit with\n * {@link ReviewConflictError.currentRevision} as the new `parent_revision`. The\n * current state/revision/version ride along on the error, so the retry costs no\n * extra round trip.\n */\nexport class StaleError extends ReviewConflictError {\n override get isRetryable(): boolean {\n return true;\n }\n}\n\n/**\n * 409 `wrong_state` - this VERB is illegal from the review's current state, but\n * the draft is still live.\n *\n * **Never retry the same verb**; the timing is not the problem, the choice of\n * call is. Read {@link ReviewConflictError.allowedActions} and pick one of those.\n */\nexport class WrongStateError extends ReviewConflictError {}\n\n/**\n * 409 `terminal` - the review has already finished (sent / auto_sent /\n * cancelled). Nothing will EVER succeed on it.\n *\n * **Stop.** A `front_run_next` review event is waiting on the durable queue with\n * the outcome; drain it, ack it, and compose a NEW message if one is still\n * wanted. {@link sentMessageId} is the message that actually went out, when the\n * review reached a delivery.\n */\nexport class TerminalError extends ReviewConflictError {\n /** The message that was actually delivered, when this review sent one. */\n readonly sentMessageId: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0]) {\n super(args);\n this.sentMessageId = hintCode(args.problem, \"sent_message_id\");\n }\n}\n\n/**\n * 409 `born_stale` - the redraft was composed against an OLDER writing-rule\n * high-water than the one now in force. **Nothing was mutated** and the composer\n * has been re-nudged.\n *\n * Retryable at most once per rule high-water: re-read the rules, re-apply them,\n * resubmit - or `restamp_review` when re-reading shows nothing genuinely needed\n * to change. Restamping when the body DID need to change makes the draft lie to\n * the born-stale accounting, so do it only for a true no-op.\n */\nexport class BornStaleError extends ReviewConflictError {\n override get isRetryable(): boolean {\n return true;\n }\n}\n\n/**\n * 409 `send_needs_reconciliation` - a delivery attempt reached (or may have\n * reached) the mail provider and the process died before recording the outcome,\n * so the review is parked for recover-by-Message-ID.\n *\n * **Do not resend.** That is exactly how one message goes out twice. Poll the\n * review (`closed` / `sent_message_id`) until an operator or the recovery path\n * resolves it.\n */\nexport class SendNeedsReconciliationError extends ReviewConflictError {}\n\n/**\n * 409 `idempotency_conflict` - the same `Idempotency-Key` was replayed with a\n * DIFFERENT request body within the same scope. The replay key is a hash of the\n * raw bytes, so \"same message, different spelling\" counts as different.\n *\n * A caller bug, not a race: do not retry under that key. Either send the byte-\n * identical body, or use a new key for the genuinely new message.\n */\nexport class IdempotencyConflictError extends ConflictError {}\n\n/**\n * 503 `unavailable` - a dependency could not be read, so the request was failed\n * CLOSED rather than served on a guess. On the send path this specifically means\n * the account's review policy was unreadable: relaying unsupervised mail for a\n * customer whose stated policy we could not see is the failure that would be\n * worse than the outage.\n *\n * Retryable after {@link retryAfter} seconds. Distinct from `not_configured`,\n * which means the deployment does not have the capability at all.\n */\nexport class UnavailableError extends ApiError {\n /** Seconds to wait before retrying, from the `Retry-After` header. */\n readonly retryAfter: number | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { retryAfter?: number }) {\n super(args);\n this.retryAfter = args.retryAfter;\n }\n}\n\n/** 402 - payment required (x402 test-mode). `paymentRequired` holds the raw challenge header. */\nexport class PaymentRequiredError extends ApiError {\n /** The raw `PAYMENT-REQUIRED` header challenge to sign + retry (EIP-3009, Base Sepolia). */\n readonly paymentRequired: string | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { paymentRequired?: string }) {\n super(args);\n this.paymentRequired = args.paymentRequired;\n }\n}\n\n/** 429 - rate limited. `retryAfter` is the server's hint in seconds, when provided. */\nexport class RateLimitError extends ApiError {\n /** Seconds to wait before retrying, parsed from the `Retry-After` header. */\n readonly retryAfter: number | undefined;\n constructor(args: ConstructorParameters<typeof ApiError>[0] & { retryAfter?: number }) {\n super(args);\n this.retryAfter = args.retryAfter;\n }\n}\n\n/** The request failed before a response was received (network down, DNS, abort, timeout). */\nexport class ConnectionError extends ApiError {\n constructor(message: string, cause?: unknown) {\n super({ status: 0, code: \"connection_error\", message, cause });\n }\n}\n\n/** The request was aborted by the caller's `AbortSignal` or the client `timeout`. */\nexport class TimeoutError extends ApiError {\n constructor(message = \"Request timed out\", cause?: unknown) {\n super({ status: 0, code: \"timeout\", message, cause });\n }\n}\n\n/** Map an HTTP status (and the typed problem code, when present) to the most specific {@link ApiError} subclass. */\nexport function errorForStatus(args: {\n status: number;\n code: string;\n message: string;\n requestId?: string | undefined;\n body?: ApiErrorBody | undefined;\n problem?: Problem | undefined;\n retryAfter?: number | undefined;\n paymentRequired?: string | undefined;\n}): ApiError {\n // Prefer the closed problem code when the redesigned surface returned problem+json:\n // it distinguishes forbidden_scope / breadth_required from the generic status class.\n switch (args.problem?.code) {\n case \"forbidden_scope\":\n return new ForbiddenScopeError(args);\n case \"breadth_required\":\n return new BreadthRequiredError(args);\n case \"idempotency_conflict\":\n return new IdempotencyConflictError(args);\n case \"recipient_suppressed\":\n return new RecipientSuppressedError(args);\n // Review Loop taxonomy. These MUST be matched on the code, not the status:\n // five of them share HTTP 409 and the whole point is that an agent takes a\n // different action on each.\n case \"intent_required\":\n return new IntentRequiredError(args);\n case \"stale\":\n return new StaleError(args);\n case \"wrong_state\":\n return new WrongStateError(args);\n case \"terminal\":\n return new TerminalError(args);\n case \"born_stale\":\n return new BornStaleError(args);\n case \"send_needs_reconciliation\":\n return new SendNeedsReconciliationError(args);\n case \"graduation_locked\":\n case \"maturity_gate_unmet\":\n case \"scope_taken\":\n // Still a 409 with the review hints attached, but there is no distinct\n // recovery move: the caller reads the state hints and asks a human.\n return new ReviewConflictError(args);\n case \"unavailable\":\n return new UnavailableError(args);\n default:\n break;\n }\n switch (args.status) {\n case 401:\n return new AuthenticationError(args);\n case 402:\n return new PaymentRequiredError(args);\n case 403:\n return new PermissionError(args);\n case 404:\n return new NotFoundError(args);\n case 409:\n return new ConflictError(args);\n case 422:\n return new ValidationError(args);\n case 429:\n return new RateLimitError(args);\n default:\n return new ApiError(args);\n }\n}\n","/**\n * RFC-9457 problem+json errors (redesign §5.1 / §6.2).\n *\n * The redesigned surface returns `application/problem+json` with a CLOSED machine\n * `code` enum clients switch on. The SDK parses it into {@link Problem} and raises a\n * {@link ProblemError} whose `code` is the typed {@link ProblemCode} union, so callers\n * branch exhaustively without inspecting raw bodies. The legacy `{ error, message }`\n * envelope is still parsed by the transport (back-compat); when present it is mapped\n * onto the closest {@link ProblemCode}.\n */\n\n/**\n * The CLOSED problem code enum (mirrors `components.schemas.Problem.code` in the\n * frozen OpenAPI). Adding a member is a contract change - keep it in lockstep with\n * the Go `ProblemCode` enum.\n */\nexport type ProblemCode =\n | \"bad_request\"\n | \"unauthorized\"\n | \"forbidden_scope\"\n | \"not_found\"\n | \"conflict\"\n | \"idempotency_conflict\"\n | \"breadth_required\"\n | \"quota_exceeded\"\n | \"rate_limited\"\n | \"domain_not_allowed\"\n | \"recipient_blocked\"\n | \"recipient_suppressed\"\n | \"not_configured\"\n | \"domain_unavailable\"\n | \"internal\"\n // --- Review Loop taxonomy -------------------------------------------------\n //\n // Before these members every review-loop failure answered a bare `409\n // \"conflict\"` (or, on the send path, no machine code at all), so a stale CAS,\n // an illegal verb and a review a human had already closed were\n // indistinguishable - and a retry loop written against `status === 409`\n // retried all three, including the one that can never succeed. Each member\n // below exists because the agent must take a DIFFERENT action on it; see\n // {@link REVIEW_PROBLEM_RETRYABLE} for which are worth retrying at all.\n | \"intent_required\"\n | \"wrong_state\"\n | \"terminal\"\n | \"stale\"\n | \"born_stale\"\n | \"send_needs_reconciliation\"\n | \"graduation_locked\"\n | \"maturity_gate_unmet\"\n | \"scope_taken\"\n | \"unavailable\";\n\n/** The full set of {@link ProblemCode} values (for runtime validation / exhaustive UIs). */\nexport const PROBLEM_CODES: readonly ProblemCode[] = [\n \"bad_request\",\n \"unauthorized\",\n \"forbidden_scope\",\n \"not_found\",\n \"conflict\",\n \"idempotency_conflict\",\n \"breadth_required\",\n \"quota_exceeded\",\n \"rate_limited\",\n \"domain_not_allowed\",\n \"recipient_blocked\",\n \"recipient_suppressed\",\n \"not_configured\",\n \"domain_unavailable\",\n \"internal\",\n \"intent_required\",\n \"wrong_state\",\n \"terminal\",\n \"stale\",\n \"born_stale\",\n \"send_needs_reconciliation\",\n \"graduation_locked\",\n \"maturity_gate_unmet\",\n \"scope_taken\",\n \"unavailable\",\n] as const;\n\n/**\n * Which review-loop problem codes are worth retrying, and which are a dead end.\n *\n * This table is the whole point of splitting the 409: only a failed\n * compare-and-set (`stale`) and a redraft built against an older rule high-water\n * (`born_stale`) describe a situation a retry can fix, and each only a bounded\n * number of times (re-read, re-apply on top of the other party's change,\n * resubmit). `wrong_state` means the verb is wrong, not the timing - read the\n * `allowed_action` hints and pick another one. `terminal` means the review is\n * finished forever; a `front_run_next` nudge is already waiting on the queue\n * with the outcome. `send_needs_reconciliation` means a delivery attempt is\n * unconfirmed - resending is precisely how a message goes out twice.\n *\n * `intent_required` is listed false because retrying the SAME bytes fails\n * identically: the fix is to ADD an `intent` and send a different request. The\n * server states in its `detail` that nothing was sent and nothing was queued, so\n * that amended retry is safe.\n */\nexport const REVIEW_PROBLEM_RETRYABLE: Readonly<Record<string, boolean>> = {\n stale: true,\n born_stale: true,\n wrong_state: false,\n terminal: false,\n send_needs_reconciliation: false,\n intent_required: false,\n idempotency_conflict: false,\n} as const;\n\n/** One per-field validation detail in a {@link Problem}. */\nexport interface ProblemField {\n field?: string;\n code?: string;\n detail?: string;\n}\n\n/** The RFC-9457 problem+json body. */\nexport interface Problem {\n /** Dereferenceable URI under `https://extrovert.dev/problems/{code}`. */\n type: string;\n /** Short, human-readable summary of the problem type. */\n title: string;\n /** HTTP status code, duplicated in the body. */\n status: number;\n /** Human-readable, instance-specific detail. */\n detail?: string;\n /** The closed machine code clients switch on. */\n code: ProblemCode;\n /** Per-request id for support correlation. */\n request_id?: string;\n /** Optional machine hints (e.g. `breadth_required` may name the next calls). */\n errors?: ProblemField[];\n}\n\n/** True when `value` is a member of the closed {@link ProblemCode} enum. */\nexport function isProblemCode(value: unknown): value is ProblemCode {\n return typeof value === \"string\" && (PROBLEM_CODES as readonly string[]).includes(value);\n}\n\n/**\n * Parse an unknown JSON body into a {@link Problem} when it carries the required\n * problem+json shape (`code` in the closed enum), else `undefined`. Unknown codes\n * are coerced to `\"internal\"` so the typed union holds while the raw value is still\n * available via {@link ProblemError.rawCode}.\n */\nexport function parseProblem(body: unknown): { problem: Problem; rawCode: string } | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const b = body as Record<string, unknown>;\n // problem+json must have a string `code`; the legacy envelope uses `error` instead.\n if (typeof b.code !== \"string\") return undefined;\n const rawCode = b.code;\n const code: ProblemCode = isProblemCode(rawCode) ? rawCode : \"internal\";\n const problem: Problem = {\n type: typeof b.type === \"string\" ? b.type : `https://extrovert.dev/problems/${rawCode}`,\n title: typeof b.title === \"string\" ? b.title : rawCode,\n status: typeof b.status === \"number\" ? b.status : 0,\n code,\n detail: typeof b.detail === \"string\" ? b.detail : undefined,\n request_id: typeof b.request_id === \"string\" ? b.request_id : undefined,\n errors: Array.isArray(b.errors) ? (b.errors as ProblemField[]) : undefined,\n };\n return { problem, rawCode };\n}\n","/**\n * Dated API version pin (redesign §5.4).\n *\n * The Extrovert API is versioned by a dated `Extrovert-Version` request header. A\n * request that omits the header is served the latest version; a pinned older\n * version is transformed to the current shape by a server-side shim. The SDK pins\n * {@link CURRENT_API_VERSION} on every request by default so an app's behavior is\n * stable across server deploys; override it per client via\n * `new Extrovert({ apiVersion: \"YYYY-MM-DD\" })`.\n */\n\n/** The dated API version this SDK was built against. Sent as `Extrovert-Version`. */\nexport const CURRENT_API_VERSION = \"2026-06-23\";\n\n/** The HTTP header carrying the dated API version (request + echoed on the response). */\nexport const API_VERSION_HEADER = \"Extrovert-Version\";\n","/**\n * fetch-based transport for the Extrovert API.\n *\n * Runtime-agnostic: uses the global `fetch` (Node 18+, Cloudflare Workers, Vercel Edge, Deno,\n * browsers). No Node-only APIs, no dependencies. Retries idempotent requests with jittered backoff\n * on 429/5xx, honors `Retry-After`, and surfaces every failure as a typed {@link ApiError}.\n */\n\nimport {\n ApiError,\n ConnectionError,\n TimeoutError,\n errorForStatus,\n type ApiErrorBody,\n} from \"./errors.js\";\nimport { parseProblem, type Problem } from \"./problem.js\";\nimport { API_VERSION_HEADER, CURRENT_API_VERSION } from \"./version.js\";\n\n/** The library version, surfaced in the User-Agent. Kept in sync with package.json by build. */\nexport const SDK_VERSION = \"0.1.0-pre.11\";\n\nexport interface RetryOptions {\n /** Max retry attempts for idempotent requests on 429/5xx/network errors. Default 2. */\n maxRetries: number;\n /** Base backoff in ms (grows exponentially with jitter). Default 250. */\n baseDelayMs: number;\n /** Cap on a single backoff delay. Default 8000. */\n maxDelayMs: number;\n}\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"DELETE\" | \"PATCH\" | \"PUT\";\n path: string;\n /** Query params; undefined/null values are dropped. */\n query?: Record<string, string | number | boolean | undefined | null>;\n /** JSON body; serialized as `application/json`. */\n body?: unknown;\n /** Per-request idempotency key, sent as the `Idempotency-Key` header. */\n idempotencyKey?: string;\n /** Per-request timeout override (ms). */\n timeoutMs?: number;\n /** Per-request abort signal, merged with the timeout signal. */\n signal?: AbortSignal;\n /** Force this request to be treated as (non-)retryable, overriding the method default. */\n retryable?: boolean;\n /**\n * Return the raw response body as text instead of JSON-parsing it. Used for the\n * raw `.eml` download (Content-Type `message/rfc822`), which is not JSON.\n */\n raw?: boolean;\n /**\n * Return the raw response as binary, alongside the Content-Type and\n * Content-Disposition headers. Used for the attachment download (arbitrary\n * bytes), which must not pass through text/JSON decoding.\n */\n binary?: boolean;\n}\n\n/** A binary response body plus the headers needed to save/serve it. */\nexport interface BinaryResponse {\n bytes: Uint8Array;\n contentType: string;\n contentDisposition: string;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiKey: string;\n /** Default timeout in ms. Default 30000. wait_for_email overrides this per call. */\n timeoutMs: number;\n retry: RetryOptions;\n /** Custom fetch (e.g. for tests or a proxy). Defaults to the global fetch. */\n fetch: typeof fetch;\n /** Extra headers merged into every request. */\n defaultHeaders: Record<string, string>;\n /**\n * Dated API version pinned on every request as the `Extrovert-Version` header\n * (redesign §5.4). Defaults to {@link CURRENT_API_VERSION}.\n */\n apiVersion: string;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query?: RequestOptions[\"query\"],\n): string {\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n const rel = path.startsWith(\"/\") ? path : `/${path}`;\n const url = new URL(base + rel);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 429 || (status >= 500 && status <= 599);\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(new TimeoutError(\"Aborted during backoff\"));\n const id = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(id);\n reject(new TimeoutError(\"Aborted during backoff\"));\n },\n { once: true },\n );\n });\n}\n\n/** Compose the caller's signal with a timeout into a single AbortSignal. */\nfunction withTimeout(timeoutMs: number, signal?: AbortSignal): { signal: AbortSignal; cancel: () => void } {\n const controller = new AbortController();\n const onAbort = () => controller.abort((signal as AbortSignal & { reason?: unknown })?.reason);\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n const timer = setTimeout(() => controller.abort(new TimeoutError()), timeoutMs);\n return {\n signal: controller.signal,\n cancel: () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n\nexport class HttpClient {\n constructor(private readonly config: HttpClientConfig) {}\n\n async request<T>(options: RequestOptions): Promise<T> {\n const url = buildUrl(this.config.baseUrl, options.path, options.query);\n const retryable =\n options.retryable ?? (options.method === \"GET\" || options.method === \"DELETE\");\n const maxAttempts = retryable ? this.config.retry.maxRetries + 1 : 1;\n const timeoutMs = options.timeoutMs ?? this.config.timeoutMs;\n\n let lastError: ApiError | undefined;\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const { signal, cancel } = withTimeout(timeoutMs, options.signal);\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n // Accept problem+json (redesign) alongside json so the typed Problem body parses.\n Accept: \"application/json, application/problem+json\",\n \"User-Agent\": `extrovert-sdk-ts/${SDK_VERSION}`,\n // Pin the dated API version on every request (redesign §5.4).\n [API_VERSION_HEADER]: this.config.apiVersion || CURRENT_API_VERSION,\n ...this.config.defaultHeaders,\n };\n if (options.idempotencyKey) headers[\"Idempotency-Key\"] = options.idempotencyKey;\n let bodyInit: string | undefined;\n if (options.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n bodyInit = JSON.stringify(options.body);\n }\n\n const response = await this.config.fetch(url, {\n method: options.method,\n redirect: \"error\",\n headers,\n body: bodyInit,\n signal,\n });\n\n if (response.ok) {\n cancel();\n if (response.status === 204) return undefined as T;\n // Binary requests (e.g. attachment bytes) return the raw bytes plus the\n // headers needed to save/serve the file, before any text decoding.\n if (options.binary) {\n const buf = new Uint8Array(await response.arrayBuffer());\n const binary: BinaryResponse = {\n bytes: buf,\n contentType: response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n contentDisposition: response.headers.get(\"content-disposition\") ?? \"\",\n };\n return binary as unknown as T;\n }\n const text = await response.text();\n // Raw requests (e.g. message/rfc822 .eml) return the body verbatim.\n if (options.raw) return text as unknown as T;\n return (text ? JSON.parse(text) : undefined) as T;\n }\n\n const apiError = await toApiError(response);\n cancel();\n // Retry transient failures on idempotent requests.\n if (retryable && attempt < maxAttempts - 1 && isRetryableStatus(response.status)) {\n lastError = apiError;\n await sleep(this.backoff(attempt, apiError), options.signal);\n continue;\n }\n throw apiError;\n } catch (err) {\n cancel();\n if (err instanceof ApiError) {\n // Already a typed API error (thrown above) - propagate.\n if (!(err.isServerError && retryable && attempt < maxAttempts - 1)) throw err;\n lastError = err;\n await sleep(this.backoff(attempt, err), options.signal);\n continue;\n }\n // Transport-level failure (network, abort, timeout).\n const transportError = this.classifyTransportError(err);\n if (retryable && attempt < maxAttempts - 1 && transportError instanceof ConnectionError) {\n lastError = transportError;\n await sleep(this.backoff(attempt), options.signal);\n continue;\n }\n throw transportError;\n }\n }\n // Exhausted retries.\n throw lastError ?? new ConnectionError(\"Request failed after retries\");\n }\n\n /**\n * Open a Server-Sent-Events stream and yield each parsed frame as it arrives.\n *\n * This bypasses the JSON request/retry path: it does a single streaming `fetch`,\n * reads the response body incrementally, splits it on the SSE frame delimiter\n * (a blank line), and yields one {@link SseFrame} per frame (skipping comment\n * heartbeats). The connection stays open until the server closes it or the\n * caller's `signal` aborts. Reconnection/resume is the caller's job (re-call with\n * the last `id` as Last-Event-ID), so this primitive stays small and predictable.\n */\n async *stream(options: {\n path: string;\n query?: RequestOptions[\"query\"];\n lastEventId?: string;\n signal?: AbortSignal;\n }): AsyncGenerator<SseFrame, void, unknown> {\n const url = buildUrl(this.config.baseUrl, options.path, options.query);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.apiKey}`,\n Accept: \"text/event-stream\",\n \"User-Agent\": `extrovert-sdk-ts/${SDK_VERSION}`,\n [API_VERSION_HEADER]: this.config.apiVersion || CURRENT_API_VERSION,\n ...this.config.defaultHeaders,\n };\n if (options.lastEventId) headers[\"Last-Event-ID\"] = options.lastEventId;\n\n let response: Response;\n try {\n // No timeout: an SSE stream is intentionally long-lived. Only the caller's\n // signal closes it.\n response = await this.config.fetch(url, { method: \"GET\", headers, signal: options.signal });\n } catch (err) {\n throw this.classifyTransportError(err);\n }\n if (!response.ok) {\n throw await toApiError(response);\n }\n const body = response.body;\n if (!body) {\n throw new ConnectionError(\"SSE response had no readable body\");\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n for (;;) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // Frames are separated by a blank line. Tolerate both \\n\\n and \\r\\n\\r\\n.\n let sep: number;\n while ((sep = indexOfFrameSeparator(buffer)) !== -1) {\n const rawFrame = buffer.slice(0, sep);\n buffer = buffer.slice(sep).replace(/^(\\r?\\n){2}/, \"\");\n const frame = parseSseFrame(rawFrame);\n if (frame) yield frame;\n }\n }\n } finally {\n // Best-effort close of the underlying stream when the consumer stops early.\n try {\n await reader.cancel();\n } catch {\n // ignore\n }\n }\n }\n\n private backoff(attempt: number, error?: ApiError): number {\n if (error && \"retryAfter\" in error && typeof error.retryAfter === \"number\") {\n return Math.min(error.retryAfter * 1000, this.config.retry.maxDelayMs);\n }\n const exp = this.config.retry.baseDelayMs * 2 ** attempt;\n const jitter = Math.random() * this.config.retry.baseDelayMs;\n return Math.min(exp + jitter, this.config.retry.maxDelayMs);\n }\n\n private classifyTransportError(err: unknown): ApiError {\n if (err instanceof TimeoutError) return err;\n const name = (err as { name?: string })?.name;\n if (name === \"AbortError\" || name === \"TimeoutError\") {\n return new TimeoutError(\"Request timed out or was aborted\", err);\n }\n const message = err instanceof Error ? err.message : String(err);\n return new ConnectionError(`Network request failed: ${message}`, err);\n }\n}\n\n/** One parsed Server-Sent-Events frame: the `id:`, `event:`, and joined `data:`. */\nexport interface SseFrame {\n /** The `id:` field - the monotonic resume token (Last-Event-ID). */\n id?: string;\n /** The `event:` field - the event type. Defaults to `\"message\"` per the SSE spec. */\n event: string;\n /** The joined `data:` lines (newline-separated, per the SSE spec). */\n data: string;\n}\n\n/** Index of the next frame separator (blank line) in an SSE buffer, or -1. */\nfunction indexOfFrameSeparator(buf: string): number {\n const lf = buf.indexOf(\"\\n\\n\");\n const crlf = buf.indexOf(\"\\r\\n\\r\\n\");\n if (lf === -1) return crlf;\n if (crlf === -1) return lf;\n return Math.min(lf, crlf);\n}\n\n/**\n * Parse one raw SSE frame (the text between blank-line delimiters) into a\n * {@link SseFrame}. Comment lines (starting with `:`, e.g. heartbeats) and frames\n * with no `data` yield `undefined` so callers skip them.\n */\nfunction parseSseFrame(raw: string): SseFrame | undefined {\n let id: string | undefined;\n let event = \"message\";\n const dataLines: string[] = [];\n for (const line of raw.split(/\\r?\\n/)) {\n if (line === \"\" || line.startsWith(\":\")) continue;\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n // A single leading space after the colon is stripped, per the SSE spec.\n let value = colon === -1 ? \"\" : line.slice(colon + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n switch (field) {\n case \"id\":\n id = value;\n break;\n case \"event\":\n event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n default:\n // ignore unknown fields (e.g. retry:)\n break;\n }\n }\n if (dataLines.length === 0) return undefined;\n return { id, event, data: dataLines.join(\"\\n\") };\n}\n\n/** Build a typed error from a non-2xx response, parsing the JSON envelope when present. */\nasync function toApiError(response: Response): Promise<ApiError> {\n const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n const retryAfterRaw = response.headers.get(\"retry-after\");\n const retryAfter = retryAfterRaw ? Number(retryAfterRaw) : undefined;\n const paymentRequired = response.headers.get(\"payment-required\") ?? undefined;\n\n let body: ApiErrorBody | undefined;\n let problem: Problem | undefined;\n let code = `http_${response.status}`;\n let message = `Extrovert API request failed with status ${response.status}`;\n try {\n const text = await response.text();\n if (text) {\n const parsed = JSON.parse(text) as unknown;\n // Redesign surface: RFC-9457 problem+json (has a closed `code`).\n const parsedProblem = parseProblem(parsed);\n if (parsedProblem) {\n problem = parsedProblem.problem;\n code = parsedProblem.rawCode || code;\n message = parsedProblem.problem.detail || parsedProblem.problem.title || message;\n // Mirror onto the legacy body shape so `.body.error.code` still resolves.\n body = { error: { code, message }, request_id: parsedProblem.problem.request_id };\n } else if (parsed && typeof parsed === \"object\") {\n // LEGACY envelope. Two shapes are in the wild and BOTH must parse, or the\n // caller gets `http_409` and no server message - which is exactly what\n // happened until now, and why review-loop code could only branch on\n // `err.status`:\n //\n // (a) `{ error: { code, message } }` - the nested form this parser was\n // written for.\n // (b) `{ error: \"conflict\", message: \"…\" }` - what the Go `writeError`\n // helper actually emits (a STRING `error` plus a TOP-LEVEL\n // `message`), still used by every `/v1/admin/*` route.\n //\n // Reading only (a) against a (b) body yields `undefined` for BOTH halves.\n // The code fell back to `http_<status>` and the message to the generic\n // \"request failed with status N\" - losing the one string that says WHY.\n const legacy = parsed as {\n error?: string | { code?: string; message?: string; details?: Record<string, unknown> };\n message?: string;\n request_id?: string;\n };\n const legacyCode =\n typeof legacy.error === \"string\" ? legacy.error : legacy.error?.code;\n const legacyMessage =\n (typeof legacy.error === \"object\" ? legacy.error?.message : undefined) ?? legacy.message;\n if (legacyCode || legacyMessage) {\n code = legacyCode || code;\n message = legacyMessage || message;\n // Normalize onto the nested ApiErrorBody shape so `.body.error.code`\n // resolves for both wire spellings.\n body = {\n error: {\n code,\n message,\n ...(typeof legacy.error === \"object\" && legacy.error?.details\n ? { details: legacy.error.details }\n : {}),\n },\n ...(legacy.request_id ? { request_id: legacy.request_id } : {}),\n };\n }\n }\n }\n } catch {\n // Non-JSON error body; keep the generic message.\n }\n\n return errorForStatus({\n status: response.status,\n code,\n message,\n requestId: problem?.request_id ?? requestId,\n body,\n problem,\n retryAfter: Number.isFinite(retryAfter) ? retryAfter : undefined,\n paymentRequired,\n });\n}\n","/** Validate supported inbox list responses. A schema mismatch is never an empty inventory. */\nexport function normalizeInboxPage<T>(raw: unknown, resource = \"inbox\"): {\n items: T[]; has_more: boolean; next_cursor?: string; total?: number;\n} {\n const invalid = () => { throw new Error(`Invalid ${resource} list response; inventory is unavailable, not empty.`); };\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return invalid();\n const value = raw as Record<string, unknown>;\n const canonical = \"object\" in value || \"data\" in value;\n const items = canonical ? value.data : value.inboxes ?? value.items;\n if (!Array.isArray(items)) return invalid();\n const cursor = value.next_cursor ?? value.next_page;\n if (cursor != null && (typeof cursor !== \"string\" || (canonical && !cursor))) return invalid();\n if (canonical && (! (\"next_cursor\" in value) || value.object !== \"list\" || typeof value.has_more !== \"boolean\" ||\n value.has_more !== Boolean(cursor))) return invalid();\n if (value.total !== undefined &&\n (typeof value.total !== \"number\" || !Number.isSafeInteger(value.total) || value.total < items.length)) return invalid();\n const page: { items: T[]; has_more: boolean; next_cursor?: string; total?: number } = {\n items: items as T[], has_more: Boolean(cursor),\n };\n if (typeof cursor === \"string\" && cursor) page.next_cursor = cursor;\n if (typeof value.total === \"number\") page.total = value.total;\n return page;\n}\n","import type { AdministrativeRequest } from \"./administration.js\";\n\n/** Explicit offline full-control fixture; ordinary mock agent keys stay scoped. */\nexport const ADMINISTRATIVE_FIXTURE_KEY = \"ev_credential_mock_full_account\";\nexport class AdministrativeFixtures {\n private projects = [{ id: \"prj_demo\", org_id: \"org_demo\", customer_id: \"cus_demo\", name: \"Demo\", slug: \"demo\", description: \"\", is_default: true, lifecycle_status: \"active\", version: 1, created_at: \"2026-09-06T00:00:00Z\", updated_at: \"2026-09-06T00:00:00Z\" }];\n constructor(private readonly credential = \"\") {}\n\n async request(request: AdministrativeRequest): Promise<unknown> {\n if (this.credential !== ADMINISTRATIVE_FIXTURE_KEY) throw new Error(\"Full account control is required. For offline administration use ADMINISTRATIVE_FIXTURE_KEY.\");\n const org = { id: \"org_demo\", name: \"Demo organization\", role: \"owner\" };\n if (request.method === \"GET\" && request.path === \"/v1/admin/me\") return { user_id: \"user_demo\", is_admin: false, orgs: [org], projects: this.projects };\n if (request.method === \"GET\" && request.path === \"/v1/admin/orgs\") return { orgs: [org] };\n if (request.path === \"/v1/admin/orgs/org_demo/projects\") {\n if (request.method === \"GET\") return { projects: this.projects.map((p) => ({ ...p })) };\n if (request.method === \"POST\") {\n const body = request.body as { name: string; slug?: string };\n const project = { ...this.projects[0]!, id: `prj_demo_${this.projects.length}`, name: body.name, slug: body.slug ?? body.name.toLowerCase().replace(/\\s+/g, \"-\"), is_default: false };\n this.projects.push(project);\n return { ...project };\n }\n }\n throw new Error(`No offline administrative fixture for ${request.method} ${request.path}. Use a test HTTP server for this action; no action was performed.`);\n }\n}\n","/**\n * OTP / verification-link extraction.\n *\n * Find the most likely one-time code and preferred verification link in a message body. Pure and\n * dependency-free so it runs in Node, the edge, and the browser.\n */\n\nimport type { ExtractedCredentials, Message } from \"./models.js\";\n\n/**\n * Common OTP phrasings, ordered by specificity. A code adjacent to \"code/OTP/verification/PIN\" is a\n * far stronger signal than a bare 6-digit run (which could be a price, year, or zip).\n */\nconst OTP_CONTEXT_PATTERNS: RegExp[] = [\n /(?:one[-\\s]?time\\s*(?:code|password|pin)|verification\\s*code|security\\s*code|auth(?:entication)?\\s*code|access\\s*code|login\\s*code|confirmation\\s*code|your\\s*code|otp|pin)\\D{0,40}?(\\d[\\d\\s-]{3,9}\\d)/i,\n /(\\d[\\d\\s-]{3,9}\\d)\\D{0,30}?(?:is\\s*your|to\\s*(?:verify|confirm|sign|log))/i,\n];\n\n/** Fallback: a standalone 4–8 digit run that isn't obviously a year or currency amount. */\nconst OTP_BARE_PATTERN = /(?<![\\d.,$£€])\\b(\\d{4,8})\\b(?![\\d.,])/g;\n\n/** Verification / magic links, preferring ones whose URL or anchor hints at verification. */\nconst VERIFY_LINK_HINTS =\n /(verify|confirm|activate|magic|auth|login|sign[-_]?in|token|otp|reset|validate)/i;\n\nconst URL_PATTERN = /https?:\\/\\/[^\\s\"'<>)\\]]+/gi;\n\n/** Normalize a captured code: strip the spaces/dashes some senders insert for readability. */\nfunction normalizeCode(raw: string): string {\n return raw.replace(/[\\s-]/g, \"\");\n}\n\n/** Extract the most likely OTP code from a body of text, or null. */\nexport function extractOtp(body: string): string | null {\n for (const pattern of OTP_CONTEXT_PATTERNS) {\n const m = pattern.exec(body);\n if (m && m[1]) {\n const code = normalizeCode(m[1]);\n if (code.length >= 4 && code.length <= 10) return code;\n }\n }\n // Fallback: first plausible standalone digit run, skipping obvious years (1900–2099).\n let match: RegExpExecArray | null;\n OTP_BARE_PATTERN.lastIndex = 0;\n while ((match = OTP_BARE_PATTERN.exec(body)) !== null) {\n const code = match[1]!;\n const n = Number(code);\n if (code.length === 4 && n >= 1900 && n <= 2099) continue;\n return code;\n }\n return null;\n}\n\n/** Extract the most likely verification link from a body, or null. */\nexport function extractLink(body: string): string | null {\n const urls = body.match(URL_PATTERN);\n if (!urls || urls.length === 0) return null;\n const cleaned = urls.map((u) => u.replace(/[.,;:)]+$/, \"\"));\n const hinted = cleaned.find((u) => VERIFY_LINK_HINTS.test(u));\n return hinted ?? cleaned[0] ?? null;\n}\n\n/**\n * Extract OTP + verification link from a message. Prefers the plain-text body; falls back to a\n * tag-stripped HTML body so codes/links rendered only in HTML are still found.\n */\nexport function extractCredentials(message: Message): ExtractedCredentials {\n const htmlText = message.html ? stripHtml(message.html) : \"\";\n const text = message.text && message.text.trim().length > 0 ? message.text : htmlText;\n const combined = `${text}\\n${htmlText}`;\n return {\n otp: extractOtp(text) ?? extractOtp(htmlText),\n // Links live in href attributes, so search the raw HTML too.\n link: extractLink(message.html ?? \"\") ?? extractLink(combined),\n };\n}\n\n/** Minimal HTML-to-text: drop tags and decode the handful of entities that matter for codes. */\nfunction stripHtml(html: string): string {\n return html\n .replace(/<style[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<script[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<[^>]+>/g, \" \")\n .replace(/ /gi, \" \")\n .replace(/&/gi, \"&\")\n .replace(/</gi, \"<\")\n .replace(/>/gi, \">\")\n .replace(/&#(\\d+);/g, (_, d: string) => String.fromCharCode(Number(d)))\n .replace(/\\s+/g, \" \")\n .trim();\n}\n","/**\n * Recipient-list normalization, shared by the live transport and the offline mock.\n *\n * `SendRequest.to` / `cc` / `bcc` accept `string | string[]` because passing one\n * address should not require a one-element array - and the flagship quickstart\n * does exactly that. The server, however, decodes them as `[]string` and rejects\n * a bare string with a 400. So the scalar form has to be widened somewhere, and\n * the honest place is the client: there is no deployed caller relying on a scalar\n * reaching the wire (it has always 400'd), so nothing is preserved by tolerating\n * it server-side.\n *\n * Living in its own module keeps ONE definition. The mock used to carry a private\n * copy, which is how a mock ends up quietly accepting shapes the server refuses.\n */\n\n/** Widen `string | string[] | undefined` to `string[]` (empty for absent). */\nexport function toArray(v: string | string[] | undefined): string[] {\n if (!v) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n/**\n * Widen a recipient field for the WIRE, preserving \"the caller did not set this\".\n *\n * `toArray` collapses `undefined` to `[]`, which is right for internal fan-out\n * (union of all recipients) but wrong for a request body: emitting `cc: []` where\n * the caller sent nothing adds a key the caller never wrote. Returns `undefined`\n * for an absent field so the key is omitted from the JSON entirely.\n */\nexport function toWireArray(v: string | string[] | undefined): string[] | undefined {\n if (v === undefined) return undefined;\n return Array.isArray(v) ? v : [v];\n}\n","import type { ListWebhooksParams } from \"./models.js\";\nimport { AdministrativeFixtures } from \"./administration-fixtures.js\";\nimport type { AdministrativeRequest } from \"./administration.js\";\n/**\n * Offline fixtures for the Extrovert SDK.\n *\n * The SDK can run against this in-memory, deterministic mock so examples, the MCP server, and the\n * console are fully navigable offline without contacting the live `/v1` API. Construct a client with\n * `transport: \"mock\"` (or set `EXTROVERT_API_BASE_URL=mock`) to route requests here instead of fetch.\n *\n * The mock honors the same request/response models as the real API and reproduces the few behaviors\n * the SDK ergonomics depend on (enrollment cap, idempotency on `client_id`, wait_for_email returning\n * an OTP). It is intentionally simple - not a full server - and never reaches the network.\n */\n\nimport type {\n AddContactListRequest,\n Agent,\n Attachment,\n AttachmentInput,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainQuote,\n DomainRecord,\n EnrollRequest,\n EnrollResponse,\n ForwardRequest,\n Inbox,\n InboxCredentials,\n InboxMetadata,\n InboxMetadataPatch,\n IsoTimestamp,\n AckReviewEventRequest,\n AckReviewEventResult,\n Job,\n ListCommerceRequestsParams,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCategoriesParams,\n ListInboxesParams,\n ProjectInboxListParams,\n ListMessagesParams,\n ListThreadsParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n UpdateCategoryRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n Message,\n Page,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n ReplyRequest,\n RestampReviewRequest,\n CategoryPacingState,\n PacingItem,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEvent,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n SendResult,\n ReviewPolicy,\n ReviewState,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n VerifyRequest,\n VerifyResponse,\n WaitForEmailRequest,\n WaitForEmailResult,\n WaitForReviewEventParams,\n Webhook,\n WhoAmI,\n} from \"./models.js\";\nimport type { AttachmentDownload } from \"./transport.js\";\nimport type { List } from \"./pagination.js\";\nimport { extractCredentials } from \"./extract.js\";\nimport {\n ApiError,\n ConflictError,\n NotFoundError,\n PermissionError,\n RecipientSuppressedError,\n ValidationError,\n errorForStatus,\n} from \"./errors.js\";\nimport type { Problem, ProblemCode, ProblemField } from \"./problem.js\";\nimport { toArray } from \"./recipients.js\";\n\n/**\n * Opaque-cursor helpers for the mock's project-prefixed list. The real cursor is\n * server-issued and opaque; the mock encodes a bounded offset behind base64url so\n * the SDK iteration helpers exercise an opaque (non-integer) token end to end.\n */\nfunction encodeMockCursor(offset: number): string {\n const json = JSON.stringify({ o: offset, v: 1 });\n const b64 = typeof btoa === \"function\" ? btoa(json) : Buffer.from(json, \"utf8\").toString(\"base64\");\n return b64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nfunction decodeMockCursor(cursor: string): number {\n try {\n const b64 = cursor.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const json = typeof atob === \"function\" ? atob(b64) : Buffer.from(b64, \"base64\").toString(\"utf8\");\n const parsed = JSON.parse(json) as { o?: number };\n return typeof parsed.o === \"number\" && parsed.o >= 0 ? parsed.o : 0;\n } catch {\n return 0;\n }\n}\n\nfunction mailboxQuickstart(address: string): VerifyResponse[\"mailbox_quickstart\"] {\n return {\n inbox: address,\n list_mail: {\n tool: \"read_messages\",\n arguments: { inbox: address, limit: 20, unread_only: false },\n },\n read_message: {\n tool: \"get_message\",\n arguments: { id: \"<message_id from read_messages>\", format: \"text\", variant: \"extracted\" },\n },\n wait_for_mail: {\n tool: \"wait_for_email\",\n arguments: { inbox: address, since_now: true },\n },\n };\n}\n\nconst PAID_SHARED_DOMAIN = \"extrovertmail.com\";\nconst FREE_SHARED_DOMAIN = \"free.extrovertmail.com\";\nconst RESERVED_SHARED_LOCAL_PARTS = new Set([\n \"postmaster\", \"admin\", \"webadmin\", \"legal\", \"fraudmark\", \"fraudmarc\", \"keith\",\n \"melissa\", \"richard\", \"sydney\", \"syd\", \"john\", \"johnny\",\n]);\n\n/**\n * The fixed org/project the offline mock binds every key to. The mock has a single\n * org + project (mirroring the FIXED, key-bound org/project the real API resolves\n * from the stored key - there is no mutable selector). A `project_id` assertion on a\n * request must match {@link MOCK_PROJECT_ID} or the mock throws a 403, mirroring the\n * server's assertion-not-selector contract.\n */\nconst MOCK_ORG_ID = \"org_mock\";\nconst MOCK_PROJECT_ID = \"prj_mock\";\n/** Effective per-inbox recipient cap used by the offline API fixture. */\nconst DEFAULT_DAILY_SEND_LIMIT = 75;\n\n/** Caps for inbox metadata (AgentMail parity): ≤256 keys, ≤256 chars per key/string value. */\nconst METADATA_MAX_KEYS = 256;\nconst METADATA_MAX_KEY_LEN = 256;\nconst METADATA_MAX_VALUE_LEN = 256;\n\nfunction now(): IsoTimestamp {\n return new Date().toISOString();\n}\n\nfunction rid(prefix: string): string {\n const s = Math.random().toString(36).slice(2, 10);\n return `${prefix}_${s}`;\n}\n\nfunction randomHandle(): string {\n return `agent${Math.floor(1000 + Math.random() * 9000)}`;\n}\n\nfunction validatedSharedLocalPart(value: string): string {\n const normalized = value.toLowerCase().trim().replace(/[^a-z0-9._-]/g, \"\").replace(/^[._-]+|[._-]+$/g, \"\").slice(0, 40);\n if (normalized.length < 5 || RESERVED_SHARED_LOCAL_PARTS.has(normalized)) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"Shared-domain usernames must normalize to at least 5 characters and cannot use a reserved name.\" });\n }\n return normalized;\n}\n\n/**\n * Enforce the project_id assertion contract (mock): a request `project_id` is an\n * ASSERTION, never a selector. The mock binds every key to {@link MOCK_PROJECT_ID},\n * so a non-matching assertion is a 403, mirroring the server.\n */\nfunction assertProjectMatch(projectId: string | undefined): void {\n if (projectId !== undefined && projectId !== MOCK_PROJECT_ID) {\n throw new PermissionError({\n status: 403,\n code: \"project_mismatch\",\n message: `project_id \"${projectId}\" does not match the key's bound project.`,\n });\n }\n}\n\n/**\n * Validate an inbox metadata patch against the AgentMail-parity caps and value\n * types (string/number/boolean, or null to delete a key on a PATCH). Throws a 400\n * ValidationError on a violation, mirroring the server.\n */\nfunction validateMetadataPatch(patch: InboxMetadataPatch): void {\n const keys = Object.keys(patch);\n if (keys.length > METADATA_MAX_KEYS) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata has too many keys (max ${METADATA_MAX_KEYS}).`,\n });\n }\n for (const key of keys) {\n if (key.length > METADATA_MAX_KEY_LEN) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata key \"${key.slice(0, 16)}…\" exceeds ${METADATA_MAX_KEY_LEN} chars.`,\n });\n }\n const value = patch[key];\n if (value === null) continue; // null deletes the key (PATCH)\n const t = typeof value;\n if (t !== \"string\" && t !== \"number\" && t !== \"boolean\") {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata value for \"${key}\" must be a string, number, or boolean.`,\n });\n }\n if (t === \"string\" && (value as string).length > METADATA_MAX_VALUE_LEN) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: `metadata value for \"${key}\" exceeds ${METADATA_MAX_VALUE_LEN} chars.`,\n });\n }\n }\n}\n\n/**\n * Apply the shallow-merge / null-delete metadata patch semantics (mock):\n * - `undefined` patch leaves `current` unchanged;\n * - `null` patch CLEARS all metadata (returns `{}`);\n * - an object MERGES into `current`, with a per-key `null` value DELETING that key.\n */\nfunction mergeMetadata(\n current: InboxMetadata,\n patch: InboxMetadataPatch | null | undefined,\n): InboxMetadata {\n if (patch === undefined) return current;\n if (patch === null) return {};\n validateMetadataPatch(patch);\n const next: InboxMetadata = { ...current };\n for (const [key, value] of Object.entries(patch)) {\n if (value === null) {\n delete next[key];\n } else {\n next[key] = value;\n }\n }\n return next;\n}\n\n/** ruleSnapshotJSON renders a rule's restorable fields for an undo before/after column. */\nfunction ruleSnapshotJSON(r: Rule): string {\n return JSON.stringify({\n id: r.id,\n lineage_id: r.lineage_id,\n rev: r.rev,\n rule_layer: r.rule_layer,\n org_id: r.org_id,\n project_id: r.project_id,\n scope: r.scope,\n category_id: r.category_id,\n rule_text: r.rule_text,\n kind: r.kind,\n priority: r.priority,\n status: r.status,\n });\n}\n\ninterface MockState {\n agents: Map<string, Agent>;\n /** agent_handle -> agent_id, for idempotent enroll. */\n agentByHandle: Map<string, string>;\n /** client_id -> inbox_id, for idempotent inbox create. */\n inboxByClientId: Map<string, string>;\n /** client_id -> webhook_id, for idempotent webhook registration. */\n webhookByClientId: Map<string, string>;\n inboxes: Map<string, Inbox>;\n messages: Map<string, Message[]>; // keyed by inbox address\n /** message_id -> stored attachments (mock mirror of the real MIME parts). */\n attachments: Map<string, StoredAttachment[]>;\n webhooks: Map<string, Webhook>;\n /** entry id -> contact-list entry (mock mirror of extrovert_contact_lists). */\n contactLists: Map<string, ContactListEntry>;\n /** domain name -> onboarded domain (mock mirror of extrovert_domains). */\n domains: Map<string, Domain>;\n /** job id -> async job status (mock mirror of extrovert_jobs; currently only\n * the domain-offboard teardown enqueues one). */\n jobs: Map<string, Job>;\n /** request id -> agent-initiated commerce request. */\n commerceRequests: Map<string, CommerceRequest>;\n /** request kind + stable Idempotency-Key -> request id. */\n commerceByIdempotency: Map<string, string>;\n /** suppression id -> recipient opt-out row (mock mirror of extrovert_suppressions). */\n suppressions: Map<string, SuppressionEntry>;\n /**\n * The account-level review policy (mock mirror of\n * extrovert_org_settings.review_policy).\n *\n * It defaults to `require_review` because that is the column default on the\n * REAL server for every org that has never touched it - i.e. every org. The\n * mock used to model no policy at all, so a bare `send()` sailed through\n * offline while the same call against production is refused 422. A mock that\n * cannot reproduce the platform's default posture is a mock that certifies\n * broken agents.\n */\n orgReviewPolicy: ReviewPolicy;\n /** address -> per-inbox override, which BEATS the account default when set. */\n inboxReviewPolicy: Map<string, ReviewPolicy>;\n /** review id -> review request (mock mirror of extrovert_review_requests). */\n reviews: Map<string, Review>;\n /** review id -> append-only thread turns. */\n reviewTurns: Map<string, ReviewTurn[]>;\n /**\n * review id -> the draft's attachments (mock mirror of proposed_attachments).\n * They survive submit -> review row -> approval on the real server now, so the\n * mock has to carry them too or a redraft that replaces them looks like a no-op.\n */\n reviewAttachments: Map<string, AttachmentInput[]>;\n /**\n * review id -> reviewer hand-back count (M8 Slice B circuit breaker (a)). The wire\n * Review shape doesn't carry hop_count, so the mock tracks it here to surface the\n * max_hops breaker on the decision context + reviewerDecide.\n */\n reviewHopCounts: Map<string, number>;\n /**\n * review id -> durable nudges (mock mirror of extrovert_review_nudges), oldest\n * first with a per-review monotonic seq. The authoritative liveness queue.\n */\n reviewEvents: Map<string, ReviewEvent[]>;\n /** review id -> last-acked seq (the per-(agent, review) cursor). */\n reviewEventCursors: Map<string, number>;\n /** idempotency-key -> the review state snapshot returned (chat replay, M5 parity v21). */\n chatByIdempotencyKey: Map<string, Review>;\n /** category id -> category (mock mirror of extrovert_categories, D9/D10). */\n categories: Map<string, Category>;\n /** rule id -> writing rule (mock mirror of extrovert_writing_rules, D2/D11). */\n rules: Map<string, Rule>;\n /** udo id -> change/undo audit row (mock mirror of extrovert_rule_undo_log). */\n ruleAudit: Map<string, RuleAuditEntry>;\n /** human_email -> self-signup state (mock OTP + verification). */\n signupByEmail: Map<string, SignupState>;\n /** Monotonic event journal backing the SSE stream (Slice 2). */\n events: StreamEvent[];\n /** Next event seq (monotonic, mirrors the server's AUTOINCREMENT). */\n eventSeq: number;\n mailboxesUsed: number;\n mailboxesMax: number;\n}\n\n/** Mock self-signup bookkeeping (in-memory OTP). */\ninterface SignupState {\n customerId: string;\n agentId: string;\n address: string;\n otp: string;\n verified: boolean;\n}\n\n/** A mock attachment: the wire metadata plus the raw base64 for download. */\ninterface StoredAttachment {\n meta: Attachment;\n content_base64: string;\n}\n\nfunction freshState(): MockState {\n return {\n agents: new Map(),\n agentByHandle: new Map(),\n inboxByClientId: new Map(),\n webhookByClientId: new Map(),\n inboxes: new Map(),\n messages: new Map(),\n attachments: new Map(),\n webhooks: new Map(),\n contactLists: new Map(),\n domains: new Map(),\n jobs: new Map(),\n commerceRequests: new Map(),\n commerceByIdempotency: new Map(),\n suppressions: seedSuppressions(),\n orgReviewPolicy: \"require_review\",\n inboxReviewPolicy: new Map(),\n reviews: new Map(),\n reviewTurns: new Map(),\n reviewAttachments: new Map(),\n reviewHopCounts: new Map(),\n reviewEvents: new Map(),\n reviewEventCursors: new Map(),\n chatByIdempotencyKey: new Map(),\n categories: new Map(),\n rules: new Map(),\n ruleAudit: new Map(),\n signupByEmail: new Map(),\n events: [],\n eventSeq: 0,\n mailboxesUsed: 0,\n mailboxesMax: 5,\n };\n}\n\n/**\n * The recipient the mock seeds an active org-scope suppression for, so the\n * suppression reads (precheck/list/revoke) and the `recipient_suppressed`\n * send-rejection path have deterministic data offline.\n */\nexport const SEEDED_SUPPRESSED_RECIPIENT = \"unsubscribed@example.com\";\n\n/** Seed one active org-scope suppression row (source manual) for the mock. */\nfunction seedSuppressions(): Map<string, SuppressionEntry> {\n const m = new Map<string, SuppressionEntry>();\n const id = rid(\"sup\");\n m.set(id, {\n id,\n recipient: SEEDED_SUPPRESSED_RECIPIENT,\n recipient_raw: SEEDED_SUPPRESSED_RECIPIENT,\n scope: \"org\",\n source: \"manual\",\n reactivation_count: 0,\n created_at: now(),\n revoked: false,\n });\n return m;\n}\n\n// ---------------------------------------------------------------------------\n// Review-policy + review-loop helpers, mirrored from the server so the mock and\n// production cannot disagree about who gets refused and why.\n// ---------------------------------------------------------------------------\n\n/** A reply's server-derived envelope: recipients, `Re:` subject, thread. */\ninterface ReplyEnvelope {\n to: string[];\n subject: string;\n threadId: string;\n}\n\n/**\n * Whether the resolved policy turns this asserted mode into a review.\n *\n * `require_review` always does. `allow_direct` keeps `direct` iff the agent\n * ACTUALLY asserted it. `auto_send_graduated` is decided per-message by the\n * gates, so the conservative treatment is \"review unless direct under\n * allow_direct\" - the intent is still required, because the message may well end\n * up in the human queue and the summary is the reviewer's only context.\n */\nfunction resolvedModeIsReview(policy: ReviewPolicy, mode: \"review\" | \"direct\"): boolean {\n if (policy === \"allow_direct\" && mode === \"direct\") return false;\n return true;\n}\n\n/** The four states nothing will ever move a review out of (`closed` on the read shape). */\nconst CLOSED_REVIEW_STATES: ReadonlySet<ReviewState> = new Set<ReviewState>([\n \"sent\",\n \"auto_sent\",\n \"cancelled\",\n // `failed` is in the CLOSED set although it is not formally terminal: the\n // console cannot re-approve it and no sweep moves it, so an agent told\n // closed=false there would wait forever.\n \"failed\",\n]);\n\n/**\n * The states that answer 409 `terminal` rather than `wrong_state` - a review that\n * has finished for good, where the answer is STOP, not \"try a different verb\".\n * `failed` is deliberately NOT here: an agent may still `cancel_review` it, which\n * is its one legal close-out.\n */\nconst TERMINAL_REVIEW_STATES: ReadonlySet<ReviewState> = new Set<ReviewState>([\n \"sent\",\n \"auto_sent\",\n \"cancelled\",\n]);\n\n/**\n * The verbs a COMPOSING agent may legally call against a draft in this state,\n * most actionable first, reads last - the mock's mirror of the server's\n * `AllowedAgentActions`, which is what fills a 409's `allowed_action` hints.\n *\n * The reads are unconditional, which is why the list is never empty: from a\n * terminal state the honest answer is \"nothing will mutate this, go look at what\n * happened\".\n */\nfunction allowedAgentActions(state: ReviewState): string[] {\n const actions: string[] = [];\n // submit_revision targets needs_review WITH a revision bump - including the\n // needs_review self-edge, which is a legal redraft (a revision bump IS a change).\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" ||\n state === \"stale\" || state === \"rejected\") {\n actions.push(\"submit_revision\");\n }\n // post_review_chat: legal from needs_review for a NON-human actor (an agent may\n // ask a question about a queued draft; it must not fabricate a reviewer, so the\n // state does not change).\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\") {\n actions.push(\"post_review_chat\");\n }\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" || state === \"stale\") {\n actions.push(\"restamp_review\");\n }\n if (state === \"needs_review\" || state === \"in_review\" || state === \"chatting\" ||\n state === \"stale\" || state === \"rejected\" || state === \"failed\") {\n actions.push(\"cancel_review\");\n }\n return [...actions, \"get_review\", \"list_review_events\"];\n}\n\n/** Build an RFC-9457 problem body the mock can hand to the SAME parser the live client uses. */\nfunction mockProblem(\n code: ProblemCode,\n status: number,\n title: string,\n detail: string,\n fields: ProblemField[],\n): Problem {\n return {\n type: `https://extrovert.dev/problems/${code}`,\n title,\n status,\n code,\n detail,\n request_id: rid(\"req\"),\n errors: fields.length ? fields : undefined,\n };\n}\n\n/**\n * Raise the mock error through {@link errorForStatus}, the SAME factory the HTTP\n * transport uses on a real problem+json body. That is deliberate: it means the\n * offline mock cannot hand back a different error CLASS than production for the\n * same code, which is precisely the divergence that let a wire bug live behind\n * green demos.\n */\nfunction problemError(problem: Problem, message?: string): ApiError {\n return errorForStatus({\n status: problem.status,\n code: problem.code,\n message: message ?? problem.detail ?? problem.title,\n requestId: problem.request_id,\n problem,\n });\n}\n\n/**\n * The literal `intent_required` 422, remediation and all.\n *\n * The full recipe lives in `detail` (not only in `errors[]`) for the same reason\n * it does on the server: the MCP tool surface renders only the message, so\n * anything that exists only in `errors[]` is invisible to the model that has to\n * fix the request. `errors[]` carries the machine-readable duplicate - including\n * `retry_with`, the literal JSON to splice into the original body.\n */\nfunction intentRequiredError(policy: ReviewPolicy, inboxOverride: boolean): ApiError {\n const source = inboxOverride\n ? \"a per-inbox override on this inbox\"\n : \"the account default; no per-inbox override\";\n const detail =\n `This inbox requires human review before sending (review policy: ${policy}, from ${source}). ` +\n \"Nothing was sent and nothing was queued. \" +\n \"Retry the SAME request with an `intent` object added: \" +\n '{\"intent\":{\"summary\":\"<one sentence: who you are writing to, what you want, and why now>\"}}. ' +\n \"That summary is the first thing the human reviewer reads; 8-200 characters. \" +\n \"Optional: intent.meta {goal, recipient, prior_touches, urgency} for reviewer context, \" +\n \"and category_id (cat_...) from list_categories. \" +\n \"On success you get 202 queued_for_review with a review id (rr_...); then monitor it with \" +\n \"wait_for_review_event / list_review_events until you receive a `sent` or `send_failed` event.\";\n return problemError(\n mockProblem(\"intent_required\", 422, \"Intent Required\", detail, [\n { field: \"intent.summary\", code: \"required\",\n detail: \"One sentence for the human reviewer: who / what / why. 8-200 chars.\" },\n { field: \"intent.meta\", code: \"optional\",\n detail: \"{goal, recipient, prior_touches, urgency} - improves the reviewer's decision context.\" },\n { field: \"category_id\", code: \"optional\",\n detail: \"cat_... from list_categories. A graduated category can auto-send without a human.\" },\n { field: \"policy\", code: \"review_policy\", detail: `${policy} (source: ${source})` },\n { field: \"retry_with\", code: \"example\", detail: INTENT_RETRY_EXAMPLE },\n ]),\n );\n}\n\n/** The literal JSON an agent splices into its original request to fix a 422 in one turn. */\nexport const INTENT_RETRY_EXAMPLE =\n '{\"intent\":{\"summary\":\"Follow up with vp@acme.com on the Q3 pilot; 2 prior touches\"}}';\n\n/**\n * A review-loop 409 carrying the recovery FACTS the agent needs: the live state,\n * the CAS keys a legal retry must quote, and the verbs that ARE legal now. The\n * split between `stale` / `wrong_state` / `terminal` is the whole point - only\n * `stale` and `born_stale` are worth retrying.\n */\nfunction reviewConflict(\n code: \"stale\" | \"wrong_state\" | \"terminal\" | \"born_stale\",\n review: Review,\n detail: string,\n): ApiError {\n const fields: ProblemField[] = [\n { field: \"state\", code: review.state, detail: \"the draft's current state\" },\n ];\n if (code === \"terminal\") {\n if (review.sent_message_id) {\n fields.push({\n field: \"sent_message_id\",\n code: review.sent_message_id,\n detail: \"the message that was actually delivered\",\n });\n }\n } else {\n fields.push(\n { field: \"revision\", code: String(review.revision), detail: \"current revision - use as parent_revision\" },\n { field: \"version\", code: String(review.version), detail: \"current row version\" },\n );\n }\n for (const action of allowedAgentActions(review.state)) {\n fields.push({ field: \"allowed_action\", code: action, detail: ALLOWED_ACTION_DETAIL[action] ?? \"\" });\n }\n return problemError(mockProblem(code, 409, \"Conflict\", detail, fields));\n}\n\n/** One-line \"why you would call this\" per advertised verb, so it reads the same everywhere. */\nconst ALLOWED_ACTION_DETAIL: Readonly<Record<string, string>> = {\n submit_revision: \"post a new draft under parent_revision\",\n post_review_chat: \"ask the reviewer a clarifying question\",\n restamp_review: \"assert the draft is current against the rules without redrafting\",\n cancel_review: \"withdraw this review\",\n get_review: \"re-read the draft\",\n list_review_events: \"wait for the delivery outcome\",\n};\n\n/** Mock 404 helper (mirrors the transport's). */\nfunction notFoundMock(kind: string, id: string): NotFoundError {\n return new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `No ${kind} found for \"${id}\" in the offline mock.`,\n });\n}\n\n/** Materialize a forward's quoted body, exactly as the server does at submit time. */\nfunction forwardBodyText(note: string, parent: Message): string {\n return `${note}\\n\\n---------- Forwarded message ----------\\nFrom: ${parent.from.email}\\nSubject: ${parent.subject}\\n\\n${parent.text}`;\n}\n\n/**\n * A self-contained, deterministic-enough in-memory backend implementing the subset of behavior the\n * SDK exposes. One instance per mock client so tests/examples don't bleed into each other.\n */\nexport class MockBackend {\n private administrativeFixtures = new AdministrativeFixtures();\n configureAdministrativeFixture(credential: string): void { this.administrativeFixtures = new AdministrativeFixtures(credential); }\n administrativeRequest(request: AdministrativeRequest): Promise<unknown> { return this.administrativeFixtures.request(request); }\n\n private state: MockState = freshState();\n\n reset(): void {\n this.state = freshState();\n }\n\n enroll(req: EnrollRequest): EnrollResponse {\n const existingId = this.state.agentByHandle.get(req.agent_handle);\n const agentId = existingId ?? rid(\"agt\");\n if (!existingId) {\n const agent: Agent = {\n id: agentId,\n name: req.agent_name ?? null,\n status: \"active\",\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n created_at: now(),\n metadata: {},\n };\n this.state.agents.set(agentId, agent);\n this.state.agentByHandle.set(req.agent_handle, agentId);\n }\n // Mirror the frozen EnrollResult wire shape EXACTLY (agent_id, agent_key, scopes,\n // org_id, project_id) so SDK tests exercise the same fields the live server emits -\n // no agent_key_prefix/expires_at/mailboxes_* (those are NOT in the contract).\n return {\n agent_id: agentId,\n agent_key: `pk_agent_proj_${agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n // The issued key is bound to the token's resolved org/project; the agent cannot change it.\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n };\n }\n\n /**\n * Self-signup (Slice E). Returns a LIMITED-scope key and a first inbox; the OTP\n * is held in-memory (mock only) so `verify` can elevate to full scope. Idempotent\n * on human_email: a re-call reuses the tenant/agent and rotates the OTP.\n */\n signUp(req: SignUpRequest): SignUpResponse {\n const email = req.human_email.trim().toLowerCase();\n const existing = this.state.signupByEmail.get(email);\n const customerId = existing?.customerId ?? `cus_pn_signup_${rid(\"c\").slice(2)}`;\n const agentId = existing?.agentId ?? rid(\"agt\");\n const address =\n existing?.address ?? `${validatedSharedLocalPart(req.username ?? randomHandle())}@${FREE_SHARED_DOMAIN}`;\n // Stable offline code keeps the full signup → mailbox handoff executable in\n // examples and contract tests without ever weakening the live API's CSPRNG.\n const otp = \"492013\";\n this.state.signupByEmail.set(email, { customerId, agentId, address, otp, verified: false });\n return {\n customer_id: customerId,\n agent_id: agentId,\n agent_key: `pk_agent_${agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n key_prefix: `pk_agent_${agentId.slice(4, 8)}`,\n scopes: [\"signup:verify\"],\n address,\n verified: false,\n otp_sent_to: email,\n otp_expires_at: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n message: \"A verification code was sent to your email. Call verify with it.\",\n };\n }\n\n /** Confirm a signup OTP and return a full-scope key (mock). */\n verify(req: VerifyRequest): VerifyResponse {\n // The mock matches the OTP against any pending signup (single-tenant fixture).\n for (const [, s] of this.state.signupByEmail) {\n if (!s.verified && s.otp === req.otp.trim()) {\n s.verified = true;\n return {\n agent_id: s.agentId,\n agent_key: `pk_agent_${s.agentId.slice(4)}_${rid(\"sk\").slice(3)}`,\n key_prefix: `pk_agent_${s.agentId.slice(4, 8)}`,\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\"],\n address: s.address,\n verified: true,\n message:\n \"Verified. The inbox is ready; use read_messages, then get_message with a returned message id.\",\n mailbox_quickstart: mailboxQuickstart(s.address),\n };\n }\n }\n throw new Error(\"verification code invalid or expired\");\n }\n\n /** Introspect the mock principal (GET /v1/auth/me). */\n whoami(): WhoAmI {\n return {\n customer_id: \"cus_pn_mock\",\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n agent_id: this.state.agents.keys().next().value ?? \"agt_mock\",\n key_id: \"pkey_mock\",\n scopes: [\"mailbox:create\", \"mailbox:read\", \"mailbox:send\", \"webhook:write\"],\n };\n }\n\n createInbox(req: CreateInboxRequest): Inbox {\n // project_id is an assertion (never a selector): a mismatch is 403.\n assertProjectMatch(req.project_id);\n if (req.client_id) {\n const existing = this.state.inboxByClientId.get(req.client_id);\n if (existing) {\n // Idempotent replay returns the existing inbox verbatim (incl. its metadata).\n const inbox = this.state.inboxes.get(existing);\n if (inbox) return inbox;\n }\n }\n // Validate (and snapshot) the create-time metadata: no null deletes on create.\n const metadata = req.metadata ? mergeMetadata({}, req.metadata) : {};\n const domain = req.domain ?? PAID_SHARED_DOMAIN;\n const normalizedDomain = domain.trim().toLowerCase();\n const isSharedDomain = normalizedDomain === PAID_SHARED_DOMAIN || normalizedDomain === FREE_SHARED_DOMAIN;\n const username = isSharedDomain ? validatedSharedLocalPart(req.username ?? randomHandle()) : (req.username ?? randomHandle());\n const id = rid(\"ibx\");\n const inbox: Inbox = {\n object: \"inbox\",\n id,\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n address: `${username}@${domain}`,\n username,\n domain,\n display_name: req.display_name ?? null,\n status: \"live\",\n onboarding_mode: req.domain ? \"ns_delegated\" : \"shared\",\n agent_id: null,\n daily_send_limit: DEFAULT_DAILY_SEND_LIMIT,\n direct_smtp_enabled: false,\n webhook_url: req.webhook_url ?? null,\n metadata,\n created_at: now(),\n ...(req.return_credentials\n ? {\n credentials: {\n imap_host: \"smtp.extrovert.dev\",\n imap_port: 993,\n smtp_host: \"smtp.extrovert.dev\",\n smtp_port: 587,\n username: `${username}@${domain}`,\n password: rid(\"mbpw\").slice(5),\n },\n }\n : {}),\n };\n this.state.inboxes.set(id, inbox);\n this.state.inboxes.set(inbox.address, inbox);\n this.state.messages.set(inbox.address, []);\n if (req.client_id) this.state.inboxByClientId.set(req.client_id, id);\n this.state.mailboxesUsed += 1;\n return inbox;\n }\n\n listInboxes(params: ListInboxesParams = {}): Page<Inbox> {\n let items = [...new Set(this.state.inboxes.values())].filter(\n (ibx) => ibx.id.startsWith(\"ibx\"),\n );\n if (params.domain) items = items.filter((i) => i.domain.toLowerCase() === params.domain!.trim().toLowerCase());\n if (params.status) items = items.filter((i) => i.status === params.status);\n items.sort((a, b) => b.created_at.localeCompare(a.created_at) || b.id.localeCompare(a.id));\n const limit = Math.min(Math.max(params.limit ?? 50, 1), 100);\n const offset = params.cursor ? decodeMockCursor(params.cursor) : 0;\n const slice = items.slice(offset, offset + limit);\n const has_more = offset + limit < items.length;\n return { items: slice, total: items.length, has_more, ...(has_more ? { next_cursor: encodeMockCursor(offset + limit) } : {}) };\n }\n\n getInbox(address: string): Inbox | undefined {\n const inbox = this.state.inboxes.get(address);\n if (!inbox) return undefined;\n // effective_review_policy rides the SINGLE-inbox read only - the list path\n // omits it on the server (it would be one settings read per row for a value\n // identical across the org), so the mock omits it there too. Reading it once at\n // start-up is how an agent plans its first send instead of discovering the\n // policy by being refused 422.\n return { ...inbox, effective_review_policy: this.reviewPolicyFor(inbox.address) };\n }\n\n /**\n * Normalize an inbox ref (opaque id OR address alias) to the canonical address the\n * mock keys its message/thread/contact maps on. The SDK now routes inbox ops by the\n * canonical opaque `id` when it holds a full record (matching the contract's\n * canonical-key semantics), so the mock must resolve an id back to its address -\n * both key `state.inboxes` (same object), `state.messages` keys by address only.\n * Unknown refs pass through unchanged so the existing not-found paths still fire.\n */\n private addrOf(ref: string): string {\n return this.state.inboxes.get(ref)?.address ?? ref;\n }\n\n updateInbox(address: string, req: UpdateInboxRequest): Inbox | undefined {\n // project_id is an assertion (never a selector): a mismatch is 403.\n assertProjectMatch(req.project_id);\n const inbox = this.state.inboxes.get(address);\n if (!inbox) return undefined;\n if (req.display_name !== undefined) {\n inbox.display_name = req.display_name === \"\" ? null : req.display_name;\n }\n if (req.webhook_url !== undefined) {\n inbox.webhook_url = req.webhook_url === \"\" ? null : req.webhook_url;\n }\n if (req.daily_send_limit !== undefined) {\n if (\n !Number.isInteger(req.daily_send_limit) ||\n req.daily_send_limit < 1 ||\n req.daily_send_limit > 10_000\n ) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: \"daily_send_limit must be an integer from 1 through 10000.\",\n });\n }\n inbox.daily_send_limit = req.daily_send_limit;\n }\n // Metadata: shallow merge, per-key null deletes, top-level null clears all,\n // omitted leaves unchanged (see UpdateInboxRequest.metadata).\n if (req.metadata !== undefined) {\n inbox.metadata = mergeMetadata(inbox.metadata, req.metadata);\n }\n // The record is shared by id + address keys (same object), so both views update.\n return inbox;\n }\n\n deleteInbox(address: string): void {\n const inbox = this.state.inboxes.get(address);\n if (inbox) {\n this.state.inboxes.delete(inbox.id);\n this.state.inboxes.delete(inbox.address);\n this.state.messages.delete(inbox.address);\n }\n }\n\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n // The mock binds every key to MOCK_PROJECT_ID; the wildcard \"-\" (org breadth) is\n // accepted for an org-tier key. A concrete project outside the bound project is a\n // 404 (out-of-ceiling), mirroring the server's fail-closed addressing. An inbox\n // is resolved by its opaque id OR its address alias (both key the same map).\n\n /** Resolve the project path segment against the mock's bound project (fail-closed). */\n private resolveProjectSegment(projectId: string): void {\n if (projectId === \"-\" || projectId === MOCK_PROJECT_ID) return;\n // A concrete, out-of-ceiling project id is a 404 (never an existence oracle).\n throw new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `project \"${projectId}\" is outside this key's ceiling.`,\n });\n }\n\n createInboxInProject(projectId: string, req: CreateInboxRequest): Inbox {\n // A bare org wildcard create needs a concrete project (breadth_required) - the\n // mock has a single project, so \"-\" still resolves to it for ergonomics.\n this.resolveProjectSegment(projectId);\n return this.createInbox(req);\n }\n\n listInboxesInProject(projectId: string, params: ProjectInboxListParams = {}): List<Inbox> {\n this.resolveProjectSegment(projectId);\n let items = [...new Set(this.state.inboxes.values())].filter((ibx) => ibx.id.startsWith(\"ibx\"));\n if (params.domain) items = items.filter((i) => i.domain.toLowerCase() === params.domain!.trim().toLowerCase());\n items.sort((a, b) => b.created_at.localeCompare(a.created_at) || b.id.localeCompare(a.id));\n // Opaque-cursor pagination over the offset-based mock store.\n const limit = Math.min(Math.max(params.limit ?? 50, 1), 100);\n const offset = params.cursor ? decodeMockCursor(params.cursor) : 0;\n const slice = items.slice(offset, offset + limit);\n const hasMore = offset + limit < items.length;\n return {\n object: \"list\",\n data: slice,\n has_more: hasMore,\n next_cursor: hasMore ? encodeMockCursor(offset + limit) : null,\n };\n }\n\n getInboxInProject(projectId: string, inboxId: string): Inbox | undefined {\n this.resolveProjectSegment(projectId);\n return this.state.inboxes.get(inboxId);\n }\n\n updateInboxInProject(projectId: string, inboxId: string, req: UpdateInboxRequest): Inbox | undefined {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return undefined;\n return this.updateInbox(inbox.address, req);\n }\n\n deleteInboxInProject(projectId: string, inboxId: string): boolean {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return false;\n this.deleteInbox(inbox.address);\n return true;\n }\n\n getInboxCredentialsInProject(projectId: string, inboxId: string): InboxCredentials | undefined {\n this.resolveProjectSegment(projectId);\n const inbox = this.state.inboxes.get(inboxId);\n if (!inbox) return undefined;\n return (\n inbox.credentials ?? {\n imap_host: \"smtp.extrovert.dev\",\n imap_port: 993,\n smtp_host: \"smtp.extrovert.dev\",\n smtp_port: 587,\n username: inbox.address,\n password: rid(\"mbpw\").slice(5),\n }\n );\n }\n\n // ---- Outbound: ONE policy-governed path (mock mirror of SubmitForReview) ----\n //\n // send / reply / forward / submitForReview / submitReplyForReview used to be five\n // separate mock implementations, and only the two `submit*` ones knew the review\n // loop existed. That is the same shape as the server bug this change set fixes:\n // policy enforcement living in a code path a caller can route around. On the real\n // server all five are ONE handler calling ONE service entry point, so they are one\n // method here too. If a rule can be bypassed by picking a different SDK method,\n // the mock will happily certify an agent that production refuses.\n //\n // The order below mirrors Service.SubmitForReview exactly, and the order is\n // load-bearing:\n //\n // 1. resolve the policy (inbox override > account default > require_review floor)\n // 2. default the mode from the policy + whether the caller asserted one\n // 3. PRE-FLIGHT: contact lists + suppression, on the FULL recipient set\n // 4. the intent gate (422 intent_required)\n // 5. route: auto-send, or park in needs_review\n //\n // (3) before (4) matters: a blocked or suppressed recipient is a fact no amount of\n // intent will fix, and answering `intent_required` first would send the agent off\n // to add an intent and retry straight into the same wall.\n\n /** The RESOLVED review policy for an inbox: per-inbox override, else the account default. */\n reviewPolicyFor(address: string): ReviewPolicy {\n return this.state.inboxReviewPolicy.get(this.addrOf(address)) ?? this.state.orgReviewPolicy;\n }\n\n /**\n * Mock-only: set the ACCOUNT-level review policy (the console/admin plane sets\n * this on the real server; there is no agent-plane write for it). Use it to\n * exercise an org that has been configured for direct sending.\n */\n setReviewPolicy(policy: ReviewPolicy): void {\n this.state.orgReviewPolicy = policy;\n }\n\n /** Mock-only: set (or clear) the per-inbox override, which beats the account default. */\n setInboxReviewPolicy(address: string, policy: ReviewPolicy | undefined): void {\n const addr = this.addrOf(address);\n if (policy === undefined) this.state.inboxReviewPolicy.delete(addr);\n else this.state.inboxReviewPolicy.set(addr, policy);\n }\n\n send(address: string, req: SendRequest): SendOutcome {\n address = this.addrOf(address);\n return this.submitOutbound({\n address,\n kind: \"send\",\n req,\n to: toArray(req.to),\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject: req.subject ?? \"\",\n text: req.text ?? \"\",\n html: req.html,\n deliver: () => this.deliverSend(address, req),\n });\n }\n\n reply(address: string, req: ReplyRequest): SendOutcome {\n address = this.addrOf(address);\n // Envelope materialization: the reply's recipients and `Re:` subject are derived\n // from the parent HERE, before the pre-flight, so the block/suppression checks\n // screen the addresses that will actually be mailed and the reviewer reads the\n // real subject instead of an empty one.\n const env = this.deriveReplyEnvelope(address, req);\n return this.submitOutbound({\n address,\n kind: \"reply\",\n req,\n to: env.to,\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject: env.subject,\n text: req.text ?? \"\",\n html: req.html,\n deliver: () => this.deliverReply(address, req, env),\n });\n }\n\n forward(address: string, messageId: string, req: ForwardRequest): SendOutcome {\n address = this.addrOf(address);\n const parent = (this.state.messages.get(address) ?? []).find((m) => m.id === messageId);\n if (!parent) throw notFoundMock(\"message\", messageId);\n // A forward is materialized at submit for the same reason a reply is, plus one\n // that is specific to it: the human must review the ACTUAL quoted thread they\n // are about to release to new recipients, not a note whose quote gets rebuilt\n // from the live parent at approval time.\n const subject = fwdSubject(parent.subject);\n const text = forwardBodyText(req.text ?? \"\", parent);\n return this.submitOutbound({\n address,\n kind: \"forward\",\n req,\n to: toArray(req.to),\n cc: toArray(req.cc),\n bcc: toArray(req.bcc),\n subject,\n text,\n deliver: () =>\n this.deliverRaw(address, {\n to: toArray(req.to),\n cc: toArray(req.cc),\n subject,\n text,\n threadId: parent.thread_id,\n }),\n });\n }\n\n /**\n * Submit a new message for review (mock). Rides the SAME endpoint as `send` on\n * the real server, so it is literally the same call here: the resolved policy -\n * not which SDK method you picked - decides whether the message is queued\n * (`kind:\"queued_for_review\"`) or delivered.\n */\n submitForReview(address: string, req: SendRequest): SendOutcome {\n return this.send(address, req);\n }\n\n /** Submit an in-thread reply for review (mock). Same endpoint, same routing, as `reply`. */\n submitReplyForReview(address: string, req: ReplyRequest): SendOutcome {\n return this.reply(address, req);\n }\n\n /**\n * The single enforcement point. Everything above funnels here; nothing else in\n * the mock may reach `deliver*` on the agent plane.\n */\n private submitOutbound(params: {\n address: string;\n kind: \"send\" | \"reply\" | \"forward\";\n req: {\n mode?: \"review\" | \"direct\";\n intent?: { summary: string; meta?: Record<string, unknown> };\n category_id?: string;\n };\n to: string[];\n cc: string[];\n bcc: string[];\n subject: string;\n text: string;\n html?: string;\n deliver: () => SendResult;\n }): SendOutcome {\n const { address, kind, req } = params;\n const policy = this.reviewPolicyFor(address);\n\n // A caller \"opted in\" by mentioning the review loop at all. It decides the\n // RESPONSE SHAPE and the mode default - never whether the policy applies.\n const optedIn =\n req.mode !== undefined || req.intent !== undefined || (req.category_id ?? \"\") !== \"\";\n\n // POLICY-AWARE MODE DEFAULT. Order is load-bearing: an explicit assertion wins\n // (the policy may still refuse it); then a caller that supplied any review field\n // but no mode keeps the historical opt-in meaning (\"queue this\"); only then does\n // an allow_direct org's bare send stay direct; everything else - require_review,\n // auto_send_graduated, and any policy value we do not recognize - falls to\n // review. Unknown policies MUST land there: a value a newer node wrote must\n // never be read by an older client as permission.\n let mode: \"review\" | \"direct\";\n if (req.mode !== undefined) mode = req.mode;\n else if (optedIn) mode = \"review\";\n else if (policy === \"allow_direct\") mode = \"direct\";\n else mode = \"review\";\n\n // PRE-FLIGHT on the full recipient set (to + cc + bcc), before the intent gate.\n const recipients = [...params.to, ...params.cc, ...params.bcc];\n this.enforceSendPolicy(address, recipients);\n this.enforceSuppression(recipients);\n\n // D3 intent gate. NOTHING is written and NOTHING is sent when it fires, which\n // is exactly what makes the amended retry safe.\n if (resolvedModeIsReview(policy, mode) && !req.intent?.summary?.trim()) {\n throw intentRequiredError(policy, this.state.inboxReviewPolicy.has(address));\n }\n\n const review = this.createReviewRecord(address, {\n kind,\n subject: params.subject,\n text: params.text,\n html: params.html,\n to: params.to,\n cc: params.cc,\n bcc: params.bcc,\n intent: req.intent,\n categoryId: req.category_id,\n mode,\n });\n\n // ROUTING. Two auto-send paths reach delivery without a human:\n // - allow_direct + an asserted (or defaulted) `direct` mode\n // - auto_send_graduated + a category the agent named\n // Everything else - including auto_send_graduated with NO category - is held,\n // and the gate_outcome records why so the agent is not left guessing.\n const directAuto = policy === \"allow_direct\" && mode === \"direct\";\n const graduatedAuto = policy === \"auto_send_graduated\" && (req.category_id ?? \"\") !== \"\";\n if (!directAuto && !graduatedAuto) {\n if (policy === \"auto_send_graduated\") review.gate_outcome = \"held:no_category\";\n this.state.reviews.set(review.id, review);\n return {\n kind: \"queued_for_review\",\n review: { id: review.id, state: review.state, effective_mode: review.effective_mode },\n };\n }\n\n const sent = params.deliver();\n const tracking = { submission_id: sent.submission_id, sent_message_id: sent.sent_message_id,\n sent_copy_status: sent.sent_copy_status, transport: sent.transport };\n this.markReviewAutoSent(review, sent, directAuto ? \"agent_direct\" : \"graduated_auto\");\n\n if (!optedIn) {\n // The LEGACY 202 body, byte-shape-identical to what the server still returns\n // for a caller that never mentioned the review loop - plus the additive\n // `review_id`, which is the only handle a crashed agent has on this path.\n // Note the asymmetry, and that it is the server's, not ours: `send` answers\n // {status, message_id, review_id} with NO thread_id; reply/forward answer\n // {message_id, thread_id, review_id} with no status.\n return kind === \"send\"\n ? { message_id: sent.message_id, status: \"sent\", review_id: review.id, ...tracking }\n : { message_id: sent.message_id, thread_id: sent.thread_id, review_id: review.id, ...tracking };\n }\n const message: { id: string; thread_id?: string } = { id: sent.message_id };\n if (sent.thread_id) message.thread_id = sent.thread_id;\n return { kind: \"sent\", message, review: { id: review.id, state: review.state }, ...tracking };\n }\n\n /**\n * Move a review to `state` and keep `closed` in lockstep.\n *\n * `closed` is DERIVED, never independently assigned, because the two drifting\n * apart is worse than either being wrong: an agent that polls `closed` on a row\n * whose state says otherwise has no way to tell which one to believe.\n */\n private setReviewState(review: Review, state: ReviewState): void {\n review.state = state;\n review.closed = CLOSED_REVIEW_STATES.has(state);\n }\n\n /** Mark a review delivered on an auto-send path and emit its terminal `sent` nudge. */\n private markReviewAutoSent(review: Review, sent: SendResult, sendPath: string): void {\n this.setReviewState(review, \"auto_sent\");\n review.version += 1;\n review.sent_message_id = sent.message_id_header ?? sent.message_id;\n review.send_path = sendPath;\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(review.id, review);\n this.enqueueTerminalNudge(review);\n }\n\n /** Raw delivery for a send - no policy, only reachable from submitOutbound. */\n private deliverSend(address: string, req: SendRequest): SendResult {\n return this.deliverRaw(address, {\n to: toArray(req.to),\n cc: toArray(req.cc),\n subject: req.subject,\n text: req.text ?? \"\",\n html: req.html,\n threadId: rid(\"thr\"),\n attachments: req.attachments,\n });\n }\n\n /** Raw delivery for a reply - no policy, only reachable from submitOutbound. */\n private deliverReply(address: string, req: ReplyRequest, env: ReplyEnvelope): SendResult {\n return this.deliverRaw(address, {\n to: env.to,\n cc: toArray(req.cc),\n subject: env.subject,\n text: req.text ?? \"\",\n html: req.html,\n threadId: env.threadId,\n attachments: req.attachments,\n });\n }\n\n /** Append the outbound message and shape the legacy send result. */\n private deliverRaw(\n address: string,\n opts: {\n to: string[];\n cc?: string[];\n subject: string;\n text: string;\n html?: string;\n threadId: string;\n attachments?: AttachmentInput[];\n },\n ): SendResult {\n const msg = this.appendMessage(address, {\n direction: \"outbound\",\n from: address,\n to: opts.to,\n cc: opts.cc,\n subject: opts.subject,\n text: opts.text,\n html: opts.html,\n threadId: opts.threadId,\n attachments: opts.attachments,\n });\n return {\n message_id: msg.id,\n thread_id: msg.thread_id,\n submission_id: (msg.submission_id = `sub_${msg.id}`),\n sent_message_id: (msg.sent_message_id = msg.id),\n sent_copy_status: (msg.sent_copy_status = \"stored\"),\n transport: (msg.transport = { accepted: opts.to.length + (opts.cc?.length ?? 0) }),\n message_id_header: msg.message_id,\n status: \"sent\",\n created_at: now(),\n };\n }\n\n /**\n * Derive a reply's recipients / `Re:` subject / thread from the parent, the way\n * the server does before it writes the review row.\n */\n private deriveReplyEnvelope(address: string, req: ReplyRequest): ReplyEnvelope {\n if (Boolean(req.thread_id) === Boolean(req.message_id)) {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message: \"provide exactly one of thread_id or message_id\",\n });\n }\n const all = this.state.messages.get(address) ?? [];\n let parent: Message | undefined;\n let threadId = req.thread_id;\n if (req.message_id) {\n parent = all.find((m) => m.id === req.message_id);\n if (!parent) throw notFoundMock(\"message\", req.message_id);\n threadId = parent.thread_id;\n } else if (req.thread_id) {\n const inThread = all.filter((m) => m.thread_id === req.thread_id);\n parent = inThread[inThread.length - 1];\n } else {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message: \"thread_id or message_id is required\",\n });\n }\n if (req.thread_id && req.expected_last_message_id && parent?.id !== req.expected_last_message_id) {\n throw new ConflictError({\n status: 409,\n code: \"conflict\",\n message: `thread advanced; latest message is ${parent?.id ?? \"unknown\"}`,\n });\n }\n const to: string[] = [];\n if (parent) {\n if (parent.from.email.toLowerCase() === address.toLowerCase()) {\n to.push(...parent.to.map(({ email }) => email).filter((email) => email.toLowerCase() !== address.toLowerCase()));\n } else {\n to.push(...(parent.reply_to?.length ? parent.reply_to : [parent.from]).map(({ email }) => email));\n }\n if (req.reply_all) for (const a of parent.to) if (a.email !== address) to.push(a.email);\n }\n return {\n to: to.length ? to : [\"reply@example.com\"],\n subject: parent ? reSubject(parent.subject) : \"Re:\",\n threadId: threadId ?? rid(\"thr\"),\n };\n }\n\n /** List review requests (mock), newest-first, with optional filters. */\n listReviews(params: ListReviewsParams = {}): Page<Review> {\n let items = [...this.state.reviews.values()].sort((a, b) =>\n b.created_at.localeCompare(a.created_at),\n );\n if (params.state !== undefined) {\n const states = Array.isArray(params.state) ? params.state : [params.state];\n items = items.filter((r) => states.includes(r.state));\n }\n if (params.category_id) items = items.filter((r) => r.category_id === params.category_id);\n if (params.inbox) {\n const inbox = params.inbox.toLowerCase();\n items = items.filter((r) => r.from_address.toLowerCase() === inbox);\n }\n return { items, total: items.length };\n }\n\n /** Get one review request (mock), or undefined when not found. */\n getReview(reviewId: string): Review | undefined {\n return this.state.reviews.get(reviewId);\n }\n\n /** Get a review's append-only thread turns (mock), or undefined when not found. */\n getReviewTurns(reviewId: string): Page<ReviewTurn> | undefined {\n if (!this.state.reviews.has(reviewId)) return undefined;\n const items = this.state.reviewTurns.get(reviewId) ?? [];\n return { items, total: items.length };\n }\n\n /**\n * Get the human's assembled feedback (mock; M5): the diff + the human comments /\n * rejection turns + the decision (derived from state). new_rules is empty in the\n * mock (rule provenance lives server-side). Undefined when not found.\n */\n getReviewFeedback(reviewId: string): ReviewFeedback | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const comments = turns\n .filter(\n (t) =>\n (t.turn_type === \"human_comment\" ||\n t.turn_type === \"human_reject\" ||\n t.turn_type === \"human_question\") &&\n (t.body ?? \"\").trim() !== \"\",\n )\n .map((t) => ({\n turn_id: t.id,\n actor_kind: t.actor_kind,\n body: t.body ?? \"\",\n actor_id: t.actor_id,\n created_at: t.created_at,\n }));\n let diffJson: Record<string, unknown> | undefined;\n for (const t of turns) {\n if ((t.turn_type === \"human_edit\" || t.turn_type === \"system_diff\") && t.diff_json) {\n diffJson = t.diff_json;\n }\n }\n const edited = !!review.sent_body_text || !!review.sent_subject || !!review.diff_unified;\n let decision: string;\n if (review.state === \"sent\" || review.state === \"auto_sent\" || review.state === \"approved\") {\n decision = edited ? \"edited\" : \"approved\";\n } else if (review.state === \"rejected\") {\n decision = \"rejected\";\n } else {\n decision = review.state;\n }\n return {\n review_id: reviewId,\n decision,\n diff_unified: review.diff_unified,\n diff_json: diffJson,\n comments,\n new_rules: [],\n };\n }\n\n /**\n * Post a chat turn on a review's thread (mock; M5). Idempotent on the optional key\n * (parity v21): a replay with the same key returns the same review without doubling\n * the turn. Flips in_review -> chatting on the first turn. Undefined when not found.\n */\n postReviewChat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n ): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const key = idempotencyKey?.trim();\n if (key) {\n const replayed = this.state.chatByIdempotencyKey.get(key);\n if (replayed) return replayed;\n }\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\n \"terminal\",\n review,\n `this review is ${review.state}; nothing will ever succeed on it. A front_run_next event is waiting on your queue.`,\n );\n }\n // needs_review IS a legal source for an AGENT question (D-5). The old guard's\n // rationale was right - an agent must not conjure a reviewer for a queued draft\n // - but its effect was wrong: after a reviewer-reject lands a draft back in\n // needs_review WITH feedback, the skill tells the agent to ask when the feedback\n // is ambiguous, and it could not. So the question is appended and the state is\n // deliberately NOT changed: `in_review` is a soft lock meaning a real human has\n // it open, and an agent may not fabricate that.\n if (\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"needs_review\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `post_review_chat is not legal while the draft is in '${review.state}'.`,\n );\n }\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_question\",\n actor_kind: \"agent\",\n body: req.text,\n created_at: now(),\n });\n this.state.reviewTurns.set(reviewId, turns);\n if (review.state === \"in_review\") {\n this.setReviewState(review, \"chatting\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n }\n // No nudge for the agent's OWN question - feedback_added is a HUMAN signal, and\n // waking a composer with its own message is how a drain loop starts spinning.\n if (key) this.state.chatByIdempotencyKey.set(key, review);\n return review;\n }\n\n /**\n * Post a new agent draft under a parent_revision CAS (mock; M5; D17). A mismatch is\n * a 409 STALE with NO mutation; a clean CAS re-renders the draft in place\n * (revision++), returns to needs_review. Undefined when not found.\n */\n submitRevision(reviewId: string, req: SubmitRevisionRequest): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n // The three-way 409 split, in the order an agent needs it.\n //\n // TERMINAL first: the review is over, nothing will ever succeed, and a\n // front_run_next nudge is left behind so an agent that only drains the queue\n // still learns it lost the race.\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, req.parent_revision);\n throw reviewConflict(\n \"terminal\",\n review,\n `this review is ${review.state}; a redraft will never succeed. A front_run_next event is waiting on your queue.`,\n );\n }\n // WRONG_STATE: the draft is still live but this VERB is illegal from here.\n // Never retry the same verb - read the allowed_action hints and pick another.\n // needs_review IS legal (D-1): a redraft bumps the revision, which IS a change,\n // so the self-edge that used to be banned is exactly the loop a reviewer-reject\n // hands back to the composer.\n if (\n review.state !== \"needs_review\" &&\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"rejected\" &&\n review.state !== \"stale\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `submit_revision is not legal while the draft is in '${review.state}'. Wait for a sent or send_failed review event.`,\n );\n }\n // STALE: the CAS failed. NOTHING is mutated, and the error carries the current\n // revision/version so the bounded retry needs no extra get_review.\n if (review.revision !== req.parent_revision) {\n throw reviewConflict(\n \"stale\",\n review,\n \"parent_revision is stale; re-read the review, re-apply your edit on top, and resubmit with the current revision\",\n );\n }\n if (req.version !== undefined && review.version !== req.version) {\n throw reviewConflict(\n \"stale\",\n review,\n \"version is stale; re-read the review, re-apply your edit on top, and resubmit\",\n );\n }\n review.revision += 1;\n review.version += 1;\n this.setReviewState(review, \"needs_review\");\n if (req.subject !== undefined) review.proposed_subject = req.subject;\n // `text` is canonical, `body` a permanent alias - resolved here EXACTLY as the\n // server does, including the conflicting_alias rejection. The mock must not be\n // more permissive than the wire: a fixture that quietly accepts what the server\n // refuses is how a 67-day-old send bug stayed invisible behind green demos.\n if (\n req.text !== undefined &&\n req.body !== undefined &&\n req.text !== req.body\n ) {\n throw new ValidationError({\n status: 400,\n code: \"conflicting_alias\",\n message: \"`body` is a deprecated alias for `text`; send one or the other\",\n });\n }\n const revisedText = req.text ?? req.body;\n if (revisedText !== undefined) review.proposed_body_text = revisedText;\n if (req.html !== undefined) review.proposed_body_html = req.html;\n // Attachments REPLACE when present, are untouched when the field is omitted,\n // and are cleared by an explicit empty array. Without this a redraft after\n // reviewer feedback would ship a message the human reviewed WITH a file and the\n // recipient received without one.\n if (req.attachments !== undefined) {\n this.state.reviewAttachments.set(reviewId, req.attachments);\n }\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_draft\",\n actor_kind: \"agent\",\n body: revisedText ?? review.proposed_body_text,\n revision: review.revision,\n created_at: now(),\n });\n this.state.reviewTurns.set(reviewId, turns);\n // Deliberately NO nudge: the composer must not be woken by its own redraft.\n // (redraft_requested is what a REVIEWER's reject/escalate/sweep enqueues; see\n // simulateReviewRejected.)\n return review;\n }\n\n /** Withdraw a pending review (mock; M5) to the terminal cancelled state. */\n cancelReview(reviewId: string): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n this.setReviewState(review, \"cancelled\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * Re-stamp a draft's rules-version WITHOUT redrafting (mock; D19/§8 $0 escape valve).\n * Advances the version the draft is current against; no revision bump, no body change.\n * A terminal/sent draft 409s; against_version above the category's current\n * rules-version is 400. The mock has no per-category rules_version on the Review, so it\n * just bumps the row version and returns it (the body is untouched).\n */\n restampReview(reviewId: string, req: RestampReviewRequest): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n this.enqueueFrontRunNudge(review, review.revision);\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n // restamp_review is ONLY the \"I re-read the rules and nothing needed to change\"\n // escape valve. It applies to a draft still sitting in the human queue; an\n // approved or failed draft has already left it.\n if (\n review.state !== \"needs_review\" &&\n review.state !== \"in_review\" &&\n review.state !== \"chatting\" &&\n review.state !== \"stale\"\n ) {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `restamp_review is not legal while the draft is in '${review.state}'.`,\n );\n }\n if (req.against_version < 0) {\n throw new ValidationError({\n status: 400,\n code: \"invalid\",\n message: \"against_version must be >= 0\",\n });\n }\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n return review;\n }\n\n // ---- BYO review-agent decision plane (M8 Slice B; D5/§9) ---------------\n //\n // The mock single-agent store acts as BOTH composer and reviewer, surfacing the\n // reviewer decision surface + the two circuit breakers without modeling the link\n // table. hop_count is tracked in a side map; the breakers use the schema defaults\n // (max_hops=3, review_deadline_s=86400). A draft is \"reviewer-held\" iff in_review/\n // chatting (the queue states a reviewer can decide).\n\n /**\n * Test helper: create a draft already ASSIGNED to a reviewer (in_review), mirroring\n * how the real server routes a parked draft to a linked review-agent. Returns the\n * review id so a test can drive the reviewer decision plane offline. `createdAtMs`\n * (optional) backdates created_at so a test can trip the hard review_deadline breaker.\n */\n seedReviewerHeldReview(opts: { fromAddress: string; createdAtMs?: number } = { fromAddress: \"reviewer@extrovertmail.com\" }): string {\n const review = this.createReviewRecord(opts.fromAddress, {\n kind: \"send\",\n subject: \"Pilot proposal\",\n text: \"Here is the Q3 pilot proposal.\",\n to: [\"vp@acme.com\"],\n intent: { summary: \"send pilot proposal\", meta: { goal: \"book_meeting\" } },\n });\n this.setReviewState(review, \"in_review\");\n if (opts.createdAtMs !== undefined) {\n review.created_at = new Date(opts.createdAtMs).toISOString();\n }\n this.state.reviews.set(review.id, review);\n return review.id;\n }\n\n /** Get the reviewer's decision context for a review (mock; §9). */\n getReviewDecisionContext(reviewId: string): ReviewDecisionContext | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const hopCount = this.state.reviewHopCounts.get(reviewId) ?? 0;\n const maxHops = 3;\n const deadlineMs = new Date(review.created_at).getTime() + 86400 * 1000;\n const deadline = new Date(deadlineMs).toISOString();\n const deadlinePassed = Date.now() >= deadlineMs;\n const hopsExhausted = hopCount >= maxHops;\n const forceToHuman = hopsExhausted || deadlinePassed;\n return {\n review,\n turns,\n hop_count: hopCount,\n max_hops: maxHops,\n review_deadline: deadline,\n deadline_passed: deadlinePassed,\n hops_exhausted: hopsExhausted,\n force_to_human: forceToHuman,\n force_reason: hopsExhausted\n ? \"max_hops_reached\"\n : deadlinePassed\n ? \"review_deadline_passed\"\n : undefined,\n };\n }\n\n /**\n * Submit a reviewer decision (mock; §9). approve/edit → the platform \"sends\" with the\n * composer's creds (kind=sent, send_path=reviewer_approved); reject → back to the\n * composer (needs_review, hop_count++) UNLESS a breaker forces the human; escalate →\n * the human queue. revision/version are the CAS (409 STALE on mismatch, NO mutation).\n */\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest): ReviewerDecisionResult | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (TERMINAL_REVIEW_STATES.has(review.state)) {\n throw reviewConflict(\"terminal\", review, `this review is already ${review.state}.`);\n }\n if (review.state !== \"in_review\" && review.state !== \"chatting\") {\n throw reviewConflict(\n \"wrong_state\",\n review,\n `a reviewer can only decide a review it holds (got '${review.state}').`,\n );\n }\n if (review.revision !== req.revision) {\n throw reviewConflict(\n \"stale\",\n review,\n \"revision is stale; re-read the decision context and retry\",\n );\n }\n if (req.version !== undefined && review.version !== req.version) {\n throw reviewConflict(\n \"stale\",\n review,\n \"version is stale; re-read the decision context and retry\",\n );\n }\n\n const hopCount = this.state.reviewHopCounts.get(reviewId) ?? 0;\n const deadlineMs = new Date(review.created_at).getTime() + 86400 * 1000;\n const breakerTripped = hopCount >= 3 || Date.now() >= deadlineMs;\n\n if (req.action === \"approve\" || req.action === \"edit\") {\n if (req.action === \"edit\") {\n if (req.subject !== undefined) review.sent_subject = req.subject;\n if (req.body !== undefined) review.sent_body_text = req.body;\n }\n this.setReviewState(review, \"sent\");\n review.version += 1;\n review.sent_message_id = `<${rid(\"mid\")}@acme.test>`;\n // A BYO reviewer approve is still a delivery the COMPOSER has to learn about -\n // send_path is what tells the two release paths apart on the terminal nudge.\n review.send_path = \"reviewer_approved\";\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return { kind: \"sent\", review, sent: true, message_id: review.sent_message_id, sent_to_human: false };\n }\n\n // reject / escalate → the human queue (needs_review). A reject within budget bumps\n // hop_count and goes back to the composer; a tripped breaker FORCES the human.\n this.setReviewState(review, \"needs_review\");\n review.version += 1;\n if (req.feedback !== undefined) review.decision_feedback = req.feedback;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n\n let forcedByBreaker: string | undefined;\n if (req.action === \"reject\" && !breakerTripped) {\n this.state.reviewHopCounts.set(reviewId, hopCount + 1);\n } else if (req.action === \"reject\" && breakerTripped) {\n forcedByBreaker = hopCount >= 3 ? \"max_hops_reached\" : \"review_deadline_passed\";\n }\n return { kind: \"sent_to_human\", review, sent: false, sent_to_human: true, forced_by_breaker: forcedByBreaker };\n }\n\n // ---- Category registry (Review Loop, D9/D10) --------------------------\n\n /**\n * Browse the registry (mock), newest-first, excluding merged/soft-deleted. `match`\n * is a pure lexical filter (every token must appear in name+description) - NO LLM,\n * mirroring the server.\n */\n private categoryUsage(category: Category): Category {\n const now = Date.now();\n const rows = [...this.state.reviews.values()].filter(r => r.category_id === category.id && Date.parse(r.created_at) <= now);\n const count = (days: number) => rows.filter(r => Date.parse(r.created_at) >= now - days * 86_400_000).length;\n return { ...category, message_count_7d: count(7), message_count_30d: count(30), message_count_90d: count(90),\n last_used_at: rows.map(r => r.created_at).sort().slice(-1)[0],\n pending_review_count: rows.filter(r => [\"needs_review\",\"in_review\",\"chatting\",\"rejected\",\"stale\",\"approved\"].includes(r.state)).length };\n }\n\n listCategories(params: ListCategoriesParams = {}): Page<Category> {\n let items = [...this.state.categories.values()]\n .filter((c) => !c.merged_into)\n .map(c => this.categoryUsage(c))\n .sort((a, b) => b.created_at.localeCompare(a.created_at));\n const tokens = (params.match ?? \"\").trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (tokens.length) {\n items = items.filter((c) => {\n const hay = `${c.name} ${c.description}`.toLowerCase();\n return tokens.every((t) => hay.includes(t));\n });\n }\n const field = ({ messages_7d: \"message_count_7d\", messages_90d: \"message_count_90d\", pending_reviews: \"pending_review_count\" } as const)[params.sort as \"messages_7d\"] ?? \"message_count_30d\";\n items.sort((a, b) => (params.sort === \"name\" ? a.name.toLowerCase().localeCompare(b.name.toLowerCase()) : params.sort === \"last_used\" ? 0 : (b[field] ?? 0) - (a[field] ?? 0)) || (b.last_used_at ?? \"\").localeCompare(a.last_used_at ?? \"\") || a.id.localeCompare(b.id));\n const offset = params.page ? JSON.parse(Buffer.from(params.page, \"base64url\").toString()).o : 0;\n const total = items.length, limit = params.limit ?? 100;\n const next = offset + limit < total ? Buffer.from(JSON.stringify({ o: offset + limit, v: 1 })).toString(\"base64url\") : undefined;\n return { items: items.slice(offset, offset + limit), total, next_cursor: next };\n }\n\n /** Get one category (mock), or undefined when not found. */\n getCategory(categoryId: string): Category | undefined {\n const category = this.state.categories.get(categoryId);\n return category ? this.categoryUsage(category) : undefined;\n }\n\n /** Propose a category (mock): stands immediately, author_kind=agent (D9). */\n proposeCategory(req: ProposeCategoryRequest): Category {\n const name = req.name.trim();\n if ([...this.state.categories.values()].some(c => !c.merged_into && c.name.toLowerCase() === name.toLowerCase())) throw new ConflictError({ status: 409, code: \"conflict\", message: \"Category name already exists; browse and reuse it.\" });\n if (!name) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"name is required\" });\n }\n const ts = now();\n const cat: Category = {\n id: rid(\"cat\"),\n name,\n description: (req.description ?? \"\").trim(),\n scope: req.scope ?? \"org_shared\",\n state: \"supervised\",\n created_by_agent_id: \"agt_mock\",\n author_kind: \"agent\",\n rule_high_water: 0,\n rules_version: 0,\n created_at: ts,\n updated_at: ts,\n };\n this.state.categories.set(cat.id, cat);\n return cat;\n }\n\n /** Rename / re-describe a category (mock) - metadata only (D10). */\n updateCategory(categoryId: string, req: UpdateCategoryRequest): Category | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n if (req.name !== undefined) cat.name = req.name.trim();\n if (req.description !== undefined) cat.description = req.description.trim();\n cat.updated_at = now();\n this.state.categories.set(cat.id, cat);\n return cat;\n }\n\n // ---- Graduation + risk dial (Review Loop, D16/D6/D17) - agent READ + PROPOSE --\n\n /** The mock account-default risk dial (mirrors the server defaults). */\n private accountDial(): RiskDial[\"account\"] {\n return {\n min_confidence: 0.7,\n first_contact_gate: true,\n drift_demote_after: 3,\n canary_rate: 0.05,\n graduate_min_approvals: 20,\n graduate_min_age_hours: 24,\n auto_send_cap_per_day: 50,\n };\n }\n\n /**\n * Read the effective risk dial (mock): the account default + every category with an\n * inherited (null override) effective dial. The mock category carries no overrides,\n * so every category inherits - effective == account.\n */\n getRiskDial(): RiskDial {\n const account = this.accountDial();\n const categories = [...this.state.categories.values()]\n .filter((c) => !c.merged_into)\n .map((c) => ({\n category_id: c.id,\n min_confidence: null,\n first_contact_gate: null,\n drift_demote_after: null,\n canary_rate: null,\n graduate_min_approvals: null,\n graduate_min_age_hours: null,\n effective: { ...account },\n }));\n return { account, categories };\n }\n\n private nextGraduationState(state: Category[\"state\"]): string {\n if (state === \"supervised\") return \"auto_notify\";\n if (state === \"auto_notify\") return \"auto_silent\";\n return \"\";\n }\n\n /**\n * Read a category's graduation gate status (mock). The mock category has no\n * counters, so it reports zero clean approvals / zero drift against the account\n * defaults; can_graduate is true for supervised→auto_notify (no maturity gate).\n */\n getGraduationStatus(categoryId: string): GraduationStatus | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n const dial = this.accountDial();\n const next = this.nextGraduationState(cat.state);\n const approvalsMet = 0 >= dial.graduate_min_approvals;\n const ageMet = false;\n const maturityMet = approvalsMet && ageMet;\n const canGraduate =\n next === \"auto_notify\" ? true : next === \"auto_silent\" ? maturityMet : false;\n return {\n category_id: cat.id,\n state: cat.state,\n next_state: next,\n never_graduate: false,\n clean_approval_count: 0,\n graduate_min_approvals: dial.graduate_min_approvals,\n approvals_met: approvalsMet,\n age_hours: 0,\n graduate_min_age_hours: dial.graduate_min_age_hours,\n age_met: ageMet,\n maturity_gate_met: maturityMet,\n drift_count: 0,\n drift_demote_after: dial.drift_demote_after,\n can_graduate: canGraduate,\n };\n }\n\n /**\n * Propose graduating a category (mock): returns the current gate status without\n * changing the category state (D16 - an agent can never flip the bit).\n */\n proposeGraduation(categoryId: string, _req: ProposeGraduationRequest): GraduationStatus | undefined {\n return this.getGraduationStatus(categoryId);\n }\n\n /**\n * Read the D19/§8 backlog-reconciliation status (mock): counts the QUEUED drafts in a\n * category that are stale vs current-enough against the current rules-version. The\n * mock has no per-draft composed_* stamps on its Review fixtures, so every queued\n * draft reads as current-enough (composed 0 vs current 0) - the contract shape is\n * exercised; the integer-compare logic is covered by the Go tests.\n */\n getScanBacklogStatus(categoryId: string): ScanBacklogStatus | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n let queued = 0;\n for (const review of this.state.reviews.values()) {\n if (\n review.category_id === categoryId &&\n (review.state === \"needs_review\" ||\n review.state === \"in_review\" ||\n review.state === \"chatting\")\n ) {\n queued += 1;\n }\n }\n return {\n category_id: cat.id,\n state: cat.state,\n queued,\n current_enough: queued,\n stale: 0,\n current_category_rules_version: cat.rules_version,\n current_house_style_version: 0,\n staleness_tolerance: 0,\n };\n }\n\n /**\n * Read the demand-driven pacing state (mock - M7 Slice B/§8): the cursor + effective\n * window/ceiling/interval + each queued draft's classification. The mock has no cursor\n * (nothing reviewed) and no composed_* stamps, so every queued draft reads in-window-\n * fresh until the window fills, then ahead; the contract shape is exercised (the\n * cursor/staleness mechanics are covered by the Go tests).\n */\n getCategoryPacingState(categoryId: string): CategoryPacingState | undefined {\n const cat = this.state.categories.get(categoryId);\n if (!cat) return undefined;\n const lookaheadWindow = 3;\n const queuedIds: string[] = [];\n for (const review of this.state.reviews.values()) {\n if (\n review.category_id === categoryId &&\n (review.state === \"needs_review\" ||\n review.state === \"in_review\" ||\n review.state === \"chatting\")\n ) {\n queuedIds.push(review.id);\n }\n }\n const items: PacingItem[] = queuedIds.map((id, i) => ({\n review_id: id,\n state: i < lookaheadWindow ? \"in_window_fresh\" : \"ahead\",\n }));\n return {\n category_id: cat.id,\n cursor_advanced_count: 0,\n lookahead_window: lookaheadWindow,\n rework_batch_max: 10,\n nudge_min_interval_ms: 5000,\n queued: queuedIds.length,\n in_window: Math.min(queuedIds.length, lookaheadWindow),\n redrafting: 0,\n items,\n };\n }\n\n // ---- Writing rules + house-style + precedence ladder + audit/undo ------\n\n /** rank a rule for the §7 ladder (mock mirror of the server's deterministic order). */\n private ruleRank(r: Rule): number[] {\n const hard = r.kind === \"hard\" ? 1 : 0;\n const spec = r.scope_agent_id ? 2 : r.scope === \"category\" ? 1 : 0;\n const human = r.author_kind === \"human\" ? 1 : 0;\n return [hard, spec, human, r.rev, r.priority];\n }\n\n /** Get the ORDERED active rule set (mock) - §7 ladder + category-before-general. */\n getRules(params: GetRulesParams = {}): RuleSnapshot {\n const active = [...this.state.rules.values()].filter((r) => r.status === \"active\");\n const byRank = (a: Rule, b: Rule): number => {\n const ra = this.ruleRank(a);\n const rb = this.ruleRank(b);\n for (let i = 0; i < ra.length; i += 1) {\n const da = ra[i] ?? 0;\n const db = rb[i] ?? 0;\n if (da !== db) return db - da;\n }\n return a.id < b.id ? -1 : 1;\n };\n let general: Rule[] = [];\n let category: Rule[] = [];\n if (!params.scope || params.scope === \"general\") {\n general = active.filter((r) => r.scope === \"general\").sort(byRank);\n }\n if (params.category_id && (!params.scope || params.scope === \"category\")) {\n category = active.filter((r) => r.scope === \"category\" && r.category_id === params.category_id).sort(byRank);\n }\n const items = [...category, ...general];\n return {\n items,\n total: items.length,\n house_style_version: 1,\n category_rules_version: params.category_id ? 1 : 0,\n rule_high_water: params.category_id ? 1 : 0,\n composition_token: params.scope ? undefined : `cmp_fixture_${params.category_id ?? \"general\"}`,\n composition_token_expires_at: params.scope ? undefined : new Date(Date.now() + 600_000).toISOString(),\n };\n }\n\n /** Save / edit a rule (mock) - append-only by supersession (D11). */\n private learnedRules = new Map<string, {fingerprint: string; result: LearnedReviewRule}>();\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest): LearnedReviewRule {\n const fingerprint = JSON.stringify({reviewId, req});\n const prior = this.learnedRules.get(req.client_id);\n if (prior) { if (prior.fingerprint !== fingerprint) throw new ValidationError({status:409,code:\"conflict\",message:\"learning retry identity changed\"}); return structuredClone(prior.result); }\n const turn = (this.state.reviewTurns.get(reviewId) ?? []).find(t => t.id === req.source_turn_id);\n if (!turn || turn.actor_kind !== \"human\" || !turn.actor_id) throw new ValidationError({status:403,code:\"forbidden_scope\",message:\"learning requires authenticated human feedback\"});\n const rule = this.saveRule({...req, scope:req.target === \"category\" ? \"category\" : \"general\", source_review_id:reviewId,source_turn_id:turn.id});\n rule.source_turn_id = turn.id;\n rule.rule_layer = req.target === \"org_house\" ? \"org\" : \"project\";\n if (req.target === \"org_house\") delete rule.project_id;\n rule.source_review_id = reviewId;\n rule.source_turn_id = turn.id;\n const audit = [...this.state.ruleAudit.values()].find(entry => entry.entity_id === rule.id)!;\n audit.after_json = ruleSnapshotJSON(rule);\n const result: LearnedReviewRule = {rule, source_review_id:reviewId, source_turn_id:turn.id, human_id:turn.actor_id, audit_id:audit.id, propagation:\"queued\"};\n this.learnedRules.set(req.client_id,{fingerprint,result:structuredClone(result)});\n return result;\n }\n\n saveRule(req: SaveRuleRequest): Rule {\n const text = req.rule_text.trim();\n if (!text) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"rule_text is required\" });\n }\n const categoryId = (req.category_id ?? \"\").trim();\n const scope = req.scope ?? (categoryId ? \"category\" : \"general\");\n if (scope === \"general\" && categoryId) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"scope=general forbids a category_id\" });\n }\n if (scope === \"category\" && !categoryId) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"scope=category requires a category_id\" });\n }\n const ts = now();\n if (req.supersedes_id) {\n const prior = this.state.rules.get(req.supersedes_id);\n if (!prior) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"rule not found\" });\n prior.status = \"superseded\";\n this.state.rules.set(prior.id, prior);\n const next: Rule = {\n ...prior,\n id: rid(\"rule\"),\n rev: prior.rev + 1,\n rule_text: text,\n kind: req.kind ?? prior.kind,\n priority: req.priority ?? prior.priority,\n status: \"active\",\n supersedes_id: prior.id,\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(next.id, next);\n this.recordRuleAudit(\"supersede\", next.id, ruleSnapshotJSON(prior), ruleSnapshotJSON(next));\n return next;\n }\n const rule: Rule = {\n id: rid(\"rule\"),\n lineage_id: rid(\"rln\"),\n rev: 1,\n // Agent-plane saves are ALWAYS project-layer, bound to the key's project (an\n // agent cannot author org-layer / house-style rules in v1).\n rule_layer: \"project\",\n org_id: MOCK_ORG_ID,\n project_id: MOCK_PROJECT_ID,\n scope,\n category_id: scope === \"category\" ? categoryId : undefined,\n scope_agent_id: req.scope_agent_id || undefined,\n rule_text: text,\n kind: req.kind ?? \"soft\",\n priority: req.priority ?? 0,\n status: \"active\",\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(rule.id, rule);\n this.recordRuleAudit(\"create\", rule.id, \"{}\", ruleSnapshotJSON(rule));\n return rule;\n }\n\n /** Promote a rule between layers (mock, via supersession), or undefined when unknown. */\n promoteRule(ruleId: string, toScope: \"general\" | \"category\"): Rule | undefined {\n const prior = this.state.rules.get(ruleId);\n if (!prior) return undefined;\n if (prior.scope === toScope) return prior;\n if (toScope === \"category\" && !prior.category_id) {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"promote to category needs a category\" });\n }\n prior.status = \"superseded\";\n this.state.rules.set(prior.id, prior);\n const ts = now();\n const next: Rule = {\n ...prior,\n id: rid(\"rule\"),\n lineage_id: rid(\"rln\"),\n rev: 1,\n scope: toScope,\n category_id: toScope === \"category\" ? prior.category_id : undefined,\n status: \"active\",\n supersedes_id: prior.id,\n author_kind: \"agent\",\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(next.id, next);\n this.recordRuleAudit(\"supersede\", next.id, ruleSnapshotJSON(prior), ruleSnapshotJSON(next));\n return next;\n }\n\n /** Retire a rule (mock) - soft delete, or undefined when unknown. */\n retireRule(ruleId: string): Rule | undefined {\n const rule = this.state.rules.get(ruleId);\n if (!rule) return undefined;\n if (rule.status === \"retired\") return rule;\n rule.status = \"retired\";\n rule.updated_at = now();\n this.state.rules.set(rule.id, rule);\n this.recordRuleAudit(\"retire\", rule.id, ruleSnapshotJSON(rule), ruleSnapshotJSON(rule));\n return rule;\n }\n\n /** Read the rule/category change audit log (mock). */\n getRuleAudit(params: GetRuleAuditParams = {}): Page<RuleAuditEntry> {\n let items = [...this.state.ruleAudit.values()].sort((a, b) => b.created_at.localeCompare(a.created_at));\n if (params.entity_kind) items = items.filter((e) => e.entity_kind === params.entity_kind);\n if (params.entity_id) items = items.filter((e) => e.entity_id === params.entity_id);\n return { items, total: items.length };\n }\n\n /** Undo a rule change (mock) - restore the prior version; idempotent (re-undo 409). */\n undoRuleChange(udoId: string): Rule {\n const entry = this.state.ruleAudit.get(udoId);\n if (!entry) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"audit row not found\" });\n if (entry.entity_kind !== \"rule\") {\n throw new ValidationError({ status: 400, code: \"invalid\", message: \"only rule entities are restorable here\" });\n }\n if (entry.undone) throw new ConflictError({ status: 409, code: \"conflict\", message: \"already undone\" });\n const head = this.state.rules.get(entry.entity_id);\n if (!head) throw new NotFoundError({ status: 404, code: \"not_found\", message: \"rule head not found\" });\n entry.undone = true;\n this.state.ruleAudit.set(entry.id, entry);\n const before = JSON.parse(entry.before_json ?? \"{}\") as Partial<Rule>;\n head.status = \"superseded\";\n this.state.rules.set(head.id, head);\n const ts = now();\n const restored: Rule = {\n ...head,\n id: rid(\"rule\"),\n rev: head.rev + 1,\n rule_text: before.rule_text ?? head.rule_text,\n status: before.rule_text ? \"active\" : \"retired\",\n supersedes_id: head.id,\n created_at: ts,\n updated_at: ts,\n };\n this.state.rules.set(restored.id, restored);\n this.recordRuleAudit(\"restore\", restored.id, ruleSnapshotJSON(head), ruleSnapshotJSON(restored));\n return restored;\n }\n\n /** recordRuleAudit appends one change/undo audit row (mock). */\n private recordRuleAudit(action: RuleAuditEntry[\"action\"], entityId: string, before: string, after: string): void {\n const entry: RuleAuditEntry = {\n id: rid(\"udo\"),\n entity_kind: \"rule\",\n entity_id: entityId,\n action,\n actor_kind: \"agent\",\n actor_id: \"agent:agt_mock\",\n before_json: before,\n after_json: after,\n undone: false,\n created_at: now(),\n };\n this.state.ruleAudit.set(entry.id, entry);\n }\n\n /**\n * enqueueReviewEvent appends a durable nudge for a review with the next per-review\n * monotonic seq (mock mirror of the server's enqueue-on-transition).\n */\n private enqueueReviewEvent(\n reviewId: string,\n reason: ReviewEvent[\"reason\"],\n payload?: Record<string, unknown>,\n ): ReviewEvent {\n const list = this.state.reviewEvents.get(reviewId) ?? [];\n const last = list[list.length - 1];\n const review = this.state.reviews.get(reviewId);\n const ev: ReviewEvent = {\n seq: last ? last.seq + 1 : 1,\n id: rid(\"ndg\"),\n reason,\n review_id: reviewId,\n category_id: review?.category_id,\n payload,\n created_at: now(),\n };\n list.push(ev);\n this.state.reviewEvents.set(reviewId, list);\n return ev;\n }\n\n /**\n * Emit the terminal-class nudge for the review's current state. `sent` and\n * `cancelled` close the row. `failed` emits `send_failed`, and a later explicit\n * cancel emits `cancelled`; this helper deliberately does not claim the first is\n * the last event the review can produce.\n */\n private enqueueTerminalNudge(review: Review): ReviewEvent | undefined {\n switch (review.state) {\n case \"sent\":\n case \"auto_sent\": {\n const payload: Record<string, unknown> = {\n state: review.state,\n message_id: review.sent_message_id ?? \"\",\n send_path: review.send_path ?? \"\",\n sent_at: review.sent_at ?? now(),\n };\n if (review.state === \"sent\") {\n // `decision` is derived the same way the chat surface derives it, so an\n // agent reading the nudge and an agent reading the thread never disagree\n // about whether the reviewer edited its draft.\n payload.decision =\n review.sent_body_text || review.sent_subject || review.diff_unified\n ? \"edited\"\n : \"approved\";\n } else {\n payload.gate_outcome = review.gate_outcome ?? \"\";\n }\n return this.enqueueReviewEvent(review.id, \"sent\", payload);\n }\n case \"failed\":\n // agent_retryable is FALSE and next_action says compose a NEW message: the\n // only live edge out of failed is cancel, so telling an agent to retry a row\n // nobody can move is how a drain loop spins forever.\n return this.enqueueReviewEvent(review.id, \"send_failed\", {\n state: \"failed\",\n error: review.send_error ?? \"\",\n agent_retryable: false,\n next_action: \"compose_and_submit_a_new_message\",\n });\n case \"cancelled\":\n return this.enqueueReviewEvent(review.id, \"cancelled\", { state: \"cancelled\" });\n default:\n return undefined;\n }\n }\n\n /**\n * Enqueue `front_run_next` - the signal that the review reached a terminal state\n * while the agent was still trying to act on it.\n *\n * Deduped on (review, terminal state, parent revision) so a retry loop hitting\n * the same 409 collapses to ONE row rather than one per attempt. Best-effort by\n * design: it must never turn a 409 into a failure.\n */\n private enqueueFrontRunNudge(review: Review, parentRevision: number): void {\n const key = `frontrun:${review.id}:${review.state}:${parentRevision}`;\n const list = this.state.reviewEvents.get(review.id) ?? [];\n if (list.some((e) => e.reason === \"front_run_next\" && e.payload?.dedupe_key === key)) return;\n this.enqueueReviewEvent(review.id, \"front_run_next\", {\n dedupe_key: key,\n state: review.state,\n sent_message_id: review.sent_message_id,\n your_parent_revision: parentRevision,\n current_revision: review.revision,\n diff_available: (review.diff_unified ?? \"\").trim() !== \"\",\n });\n }\n\n /**\n * Mock-only: mirror a console/human approve that delivers the draft. The live\n * server does this on the console plane (never an SDK call); the hook exists so a\n * drain loop can be driven to its terminal `sent` event offline.\n */\n simulateReviewApproved(reviewId: string, opts: { edited?: boolean } = {}): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n if (opts.edited) review.sent_body_text = review.proposed_body_text;\n this.setReviewState(review, \"sent\");\n review.version += 1;\n review.sent_message_id = `<${rid(\"mid\")}@acme.test>`;\n review.send_path = \"human_reviewed\";\n review.sent_at = now();\n review.updated_at = review.sent_at;\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * Mock-only: mirror an approved draft whose delivery then FAILED at the provider.\n * This is the case the composing agent was previously never told about - the\n * console showed the error and the agent's queue stayed silent - so the loop test\n * that matters most drives this path.\n */\n simulateSendFailed(reviewId: string, error = \"provider rejected the message\"): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n this.setReviewState(review, \"failed\");\n review.version += 1;\n review.send_error = error;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n this.enqueueTerminalNudge(review);\n return review;\n }\n\n /**\n * simulateReviewRejected is a mock-only test hook that mirrors a console reject:\n * it enqueues a `rejected` durable nudge to the composer so the realtime\n * drain/ack surface has a deterministic event to exercise offline. The live\n * server enqueues this on the reject TRANSITION (console-only, never an SDK call).\n */\n simulateReviewRejected(reviewId: string, comment = \"soften the tone\"): ReviewEvent {\n return this.enqueueReviewEvent(reviewId, \"rejected\", { decision: \"rejected\", comment });\n }\n\n /**\n * simulateReviewOpened is a mock-only test hook that mirrors a reviewer opening a\n * draft (needs_review -> in_review). There is no agent-plane \"open for review\"\n * call (a reviewer/human opens it), so tests of the M5 chat surface use this to get\n * a chattable draft offline.\n */\n simulateReviewOpened(reviewId: string): Review | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n this.setReviewState(review, \"in_review\");\n review.version += 1;\n review.updated_at = now();\n this.state.reviews.set(reviewId, review);\n return review;\n }\n\n /**\n * simulateHumanComment is a mock-only test hook that mirrors the console chat side-\n * panel: it appends a human_comment turn so get_review_feedback has a comment to\n * assemble. The live server writes this on the console plane (never an SDK call).\n */\n simulateHumanComment(reviewId: string, body: string): ReviewTurn | undefined {\n const review = this.state.reviews.get(reviewId);\n if (!review) return undefined;\n const turns = this.state.reviewTurns.get(reviewId) ?? [];\n const turn: ReviewTurn = {\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"human_comment\",\n actor_kind: \"human\",\n actor_id: \"user_demo\",\n body,\n created_at: now(),\n };\n turns.push(turn);\n this.state.reviewTurns.set(reviewId, turns);\n return turn;\n }\n\n /** Drain the next un-acked review events (mock), FIFO per review + cursors. */\n listReviewEvents(params: ListReviewEventsParams = {}): ReviewEventsResult {\n const want = params.review_id?.trim();\n const events: ReviewEvent[] = [];\n const touched = new Set<string>();\n for (const [reviewId, list] of this.state.reviewEvents) {\n if (want && reviewId !== want) continue;\n const acked = this.state.reviewEventCursors.get(reviewId) ?? 0;\n for (const ev of list) {\n if (ev.seq > acked) {\n events.push(ev);\n touched.add(reviewId);\n }\n }\n }\n events.sort((a, b) => (a.review_id ?? \"\").localeCompare(b.review_id ?? \"\") || a.seq - b.seq);\n const limited = params.limit && params.limit > 0 ? events.slice(0, params.limit) : events;\n const cursors = [...touched].map((reviewId) => ({\n review_id: reviewId,\n last_acked_seq: this.state.reviewEventCursors.get(reviewId) ?? 0,\n }));\n return { events: limited, cursors };\n }\n\n /**\n * Long-poll for a review event (mock). Offline there is nothing to wait FOR, so it\n * returns the immediate drain (empty when caught up) - the server's \"empty on\n * timeout\" contract.\n */\n waitForReviewEvent(params: WaitForReviewEventParams = {}): ReviewEventsResult {\n return this.listReviewEvents({ review_id: params.review_id, limit: params.limit });\n }\n\n /** Ack review events (mock): advance per-review cursors monotonically. */\n ackReviewEvent(req: AckReviewEventRequest): AckReviewEventResult {\n const cursors: { review_id: string; last_acked_seq: number }[] = [];\n for (const a of req.acks ?? []) {\n const reviewId = a.review_id?.trim();\n if (!reviewId) continue;\n const prev = this.state.reviewEventCursors.get(reviewId) ?? 0;\n const next = Math.max(prev, a.through_seq); // monotonic (exactly-once effect)\n this.state.reviewEventCursors.set(reviewId, next);\n cursors.push({ review_id: reviewId, last_acked_seq: next });\n }\n return { cursors };\n }\n\n /** Mint a needs_review record + its intent (agent_note) and initial-draft turns. */\n private createReviewRecord(\n address: string,\n opts: {\n kind: \"send\" | \"reply\" | \"forward\";\n subject: string;\n text: string;\n html?: string;\n to: string[];\n cc?: string[];\n bcc?: string[];\n intent?: { summary: string; meta?: Record<string, unknown> };\n categoryId?: string;\n /** The mode the policy resolved. Every agent-plane send writes a row, direct included. */\n mode?: \"review\" | \"direct\";\n },\n ): Review {\n const id = rid(\"rr\");\n const created = now();\n const mode = opts.mode ?? \"review\";\n const review: Review = {\n id,\n state: \"needs_review\",\n mode,\n effective_mode: mode,\n closed: false,\n kind: opts.kind,\n from_address: address,\n agent_id: rid(\"agt\"),\n category_id: opts.categoryId,\n intent_summary: opts.intent?.summary ?? \"\",\n intent_meta: opts.intent?.meta,\n revision: 0,\n version: 0,\n proposed_subject: opts.subject,\n proposed_body_text: opts.text,\n proposed_body_html: opts.html,\n proposed_to: opts.to,\n proposed_cc: opts.cc,\n proposed_bcc: opts.bcc,\n created_at: created,\n updated_at: created,\n };\n this.state.reviews.set(id, review);\n const turns: ReviewTurn[] = [];\n if (opts.intent?.summary?.trim()) {\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_note\",\n actor_kind: \"agent\",\n body: opts.intent.summary,\n metadata: { kind: \"intent\" },\n created_at: created,\n });\n }\n turns.push({\n id: rid(\"turn\"),\n seq: turns.length + 1,\n turn_type: \"agent_draft\",\n actor_kind: \"agent\",\n body: opts.text,\n revision: 0,\n created_at: created,\n });\n this.state.reviewTurns.set(id, turns);\n return review;\n }\n\n /** Append a message to an inbox's store and return it (mock helper). */\n private appendMessage(\n address: string,\n opts: {\n direction: Message[\"direction\"];\n from: string;\n to: string[];\n cc?: string[];\n subject: string;\n text: string;\n html?: string;\n threadId: string;\n attachments?: AttachmentInput[];\n },\n ): Message {\n const id = rid(\"msg\");\n const inbox = this.state.inboxes.get(address);\n const msg: Message = {\n id,\n thread_id: opts.threadId,\n inbox: inbox?.address ?? address,\n direction: opts.direction,\n from: inbox?.display_name\n ? { email: opts.from, name: inbox.display_name }\n : { email: opts.from },\n to: opts.to.map((email) => ({ email })),\n cc: (opts.cc ?? []).map((email) => ({ email })),\n subject: opts.subject,\n text: opts.text,\n html: opts.html ?? null,\n extracted_text: opts.text.trim() || null,\n extracted_html: opts.html?.trim() || null,\n message_id: `<${id}@${address.split(\"@\")[1] ?? PAID_SHARED_DOMAIN}>`,\n folder: opts.direction === \"inbound\" ? \"INBOX\" : \"Sent\",\n seen: opts.direction === \"outbound\",\n date: now(),\n };\n const arr = this.state.messages.get(address) ?? [];\n arr.push(msg);\n this.state.messages.set(address, arr);\n if (opts.direction === \"inbound\") this.emitEvent(\"message.received\", msg);\n if (opts.attachments && opts.attachments.length > 0) {\n const stored: StoredAttachment[] = opts.attachments.map((a, i) => ({\n meta: {\n id: `att_${i + 1}_${id}`,\n filename: a.filename,\n content_type: a.content_type || \"application/octet-stream\",\n size: base64ByteLength(a.content_base64),\n },\n content_base64: a.content_base64,\n }));\n this.state.attachments.set(id, stored);\n }\n return msg;\n }\n\n /** List a message's attachment metadata (mirrors the list endpoint). */\n listAttachments(messageId: string): Page<Attachment> {\n this.getMessage(messageId); // throws if the message does not exist\n const items = (this.state.attachments.get(messageId) ?? []).map((a) => a.meta);\n return { items, total: items.length };\n }\n\n /** Fetch one attachment's bytes + metadata (mirrors the download endpoint). */\n getAttachment(messageId: string, attachmentId: string): AttachmentDownload {\n const stored = (this.state.attachments.get(messageId) ?? []).find(\n (a) => a.meta.id === attachmentId,\n );\n if (!stored) throw new Error(`attachment not found: ${attachmentId}`);\n return {\n filename: stored.meta.filename,\n content_type: stored.meta.content_type,\n content_base64: stored.content_base64,\n };\n }\n\n listMessages(address: string, params: ListMessagesParams = {}): Page<Message> {\n address = this.addrOf(address);\n let items = [...(this.state.messages.get(address) ?? [])].sort((a, b) =>\n b.date.localeCompare(a.date),\n );\n if (params.unread) items = items.filter((m) => !m.seen);\n if (params.from) {\n const q = params.from.toLowerCase();\n items = items.filter((m) => m.from.email.toLowerCase().includes(q));\n }\n if (params.to) {\n const q = params.to.toLowerCase();\n items = items.filter((m) => m.to.some((a) => a.email.toLowerCase().includes(q)));\n }\n if (params.subject) {\n const q = params.subject.toLowerCase();\n items = items.filter((m) => m.subject.toLowerCase().includes(q));\n }\n const total = items.length;\n const offset = params.offset ?? (params.cursor ? Number(params.cursor) : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Message> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n /** Fetch a single message by id across all inboxes. */\n getMessage(messageId: string): Message {\n for (const msgs of this.state.messages.values()) {\n const found = msgs.find((m) => m.id === messageId);\n if (found) return found;\n }\n throw new Error(`message not found: ${messageId}`);\n }\n\n /** Toggle the \\Seen flag for a message by id. */\n markRead(messageId: string, read: boolean): Message {\n const msg = this.getMessage(messageId);\n msg.seen = read;\n return msg;\n }\n\n /** Render a minimal RFC822 .eml for a message by id (mirrors the raw endpoint). */\n getMessageRaw(messageId: string): string {\n const m = this.getMessage(messageId);\n const to = m.to.map((a) => a.email).join(\", \");\n const from = m.from.name ? `${m.from.name} <${m.from.email}>` : m.from.email;\n const body = m.text ?? m.html ?? \"\";\n const contentType = m.text !== null ? \"text/plain\" : \"text/html\";\n return [\n `From: ${from}`,\n `To: ${to}`,\n `Subject: ${m.subject}`,\n `Message-ID: ${m.message_id}`,\n `Date: ${m.date}`,\n \"MIME-Version: 1.0\",\n `Content-Type: ${contentType}; charset=utf-8`,\n \"\",\n body,\n \"\",\n ].join(\"\\r\\n\");\n }\n\n /** Full-text search scoped to one inbox. */\n searchMessages(address: string, params: SearchMessagesParams): Page<Message> {\n address = this.addrOf(address);\n const q = params.q.toLowerCase();\n const items = [...(this.state.messages.get(address) ?? [])]\n .filter(\n (m) =>\n m.subject.toLowerCase().includes(q) ||\n [m.text, m.html]\n .filter((part): part is string => typeof part === \"string\" && part.length > 0)\n .join(\"\\n\")\n .toLowerCase()\n .includes(q) ||\n m.from.email.toLowerCase().includes(q),\n )\n .sort((a, b) => b.date.localeCompare(a.date));\n const total = items.length;\n const offset = params.offset ?? (params.cursor ? Number(params.cursor) : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Message> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n listThreads(address: string, params: ListThreadsParams = {}): Page<Thread> {\n address = this.addrOf(address);\n const items = this.threadsFor(address);\n return this.paginateThreads(items, params);\n }\n\n /** Thread-level search (subject / snippet / participant substring). */\n searchThreads(address: string, params: SearchMessagesParams): Page<Thread> {\n address = this.addrOf(address);\n const q = params.q.toLowerCase();\n const items = this.threadsFor(address).filter(\n (t) =>\n t.subject.toLowerCase().includes(q) ||\n t.snippet.toLowerCase().includes(q) ||\n t.participants.join(\" \").toLowerCase().includes(q),\n );\n return this.paginateThreads(items, params);\n }\n\n private paginateThreads(\n items: Thread[],\n params: Pick<ListThreadsParams, \"limit\" | \"offset\" | \"cursor\">,\n ): Page<Thread> {\n const total = items.length;\n const cursorOffset = params.cursor === undefined ? undefined : Number(params.cursor);\n const offset = params.offset ?? (Number.isFinite(cursorOffset) ? cursorOffset! : 0);\n const limit = params.limit ?? 25;\n const page = items.slice(offset, offset + limit);\n const result: Page<Thread> = { items: page, total };\n if (offset + page.length < total) result.next_cursor = String(offset + page.length);\n return result;\n }\n\n /** Fetch one thread (with messages, oldest-first) by id under an inbox. */\n getThread(address: string, threadId: string): ThreadDetail {\n address = this.addrOf(address);\n const messages = (this.state.messages.get(address) ?? [])\n .filter((m) => m.thread_id === threadId)\n .sort((a, b) => a.date.localeCompare(b.date));\n if (messages.length === 0) throw new Error(`thread not found: ${threadId}`);\n return { ...this.buildThread(address, threadId, messages), messages };\n }\n\n getSubmission(address: string, submissionId: string): Submission | undefined {\n address = this.addrOf(address);\n const message = (this.state.messages.get(address) ?? []).find((item) => item.submission_id === submissionId);\n if (!message) return undefined;\n return { submission_id: submissionId, inbox: address, sent_message_id: message.id, sent_copy_status: \"stored\",\n transport: message.transport ?? {}, recipients: [...message.to, ...(message.cc ?? [])].map(({ email }) => ({ recipient: email, state: \"accepted\" })),\n created_at: message.date, updated_at: message.date };\n }\n\n /**\n * Delete a message by id: move it to Trash (soft) or remove it (expunge / it\n * already lives in Trash). Returns undefined when the inbox/message is unknown\n * so the transport can surface a 404.\n */\n deleteMessage(address: string, messageId: string, expunge: boolean): DeleteResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const msgs = this.state.messages.get(address) ?? [];\n const msg = msgs.find((m) => m.id === messageId);\n if (!msg) return undefined;\n const hard = expunge || msg.folder === \"Trash\";\n if (hard) {\n this.state.messages.set(address, msgs.filter((m) => m.id !== messageId));\n } else {\n msg.folder = \"Trash\";\n }\n return { id: messageId, deleted: true, expunged: hard, count: 1 };\n }\n\n /** Delete every message in a thread by id (move to Trash or expunge). */\n deleteThread(address: string, threadId: string, expunge: boolean): DeleteResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const msgs = this.state.messages.get(address) ?? [];\n const inThread = msgs.filter((m) => m.thread_id === threadId);\n if (inThread.length === 0) return undefined;\n if (expunge) {\n this.state.messages.set(address, msgs.filter((m) => m.thread_id !== threadId));\n } else {\n for (const m of inThread) m.folder = \"Trash\";\n }\n return { id: threadId, deleted: true, expunged: expunge, count: inThread.length };\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of ids under one inbox.\n * Unknown ids go in `failed`. Returns undefined when the inbox is unknown.\n */\n batchUpdateMessages(\n address: string,\n ids: string[],\n read: boolean | undefined,\n folder: string | undefined,\n ): BatchUpdateResult | undefined {\n address = this.addrOf(address);\n if (!this.getInbox(address)) return undefined;\n const byId = new Map((this.state.messages.get(address) ?? []).map((m) => [m.id, m]));\n const updated: string[] = [];\n const failed: string[] = [];\n for (const id of ids) {\n const m = byId.get(id);\n if (!m) {\n failed.push(id);\n continue;\n }\n if (read !== undefined) m.seen = read;\n if (folder) m.folder = folder;\n updated.push(id);\n }\n return { updated, failed };\n }\n\n /** Build all threads for an inbox, newest-active first. */\n private threadsFor(address: string): Thread[] {\n const byThread = new Map<string, Message[]>();\n for (const m of this.state.messages.get(address) ?? []) {\n const arr = byThread.get(m.thread_id) ?? [];\n arr.push(m);\n byThread.set(m.thread_id, arr);\n }\n const items = [...byThread.entries()].map(([id, ms]) => this.buildThread(address, id, ms, true));\n items.sort((a, b) => b.last_message_at.localeCompare(a.last_message_at));\n return items;\n }\n\n private buildThread(address: string, id: string, ms: Message[], summary = false): Thread {\n const sorted = [...ms].sort((a, b) => a.date.localeCompare(b.date));\n const last = sorted[sorted.length - 1]!;\n const seen = new Set<string>();\n const participants: string[] = [];\n const participantMessages = summary ? [last] : sorted;\n for (const m of participantMessages) {\n for (const a of [m.from, ...m.to, ...(m.cc ?? []), ...(m.reply_to ?? [])]) {\n const key = a.email.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n participants.push(a.name ? `${a.name} <${a.email}>` : a.email);\n }\n }\n return {\n id,\n inbox_id: this.state.inboxes.get(address)?.address ?? address,\n subject: normalizeThreadSubject(sorted[0]?.subject ?? \"(no subject)\"),\n participants,\n message_count: sorted.length,\n last_message_at: last.date,\n snippet: (last.text ?? last.html ?? \"\").slice(0, 120),\n unread: !last.seen,\n last_message_has_attachments: (this.state.attachments.get(last.id)?.length ?? 0) > 0,\n last_message_id: last.id,\n };\n }\n\n /**\n * Mock wait_for_email: synthesizes a plausible OTP email after a short delay so the OTP example\n * runs end-to-end offline. The live implementation waits through the platform receive path.\n */\n async waitForEmail(address: string, req: WaitForEmailRequest): Promise<WaitForEmailResult> {\n address = this.addrOf(address);\n const inbox = this.state.inboxes.get(address);\n const match = req.match ? compileWaitRegex(req.match) : undefined;\n const delayMs = Math.min(400, (req.timeout_seconds ?? 300) * 1000);\n await new Promise((r) => setTimeout(r, delayMs));\n const code = String(Math.floor(100000 + Math.random() * 900000));\n const from = req.from ?? \"no-reply@acme.test\";\n const text = `Your Acme verification code is ${code}. It expires in 10 minutes.\\n\\nOr verify here: https://acme.test/verify?token=${rid(\"vt\")}`;\n const subject = req.subject ?? \"Your verification code\";\n if (match && !match.test(`${subject}\\n${text}`)) {\n return { timed_out: true, message: null, extracted: { otp: null, link: null } };\n }\n const message: Message = {\n id: rid(\"msg\"),\n thread_id: rid(\"thr\"),\n inbox: inbox?.address ?? address,\n direction: \"inbound\",\n from: { email: from, name: \"Acme\" },\n to: [{ email: address }],\n cc: [],\n subject,\n text,\n html: `<p>${text.replace(/\\n/g, \"<br/>\")}</p>`,\n extracted_text: text,\n extracted_html: `<p>${text.replace(/\\n/g, \"<br/>\")}</p>`,\n message_id: `<${rid(\"mid\")}@acme.test>`,\n folder: \"INBOX\",\n seen: false,\n date: now(),\n };\n const existing = this.state.messages.get(address) ?? [];\n existing.push(message);\n this.state.messages.set(address, existing);\n this.emitEvent(\"message.received\", message);\n return { timed_out: false, message, extracted: extractCredentials(message) };\n }\n\n /**\n * Append one event to the in-memory journal that backs the SSE stream. Mirrors\n * the server: a monotonic seq is the resume token and the payload is the same\n * envelope a webhook delivers.\n */\n private emitEvent(event: string, message: Message): void {\n const seq = ++this.state.eventSeq;\n this.state.events.push({\n event,\n seq,\n id: rid(\"evt\"),\n created_at: now(),\n inbox: message.inbox,\n message,\n });\n }\n\n /**\n * Replay journal events after `lastEventId`, scoped to one inbox (or all when\n * `address` is null). The offline mock yields the backlog and returns; the live\n * transport tails an open connection. Both honor the same resume contract.\n */\n async *streamEvents(\n address: string | null,\n lastEventId?: number,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n const after = lastEventId ?? 0;\n // Events are keyed by the canonical address; normalize an id ref to it so a\n // handle that streams by its opaque id still matches its own events.\n const scope = address === null ? null : this.addrOf(address);\n for (const ev of this.state.events) {\n if (ev.seq <= after) continue;\n if (scope !== null && ev.inbox !== scope) continue;\n yield ev;\n }\n }\n\n registerWebhook(req: RegisterWebhookRequest): Webhook {\n // Idempotency replay: a repeat with the same client_id returns the first row.\n if (req.client_id) {\n const existingId = this.state.webhookByClientId.get(req.client_id);\n const existing = existingId ? this.state.webhooks.get(existingId) : undefined;\n if (existing) return { ...existing };\n }\n const id = rid(\"wh\");\n const webhook: Webhook = {\n id,\n url: req.url,\n events: req.events ?? [\"message.received\"],\n inbox: req.inbox ?? null,\n agent_id: this.state.agents.keys().next().value ?? \"agt_mock\",\n secret: `whsec_${rid(\"s\").slice(2)}${rid(\"s\").slice(2)}`,\n secret_prefix: `whsec_${rid(\"s\").slice(2, 6)}`,\n active: true,\n created_at: now(),\n };\n this.state.webhooks.set(id, webhook);\n if (req.client_id) this.state.webhookByClientId.set(req.client_id, id);\n // Return the create shape (with secret); stored copy keeps it for parity.\n return { ...webhook };\n }\n\n /** List registered webhooks (secret redacted, mirroring the server). */\n listWebhooks(params: ListWebhooksParams = {}): Page<Webhook> {\n const items = [...this.state.webhooks.values()].map((w) => redactSecret(w));\n const limit = params.limit ?? 50;\n if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error(\"Invalid webhook page limit\");\n if (params.cursor && !/^webhooks:\\d+$/.test(params.cursor)) throw new Error(\"Invalid webhook cursor\");\n const offset = params.cursor ? Number(params.cursor.slice(9)) : 0;\n const next = offset + limit < items.length ? `webhooks:${offset + limit}` : undefined;\n return { items: items.slice(offset, offset + limit), total: items.length, has_more: !!next, next_cursor: next };\n }\n\n /** Get one webhook by id (secret redacted), or undefined when missing. */\n getWebhook(webhookId: string): Webhook | undefined {\n const w = this.state.webhooks.get(webhookId);\n return w ? redactSecret(w) : undefined;\n }\n\n /**\n * Update a webhook in place (secret redacted), or undefined when missing.\n * Every field is optional; an unset field leaves the stored value untouched\n * (PATCH semantics). An empty-string `inbox` clears the filter.\n */\n updateWebhook(webhookId: string, req: UpdateWebhookRequest): Webhook | undefined {\n const w = this.state.webhooks.get(webhookId);\n if (!w) return undefined;\n if (req.url !== undefined) w.url = req.url;\n if (req.events !== undefined) {\n w.events = req.events.length ? req.events : [\"message.received\"];\n }\n if (req.inbox !== undefined) w.inbox = req.inbox === \"\" ? null : req.inbox;\n if (req.active !== undefined) w.active = req.active;\n this.state.webhooks.set(webhookId, w);\n return redactSecret(w);\n }\n\n /** Delete a webhook by id; returns false when it was not found. */\n deleteWebhook(webhookId: string): boolean {\n return this.state.webhooks.delete(webhookId);\n }\n\n // ---- contact allow/block lists (Slice 3) ------------------------------\n\n /** Add one allow/block entry scoped to an inbox, or undefined when the inbox is unknown. */\n addContactListEntry(address: string, req: AddContactListRequest): ContactListEntry | undefined {\n address = this.addrOf(address);\n if (!this.state.inboxes.has(address)) return undefined;\n const entry: ContactListEntry = {\n id: rid(\"lst\"),\n inbox: address,\n kind: req.kind,\n direction: req.direction ?? \"send\",\n pattern: normalizeContactPattern(req.pattern),\n created_at: now(),\n };\n this.state.contactLists.set(entry.id, entry);\n return { ...entry };\n }\n\n /** List the entries governing an inbox (inbox-specific + account-wide), or undefined when unknown. */\n listContactLists(address: string): Page<ContactListEntry> | undefined {\n address = this.addrOf(address);\n if (!this.state.inboxes.has(address)) return undefined;\n const items = [...this.state.contactLists.values()].filter(\n (e) => e.inbox === null || e.inbox === address,\n );\n return { items, total: items.length };\n }\n\n /** Delete a contact-list entry by id; returns false when it was not found. */\n deleteContactListEntry(_address: string, entryId: string): boolean {\n return this.state.contactLists.delete(entryId);\n }\n\n // ---- domains (Slice 5) ------------------------------------------------\n\n /** Add a delegated domain and return only the customer-published nameservers. */\n onboardDomain(req: OnboardDomainRequest): Domain {\n // project_id is an assertion (never a selector): a mismatch is 403. The domain's\n // project binding is always derived from the key, not from client input.\n assertProjectMatch(req.project_id);\n const name = req.domain.trim().toLowerCase();\n const existing = this.state.domains.get(name);\n if (existing) return { ...existing };\n const mode = \"ns_delegated\";\n const domain: Domain = {\n id: rid(\"dom\"),\n domain: name,\n mode,\n verification_status: \"verifying\",\n dkim_status: \"configured\",\n shared: false,\n created_at: now(),\n delegation_ns: domainDelegationNS(name),\n instruction: \"Add the nameserver entries at your domain provider. We check automatically; use Recheck DNS for an immediate check.\",\n readiness: {\n status: \"waiting_for_dns\", label: \"Waiting for DNS\", summary: \"We have not confirmed your nameserver entries yet. Add them at your domain provider; we will finish setup automatically.\",\n reason: \"dns_entries_unconfirmed\", action_required_by: \"customer\", next_action: \"check_dns_entries\",\n ready_for_inboxes: false, poll_after_seconds: 30,\n inboxes: { scope: \"agent\", total: 0, ready: 0, setting_up: 0, needs_attention: 0 },\n },\n };\n this.state.domains.set(name, domain);\n return { ...domain };\n }\n\n /** List onboarded domains (records omitted on the summary, mirroring the server). */\n listDomains(): Page<Domain> {\n const items = [...this.state.domains.values()].map((d) => domainSummary(d));\n return { items, total: items.length };\n }\n\n /** Get one domain's detail + the records to set, inline; undefined when absent. */\n getDomain(domain: string): Domain | undefined {\n const d = this.state.domains.get(domain.trim().toLowerCase());\n return d ? { ...d } : undefined;\n }\n\n /** Trigger/refresh verification; returns the (re-read) detail, or undefined when absent. */\n verifyDomain(domain: string): Domain | undefined {\n const d = this.state.domains.get(domain.trim().toLowerCase());\n return d ? { ...d } : undefined;\n }\n\n /**\n * Offboard (remove) a domain; returns false when it was not found. Also\n * records a synthetic succeeded teardown job under `job-offboard-<domain>`\n * (there is no job runner in the mock) so a subsequent {@link getJob} poll\n * resolves the same way the live transport's async contract would.\n */\n offboardDomain(domain: string): boolean {\n const name = domain.trim().toLowerCase();\n const found = this.state.domains.delete(name);\n if (found) {\n const ts = now();\n this.state.jobs.set(`job-offboard-${name}`, {\n object: \"job\",\n id: `job-offboard-${name}`,\n type: \"domain_offboard\",\n status: \"succeeded\",\n created_at: ts,\n updated_at: ts,\n finished_at: ts,\n });\n }\n return found;\n }\n\n /** Get one async job's poll status; undefined when the id is unknown. */\n getJob(jobId: string): Job | undefined {\n const job = this.state.jobs.get(jobId);\n return job ? { ...job } : undefined;\n }\n\n // ---- commerce (quote/request/status; no human approval mutation) ------\n\n quoteDomain(req: QuoteDomainRequest): DomainQuote {\n const domain = req.domain.trim().toLowerCase();\n return {\n object: \"domain_quote\",\n domain,\n available: !domain.startsWith(\"unavailable.\"),\n currency: \"usd\",\n quote_cents: 2500,\n renewal_cents: 2500,\n premium: false,\n quote_expires_at: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n blockers: [],\n };\n }\n\n requestDomainPurchase(req: RequestDomainPurchaseRequest): CommerceRequest {\n const idem = `domain_purchase:${req.idempotency_key.trim()}`;\n const replayId = this.state.commerceByIdempotency.get(idem);\n if (replayId) return { ...this.state.commerceRequests.get(replayId)! };\n const quote = this.quoteDomain({ domain: req.domain });\n const timestamp = now();\n const id = rid(\"creq\");\n const approvalUrl = `https://app.extrovert.dev/commerce/requests/${id}`;\n const request: CommerceRequest = {\n object: \"commerce_request\",\n id,\n kind: \"domain_purchase\",\n state: \"awaiting_human_approval\",\n domain: quote.domain,\n domain_scope: req.scope ?? \"org\",\n rationale: req.rationale,\n currency: quote.currency,\n quote_cents: quote.quote_cents,\n renewal_cents: quote.renewal_cents,\n quote_expires_at: quote.quote_expires_at,\n auto_renew: req.auto_renew ?? true,\n blocker_code: \"human_approval_required\",\n blockers: [\n {\n code: \"human_approval_required\",\n message: \"A human billing administrator must approve this domain purchase.\",\n manage_url: approvalUrl,\n },\n ],\n approval_url: approvalUrl,\n agent_next_action: \"Share approval_url with the human, then poll this request after approval.\",\n retry_safe: true,\n poll_after_seconds: 10,\n version: 1,\n created_at: timestamp,\n updated_at: timestamp,\n };\n this.state.commerceRequests.set(id, request);\n this.state.commerceByIdempotency.set(idem, id);\n return { ...request };\n }\n\n requestPlanChange(req: RequestPlanChangeRequest): CommerceRequest {\n const idem = `plan_change:${req.idempotency_key.trim()}`;\n const replayId = this.state.commerceByIdempotency.get(idem);\n if (replayId) return { ...this.state.commerceRequests.get(replayId)! };\n const timestamp = now();\n const id = rid(\"creq\");\n const approvalUrl = `https://app.extrovert.dev/commerce/requests/${id}`;\n const request: CommerceRequest = {\n object: \"commerce_request\",\n id,\n kind: \"plan_change\",\n state: \"awaiting_human_approval\",\n target_plan: req.target_plan,\n current_plan: \"developer\",\n rationale: req.rationale,\n currency: \"usd\",\n quote_cents: 0,\n renewal_cents: 0,\n auto_renew: true,\n blocker_code: \"human_approval_required\",\n blockers: [\n {\n code: \"human_approval_required\",\n message: \"A human billing administrator must approve this plan change.\",\n manage_url: approvalUrl,\n },\n ],\n approval_url: approvalUrl,\n agent_next_action: \"Share approval_url with the human, then poll this request after approval.\",\n retry_safe: true,\n poll_after_seconds: 10,\n version: 1,\n created_at: timestamp,\n updated_at: timestamp,\n };\n this.state.commerceRequests.set(id, request);\n this.state.commerceByIdempotency.set(idem, id);\n return { ...request };\n }\n\n getCommerceRequest(requestId: string): CommerceRequest | undefined {\n const request = this.state.commerceRequests.get(requestId);\n return request ? { ...request } : undefined;\n }\n\n cancelCommerceRequest(requestId: string): CommerceRequest | undefined {\n const request = this.state.commerceRequests.get(requestId);\n if (!request) return undefined;\n if (![\"awaiting_human_approval\", \"blocked\", \"approved\", \"payment_action_required\", \"payment_failed\"].includes(request.state)) {\n throw new ValidationError({ status: 409, code: \"conflict\", message: \"this request can no longer be cancelled\" });\n }\n request.state = \"cancelled\";\n request.blocker_code = undefined;\n request.blockers = [];\n request.agent_next_action = \"The request is cancelled. Create a new request only if the purchase is still needed.\";\n request.version += 1;\n request.updated_at = now();\n return { ...request };\n }\n\n listCommerceRequests(params: ListCommerceRequestsParams = {}): Page<CommerceRequest> {\n let items = [...this.state.commerceRequests.values()];\n items.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = items.length;\n const offset = params.page ? Math.max(0, Number.parseInt(params.page, 10) || 0) : 0;\n const limit = Math.max(1, Math.min(params.limit ?? 50, 100));\n const page = items.slice(offset, offset + limit).map((request) => ({ ...request }));\n const next = offset + page.length;\n return { items: page, total, next_cursor: next < total ? String(next) : undefined };\n }\n\n // ---- suppressions (recipient opt-outs / list-unsubscribe) --------------\n\n /**\n * Pre-check whether the caller's org suppresses a recipient (mirrors\n * `GET /v1/suppressions?recipient=…`). Returns `{recipient, suppressed, rows}`\n * over the active (non-revoked) org rows for that canonicalized recipient.\n */\n precheckSuppression(recipient: string): SuppressionPrecheck {\n const canonical = canonicalRecipient(recipient);\n const rows = [...this.state.suppressions.values()]\n .filter((s) => !s.revoked && s.recipient === canonical)\n .map((s) => ({ ...s }));\n return { recipient: canonical, suppressed: rows.length > 0, rows };\n }\n\n /** List the caller's own org suppression rows (mirrors the paged `GET /v1/suppressions`). */\n listSuppressions(params: ListSuppressionsParams): Page<SuppressionEntry> {\n let rows = [...this.state.suppressions.values()];\n if (params.scope) rows = rows.filter((s) => s.scope === params.scope);\n if (!params.include_revoked) rows = rows.filter((s) => !s.revoked);\n rows.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = rows.length;\n const offset = params.cursor ? Math.max(0, Number.parseInt(params.cursor, 10) || 0) : 0;\n const limit = params.limit ?? 50;\n const items = rows.slice(offset, offset + limit).map((s) => ({ ...s }));\n const page: Page<SuppressionEntry> = { items, total };\n if (offset + items.length < total) page.next_cursor = String(offset + items.length);\n return page;\n }\n\n /**\n * Revoke one org-scope suppression row (mirrors `POST /v1/suppressions/{id}/revoke`).\n * A reason is required (the caller validates too). Returns the updated row, or\n * undefined when the id is unknown / not the caller's own org row.\n */\n revokeSuppression(id: string, reason: string): SuppressionEntry | undefined {\n const row = this.state.suppressions.get(id);\n // Only a non-revoked org row is revocable by the agent plane (global/shared rows\n // are platform-operator only and appear as an indistinguishable 404 here).\n if (!row || row.scope !== \"org\" || row.revoked) return undefined;\n row.revoked = true;\n row.revoked_at = now();\n row.revoked_by = \"agent:agt_mock\";\n row.revoke_reason = reason;\n this.state.suppressions.set(id, row);\n return { ...row };\n }\n\n /**\n * Reject the WHOLE send if ANY recipient has an active org-scope suppression,\n * naming exactly the suppressed addresses (never the scope/origin) so the caller\n * can drop them and retry - mirroring the live `recipient_suppressed` (422) path.\n */\n private enforceSuppression(recipients: string[]): void {\n const active = new Set(\n [...this.state.suppressions.values()].filter((s) => !s.revoked).map((s) => s.recipient),\n );\n if (active.size === 0) return;\n const hit: string[] = [];\n for (const rcpt of recipients) {\n const canonical = canonicalRecipient(rcpt);\n if (canonical && active.has(canonical) && !hit.includes(canonical)) hit.push(canonical);\n }\n if (hit.length === 0) return;\n throw new RecipientSuppressedError({\n status: 422,\n code: \"recipient_suppressed\",\n message: `${hit.length} recipient(s) have opted out (recipient_suppressed)`,\n problem: {\n type: \"https://extrovert.dev/problems/recipient_suppressed\",\n title: \"Recipient Suppressed\",\n status: 422,\n code: \"recipient_suppressed\",\n detail: \"One or more recipients have opted out; remove them and retry.\",\n errors: hit.map((r) => ({ field: \"recipient\", code: \"recipient_suppressed\", detail: r })),\n },\n });\n }\n\n /**\n * Enforce the send-direction contact lists for an inbox: reject a block-listed\n * recipient, or any recipient outside the allowlist when allowlist mode is on.\n * Throws a {@link PermissionError} (403) to mirror the real API.\n */\n private enforceSendPolicy(from: string, recipients: string[]): void {\n const entries = [...this.state.contactLists.values()].filter(\n (e) => e.direction === \"send\" && (e.inbox === null || e.inbox === from),\n );\n if (entries.length === 0) return;\n const blocks = entries.filter((e) => e.kind === \"block\");\n const allows = entries.filter((e) => e.kind === \"allow\");\n for (const rcpt of recipients) {\n const addr = normalizeContactPattern(rcpt);\n if (!addr) continue;\n if (blocks.some((b) => contactEntryMatches(b.pattern, addr))) {\n throw new PermissionError({\n status: 403,\n code: \"recipient_blocked\",\n message: `${rcpt} is block-listed`,\n });\n }\n if (allows.length > 0 && !allows.some((a) => contactEntryMatches(a.pattern, addr))) {\n throw new PermissionError({\n status: 403,\n code: \"recipient_blocked\",\n message: `${rcpt} is not on the allow list`,\n });\n }\n }\n }\n}\n\n/**\n * Canonicalize a recipient address for suppression matching: pull the address out\n * of a \"Name <addr>\" form, NFC-normalize, trim, and lower-case (mirrors the Go\n * canonicalization closely enough for the offline mock).\n */\nfunction canonicalRecipient(raw: string): string {\n let value = raw.trim();\n const m = value.match(/<([^>]+)>/);\n if (m && m[1]) value = m[1];\n return value.normalize(\"NFC\").trim().toLowerCase();\n}\n\n/**\n * Normalize a contact pattern or recipient: lower-case/trim, pull the address out\n * of a \"Name <addr>\" form, and strip a leading \"@\" from a domain pattern.\n */\nfunction normalizeContactPattern(raw: string): string {\n let value = raw.trim();\n const m = value.match(/<([^>]+)>/);\n if (m && m[1]) value = m[1];\n value = value.trim().toLowerCase();\n return value.startsWith(\"@\") ? value.slice(1) : value;\n}\n\n/**\n * Match a normalized pattern against a normalized recipient address. A pattern\n * with an \"@\" is a full-address match; a bare domain matches any address in it.\n */\nfunction contactEntryMatches(pattern: string, addr: string): boolean {\n if (!pattern || !addr) return false;\n if (pattern.includes(\"@\")) return pattern === addr;\n const at = addr.lastIndexOf(\"@\");\n const domain = at >= 0 ? addr.slice(at + 1) : addr;\n return domain === pattern;\n}\n\n/** Drop the one-time signing secret from a stored webhook for read responses. */\nfunction redactSecret(w: Webhook): Webhook {\n const { secret: _omit, ...rest } = w;\n return rest;\n}\n\n/** The nameserver records for delegated setup. */\nfunction domainDelegationNS(domain: string): DomainRecord[] {\n return [\n { name: domain, type: \"NS\", value: \"ns1.extrovert.dev\", ttl: 300 },\n { name: domain, type: \"NS\", value: \"ns2.extrovert.dev\", ttl: 300 },\n ];\n}\n\n/** The list-view summary: status fields without the inline record set. */\nfunction domainSummary(d: Domain): Domain {\n const { records: _r, delegation_ns: _d, instruction: _i, ...rest } = d;\n return rest;\n}\n\nfunction reSubject(subject: string): string {\n return /^re:/i.test(subject) ? subject : `Re: ${normalizeThreadSubject(subject)}`;\n}\n\nfunction fwdSubject(subject: string): string {\n return /^fwd?:/i.test(subject) ? subject : `Fwd: ${normalizeThreadSubject(subject)}`;\n}\n\n/** Strip leading Re:/Fwd: prefixes for a thread's display subject. */\nfunction normalizeThreadSubject(subject: string): string {\n let s = subject.trim();\n for (;;) {\n const next = s.replace(/^(re|fwd|fw)\\s*:\\s*/i, \"\");\n if (next === s) break;\n s = next;\n }\n return s.trim();\n}\n\nfunction compileWaitRegex(pattern: string): RegExp {\n const explicitInsensitive = pattern.startsWith(\"(?i)\");\n const source = explicitInsensitive ? pattern.slice(4) : pattern;\n return new RegExp(source, explicitInsensitive ? \"i\" : undefined);\n}\n\n/** Decoded byte length of a base64 string (mirrors the Go-reported size). */\nfunction base64ByteLength(b64: string): number {\n const clean = b64.replace(/[\\r\\n\\s]/g, \"\");\n if (clean.length === 0) return 0;\n const padding = clean.endsWith(\"==\") ? 2 : clean.endsWith(\"=\") ? 1 : 0;\n return Math.floor((clean.length * 3) / 4) - padding;\n}\n","/**\n * `?include=` relation expansion typing (redesign §5.5 / §6.2).\n *\n * Reads may expand a per-resource allowlist of relations (depth ≤ 2); the server\n * re-applies the same ceiling/ownership filter to every expanded child. The SDK\n * types the allowed relations per resource so a caller cannot ask for a relation the\n * server would reject with 400 `bad_request`, and serializes the list as the\n * comma-separated `?include=` value.\n */\n\n/** Relations the `inbox` resource may expand (`?include=agent,domain`). */\nexport type InboxInclude = \"agent\" | \"domain\";\n\n/** Relations the `review` resource may expand (`?include=category,turns`). */\nexport type ReviewInclude = \"category\" | \"turns\";\n\n/** Serialize an include list into the comma-separated `?include=` query value. */\nexport function serializeInclude(include?: readonly string[]): string | undefined {\n if (!include || include.length === 0) return undefined;\n return include.join(\",\");\n}\n","import type { ListWebhooksParams, ConnectionResourceSelection } from \"./models.js\";\nimport type { AdministrativeRequest } from \"./administration.js\";\nimport { normalizeInboxPage } from \"./inbox-page.js\";\n/**\n * Transport abstraction.\n *\n * The resource methods speak a small, typed RPC surface; a transport decides whether each call hits\n * the live Extrovert API over HTTP or the offline {@link MockBackend}. This is the single mock seam:\n * flip `transport: \"mock\"` (or `EXTROVERT_API_BASE_URL=mock`) and the whole SDK runs without a network.\n *\n * `HttpTransport` is used for the live API; the mock stays for examples, docs, and tests.\n */\n\nimport { HttpClient, type BinaryResponse, type RequestOptions } from \"./http.js\";\nimport { MockBackend } from \"./fixtures.js\";\nimport { NotFoundError, ValidationError } from \"./errors.js\";\nimport type { List } from \"./pagination.js\";\nimport { serializeInclude } from \"./include.js\";\nimport { toWireArray } from \"./recipients.js\";\nimport type {\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n AckReviewEventRequest,\n AckReviewEventResult,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainStatusEventPage,\n DomainQuote,\n DomainOffboard,\n EnrollRequest,\n EnrollResponse,\n ForwardRequest,\n GetInboxParams,\n Inbox,\n InboxCredentials,\n Job,\n ListCommerceRequestsParams,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCategoriesParams,\n ListInboxesParams,\n ProjectInboxListParams,\n ListMessagesParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n UpdateCategoryRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n Page,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n ReplyRequest,\n CategoryPacingState,\n RestampReviewRequest,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n VerifyRequest,\n VerifyResponse,\n WaitForEmailRequest,\n WaitForEmailResult,\n WaitForReviewEventParams,\n Webhook,\n WhoAmI,\n} from \"./models.js\";\n\n/** Raw bytes of one attachment plus the metadata needed to save/serve it. */\nexport interface AttachmentDownload {\n filename: string;\n content_type: string;\n /** Standard base64 of the attachment bytes. */\n content_base64: string;\n}\n\n/** The RPC surface every transport implements. One method per spec §8 endpoint. */\nexport interface Transport {\n administrativeRequest(request: AdministrativeRequest): Promise<unknown>;\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse>;\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse>;\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse>;\n whoami(signal?: AbortSignal): Promise<WhoAmI>;\n createInbox(req: CreateInboxRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Inbox>;\n listInboxes(params: ListInboxesParams, signal?: AbortSignal): Promise<Page<Inbox>>;\n getInbox(address: string, signal?: AbortSignal): Promise<Inbox>;\n updateInbox(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox>;\n deleteInbox(address: string, signal?: AbortSignal): Promise<void>;\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n // These map to /v1/projects/{project_id}/inboxes[/{inbox_id}], return the redesign\n // List envelope on list, and key single-row ops by the opaque inbox_id (an address\n // is accepted as a within-project alias). project_id may be \"-\" (org wildcard).\n createInboxInProject(\n projectId: string,\n req: CreateInboxRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n listInboxesInProject(\n projectId: string,\n params: ProjectInboxListParams,\n signal?: AbortSignal,\n ): Promise<List<Inbox>>;\n getInboxInProject(\n projectId: string,\n inboxId: string,\n params: GetInboxParams,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox>;\n deleteInboxInProject(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void>;\n getInboxCredentialsInProject(\n projectId: string,\n inboxId: string,\n signal?: AbortSignal,\n ): Promise<InboxCredentials>;\n // send / reply / forward all answer the same three-way SendOutcome union: the\n // resolved review policy decides whether a message is delivered now or parked\n // for a human, and the caller does not get to opt out of that decision.\n send(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome>;\n reply(address: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome>;\n forward(address: string, messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome>;\n listMessages(address: string, params: ListMessagesParams, signal?: AbortSignal): Promise<Page<Message>>;\n getMessage(messageId: string, signal?: AbortSignal): Promise<Message>;\n getMessageRaw(address: string, messageId: string, signal?: AbortSignal): Promise<string>;\n listAttachments(address: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>>;\n getAttachment(\n address: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload>;\n markRead(address: string, messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message>;\n deleteMessage(address: string, messageId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult>;\n batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult>;\n searchMessages(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>>;\n listThreads(address: string, params: ListThreadsParams, signal?: AbortSignal): Promise<Page<Thread>>;\n searchThreads(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>>;\n getThread(address: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail>;\n getSubmission(address: string, submissionId: string, signal?: AbortSignal): Promise<Submission>;\n getSubmissionInProject(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission>;\n deleteThread(address: string, threadId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult>;\n waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult>;\n registerWebhook(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook>;\n listWebhooks(signal?: AbortSignal, params?: ListWebhooksParams): Promise<Page<Webhook>>;\n getWebhook(webhookId: string, signal?: AbortSignal, selection?: ConnectionResourceSelection): Promise<Webhook>;\n updateWebhook(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook>;\n deleteWebhook(webhookId: string, signal?: AbortSignal, selection?: ConnectionResourceSelection): Promise<void>;\n addContactListEntry(\n address: string,\n req: AddContactListRequest,\n signal?: AbortSignal,\n ): Promise<ContactListEntry>;\n listContactLists(address: string, signal?: AbortSignal): Promise<Page<ContactListEntry>>;\n deleteContactListEntry(address: string, entryId: string, signal?: AbortSignal): Promise<void>;\n // Suppressions (recipient opt-outs) - customer/org-scoped, not inbox-keyed.\n // precheck is the read-only \"is this recipient opted out of MY org's mail?\"; the\n // list pages the caller's own org rows; revoke re-enables one row (reason required).\n precheckSuppression(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck>;\n listSuppressions(params: ListSuppressionsParams, signal?: AbortSignal): Promise<Page<SuppressionEntry>>;\n revokeSuppression(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry>;\n listDomains(signal?: AbortSignal, params?: { page?: string; limit?: number }): Promise<Page<Domain>>;\n listDomainEvents(domain: string, params: { after?: string; limit?: number }, signal?: AbortSignal): Promise<DomainStatusEventPage>;\n getDomain(domain: string, signal?: AbortSignal): Promise<Domain>;\n onboardDomain(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain>;\n verifyDomain(domain: string, signal?: AbortSignal): Promise<Domain>;\n offboardDomain(domain: string, signal?: AbortSignal): Promise<DomainOffboard>;\n // Poll surface for an async job the agent enqueued (currently only the\n // domain-offboard teardown's status_url).\n getJob(jobId: string, signal?: AbortSignal): Promise<Job>;\n // Commerce request plane. These methods never expose human approval mutations.\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote>;\n requestDomainPurchase(req: RequestDomainPurchaseRequest, signal?: AbortSignal): Promise<CommerceRequest>;\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest>;\n getCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest>;\n cancelCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest>;\n listCommerceRequests(params: ListCommerceRequestsParams, signal?: AbortSignal): Promise<Page<CommerceRequest>>;\n // Review Loop (HITL): submit-for-review rides send/reply - literally the same\n // endpoints, so it answers the same SendOutcome union. It stays a distinct\n // method because it NAMES the intent of the call; a submit that omits `intent`\n // under require_review raises IntentRequiredError from either entry point.\n submitForReview(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome>;\n submitReplyForReview(\n address: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome>;\n listReviews(params: ListReviewsParams, signal?: AbortSignal): Promise<Page<Review>>;\n getReview(reviewId: string, signal?: AbortSignal): Promise<Review>;\n getReviewTurns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>>;\n // Review Loop (HITL) per-message CHAT + revision + cancel + feedback (M5). chat\n // takes an Idempotency-Key; submit_revision CASes on parent_revision (409 STALE).\n getReviewFeedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback>;\n postReviewChat(reviewId: string, req: PostReviewChatRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Review>;\n submitRevision(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review>;\n cancelReview(reviewId: string, idempotencyKey?: string, signal?: AbortSignal): Promise<Review>;\n // D19/§8 re-stamp-without-redraft escape valve ($0): assert \"reviewed against vX, no\n // change needed\" and advance composed_* WITHOUT a new draft.\n restampReview(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review>;\n // BYO review-agent DECISION plane (M8 Slice B; D5/§9). The reviewer (review:act + a\n // matching active link) reads its decision context, then decides approve|edit|reject|\n // escalate. On approve/edit the PLATFORM sends with the COMPOSER's creds (the\n // reviewer NEVER holds mailbox:send); the two circuit breakers force a maxed-out\n // review to the human regardless of intent.\n getReviewDecisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext>;\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest, signal?: AbortSignal): Promise<ReviewerDecisionResult>;\n // Review Loop (HITL) realtime: the durable nudge drain/ack/wait lifecycle. The\n // queue is the authoritative liveness source; SSE/webhook are fast paths atop it.\n listReviewEvents(params: ListReviewEventsParams, signal?: AbortSignal): Promise<ReviewEventsResult>;\n waitForReviewEvent(params: WaitForReviewEventParams, signal?: AbortSignal): Promise<ReviewEventsResult>;\n ackReviewEvent(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult>;\n // Category registry (Review Loop, D9/D10): browse / propose / rename. Customer-\n // scoped + agent-attributed (the cross-agent-404 exception). match= is lexical.\n listCategories(params: ListCategoriesParams, signal?: AbortSignal): Promise<Page<Category>>;\n getCategory(categoryId: string, signal?: AbortSignal): Promise<Category>;\n proposeCategory(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category>;\n updateCategory(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category>;\n // Graduation + risk dial (Review Loop, D16/D6/D17): agents READ the effective dial +\n // a category's graduation status, and PROPOSE graduation (records the request; never\n // flips the bit). Flipping the bit + setting the dial are console (human) actions.\n getRiskDial(signal?: AbortSignal): Promise<RiskDial>;\n getGraduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus>;\n proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus>;\n // D19/§8 backlog-reconciliation status (read-only): how many queued drafts are stale\n // vs current-enough against the current rules-version. Agents READ; humans/hooks TRIGGER.\n getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus>;\n // M7 Slice B/§8 demand-driven pacing state (read-only): the human review cursor, the\n // effective window/ceiling/interval, and each queued draft's classification.\n getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState>;\n // Writing rules + house-style + precedence ladder + audit/undo (D2/D11). ANY\n // agent may write/edit/promote/retire/undo (the cross-agent exception); get_rules\n // returns the ORDERED list with the §7 ladder applied server-side (NO LLM).\n getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule>;\n saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule>;\n promoteRule(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule>;\n retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule>;\n getRuleAudit(params: GetRuleAuditParams, signal?: AbortSignal): Promise<Page<RuleAuditEntry>>;\n undoRuleChange(udoId: string, signal?: AbortSignal): Promise<Rule>;\n /**\n * Open a live event stream. `address` scopes to one inbox (`GET\n * /v1/inboxes/{addr}/stream`); pass `null` for every owned inbox (`GET\n * /v1/events`). `lastEventId`, when set, resumes after that event seq. The\n * generator ends when the server closes the stream or `signal` aborts.\n */\n stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Wire-body builders for the three outbound verbs.\n//\n// The SDK's request types are ergonomic (`to` may be a bare string) and carry one\n// field that is NOT a body field at all (`idempotency_key`, which belongs in a\n// header). Shipping the caller's object verbatim - which is what these methods\n// used to do - sent both problems straight to a server that decodes with\n// DisallowUnknownFields and `[]string` recipients, so a documented, typechecked\n// call 400'd on the wire. These builders are the one boundary where the\n// ergonomic shape becomes the wire shape:\n//\n// 1. `idempotency_key` is REMOVED from the body and set as `Idempotency-Key`.\n// The server tolerates it in the body for already-shipped builds, but it\n// must not be there: the replay key is a hash of the raw body, so a key\n// carried inside its own hashed payload is self-referential noise.\n// 2. `to` / `cc` / `bcc` are widened from `string | string[]` to `string[]`.\n// An absent field stays absent - emitting `cc: []` would add a key the\n// caller never wrote.\n// 3. Nothing is RENAMED. `text` is the canonical name on both sides; that is\n// the whole reason `text` was chosen over the server's old `body`.\n// ---------------------------------------------------------------------------\n\n/** Strip the header-only `idempotency_key` from a request object. */\nfunction withoutIdempotencyKey<T extends { idempotency_key?: string }>(req: T): Omit<T, \"idempotency_key\"> {\n const { idempotency_key: _headerOnly, ...rest } = req;\n return rest;\n}\n\n/**\n * Drop keys whose value is `undefined` so an omitted optional never reaches the\n * wire as an explicit `null`/`undefined` entry. `JSON.stringify` already elides\n * `undefined` values, so this is belt-and-braces for readability of the emitted\n * body in tests.\n */\nfunction omitUndefined<T extends Record<string, unknown>>(obj: T): T {\n const out = {} as Record<string, unknown>;\n for (const [k, v] of Object.entries(obj)) if (v !== undefined) out[k] = v;\n return out as T;\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/send`. */\nfunction sendBody(req: SendRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n to: toWireArray(req.to),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/reply` (recipients are derived server-side). */\nfunction replyBody(req: ReplyRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** The JSON body for `POST /v1/inboxes/{addr}/messages/{id}/forward`. */\nfunction forwardBody(req: ForwardRequest): Record<string, unknown> {\n return omitUndefined({\n ...withoutIdempotencyKey(req),\n to: toWireArray(req.to),\n cc: toWireArray(req.cc),\n bcc: toWireArray(req.bcc),\n });\n}\n\n/** Live transport: each method maps to a `/v1` request. */\nexport class HttpTransport implements Transport {\n constructor(private readonly http: HttpClient) {}\n\n async administrativeRequest(request: AdministrativeRequest): Promise<unknown> {\n const options = { method: request.method, path: request.path, query: request.query, body: request.body, signal: request.signal, retryable: request.method === \"GET\" };\n if (request.responseFormat !== \"binary\") return this.http.request(options);\n const result = await this.http.request<BinaryResponse>({ ...options, binary: true });\n return { content_type: result.contentType, content_base64: bytesToBase64(result.bytes), filename: filenameFromDisposition(result.contentDisposition) };\n }\n\n private encodeAddress(address: string): string {\n return encodeURIComponent(address);\n }\n\n private call<T>(opts: RequestOptions): Promise<T> {\n return this.http.request<T>(opts);\n }\n\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse> {\n return this.call({ method: \"POST\", path: \"/v1/enroll\", body: req, idempotencyKey: req.client_id, signal });\n }\n\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse> {\n return this.call({ method: \"POST\", path: \"/v1/agent/sign-up\", body: req, signal });\n }\n\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse> {\n return this.call({ method: \"POST\", path: \"/v1/agent/verify\", body: req, signal });\n }\n\n whoami(signal?: AbortSignal): Promise<WhoAmI> {\n return this.call({ method: \"GET\", path: \"/v1/auth/me\", signal });\n }\n\n createInbox(req: CreateInboxRequest, idempotencyKey?: string, signal?: AbortSignal): Promise<Inbox> {\n return this.call({\n method: \"POST\",\n path: \"/v1/inboxes\",\n body: req,\n idempotencyKey: idempotencyKey ?? req.client_id,\n signal,\n });\n }\n\n async listInboxes(params: ListInboxesParams, signal?: AbortSignal): Promise<Page<Inbox>> {\n const raw = await this.call<unknown>({ method: \"GET\", path: \"/v1/inboxes\", query: { ...params }, signal });\n return normalizeInboxPage<Inbox>(raw);\n }\n\n getInbox(address: string, signal?: AbortSignal): Promise<Inbox> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}`, signal });\n }\n\n updateInbox(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}`,\n body: req,\n signal,\n });\n }\n\n async deleteInbox(address: string, signal?: AbortSignal): Promise<void> {\n await this.call({ method: \"DELETE\", path: `/v1/inboxes/${this.encodeAddress(address)}`, signal });\n }\n\n // ---- Canonical project-prefixed inbox chain (x.projects.inboxes.*) ----------\n\n createInboxInProject(\n projectId: string,\n req: CreateInboxRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"POST\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes`,\n body: req,\n idempotencyKey: idempotencyKey ?? req.client_id,\n signal,\n });\n }\n\n listInboxesInProject(\n projectId: string,\n params: ProjectInboxListParams,\n signal?: AbortSignal,\n ): Promise<List<Inbox>> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes`,\n query: {\n limit: params.limit,\n cursor: params.cursor,\n include: serializeInclude(params.include),\n domain: params.domain,\n },\n signal,\n });\n }\n\n getInboxInProject(\n projectId: string,\n inboxId: string,\n params: GetInboxParams,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n query: { include: serializeInclude(params.include) },\n signal,\n });\n }\n\n updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n body: req,\n signal,\n });\n }\n\n async deleteInboxInProject(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void> {\n await this.call({\n method: \"DELETE\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}`,\n signal,\n });\n }\n\n getInboxCredentialsInProject(\n projectId: string,\n inboxId: string,\n signal?: AbortSignal,\n ): Promise<InboxCredentials> {\n return this.call({\n method: \"GET\",\n path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}/credentials`,\n signal,\n });\n }\n\n send(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/send`,\n body: sendBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n reply(address: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/reply`,\n body: replyBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n forward(address: string, messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/forward`,\n body: forwardBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n listMessages(address: string, params: ListMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages`,\n query: { ...params },\n signal,\n });\n }\n\n getMessage(messageId: string, signal?: AbortSignal): Promise<Message> {\n return this.call({ method: \"GET\", path: `/v1/messages/${encodeURIComponent(messageId)}`, signal });\n }\n\n getMessageRaw(address: string, messageId: string, signal?: AbortSignal): Promise<string> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/raw`,\n raw: true,\n signal,\n });\n }\n\n listAttachments(address: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/attachments`,\n signal,\n });\n }\n\n async getAttachment(\n address: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n const res = await this.http.request<BinaryResponse>({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}/attachments/${encodeURIComponent(attachmentId)}`,\n binary: true,\n signal,\n });\n return {\n filename: filenameFromDisposition(res.contentDisposition),\n content_type: res.contentType,\n content_base64: bytesToBase64(res.bytes),\n };\n }\n\n markRead(address: string, messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}`,\n body: req,\n signal,\n });\n }\n\n deleteMessage(\n address: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/${encodeURIComponent(messageId)}`,\n query: expunge ? { expunge: true } : undefined,\n signal,\n });\n }\n\n batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.call({\n method: \"PATCH\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/batch`,\n body: req,\n signal,\n });\n }\n\n searchMessages(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/messages/search`,\n query: { ...params },\n signal,\n });\n }\n\n listThreads(address: string, params: ListThreadsParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads`,\n query: { ...params },\n signal,\n });\n }\n\n searchThreads(address: string, params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/search`,\n query: { ...params },\n signal,\n });\n }\n\n getThread(address: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.call({\n method: \"GET\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/${encodeURIComponent(threadId)}`,\n signal,\n });\n }\n\n getSubmission(address: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}/submissions/${encodeURIComponent(submissionId)}`, signal });\n }\n getSubmissionInProject(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.call({ method: \"GET\", path: `/v1/projects/${encodeURIComponent(projectId)}/inboxes/${encodeURIComponent(inboxId)}/submissions/${encodeURIComponent(submissionId)}`, signal });\n }\n\n deleteThread(\n address: string,\n threadId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/threads/${encodeURIComponent(threadId)}`,\n query: expunge ? { expunge: true } : undefined,\n signal,\n });\n }\n\n waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/wait`,\n body: req,\n // The server blocks up to req.timeout_seconds; give the HTTP read a small margin over it.\n timeoutMs,\n retryable: false,\n signal,\n });\n }\n\n registerWebhook(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n const { org_id, project_id, ...body } = req;\n return this.call({ method: \"POST\", path: \"/v1/webhooks\", query: { org_id, project_id }, body, idempotencyKey: req.client_id, signal });\n }\n\n async listWebhooks(signal?: AbortSignal, params: ListWebhooksParams = {}): Promise<Page<Webhook>> {\n return normalizeInboxPage<Webhook>(await this.call({ method: \"GET\", path: \"/v1/webhooks\", query: { ...params }, signal }), \"webhook\");\n }\n\n getWebhook(webhookId: string, signal?: AbortSignal, selection?: ConnectionResourceSelection): Promise<Webhook> {\n return this.call({ method: \"GET\", path: `/v1/webhooks/${encodeURIComponent(webhookId)}`, query: { ...selection }, signal });\n }\n\n updateWebhook(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n const { org_id, project_id, ...body } = req;\n return this.call({ method: \"PATCH\", path: `/v1/webhooks/${encodeURIComponent(webhookId)}`, query: { org_id, project_id }, body, signal });\n }\n\n async deleteWebhook(webhookId: string, signal?: AbortSignal, selection?: ConnectionResourceSelection): Promise<void> {\n await this.call({ method: \"DELETE\", path: `/v1/webhooks/${encodeURIComponent(webhookId)}`, query: { ...selection }, signal });\n }\n\n addContactListEntry(\n address: string,\n req: AddContactListRequest,\n signal?: AbortSignal,\n ): Promise<ContactListEntry> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/lists`,\n body: req,\n signal,\n });\n }\n\n listContactLists(address: string, signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.call({ method: \"GET\", path: `/v1/inboxes/${this.encodeAddress(address)}/lists`, signal });\n }\n\n async deleteContactListEntry(address: string, entryId: string, signal?: AbortSignal): Promise<void> {\n await this.call({\n method: \"DELETE\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/lists/${encodeURIComponent(entryId)}`,\n signal,\n });\n }\n\n precheckSuppression(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck> {\n // A `recipient` query param routes the server to the pre-check shape\n // ({recipient, suppressed, rows}) rather than the paged list.\n return this.call({ method: \"GET\", path: \"/v1/suppressions\", query: { recipient }, signal });\n }\n\n listSuppressions(params: ListSuppressionsParams, signal?: AbortSignal): Promise<Page<SuppressionEntry>> {\n // Note: no `recipient` here - that param switches the server to the pre-check.\n return this.call({\n method: \"GET\",\n path: \"/v1/suppressions\",\n query: {\n scope: params.scope,\n include_revoked: params.include_revoked ? \"true\" : undefined,\n limit: params.limit,\n cursor: params.cursor,\n },\n signal,\n });\n }\n\n revokeSuppression(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry> {\n return this.call({\n method: \"POST\",\n path: `/v1/suppressions/${encodeURIComponent(id)}/revoke`,\n body: { reason },\n signal,\n });\n }\n\n listDomains(signal?: AbortSignal, params: { page?: string; limit?: number } = {}): Promise<Page<Domain>> {\n return this.call({ method: \"GET\", path: \"/v1/domains\", query: params, signal });\n }\n\n listDomainEvents(domain: string, params: { after?: string; limit?: number }, signal?: AbortSignal): Promise<DomainStatusEventPage> {\n return this.call({ method: \"GET\", path: `/v1/domains/${encodeURIComponent(domain)}/events`, query: params, signal });\n }\n\n getDomain(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.call({ method: \"GET\", path: `/v1/domains/${encodeURIComponent(domain)}`, signal });\n }\n\n onboardDomain(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain> {\n return this.call({ method: \"POST\", path: \"/v1/domains\", body: req, signal });\n }\n\n // Delegated domains perform an immediate authoritative DNS check. Inspect\n // delegation.status separately from mail readiness; 429 requests may be retried.\n verifyDomain(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.call({\n method: \"POST\",\n path: `/v1/domains/${encodeURIComponent(domain)}/verify`,\n signal,\n });\n }\n\n async offboardDomain(domain: string, signal?: AbortSignal): Promise<DomainOffboard> {\n // Async contract: the API accepts the offboard (HTTP 202) and returns the\n // teardown job to poll; the request body carries { job_id, status, status_url }.\n const res = await this.call<Partial<DomainOffboard>>({\n method: \"DELETE\",\n path: `/v1/domains/${encodeURIComponent(domain)}`,\n signal,\n });\n const jobId = res?.job_id ?? \"\";\n return {\n domain,\n job_id: jobId,\n status: res?.status ?? \"queued\",\n status_url: res?.status_url ?? (jobId ? `/v1/jobs/${jobId}` : \"\"),\n };\n }\n\n getJob(jobId: string, signal?: AbortSignal): Promise<Job> {\n return this.call({ method: \"GET\", path: `/v1/jobs/${encodeURIComponent(jobId)}`, signal });\n }\n\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote> {\n return this.call({ method: \"POST\", path: \"/v1/commerce/domain-quotes\", body: req, signal });\n }\n\n requestDomainPurchase(\n req: RequestDomainPurchaseRequest,\n signal?: AbortSignal,\n ): Promise<CommerceRequest> {\n const { idempotency_key, ...body } = req;\n return this.call({\n method: \"POST\",\n path: \"/v1/commerce/requests/domain-purchases\",\n body,\n idempotencyKey: idempotency_key,\n signal,\n });\n }\n\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest> {\n const { idempotency_key, ...body } = req;\n return this.call({\n method: \"POST\",\n path: \"/v1/commerce/requests/plan-changes\",\n body,\n idempotencyKey: idempotency_key,\n signal,\n });\n }\n\n getCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.call({\n method: \"GET\",\n path: `/v1/commerce/requests/${encodeURIComponent(requestId)}`,\n signal,\n });\n }\n\n cancelCommerceRequest(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.call({\n method: \"POST\",\n path: `/v1/commerce/requests/${encodeURIComponent(requestId)}/cancel`,\n signal,\n });\n }\n\n listCommerceRequests(\n params: ListCommerceRequestsParams,\n signal?: AbortSignal,\n ): Promise<Page<CommerceRequest>> {\n return this.call({\n method: \"GET\",\n path: \"/v1/commerce/requests\",\n query: {\n limit: params.limit,\n page: params.page,\n },\n signal,\n });\n }\n\n submitForReview(address: string, req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/send`,\n body: sendBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n submitReplyForReview(\n address: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.call({\n method: \"POST\",\n path: `/v1/inboxes/${this.encodeAddress(address)}/reply`,\n body: replyBody(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n listReviews(params: ListReviewsParams, signal?: AbortSignal): Promise<Page<Review>> {\n const query: Record<string, string | number | undefined> = {\n state: Array.isArray(params.state) ? params.state.join(\",\") : params.state,\n category_id: params.category_id,\n inbox: params.inbox,\n composer: params.composer,\n limit: params.limit,\n page: params.page,\n };\n return this.call({ method: \"GET\", path: \"/v1/reviews\", query, signal });\n }\n\n getReview(reviewId: string, signal?: AbortSignal): Promise<Review> {\n return this.call({ method: \"GET\", path: `/v1/reviews/${encodeURIComponent(reviewId)}`, signal });\n }\n\n getReviewTurns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/turns`,\n signal,\n });\n }\n\n getReviewFeedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/feedback`,\n signal,\n });\n }\n\n postReviewChat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/chat`,\n body: req,\n idempotencyKey,\n signal,\n });\n }\n\n submitRevision(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/revision`,\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n cancelReview(reviewId: string, idempotencyKey?: string, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/cancel`,\n body: {},\n idempotencyKey,\n signal,\n });\n }\n\n restampReview(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/restamp`,\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n getReviewDecisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext> {\n return this.call({\n method: \"GET\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/decision-context`,\n signal,\n });\n }\n\n reviewerDecide(reviewId: string, req: ReviewerDecisionRequest, signal?: AbortSignal): Promise<ReviewerDecisionResult> {\n return this.call({\n method: \"POST\",\n path: `/v1/reviews/${encodeURIComponent(reviewId)}/decision`,\n body: req,\n signal,\n });\n }\n\n listReviewEvents(params: ListReviewEventsParams, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.call({\n method: \"GET\",\n path: \"/v1/reviews/events\",\n query: { review_id: params.review_id, limit: params.limit },\n signal,\n });\n }\n\n waitForReviewEvent(params: WaitForReviewEventParams, signal?: AbortSignal): Promise<ReviewEventsResult> {\n const waitSeconds = Math.min(55, Math.max(1, params.wait_seconds ?? 55));\n return this.call({\n method: \"GET\",\n path: \"/v1/reviews/events/wait\",\n query: { review_id: params.review_id, limit: params.limit, wait_seconds: waitSeconds },\n timeoutMs: (waitSeconds + 10) * 1000,\n signal,\n });\n }\n\n ackReviewEvent(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult> {\n return this.call({\n method: \"POST\",\n path: \"/v1/reviews/events/ack\",\n body: { acks: req.acks ?? [], broadcast_ids: req.broadcast_ids ?? [] },\n signal,\n });\n }\n\n listCategories(params: ListCategoriesParams, signal?: AbortSignal): Promise<Page<Category>> {\n return this.call({ method: \"GET\", path: \"/v1/categories\", query: { ...params }, signal });\n }\n\n getCategory(categoryId: string, signal?: AbortSignal): Promise<Category> {\n return this.call({ method: \"GET\", path: `/v1/categories/${encodeURIComponent(categoryId)}`, signal });\n }\n\n proposeCategory(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.call({ method: \"POST\", path: \"/v1/categories\", body: req, signal });\n }\n\n updateCategory(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.call({\n method: \"PUT\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}`,\n body: req,\n signal,\n });\n }\n\n getRiskDial(signal?: AbortSignal): Promise<RiskDial> {\n return this.call({ method: \"GET\", path: \"/v1/risk-dial\", signal });\n }\n\n getGraduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/graduation-status`,\n signal,\n });\n }\n\n getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/backlog-status`,\n signal,\n });\n }\n\n getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState> {\n return this.call({\n method: \"GET\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/pacing-state`,\n signal,\n });\n }\n\n proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.call({\n method: \"POST\",\n path: `/v1/categories/${encodeURIComponent(categoryId)}/graduation-request`,\n body: { evidence: req.evidence ?? {} },\n signal,\n });\n }\n\n getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot> {\n return this.call({\n method: \"GET\",\n path: \"/v1/rules\",\n query: { category_id: params.category_id, scope: params.scope },\n signal,\n });\n }\n\n learnReviewRule(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule> {\n return this.call({method: \"POST\", path: `/v1/reviews/${encodeURIComponent(reviewId)}/learned-rules`, body: req, signal});\n }\n saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"PUT\",\n path: \"/v1/rules\",\n body: withoutIdempotencyKey(req),\n idempotencyKey: req.idempotency_key,\n signal,\n });\n }\n\n promoteRule(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"POST\",\n path: `/v1/rules/${encodeURIComponent(ruleId)}/promote`,\n body: { to_scope: toScope },\n signal,\n });\n }\n\n retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule> {\n return this.call({ method: \"POST\", path: `/v1/rules/${encodeURIComponent(ruleId)}/retire`, body: {}, signal });\n }\n\n getRuleAudit(params: GetRuleAuditParams, signal?: AbortSignal): Promise<Page<RuleAuditEntry>> {\n return this.call({\n method: \"GET\",\n path: \"/v1/rules/audit\",\n query: { entity_kind: params.entity_kind, entity_id: params.entity_id },\n signal,\n });\n }\n\n undoRuleChange(udoId: string, signal?: AbortSignal): Promise<Rule> {\n return this.call({\n method: \"POST\",\n path: `/v1/rules/audit/${encodeURIComponent(udoId)}/undo`,\n body: {},\n signal,\n });\n }\n\n async *stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n const path =\n address === null ? \"/v1/events\" : `/v1/inboxes/${this.encodeAddress(address)}/stream`;\n const frames = this.http.stream({\n path,\n lastEventId: lastEventId !== undefined ? String(lastEventId) : undefined,\n signal,\n });\n for await (const frame of frames) {\n // The SSE `data:` is the canonical event envelope; the `id:` is the monotonic\n // resume token (seq). Merge them into the typed StreamEvent.\n let envelope: Record<string, unknown> = {};\n try {\n envelope = JSON.parse(frame.data) as Record<string, unknown>;\n } catch {\n continue; // skip malformed frames rather than aborting the whole stream\n }\n const seq = frame.id !== undefined ? Number(frame.id) : NaN;\n yield {\n ...(envelope as object),\n event: (envelope.event as string) ?? frame.event,\n seq: Number.isFinite(seq) ? seq : 0,\n } as StreamEvent;\n }\n }\n}\n\n/** Offline transport backed by {@link MockBackend}. Never touches the network. */\nexport class MockTransport implements Transport {\n readonly backend: MockBackend;\n constructor(backend?: MockBackend) {\n this.backend = backend ?? new MockBackend();\n }\n\n async administrativeRequest(request: AdministrativeRequest): Promise<unknown> {\n return this.backend.administrativeRequest(request);\n }\n\n async enroll(req: EnrollRequest): Promise<EnrollResponse> {\n return this.backend.enroll(req);\n }\n async signUp(req: SignUpRequest): Promise<SignUpResponse> {\n return this.backend.signUp(req);\n }\n async verify(req: VerifyRequest): Promise<VerifyResponse> {\n return this.backend.verify(req);\n }\n async whoami(): Promise<WhoAmI> {\n return this.backend.whoami();\n }\n async createInbox(req: CreateInboxRequest): Promise<Inbox> {\n return this.backend.createInbox(req);\n }\n async listInboxes(params: ListInboxesParams): Promise<Page<Inbox>> {\n return this.backend.listInboxes(params);\n }\n async getInbox(address: string): Promise<Inbox> {\n const inbox = this.backend.getInbox(address);\n if (!inbox) throw notFound(\"inbox\", address);\n return inbox;\n }\n async updateInbox(address: string, req: UpdateInboxRequest): Promise<Inbox> {\n const inbox = this.backend.updateInbox(address, req);\n if (!inbox) throw notFound(\"inbox\", address);\n return inbox;\n }\n async deleteInbox(address: string): Promise<void> {\n this.backend.deleteInbox(address);\n }\n async createInboxInProject(projectId: string, req: CreateInboxRequest): Promise<Inbox> {\n return this.backend.createInboxInProject(projectId, req);\n }\n async listInboxesInProject(projectId: string, params: ProjectInboxListParams): Promise<List<Inbox>> {\n return this.backend.listInboxesInProject(projectId, params);\n }\n async getInboxInProject(projectId: string, inboxId: string): Promise<Inbox> {\n const inbox = this.backend.getInboxInProject(projectId, inboxId);\n if (!inbox) throw notFound(\"inbox\", inboxId);\n return inbox;\n }\n async updateInboxInProject(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n ): Promise<Inbox> {\n const inbox = this.backend.updateInboxInProject(projectId, inboxId, req);\n if (!inbox) throw notFound(\"inbox\", inboxId);\n return inbox;\n }\n async deleteInboxInProject(projectId: string, inboxId: string): Promise<void> {\n if (!this.backend.deleteInboxInProject(projectId, inboxId)) throw notFound(\"inbox\", inboxId);\n }\n async getInboxCredentialsInProject(projectId: string, inboxId: string): Promise<InboxCredentials> {\n const creds = this.backend.getInboxCredentialsInProject(projectId, inboxId);\n if (!creds) throw notFound(\"inbox\", inboxId);\n return creds;\n }\n async send(address: string, req: SendRequest): Promise<SendOutcome> {\n return this.backend.send(address, req);\n }\n async reply(address: string, req: ReplyRequest): Promise<SendOutcome> {\n return this.backend.reply(address, req);\n }\n async forward(address: string, messageId: string, req: ForwardRequest): Promise<SendOutcome> {\n return this.backend.forward(address, messageId, req);\n }\n async listMessages(address: string, params: ListMessagesParams): Promise<Page<Message>> {\n return this.backend.listMessages(address, params);\n }\n async getMessage(messageId: string): Promise<Message> {\n try {\n return this.backend.getMessage(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async getMessageRaw(_address: string, messageId: string): Promise<string> {\n try {\n return this.backend.getMessageRaw(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async listAttachments(_address: string, messageId: string): Promise<Page<Attachment>> {\n try {\n return this.backend.listAttachments(messageId);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async getAttachment(\n _address: string,\n messageId: string,\n attachmentId: string,\n ): Promise<AttachmentDownload> {\n try {\n return this.backend.getAttachment(messageId, attachmentId);\n } catch {\n throw notFound(\"attachment\", attachmentId);\n }\n }\n async markRead(_address: string, messageId: string, req: MarkReadRequest): Promise<Message> {\n try {\n return this.backend.markRead(messageId, req.read);\n } catch {\n throw notFound(\"message\", messageId);\n }\n }\n async deleteMessage(address: string, messageId: string, expunge?: boolean): Promise<DeleteResult> {\n const res = this.backend.deleteMessage(address, messageId, expunge ?? false);\n if (!res) throw notFound(\"message\", messageId);\n return res;\n }\n async batchUpdateMessages(\n address: string,\n req: BatchUpdateMessagesRequest,\n ): Promise<BatchUpdateResult> {\n if (req.read === undefined && req.folder === undefined) {\n throw invalid(\"set read and/or folder to update\");\n }\n const res = this.backend.batchUpdateMessages(address, req.ids, req.read, req.folder);\n if (!res) throw notFound(\"inbox\", address);\n return res;\n }\n async searchMessages(address: string, params: SearchMessagesParams): Promise<Page<Message>> {\n return this.backend.searchMessages(address, params);\n }\n async listThreads(address: string, params: ListThreadsParams): Promise<Page<Thread>> {\n return this.backend.listThreads(address, params);\n }\n async searchThreads(address: string, params: SearchMessagesParams): Promise<Page<Thread>> {\n return this.backend.searchThreads(address, params);\n }\n async getThread(address: string, threadId: string): Promise<ThreadDetail> {\n try {\n return this.backend.getThread(address, threadId);\n } catch {\n throw notFound(\"thread\", threadId);\n }\n }\n async getSubmission(address: string, submissionId: string): Promise<Submission> {\n const result = this.backend.getSubmission(address, submissionId);\n if (!result) throw notFound(\"submission\", submissionId);\n return result;\n }\n async getSubmissionInProject(projectId: string, inboxId: string, submissionId: string): Promise<Submission> {\n const inbox = await this.getInboxInProject(projectId, inboxId);\n return this.getSubmission(inbox.address, submissionId);\n }\n async deleteThread(address: string, threadId: string, expunge?: boolean): Promise<DeleteResult> {\n const res = this.backend.deleteThread(address, threadId, expunge ?? false);\n if (!res) throw notFound(\"thread\", threadId);\n return res;\n }\n async waitForEmail(\n address: string,\n req: WaitForEmailRequest,\n _timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n if (signal?.aborted) throw notFound(\"inbox\", address);\n return this.backend.waitForEmail(address, req);\n }\n async registerWebhook(req: RegisterWebhookRequest): Promise<Webhook> {\n assertWebhookFixtureSelection(req);\n return this.backend.registerWebhook(req);\n }\n async listWebhooks(_signal?: AbortSignal, params: ListWebhooksParams = {}): Promise<Page<Webhook>> {\n assertWebhookFixtureSelection(params);\n return this.backend.listWebhooks(params);\n }\n async getWebhook(webhookId: string, _signal?: AbortSignal, selection: ConnectionResourceSelection = {}): Promise<Webhook> {\n assertWebhookFixtureSelection(selection);\n const hook = this.backend.getWebhook(webhookId);\n if (!hook) throw notFound(\"webhook\", webhookId);\n return hook;\n }\n async updateWebhook(webhookId: string, req: UpdateWebhookRequest): Promise<Webhook> {\n assertWebhookFixtureSelection(req);\n const hook = this.backend.updateWebhook(webhookId, req);\n if (!hook) throw notFound(\"webhook\", webhookId);\n return hook;\n }\n async deleteWebhook(webhookId: string, _signal?: AbortSignal, selection: ConnectionResourceSelection = {}): Promise<void> {\n assertWebhookFixtureSelection(selection);\n if (!this.backend.deleteWebhook(webhookId)) throw notFound(\"webhook\", webhookId);\n }\n async addContactListEntry(address: string, req: AddContactListRequest): Promise<ContactListEntry> {\n const entry = this.backend.addContactListEntry(address, req);\n if (!entry) throw notFound(\"inbox\", address);\n return entry;\n }\n async listContactLists(address: string): Promise<Page<ContactListEntry>> {\n const page = this.backend.listContactLists(address);\n if (!page) throw notFound(\"inbox\", address);\n return page;\n }\n async deleteContactListEntry(address: string, entryId: string): Promise<void> {\n if (!this.backend.deleteContactListEntry(address, entryId)) throw notFound(\"contact list entry\", entryId);\n }\n async precheckSuppression(recipient: string): Promise<SuppressionPrecheck> {\n return this.backend.precheckSuppression(recipient);\n }\n async listSuppressions(params: ListSuppressionsParams): Promise<Page<SuppressionEntry>> {\n return this.backend.listSuppressions(params);\n }\n async revokeSuppression(id: string, reason: string): Promise<SuppressionEntry> {\n const row = this.backend.revokeSuppression(id, reason);\n if (!row) throw notFound(\"suppression\", id);\n return row;\n }\n async listDomains(_signal?: AbortSignal, params: { page?: string; limit?: number } = {}): Promise<Page<Domain>> {\n const page = this.backend.listDomains();\n const offset = Number(params.page ?? 0);\n if (!Number.isSafeInteger(offset) || offset < 0) throw new Error(\"Invalid page cursor\");\n const items = page.items.slice(offset, offset + (params.limit ?? 50));\n return { items, total: page.total, next_cursor: offset + items.length < page.items.length ? String(offset + items.length) : undefined };\n }\n\n async listDomainEvents(domain: string, params: { after?: string; limit?: number }): Promise<DomainStatusEventPage> {\n if (!this.backend.getDomain(domain)) throw notFound(\"domain\", domain);\n return { items: [], next_cursor: params.after ?? \"0\", has_more: false, poll_after_seconds: 30 };\n }\n async getDomain(domain: string): Promise<Domain> {\n const d = this.backend.getDomain(domain);\n if (!d) throw notFound(\"domain\", domain);\n return d;\n }\n async onboardDomain(req: OnboardDomainRequest): Promise<Domain> {\n return this.backend.onboardDomain(req);\n }\n async verifyDomain(domain: string): Promise<Domain> {\n const d = this.backend.verifyDomain(domain);\n if (!d) throw notFound(\"domain\", domain);\n return d;\n }\n async offboardDomain(domain: string): Promise<DomainOffboard> {\n if (!this.backend.offboardDomain(domain)) throw notFound(\"domain\", domain);\n // No job runner in the mock backend: report a synthetic succeeded teardown job\n // (the backend recorded it, so a follow-up getJob resolves it too).\n const jobId = `job-offboard-${domain.trim().toLowerCase()}`;\n return { domain, job_id: jobId, status: \"succeeded\", status_url: `/v1/jobs/${jobId}` };\n }\n async getJob(jobId: string): Promise<Job> {\n const job = this.backend.getJob(jobId);\n if (!job) throw notFound(\"job\", jobId);\n return job;\n }\n async quoteDomain(req: QuoteDomainRequest): Promise<DomainQuote> {\n return this.backend.quoteDomain(req);\n }\n async requestDomainPurchase(req: RequestDomainPurchaseRequest): Promise<CommerceRequest> {\n return this.backend.requestDomainPurchase(req);\n }\n async requestPlanChange(req: RequestPlanChangeRequest): Promise<CommerceRequest> {\n return this.backend.requestPlanChange(req);\n }\n async getCommerceRequest(requestId: string): Promise<CommerceRequest> {\n const request = this.backend.getCommerceRequest(requestId);\n if (!request) throw notFound(\"commerce request\", requestId);\n return request;\n }\n async cancelCommerceRequest(requestId: string): Promise<CommerceRequest> {\n const request = this.backend.cancelCommerceRequest(requestId);\n if (!request) throw notFound(\"commerce request\", requestId);\n return request;\n }\n async listCommerceRequests(params: ListCommerceRequestsParams): Promise<Page<CommerceRequest>> {\n return this.backend.listCommerceRequests(params);\n }\n async submitForReview(address: string, req: SendRequest): Promise<SendOutcome> {\n return this.backend.submitForReview(address, req);\n }\n async submitReplyForReview(address: string, req: ReplyRequest): Promise<SendOutcome> {\n return this.backend.submitReplyForReview(address, req);\n }\n async listReviews(params: ListReviewsParams): Promise<Page<Review>> {\n return this.backend.listReviews(params);\n }\n async getReview(reviewId: string): Promise<Review> {\n const r = this.backend.getReview(reviewId);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async getReviewTurns(reviewId: string): Promise<Page<ReviewTurn>> {\n const turns = this.backend.getReviewTurns(reviewId);\n if (!turns) throw notFound(\"review\", reviewId);\n return turns;\n }\n async getReviewFeedback(reviewId: string): Promise<ReviewFeedback> {\n const fb = this.backend.getReviewFeedback(reviewId);\n if (!fb) throw notFound(\"review\", reviewId);\n return fb;\n }\n async postReviewChat(reviewId: string, req: PostReviewChatRequest, idempotencyKey?: string): Promise<Review> {\n const r = this.backend.postReviewChat(reviewId, req, idempotencyKey);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async submitRevision(reviewId: string, req: SubmitRevisionRequest): Promise<Review> {\n const r = this.backend.submitRevision(reviewId, req);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async cancelReview(reviewId: string, _idempotencyKey?: string): Promise<Review> {\n const r = this.backend.cancelReview(reviewId);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async restampReview(reviewId: string, req: RestampReviewRequest): Promise<Review> {\n const r = this.backend.restampReview(reviewId, req);\n if (!r) throw notFound(\"review\", reviewId);\n return r;\n }\n async getReviewDecisionContext(reviewId: string): Promise<ReviewDecisionContext> {\n const dc = this.backend.getReviewDecisionContext(reviewId);\n if (!dc) throw notFound(\"review\", reviewId);\n return dc;\n }\n async reviewerDecide(reviewId: string, req: ReviewerDecisionRequest): Promise<ReviewerDecisionResult> {\n const res = this.backend.reviewerDecide(reviewId, req);\n if (!res) throw notFound(\"review\", reviewId);\n return res;\n }\n async listReviewEvents(params: ListReviewEventsParams): Promise<ReviewEventsResult> {\n return this.backend.listReviewEvents(params);\n }\n async waitForReviewEvent(params: WaitForReviewEventParams): Promise<ReviewEventsResult> {\n return this.backend.waitForReviewEvent(params);\n }\n async ackReviewEvent(req: AckReviewEventRequest): Promise<AckReviewEventResult> {\n return this.backend.ackReviewEvent(req);\n }\n async listCategories(params: ListCategoriesParams): Promise<Page<Category>> {\n return this.backend.listCategories(params);\n }\n async getCategory(categoryId: string): Promise<Category> {\n const c = this.backend.getCategory(categoryId);\n if (!c) throw notFound(\"category\", categoryId);\n return c;\n }\n async proposeCategory(req: ProposeCategoryRequest): Promise<Category> {\n return this.backend.proposeCategory(req);\n }\n async updateCategory(categoryId: string, req: UpdateCategoryRequest): Promise<Category> {\n const c = this.backend.updateCategory(categoryId, req);\n if (!c) throw notFound(\"category\", categoryId);\n return c;\n }\n async getRiskDial(): Promise<RiskDial> {\n return this.backend.getRiskDial();\n }\n async getGraduationStatus(categoryId: string): Promise<GraduationStatus> {\n const st = this.backend.getGraduationStatus(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async proposeGraduation(categoryId: string, req: ProposeGraduationRequest): Promise<GraduationStatus> {\n const st = this.backend.proposeGraduation(categoryId, req);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getScanBacklogStatus(categoryId: string): Promise<ScanBacklogStatus> {\n const st = this.backend.getScanBacklogStatus(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getCategoryPacingState(categoryId: string): Promise<CategoryPacingState> {\n const st = this.backend.getCategoryPacingState(categoryId);\n if (!st) throw notFound(\"category\", categoryId);\n return st;\n }\n async getRules(params: GetRulesParams): Promise<RuleSnapshot> {\n return this.backend.getRules(params);\n }\n async learnReviewRule(reviewId: string, req: LearnReviewRuleRequest): Promise<LearnedReviewRule> {\n return this.backend.learnReviewRule(reviewId, req);\n }\n async saveRule(req: SaveRuleRequest): Promise<Rule> {\n return this.backend.saveRule(req);\n }\n async promoteRule(ruleId: string, toScope: \"general\" | \"category\"): Promise<Rule> {\n const r = this.backend.promoteRule(ruleId, toScope);\n if (!r) throw notFound(\"rule\", ruleId);\n return r;\n }\n async retireRule(ruleId: string): Promise<Rule> {\n const r = this.backend.retireRule(ruleId);\n if (!r) throw notFound(\"rule\", ruleId);\n return r;\n }\n async getRuleAudit(params: GetRuleAuditParams): Promise<Page<RuleAuditEntry>> {\n return this.backend.getRuleAudit(params);\n }\n async undoRuleChange(udoId: string): Promise<Rule> {\n return this.backend.undoRuleChange(udoId);\n }\n async *stream(\n address: string | null,\n lastEventId?: number,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamEvent, void, unknown> {\n for await (const ev of this.backend.streamEvents(address, lastEventId)) {\n if (signal?.aborted) return;\n yield ev;\n }\n }\n}\n\nfunction notFound(kind: string, id: string): NotFoundError {\n return new NotFoundError({\n status: 404,\n code: \"not_found\",\n message: `No ${kind} found for \"${id}\" in the offline mock.`,\n });\n}\n\nfunction invalid(message: string): ValidationError {\n return new ValidationError({ status: 400, code: \"invalid\", message });\n}\n\n/** Runtime-agnostic base64 of a byte array (no Buffer dependency). */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]!);\n if (typeof btoa === \"function\") return btoa(binary);\n // Node fallback when btoa is unavailable.\n const g = globalThis as { Buffer?: { from(s: string, enc: string): { toString(enc: string): string } } };\n if (g.Buffer) return g.Buffer.from(binary, \"binary\").toString(\"base64\");\n throw new Error(\"No base64 encoder available in this runtime.\");\n}\n\n/** Pull a filename out of a Content-Disposition header value. */\nfunction filenameFromDisposition(disposition: string): string {\n const m = /filename\\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i.exec(disposition);\n return m ? decodeURIComponent(m[1]!.trim()) : \"\";\n}\n\nfunction assertWebhookFixtureSelection(selection: ConnectionResourceSelection): void {\n if (selection.org_id || selection.project_id) throw new Error(\"Offline webhook fixtures do not simulate organization/project selection; use live credentials for scoped checks.\");\n}\n","import type { Domain } from \"./models.js\";\n\nexport interface DomainWaitResult {\n domain: Domain;\n outcome: \"ready\" | \"action_required\" | \"needs_attention\" | \"timed_out\" | \"status_unavailable\";\n resume_after_seconds: number;\n}\n\n/** Bounded, cancellable status polling. Never initiates DNS or provider work. */\nexport async function waitForDomain(\n get: (signal: AbortSignal) => Promise<Domain>,\n options: { timeout_seconds?: number; signal?: AbortSignal } = {},\n): Promise<DomainWaitResult> {\n const seconds = options.timeout_seconds ?? 45;\n if (!Number.isInteger(seconds) || seconds < 0 || seconds > 50) throw new Error(\"timeout_seconds must be an integer between 0 and 50\");\n const deadline = AbortSignal.timeout(Math.max(1, seconds * 1000));\n const signal = options.signal ? AbortSignal.any([options.signal, deadline]) : deadline;\n let latest: Domain | undefined;\n const result = (outcome: DomainWaitResult[\"outcome\"]): DomainWaitResult => ({\n domain: latest!, outcome,\n resume_after_seconds: outcome === \"timed_out\" ? Math.max(5, Math.min(60, latest?.readiness?.poll_after_seconds ?? 30)) : 0,\n });\n try {\n // Zero means one status check, not an immediately aborted request.\n const singleCheckDeadline = seconds === 0 ? AbortSignal.timeout(10_000) : undefined;\n latest = await get(singleCheckDeadline\n ? (options.signal ? AbortSignal.any([options.signal, singleCheckDeadline]) : singleCheckDeadline)\n : signal);\n for (;;) {\n const r = latest.readiness;\n if (!r) return result(\"status_unavailable\");\n if (r.ready_for_inboxes) return result(\"ready\");\n if (r.action_required_by === \"customer\") return result(\"action_required\");\n if (r.status === \"needs_attention\") return result(\"needs_attention\");\n if (seconds === 0) return result(\"timed_out\");\n await new Promise<void>((resolve, reject) => {\n signal.throwIfAborted();\n const abort = () => { clearTimeout(timer); reject(signal.reason); };\n const timer = setTimeout(() => { signal.removeEventListener(\"abort\", abort); resolve(); }, Math.max(5, Math.min(60, r.poll_after_seconds || 30)) * 1000);\n signal.addEventListener(\"abort\", abort, { once: true });\n });\n latest = await get(signal);\n }\n } catch (error) {\n if (options.signal?.aborted) throw options.signal.reason;\n if (deadline.aborted && latest) return result(\"timed_out\");\n throw error;\n }\n}\n","/**\n * Key-tier awareness (redesign §3.1).\n *\n * An agent key encodes its CEILING tier in its raw prefix. The SDK never trusts\n * client input for scope - the tier is derived from the key the caller already\n * holds, purely as a client-side hint so an app can branch (e.g. an org-tier key\n * MUST pick a project breadth on a list; a project/inbox key may use the bare\n * sugar). The server remains the source of truth; this is advisory only.\n *\n * Prefix scheme (the secret tail is unchanged across tiers):\n * - `pk_agent_org_…` → {@link KeyTier.Org} (admin/console issuance only)\n * - `pk_agent_proj_…` → {@link KeyTier.Project} (enrollment redeem + console)\n * - `pk_agent_inbox_…` → {@link KeyTier.Inbox} (admin/console issuance only)\n * - legacy `pk_agent_…` (no tier segment) → {@link KeyTier.Project}\n */\n\n/** The ceiling tier encoded in an agent key's prefix. */\nexport type KeyTier = \"org\" | \"project\" | \"inbox\" | \"unknown\";\n\nconst AGENT_HEAD = \"pk_agent_\";\n\n/**\n * Derive the {@link KeyTier} from a raw agent key by peeking the segment after the\n * `pk_agent_` head. A legacy bare `pk_agent_…` key (no tier segment) maps to\n * `\"project\"` - exactly today's behavior. A non-agent credential (enrollment\n * token, Clerk session, empty) returns `\"unknown\"`.\n */\nexport function parseKeyTier(apiKey: string | undefined): KeyTier {\n if (!apiKey || !apiKey.startsWith(AGENT_HEAD)) return \"unknown\";\n const rest = apiKey.slice(AGENT_HEAD.length);\n if (rest.startsWith(\"org_\")) return \"org\";\n if (rest.startsWith(\"proj_\")) return \"project\";\n if (rest.startsWith(\"inbox_\")) return \"inbox\";\n // Bare `pk_agent_<id>_<secret>` (no tier segment) is a legacy project key.\n return \"project\";\n}\n\n/**\n * Whether a key of this tier can address the org-wide wildcard (`/v1/projects/-/…`).\n * Only an org-tier key may; a project/inbox key on the wildcard is a 403. Use this\n * to fail fast client-side before a round-trip.\n */\nexport function tierAllowsOrgWildcard(tier: KeyTier): boolean {\n return tier === \"org\";\n}\n\n/**\n * Whether a bare (project-less) list is unambiguous for this tier. An org-tier key\n * MUST pick a breadth (a concrete project or the `-` wildcard), so a bare list is a\n * 400 `breadth_required`; project/inbox keys default to their bound project.\n */\nexport function tierNeedsExplicitBreadth(tier: KeyTier): boolean {\n return tier === \"org\";\n}\n","/**\n * InboxHandle: an ergonomic, bound handle to a single inbox.\n *\n * Returned by `extrovert.inboxes.create(...)` and `extrovert.inbox(address)`, it scopes every operation\n * to one address so agent code reads naturally: `inbox.send(...)`, `inbox.waitForEmail(...)`. This\n * is the \"one agent = one inbox\" shape the spec's identity model encourages (§5).\n */\n\nimport type { AttachmentDownload, Transport } from \"../transport.js\";\nimport type {\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n ContactListEntry,\n DeleteResult,\n ForwardRequest,\n Inbox,\n InboxCredentials,\n InboxStatus,\n ListMessagesParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n OnboardingMode,\n Page,\n RegisterWebhookRequest,\n ReplyRequest,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n StreamEvent,\n StreamOptions,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n WaitForEmailRequest,\n WaitForEmailResult,\n Webhook,\n} from \"../models.js\";\n\nexport interface InboxHandleOptions {\n /** Default per-call timeout for blocking calls; resolved from the client config. */\n defaultWaitTimeoutMs: number;\n}\n\nexport class InboxHandle {\n /** The canonical address, e.g. `agent7@extrovertmail.com`. */\n readonly address: string;\n /** The full inbox record this handle was created from (absent when constructed by address). */\n readonly record: Inbox | undefined;\n\n constructor(\n private readonly transport: Transport,\n address: string,\n private readonly options: InboxHandleOptions,\n record?: Inbox,\n ) {\n this.address = address;\n this.record = record;\n }\n\n /** The inbox id, when known. */\n get id(): string | undefined {\n return this.record?.id;\n }\n\n /**\n * The canonical key every transport op routes on. The contract canonicalizes the\n * OPAQUE inbox id (`pmbx_…`) and accepts the address only as a within-project alias\n * (both are valid in the `{inbox_id}` path slot). When this handle was built from a\n * full record we route by the canonical `id` (matching the \"an inbox's canonical key\n * is its opaque id\" docs); when built bare from an address (`client.inbox(addr)`),\n * the address alias is the only key we have, so we route on it.\n */\n private get ref(): string {\n return this.record?.id ?? this.address;\n }\n\n /**\n * Arbitrary key-value metadata on this inbox, when known (from the record this\n * handle was created from). Call {@link refresh} to re-read it after an update.\n */\n get metadata(): Inbox[\"metadata\"] | undefined {\n return this.record?.metadata;\n }\n\n /** Effective rolling-24-hour recipient cap, when known. */\n get dailySendLimit(): number | undefined {\n return this.record?.daily_send_limit;\n }\n\n /** Provisioning status, when known. */\n get status(): InboxStatus | undefined {\n return this.record?.status;\n }\n\n /** Onboarding mode of the host domain, when known. */\n get onboardingMode(): OnboardingMode | undefined {\n return this.record?.onboarding_mode;\n }\n\n /** Credentials, present only when the inbox was created with `returnCredentials: true`. */\n get credentials(): InboxCredentials | undefined {\n return this.record?.credentials;\n }\n\n /** Re-fetch the live inbox record. */\n refresh(signal?: AbortSignal): Promise<Inbox> {\n return this.transport.getInbox(this.ref, signal);\n }\n\n /**\n * Update this inbox's settings in place without delete+recreate: rename the sender\n * `display_name`, change the `webhook_url`, patch arbitrary `metadata` (shallow\n * merge; a key set to `null` deletes it, top-level `metadata: null` clears all),\n * or set `daily_send_limit` to 1–10,000 recipients per rolling 24h. The limit\n * field requires the opt-in `mailbox:quota` scope.\n * Returns the updated inbox record.\n */\n update(req: UpdateInboxRequest, signal?: AbortSignal): Promise<Inbox> {\n return this.transport.updateInbox(this.ref, req, signal);\n }\n\n /**\n * Send an email from this authenticated inbox. Starts a new thread.\n *\n * Returns a three-way {@link SendOutcome}: `kind:\"queued_for_review\"` means a\n * human has to approve it and NOTHING has been delivered yet; anything else was\n * delivered. Under the default `require_review` policy a call WITHOUT an\n * `intent` raises `IntentRequiredError` (422) instead: nothing sent, nothing\n * queued: so pass one, or read `inbox.record.effective_review_policy` first.\n */\n send(req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.send(this.ref, req, signal);\n }\n\n /**\n * Reply within an existing thread. Select the parent with `thread_id` (reply to\n * the latest message) or `message_id` (reply to that message); the server\n * derives To / Subject / In-Reply-To / References. Set `reply_all` to reply to\n * every thread recipient. Returns the same three-way {@link SendOutcome} as\n * {@link send}: a reply is governed by the review policy too.\n */\n reply(req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.reply(this.ref, req, signal);\n }\n\n /**\n * Forward a message in this inbox to new recipients, preserving the original.\n *\n * A forward is an outbound message to arbitrary NEW recipients that quotes an\n * inbound thread, so it is governed by the review policy exactly like a send :\n * same {@link SendOutcome} union, same `intent` requirement.\n */\n forward(messageId: string, req: ForwardRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.forward(this.ref, messageId, req, signal);\n }\n\n /**\n * Submit a new message from this inbox for human review (Review Loop, HITL).\n * Pass `intent` (required when the resolved mode is review) and optionally\n * `mode`/`category_id`. The account/inbox review policy decides whether the\n * message is queued for review (`kind:\"queued_for_review\"`) or sent on a\n * policy-permitted direct path (`kind:\"sent\"`). Monitor it via\n * `extrovert.reviews`.\n */\n submitForReview(req: SendRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.submitForReview(this.ref, req, signal);\n }\n\n /**\n * Submit an in-thread reply from this inbox for human review (Review Loop).\n * Same routing/return contract as {@link submitForReview}.\n */\n submitReplyForReview(req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.transport.submitReplyForReview(this.ref, req, signal);\n }\n\n /**\n * List messages in this inbox, newest first. Narrow with exact-field filters\n * (from/to/subject substring) or `unread: true` (native \\Seen); page with\n * limit + offset.\n */\n messages(params: ListMessagesParams = {}, signal?: AbortSignal): Promise<Page<Message>> {\n return this.transport.listMessages(this.ref, params, signal);\n }\n\n /** Full-text search this inbox (IMAP SEARCH over from/subject/body). */\n search(params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Message>> {\n return this.transport.searchMessages(this.ref, params, signal);\n }\n\n /** Download the raw RFC822 `.eml` bytes for a message in this inbox. */\n messageRaw(messageId: string, signal?: AbortSignal): Promise<string> {\n return this.transport.getMessageRaw(this.ref, messageId, signal);\n }\n\n /** Mark a message in this inbox read/unread via the native \\Seen flag. */\n markRead(messageId: string, req: MarkReadRequest, signal?: AbortSignal): Promise<Message> {\n return this.transport.markRead(this.ref, messageId, req, signal);\n }\n\n /**\n * Delete a message in this inbox: move it to Trash (default, recoverable) or\n * permanently remove it when `expunge` is true.\n */\n deleteMessage(messageId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult> {\n return this.transport.deleteMessage(this.ref, messageId, expunge, signal);\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of message ids in this\n * inbox. At least one of `read` / `folder` must be set; returns the per-id\n * `{updated, failed}` split.\n */\n batchUpdateMessages(req: BatchUpdateMessagesRequest, signal?: AbortSignal): Promise<BatchUpdateResult> {\n return this.transport.batchUpdateMessages(this.ref, req, signal);\n }\n\n /** List a message's attachment metadata ({id, filename, content_type, size}). */\n attachments(messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.transport.listAttachments(this.ref, messageId, signal);\n }\n\n /** Download one attachment's bytes (base64) plus filename and content type. */\n attachment(\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.transport.getAttachment(this.ref, messageId, attachmentId, signal);\n }\n\n /** List conversation threads in this inbox, newest-active first. */\n threads(params: ListThreadsParams = {}, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.transport.listThreads(this.ref, params, signal);\n }\n\n /** Thread-level search in this inbox (subject / snippet / participants). */\n searchThreads(params: SearchMessagesParams, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.transport.searchThreads(this.ref, params, signal);\n }\n\n /** Fetch one thread (with its messages) in this inbox by stable id. */\n thread(threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.transport.getThread(this.ref, threadId, signal);\n }\n\n /** Check an accepted submission without sending it again. */\n getSubmission(submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.transport.getSubmission(this.ref, submissionId, signal);\n }\n\n /**\n * Delete an entire thread in this inbox (every message): move to Trash\n * (default) or permanently remove when `expunge` is true.\n */\n deleteThread(threadId: string, expunge?: boolean, signal?: AbortSignal): Promise<DeleteResult> {\n return this.transport.deleteThread(this.ref, threadId, expunge, signal);\n }\n\n /**\n * Poll server-side until a matching message arrives and return it with an extracted\n * OTP / verification link. The HTTP read timeout is set a hair above the server-side\n * `timeoutSeconds` so the request doesn't abort before the server returns its own timeout result.\n */\n waitForEmail(req: WaitForEmailRequest = {}, signal?: AbortSignal): Promise<WaitForEmailResult> {\n const serverTimeoutSeconds = req.timeout_seconds ?? 300;\n // Give the HTTP read a 5s margin over the server's blocking window, and never read for less\n // than the client's configured default timeout.\n const readTimeoutMs = Math.max(\n serverTimeoutSeconds * 1000 + 5000,\n this.options.defaultWaitTimeoutMs,\n );\n return this.transport.waitForEmail(this.ref, req, readTimeoutMs, signal);\n }\n\n /** Register an HMAC-signed inbound webhook scoped to this inbox. */\n registerWebhook(\n req: Omit<RegisterWebhookRequest, \"inbox\">,\n signal?: AbortSignal,\n ): Promise<Webhook> {\n return this.transport.registerWebhook({ ...req, inbox: this.address }, signal);\n }\n\n /**\n * Add an allow/block contact-list entry to this inbox. A `block` entry rejects a\n * send to a matching recipient; once any `allow` entry exists, sends from this\n * inbox are restricted to recipients that match one (allowlist mode).\n */\n addContactListEntry(req: AddContactListRequest, signal?: AbortSignal): Promise<ContactListEntry> {\n return this.transport.addContactListEntry(this.ref, req, signal);\n }\n\n /** List the allow/block contact-list entries governing this inbox. */\n listContactLists(signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.transport.listContactLists(this.ref, signal);\n }\n\n /** Delete a contact-list entry on this inbox by id. */\n deleteContactListEntry(entryId: string, signal?: AbortSignal): Promise<void> {\n return this.transport.deleteContactListEntry(this.ref, entryId, signal);\n }\n\n /**\n * Watch this inbox live (Server-Sent Events). Returns an async iterator of\n * {@link StreamEvent}; each `message.received` event arrives as it lands instead\n * of polling {@link waitForEmail}. Pass `lastEventId` (the `seq` of the last\n * event you saw) to resume without gaps after a reconnect, and a `signal` to\n * close the stream.\n *\n * ```ts\n * for await (const ev of inbox.stream()) {\n * if (ev.event === \"message.received\") console.log(\"new mail:\", ev.message?.subject);\n * }\n * ```\n */\n stream(options: StreamOptions = {}): AsyncGenerator<StreamEvent, void, unknown> {\n return this.transport.stream(this.ref, options.lastEventId, options.signal);\n }\n\n /**\n * Convenience wrapper over {@link stream}: invoke `onEvent` for every event until\n * the stream closes (or `signal` aborts). Returns when the stream ends.\n */\n async subscribe(\n onEvent: (event: StreamEvent) => void | Promise<void>,\n options: StreamOptions = {},\n ): Promise<void> {\n for await (const ev of this.stream(options)) {\n await onEvent(ev);\n }\n }\n\n /**\n * Permanently tear down this inbox and its messages/sender identity. Requires\n * `mailbox:delete`; this operation cannot be undone.\n */\n delete(signal?: AbortSignal): Promise<void> {\n return this.transport.deleteInbox(this.ref, signal);\n }\n}\n","/**\n * The ONE list envelope + opaque-cursor iteration (redesign §5.2 / §6.2).\n *\n * Every redesign collection endpoint (the canonical `x.projects.inboxes.*` chain\n * and beyond) returns {@link List}: `{ object: \"list\", data, has_more, next_cursor }`.\n * `next_cursor` is OPAQUE - treat it as a token and pass it back verbatim as\n * `?cursor` to fetch the next page. {@link ListPage} wraps a raw {@link List} with\n * ergonomic iteration (`for await … of`) and a `nextPage()` cursor walker so callers\n * never thread cursors by hand.\n */\n\n/** The opaque pagination cursor. Pass it back verbatim as `?cursor`; never parse it. */\nexport type Cursor = string;\n\n/** The one collection envelope for every redesign list response. */\nexport interface List<T> {\n /** Always the literal `\"list\"`. */\n object: \"list\";\n /** The rows on this page. */\n data: T[];\n /** True when another page exists (i.e. `next_cursor` is non-null). */\n has_more: boolean;\n /** Opaque cursor for the next page, or `null` on the last page. */\n next_cursor: Cursor | null;\n}\n\n/** Query params shared by every cursor-paginated list. */\nexport interface ListParams {\n /** Page size (server clamps to 1–100; default 50). */\n limit?: number;\n /** Opaque cursor from a prior page's `next_cursor`. */\n cursor?: Cursor;\n}\n\n/** A function that fetches one page given an opaque cursor (or undefined for page 1). */\nexport type PageFetcher<T> = (cursor: Cursor | undefined, signal?: AbortSignal) => Promise<List<T>>;\n\n/**\n * An ergonomic wrapper over a single {@link List} page that also knows how to fetch\n * the next page and auto-iterate across ALL pages.\n *\n * ```ts\n * const page = await x.projects.inboxes.list(\"proj_9k\");\n * for await (const inbox of page) console.log(inbox.id); // walks every page\n * // …or page-at-a-time:\n * if (page.hasMore) { const next = await page.nextPage(); }\n * ```\n */\nexport class ListPage<T> implements AsyncIterable<T> {\n /** Walkers fail visibly after 1,000 pages; they never return truncated success. */\n static readonly maxPages = 1000;\n /** The rows on THIS page. */\n readonly data: T[];\n /** True when another page exists. */\n readonly hasMore: boolean;\n /** Opaque cursor for the next page (null on the last page). */\n readonly nextCursor: Cursor | null;\n /** Always `\"list\"`. */\n readonly object = \"list\" as const;\n\n constructor(\n raw: List<T>,\n private readonly fetcher: PageFetcher<T>,\n private readonly visited: ReadonlySet<Cursor> = new Set(),\n ) {\n if (!raw || raw.object !== \"list\" || !Array.isArray(raw.data) ||\n typeof raw.has_more !== \"boolean\" ||\n !(raw.next_cursor === null || (typeof raw.next_cursor === \"string\" && raw.next_cursor.length > 0)) ||\n raw.has_more !== Boolean(raw.next_cursor)) {\n throw new Error(\"Extrovert: invalid list response; inventory is unavailable, not empty.\");\n }\n if (raw.next_cursor && visited.has(raw.next_cursor)) throw new Error(\"Extrovert: repeated pagination cursor.\");\n this.data = raw.data;\n this.hasMore = raw.has_more;\n this.nextCursor = raw.next_cursor;\n }\n\n /**\n * Fetch the next page. Throws if there is none - guard with {@link hasMore}.\n */\n async nextPage(signal?: AbortSignal): Promise<ListPage<T>> {\n if (!this.hasMore || this.nextCursor === null) {\n throw new Error(\"Extrovert: no more pages (next_cursor is null).\");\n }\n if (this.visited.size + 1 >= ListPage.maxPages) throw new Error(\"Extrovert: pagination exceeded the 1,000-page safety limit; narrow your filters.\");\n const visited = new Set(this.visited);\n visited.add(this.nextCursor);\n const raw = await this.fetcher(this.nextCursor, signal);\n return new ListPage(raw, this.fetcher, visited);\n }\n\n /**\n * Auto-paginate: yield every row across every page, fetching subsequent pages\n * lazily as the iterator is consumed. The default iteration of a `ListPage`.\n */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let page: ListPage<T> = this;\n for (;;) {\n for (const item of page.data) yield item;\n if (!page.hasMore || page.nextCursor === null) return;\n page = await page.nextPage();\n }\n }\n\n /** Collect EVERY row across EVERY page into a single array (eager). */\n async collect(signal?: AbortSignal): Promise<T[]> {\n const out: T[] = [...this.data];\n let page: ListPage<T> = this;\n while (page.hasMore && page.nextCursor !== null) {\n page = await page.nextPage(signal);\n out.push(...page.data);\n }\n return out;\n }\n}\n\n/** Build a {@link ListPage} from the first raw {@link List} and a page fetcher. */\nexport function listPage<T>(raw: List<T>, fetcher: PageFetcher<T>): ListPage<T> {\n return new ListPage(raw, fetcher);\n}\n","/**\n * `extrovert.projects`: the CANONICAL project-scoped resource chain (redesign §4).\n *\n * Scope lives in the KEY; a broad (org-tier) key narrows to one project by PATH.\n * The headline chain is `x.projects.inboxes.*`, mirroring\n * `/v1/projects/{project_id}/inboxes[/{inbox_id}]`:\n *\n * ```ts\n * const inbox = await x.projects.inboxes.create(\"proj_9k\", { username: \"ada\" });\n * const page = await x.projects.inboxes.list(\"proj_9k\"); // List envelope\n * for await (const i of page) console.log(i.id); // auto-paginates\n * await x.projects.inboxes.send(\"proj_9k\", inbox.id, { to, subject, text });\n * ```\n *\n * Operations are keyed by the OPAQUE `inbox_id` (the inbox's email address is also\n * accepted as a within-project alias). `projectId` may be `\"-\"` for the org-wide\n * wildcard: only an org-tier key may use it (others get 403 `forbidden_scope`).\n *\n * The bare `x.inboxes.*` / `x.inbox(address)` surface is curl-style sugar that\n * resolves to the key's default project; this chain is the contract-canonical one.\n */\n\nimport type { Transport, AttachmentDownload } from \"../transport.js\";\nimport { ValidationError } from \"../errors.js\";\nimport { ListPage } from \"../pagination.js\";\nimport type {\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n CreateInboxRequest,\n DeleteResult,\n ForwardRequest,\n GetInboxParams,\n Inbox,\n InboxCredentials,\n ListMessagesParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n Page,\n ProjectInboxListParams,\n ReplyRequest,\n SearchMessagesParams,\n SendOutcome,\n SendRequest,\n Thread,\n ThreadDetail,\n Submission,\n UpdateInboxRequest,\n WaitForEmailRequest,\n WaitForEmailResult,\n} from \"../models.js\";\nimport type { InboxHandleOptions } from \"./inbox-handle.js\";\n\n/** Options forwarded into the chain (per-call wait timeout, resolved from the client). */\ninterface ProjectsContext {\n transport: Transport;\n handleOptions: InboxHandleOptions;\n}\n\n/**\n * `x.projects.inboxes`: create / list / get / update / delete inboxes, plus the\n * send / reply / message / thread / wait operations, all scoped to one project (or\n * the `-` org wildcard for an org-tier key). List returns a {@link ListPage} that\n * auto-paginates over the opaque-cursor {@link import(\"../pagination.js\").List} envelope.\n */\nexport class ProjectInboxes {\n constructor(private readonly ctx: ProjectsContext) {}\n\n /** Create an inbox in `projectId`. `idempotencyKey` (or `req.client_id`) makes it exactly-once. */\n create(\n projectId: string,\n req: CreateInboxRequest = {},\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.createInboxInProject(\n projectId,\n req,\n idempotencyKey ?? req.client_id,\n signal,\n );\n }\n\n /**\n * List inboxes in `projectId` (or the org subtree with `projectId=\"-\"`). Returns a\n * {@link ListPage} that yields the {@link import(\"../pagination.js\").List} envelope's\n * rows and auto-paginates across pages via the opaque cursor.\n */\n async list(\n projectId: string,\n params: ProjectInboxListParams = {},\n signal?: AbortSignal,\n ): Promise<ListPage<Inbox>> {\n const fetcher = (cursor: string | undefined, s?: AbortSignal) =>\n this.ctx.transport.listInboxesInProject(projectId, { ...params, cursor }, s);\n const first = await fetcher(params.cursor, signal);\n return new ListPage(first, fetcher);\n }\n\n /** Get an inbox by opaque `inboxId` (or address alias) in `projectId`. */\n get(\n projectId: string,\n inboxId: string,\n params: GetInboxParams = {},\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.getInboxInProject(projectId, inboxId, params, signal);\n }\n\n /**\n * Update an inbox in place (display name / webhook / metadata / daily send\n * limit). `daily_send_limit` requires the opt-in `mailbox:quota` scope.\n */\n update(\n projectId: string,\n inboxId: string,\n req: UpdateInboxRequest,\n signal?: AbortSignal,\n ): Promise<Inbox> {\n return this.ctx.transport.updateInboxInProject(projectId, inboxId, req, signal);\n }\n\n /**\n * Permanently delete an inbox by opaque id (or address alias). Requires\n * `mailbox:delete`; the inbox and its messages cannot be recovered.\n */\n delete(projectId: string, inboxId: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteInboxInProject(projectId, inboxId, signal);\n }\n\n /** Fetch IMAP/SMTP connection settings + login for an inbox. */\n credentials(projectId: string, inboxId: string, signal?: AbortSignal): Promise<InboxCredentials> {\n return this.ctx.transport.getInboxCredentialsInProject(projectId, inboxId, signal);\n }\n\n /**\n * Send an email from an inbox in `projectId`.\n *\n * Returns a three-way {@link SendOutcome}: `kind:\"queued_for_review\"` means a\n * human has to approve it and NOTHING has been delivered yet; anything else was\n * delivered. Under the default `require_review` policy a call WITHOUT an\n * `intent` raises `IntentRequiredError` (422) instead: nothing sent, nothing\n * queued: so pass one, or read `inbox.record.effective_review_policy` first.\n */\n send(\n projectId: string,\n inboxId: string,\n req: SendRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.send(this.ref(projectId, inboxId), req, signal);\n }\n\n /** Reply within a thread from an inbox in `projectId`. See {@link send} on the return union. */\n reply(\n projectId: string,\n inboxId: string,\n req: ReplyRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.reply(this.ref(projectId, inboxId), req, signal);\n }\n\n /** Forward a message from an inbox in `projectId`. See {@link send} on the return union. */\n forward(\n projectId: string,\n inboxId: string,\n messageId: string,\n req: ForwardRequest,\n signal?: AbortSignal,\n ): Promise<SendOutcome> {\n return this.ctx.transport.forward(this.ref(projectId, inboxId), messageId, req, signal);\n }\n\n /** List messages in an inbox in `projectId`. */\n messages(\n projectId: string,\n inboxId: string,\n params: ListMessagesParams = {},\n signal?: AbortSignal,\n ): Promise<Page<Message>> {\n return this.ctx.transport.listMessages(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Search messages in an inbox in `projectId`. */\n searchMessages(\n projectId: string,\n inboxId: string,\n params: SearchMessagesParams,\n signal?: AbortSignal,\n ): Promise<Page<Message>> {\n return this.ctx.transport.searchMessages(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Mark a message read/unread in an inbox in `projectId`. */\n markRead(\n projectId: string,\n inboxId: string,\n messageId: string,\n req: MarkReadRequest,\n signal?: AbortSignal,\n ): Promise<Message> {\n return this.ctx.transport.markRead(this.ref(projectId, inboxId), messageId, req, signal);\n }\n\n /** Delete a message in an inbox in `projectId`. */\n deleteMessage(\n projectId: string,\n inboxId: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteMessage(this.ref(projectId, inboxId), messageId, expunge, signal);\n }\n\n /** Batch mark/move messages in an inbox in `projectId`. */\n batchUpdateMessages(\n projectId: string,\n inboxId: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.ctx.transport.batchUpdateMessages(this.ref(projectId, inboxId), req, signal);\n }\n\n /** List a message's attachment metadata. */\n attachments(\n projectId: string,\n inboxId: string,\n messageId: string,\n signal?: AbortSignal,\n ): Promise<Page<Attachment>> {\n return this.ctx.transport.listAttachments(this.ref(projectId, inboxId), messageId, signal);\n }\n\n /** Download one attachment's bytes + filename + content type. */\n attachment(\n projectId: string,\n inboxId: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.ctx.transport.getAttachment(this.ref(projectId, inboxId), messageId, attachmentId, signal);\n }\n\n /** List conversation threads in an inbox in `projectId`. */\n threads(\n projectId: string,\n inboxId: string,\n params: ListThreadsParams = {},\n signal?: AbortSignal,\n ): Promise<Page<Thread>> {\n return this.ctx.transport.listThreads(this.ref(projectId, inboxId), params, signal);\n }\n\n /** Fetch one thread (+ its messages) in an inbox in `projectId`. */\n thread(\n projectId: string,\n inboxId: string,\n threadId: string,\n signal?: AbortSignal,\n ): Promise<ThreadDetail> {\n return this.ctx.transport.getThread(this.ref(projectId, inboxId), threadId, signal);\n }\n\n /** Read recipient transport and Sent-copy status for an accepted submission. */\n getSubmission(projectId: string, inboxId: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.ctx.transport.getSubmissionInProject(projectId, inboxId, submissionId, signal);\n }\n\n /**\n * Block until a matching message arrives in an inbox in `projectId` and return it\n * with an extracted OTP / verification link.\n */\n waitForEmail(\n projectId: string,\n inboxId: string,\n req: WaitForEmailRequest = {},\n signal?: AbortSignal,\n ): Promise<WaitForEmailResult> {\n const serverTimeoutSeconds = req.timeout_seconds ?? 300;\n const readTimeoutMs = Math.max(\n serverTimeoutSeconds * 1000 + 5000,\n this.ctx.handleOptions.defaultWaitTimeoutMs,\n );\n return this.ctx.transport.waitForEmail(this.ref(projectId, inboxId), req, readTimeoutMs, signal);\n }\n\n /**\n * The inbox reference the message/send/thread transport methods key on.\n *\n * The frozen contract project-prefixes ONLY the inbox collection/item/credentials\n * routes (`/v1/projects/{project_id}/inboxes[/{inbox_id}][/credentials]`); the\n * send/reply/forward/message/thread/wait sub-ops have NO project-prefixed path :\n * they address the inbox by its opaque id directly (`/v1/inboxes/{inbox_id}/…`),\n * where the project is implicit in (and enforced by) the inbox id server-side.\n *\n * So for these sub-ops `projectId` cannot be carried on the URL and is NOT a URL\n * selector. The adversarial review flagged that silently discarding it makes the\n * signature misleading. CHOICE: keep the arg (dropping it would break the chain's\n * symmetry with create/list/get/update/delete: the more disruptive option) but\n * VALIDATE it rather than ignore it. We reject the two client mistakes we can catch\n * without a round-trip:\n * - a blank / whitespace-only `projectId` (a required selector everywhere else in\n * the chain), and\n * - the org wildcard `-`, which is meaningless for a single-inbox op (there is no\n * breadth to pick).\n * The inbox-id ↔ project binding itself is enforced server-side by the opaque id.\n */\n private ref(projectId: string, inboxId: string): string {\n if (projectId.trim() === \"\") {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"projectId is required for the x.projects.inboxes sub-operations. Pass the concrete \" +\n \"project id (or use the bare x.inboxes / x.inbox(id) surface for the key's default project).\",\n });\n }\n if (projectId === \"-\") {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"The org wildcard \\\"-\\\" is only valid for list/create breadth, not a single-inbox \" +\n \"operation. Pass the concrete project id (or use the bare x.inboxes / x.inbox(id) surface).\",\n });\n }\n return inboxId;\n }\n}\n\n/**\n * `extrovert.projects`: the canonical project-scoped resource namespace. Today it\n * exposes the `inboxes` chain (`x.projects.inboxes.*`); future project-scoped\n * resources (domains, agents) hang off the same namespace.\n */\nexport class Projects {\n /** `x.projects.inboxes.*`: the canonical inbox chain. */\n readonly inboxes: ProjectInboxes;\n\n constructor(ctx: ProjectsContext) {\n this.inboxes = new ProjectInboxes(ctx);\n }\n}\n","import type { ListWebhooksParams, ConnectionResourceSelection } from \"../models.js\";\n/**\n * Resource namespaces: `extrovert.inboxes`, `extrovert.messages`, `extrovert.threads`,\n * `extrovert.webhooks`, `extrovert.contactLists`, `extrovert.domains`. Each is a thin,\n * typed facade over the {@link Transport}.\n */\n\nimport type { AttachmentDownload, Transport } from \"../transport.js\";\nimport { BreadthRequiredError, ValidationError } from \"../errors.js\";\nimport { waitForDomain, type DomainWaitResult } from \"../domain-wait.js\";\nimport { tierNeedsExplicitBreadth, type KeyTier } from \"../key-tier.js\";\nimport { InboxHandle, type InboxHandleOptions } from \"./inbox-handle.js\";\nimport type {\n AckReviewEventRequest,\n AckReviewEventResult,\n AddContactListRequest,\n Attachment,\n BatchUpdateMessagesRequest,\n BatchUpdateResult,\n Category,\n CommerceRequest,\n ContactListEntry,\n CreateInboxRequest,\n DeleteResult,\n Domain,\n DomainStatusEventPage,\n DomainQuote,\n DomainOffboard,\n Inbox,\n ListCategoriesParams,\n ListCommerceRequestsParams,\n ListInboxesParams,\n ListReviewEventsParams,\n ListReviewsParams,\n ListThreadsParams,\n MarkReadRequest,\n Message,\n OnboardDomainRequest,\n QuoteDomainRequest,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ReplyRequest,\n Page,\n ProposeCategoryRequest,\n ProposeGraduationRequest,\n GetRulesParams,\n GetRuleAuditParams,\n GraduationStatus,\n RiskDial,\n Rule,\n RuleSnapshot,\n RuleAuditEntry,\n LearnReviewRuleRequest, LearnedReviewRule,\n SaveRuleRequest,\n PostReviewChatRequest,\n RegisterWebhookRequest,\n RestampReviewRequest,\n CategoryPacingState,\n Review,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n ReviewEventsResult,\n ReviewFeedback,\n ReviewTurn,\n ScanBacklogStatus,\n SearchMessagesParams,\n SendOutcome,\n SubmitRevisionRequest,\n SuppressionEntry,\n SuppressionPrecheck,\n ListSuppressionsParams,\n ThreadDetail,\n Submission,\n Thread,\n UpdateCategoryRequest,\n UpdateInboxRequest,\n UpdateWebhookRequest,\n WaitForReviewEventParams,\n Webhook,\n} from \"../models.js\";\n\nexport { InboxHandle } from \"./inbox-handle.js\";\nexport { Projects, ProjectInboxes } from \"./projects.js\";\n\ninterface ResourceContext {\n transport: Transport;\n handleOptions: InboxHandleOptions;\n /**\n * The CEILING tier derived from the configured key prefix. Advisory client-side\n * hint ONLY (the server stays authoritative); lets the bare sugar surface fail\n * fast for an org-tier key that must pick a breadth, matching the MCP surface.\n */\n keyTier: KeyTier;\n}\n\n/** `extrovert.inboxes`: create, list, get, update, delete inboxes. */\nexport class Inboxes {\n constructor(private readonly ctx: ResourceContext) {}\n\n /**\n * Create an inbox. The default path creates an address on `extrovertmail.com`\n * for paid accounts or `free.extrovertmail.com` for free signups, so it returns\n * a live inbox in one call.\n *\n * Pass `metadata` to attach arbitrary key-value data, and `client_id` for idempotent creation\n * (re-calling with the same id returns the same inbox, with its metadata replayed verbatim).\n */\n async create(req: CreateInboxRequest = {}, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.createInbox(req, req.client_id, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * List inboxes visible to the calling key (the bare curl-sugar surface: resolves\n * to the key's default project). An org-tier key has no single default project, so\n * the bare list is ambiguous: fail fast client-side with a BreadthRequiredError that\n * names the next call, matching the MCP surface, instead of round-tripping to a 400.\n * Use `extrovert.projects.inboxes.list(\"<project_id>\")` or `\"-\"` (org subtree) for\n * an org key. The check is advisory: the server stays authoritative.\n */\n list(params: ListInboxesParams = {}, signal?: AbortSignal): Promise<Page<Inbox>> {\n if (tierNeedsExplicitBreadth(this.ctx.keyTier)) {\n return Promise.reject(\n new BreadthRequiredError({\n status: 400,\n code: \"breadth_required\",\n message:\n \"An org-tier key must pick a list breadth: use extrovert.projects.inboxes.list(\\\"<project_id>\\\") \" +\n \"or extrovert.projects.inboxes.list(\\\"-\\\") (the org subtree).\",\n }),\n );\n }\n return this.ctx.transport.listInboxes(params, signal);\n }\n\n /** Fetch a single inbox and return an ergonomic handle bound to it. */\n async get(address: string, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.getInbox(address, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * Update an inbox's settings in place without delete+recreate: rename the sender\n * `display_name`, change the `webhook_url`, patch arbitrary `metadata` (shallow\n * merge; a key set to `null` deletes it, top-level `metadata: null` clears all),\n * or set the effective `daily_send_limit` (1–10,000 recipients per rolling 24h).\n * Updating the daily limit requires the opt-in `mailbox:quota` scope.\n * Returns a handle bound to the updated record.\n */\n async update(address: string, req: UpdateInboxRequest, signal?: AbortSignal): Promise<InboxHandle> {\n const inbox = await this.ctx.transport.updateInbox(address, req, signal);\n return new InboxHandle(this.ctx.transport, inbox.address, this.ctx.handleOptions, inbox);\n }\n\n /**\n * Permanently delete an inbox by address. Requires `mailbox:delete`; the inbox,\n * messages, and sender identity cannot be recovered.\n */\n delete(address: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteInbox(address, signal);\n }\n}\n\n/**\n * `extrovert.messages`: read a message, fetch its raw bytes, mark it read.\n *\n * Reply and forward are inbox-scoped (the server resolves the parent and derives\n * recipients), so they live on the {@link InboxHandle} (`inbox.reply(...)`,\n * `inbox.forward(...)`), not here.\n */\nexport class Messages {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Fetch a single message by its opaque id; the owning inbox is resolved from the id. */\n get(messageId: string, signal?: AbortSignal): Promise<Message> {\n return this.ctx.transport.getMessage(messageId, signal);\n }\n\n /**\n * Download the raw RFC822 `.eml` bytes for a message. `inbox` is the owning\n * address (needed to open the inbox); the id identifies the message.\n */\n raw(inbox: string, messageId: string, signal?: AbortSignal): Promise<string> {\n return this.ctx.transport.getMessageRaw(inbox, messageId, signal);\n }\n\n /**\n * Mark a message read/unread via the native IMAP \\Seen flag (Extrovert's\n * label-free read state). `inbox` is the owning address.\n */\n markRead(\n inbox: string,\n messageId: string,\n req: MarkReadRequest,\n signal?: AbortSignal,\n ): Promise<Message> {\n return this.ctx.transport.markRead(inbox, messageId, req, signal);\n }\n\n /**\n * Delete a message: move it to Trash (default, recoverable) or permanently\n * remove it when `expunge` is true. `inbox` is the owning address.\n */\n delete(\n inbox: string,\n messageId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteMessage(inbox, messageId, expunge, signal);\n }\n\n /**\n * Batch mark read/unread and/or move folder for a list of message ids in one\n * inbox. At least one of `read` / `folder` must be set; returns the per-id\n * `{updated, failed}` split.\n */\n batchUpdate(\n inbox: string,\n req: BatchUpdateMessagesRequest,\n signal?: AbortSignal,\n ): Promise<BatchUpdateResult> {\n return this.ctx.transport.batchUpdateMessages(inbox, req, signal);\n }\n\n /**\n * List a message's attachment metadata ({id, filename, content_type, size}).\n * `inbox` is the owning address; the message id identifies the message.\n */\n listAttachments(inbox: string, messageId: string, signal?: AbortSignal): Promise<Page<Attachment>> {\n return this.ctx.transport.listAttachments(inbox, messageId, signal);\n }\n\n /**\n * Download one attachment's bytes (base64) plus its filename and content type.\n * The \"easy attachment fetch\": `inbox` is the owning address, `messageId` the\n * message, and `attachmentId` the opaque id from {@link listAttachments}.\n */\n getAttachment(\n inbox: string,\n messageId: string,\n attachmentId: string,\n signal?: AbortSignal,\n ): Promise<AttachmentDownload> {\n return this.ctx.transport.getAttachment(inbox, messageId, attachmentId, signal);\n }\n}\n\n/**\n * `extrovert.threads`: list, search, read, reply to, and delete conversations,\n * scoped to their owning inbox.\n */\nexport class Threads {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** List conversations newest-active first. Pass `next_cursor` back as `cursor` for the next page. */\n list(inbox: string, params: ListThreadsParams = {}, signal?: AbortSignal): Promise<Page<Thread>> {\n return this.ctx.transport.listThreads(inbox, params, signal);\n }\n\n /** Search thread subjects, snippets, and participants. Cursor pagination matches {@link list}. */\n search(\n inbox: string,\n params: SearchMessagesParams,\n signal?: AbortSignal,\n ): Promise<Page<Thread>> {\n return this.ctx.transport.searchThreads(inbox, params, signal);\n }\n\n /** Fetch one thread (+ its messages, oldest-first) by id under its owning inbox address. */\n get(inbox: string, threadId: string, signal?: AbortSignal): Promise<ThreadDetail> {\n return this.ctx.transport.getThread(inbox, threadId, signal);\n }\n\n /** Reply in a thread; recipients and RFC reply headers are derived server-side. */\n reply(inbox: string, req: ReplyRequest, signal?: AbortSignal): Promise<SendOutcome> {\n return this.ctx.transport.reply(inbox, req, signal);\n }\n\n /**\n * Delete an entire thread (every message): move to Trash (default) or\n * permanently remove when `expunge` is true. `inbox` is the owning address.\n */\n delete(\n inbox: string,\n threadId: string,\n expunge?: boolean,\n signal?: AbortSignal,\n ): Promise<DeleteResult> {\n return this.ctx.transport.deleteThread(inbox, threadId, expunge, signal);\n }\n}\n\n/** `extrovert.submissions`: read transport status; never resubmits a message. */\nexport class Submissions {\n constructor(private readonly ctx: ResourceContext) {}\n get(inbox: string, submissionId: string, signal?: AbortSignal): Promise<Submission> {\n return this.ctx.transport.getSubmission(inbox, submissionId, signal);\n }\n}\n\n/** `extrovert.webhooks`: register / list / get / update / delete HMAC-signed inbound webhooks. */\nexport class Webhooks {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Register an HMAC-signed, timestamped webhook. The signing `secret` is returned once. */\n register(req: RegisterWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.ctx.transport.registerWebhook(req, signal);\n }\n\n /** List registered webhooks (the one-time signing `secret` is omitted). */\n list(paramsOrSignal: ListWebhooksParams | AbortSignal = {}, signal?: AbortSignal): Promise<Page<Webhook>> {\n if (\"aborted\" in paramsOrSignal) return this.ctx.transport.listWebhooks(paramsOrSignal);\n return this.ctx.transport.listWebhooks(signal, paramsOrSignal);\n }\n\n /** Fetch one webhook by id (the signing `secret` is omitted). */\n get(webhookId: string, selectionOrSignal: ConnectionResourceSelection | AbortSignal = {}, signal?: AbortSignal): Promise<Webhook> {\n if (\"aborted\" in selectionOrSignal) return this.ctx.transport.getWebhook(webhookId, selectionOrSignal);\n return this.ctx.transport.getWebhook(webhookId, signal, selectionOrSignal);\n }\n\n /**\n * Update a webhook in place: change the delivery `url`, the subscribed\n * `events`, the `inbox` filter (empty string clears it), or `active` to\n * enable/disable delivery. Omitted fields are left unchanged (PATCH\n * semantics). The signing `secret` is immutable and stays redacted.\n */\n update(webhookId: string, req: UpdateWebhookRequest, signal?: AbortSignal): Promise<Webhook> {\n return this.ctx.transport.updateWebhook(webhookId, req, signal);\n }\n\n /** Delete a webhook by id. */\n delete(webhookId: string, selectionOrSignal: ConnectionResourceSelection | AbortSignal = {}, signal?: AbortSignal): Promise<void> {\n if (\"aborted\" in selectionOrSignal) return this.ctx.transport.deleteWebhook(webhookId, selectionOrSignal);\n return this.ctx.transport.deleteWebhook(webhookId, signal, selectionOrSignal);\n }\n}\n\n/**\n * `extrovert.contactLists`: per-inbox allow/block lists of addresses/domains.\n * A `block` entry rejects a send to a matching recipient; once an `allow` entry\n * exists for an inbox, sends from it are restricted to matching recipients\n * (allowlist mode). Entries are addressable by their opaque id (`lst_…`).\n */\nexport class ContactLists {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Add an allow/block entry to an inbox. */\n add(inbox: string, req: AddContactListRequest, signal?: AbortSignal): Promise<ContactListEntry> {\n return this.ctx.transport.addContactListEntry(inbox, req, signal);\n }\n\n /** List the entries governing an inbox (inbox-specific + account-wide). */\n list(inbox: string, signal?: AbortSignal): Promise<Page<ContactListEntry>> {\n return this.ctx.transport.listContactLists(inbox, signal);\n }\n\n /** Delete an entry on an inbox by id. */\n delete(inbox: string, entryId: string, signal?: AbortSignal): Promise<void> {\n return this.ctx.transport.deleteContactListEntry(inbox, entryId, signal);\n }\n}\n\n/**\n * `extrovert.suppressions`: recipient opt-outs (list-unsubscribe). A recipient\n * that has unsubscribed cannot be mailed by this org: a send to them is rejected\n * with `recipient_suppressed` ({@link RecipientSuppressedError}). Use `precheck`\n * before composing to skip a would-be-rejected recipient, `list` to browse the\n * org's opt-outs, and `revoke` (reason required, audit-logged) to re-enable a\n * recipient. All reads/writes are scoped to the caller's OWN org: a\n * platform-global or shared-domain opt-out is never surfaced here.\n */\nexport class Suppressions {\n constructor(private readonly ctx: ResourceContext) {}\n\n /**\n * Pre-check whether the caller's org already suppresses a recipient, BEFORE\n * composing. `suppressed: true` means a send to them would be rejected: skip\n * that recipient. Returns the matching org rows too (never a global/shared row).\n */\n precheck(recipient: string, signal?: AbortSignal): Promise<SuppressionPrecheck> {\n return this.ctx.transport.precheckSuppression(recipient, signal);\n }\n\n /** List the org's suppression rows (active by default; `include_revoked` for all). */\n list(params: ListSuppressionsParams = {}, signal?: AbortSignal): Promise<Page<SuppressionEntry>> {\n return this.ctx.transport.listSuppressions(params, signal);\n }\n\n /**\n * Revoke one org-scope suppression row (re-enable sending to that recipient). A\n * `reason` is REQUIRED (empty/whitespace is a 400) and is audit-logged. A\n * foreign/global/shared id is an indistinguishable 404.\n */\n revoke(id: string, reason: string, signal?: AbortSignal): Promise<SuppressionEntry> {\n return this.ctx.transport.revokeSuppression(id, reason, signal);\n }\n}\n\n/**\n * `extrovert.domains`: read with domain:read or domain:manage; changes require\n * domain:manage. Add delegated inbox domains the customer\n * controls, read status + nameserver records inline, trigger/refresh\n * verification, and offboard. New registrations use `extrovert.commerce`: quote\n * first, create a request, then poll its status. Set `scope: \"project\"` to bind a\n * customer-controlled domain to the key's project; it defaults to `org`.\n */\nexport class Domains {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** List the customer's onboarded domains and their status. */\n list(paramsOrSignal: { page?: string; limit?: number } | AbortSignal = {}, signal?: AbortSignal): Promise<Page<Domain>> {\n if (\"aborted\" in paramsOrSignal) return this.ctx.transport.listDomains(paramsOrSignal);\n return this.ctx.transport.listDomains(signal, paramsOrSignal);\n }\n\n /** Get one domain's detail, verification status, and nameserver records. */\n get(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.getDomain(domain, signal);\n }\n\n /** Wait up to 50 seconds, then return an explicit resumable outcome. No DNS writes. */\n wait(domain: string, options: { timeout_seconds?: number; signal?: AbortSignal } = {}): Promise<DomainWaitResult> {\n return waitForDomain((signal) => this.ctx.transport.getDomain(domain, signal), options);\n }\n\n /** Resume durable updates for this domain using the previous next_cursor as after. */\n events(domain: string, params: { after?: string; limit?: number } = {}, signal?: AbortSignal): Promise<DomainStatusEventPage> {\n return this.ctx.transport.listDomainEvents(domain, params, signal);\n }\n\n /**\n * Add a delegated inbox domain the customer controls. Returns the nameserver\n * records to publish and never spends money.\n */\n onboard(req: OnboardDomainRequest, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.onboardDomain(req, signal);\n }\n\n /** Trigger or refresh verification for a domain; returns its (possibly advanced) status. */\n verify(domain: string, signal?: AbortSignal): Promise<Domain> {\n return this.ctx.transport.verifyDomain(domain, signal);\n }\n\n /**\n * Offboard (remove) a domain from the customer. Async: the API accepts the\n * request (HTTP 202) and tears the domain down as a job. Returns the accepted\n * job's id + poll URL (`status_url`); poll it with `extrovert.getJob(job_id)`\n * until the status is terminal (succeeded/failed/cancelled).\n */\n offboard(domain: string, signal?: AbortSignal): Promise<DomainOffboard> {\n return this.ctx.transport.offboardDomain(domain, signal);\n }\n}\n\n/**\n * `extrovert.commerce`: quote, request, cancel, and poll financial operations. Agents\n * can never approve a request through this resource; approval is a human console\n * action. Every create requires a stable idempotency key.\n */\nexport class Commerce {\n constructor(private readonly ctx: ResourceContext) {}\n\n private requireIdempotencyKey(value: string): void {\n if (value.trim().length < 8) {\n throw new ValidationError({\n status: 400,\n code: \"bad_request\",\n message:\n \"idempotency_key must be a stable value of at least 8 characters; reuse it for retries of the same intent.\",\n });\n }\n }\n\n /** Quote a domain without purchasing, reserving, or approving it. */\n quoteDomain(req: QuoteDomainRequest, signal?: AbortSignal): Promise<DomainQuote> {\n return this.ctx.transport.quoteDomain(req, signal);\n }\n\n /** Create a durable domain-purchase request for human approval. */\n requestDomainPurchase(\n req: RequestDomainPurchaseRequest,\n signal?: AbortSignal,\n ): Promise<CommerceRequest> {\n this.requireIdempotencyKey(req.idempotency_key);\n return this.ctx.transport.requestDomainPurchase(req, signal);\n }\n\n /** Create a durable plan-upgrade or downgrade request for human approval. */\n requestPlanChange(req: RequestPlanChangeRequest, signal?: AbortSignal): Promise<CommerceRequest> {\n this.requireIdempotencyKey(req.idempotency_key);\n return this.ctx.transport.requestPlanChange(req, signal);\n }\n\n /** Poll one request's exact blockers, approval URL, and next-action guidance. */\n get(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.ctx.transport.getCommerceRequest(requestId, signal);\n }\n\n /** Withdraw this agent's request while its durable state still permits cancellation. */\n cancel(requestId: string, signal?: AbortSignal): Promise<CommerceRequest> {\n return this.ctx.transport.cancelCommerceRequest(requestId, signal);\n }\n\n /** List visible commerce requests using the API's opaque page token. */\n list(\n params: ListCommerceRequestsParams = {},\n signal?: AbortSignal,\n ): Promise<Page<CommerceRequest>> {\n return this.ctx.transport.listCommerceRequests(params, signal);\n }\n}\n\n/**\n * `extrovert.reviews`: the Review Loop (HITL) agent-plane reads. A sending agent\n * monitors its submissions in the human-review queue: list/get a review request and\n * read its append-only thread of turns (intent, drafts, human comments/edits/\n * decisions, captured diffs). Submitting FOR review rides `inbox.send` /\n * `inbox.reply` with `mode`/`intent`/`category_id`. Human-authority actions\n * (approve/reject/edit-send) are console-only (D17) and never exposed here.\n */\nexport class Reviews {\n /**\n * `extrovert.reviews.events`: the Review Loop (HITL) realtime plane: drain,\n * long-poll, and ack the durable nudge queue (the AUTHORITATIVE liveness source;\n * SSE/webhook are best-effort fast paths on top of it).\n */\n readonly events: ReviewEvents;\n\n constructor(private readonly ctx: ResourceContext) {\n this.events = new ReviewEvents(ctx);\n }\n\n /** List review requests (customer-scoped). Filter by state / category / inbox. */\n list(params: ListReviewsParams = {}, signal?: AbortSignal): Promise<Page<Review>> {\n return this.ctx.transport.listReviews(params, signal);\n }\n\n /** Get one review request by id (rr_…): current draft + intent + state. */\n get(reviewId: string, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.getReview(reviewId, signal);\n }\n\n /** Get a review's append-only thread turns by id (rr_…). */\n turns(reviewId: string, signal?: AbortSignal): Promise<Page<ReviewTurn>> {\n return this.ctx.transport.getReviewTurns(reviewId, signal);\n }\n\n /**\n * Get the human's assembled feedback (M5): the diff + comments + decision + the\n * rules born from this review. Read it after a rejected/edited nudge to learn what\n * the human wanted. $0 LLM: pure assembly on our side.\n */\n feedback(reviewId: string, signal?: AbortSignal): Promise<ReviewFeedback> {\n return this.ctx.transport.getReviewFeedback(reviewId, signal);\n }\n\n /**\n * Post a chat turn on a review's thread (M5): an agent question to the human\n * reviewer; flips in_review -> chatting on the first turn. Idempotent on the\n * optional `idempotencyKey` (the `Idempotency-Key` header). $0 LLM: you compose it.\n */\n chat(\n reviewId: string,\n req: PostReviewChatRequest,\n idempotencyKey?: string,\n signal?: AbortSignal,\n ): Promise<Review> {\n return this.ctx.transport.postReviewChat(reviewId, req, idempotencyKey, signal);\n }\n\n /**\n * Post a new agent draft under a parent_revision CAS (M5; D17). parent_revision\n * must equal the draft's current revision, else a 409 STALE with NO mutation (the\n * human always wins: re-read, re-apply, retry). On success the draft is re-rendered\n * in place (revision++) and returns to needs_review. $0 LLM: you compose the redraft.\n */\n revise(reviewId: string, req: SubmitRevisionRequest, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.submitRevision(reviewId, req, signal);\n }\n\n /**\n * Withdraw your own pending review (M5) to the terminal cancelled state. Only the\n * composing agent may cancel; a terminal (already sent) review 409s.\n */\n cancel(\n reviewId: string,\n idempotencyKeyOrSignal?: string | AbortSignal,\n signal?: AbortSignal,\n ): Promise<Review> {\n const idempotencyKey = typeof idempotencyKeyOrSignal === \"string\" ? idempotencyKeyOrSignal : undefined;\n const effectiveSignal = typeof idempotencyKeyOrSignal === \"string\" ? signal : idempotencyKeyOrSignal;\n return this.ctx.transport.cancelReview(reviewId, idempotencyKey, effectiveSignal);\n }\n\n /**\n * Re-stamp a draft's rules-version WITHOUT redrafting (M7; D19/§8 $0 escape valve):\n * assert \"I reviewed this against rules vX and no change is needed\", advancing the\n * draft's composed_* versions with no new draft, no revision bump, no nudge. A\n * born-stale draft re-stamped to the current version becomes current-enough and\n * releasable on the next reconciliation sweep: the cheap counterpart to revise().\n * against_version above the category's current rules-version is 400; a terminal draft\n * 409s. $0 LLM: you judged.\n */\n restamp(reviewId: string, req: RestampReviewRequest, signal?: AbortSignal): Promise<Review> {\n return this.ctx.transport.restampReview(reviewId, req, signal);\n }\n\n /**\n * Get the REVIEWER's decision context for a review (M8 Slice B; D5/§9). The reviewer\n * is an AGENT granted review:act, authorized for THIS review ONLY via a matching\n * ACTIVE review-link (per-inbox beats account-wide). The context is the intent +\n * current draft + thread + the two-circuit-breaker budget (hop_count vs max_hops, the\n * hard review_deadline). `force_to_human` is true when a reject would be FORCED to the\n * human regardless of intent (the human is the only terminal authority, D17). A\n * cross-tenant id is 404; a non-reviewer is 403. Read-only, $0 LLM.\n */\n decisionContext(reviewId: string, signal?: AbortSignal): Promise<ReviewDecisionContext> {\n return this.ctx.transport.getReviewDecisionContext(reviewId, signal);\n }\n\n /**\n * Submit a reviewer decision (M8 Slice B; reviewer_decide, D5/§9). approve/edit → the\n * PLATFORM sends with the COMPOSER's credentials (the reviewer NEVER holds\n * mailbox:send on an inbox it doesn't own: the credential boundary); reject → back to\n * the composer (needs_review, hop_count++); escalate → the human queue. revision/\n * version are the CAS (409 STALE on mismatch, NO mutation: the human always wins,\n * D17). The two circuit breakers (hop_count ≥ max_hops, or the hard review_deadline)\n * FORCE a reject to the human regardless of intent: `forced_by_breaker` names it. $0\n * LLM: you judged; we route, send, and enforce the breakers.\n */\n decide(\n reviewId: string,\n req: ReviewerDecisionRequest,\n signal?: AbortSignal,\n ): Promise<ReviewerDecisionResult> {\n return this.ctx.transport.reviewerDecide(reviewId, req, signal);\n }\n}\n\n/**\n * `extrovert.reviews.events`: drain / long-poll / ack the durable review nudge\n * queue (spec §5.9). `list` is a non-blocking, side-effect-free drain of the next\n * un-acked nudges in FIFO seq order (strict per review); `wait` long-polls\n * (~25–55s) for the next one; `ack` advances the per-(agent, review) cursor\n * monotonically (idempotent: re-acking an older seq is a no-op).\n */\nexport class ReviewEvents {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Drain the next un-acked review events (non-blocking). */\n list(params: ListReviewEventsParams = {}, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.ctx.transport.listReviewEvents(params, signal);\n }\n\n /** Long-poll for the next review event (empty on timeout). */\n wait(params: WaitForReviewEventParams = {}, signal?: AbortSignal): Promise<ReviewEventsResult> {\n return this.ctx.transport.waitForReviewEvent(params, signal);\n }\n\n /** Advance the per-review cursor(s) and/or mark broadcast nudges done. */\n ack(req: AckReviewEventRequest, signal?: AbortSignal): Promise<AckReviewEventResult> {\n return this.ctx.transport.ackReviewEvent(req, signal);\n }\n}\n\n/**\n * `extrovert.categories`: the Review Loop category registry (D9/D10). Browse and\n * MATCH an existing category before composing (like a skills registry), or propose\n * a new one. Categories are CUSTOMER-scoped and agent-attributed (the deliberate\n * cross-agent-404 exception); identity is opaque cat_ ids: nothing keys on the\n * name, so renames never break a reference. `match` is a pure lexical filter (NO\n * LLM on our side); the agent does the semantic matching. Merging / deleting a\n * category is a human (console) action, not exposed here (D17).\n */\nexport class Categories {\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Browse the registry. `match` lexically filters name+description (NO LLM). */\n list(params: ListCategoriesParams = {}, signal?: AbortSignal): Promise<Page<Category>> {\n return this.ctx.transport.listCategories(params, signal);\n }\n\n /** Get one category by id (cat_…): name + description + scope + state. */\n get(categoryId: string, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.getCategory(categoryId, signal);\n }\n\n /** Propose a new category; it stands immediately and writes a create audit row. */\n propose(req: ProposeCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.proposeCategory(req, signal);\n }\n\n /** Rename / re-describe a category: metadata only (D10). */\n update(categoryId: string, req: UpdateCategoryRequest, signal?: AbortSignal): Promise<Category> {\n return this.ctx.transport.updateCategory(categoryId, req, signal);\n }\n\n /**\n * Read the effective risk dial (D4/D12): the account default + every category's\n * overrides (each with its resolved effective value; null override = inherit).\n * Read-only: agents read but NEVER flip the dial; setting it is a human (console)\n * action (D16).\n */\n riskDial(signal?: AbortSignal): Promise<RiskDial> {\n return this.ctx.transport.getRiskDial(signal);\n }\n\n /**\n * Read a category's graduation gate status (D16): the gates passed / still needed\n * toward the next rung (approvals N/needed, age, maturity gate, drift vs K,\n * can_graduate). Read-only.\n */\n graduationStatus(categoryId: string, signal?: AbortSignal): Promise<GraduationStatus> {\n return this.ctx.transport.getGraduationStatus(categoryId, signal);\n }\n\n /**\n * Propose graduating a category (D16/D6): RECORDS the request (durable evidence) and\n * returns the current gate status. It does NOT change the category state: flipping\n * the bit is a human (console) action; an agent only proposes.\n */\n proposeGraduation(\n categoryId: string,\n req: ProposeGraduationRequest = {},\n signal?: AbortSignal,\n ): Promise<GraduationStatus> {\n return this.ctx.transport.proposeGraduation(categoryId, req, signal);\n }\n\n /**\n * Read the D19/§8 backlog-reconciliation status: how many of the category's QUEUED\n * drafts are stale vs current-enough against the current rules-version (a pure\n * integer compare, $0 LLM). Read-only: you READ the picture; the human (console\n * scan-backlog) or the graduate/rule-change hooks TRIGGER the actual reconciliation\n * sweep that releases current-enough drafts and nudges stale ones to redraft.\n */\n backlogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus> {\n return this.ctx.transport.getScanBacklogStatus(categoryId, signal);\n }\n\n /**\n * Read the demand-driven pacing state (M7 Slice B/§8): the human review cursor, the\n * effective lookahead window (freshness is guaranteed only for the next few drafts\n * after the cursor), the HARD per-nudge fan-out ceiling (rework_batch_max), the\n * per-agent nudge interval, and each queued draft's classification (behind_cursor |\n * in_window_fresh | in_window_redrafting | ahead). Read-only; the cursor advances\n * from the human's console approve/reject/edit actions.\n */\n pacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState> {\n return this.ctx.transport.getCategoryPacingState(categoryId, signal);\n }\n}\n\n/**\n * `extrovert.rules`: the Review Loop writing-rule store + house-style + the §7\n * precedence ladder + audit/undo (D2/D11). ANY agent in the customer may write,\n * edit, promote, retire, and undo rules (the deliberate cross-agent exception: the\n * shared house-style is the whole pitch). `get()` returns the ORDERED active rule\n * set with the precedence ladder applied SERVER-SIDE (NO LLM on our side); the agent\n * reconciles the list semantically. Rules are append-only by supersession; undo\n * restores the prior version as a forward 'restore' supersession. Identity is opaque\n * rule_/rln_/udo_ ids: nothing keys on a name.\n */\nexport class Rules {\n /** Learn category or organization house rules from verified human review feedback. */\n learnFromReview(reviewId: string, req: LearnReviewRuleRequest, signal?: AbortSignal): Promise<LearnedReviewRule> {\n return this.ctx.transport.learnReviewRule(reviewId, req, signal);\n }\n\n constructor(private readonly ctx: ResourceContext) {}\n\n /** Get the ORDERED active rule set (precedence ladder applied; NO LLM). */\n get(params: GetRulesParams = {}, signal?: AbortSignal): Promise<RuleSnapshot> {\n return this.ctx.transport.getRules(params, signal);\n }\n\n /**\n * Save / edit a rule (append-only by supersession; D11). An agent-plane save is\n * ALWAYS project-layer: the saved rule's `rule_layer` is `project`, bound to the\n * key's project. For all authenticated reviewer feedback use learnFromReview at the intended\n * organization, project, or category scope. This method is project maintenance only.\n */\n save(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.saveRule(req, signal);\n }\n\n /** Promote a rule between the category and general/house-style layers. */\n promote(ruleId: string, toScope: \"general\" | \"category\", signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.promoteRule(ruleId, toScope, signal);\n }\n\n /** Retire a rule: soft delete; the history survives as training data. */\n retire(ruleId: string, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.retireRule(ruleId, signal);\n }\n\n /** Read the rule/category change audit log (the safety net, D11). */\n audit(params: GetRuleAuditParams = {}, signal?: AbortSignal): Promise<Page<RuleAuditEntry>> {\n return this.ctx.transport.getRuleAudit(params, signal);\n }\n\n /** Undo a rule change by its audit-row id (udo_…): restore the prior version. */\n undo(udoId: string, signal?: AbortSignal): Promise<Rule> {\n return this.ctx.transport.undoRuleChange(udoId, signal);\n }\n}\n","import { Administration } from \"./administration.js\";\n/**\n * ExtrovertClient - the entry point.\n *\n * ```ts\n * import { Extrovert } from \"@extrovert.dev/sdk\";\n * const extrovert = new Extrovert({ apiKey: process.env.EXTROVERT_API_KEY! });\n * const inbox = await extrovert.inboxes.create(); // a real inbox, in one call\n * const outcome = await inbox.send({\n * to: \"ops@acme.test\",\n * subject: \"hi\",\n * text: \"from an agent\",\n * intent: { summary: \"send the requested status update\" },\n * });\n * if (outcome.kind === \"queued_for_review\") console.log(outcome.review.id);\n * ```\n */\n\nimport { HttpClient, type HttpClientConfig, type RetryOptions } from \"./http.js\";\nimport { HttpTransport, MockTransport, type Transport } from \"./transport.js\";\nimport { MockBackend } from \"./fixtures.js\";\nimport { Inboxes, Messages, Threads, Submissions, Webhooks, ContactLists, Suppressions, Domains, Commerce, Reviews, Categories, Rules, Projects, InboxHandle } from \"./resources/index.js\";\nimport type { InboxHandleOptions } from \"./resources/inbox-handle.js\";\nimport { CURRENT_API_VERSION } from \"./version.js\";\nimport { parseKeyTier, type KeyTier } from \"./key-tier.js\";\nimport type {\n CreateInboxRequest,\n EnrollRequest,\n EnrollResponse,\n Job,\n SignUpRequest,\n SignUpResponse,\n StreamEvent,\n StreamOptions,\n VerifyRequest,\n VerifyResponse,\n WhoAmI,\n} from \"./models.js\";\n\n/** Default production API base URL. Overridable via `baseUrl` or `EXTROVERT_API_BASE_URL`. */\nexport const DEFAULT_BASE_URL = \"https://api.extrovert.dev\";\n\n/** The sentinel that routes the client to the offline mock instead of the network. */\nexport const MOCK_BASE_URL = \"mock\";\n\nexport interface ExtrovertClientOptions {\n /**\n * Scoped agent key (`pk_agent_...`), API-audience connection token (`ev_access_...`),\n * or independently issued connection credential (`ev_credential_...`).\n * Falls back to `EXTROVERT_API_KEY` when omitted.\n */\n apiKey?: string;\n /**\n * API base URL. Falls back to `EXTROVERT_API_BASE_URL`, then {@link DEFAULT_BASE_URL}. Set to\n * `\"mock\"` (or `transport: \"mock\"`) to run fully offline against the built-in fixtures.\n */\n baseUrl?: string;\n /** Force a transport. `\"mock\"` ignores `baseUrl` and never touches the network. */\n transport?: \"http\" | \"mock\";\n /** Default request timeout in ms. Default 30000. (wait_for_email manages its own, longer timeout.) */\n timeoutMs?: number;\n /** Retry policy for idempotent requests on 429/5xx/network errors. */\n retry?: Partial<RetryOptions>;\n /** Custom fetch implementation (tests, proxies, instrumentation). Defaults to global `fetch`. */\n fetch?: typeof fetch;\n /** Extra headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Dated API version to pin (sent as the `Extrovert-Version` header on every\n * request; redesign §5.4). Defaults to {@link CURRENT_API_VERSION}. Pin an older\n * dated version to opt into the server's transform shim for that version.\n */\n apiVersion?: string;\n /** Inject a pre-built mock backend (shares state across clients in tests). */\n mockBackend?: MockBackend;\n}\n\nfunction readEnv(name: string): string | undefined {\n // Guarded so the SDK works in edge runtimes where `process` is undefined.\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n ?.env;\n return env?.[name];\n}\n\nconst DEFAULT_RETRY: RetryOptions = { maxRetries: 2, baseDelayMs: 250, maxDelayMs: 8000 };\n\nexport class ExtrovertClient {\n /** Customer administration; requires explicit full account control. */\n readonly administration: Administration;\n /** `extrovert.inboxes` - create / list / get / update / delete inboxes. */\n readonly inboxes: Inboxes;\n /** `extrovert.messages` - read a message, reply to it (threaded). */\n readonly messages: Messages;\n /** `extrovert.threads` - fetch a conversation thread. */\n readonly threads: Threads;\n readonly submissions: Submissions;\n /** `extrovert.webhooks` - register HMAC-signed inbound webhooks. */\n readonly webhooks: Webhooks;\n /** `extrovert.contactLists` - per-inbox allow/block lists of addresses/domains. */\n readonly contactLists: ContactLists;\n /** `extrovert.suppressions` - recipient opt-outs (list-unsubscribe); precheck/list/revoke. */\n readonly suppressions: Suppressions;\n /** `extrovert.domains` - domain readiness and setup (domain:read or domain:manage to read; domain:manage to change). */\n readonly domains: Domains;\n /** `extrovert.commerce` - quote/request/cancel/poll financial actions; no agent approval methods. */\n readonly commerce: Commerce;\n /** `extrovert.reviews` - the Review Loop (HITL) agent-plane reads. */\n readonly reviews: Reviews;\n /** `extrovert.categories` - the Review Loop category registry (browse/propose/curate). */\n readonly categories: Categories;\n /** `extrovert.rules` - the Review Loop writing-rule store + house-style + audit/undo. */\n readonly rules: Rules;\n /**\n * `extrovert.projects` - the CANONICAL project-scoped chain. The headline is\n * `extrovert.projects.inboxes.*` (create/list/get/update/delete/send/...), keyed by\n * the opaque `inbox_id` and scoped to a `{project_id}` path (or `-` for the org\n * wildcard on an org-tier key). The bare `extrovert.inboxes` surface is curl sugar\n * that resolves to the key's default project.\n */\n readonly projects: Projects;\n\n /** The resolved API base URL (or `\"mock\"`). */\n readonly baseUrl: string;\n /**\n * The dated API version pinned on every request (`Extrovert-Version`). Defaults to\n * {@link CURRENT_API_VERSION}.\n */\n readonly apiVersion: string;\n /**\n * The CEILING tier derived from the configured agent key prefix (`org` | `project`\n * | `inbox` | `unknown`). Advisory client-side hint only - the server is the source\n * of truth. Lets an app branch (e.g. require a project pick for an org-tier key).\n */\n readonly keyTier: KeyTier;\n\n private readonly transport: Transport;\n private readonly handleOptions: InboxHandleOptions;\n\n constructor(options: ExtrovertClientOptions = {}) {\n const apiKey = options.apiKey ?? readEnv(\"EXTROVERT_API_KEY\") ?? \"\";\n const resolvedBaseUrl =\n options.baseUrl ?? readEnv(\"EXTROVERT_API_BASE_URL\") ?? DEFAULT_BASE_URL;\n const useMock =\n options.transport === \"mock\" || resolvedBaseUrl === MOCK_BASE_URL;\n\n this.baseUrl = useMock ? MOCK_BASE_URL : resolvedBaseUrl;\n this.apiVersion = options.apiVersion ?? CURRENT_API_VERSION;\n this.keyTier = parseKeyTier(apiKey);\n const timeoutMs = options.timeoutMs ?? 30_000;\n this.handleOptions = { defaultWaitTimeoutMs: timeoutMs };\n\n if (useMock) {\n this.transport = new MockTransport(options.mockBackend);\n (this.transport as MockTransport).backend.configureAdministrativeFixture(apiKey);\n } else {\n if (!apiKey) {\n throw new Error(\n \"Extrovert: no apiKey provided. Pass { apiKey } or set EXTROVERT_API_KEY (or use transport: \\\"mock\\\").\",\n );\n }\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new Error(\n \"Extrovert: global fetch is unavailable. Use Node 18+, an edge runtime, or pass a custom { fetch }.\",\n );\n }\n const config: HttpClientConfig = {\n baseUrl: resolvedBaseUrl,\n apiKey,\n timeoutMs,\n retry: { ...DEFAULT_RETRY, ...options.retry },\n fetch: fetchImpl,\n defaultHeaders: options.defaultHeaders ?? {},\n apiVersion: this.apiVersion,\n };\n this.transport = new HttpTransport(new HttpClient(config));\n }\n\n this.administration = new Administration((request) => this.transport.administrativeRequest(request));\n const ctx = { transport: this.transport, handleOptions: this.handleOptions, keyTier: this.keyTier };\n this.inboxes = new Inboxes(ctx);\n this.messages = new Messages(ctx);\n this.threads = new Threads(ctx);\n this.submissions = new Submissions(ctx);\n this.webhooks = new Webhooks(ctx);\n this.contactLists = new ContactLists(ctx);\n this.suppressions = new Suppressions(ctx);\n this.domains = new Domains(ctx);\n this.commerce = new Commerce(ctx);\n this.reviews = new Reviews(ctx);\n this.categories = new Categories(ctx);\n this.rules = new Rules(ctx);\n this.projects = new Projects(ctx);\n }\n\n /**\n * Redeem an enrollment token (`pk_enroll_...`) and issue a scoped agent key.\n *\n * Idempotent on `agent_handle`: redeeming twice with the same handle returns the same agent.\n * Returns the raw `EnrollResponse` - to immediately use the issued key, prefer\n * {@link ExtrovertClient.enrolled}.\n */\n enroll(req: EnrollRequest, signal?: AbortSignal): Promise<EnrollResponse> {\n return this.transport.enroll(req, signal);\n }\n\n /**\n * Request a free account in one unauthenticated call. When free signup is\n * enabled, this provisions a tenant plus a first inbox and returns a\n * verification-only agent key. That key can only call {@link verify}; it cannot\n * read or send mail. A one-time code is emailed to `human_email`. Call\n * {@link verify} with the code to activate the account and receive full scopes.\n * Idempotent on `human_email`: re-calling rotates the key and resends the code.\n * When free signup is paused, this throws an `ApiError` with status 403 and\n * code `signup_disabled` without creating account state.\n */\n signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse> {\n return this.transport.signUp(req, signal);\n }\n\n /**\n * Confirm the emailed signup code and receive a NEW full-scope agent key (shown\n * once). Must be called with the limited key from {@link signUp} as the bearer.\n * The result repeats the ready inbox address and includes MCP-first list/read/wait\n * calls; SDK callers can pass `address` directly to `inboxes` and `messages`.\n * Pending verification is also fail-closed with 403 `signup_disabled` while\n * free signup is paused.\n */\n verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse> {\n return this.transport.verify(req, signal);\n }\n\n /** Introspect the principal behind the current key (`GET /v1/auth/me`). */\n whoami(signal?: AbortSignal): Promise<WhoAmI> {\n return this.transport.whoami(signal);\n }\n\n /**\n * Poll the status of an async job (`GET /v1/jobs/{job_id}`) - currently only\n * the domain-offboard teardown started by {@link Domains.offboard} enqueues\n * one. `status` is terminal on succeeded/failed/cancelled; keep polling\n * otherwise. An unknown or foreign job id is a {@link NotFoundError}.\n */\n getJob(jobId: string, signal?: AbortSignal): Promise<Job> {\n return this.transport.getJob(jobId, signal);\n }\n\n /**\n * Redeem an enrollment token and return a *new* client already authenticated with the issued\n * agent key - the natural \"redeem then act\" flow for an agent.\n *\n * ```ts\n * const bootstrap = new Extrovert({ apiKey: enrollmentToken });\n * const { client, enrollment } = await bootstrap.enrolled({\n * token: enrollmentToken,\n * agent_handle: \"support-bot\",\n * });\n * const inbox = await client.inboxes.create();\n * ```\n */\n async enrolled(\n req: EnrollRequest,\n options?: Pick<ExtrovertClientOptions, \"timeoutMs\" | \"retry\" | \"fetch\" | \"defaultHeaders\">,\n signal?: AbortSignal,\n ): Promise<{ client: ExtrovertClient; enrollment: EnrollResponse }> {\n const enrollment = await this.enroll(req, signal);\n const client = new ExtrovertClient({\n apiKey: enrollment.agent_key,\n ...(this.baseUrl === MOCK_BASE_URL\n ? { transport: \"mock\", mockBackend: (this.transport as MockTransport).backend }\n : { baseUrl: this.baseUrl }),\n ...options,\n });\n return { client, enrollment };\n }\n\n /**\n * Get an ergonomic handle to an existing inbox by address - without an extra round-trip. Use this\n * when you already know the address (e.g. from a previous create) and want to send/wait/reply.\n * Call {@link InboxHandle.refresh} to load the full record.\n */\n inbox(address: string): InboxHandle {\n return new InboxHandle(this.transport, address, this.handleOptions);\n }\n\n /**\n * The headline shortcut: provision a real inbox in one call and get a handle bound to it.\n * Equivalent to `extrovert.inboxes.create(req)`, named to match the docs/marketing promise.\n */\n createInbox(req: CreateInboxRequest = {}, signal?: AbortSignal): Promise<InboxHandle> {\n return this.inboxes.create(req, signal);\n }\n\n /**\n * Watch events across EVERY inbox the agent owns (Server-Sent Events, `GET\n * /v1/events`). Returns an async iterator of {@link StreamEvent}; pass\n * `lastEventId` (the `seq` of the last event you saw) to resume after a reconnect\n * and a `signal` to close the stream. To watch a single inbox, use\n * {@link InboxHandle.stream} instead.\n *\n * ```ts\n * for await (const ev of extrovert.stream()) {\n * if (ev.event === \"message.received\") console.log(ev.inbox, ev.message?.subject);\n * }\n * ```\n */\n stream(options: StreamOptions = {}): AsyncGenerator<StreamEvent, void, unknown> {\n return this.transport.stream(null, options.lastEventId, options.signal);\n }\n\n /**\n * Convenience wrapper over {@link stream}: invoke `onEvent` for every event\n * across all owned inboxes until the stream closes (or `signal` aborts).\n */\n async subscribe(\n onEvent: (event: StreamEvent) => void | Promise<void>,\n options: StreamOptions = {},\n ): Promise<void> {\n for await (const ev of this.stream(options)) {\n await onEvent(ev);\n }\n }\n}\n","/**\n * Narrowing helpers for {@link SendOutcome} - the three shapes a send can answer.\n *\n * `inbox.send()` used to be typed as one struct with a REQUIRED `thread_id`, which\n * the direct-send response has never carried. The type checked; the value was\n * `undefined`. Now the return type is an honest union, and these helpers exist so\n * that reading it does not turn into a `\"kind\" in res` puzzle at every call site.\n *\n * The one rule worth internalizing: a `queued_for_review` outcome means **nothing\n * has been delivered**. A human has to approve it first, and the delivery outcome\n * arrives later as a `sent` / `send_failed` review event. Code that treats every\n * 2xx from `send()` as \"the mail went out\" is wrong under the default\n * `require_review` policy - which is every account that has not changed it.\n */\n\nimport type {\n QueuedForReviewResult,\n SendOutcome,\n SendResult,\n SentResult,\n} from \"./models.js\";\n\n/**\n * True when the message was PARKED for a human and nothing has been delivered.\n * Narrow with this before reading `res.review.id`, then monitor the review via\n * `extrovert.reviewEvents.wait({ review_id })`.\n */\nexport function isQueuedForReview(res: SendOutcome): res is QueuedForReviewResult {\n return res.kind === \"queued_for_review\";\n}\n\n/**\n * True when the message was delivered immediately - either the review-loop\n * `{kind:\"sent\"}` body or the legacy body a bare send gets under `allow_direct`.\n */\nexport function isSentImmediately(res: SendOutcome): res is SendResult | SentResult {\n return !isQueuedForReview(res);\n}\n\n/**\n * A saved message selector, or `undefined` while queued for review / without a Sent copy.\n *\n * `undefined` here is NOT an error - it is the normal answer under\n * `require_review`. Pair it with {@link reviewIdOf} to follow the message to its\n * outcome.\n */\nexport function sentMessageIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return undefined;\n const candidate = res.sent_message_id !== undefined ? res.sent_message_id : res.kind === \"sent\" ? res.message.id : res.message_id;\n return candidate?.startsWith(\"msg_\") ? candidate : undefined;\n}\n\n/**\n * The thread id when one is known.\n *\n * Absent on a direct `send` (the server assigns the thread at delivery and the\n * legacy body does not echo it) and on a queued outcome (there is no message\n * yet). Reply and forward do return it.\n */\nexport function threadIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return undefined;\n return res.kind === \"sent\" ? res.message.thread_id : res.thread_id;\n}\n\n/**\n * The opaque review id (rr_…) that governed this send, on EVERY branch.\n *\n * This is the crash-recovery handle: an agent that issued a send and then died\n * can call `reviews.get(id)` and read `closed` / `send_error` / `sent_message_id`\n * rather than guessing whether the message went out. It is `undefined` only\n * against a server old enough to predate the field.\n */\nexport function reviewIdOf(res: SendOutcome): string | undefined {\n if (isQueuedForReview(res)) return res.review.id;\n return res.kind === \"sent\" ? res.review?.id : res.review_id;\n}\n","/**\n * Inbound webhook verification.\n *\n * Extrovert signs every inbound delivery with an HMAC-SHA256 over `${timestamp}.${rawBody}` and sends\n * `X-Extrovert-Signature: t=<unix>,v1=<hex>` (§6, §14). Verify with the per-webhook `secret` returned\n * once at registration. Uses Web Crypto (`crypto.subtle`), so it works in Node 18+, Cloudflare\n * Workers, Vercel Edge, Deno, and the browser without any dependency.\n */\n\nimport type { Message, WebhookEvent } from \"./models.js\";\n\n/** The decoded body of a `message.received` (and similar) webhook delivery. */\nexport interface WebhookPayload {\n event: WebhookEvent;\n /** Delivery id, unique per attempt. */\n id: string;\n created_at: string;\n /** The message that triggered the event (present for message.* events). */\n message?: Message;\n /** The inbox address the event concerns. */\n inbox?: string;\n}\n\nexport interface VerifyWebhookOptions {\n /** Raw request body, exactly as received (do not re-serialize JSON before verifying). */\n payload: string;\n /** The `X-Extrovert-Signature` header value. */\n signature: string;\n /** The webhook signing secret (`whsec_...`). */\n secret: string;\n /** Reject deliveries whose timestamp is older than this many seconds. Default 300 (5 min). */\n toleranceSeconds?: number;\n /** Override the clock (unix seconds) for deterministic testing. */\n nowSeconds?: number;\n}\n\nfunction parseSignatureHeader(header: string): { t: number; v1: string[] } {\n let t = 0;\n const v1: string[] = [];\n for (const part of header.split(\",\")) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const key = part.slice(0, eq).trim();\n const value = part.slice(eq + 1).trim();\n if (key === \"t\") t = Number(value);\n else if (key === \"v1\") v1.push(value);\n }\n return { t, v1 };\n}\n\nfunction toHex(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let out = \"\";\n for (const b of bytes) out += b.toString(16).padStart(2, \"0\");\n return out;\n}\n\n/** Constant-time string compare to avoid leaking the signature via timing. */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n}\n\nasync function hmacSha256Hex(secret: string, message: string): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error(\n \"Web Crypto (crypto.subtle) is unavailable in this runtime; cannot verify webhook signatures.\",\n );\n }\n const enc = new TextEncoder();\n const key = await subtle.importKey(\n \"raw\",\n enc.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const sig = await subtle.sign(\"HMAC\", key, enc.encode(message));\n return toHex(sig);\n}\n\n/**\n * Verify an inbound webhook signature. Returns true when the signature is valid and within the\n * timestamp tolerance. Throws only if the runtime lacks Web Crypto.\n *\n * @example\n * ```ts\n * const ok = await verifyWebhookSignature({\n * payload: rawBody,\n * signature: req.headers[\"x-extrovert-signature\"],\n * secret: process.env.EXTROVERT_WEBHOOK_SECRET!,\n * });\n * if (!ok) return new Response(\"bad signature\", { status: 400 });\n * ```\n */\nexport async function verifyWebhookSignature(options: VerifyWebhookOptions): Promise<boolean> {\n const { payload, signature, secret } = options;\n const tolerance = options.toleranceSeconds ?? 300;\n const now = options.nowSeconds ?? Math.floor(Date.now() / 1000);\n\n const { t, v1 } = parseSignatureHeader(signature);\n if (!t || v1.length === 0) return false;\n if (Math.abs(now - t) > tolerance) return false;\n\n const expected = await hmacSha256Hex(secret, `${t}.${payload}`);\n return v1.some((candidate) => timingSafeEqual(candidate, expected));\n}\n\n/**\n * Verify a webhook and parse its JSON body in one step. Returns the typed payload on success, or\n * null when the signature is invalid (so callers can branch without a try/catch on the common path).\n */\nexport async function parseWebhook(options: VerifyWebhookOptions): Promise<WebhookPayload | null> {\n const ok = await verifyWebhookSignature(options);\n if (!ok) return null;\n return JSON.parse(options.payload) as WebhookPayload;\n}\n\n/**\n * Produce the canonical `X-Extrovert-Signature` header value for a body - the exact format the Go\n * delivery engine emits: `t=<unix>,v1=<hex hmac-sha256(\"<t>.<rawbody>\")>`. Mainly useful for tests\n * and self-hosted senders; the platform signs deliveries server-side. The Go `SignWebhook` and this\n * helper are pinned to the same fixed conformance vector across languages.\n */\nexport async function signWebhook(\n secret: string,\n body: string,\n timestampSeconds: number,\n): Promise<string> {\n const t = Math.floor(timestampSeconds);\n const v1 = await hmacSha256Hex(secret, `${t}.${body}`);\n return `t=${t},v1=${v1}`;\n}\n","/**\n * The Extrovert Review-Loop **open contract** (HITL D14, spec §11).\n *\n * This module is the single, documented, *versioned* publication of the stable\n * agent-facing JSON shapes that the Review Loop exposes - the shapes agents and\n * third-party harnesses code against. It does **not** redesign any types: it\n * re-exports the canonical models built across M1–M8 (see `./models`) under one\n * named contract surface, stamps a {@link CONTRACT_VERSION}, and publishes a\n * machine-readable {@link CONTRACT_MANIFEST} so a harness can pin the exact set of\n * shapes + the version it built against.\n *\n * ## This is a contract, NOT a protocol (D14)\n *\n * Per resolved decision **D14**, the open surface is published **now** as an open,\n * documented **skill + SDK contract** - explicitly **not** a wire protocol and\n * **not** a standalone `/v1/contract` endpoint. The contract is exactly: these SDK\n * types + the agent skills (`extrovert-send-email`, `extrovert-writing-rules`) + the\n * docs, **versioned with the SDK** (this package). Formal protocol\n * standardization is deferred (spec §12).\n *\n * ## Provisional, pre-1.0 (0.x)\n *\n * {@link CONTRACT_VERSION} is **`0.1.0-pre.11`** - a deliberately **provisional**, pre-1.0\n * contract. It is open and documented, but it MAY still evolve before 1.0: there\n * are no external users yet, and the **D20 shared-pool auto-send governor** is a\n * hard prerequisite before onboarding external users. Pin the version; expect\n * additive 0.x changes. See {@link CONTRACT_MANIFEST}.`stability`.\n *\n * ## Identity (D10)\n *\n * Every shape keys on **opaque, typed ids** (`rr_`, `turn_`, `cat_`, `rule_`,\n * `rln_`, `ndg_`, …) and never on names. Names/descriptions are mutable display\n * metadata; renaming never breaks a reference. $0-LLM on our side - the contract\n * is pure deterministic JSON; all judgment lives in the agent skills.\n *\n * The canonical example payloads for the §11 core shapes (Intent, ReviewFeedback,\n * DiffJson, Rule, Nudge) are the conformance golden fixtures - see\n * `golang/internal/extrovertapi/testdata/contract/` and the SDK\n * `contract.test.ts` (both assert these examples parse/validate without loss).\n *\n * @packageDocumentation\n */\n\n// ---------------------------------------------------------------------------\n// §11 CORE - the canonical shapes, named verbatim from the spec.\n//\n// Four of the five §11 core shapes already exist as M1–M8 model types; we\n// re-export them here under their canonical names (NOT redefinitions), so the\n// existing tests + the openapi component schemas stay the single source of truth.\n// ---------------------------------------------------------------------------\n\n/** §11 \"Intent (submit time)\". The agent's for-the-reviewer summary (D3). */\nexport type { ReviewIntent } from \"./models.js\";\n/** §11 \"Feedback\". Returned by `get_review_feedback`. */\nexport type { ReviewFeedback, ReviewFeedbackComment } from \"./models.js\";\n/** §11 \"Rule (`get_rules` element)\". A learned writing preference. */\nexport type { Rule } from \"./models.js\";\n/** §11 \"Nudge (`list_review_events` element)\". A durable liveness nudge. */\nexport type { ReviewEvent } from \"./models.js\";\n\n/**\n * One structured hunk of a `diff_json` (spec §11 \"Diff (`diff_json`)\"). A single\n * deterministic field change computed server-side in Go ($0 LLM). `op` is the\n * change verb; `before`/`after` carry the literal text.\n */\nexport interface DiffHunk {\n /** The Review field this hunk changed (e.g. `subject`, `body_text`). */\n field: string;\n /** The change verb (e.g. `replace`, `insert`, `delete`). */\n op: string;\n /** The text before the change. */\n before?: string;\n /** The text after the change. */\n after?: string;\n}\n\n/**\n * §11 \"Diff (`diff_json`)\". The structured proposed-vs-sent diff, computed\n * deterministically in Go ($0 LLM). `fields_changed` names the changed Review\n * fields; `hunks` carry the per-field before/after.\n *\n * This is the named publication of the `diff_json` object that already appears\n * (as `diff_json`) on `ReviewFeedback` and `ReviewTurn`; those fields keep their\n * permissive `Record<string, unknown>` wire type for back-compat, and a harness\n * MAY narrow them to this shape.\n */\nexport interface DiffJson {\n /** The Review fields that changed (e.g. `[\"subject\",\"body_text\"]`). */\n fields_changed: string[];\n /** Per-field structured before/after hunks. */\n hunks: DiffHunk[];\n}\n\n// ---------------------------------------------------------------------------\n// FULL SURFACE - the rest of the published M1–M8 contract, re-exported as ONE\n// provisional-0.x contract (no tiering; D14 \"the full built surface\").\n// ---------------------------------------------------------------------------\n\nexport type {\n // submit / states / intent (M1/M2)\n ReviewMode,\n ReviewState,\n Review,\n ReviewTurn,\n SubmitForReviewResult,\n QueuedForReviewResult,\n SentResult,\n // realtime / nudge queue (M3)\n ReviewEventReason,\n ReviewEventsResult,\n ReviewEventCursor,\n // chat / revision / restamp (M5, M7)\n PostReviewChatRequest,\n SubmitRevisionRequest,\n RestampReviewRequest,\n // category registry (M4)\n Category,\n ProposeCategoryRequest,\n UpdateCategoryRequest,\n // graduation + risk dial (M6)\n AccountRiskDial,\n EffectiveRiskDial,\n CategoryRiskDial,\n RiskDial,\n GraduationStatus,\n ProposeGraduationRequest,\n // reconciliation + pacing (M7)\n ScanBacklogStatus,\n CategoryPacingState,\n PacingItem,\n // rules + audit (M4)\n SaveRuleRequest,\n RuleAuditEntry,\n // BYO reviewer decision (M8)\n ReviewerAction,\n ReviewDecisionContext,\n ReviewerDecisionRequest,\n ReviewerDecisionResult,\n // agent commerce request plane\n CommerceBlocker,\n QuoteDomainRequest,\n DomainQuote,\n CommerceRequestKind,\n RequestDomainPurchaseRequest,\n RequestPlanChangeRequest,\n ListCommerceRequestsParams,\n CommerceRequest,\n} from \"./models.js\";\n\n// ---------------------------------------------------------------------------\n// Contract version + machine-readable manifest.\n// ---------------------------------------------------------------------------\n\n/**\n * The published version of the Extrovert Review-Loop open contract (D14).\n *\n * **`0.1.0-pre.11` - PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's\n * `package.json` version) and aligned to the openapi `info.version`. Open and\n * documented, but MAY still evolve before 1.0 (no external users yet; the D20\n * shared-pool governor is required before external users). Pin it.\n */\nexport const CONTRACT_VERSION = \"0.1.0-pre.11\" as const;\n\n/** The stability posture of a published contract version. */\nexport type ContractStability = \"provisional\" | \"stable\";\n\n/**\n * The machine-readable manifest of the open contract (D14) - what a harness pins.\n *\n * It enumerates the canonical §11 **core** shapes and the **full** M1–M8 surface\n * by name, stamps {@link CONTRACT_VERSION}, and marks the {@link ContractStability}\n * posture so a consumer can reason about evolution risk. It carries no runtime\n * behavior (M9 adds none - types + a version + a test + docs) and no LLM.\n */\nexport interface ContractManifest {\n /** Stable contract name (NOT a protocol name - D14). */\n readonly name: \"extrovert.review-loop\";\n /** The published contract version (== {@link CONTRACT_VERSION}). */\n readonly version: string;\n /**\n * `provisional` (0.x) until the D20 shared-pool governor lands + external users\n * exist. Provisional ⇒ additive evolution before 1.0 is expected.\n */\n readonly stability: ContractStability;\n /**\n * D14: this is an SDK + skill contract, versioned WITH the SDK - never a wire\n * protocol or a standalone protocol endpoint.\n */\n readonly kind: \"sdk+skill-contract\";\n /** Cross-reference to the spec section that froze these shapes. */\n readonly spec_ref: \"hitl-spec.md#11\";\n /** The five canonical §11 shapes, named verbatim from the spec. */\n readonly core_shapes: readonly string[];\n /** The full published M1–M8 agent-facing contract surface (one 0.x contract; no tiering). */\n readonly shapes: readonly string[];\n /** The agent skills that are part of the contract (D14 - \"skill + SDK\"). */\n readonly skills: readonly string[];\n}\n\n/**\n * The published manifest instance. Frozen so a harness can compare it\n * structurally. The `core_shapes` are the five §11 canonical shapes; `shapes` is\n * the full provisional-0.x surface. Keep this list in sync with the re-exports\n * above - the `contract.test.ts` drift test asserts every named shape resolves.\n */\nexport const CONTRACT_MANIFEST: ContractManifest = {\n name: \"extrovert.review-loop\",\n version: CONTRACT_VERSION,\n stability: \"provisional\",\n kind: \"sdk+skill-contract\",\n spec_ref: \"hitl-spec.md#11\",\n // §11 core - the five canonical example shapes.\n core_shapes: [\"ReviewIntent\", \"ReviewFeedback\", \"DiffJson\", \"Rule\", \"ReviewEvent\"],\n // The FULL published surface (the §11 core plus the rest of M1–M8). Adding a\n // name here without a matching re-export (or vice-versa) breaks the drift test.\n shapes: [\n // §11 core\n \"ReviewIntent\",\n \"ReviewFeedback\",\n \"ReviewFeedbackComment\",\n \"DiffJson\",\n \"DiffHunk\",\n \"Rule\",\n \"ReviewEvent\",\n // submit / states (M1/M2)\n \"ReviewMode\",\n \"ReviewState\",\n \"Review\",\n \"ReviewTurn\",\n \"SubmitForReviewResult\",\n \"QueuedForReviewResult\",\n \"SentResult\",\n // realtime (M3)\n \"ReviewEventReason\",\n \"ReviewEventsResult\",\n \"LearnReviewRuleRequest\",\n \"LearnedReviewRule\",\n \"ReviewEventCursor\",\n // chat / revision / restamp (M5/M7)\n \"PostReviewChatRequest\",\n \"SubmitRevisionRequest\",\n \"RestampReviewRequest\",\n // category registry (M4)\n \"Category\",\n \"ProposeCategoryRequest\",\n \"UpdateCategoryRequest\",\n // graduation + risk dial (M6)\n \"AccountRiskDial\",\n \"EffectiveRiskDial\",\n \"CategoryRiskDial\",\n \"RiskDial\",\n \"GraduationStatus\",\n \"ProposeGraduationRequest\",\n // reconciliation + pacing (M7)\n \"ScanBacklogStatus\",\n \"CategoryPacingState\",\n \"PacingItem\",\n // rules + audit (M4)\n \"SaveRuleRequest\",\n \"RuleAuditEntry\",\n // BYO reviewer decision (M8)\n \"ReviewerAction\",\n \"ReviewDecisionContext\",\n \"ReviewerDecisionRequest\",\n \"ReviewerDecisionResult\",\n // agent commerce request plane\n \"CommerceBlocker\",\n \"QuoteDomainRequest\",\n \"DomainQuote\",\n \"CommerceRequestKind\",\n \"RequestDomainPurchaseRequest\",\n \"RequestPlanChangeRequest\",\n \"ListCommerceRequestsParams\",\n \"CommerceRequest\",\n ],\n // The complete Review Loop behavior lives in the send skill; writing-rule\n // governance remains independently installable and part of this contract.\n skills: [\"extrovert-send-email\", \"extrovert-writing-rules\"],\n} as const;\n\nexport type { LearnReviewRuleRequest, LearnedReviewRule } from \"./models.js\";\n"]}
|